Skip to content

Commit

Permalink
fix: change func export to CJS syntax, add example with 'require' (#81)
Browse files Browse the repository at this point in the history
  • Loading branch information
aeworxet committed Oct 19, 2022
1 parent 1b19e9c commit 4ed7eae
Show file tree
Hide file tree
Showing 7 changed files with 169 additions and 14 deletions.
37 changes: 36 additions & 1 deletion API.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ console.log(document.string()); // get JSON string
| [options.referenceIntoComponents] | <code>boolean</code> | <p>Pass <code>true</code> to resolve external references to components.</p> |

**Example**
```js
**TypeScript**
```ts
import { readFileSync, writeFileSync } from 'fs';
import bundle from '@asyncapi/bundler';

Expand All @@ -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));
```
47 changes: 41 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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'];
Expand Down Expand Up @@ -264,9 +266,9 @@ components:

```
</details>
<br />

</br>

**TypeScript**
```ts
import { readFileSync, writeFileSync } from 'fs';
import bundle from '@asyncapi/bundler';
Expand All @@ -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));

```

<a name="bundle"></a>

Expand Down
20 changes: 20 additions & 0 deletions example/bundle-cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* To use 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));
20 changes: 20 additions & 0 deletions example/bundle-esm.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* To use 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));
3 changes: 2 additions & 1 deletion example/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"compilerOptions": {
"types": [
"node"
]
],
"esModuleInterop": true,
}
}
54 changes: 49 additions & 5 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
*
Expand All @@ -27,9 +33,44 @@ 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 = {}) {
async function bundle(files: string[], options: any = {}) {
if (typeof options.base !== 'undefined') {
options.base = toJS(options.base);
}
Expand All @@ -47,4 +88,7 @@ export default async function bundle(files: string[], options: any = {}) {
return new Document(resolvedJsons as AsyncAPIObject[], options.base);
}

export { Document };
// 'module.exports' instead of direct export of the function is used, to
// maintain backward compatibility with Node.js projects, that use CJS module
// system.
module.exports = bundle;
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"lib": [
"esnext",
],
"declaration": true,
"declaration": false,
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
Expand Down

0 comments on commit 4ed7eae

Please sign in to comment.