diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/.eslintignore b/packages/apidom-parser-adapter-asyncapi-yaml-2/.eslintignore index 856320e627..23853b909a 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/.eslintignore +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/.eslintignore @@ -1,8 +1,8 @@ +/**/*.js +/**/*.mjs +/**/*.cjs /dist -/es -/cjs /types /config /.nyc_output /node_modules -/**/*.js diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/.gitignore b/packages/apidom-parser-adapter-asyncapi-yaml-2/.gitignore index 1ad4f5ef03..c0ec9fd856 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/.gitignore +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/.gitignore @@ -1,6 +1,7 @@ +/src/**/*.mjs +/src/**/*.cjs +/test/**/*.mjs /dist -/es -/cjs /types /NOTICE /swagger-api-apidom-parser-adapter-asyncapi-yaml-2-*.tgz diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/.mocharc.json b/packages/apidom-parser-adapter-asyncapi-yaml-2/.mocharc.json index e923c24114..edb4cc79f2 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/.mocharc.json +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/.mocharc.json @@ -1,5 +1,6 @@ { "recursive": true, - "spec": "test/**/*.ts", - "file": ["test/mocha-bootstrap.cjs"] + "spec": "test/**/*.mjs", + "file": ["test/mocha-bootstrap.mjs"], + "ignore": ["test/perf/**/*.mjs"] } diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/package.json b/packages/apidom-parser-adapter-asyncapi-yaml-2/package.json index 928d29e9dd..9a81178f6d 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/package.json +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/package.json @@ -9,29 +9,29 @@ "type": "module", "sideEffects": false, "unpkg": "./dist/apidom-parser-apdater-asyncapi-yaml-2.browser.min.js", - "main": "./cjs/adapter.cjs", + "main": "./src/adapter.cjs", "exports": { "types": "./types/dist.d.ts", - "import": "./es/adapter.mjs", - "require": "./cjs/adapter.cjs" + "import": "./src/adapter.mjs", + "require": "./src/adapter.cjs" }, "types": "./types/dist.d.ts", "scripts": { "build": "npm run clean && run-p --max-parallel ${CPU_CORES:-2} typescript:declaration build:es build:cjs build:umd:browser", - "build:es": "cross-env BABEL_ENV=es babel src --out-dir es --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward'", - "build:cjs": "cross-env BABEL_ENV=cjs babel src --out-dir cjs --extensions '.ts' --out-file-extension '.cjs' --root-mode 'upward'", + "build:es": "cross-env BABEL_ENV=es babel src --out-dir src --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward'", + "build:cjs": "cross-env BABEL_ENV=cjs babel src --out-dir src --extensions '.ts' --out-file-extension '.cjs' --root-mode 'upward'", "build:umd:browser": "cross-env BABEL_ENV=browser webpack --config config/webpack/browser.config.js --progress", "lint": "eslint ./", "lint:fix": "eslint ./ --fix", - "clean": "rimraf ./es ./cjs ./dist ./types", + "clean": "rimraf --glob 'src/**/*.mjs' 'src/**/*.cjs' 'test/**/*.mjs' ./dist ./types", "typescript:check-types": "tsc --noEmit", "typescript:declaration": "tsc -p declaration.tsconfig.json && rollup -c config/rollup/types.dist.js", - "test": "cross-env NODE_ENV=test BABEL_ENV=cjs mocha", - "perf": "cross-env NODE_ENV=test BABEL_ENV=cjs node ./test/perf/index.cjs", - "perf:lexical-analysis": "cross-env NODE_ENV=test BABEL_ENV=cjs node ./test/perf/lexical-analysis.cjs", - "perf:syntactic-analysis": "cross-env NODE_ENV=test BABEL_ENV=cjs node ./test/perf/syntactic-analysis.cjs", - "perf:refract": "cross-env NODE_ENV=test BABEL_ENV=cjs node ./test/perf/refract.cjs", - "perf:parse": "cross-env NODE_ENV=test BABEL_ENV=cjs node ./test/perf/parse.cjs", + "test": "npm run build:es && cross-env BABEL_ENV=es babel test --out-dir test --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test mocha", + "perf": "cross-env BABEL_ENV=es babel ./test/perf/index.ts --out-file ./test/perf/index.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/index.mjs", + "perf:lexical-analysis": "cross-env BABEL_ENV=es babel ./test/perf/lexical-analysis.ts --out-file ./test/perf/lexical-analysis.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/lexical-analysis.mjs", + "perf:syntactic-analysis": "cross-env BABEL_ENV=es babel ./test/perf/syntactic-analysis.ts --out-file ./test/perf/syntactic-analysis.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/syntactic-analysis.mjs", + "perf:refract": "cross-env BABEL_ENV=es babel ./test/perf/refract.ts --out-file ./test/perf/refract.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/refract.mjs", + "perf:parse": "cross-env BABEL_ENV=es babel ./test/perf/parse.ts --out-file ./test/perf/parse.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/parse.mjs", "prepack": "copyfiles -u 3 ../../LICENSES/* LICENSES && copyfiles -u 2 ../../NOTICE .", "postpack": "rimraf NOTICE LICENSES" }, @@ -51,9 +51,9 @@ "ramda-adjunct": "^5.0.0" }, "files": [ - "cjs/", + "src/**/*.mjs", + "src/**/*.cjs", "dist/", - "es/", "types/dist.d.ts", "LICENSES", "NOTICE", diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/.eslintrc b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/.eslintrc index 85759a803c..c47eea4f48 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/.eslintrc +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/.eslintrc @@ -24,15 +24,32 @@ "mocha/no-top-level-hooks": 2, "mocha/no-identical-title": 2, "mocha/no-nested-tests": 2, - "mocha/no-exclusive-tests": 2 - }, - "overrides": [{ - "files": ["mocha-bootstrap.cjs"], - "parserOptions": { - "sourceType": "script" - }, - "rules": { - "@typescript-eslint/no-var-requires": 0 - } - }] + "mocha/no-exclusive-tests": 2, + "no-underscore-dangle": 0, + "import/no-relative-packages": 0, + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "variable", + "format": ["camelCase", "PascalCase", "UPPER_CASE"], + "leadingUnderscore": "forbid" + }, + { + "selector": "variable", + "format": null, + "filter": { + "regex": "^__dirname$", + "match": true + } + }, + { + "selector": "variable", + "format": null, + "filter": { + "regex": "^__filename$", + "match": true + } + } + ] + } } diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/__snapshots__/adapter.ts.snap b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/__snapshots__/adapter.mjs.snap similarity index 100% rename from packages/apidom-parser-adapter-asyncapi-yaml-2/test/__snapshots__/adapter.ts.snap rename to packages/apidom-parser-adapter-asyncapi-yaml-2/test/__snapshots__/adapter.mjs.snap diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts index d7f78fe42a..3682f0bc9b 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts @@ -1,5 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; @@ -7,6 +8,7 @@ import { isAsyncApi2Element } from '@swagger-api/apidom-ns-asyncapi-2'; import * as adapter from '../src/adapter'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const yamlSpec = fs.readFileSync(path.join(__dirname, 'fixtures', 'sample-api.yaml')).toString(); const jsonSpec = fs.readFileSync(path.join(__dirname, 'fixtures', 'sample-api.json')).toString(); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.cjs deleted file mode 100644 index bc8ce3c8fc..0000000000 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.cjs +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable */ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); - -/** - * Configure snapshot testing. - */ -const chai = require('chai'); -const { jestSnapshotPlugin, addSerializer } = require('mocha-chai-jest-snapshot'); - -const jestApiDOMSerializer = require('../../../scripts/jest-serializer-apidom.cjs'); -const jestStringSerializer = require('../../../scripts/jest-serializer-string.cjs'); - -chai.use(jestSnapshotPlugin()); -addSerializer(jestApiDOMSerializer); -addSerializer(jestStringSerializer); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.ts b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.ts new file mode 100644 index 0000000000..4f8d8adf2e --- /dev/null +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/mocha-bootstrap.ts @@ -0,0 +1,11 @@ +import * as chai from 'chai'; +import { jestSnapshotPlugin, addSerializer } from 'mocha-chai-jest-snapshot'; + +// @ts-ignore +import * as jestApiDOMSerializer from '../../../scripts/jest-serializer-apidom'; +// @ts-ignore +import * as jestStringSerializer from '../../../scripts/jest-serializer-string'; + +chai.use(jestSnapshotPlugin()); +addSerializer(jestApiDOMSerializer); +addSerializer(jestStringSerializer); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.cjs deleted file mode 100644 index dd90fdf235..0000000000 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.cjs +++ /dev/null @@ -1,25 +0,0 @@ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); - -const Benchmark = require('benchmark'); - -const lexicalAnalysisBench = require('./lexical-analysis.cjs'); -const syntacticAnalysisBench = require('./syntactic-analysis.cjs'); -const refractBench = require('./refract.cjs'); -const parseBench = require('./parse.cjs'); - -const suite = new Benchmark.Suite(); - -suite - .add(lexicalAnalysisBench) - .add(syntacticAnalysisBench) - .add(refractBench) - .add(parseBench) - // add listeners - .on('cycle', function (event) { - console.info(String(event.target)); - }) - .on('complete', function () { - console.info('\nAll benchmarks have completed'); - }) - // run - .run(); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.ts b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.ts new file mode 100644 index 0000000000..159fc5ac0c --- /dev/null +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/index.ts @@ -0,0 +1,24 @@ +import Benchmark from 'benchmark'; +import type { Event } from 'benchmark'; + +import lexicalAnalysisBench from './lexical-analysis'; +import syntacticAnalysisBench from './syntactic-analysis'; +import refractBench from './refract'; +import parseBench from './parse'; + +const suite = new Benchmark.Suite(); + +suite + .add(lexicalAnalysisBench) + .add(syntacticAnalysisBench) + .add(refractBench) + .add(parseBench) + // add listeners + .on('cycle', function (event: Event) { + console.info(String(event.target)); + }) + .on('complete', function () { + console.info('\nAll benchmarks have completed'); + }) + // run + .run(); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.ts similarity index 50% rename from packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.cjs rename to packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.ts index f2ac518551..4a5ab7c02c 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.cjs +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/lexical-analysis.ts @@ -1,10 +1,11 @@ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); - -const fs = require('node:fs'); -const path = require('node:path'); -const Benchmark = require('benchmark'); -const { lexicalAnalysis } = require('@swagger-api/apidom-parser-adapter-yaml-1-2'); +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import Benchmark from 'benchmark'; +import type { Deferred, Event } from 'benchmark'; +import { lexicalAnalysis } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const fixturePath = path.join(__dirname, 'fixtures/asyncapi.yaml'); const source = fs.readFileSync(fixturePath).toString(); @@ -13,22 +14,22 @@ const options = { defer: true, minSamples: 1400, expected: '1,117 ops/sec ±2.33% (1473 runs sampled)', - async fn(deferred) { + async fn(deferred: Deferred) { await lexicalAnalysis(source); deferred.resolve(); }, }; -module.exports = options; +export default options; // we're running as a script -if (module.parent === null) { +if (import.meta.url === `file://${process.argv[1]}`) { const bench = new Benchmark({ ...options, - onComplete(event) { + onComplete(event: Event) { console.info(String(event.target)); }, - onError(event) { + onError(event: Event) { console.error(event); }, }); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.ts similarity index 59% rename from packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.cjs rename to packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.ts index 239291f8bb..b9c7ae8ab8 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.cjs +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/parse.ts @@ -1,11 +1,12 @@ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import Benchmark from 'benchmark'; +import type { Deferred, Event } from 'benchmark'; -const fs = require('node:fs'); -const path = require('node:path'); -const Benchmark = require('benchmark'); - -const { parse } = require('../../src/adapter'); +import { parse } from '../../src/adapter'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const fixturePath = path.join(__dirname, 'fixtures/asyncapi.yaml'); const source = fs.readFileSync(fixturePath).toString(); @@ -14,7 +15,7 @@ const options = { defer: true, minSamples: 600, expected: '8.26 ops/sec ±0.92% (639 runs sampled)', - async fn(deferred) { + async fn(deferred: Deferred) { await parse(source); deferred.resolve(); }, @@ -29,16 +30,16 @@ const options = { * Refract stage: 2,85 ms */ -module.exports = options; +export default options; // we're running as a script -if (module.parent === null) { +if (import.meta.url === `file://${process.argv[1]}`) { const bench = new Benchmark({ ...options, - onComplete(event) { + onComplete(event: Event) { console.info(String(event.target)); }, - onError(event) { + onError(event: Event) { console.error(event); }, }); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.cjs deleted file mode 100644 index bbe1a4f354..0000000000 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.cjs +++ /dev/null @@ -1,37 +0,0 @@ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); - -const fs = require('node:fs'); -const path = require('node:path'); -const Benchmark = require('benchmark'); -const { ObjectElement } = require('apidom-core'); -const { AsyncApi2Element } = require('apidom-ns-asyncapi-2'); - -const fixturePath = path.join(__dirname, 'fixtures/asyncapi.yaml'); -const source = fs.readFileSync(fixturePath).toString(); -const pojo = JSON.parse(source); -const genericObjectElement = new ObjectElement(pojo); - -const options = { - name: 'refract', - minSamples: 600, - expected: '350 ops/sec ±1.29% (679 runs sampled)', - fn() { - AsyncApi2Element.refract(genericObjectElement); - }, -}; - -module.exports = options; - -// we're running as a script -if (module.parent === null) { - const bench = new Benchmark({ - ...options, - onComplete(event) { - console.info(String(event.target)); - }, - onError(event) { - console.error(event); - }, - }); - bench.run(); -} diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.ts b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.ts new file mode 100644 index 0000000000..31cdb96c92 --- /dev/null +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/refract.ts @@ -0,0 +1,41 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import Benchmark from 'benchmark'; +import type { Event } from 'benchmark'; +import { ObjectElement, toValue } from '@swagger-api/apidom-core'; +import { AsyncApi2Element } from '@swagger-api/apidom-ns-asyncapi-2'; + +import { parse } from '../../src/adapter'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const fixturePath = path.join(__dirname, 'fixtures/asyncapi.yaml'); +const source = fs.readFileSync(fixturePath).toString(); +const pojo = toValue((await parse(source)).result); + +const genericObjectElement = new ObjectElement(pojo); + +const options = { + name: 'refract', + minSamples: 600, + expected: '350 ops/sec ±1.29% (679 runs sampled)', + fn() { + AsyncApi2Element.refract(genericObjectElement); + }, +}; + +export default options; + +// we're running as a script +if (import.meta.url === `file://${process.argv[1]}`) { + const bench = new Benchmark({ + ...options, + onComplete(event: Event) { + console.info(String(event.target)); + }, + onError(event: Event) { + console.error(event); + }, + }); + bench.run(); +} diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.cjs b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.ts similarity index 52% rename from packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.cjs rename to packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.ts index 7466946e4a..4d54ae1120 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.cjs +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/perf/syntactic-analysis.ts @@ -1,13 +1,11 @@ -require('@babel/register')({ extensions: ['.js', '.ts'], rootMode: 'upward' }); - -const fs = require('node:fs'); -const path = require('node:path'); -const Benchmark = require('benchmark'); -const { - lexicalAnalysis, - syntacticAnalysis, -} = require('@swagger-api/apidom-parser-adapter-yaml-1-2'); +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import Benchmark from 'benchmark'; +import type { Deferred, Event } from 'benchmark'; +import { lexicalAnalysis, syntacticAnalysis } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); const fixturePath = path.join(__dirname, 'fixtures/asyncapi.yaml'); const source = fs.readFileSync(fixturePath).toString(); const cstP = lexicalAnalysis(source); @@ -17,23 +15,23 @@ const options = { defer: true, minSamples: 600, expected: '8.70 ops/sec ±0.76% (639 runs sampled)', - async fn(deferred) { + async fn(deferred: Deferred) { const cst = await cstP; syntacticAnalysis(cst); deferred.resolve(); }, }; -module.exports = options; +export default options; // we're running as a script -if (module.parent === null) { +if (import.meta.url === `file://${process.argv[1]}`) { const bench = new Benchmark({ ...options, - onComplete(event) { + onComplete(event: Event) { console.info(String(event.target)); }, - onError(event) { + onError(event: Event) { console.error(event); }, });