diff --git a/API.md b/API.md
index 0604381..56ee263 100644
--- a/API.md
+++ b/API.md
@@ -65,7 +65,8 @@ console.log(document.string()); // get JSON string
| [options.referenceIntoComponents] | boolean
|
Pass true
to resolve external references to components.
|
**Example**
-```js
+**TypeScript**
+```ts
import { readFileSync, writeFileSync } from 'fs';
import bundle from '@asyncapi/bundler';
@@ -80,3 +81,37 @@ async function main() {
main().catch(e => console.error(e));
```
+
+**JavaScript CJS module system**
+```js
+'use strict';
+
+const { readFileSync, writeFileSync } = require('fs');
+const bundle = require('@asyncapi/bundler');
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
+```
+
+**JavaScript ESM module system**
+```js
+'use strict';
+
+import { readFileSync, writeFileSync } from 'fs';
+import bundle from '@asyncapi/bundler';
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
+```
diff --git a/README.md b/README.md
index 1f1608b..2c8e480 100644
--- a/README.md
+++ b/README.md
@@ -163,9 +163,11 @@ npm install @asyncapi/bundler
AsyncAPI Bundler can be easily used within your JavaScript projects as a Node.js module:
-```ts
-import { readFileSync, writeFileSync } from 'fs';
-import bundle from '@asyncapi/bundler';
+```js
+'use strict';
+
+const { readFileSync, writeFileSync } = require('fs');
+const bundle = require('@asyncapi/bundler');
async function main() {
const filePaths = ['./camera.yml','./audio.yml'];
@@ -264,9 +266,9 @@ components:
```
+
-
-
+**TypeScript**
```ts
import { readFileSync, writeFileSync } from 'fs';
import bundle from '@asyncapi/bundler';
@@ -281,9 +283,42 @@ async function main() {
}
main().catch(e => console.error(e));
-
```
+**JavaScript CJS module system**
+```js
+'use strict';
+
+const { readFileSync, writeFileSync } = require('fs');
+const bundle = require('@asyncapi/bundler');
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
+```
+
+**JavaScript ESM module system**
+```js
+'use strict';
+
+import { readFileSync, writeFileSync } from 'fs';
+import bundle from '@asyncapi/bundler';
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
+
+```
diff --git a/example/bundle-cjs.cjs b/example/bundle-cjs.cjs
new file mode 100644
index 0000000..550099b
--- /dev/null
+++ b/example/bundle-cjs.cjs
@@ -0,0 +1,18 @@
+/**
+ * In case `.cjs` extension is used, Node.js will recognize CJS module system
+ * automatically.
+ */
+
+'use strict';
+
+const { readFileSync, writeFileSync } = require('fs');
+const bundle = require('@asyncapi/bundler');
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
diff --git a/example/bundle-cjs.js b/example/bundle-cjs.js
new file mode 100644
index 0000000..40d84e8
--- /dev/null
+++ b/example/bundle-cjs.js
@@ -0,0 +1,20 @@
+/**
+ * To use `.js` extension with CJS module system, make sure
+ * `package.json`
+ * DOES NOT contain line
+ * `"type": "module",`
+ */
+
+'use strict';
+
+const { readFileSync, writeFileSync } = require('fs');
+const bundle = require('@asyncapi/bundler');
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
diff --git a/example/bundle-esm.js b/example/bundle-esm.js
new file mode 100644
index 0000000..df97a27
--- /dev/null
+++ b/example/bundle-esm.js
@@ -0,0 +1,20 @@
+/**
+ * To use `.js` extension with ESM module system, first add to
+ * `package.json`
+ * line
+ * `"type": "module",`
+ */
+
+'use strict';
+
+import { readFileSync, writeFileSync } from 'fs';
+import bundle from '@asyncapi/bundler';
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
diff --git a/example/bundle-esm.mjs b/example/bundle-esm.mjs
new file mode 100644
index 0000000..46eb275
--- /dev/null
+++ b/example/bundle-esm.mjs
@@ -0,0 +1,18 @@
+/**
+ * In case `.mjs` extension is used, Node.js will recognize ESM module system
+ * automatically.
+ */
+
+'use strict';
+
+import { readFileSync, writeFileSync } from 'fs';
+import bundle from '@asyncapi/bundler';
+
+async function main() {
+ const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ referenceIntoComponents: true,
+ });
+ writeFileSync('asyncapi.yaml', document.yml());
+}
+
+main().catch(e => console.error(e));
diff --git a/example/package.json b/example/package.json
index 67de5b4..9eb3af9 100644
--- a/example/package.json
+++ b/example/package.json
@@ -4,13 +4,18 @@
"description": "",
"main": "index.js",
"scripts": {
- "dev": "node bundle.js"
+ "start": "npm run start:cjs && npm run start:esm && npm run start:ts",
+ "start:cjs": "node bundle-cjs.cjs",
+ "start:esm": "node bundle-esm.mjs",
+ "start:ts": "ts-node bundle.ts"
},
"keywords": [],
"author": "",
"license": "Apache-2.0",
"dependencies": {
"@asyncapi/bundler": "../",
- "@types/node": "^18.7.23"
+ "@types/node": "^18.7.23",
+ "ts-node": "^10.9.1",
+ "typescript": "^4.8.4"
}
}
diff --git a/example/tsconfig.json b/example/tsconfig.json
index 80c821c..246f858 100644
--- a/example/tsconfig.json
+++ b/example/tsconfig.json
@@ -2,6 +2,7 @@
"compilerOptions": {
"types": [
"node"
- ]
+ ],
+ "esModuleInterop": true,
}
}
diff --git a/src/index.ts b/src/index.ts
index 8f45f3d..6f0a55b 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,15 +5,21 @@ import type { AsyncAPIObject } from './spec-types';
/**
*
- * @param {string[]} files Array of stringified AsyncAPI documents in YAML format, that are to be bundled (or array of filepaths, resolved and passed via `Array.map()` and `fs.readFileSync`, which is the same, see `README.md`).
+ * @param {string[]} files Array of stringified AsyncAPI documents in YAML
+ * format, that are to be bundled (or array of filepaths, resolved and passed
+ * via `Array.map()` and `fs.readFileSync`, which is the same, see `README.md`).
* @param {Object} [options]
- * @param {string | object} [options.base] Base object whose properties will be retained.
- * @param {boolean} [options.referenceIntoComponents] Pass `true` to resolve external references to components.
+ * @param {string | object} [options.base] Base object whose properties will be
+ * retained.
+ * @param {boolean} [options.referenceIntoComponents] Pass `true` to resolve
+ * external references to components.
*
* @return {Document}
*
* @example
*
+ * **TypeScript**
+ * ```ts
* import { readFileSync, writeFileSync } from 'fs';
* import bundle from '@asyncapi/bundler';
*
@@ -27,6 +33,41 @@ import type { AsyncAPIObject } from './spec-types';
* }
*
* main().catch(e => console.error(e));
+ * ```
+ *
+ * **JavaScript CJS module system**
+ * ```js
+ * 'use strict';
+ *
+ * const { readFileSync, writeFileSync } = require('fs');
+ * const bundle = require('@asyncapi/bundler');
+ *
+ * async function main() {
+ * const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ * referenceIntoComponents: true,
+ * });
+ * writeFileSync('asyncapi.yaml', document.yml());
+ * }
+ *
+ * main().catch(e => console.error(e));
+ * ```
+ *
+ * **JavaScript ESM module system**
+ * ```js
+ * 'use strict';
+ *
+ * import { readFileSync, writeFileSync } from 'fs';
+ * import bundle from '@asyncapi/bundler';
+ *
+ * async function main() {
+ * const document = await bundle([readFileSync('./main.yaml', 'utf-8')], {
+ * referenceIntoComponents: true,
+ * });
+ * writeFileSync('asyncapi.yaml', document.yml());
+ * }
+ *
+ * main().catch(e => console.error(e));
+ * ```
*
*/
export default async function bundle(files: string[], options: any = {}) {
@@ -47,4 +88,6 @@ export default async function bundle(files: string[], options: any = {}) {
return new Document(resolvedJsons as AsyncAPIObject[], options.base);
}
-export { Document };
+// 'module.exports' is added to maintain backward compatibility with Node.js
+// projects, that use CJS module system.
+module.exports = bundle;