diff --git a/API.md b/API.md index a4768e2..e22e0b6 100644 --- a/API.md +++ b/API.md @@ -79,6 +79,7 @@ console.log(document.string()); // get JSON string | [options] | Object | | | [options.base] | string \| object |

Base object whose properties will be retained.

| | [options.referenceIntoComponents] | boolean |

Pass true to resolve external references to components.

| +| [options.baseDir] | string |

Pass folder path to

| **Example** **TypeScript** diff --git a/src/index.ts b/src/index.ts index ab8b01a..50b0fd8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,6 +15,7 @@ import { resolveV3Document } from './v3/parser'; * retained. * @param {boolean} [options.referenceIntoComponents] Pass `true` to resolve * external references to components. + * @param {string} [options.baseDir] Pass folder path to * * @return {Document} * @@ -81,7 +82,7 @@ export default async function bundle(files: string[], options: any = {}) { const parsedJsons = files.map(file => toJS(file)) as AsyncAPIObject[]; if (typeof options.baseDir !== 'undefined') { - parsedJsons.forEach( parsedJson => resolveBaseFileDir(parsedJson, options.baseDir)) + parsedJsons.forEach(parsedJson => resolveBaseFileDir(parsedJson, options.baseDir)); } const majorVersion = versionCheck(parsedJsons); diff --git a/src/util.ts b/src/util.ts index a800a67..35e57d7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -104,15 +104,15 @@ export function versionCheck(asyncapiDocuments: AsyncAPIObject[]): number { } export function isExternalReference(ref: string): boolean { - return typeof ref === 'string' && !ref.startsWith('#') + return typeof ref === 'string' && !ref.startsWith('#'); } export function notAUrl(ref: string): boolean { try { - new URL(ref) - return false + new URL(ref); + return false; } catch (error) { - return true + return true; } } @@ -126,14 +126,14 @@ export function resolveBaseFileDir(file: object, baseFileDir: string) { json: file, resultType: 'all', path: '$.channels.*.messages.*' - }).forEach( ({parent, parentProperty}: {parent: any, parentProperty: string}) => { - const ref = parent[String(parentProperty)]['$ref'] + }).forEach(({parent, parentProperty}: {parent: any, parentProperty: string}) => { + const ref = parent[String(parentProperty)]['$ref']; if (isExternalReference(ref) && notAUrl(ref)) { // console.log(ref) // console.log(path.resolve(baseFileDir, ref)) - parent[String(parentProperty)]['$ref'] = path.resolve(baseFileDir, ref) + parent[String(parentProperty)]['$ref'] = path.resolve(baseFileDir, ref); } - }) + }); JSONPath({ json: file, @@ -141,12 +141,12 @@ export function resolveBaseFileDir(file: object, baseFileDir: string) { path: '$.operations.*.messages.*' }).forEach( ({parent, parentProperty}: {parent: any, parentProperty: string}) => { - const ref = parent[String(parentProperty)]['$ref'] - if (isExternalReference(ref) && notAUrl(ref)) { + const ref = parent[String(parentProperty)]['$ref']; + if (isExternalReference(ref) && notAUrl(ref)) { // console.log(ref) // console.log(path.resolve(baseFileDir, ref)) - parent[String(parentProperty)]['$ref'] = path.resolve(baseFileDir, ref) - } + parent[String(parentProperty)]['$ref'] = path.resolve(baseFileDir, ref); + } } - ) + ); } \ No newline at end of file diff --git a/tests/lib/index.spec.ts b/tests/lib/index.spec.ts index d027c54..94a808c 100644 --- a/tests/lib/index.spec.ts +++ b/tests/lib/index.spec.ts @@ -89,6 +89,16 @@ describe('[integration testing] bundler should ', () => { ).resolves; }) + + test('should be able to change the baseDir folder', async () => { + const files = ['./tests/specfiles/main.yaml'] + expect( + await bundle( + files.map(file => fs.readFileSync(path.resolve(process.cwd(), file), 'utf-8')), + {baseDir: './tests/specfiles'} + ) + ).resolves + }) }); describe('[unit testing]', () => { diff --git a/tests/specfiles/main.yaml b/tests/specfiles/main.yaml new file mode 100644 index 0000000..bcd042e --- /dev/null +++ b/tests/specfiles/main.yaml @@ -0,0 +1,34 @@ +asyncapi: 3.0.0 +info: + title: Account Service + version: 1.0.0 + description: This service is in charge of processing user signupsA +channels: + userSignedup: + address: 'user/signedup' + messages: + userSignedUpMessage: + $ref: './messages.yaml#/messages/UserSignedUp' + test: + address: '/test' + messages: + testMessage: + $ref: '#/components/messages/TestMessage' +operations: + UserSignedUp: + action: send + channel: + $ref: '#/channels/userSignedup' + messages: + - $ref: './messages.yaml#/messages/UserSignedUp' + TestOpp: + action: send + channel: + $ref: '#/channels/test' + messages: + - $ref: '#/components/messages/TestMessage' +components: + messages: + TestMessage: + payload: + type: string \ No newline at end of file diff --git a/tests/specfiles/messages.yaml b/tests/specfiles/messages.yaml new file mode 100644 index 0000000..e9d7cbf --- /dev/null +++ b/tests/specfiles/messages.yaml @@ -0,0 +1,17 @@ +messages: + UserSignedUp: + payload: + type: object + properties: + displayName: + type: string + description: Name of the user + email: + type: string + format: email + description: Email of the user + UserLoggedIn: + payload: + type: object + properties: + id: string \ No newline at end of file