{"action":"created","issue":{"url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/301","repository_url":"https://api.github.com/repos/nodejs/abi-stable-node","labels_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/301/labels{/name}","comments_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/301/comments","events_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/301/events","html_url":"https://github.com/nodejs/abi-stable-node/issues/301","id":318132112,"node_id":"MDU6SXNzdWUzMTgxMzIxMTI=","number":301,"title":"Document guidance on adding APIs to N-API","user":{"login":"mhdawson","id":9373002,"node_id":"MDQ6VXNlcjkzNzMwMDI=","avatar_url":"https://avatars3.githubusercontent.com/u/9373002?v=4","gravatar_id":"","url":"https://api.github.com/users/mhdawson","html_url":"https://github.com/mhdawson","followers_url":"https://api.github.com/users/mhdawson/followers","following_url":"https://api.github.com/users/mhdawson/following{/other_user}","gists_url":"https://api.github.com/users/mhdawson/gists{/gist_id}","starred_url":"https://api.github.com/users/mhdawson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhdawson/subscriptions","organizations_url":"https://api.github.com/users/mhdawson/orgs","repos_url":"https://api.github.com/users/mhdawson/repos","events_url":"https://api.github.com/users/mhdawson/events{/privacy}","received_events_url":"https://api.github.com/users/mhdawson/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"digitalinfinity","id":158390,"node_id":"MDQ6VXNlcjE1ODM5MA==","avatar_url":"https://avatars2.githubusercontent.com/u/158390?v=4","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false},"assignees":[{"login":"digitalinfinity","id":158390,"node_id":"MDQ6VXNlcjE1ODM5MA==","avatar_url":"https://avatars2.githubusercontent.com/u/158390?v=4","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/nodejs/abi-stable-node/milestones/7","html_url":"https://github.com/nodejs/abi-stable-node/milestone/7","labels_url":"https://api.github.com/repos/nodejs/abi-stable-node/milestones/7/labels","id":3191254,"node_id":"MDk6TWlsZXN0b25lMzE5MTI1NA==","number":7,"title":"Milestone 10","description":"","creator":{"login":"mhdawson","id":9373002,"node_id":"MDQ6VXNlcjkzNzMwMDI=","avatar_url":"https://avatars3.githubusercontent.com/u/9373002?v=4","gravatar_id":"","url":"https://api.github.com/users/mhdawson","html_url":"https://github.com/mhdawson","followers_url":"https://api.github.com/users/mhdawson/followers","following_url":"https://api.github.com/users/mhdawson/following{/other_user}","gists_url":"https://api.github.com/users/mhdawson/gists{/gist_id}","starred_url":"https://api.github.com/users/mhdawson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhdawson/subscriptions","organizations_url":"https://api.github.com/users/mhdawson/orgs","repos_url":"https://api.github.com/users/mhdawson/repos","events_url":"https://api.github.com/users/mhdawson/events{/privacy}","received_events_url":"https://api.github.com/users/mhdawson/received_events","type":"User","site_admin":false},"open_issues":9,"closed_issues":3,"state":"open","created_at":"2018-03-15T17:37:29Z","updated_at":"2018-05-10T18:03:28Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2018-04-26T17:46:17Z","updated_at":"2018-06-12T01:50:38Z","closed_at":null,"author_association":"MEMBER","body":"@digitalinfinity has a start, should add here."},"comment":{"url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/comments/396439972","html_url":"https://github.com/nodejs/abi-stable-node/issues/301#issuecomment-396439972","issue_url":"https://api.github.com/repos/nodejs/abi-stable-node/issues/301","id":396439972,"node_id":"MDEyOklzc3VlQ29tbWVudDM5NjQzOTk3Mg==","user":{"login":"digitalinfinity","id":158390,"node_id":"MDQ6VXNlcjE1ODM5MA==","avatar_url":"https://avatars2.githubusercontent.com/u/158390?v=4","gravatar_id":"","url":"https://api.github.com/users/digitalinfinity","html_url":"https://github.com/digitalinfinity","followers_url":"https://api.github.com/users/digitalinfinity/followers","following_url":"https://api.github.com/users/digitalinfinity/following{/other_user}","gists_url":"https://api.github.com/users/digitalinfinity/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalinfinity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalinfinity/subscriptions","organizations_url":"https://api.github.com/users/digitalinfinity/orgs","repos_url":"https://api.github.com/users/digitalinfinity/repos","events_url":"https://api.github.com/users/digitalinfinity/events{/privacy}","received_events_url":"https://api.github.com/users/digitalinfinity/received_events","type":"User","site_admin":false},"created_at":"2018-06-12T01:50:38Z","updated_at":"2018-06-12T01:50:38Z","author_association":"COLLABORATOR","body":"The following are a set of proposed principles to add an API to the N-API surface. Text in _italics_ are my comments/annotations. Feedback/thoughts welcome- I'm throwing this out there to start the discussion. Thanks to @kfarnung for his early feedback.\r\n\r\n## N-API design principles\r\n\r\n-\tA new API **must** adhere to N-API API shape and spirit _(spirit is kind of what @mhdawson talks about here)_\r\n    - **Must** be a C API\r\n    - **Must** not throw exceptions\r\n    - **Must** return napi_status\r\n    - **Should** consume napi_env\r\n    - **Must** operate only on primitive data types, pointers to primitive datatypes or opaque handles\r\n    - **Must** be a necessary API and not a nice to have. Convenience APIs belong in node-addon-api.\r\n    - **Must** not change the signature of an existing N-API API  or break ABI compatibility with other versions of Node.\r\n-\tNew API **should** be agnostic towards the underlying JavaScript VM\r\n-\tNew API request PRs **must** have a corresponding documentation update\r\n-\tNew API request PRs **must** be tagged as **n-api**.\r\n-\tThere **must** be at least one test case showing how to use the API\r\n-\tThere **should** be at least one test case per interesting use of the API. \r\n-\tThere **should** be a sample provided that operates in a realistic way (operating how a real addon would be written)\r\n-\tA new API **should** be discussed at the N-API working group meeting\r\n-\tA new API addition **must** be signed off by at least one member of the N-API WG\r\n-\tA new API addition **should** be simultaneously implemented in at least one other VM implementation of Node.\r\n-\tA new API **must** be considered experimental for at least one minor version release of Node before it can be considered for promotion out of experimental\r\n    - Experimental APIs **must** be documented as such\r\n    - Experimental APIs **must** require an explicit flag to be set to opt-in\r\n    - Experimental APIs **must** be considered for backport\r\n    - Experimental status exit criteria **must** involve at least the following:\r\n        - A new PR **must** be opened in nodejs/node to remove experimental status. This PR **must** be tagged as **n-api** and **semver-minor**.\r\n        - Exiting an API from experimental **must** be signed off by the working group.\r\n        - If a backport is merited, an API **must** have a down level implementation.\r\n        - The API **must** be used by a published real-world module.\r\n        - The API **must** be implemented in a node implementation with an alternate VM _(Node-ChakraCore can provide SLAs here e.g we’ll review PRs within a week, attempt best effort to implement within a week or sign off within that time)_\r\n\r\n"}}
{"actor":{"display_login":"digitalinfinity"}}