From eddf73a2d0ad0edd66eb6f581a9864a18348ca47 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 10 May 2022 17:50:37 -0700 Subject: [PATCH 01/11] Simplify release bundle by removing index.js --- scripts/release-build.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/scripts/release-build.js b/scripts/release-build.js index 252ac5b9427bbb..f1ed75e9ce9be4 100644 --- a/scripts/release-build.js +++ b/scripts/release-build.js @@ -24,12 +24,6 @@ async function writeData() { await fs.writeFile(dest, data); } -async function writeIndex() { - const dest = path.resolve(directory, 'index.js'); - const content = `module.exports = require("./data.json");\n`; - await fs.writeFile(dest, content); -} - // Returns an array of promises for copying of all files that don't need transformation async function copyFiles() { for (const file of verbatimFiles) { @@ -41,7 +35,7 @@ async function copyFiles() { function createManifest() { const full = require('../package.json'); - const minimal = { main: 'index.js' }; + const minimal = { main: 'data.json' }; const minimalKeys = [ 'name', @@ -89,7 +83,6 @@ async function main() { await writeManifest(); await writeData(); - await writeIndex(); await copyFiles(); console.log('Data bundle is ready'); From 3aecbe231c91bad030333868dd9831b593f89e27 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:02:59 -0700 Subject: [PATCH 02/11] Add a wrapper for NodeJS v12-v14 with ESM --- scripts/release/build.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/release/build.js b/scripts/release/build.js index b7af513c4fcdef..023145d4db73d0 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -26,6 +26,12 @@ async function writeData() { await fs.writeFile(dest, data); } +async function writeIndexForESM1214() { + const dest = path.resolve(directory, 'nodejs12-14.js'); + const content = `import fs from 'node:fs';\nconst bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url)));\n`; + await fs.writeFile(dest, content); +} + // Returns an array of promises for copying of all files that don't need transformation async function copyFiles() { for (const file of verbatimFiles) { @@ -37,7 +43,13 @@ async function copyFiles() { function createManifest() { const full = require('../../package.json'); - const minimal = { main: 'data.json' }; + const minimal = { + main: 'data.json', + exports: { + '.': './data.json', + 'Node12-14': './nodejs12-14.js', + }, + }; const minimalKeys = [ 'name', @@ -85,6 +97,7 @@ async function main() { await writeManifest(); await writeData(); + await writeIndexForESM1214(); await copyFiles(); console.log('Data bundle is ready'); From ce35749735e913b6172fdab78db72479f1cc20c8 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:10:54 -0700 Subject: [PATCH 03/11] Update readme --- README.md | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 421e5955211be9..b1f855c981a257 100644 --- a/README.md +++ b/README.md @@ -14,20 +14,58 @@ Read how this project is [governed](GOVERNANCE.md). Chat on [chat.mozilla.org#mdn](https://chat.mozilla.org/#/room/#mdn:mozilla.org). -## Installation +## Installation and Import + +### NodeJS You can install `@mdn/browser-compat-data` as a node package. ``` npm install @mdn/browser-compat-data +...or... +yarn add @mdn/browser-compat-data ``` -## Usage +Then, you can import BCD into your project with either `import` or `require()`: ```js +// ESM w/ Import Assertions (NodeJS 16+) +import bcd from '@mdn/browser-compat-data' assert { type: 'json' }; +// ...or... +// ESM Wrapper for older NodeJS versions (NodeJS v12+) +import bcd from '@mdn/browser-compat-data/Node12-14'; +// ...or... +// CommonJS Module (Any NodeJS) const bcd = require('@mdn/browser-compat-data'); -bcd.css.properties.background; +``` + +### Deno/Browsers + +You can import `@mdn/browser-compat-data` using a CDN. + +```js +import bcd from 'https://unpkg.com/@mdn/browser-compat-data' assert { type: 'json' }; +``` + +### Other Languages + +You can obtain the raw compatibility data for `@mdn/browser-compat-data` using a CDN and loading the `data.json` file included in releases. + +```py +https://unpkg.com/@mdn/browser-compat-data/data.json +``` + +## Usage + +Once you have imported BCD, you can access the compatibility data for any feature by accessing the properties of the dictionary. + +```js +// Grab the desired support statement +const support = bcd.css.properties.background.__compat; // returns a compat data object (see schema) + +// You may use any syntax to obtain dictionary items +const support = bcd['api']['Document']['body']['__compat']; ``` ## Package contents From 9eff7e78c37f72464a6d66a98072bd891adab9e7 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:13:46 -0700 Subject: [PATCH 04/11] Fix wrapper script --- scripts/release/build.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/release/build.js b/scripts/release/build.js index 023145d4db73d0..7923f44874dd30 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -27,8 +27,8 @@ async function writeData() { } async function writeIndexForESM1214() { - const dest = path.resolve(directory, 'nodejs12-14.js'); - const content = `import fs from 'node:fs';\nconst bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url)));\n`; + const dest = path.resolve(directory, 'nodejs12-14.mjs'); + const content = `import fs from 'node:fs';\nconst bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url)));\nexport default bcd;\n`; await fs.writeFile(dest, content); } @@ -47,7 +47,7 @@ function createManifest() { main: 'data.json', exports: { '.': './data.json', - 'Node12-14': './nodejs12-14.js', + './Node12-14': './nodejs12-14.mjs', }, }; From 5681ffa4612dd43d68ab2019a290758c5bee218c Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:28:50 -0700 Subject: [PATCH 05/11] Rename import to "NodeWrapper" --- README.md | 2 +- scripts/release/build.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b1f855c981a257..866eca13721328 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Then, you can import BCD into your project with either `import` or `require()`: import bcd from '@mdn/browser-compat-data' assert { type: 'json' }; // ...or... // ESM Wrapper for older NodeJS versions (NodeJS v12+) -import bcd from '@mdn/browser-compat-data/Node12-14'; +import bcd from '@mdn/browser-compat-data/NodeWrapper'; // ...or... // CommonJS Module (Any NodeJS) const bcd = require('@mdn/browser-compat-data'); diff --git a/scripts/release/build.js b/scripts/release/build.js index 7923f44874dd30..14537b759b7ab8 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -26,8 +26,8 @@ async function writeData() { await fs.writeFile(dest, data); } -async function writeIndexForESM1214() { - const dest = path.resolve(directory, 'nodejs12-14.mjs'); +async function writeWrapper() { + const dest = path.resolve(directory, 'nodewrapper.mjs'); const content = `import fs from 'node:fs';\nconst bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url)));\nexport default bcd;\n`; await fs.writeFile(dest, content); } @@ -47,7 +47,7 @@ function createManifest() { main: 'data.json', exports: { '.': './data.json', - './Node12-14': './nodejs12-14.mjs', + './NodeWrapper': './nodewrapper.mjs', }, }; @@ -97,7 +97,7 @@ async function main() { await writeManifest(); await writeData(); - await writeIndexForESM1214(); + await writeWrapper(); await copyFiles(); console.log('Data bundle is ready'); From 3bfbb915c842cc23f693695ae5372e9182cab180 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:52:43 -0700 Subject: [PATCH 06/11] Update readme using suggestions from code review --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 866eca13721328..d3805c46669b61 100644 --- a/README.md +++ b/README.md @@ -20,21 +20,25 @@ Chat on [chat.mozilla.org#mdn](https://chat.mozilla.org/#/room/#mdn:mozilla.org) You can install `@mdn/browser-compat-data` as a node package. -``` +```bash npm install @mdn/browser-compat-data -...or... +# ...or... yarn add @mdn/browser-compat-data ``` Then, you can import BCD into your project with either `import` or `require()`: ```js -// ESM w/ Import Assertions (NodeJS 16+) +// ESM with Import Assertions (NodeJS 16+) import bcd from '@mdn/browser-compat-data' assert { type: 'json' }; + // ...or... + // ESM Wrapper for older NodeJS versions (NodeJS v12+) import bcd from '@mdn/browser-compat-data/NodeWrapper'; + // ...or... + // CommonJS Module (Any NodeJS) const bcd = require('@mdn/browser-compat-data'); ``` From 73066acd3a7713e594bb5d767b10dfb43b91e55b Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 03:55:22 -0700 Subject: [PATCH 07/11] Update scripts/release/build.js Co-authored-by: Claas Augner --- scripts/release/build.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/release/build.js b/scripts/release/build.js index 14537b759b7ab8..e76b6682b50f68 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -28,7 +28,10 @@ async function writeData() { async function writeWrapper() { const dest = path.resolve(directory, 'nodewrapper.mjs'); - const content = `import fs from 'node:fs';\nconst bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url)));\nexport default bcd;\n`; + const content = `import fs from 'node:fs'; +const bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url))); +export default bcd; +`; await fs.writeFile(dest, content); } From 3715c59886be531a9a97cdf9ad0cf254de9e2ff1 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 06:00:38 -0700 Subject: [PATCH 08/11] Rename NodeWrapper -> wrapper --- README.md | 2 +- scripts/release/build.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3805c46669b61..ee01d3bdf7c213 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ import bcd from '@mdn/browser-compat-data' assert { type: 'json' }; // ...or... // ESM Wrapper for older NodeJS versions (NodeJS v12+) -import bcd from '@mdn/browser-compat-data/NodeWrapper'; +import bcd from '@mdn/browser-compat-data/wrapper'; // ...or... diff --git a/scripts/release/build.js b/scripts/release/build.js index e76b6682b50f68..02e9395da79308 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -50,7 +50,7 @@ function createManifest() { main: 'data.json', exports: { '.': './data.json', - './NodeWrapper': './nodewrapper.mjs', + './wrapper': './nodewrapper.mjs', }, }; From b58c99a1e4109aa4a9bd5f84343a0cb164e652af Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 23:28:23 -0700 Subject: [PATCH 09/11] Add comment to wrapper file --- scripts/release/build.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/release/build.js b/scripts/release/build.js index 02e9395da79308..d10a51951f11d5 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -29,6 +29,8 @@ async function writeData() { async function writeWrapper() { const dest = path.resolve(directory, 'nodewrapper.mjs'); const content = `import fs from 'node:fs'; + const content = `// A small wrapper to allow ESM imports on older NodeJS versions that don't support import assertions +import fs from 'node:fs'; const bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url))); export default bcd; `; From 945770014e477525c26b9c0ee1c9a1cd5c6bc090 Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Tue, 17 May 2022 23:28:35 -0700 Subject: [PATCH 10/11] Rename wrapper -> legacyNode --- scripts/release/build.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/release/build.js b/scripts/release/build.js index d10a51951f11d5..d384ba458f4932 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -27,8 +27,7 @@ async function writeData() { } async function writeWrapper() { - const dest = path.resolve(directory, 'nodewrapper.mjs'); - const content = `import fs from 'node:fs'; + const dest = path.resolve(directory, 'legacynode.mjs'); const content = `// A small wrapper to allow ESM imports on older NodeJS versions that don't support import assertions import fs from 'node:fs'; const bcd = JSON.parse(fs.readFileSync(new URL('./data.json', import.meta.url))); @@ -52,7 +51,7 @@ function createManifest() { main: 'data.json', exports: { '.': './data.json', - './wrapper': './nodewrapper.mjs', + './legacyNode': './legacynode.mjs', }, }; From 5606f6b6843a9bd0bfb17a744adcb44ddc8ef4db Mon Sep 17 00:00:00 2001 From: "Queen Vinyl Da.i'gyu-Kazotetsu" Date: Wed, 18 May 2022 02:24:43 -0700 Subject: [PATCH 11/11] Name the wrapper "forLegacyNode" --- README.md | 2 +- scripts/release/build.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ee01d3bdf7c213..346d0ef6c52be4 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ import bcd from '@mdn/browser-compat-data' assert { type: 'json' }; // ...or... // ESM Wrapper for older NodeJS versions (NodeJS v12+) -import bcd from '@mdn/browser-compat-data/wrapper'; +import bcd from '@mdn/browser-compat-data/forLegacyNode'; // ...or... diff --git a/scripts/release/build.js b/scripts/release/build.js index d384ba458f4932..b1d88e1a5390f5 100644 --- a/scripts/release/build.js +++ b/scripts/release/build.js @@ -51,7 +51,7 @@ function createManifest() { main: 'data.json', exports: { '.': './data.json', - './legacyNode': './legacynode.mjs', + './forLegacyNode': './legacynode.mjs', }, };