@visulima/jsdoc-open-api 3.0.0-alpha.3 → 3.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { spec_builder_default, DEFAULT_EXCLUDE, collect, parse_file_default, comments_to_open_api_default, comments_to_open_api_default2, validate_default } from './chunk-46IWFMQ2.mjs';
1
+ import { spec_builder_default, DEFAULT_EXCLUDE, collect, parse_file_default, comments_to_open_api_default, comments_to_open_api_default2, validate_default } from './chunk-2T6HMUIL.mjs';
2
2
  import { lstat, realpath, mkdir, writeFile } from 'fs/promises';
3
3
  import { normalize, dirname } from 'path';
4
4
  import { pathToFileURL } from 'url';
@@ -138,5 +138,5 @@ var initCommand = (configName, packageJsonPath = process.cwd()) => {
138
138
  var init_command_default = initCommand;
139
139
 
140
140
  export { generate_command_default, init_command_default };
141
- //# sourceMappingURL=chunk-KI63G47G.mjs.map
142
- //# sourceMappingURL=chunk-KI63G47G.mjs.map
141
+ //# sourceMappingURL=chunk-RGP6RTJO.mjs.map
142
+ //# sourceMappingURL=chunk-RGP6RTJO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["comments_to_open_api_default"],"mappings":"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","file":"chunk-KI63G47G.mjs","sourcesContent":["import { lstat, mkdir, realpath, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { WalkOptions } from \"@visulima/fs\";\nimport { collect } from \"@visulima/fs\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { MultiBar, Presets } from \"cli-progress\";\n\nimport { DEFAULT_EXCLUDE } from \"../../constants\";\nimport type { BaseDefinition } from \"../../exported\";\nimport jsDocumentCommentsToOpenApi from \"../../jsdoc/comments-to-open-api\";\nimport parseFile from \"../../parse-file\";\nimport SpecBuilder from \"../../spec-builder\";\nimport swaggerJsDocumentCommentsToOpenApi from \"../../swagger-jsdoc/comments-to-open-api\";\nimport validate from \"../../validate\";\n\nconst generateCommand = async (\n configName: string,\n paths: string[],\n options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n },\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: (RegExp | string)[];\n swaggerDefinition: BaseDefinition;\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n let config = await import(pathToFileURL(normalize(options.config ?? configName)).href);\n\n if (config?.default) {\n config = config.default;\n }\n\n openapiConfig = config;\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\n },\n Presets.shades_grey,\n );\n\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n const skip = new Set<RegExp | string>([...DEFAULT_EXCLUDE, ...openapiConfig.exclude]);\n\n // eslint-disable-next-line unicorn/prevent-abbreviations,no-loops/no-loops\n for await (const dir of paths) {\n // Check if the path is a directory\n // eslint-disable-next-line security/detect-non-literal-fs-filename,unicorn/no-await-expression-member\n (await lstat(dir)).isDirectory();\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const realDirectory = await realpath(dir);\n\n const files: string[] = await collect(realDirectory, {\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n skip: [...skip],\n } as WalkOptions);\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${String(files.length)} files in ${realDirectory}`);\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(files);\n }\n\n const bar = multibar.create(files.length, 0);\n\n files.forEach((file) => {\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Parsing file ${file}`);\n }\n\n bar.increment(1, { filename: realDirectory });\n\n const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedJsDocumentFile.map((item) => item.spec));\n\n const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));\n });\n }\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(\"Validating swagger spec\");\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(spec, null, 2));\n }\n\n await validate(JSON.parse(JSON.stringify(spec)) as Record<string, unknown>);\n\n const output = options.output ?? \"swagger.json\";\n\n multibar.stop();\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Written swagger spec to \"${output}\" file`);\n }\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await mkdir(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await writeFile(output, JSON.stringify(spec, null, 2));\n\n // eslint-disable-next-line no-console\n console.log(`\\nSwagger specification is ready, check the \"${output}\" file.`);\n};\n\nexport default generateCommand;\n","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\n\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n cwd: realpathSync(packageJsonPath),\n });\n\n let exportTemplate = \"module.exports =\";\n\n if (foundPackageJson) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { packageJson: package_, path: packagePath } = foundPackageJson;\n\n // eslint-disable-next-line no-console\n console.info(`Found package.json at \"${packagePath as string}\"`);\n\n if (package_.type === \"module\") {\n // eslint-disable-next-line no-console\n console.info(\"Found package.json with type: module, using ES6 as export for the config file\");\n\n exportTemplate = \"export default\";\n }\n } else {\n // eslint-disable-next-line no-console\n console.info(\"No package.json found\");\n }\n\n writeFileSync(\n configName,\n `${exportTemplate} {\n exclude: [\n 'coverage/**',\n '.github/**',\n 'packages/*/test{,s}/**',\n '**/*.d.ts',\n 'test{,s}/**',\n 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/__tests__/**',\n '**/{ava,babel,nyc}.config.{js,cjs,mjs}',\n '**/jest.config.{js,cjs,mjs,ts}',\n '**/{karma,rollup,webpack}.config.js',\n '**/.{eslint,mocha}rc.{js,cjs}',\n '**/.{travis,yarnrc}.yml',\n '**/{docker-compose,docker}.yml',\n '**/.yamllint.{yaml,yml}',\n '**/node_modules/**',\n '**/pnpm-lock.yaml',\n '**/pnpm-workspace.yaml',\n '**/{package,package-lock}.json',\n '**/yarn.lock',\n '**/package.json5',\n '**/.next/**',\n ],\n followSymlinks: false,\n swaggerDefinition: {\n openapi: '3.0.0',\n info: {\n title: 'API',\n version: '1.0.0',\n },\n },\n};\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(`Created \"${configName}\"`);\n};\n\nexport default initCommand;\n"]}
1
+ {"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["comments_to_open_api_default"],"mappings":"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","file":"chunk-RGP6RTJO.mjs","sourcesContent":["import { lstat, mkdir, realpath, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { WalkOptions } from \"@visulima/fs\";\nimport { collect } from \"@visulima/fs\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { MultiBar, Presets } from \"cli-progress\";\n\nimport { DEFAULT_EXCLUDE } from \"../../constants\";\nimport type { BaseDefinition } from \"../../exported\";\nimport jsDocumentCommentsToOpenApi from \"../../jsdoc/comments-to-open-api\";\nimport parseFile from \"../../parse-file\";\nimport SpecBuilder from \"../../spec-builder\";\nimport swaggerJsDocumentCommentsToOpenApi from \"../../swagger-jsdoc/comments-to-open-api\";\nimport validate from \"../../validate\";\n\nconst generateCommand = async (\n configName: string,\n paths: string[],\n options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n },\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: (RegExp | string)[];\n swaggerDefinition: BaseDefinition;\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n let config = await import(pathToFileURL(normalize(options.config ?? configName)).href);\n\n if (config?.default) {\n config = config.default;\n }\n\n openapiConfig = config;\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\n },\n Presets.shades_grey,\n );\n\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n const skip = new Set<RegExp | string>([...DEFAULT_EXCLUDE, ...openapiConfig.exclude]);\n\n // eslint-disable-next-line unicorn/prevent-abbreviations,no-loops/no-loops\n for await (const dir of paths) {\n // Check if the path is a directory\n // eslint-disable-next-line security/detect-non-literal-fs-filename,unicorn/no-await-expression-member\n (await lstat(dir)).isDirectory();\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const realDirectory = await realpath(dir);\n\n const files: string[] = await collect(realDirectory, {\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n skip: [...skip],\n } as WalkOptions);\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${String(files.length)} files in ${realDirectory}`);\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(files);\n }\n\n const bar = multibar.create(files.length, 0);\n\n files.forEach((file) => {\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Parsing file ${file}`);\n }\n\n bar.increment(1, { filename: realDirectory });\n\n const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedJsDocumentFile.map((item) => item.spec));\n\n const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));\n });\n }\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(\"Validating swagger spec\");\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(spec, null, 2));\n }\n\n await validate(JSON.parse(JSON.stringify(spec)) as Record<string, unknown>);\n\n const output = options.output ?? \"swagger.json\";\n\n multibar.stop();\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Written swagger spec to \"${output}\" file`);\n }\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await mkdir(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await writeFile(output, JSON.stringify(spec, null, 2));\n\n // eslint-disable-next-line no-console\n console.log(`\\nSwagger specification is ready, check the \"${output}\" file.`);\n};\n\nexport default generateCommand;\n","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\n\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n cwd: realpathSync(packageJsonPath),\n });\n\n let exportTemplate = \"module.exports =\";\n\n if (foundPackageJson) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { packageJson: package_, path: packagePath } = foundPackageJson;\n\n // eslint-disable-next-line no-console\n console.info(`Found package.json at \"${packagePath as string}\"`);\n\n if (package_.type === \"module\") {\n // eslint-disable-next-line no-console\n console.info(\"Found package.json with type: module, using ES6 as export for the config file\");\n\n exportTemplate = \"export default\";\n }\n } else {\n // eslint-disable-next-line no-console\n console.info(\"No package.json found\");\n }\n\n writeFileSync(\n configName,\n `${exportTemplate} {\n exclude: [\n 'coverage/**',\n '.github/**',\n 'packages/*/test{,s}/**',\n '**/*.d.ts',\n 'test{,s}/**',\n 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/__tests__/**',\n '**/{ava,babel,nyc}.config.{js,cjs,mjs}',\n '**/jest.config.{js,cjs,mjs,ts}',\n '**/{karma,rollup,webpack}.config.js',\n '**/.{eslint,mocha}rc.{js,cjs}',\n '**/.{travis,yarnrc}.yml',\n '**/{docker-compose,docker}.yml',\n '**/.yamllint.{yaml,yml}',\n '**/node_modules/**',\n '**/pnpm-lock.yaml',\n '**/pnpm-workspace.yaml',\n '**/{package,package-lock}.json',\n '**/yarn.lock',\n '**/package.json5',\n '**/.next/**',\n ],\n followSymlinks: false,\n swaggerDefinition: {\n openapi: '3.0.0',\n info: {\n title: 'API',\n version: '1.0.0',\n },\n },\n};\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(`Created \"${configName}\"`);\n};\n\nexport default initCommand;\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkWEX5DMNT_js = require('./chunk-WEX5DMNT.js');
3
+ var chunkPTFTJY7I_js = require('./chunk-PTFTJY7I.js');
4
4
  var promises = require('fs/promises');
5
5
  var path = require('path');
6
6
  var url = require('url');
@@ -35,12 +35,12 @@ var generateCommand = async (configName, paths, options) => {
35
35
  },
36
36
  cliProgress.Presets.shades_grey
37
37
  );
38
- const spec = new chunkWEX5DMNT_js.spec_builder_default(openapiConfig.swaggerDefinition);
39
- const skip = /* @__PURE__ */ new Set([...chunkWEX5DMNT_js.DEFAULT_EXCLUDE, ...openapiConfig.exclude]);
38
+ const spec = new chunkPTFTJY7I_js.spec_builder_default(openapiConfig.swaggerDefinition);
39
+ const skip = /* @__PURE__ */ new Set([...chunkPTFTJY7I_js.DEFAULT_EXCLUDE, ...openapiConfig.exclude]);
40
40
  for await (const dir of paths) {
41
41
  (await promises.lstat(dir)).isDirectory();
42
42
  const realDirectory = await promises.realpath(dir);
43
- const files = await chunkWEX5DMNT_js.collect(realDirectory, {
43
+ const files = await chunkPTFTJY7I_js.collect(realDirectory, {
44
44
  extensions: openapiConfig.extensions ?? [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
45
45
  followSymlinks: openapiConfig.followSymlinks ?? false,
46
46
  match: openapiConfig.include,
@@ -59,9 +59,9 @@ Found ${String(files.length)} files in ${realDirectory}`);
59
59
  console.log(`Parsing file ${file}`);
60
60
  }
61
61
  bar.increment(1, { filename: realDirectory });
62
- const parsedJsDocumentFile = chunkWEX5DMNT_js.parse_file_default(file, chunkWEX5DMNT_js.comments_to_open_api_default, options.verbose);
62
+ const parsedJsDocumentFile = chunkPTFTJY7I_js.parse_file_default(file, chunkPTFTJY7I_js.comments_to_open_api_default, options.verbose);
63
63
  spec.addData(parsedJsDocumentFile.map((item) => item.spec));
64
- const parsedSwaggerJsDocumentFile = chunkWEX5DMNT_js.parse_file_default(file, chunkWEX5DMNT_js.comments_to_open_api_default2, options.verbose);
64
+ const parsedSwaggerJsDocumentFile = chunkPTFTJY7I_js.parse_file_default(file, chunkPTFTJY7I_js.comments_to_open_api_default2, options.verbose);
65
65
  spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
66
66
  });
67
67
  }
@@ -71,7 +71,7 @@ Found ${String(files.length)} files in ${realDirectory}`);
71
71
  if (options.veryVerbose) {
72
72
  console.log(JSON.stringify(spec, null, 2));
73
73
  }
74
- await chunkWEX5DMNT_js.validate_default(JSON.parse(JSON.stringify(spec)));
74
+ await chunkPTFTJY7I_js.validate_default(JSON.parse(JSON.stringify(spec)));
75
75
  const output = options.output ?? "swagger.json";
76
76
  multibar.stop();
77
77
  if (options.verbose) {
@@ -145,5 +145,5 @@ var init_command_default = initCommand;
145
145
 
146
146
  exports.generate_command_default = generate_command_default;
147
147
  exports.init_command_default = init_command_default;
148
- //# sourceMappingURL=chunk-QK4CXNUY.js.map
149
- //# sourceMappingURL=chunk-QK4CXNUY.js.map
148
+ //# sourceMappingURL=chunk-RVCK3H3U.js.map
149
+ //# sourceMappingURL=chunk-RVCK3H3U.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["pathToFileURL","normalize","MultiBar","Presets","spec_builder_default","DEFAULT_EXCLUDE","lstat","realpath","collect","parse_file_default","comments_to_open_api_default","validate_default","mkdir","dirname","writeFile","existsSync","readPkgUp","realpathSync","writeFileSync"],"mappings":"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","file":"chunk-QK4CXNUY.js","sourcesContent":["import { lstat, mkdir, realpath, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { WalkOptions } from \"@visulima/fs\";\nimport { collect } from \"@visulima/fs\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { MultiBar, Presets } from \"cli-progress\";\n\nimport { DEFAULT_EXCLUDE } from \"../../constants\";\nimport type { BaseDefinition } from \"../../exported\";\nimport jsDocumentCommentsToOpenApi from \"../../jsdoc/comments-to-open-api\";\nimport parseFile from \"../../parse-file\";\nimport SpecBuilder from \"../../spec-builder\";\nimport swaggerJsDocumentCommentsToOpenApi from \"../../swagger-jsdoc/comments-to-open-api\";\nimport validate from \"../../validate\";\n\nconst generateCommand = async (\n configName: string,\n paths: string[],\n options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n },\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: (RegExp | string)[];\n swaggerDefinition: BaseDefinition;\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n let config = await import(pathToFileURL(normalize(options.config ?? configName)).href);\n\n if (config?.default) {\n config = config.default;\n }\n\n openapiConfig = config;\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\n },\n Presets.shades_grey,\n );\n\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n const skip = new Set<RegExp | string>([...DEFAULT_EXCLUDE, ...openapiConfig.exclude]);\n\n // eslint-disable-next-line unicorn/prevent-abbreviations,no-loops/no-loops\n for await (const dir of paths) {\n // Check if the path is a directory\n // eslint-disable-next-line security/detect-non-literal-fs-filename,unicorn/no-await-expression-member\n (await lstat(dir)).isDirectory();\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const realDirectory = await realpath(dir);\n\n const files: string[] = await collect(realDirectory, {\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n skip: [...skip],\n } as WalkOptions);\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${String(files.length)} files in ${realDirectory}`);\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(files);\n }\n\n const bar = multibar.create(files.length, 0);\n\n files.forEach((file) => {\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Parsing file ${file}`);\n }\n\n bar.increment(1, { filename: realDirectory });\n\n const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedJsDocumentFile.map((item) => item.spec));\n\n const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));\n });\n }\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(\"Validating swagger spec\");\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(spec, null, 2));\n }\n\n await validate(JSON.parse(JSON.stringify(spec)) as Record<string, unknown>);\n\n const output = options.output ?? \"swagger.json\";\n\n multibar.stop();\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Written swagger spec to \"${output}\" file`);\n }\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await mkdir(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await writeFile(output, JSON.stringify(spec, null, 2));\n\n // eslint-disable-next-line no-console\n console.log(`\\nSwagger specification is ready, check the \"${output}\" file.`);\n};\n\nexport default generateCommand;\n","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\n\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n cwd: realpathSync(packageJsonPath),\n });\n\n let exportTemplate = \"module.exports =\";\n\n if (foundPackageJson) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { packageJson: package_, path: packagePath } = foundPackageJson;\n\n // eslint-disable-next-line no-console\n console.info(`Found package.json at \"${packagePath as string}\"`);\n\n if (package_.type === \"module\") {\n // eslint-disable-next-line no-console\n console.info(\"Found package.json with type: module, using ES6 as export for the config file\");\n\n exportTemplate = \"export default\";\n }\n } else {\n // eslint-disable-next-line no-console\n console.info(\"No package.json found\");\n }\n\n writeFileSync(\n configName,\n `${exportTemplate} {\n exclude: [\n 'coverage/**',\n '.github/**',\n 'packages/*/test{,s}/**',\n '**/*.d.ts',\n 'test{,s}/**',\n 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/__tests__/**',\n '**/{ava,babel,nyc}.config.{js,cjs,mjs}',\n '**/jest.config.{js,cjs,mjs,ts}',\n '**/{karma,rollup,webpack}.config.js',\n '**/.{eslint,mocha}rc.{js,cjs}',\n '**/.{travis,yarnrc}.yml',\n '**/{docker-compose,docker}.yml',\n '**/.yamllint.{yaml,yml}',\n '**/node_modules/**',\n '**/pnpm-lock.yaml',\n '**/pnpm-workspace.yaml',\n '**/{package,package-lock}.json',\n '**/yarn.lock',\n '**/package.json5',\n '**/.next/**',\n ],\n followSymlinks: false,\n swaggerDefinition: {\n openapi: '3.0.0',\n info: {\n title: 'API',\n version: '1.0.0',\n },\n },\n};\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(`Created \"${configName}\"`);\n};\n\nexport default initCommand;\n"]}
1
+ {"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["pathToFileURL","normalize","MultiBar","Presets","spec_builder_default","DEFAULT_EXCLUDE","lstat","realpath","collect","parse_file_default","comments_to_open_api_default","validate_default","mkdir","dirname","writeFile","existsSync","readPkgUp","realpathSync","writeFileSync"],"mappings":"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","file":"chunk-RVCK3H3U.js","sourcesContent":["import { lstat, mkdir, realpath, writeFile } from \"node:fs/promises\";\nimport { dirname, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { WalkOptions } from \"@visulima/fs\";\nimport { collect } from \"@visulima/fs\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { MultiBar, Presets } from \"cli-progress\";\n\nimport { DEFAULT_EXCLUDE } from \"../../constants\";\nimport type { BaseDefinition } from \"../../exported\";\nimport jsDocumentCommentsToOpenApi from \"../../jsdoc/comments-to-open-api\";\nimport parseFile from \"../../parse-file\";\nimport SpecBuilder from \"../../spec-builder\";\nimport swaggerJsDocumentCommentsToOpenApi from \"../../swagger-jsdoc/comments-to-open-api\";\nimport validate from \"../../validate\";\n\nconst generateCommand = async (\n configName: string,\n paths: string[],\n options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n },\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: (RegExp | string)[];\n swaggerDefinition: BaseDefinition;\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n let config = await import(pathToFileURL(normalize(options.config ?? configName)).href);\n\n if (config?.default) {\n config = config.default;\n }\n\n openapiConfig = config;\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\n },\n Presets.shades_grey,\n );\n\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n const skip = new Set<RegExp | string>([...DEFAULT_EXCLUDE, ...openapiConfig.exclude]);\n\n // eslint-disable-next-line unicorn/prevent-abbreviations,no-loops/no-loops\n for await (const dir of paths) {\n // Check if the path is a directory\n // eslint-disable-next-line security/detect-non-literal-fs-filename,unicorn/no-await-expression-member\n (await lstat(dir)).isDirectory();\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const realDirectory = await realpath(dir);\n\n const files: string[] = await collect(realDirectory, {\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n skip: [...skip],\n } as WalkOptions);\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${String(files.length)} files in ${realDirectory}`);\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(files);\n }\n\n const bar = multibar.create(files.length, 0);\n\n files.forEach((file) => {\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Parsing file ${file}`);\n }\n\n bar.increment(1, { filename: realDirectory });\n\n const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedJsDocumentFile.map((item) => item.spec));\n\n const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, options.verbose);\n\n spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));\n });\n }\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(\"Validating swagger spec\");\n }\n\n if (options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(spec, null, 2));\n }\n\n await validate(JSON.parse(JSON.stringify(spec)) as Record<string, unknown>);\n\n const output = options.output ?? \"swagger.json\";\n\n multibar.stop();\n\n if (options.verbose) {\n // eslint-disable-next-line no-console\n console.log(`Written swagger spec to \"${output}\" file`);\n }\n\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await mkdir(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n await writeFile(output, JSON.stringify(spec, null, 2));\n\n // eslint-disable-next-line no-console\n console.log(`\\nSwagger specification is ready, check the \"${output}\" file.`);\n};\n\nexport default generateCommand;\n","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\n\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n cwd: realpathSync(packageJsonPath),\n });\n\n let exportTemplate = \"module.exports =\";\n\n if (foundPackageJson) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { packageJson: package_, path: packagePath } = foundPackageJson;\n\n // eslint-disable-next-line no-console\n console.info(`Found package.json at \"${packagePath as string}\"`);\n\n if (package_.type === \"module\") {\n // eslint-disable-next-line no-console\n console.info(\"Found package.json with type: module, using ES6 as export for the config file\");\n\n exportTemplate = \"export default\";\n }\n } else {\n // eslint-disable-next-line no-console\n console.info(\"No package.json found\");\n }\n\n writeFileSync(\n configName,\n `${exportTemplate} {\n exclude: [\n 'coverage/**',\n '.github/**',\n 'packages/*/test{,s}/**',\n '**/*.d.ts',\n 'test{,s}/**',\n 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',\n '**/__tests__/**',\n '**/{ava,babel,nyc}.config.{js,cjs,mjs}',\n '**/jest.config.{js,cjs,mjs,ts}',\n '**/{karma,rollup,webpack}.config.js',\n '**/.{eslint,mocha}rc.{js,cjs}',\n '**/.{travis,yarnrc}.yml',\n '**/{docker-compose,docker}.yml',\n '**/.yamllint.{yaml,yml}',\n '**/node_modules/**',\n '**/pnpm-lock.yaml',\n '**/pnpm-workspace.yaml',\n '**/{package,package-lock}.json',\n '**/yarn.lock',\n '**/package.json5',\n '**/.next/**',\n ],\n followSymlinks: false,\n swaggerDefinition: {\n openapi: '3.0.0',\n info: {\n title: 'API',\n version: '1.0.0',\n },\n },\n};\n`,\n );\n\n // eslint-disable-next-line no-console\n console.log(`Created \"${configName}\"`);\n};\n\nexport default initCommand;\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkQK4CXNUY_js = require('../../chunk-QK4CXNUY.js');
4
- require('../../chunk-WEX5DMNT.js');
3
+ var chunkRVCK3H3U_js = require('../../chunk-RVCK3H3U.js');
4
+ require('../../chunk-PTFTJY7I.js');
5
5
  var process = require('process');
6
6
 
7
7
  var generateCommand = (program, commandName = "generate", configName = ".openapirc.js") => {
8
8
  program.command(commandName).description("Generates OpenAPI (Swagger) documentation from JSDoc's").usage("[options] <path ...>").argument("[path ...]", "Paths to files or directories to parse").option("-c, --config [.openapirc.js]", "@visulima/jsdoc-open-api config file path.").option("-o, --output [swaggerSpec.json]", "Output swagger specification.").option("-v, --verbose", "Verbose output.").option("-d, --very-verbose", "Very verbose output.").action(async (paths, options) => {
9
9
  try {
10
- await chunkQK4CXNUY_js.generate_command_default(configName, paths, options);
10
+ await chunkRVCK3H3U_js.generate_command_default(configName, paths, options);
11
11
  } catch (error) {
12
12
  console.error(error);
13
13
  process.exit(1);
@@ -18,7 +18,7 @@ var generate_command_default2 = generateCommand;
18
18
  var initCommand = (program, commandName = "init", description = "Inits a pre-configured @visulima/jsdoc-open-api config file.", configName = ".openapirc.js") => {
19
19
  program.command(commandName).description(description).action(() => {
20
20
  try {
21
- chunkQK4CXNUY_js.init_command_default(configName);
21
+ chunkRVCK3H3U_js.init_command_default(configName);
22
22
  } catch (error) {
23
23
  console.error(error);
24
24
  process.exit(1);
@@ -1,5 +1,5 @@
1
- import { generate_command_default, init_command_default } from '../../chunk-KI63G47G.mjs';
2
- import '../../chunk-46IWFMQ2.mjs';
1
+ import { generate_command_default, init_command_default } from '../../chunk-RGP6RTJO.mjs';
2
+ import '../../chunk-2T6HMUIL.mjs';
3
3
  import { exit } from 'process';
4
4
 
5
5
  var generateCommand = (program, commandName = "generate", configName = ".openapirc.js") => {
package/dist/cli/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var chunkQK4CXNUY_js = require('../chunk-QK4CXNUY.js');
4
- require('../chunk-WEX5DMNT.js');
3
+ var chunkRVCK3H3U_js = require('../chunk-RVCK3H3U.js');
4
+ require('../chunk-PTFTJY7I.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "generateCommand", {
9
9
  enumerable: true,
10
- get: function () { return chunkQK4CXNUY_js.generate_command_default; }
10
+ get: function () { return chunkRVCK3H3U_js.generate_command_default; }
11
11
  });
12
12
  Object.defineProperty(exports, "initCommand", {
13
13
  enumerable: true,
14
- get: function () { return chunkQK4CXNUY_js.init_command_default; }
14
+ get: function () { return chunkRVCK3H3U_js.init_command_default; }
15
15
  });
16
16
  //# sourceMappingURL=index.js.map
17
17
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { generate_command_default as generateCommand, init_command_default as initCommand } from '../chunk-KI63G47G.mjs';
2
- import '../chunk-46IWFMQ2.mjs';
1
+ export { generate_command_default as generateCommand, init_command_default as initCommand } from '../chunk-RGP6RTJO.mjs';
2
+ import '../chunk-2T6HMUIL.mjs';
3
3
  //# sourceMappingURL=index.mjs.map
4
4
  //# sourceMappingURL=index.mjs.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkWEX5DMNT_js = require('./chunk-WEX5DMNT.js');
3
+ var chunkPTFTJY7I_js = require('./chunk-PTFTJY7I.js');
4
4
  var fs = require('fs');
5
5
  var path = require('path');
6
6
  var process = require('process');
@@ -25,12 +25,12 @@ var SwaggerCompilerPlugin = class {
25
25
  this.ignore = options.ignore ?? [];
26
26
  }
27
27
  apply(compiler) {
28
- const skip = /* @__PURE__ */ new Set([...chunkWEX5DMNT_js.DEFAULT_EXCLUDE, ...this.ignore]);
28
+ const skip = /* @__PURE__ */ new Set([...chunkPTFTJY7I_js.DEFAULT_EXCLUDE, ...this.ignore]);
29
29
  compiler.hooks.make.tapAsync("SwaggerCompilerPlugin", async (_, callback) => {
30
30
  console.log("Build paused, switching to swagger build");
31
- const spec = new chunkWEX5DMNT_js.spec_builder_default(this.swaggerDefinition);
31
+ const spec = new chunkPTFTJY7I_js.spec_builder_default(this.swaggerDefinition);
32
32
  for await (const dir of this.sources) {
33
- const files = await chunkWEX5DMNT_js.collect(dir, {
33
+ const files = await chunkPTFTJY7I_js.collect(dir, {
34
34
  extensions: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
35
35
  includeDirs: false,
36
36
  skip: [...skip]
@@ -44,9 +44,9 @@ var SwaggerCompilerPlugin = class {
44
44
  console.log(`Parsing file ${file}`);
45
45
  }
46
46
  try {
47
- const parsedJsDocumentFile = chunkWEX5DMNT_js.parse_file_default(file, chunkWEX5DMNT_js.comments_to_open_api_default, this.verbose);
47
+ const parsedJsDocumentFile = chunkPTFTJY7I_js.parse_file_default(file, chunkPTFTJY7I_js.comments_to_open_api_default, this.verbose);
48
48
  spec.addData(parsedJsDocumentFile.map((item) => item.spec));
49
- const parsedSwaggerJsDocumentFile = chunkWEX5DMNT_js.parse_file_default(file, chunkWEX5DMNT_js.comments_to_open_api_default2, this.verbose);
49
+ const parsedSwaggerJsDocumentFile = chunkPTFTJY7I_js.parse_file_default(file, chunkPTFTJY7I_js.comments_to_open_api_default2, this.verbose);
50
50
  spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
51
51
  } catch (error) {
52
52
  console.error(error);
@@ -59,7 +59,7 @@ var SwaggerCompilerPlugin = class {
59
59
  console.log("Validating swagger spec");
60
60
  console.log(JSON.stringify(spec, null, 2));
61
61
  }
62
- await chunkWEX5DMNT_js.validate_default(JSON.parse(JSON.stringify(spec)));
62
+ await chunkPTFTJY7I_js.validate_default(JSON.parse(JSON.stringify(spec)));
63
63
  } catch (error) {
64
64
  console.error(error.toJSON());
65
65
  process.exit(1);
@@ -83,23 +83,23 @@ var swagger_compiler_plugin_default = SwaggerCompilerPlugin;
83
83
 
84
84
  Object.defineProperty(exports, "SpecBuilder", {
85
85
  enumerable: true,
86
- get: function () { return chunkWEX5DMNT_js.spec_builder_default; }
86
+ get: function () { return chunkPTFTJY7I_js.spec_builder_default; }
87
87
  });
88
88
  Object.defineProperty(exports, "jsDocumentCommentsToOpenApi", {
89
89
  enumerable: true,
90
- get: function () { return chunkWEX5DMNT_js.comments_to_open_api_default; }
90
+ get: function () { return chunkPTFTJY7I_js.comments_to_open_api_default; }
91
91
  });
92
92
  Object.defineProperty(exports, "parseFile", {
93
93
  enumerable: true,
94
- get: function () { return chunkWEX5DMNT_js.parse_file_default; }
94
+ get: function () { return chunkPTFTJY7I_js.parse_file_default; }
95
95
  });
96
96
  Object.defineProperty(exports, "swaggerJsDocumentCommentsToOpenApi", {
97
97
  enumerable: true,
98
- get: function () { return chunkWEX5DMNT_js.comments_to_open_api_default2; }
98
+ get: function () { return chunkPTFTJY7I_js.comments_to_open_api_default2; }
99
99
  });
100
100
  Object.defineProperty(exports, "yamlLoc", {
101
101
  enumerable: true,
102
- get: function () { return chunkWEX5DMNT_js.yaml_loc_default; }
102
+ get: function () { return chunkPTFTJY7I_js.yaml_loc_default; }
103
103
  });
104
104
  exports.SwaggerCompilerPlugin = swagger_compiler_plugin_default;
105
105
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { DEFAULT_EXCLUDE, spec_builder_default, collect, parse_file_default, comments_to_open_api_default, comments_to_open_api_default2, validate_default } from './chunk-46IWFMQ2.mjs';
2
- export { spec_builder_default as SpecBuilder, comments_to_open_api_default as jsDocumentCommentsToOpenApi, parse_file_default as parseFile, comments_to_open_api_default2 as swaggerJsDocumentCommentsToOpenApi, yaml_loc_default as yamlLoc } from './chunk-46IWFMQ2.mjs';
1
+ import { DEFAULT_EXCLUDE, spec_builder_default, collect, parse_file_default, comments_to_open_api_default, comments_to_open_api_default2, validate_default } from './chunk-2T6HMUIL.mjs';
2
+ export { spec_builder_default as SpecBuilder, comments_to_open_api_default as jsDocumentCommentsToOpenApi, parse_file_default as parseFile, comments_to_open_api_default2 as swaggerJsDocumentCommentsToOpenApi, yaml_loc_default as yamlLoc } from './chunk-2T6HMUIL.mjs';
3
3
  import { mkdir, writeFile } from 'fs';
4
4
  import { dirname } from 'path';
5
5
  import { exit } from 'process';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/jsdoc-open-api",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.4",
4
4
  "description": "Generates swagger doc based on JSDoc.",
5
5
  "keywords": [
6
6
  "visulima",
@@ -88,7 +88,7 @@
88
88
  ],
89
89
  "dependencies": {
90
90
  "@apidevtools/swagger-parser": "^12.1.0",
91
- "comment-parser": "^1.4.1",
91
+ "comment-parser": "^1.4.3",
92
92
  "lodash.mergewith": "^4.6.2",
93
93
  "read-pkg-up": "^7.0.1",
94
94
  "yaml": "^2.8.2"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/util/customizer.ts","../src/jsdoc/comments-to-open-api.ts","../src/util/yaml-loc.ts","../src/parse-file.ts","../src/util/object-merge.ts","../src/spec-builder.ts","../src/swagger-jsdoc/utils.ts","../src/swagger-jsdoc/organize-swagger-object.ts","../src/swagger-jsdoc/comments-to-open-api.ts","../../../filesystem/path/dist/packem_shared/path-CR6YkPXX.js","../../../filesystem/path/dist/utils.js","../../../filesystem/fs/dist/packem_shared/WalkError-DUdQd6FT.js","../../../filesystem/fs/dist/packem_shared/assertValidFileOrDirectoryPath-8HANmVjk.js","../../../filesystem/fs/dist/packem_shared/walk-include-CZco7BvN.js","../../../filesystem/fs/dist/packem_shared/walk-BhTbpr3y.js","../../../filesystem/fs/dist/packem_shared/collect-DcBwsYYd.js","../src/constants.ts","../src/validate.ts"],"names":["parseComments","path","commentsToOpenApi","mergeWith","tagsToObjects","yaml","comments_to_open_api_default","__cjs_createRequire","extensions","__cjs_require","__cjs_getProcess","__cjs_getBuiltinModule"],"mappings":"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A,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAA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","file":"chunk-46IWFMQ2.mjs","sourcesContent":["const customizer = (objectValue: unknown, sourceValue: unknown[]): unknown[] | undefined => {\n if (Array.isArray(objectValue)) {\n return [...objectValue, ...sourceValue] as unknown[];\n }\n\n return undefined;\n};\n\nexport default customizer;\n","import type { Spec } from \"comment-parser\";\nimport { parse as parseComments } from \"comment-parser\";\n// eslint-disable-next-line no-restricted-imports\nimport mergeWith from \"lodash.mergewith\";\n\nimport type { OpenApiObject, PathsObject } from \"../exported\";\nimport customizer from \"../util/customizer\";\n\n// The security object has a bizare setup...\nconst fixSecurityObject = (thing: any) => {\n if (thing.security) {\n // eslint-disable-next-line no-param-reassign\n thing.security = Object.keys(thing.security).map((s) => {\n return {\n [s]: thing.security[s],\n };\n });\n }\n};\n\nconst primitiveTypes = new Set([\"array\", \"boolean\", \"integer\", \"number\", \"object\", \"string\"]);\n\nconst formatMap: Record<string, string> = {\n binary: \"string\",\n byte: \"string\",\n date: \"string\",\n \"date-time\": \"string\",\n double: \"number\",\n float: \"number\",\n int32: \"integer\",\n int64: \"integer\",\n password: \"string\",\n};\n\nconst parseDescription = (tag: Spec): { description: string | undefined; name: string; rawType: string; required: boolean; schema: object | undefined } => {\n const rawType = tag.type;\n const isArray = rawType.endsWith(\"[]\");\n // eslint-disable-next-line regexp/strict\n const parsedType = rawType.replace(/\\[]$/, \"\");\n\n const isPrimitive = primitiveTypes.has(parsedType);\n const isFormat = Object.keys(formatMap).includes(parsedType);\n\n let defaultValue;\n\n if (tag.default) {\n switch (parsedType) {\n case \"double\":\n case \"float\":\n case \"number\": {\n defaultValue = Number.parseFloat(tag.default);\n break;\n }\n case \"int32\":\n case \"int64\":\n case \"integer\": {\n defaultValue = Number.parseInt(tag.default, 10);\n break;\n }\n default: {\n defaultValue = tag.default;\n break;\n }\n }\n }\n\n let rootType;\n\n if (isPrimitive) {\n rootType = { default: defaultValue, type: parsedType };\n } else if (isFormat) {\n rootType = {\n default: defaultValue,\n format: parsedType,\n type: formatMap[parsedType],\n };\n } else {\n rootType = { $ref: `#/components/schemas/${parsedType as string}` };\n }\n\n let schema: object | undefined = isArray\n ? {\n items: {\n ...rootType,\n },\n type: \"array\",\n }\n : {\n ...rootType,\n };\n\n if (parsedType === \"\") {\n schema = undefined;\n }\n\n // remove the optional dash from the description.\n let description: string | undefined = tag.description.trim().replace(/^- /u, \"\");\n\n if (description === \"\") {\n description = undefined;\n }\n\n return {\n description,\n name: tag.name,\n rawType,\n required: !tag.optional,\n schema,\n };\n};\n\n// @ts-expect-error\n\nconst tagsToObjects = (tags: Spec[], verbose?: boolean) =>\n tags.map((tag) => {\n const parsedResponse = parseDescription(tag);\n\n // Some ops only have a `description`, merge `name` and `description`\n // for these.\n let nameAndDescription = \"\";\n\n if (parsedResponse.name) {\n nameAndDescription += parsedResponse.name;\n }\n\n if (parsedResponse.description) {\n nameAndDescription += ` ${parsedResponse.description.trim()}`;\n }\n\n switch (tag.tag) {\n case \"bodyComponent\": {\n return {\n requestBody: {\n $ref: `#/components/requestBodies/${parsedResponse.rawType}`,\n },\n };\n }\n case \"bodyContent\": {\n return {\n requestBody: {\n content: {\n [parsedResponse.name.replace(String.raw`*\\/*`, \"*/*\")]: {\n schema: parsedResponse.schema,\n },\n },\n },\n };\n }\n case \"bodyDescription\": {\n return { requestBody: { description: nameAndDescription } };\n }\n\n case \"bodyExample\": {\n const [contentType, example] = parsedResponse.name.split(\".\");\n\n return {\n requestBody: {\n content: {\n [contentType as string]: {\n examples: {\n [example as string]: {\n $ref: `#/components/examples/${parsedResponse.rawType}`,\n },\n },\n },\n },\n },\n };\n }\n\n case \"bodyRequired\": {\n return { requestBody: { required: true } };\n }\n\n case \"callback\": {\n return {\n callbacks: {\n [parsedResponse.name]: {\n $ref: `#/components/callbacks/${parsedResponse.rawType}`,\n },\n },\n };\n }\n\n case \"cookieParam\":\n\n case \"headerParam\":\n case \"pathParam\":\n case \"queryParam\": {\n return {\n parameters: [\n {\n description: parsedResponse.description,\n in: tag.tag.replace(/Param$/u, \"\"),\n name: parsedResponse.name,\n required: parsedResponse.required,\n schema: parsedResponse.schema,\n },\n ],\n };\n }\n case \"deprecated\": {\n return { deprecated: true };\n }\n\n case \"description\":\n\n case \"operationId\":\n\n case \"summary\": {\n return { [tag.tag]: nameAndDescription };\n }\n\n case \"externalDocs\": {\n return {\n externalDocs: {\n description: parsedResponse.description,\n url: parsedResponse.name,\n },\n };\n }\n\n case \"paramComponent\": {\n return {\n parameters: [{ $ref: `#/components/parameters/${parsedResponse.rawType}` }],\n };\n }\n\n case \"response\": {\n return {\n responses: {\n [parsedResponse.name]: {\n description: parsedResponse.description,\n },\n },\n };\n }\n\n case \"responseComponent\": {\n return {\n responses: {\n [parsedResponse.name]: {\n $ref: `#/components/responses/${parsedResponse.rawType}`,\n },\n },\n };\n }\n\n case \"responseContent\": {\n const [status, contentType] = parsedResponse.name.split(\".\");\n\n return {\n responses: {\n [status as string]: {\n content: {\n [contentType as string]: {\n schema: parsedResponse.schema,\n },\n },\n },\n },\n };\n }\n\n case \"responseExample\": {\n const [status, contentType, example] = parsedResponse.name.split(\".\");\n\n return {\n responses: {\n [status as string]: {\n content: {\n [contentType as string]: {\n examples: {\n [example as string]: {\n $ref: `#/components/examples/${parsedResponse.rawType}`,\n },\n },\n },\n },\n },\n },\n };\n }\n\n case \"responseHeader\": {\n const [status, header] = parsedResponse.name.split(\".\");\n\n return {\n responses: {\n [status as string]: {\n headers: {\n [header as string]: {\n description: parsedResponse.description,\n schema: parsedResponse.schema,\n },\n },\n },\n },\n };\n }\n\n case \"responseHeaderComponent\": {\n const [status, header] = parsedResponse.name.split(\".\");\n\n return {\n responses: {\n [status as string]: {\n headers: {\n [header as string]: {\n $ref: `#/components/headers/${parsedResponse.rawType}`,\n },\n },\n },\n },\n };\n }\n\n case \"responseLink\": {\n const [status, link] = parsedResponse.name.split(\".\");\n\n return {\n responses: {\n [status as string]: {\n links: {\n [link as string]: {\n $ref: `#/components/links/${parsedResponse.rawType}`,\n },\n },\n },\n },\n };\n }\n\n case \"security\": {\n const [security, scopeItem] = parsedResponse.name.split(\".\");\n\n let scope: string[] = [];\n\n if (scopeItem) {\n scope = [scopeItem];\n }\n\n return {\n security: { [security as string]: scope },\n };\n }\n\n case \"server\": {\n return {\n servers: [\n {\n description: parsedResponse.description,\n url: parsedResponse.name,\n },\n ],\n };\n }\n\n case \"tag\": {\n return { tags: [nameAndDescription] };\n }\n\n default: {\n return {};\n }\n }\n });\n\nconst commentsToOpenApi = (fileContents: string, verbose?: boolean): { loc: number; spec: OpenApiObject }[] => {\n // eslint-disable-next-line regexp/no-unused-capturing-group\n const openAPIRegex = /^(GET|PUT|POST|DELETE|OPTIONS|HEAD|PATCH|TRACE) \\/.*$/;\n\n const jsDocumentComments = parseComments(fileContents, { spacing: \"preserve\" });\n\n return jsDocumentComments\n .filter((comment) => openAPIRegex.test(comment.description.trim()))\n .map((comment) => {\n // Line count, number of tags + 1 for description.\n // - Don't count line-breaking due to long descriptions\n // - Don't count empty lines\n const loc = (comment.tags.length as number) + 1;\n\n const result = mergeWith({}, ...tagsToObjects(comment.tags, verbose), customizer);\n\n fixSecurityObject(result);\n\n const [method, path]: string[] = comment.description.split(\" \");\n\n const pathsObject: PathsObject = {\n [(path as string).trim()]: {\n [(method as string).toLowerCase().trim()]: {\n ...result,\n },\n },\n };\n\n // Purge all undefined objects/arrays.\n const spec = JSON.parse(JSON.stringify({ paths: pathsObject }));\n\n return {\n loc,\n spec,\n };\n });\n};\n\nexport default commentsToOpenApi;\n","const yamlLoc = (string: string): number => {\n // Break string into lines.\n const split = string.split(/\\r\\n|\\r|\\n/u);\n\n const filtered = split.filter((line) => {\n // Remove comments.\n // eslint-disable-next-line security/detect-unsafe-regex,regexp/no-unused-capturing-group\n if (/^\\s*(#\\s*(?:\\S.*)?)?$/u.test(line)) {\n return false;\n }\n\n // Remove empty lines.\n return line.trim().length > 0;\n });\n\n return filtered.length;\n};\n\nexport default yamlLoc;\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nimport yaml from \"yaml\";\n\nimport type { OpenApiObject } from \"./exported\";\nimport yamlLoc from \"./util/yaml-loc\";\n\nconst ALLOWED_KEYS = new Set([\"components\", \"externalDocs\", \"info\", \"openapi\", \"paths\", \"security\", \"servers\", \"tags\"]);\n\nclass ParseError extends Error {\n public filePath?: string;\n}\n\nconst parseFile = (\n file: string,\n commentsToOpenApi: (fileContent: string, verbose?: boolean) => { loc: number; spec: OpenApiObject }[],\n verbose?: boolean,\n): { loc: number; spec: OpenApiObject }[] => {\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n const fileContent = readFileSync(file, { encoding: \"utf8\" });\n const extension = path.extname(file);\n\n if (extension === \".yaml\" || extension === \".yml\") {\n const spec = yaml.parse(fileContent);\n const invalidKeys = Object.keys(spec).filter((key) => !ALLOWED_KEYS.has(key));\n\n if (invalidKeys.length > 0) {\n const error = new ParseError(`Unexpected keys: ${invalidKeys.join(\", \")}`);\n\n error.filePath = file;\n\n throw error;\n }\n\n if (Object.keys(spec).some((key) => ALLOWED_KEYS.has(key))) {\n const loc = yamlLoc(fileContent);\n\n return [{ loc, spec }];\n }\n\n return [];\n }\n\n try {\n return commentsToOpenApi(fileContent, verbose);\n } catch (error: any) {\n error.filePath = file;\n\n throw error;\n }\n};\n\nexport default parseFile;\n","const objectMerge = <T>(a: T, b: T): void => {\n Object.keys(b as object).forEach((key) => {\n if (a[key as keyof typeof b] === undefined) {\n // eslint-disable-next-line no-param-reassign\n a[key as keyof typeof b] = {\n ...b[key as keyof typeof b],\n };\n } else {\n Object.keys(b[key as keyof typeof b] as object).forEach((subKey) => {\n // eslint-disable-next-line no-param-reassign\n (a[key as keyof typeof b] as Record<string, object>)[subKey] = {\n ...(a[key as keyof typeof b] as Record<string, object>)[subKey],\n ...(b[key as keyof typeof b] as Record<string, object>)[subKey],\n };\n });\n }\n });\n};\n\nexport default objectMerge;\n","import type {\n BaseDefinition,\n ComponentsObject,\n ExternalDocumentationObject,\n InfoObject,\n OpenApiObject,\n PathsObject,\n SecurityRequirementObject,\n ServerObject,\n TagObject,\n} from \"./exported\";\nimport objectMerge from \"./util/object-merge\";\n\nclass SpecBuilder implements OpenApiObject {\n public components?: ComponentsObject;\n\n public externalDocs?: ExternalDocumentationObject;\n\n public info: InfoObject;\n\n public openapi: string;\n\n public paths: PathsObject;\n\n public security?: SecurityRequirementObject[];\n\n public servers?: ServerObject[];\n\n public tags?: TagObject[];\n\n public constructor(baseDefinition: BaseDefinition) {\n this.openapi = baseDefinition.openapi;\n this.info = baseDefinition.info;\n this.paths = baseDefinition.paths ?? {};\n\n if (baseDefinition.servers) {\n this.servers = baseDefinition.servers;\n }\n\n if (baseDefinition.components) {\n this.components = baseDefinition.components;\n }\n\n if (baseDefinition.security) {\n this.security = baseDefinition.security;\n }\n\n if (baseDefinition.tags) {\n this.tags = baseDefinition.tags;\n }\n\n if (baseDefinition.externalDocs) {\n this.externalDocs = baseDefinition.externalDocs;\n }\n }\n\n public addData(parsedFile: OpenApiObject[]): void {\n parsedFile.forEach((file) => {\n const { components, paths, ...rest } = file;\n\n // only merge paths and components\n objectMerge(this, {\n components: components ?? {},\n paths: paths ?? {},\n } as OpenApiObject);\n\n // overwrite everything else:\n Object.entries(rest).forEach(([key, value]) => {\n // @ts-expect-error\n this[key as keyof OpenApiObject] = value;\n });\n });\n }\n}\n\nexport default SpecBuilder;\n","import type { Spec } from \"comment-parser\";\n// eslint-disable-next-line no-restricted-imports\nimport mergeWith from \"lodash.mergewith\";\n\n/**\n * A recursive deep-merge that ignores null values when merging.\n * This returns the merged object and does not mutate.\n * @param first the first object to get merged\n * @param {object} second the second object to get merged\n */\n\nexport const mergeDeep = (first?: object, second?: object): object => mergeWith({}, first, second, (a, b) => (b === null ? a : undefined));\n\n/**\n * Checks if there is any properties of the input object which are an empty object\n * @param object the object to check\n * @returns boolean\n */\nexport const hasEmptyProperty = (object: Record<string, any>): boolean =>\n Object.keys(object)\n\n .map((key) => object[key])\n .every((keyObject) => typeof keyObject === \"object\" && Object.keys(keyObject).every((key) => !(key in keyObject)));\n\n/**\n * @param tag\n * @param tags\n * @returns boolean\n */\nexport const isTagPresentInTags = (tag: Spec, tags: Spec[]): boolean => tags.some((targetTag) => tag.name === targetTag.name);\n\nexport const getSwaggerVersionFromSpec = (tag: Spec): \"v2\" | \"v3\" | \"v4\" => {\n switch (tag.tag) {\n case \"asyncapi\": {\n return \"v4\";\n }\n case \"openapi\": {\n return \"v3\";\n }\n case \"swagger\": {\n return \"v2\";\n }\n default: {\n return \"v2\";\n }\n }\n};\n","import { isTagPresentInTags, mergeDeep } from \"./utils\";\n\n/**\n * @param {object} swaggerObject\n * @param {object} annotation\n * @param {string} property\n */\n\nconst organizeSwaggerObject = (swaggerObject: Record<string, any>, annotation: Record<string, any>, property: string): void => {\n // Root property on purpose.\n // eslint-disable-next-line no-secrets/no-secrets\n // @see https://github.com/OAI/OpenAPI-Specification/blob/master/proposals/002_Webhooks.md#proposed-solution\n if (property === \"x-webhooks\") {\n // eslint-disable-next-line no-param-reassign\n swaggerObject[property] = annotation[property];\n }\n\n // Other extensions can be in varying places depending on different vendors and opinions.\n // The following return makes it so that they are not put in `paths` in the last case.\n // New specific extensions will need to be handled on case-by-case if to be included in `paths`.\n if (property.startsWith(\"x-\")) {\n return;\n }\n\n const commonProperties = [\n \"components\",\n \"consumes\",\n \"produces\",\n \"paths\",\n \"schemas\",\n \"securityDefinitions\",\n \"responses\",\n \"parameters\",\n \"definitions\",\n \"channels\",\n ];\n\n if (commonProperties.includes(property)) {\n Object.keys(annotation[property]).forEach((definition) => {\n // eslint-disable-next-line no-param-reassign\n swaggerObject[property][definition] = mergeDeep(swaggerObject[property][definition], annotation[property][definition]);\n });\n } else if (property === \"tags\") {\n const { tags } = annotation;\n\n if (Array.isArray(tags)) {\n tags.forEach((tag) => {\n if (!isTagPresentInTags(tag, swaggerObject.tags)) {\n swaggerObject.tags.push(tag);\n }\n });\n } else if (!isTagPresentInTags(tags, swaggerObject.tags)) {\n swaggerObject.tags.push(tags);\n }\n } else if (property === \"security\") {\n const { security } = annotation;\n\n // eslint-disable-next-line no-param-reassign\n swaggerObject.security = security;\n } else if (property.startsWith(\"/\")) {\n // Paths which are not defined as \"paths\" property, starting with a slash \"/\"\n // eslint-disable-next-line no-param-reassign\n swaggerObject.paths[property] = mergeDeep(swaggerObject.paths[property], annotation[property]);\n }\n};\n\nexport default organizeSwaggerObject;\n","import type { Spec } from \"comment-parser\";\nimport { parse as parseComments } from \"comment-parser\";\n// eslint-disable-next-line no-restricted-imports\nimport mergeWith from \"lodash.mergewith\";\nimport type { YAMLError } from \"yaml\";\nimport yaml from \"yaml\";\n\nimport type { OpenApiObject } from \"../exported\";\nimport customizer from \"../util/customizer\";\nimport organizeSwaggerObject from \"./organize-swagger-object\";\nimport { getSwaggerVersionFromSpec, hasEmptyProperty } from \"./utils\";\n\nconst specificationTemplate = {\n v2: [\"paths\", \"definitions\", \"responses\", \"parameters\", \"securityDefinitions\"],\n v3: [\"paths\", \"definitions\", \"responses\", \"parameters\", \"securityDefinitions\", \"components\"],\n v4: [\"components\", \"channels\"],\n};\n\ntype ExtendedYAMLError = YAMLError & { annotation?: string };\n\nconst tagsToObjects = (specs: Spec[], verbose?: boolean) =>\n specs.map((spec: Spec) => {\n if ((spec.tag === \"openapi\" || spec.tag === \"swagger\" || spec.tag === \"asyncapi\") && spec.description !== \"\") {\n const parsed = yaml.parseDocument(spec.description);\n\n if (parsed.errors.length > 0) {\n parsed.errors.map<ExtendedYAMLError>((error) => {\n const newError: ExtendedYAMLError = error;\n\n newError.annotation = spec.description;\n\n return newError as ExtendedYAMLError;\n });\n\n let errorString = \"Error parsing YAML in @openapi spec:\";\n\n errorString += (\n verbose\n ? (parsed.errors as ExtendedYAMLError[])\n .map(\n (error) =>\n `${(error as ExtendedYAMLError).toString() as string}\\nImbedded within:\\n\\`\\`\\`\\n ${(error as ExtendedYAMLError).annotation?.replaceAll(\"\\n\", \"\\n \") as string}\\n\\`\\`\\``,\n )\n .join(\"\\n\")\n : parsed.errors.map((error) => error.toString()).join(\"\\n\")\n ) as string;\n\n throw new Error(errorString);\n }\n\n const parsedDocument = parsed.toJSON();\n const specification: Record<string, any> = {\n tags: [],\n };\n\n specificationTemplate[getSwaggerVersionFromSpec(spec)].forEach((property) => {\n specification[property] = specification[property] || {};\n });\n\n Object.keys(parsedDocument).forEach((property) => {\n organizeSwaggerObject(specification, parsedDocument, property);\n });\n\n return specification;\n }\n\n return {};\n });\n\nconst commentsToOpenApi = (fileContents: string, verbose?: boolean): { loc: number; spec: OpenApiObject }[] => {\n const jsDocumentComments = parseComments(fileContents, { spacing: \"preserve\" });\n\n return jsDocumentComments.map((comment) => {\n // Line count, number of tags + 1 for description.\n // - Don't count line-breaking due to long descriptions\n // - Don't count empty lines\n const loc = (comment.tags.length as number) + 1;\n const result = mergeWith({}, ...tagsToObjects(comment.tags, verbose), customizer);\n\n [\"definitions\", \"responses\", \"parameters\", \"securityDefinitions\", \"components\", \"tags\"].forEach((property) => {\n if (result[property] !== undefined && hasEmptyProperty(result[property])) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete result[property];\n }\n });\n\n // Purge all undefined objects/arrays.\n const spec = JSON.parse(JSON.stringify(result));\n\n return {\n loc,\n spec,\n };\n });\n};\n\nexport default commentsToOpenApi;\n","let _lazyMatch = () => {\n var __lib__ = (() => {\n var C = Object.defineProperty, ee = Object.getOwnPropertyDescriptor, re = Object.getOwnPropertyNames, te = Object.prototype.hasOwnProperty, ne = (e, r) => {\n for (var t in r) C(e, t, { get: r[t], enumerable: true });\n }, ae = (e, r, t, a) => {\n if (r && typeof r == \"object\" || typeof r == \"function\") for (let n of re(r)) !te.call(e, n) && n !== t && C(e, n, { get: () => r[n], enumerable: !(a = ee(r, n)) || a.enumerable });\n return e;\n }, oe = (e) => ae(C({}, \"__esModule\", { value: true }), e), z = {};\n ne(z, { zeptomatch: () => X });\n var M = (e) => {\n const r = /* @__PURE__ */ new Set(), t = [e];\n for (let a = 0; a < t.length; a++) {\n const n = t[a];\n if (r.has(n)) continue;\n r.add(n);\n const { children: o } = n;\n if (o?.length) for (let s = 0, u = o.length; s < u; s++) t.push(o[s]);\n }\n return Array.from(r);\n }, se = (e) => {\n let r = \"\";\n const t = M(e);\n for (let a = 0, n = t.length; a < n; a++) {\n const o = t[a];\n if (!o.regex) continue;\n const s = o.regex.flags;\n if (r || (r = s), r !== s) throw new Error(`Inconsistent RegExp flags used: \"${r}\" and \"${s}\"`);\n }\n return r;\n }, O = (e, r, t) => {\n const a = t.get(e);\n if (a !== void 0) return a;\n const n = e.partial ?? r;\n let o = \"\";\n if (e.regex && (o += n ? \"(?:$|\" : \"\", o += e.regex.source), e.children?.length) {\n const s = ue(e.children.map((u) => O(u, r, t)).filter(Boolean));\n if (s?.length) {\n const u = e.children.some((E) => !E.regex || !(E.partial ?? r)), l = s.length > 1 || n && (!o.length || u);\n o += l ? n ? \"(?:$|\" : \"(?:\" : \"\", o += s.join(\"|\"), o += l ? \")\" : \"\";\n }\n }\n return e.regex && (o += n ? \")\" : \"\"), t.set(e, o), o;\n }, ie = (e, r) => {\n const t = /* @__PURE__ */ new Map(), a = M(e);\n for (let n = a.length - 1; n >= 0; n--) {\n const o = O(a[n], r, t);\n if (!(n > 0)) return o;\n }\n return \"\";\n }, ue = (e) => Array.from(new Set(e)), R = (e, r, t) => R.compile(e, t).test(r);\n R.compile = (e, r) => {\n const t = r?.partial ?? false, a = ie(e, t), n = se(e);\n return new RegExp(`^(?:${a})$`, n);\n };\n var ce = R, le = (e, r) => {\n const t = ce.compile(e, r), a = `${t.source.slice(0, -1)}[\\\\\\\\/]?$`, n = t.flags;\n return new RegExp(a, n);\n }, pe = le, ve = (e) => {\n const r = e.map((a) => a.source).join(\"|\") || \"$^\", t = e[0]?.flags;\n return new RegExp(r, t);\n }, fe = ve, j = (e) => Array.isArray(e), _ = (e) => typeof e == \"function\", he = (e) => e.length === 0, ge = (() => {\n const { toString: e } = Function.prototype, r = /(?:^\\(\\s*(?:[^,.()]|\\.(?!\\.\\.))*\\s*\\)\\s*=>|^\\s*[a-zA-Z$_][a-zA-Z0-9$_]*\\s*=>)/;\n return (t) => (t.length === 0 || t.length === 1) && r.test(e.call(t));\n })(), de = (e) => typeof e == \"number\", xe = (e) => typeof e == \"object\" && e !== null, me = (e) => e instanceof RegExp, Se = /* @__PURE__ */ (() => {\n const e = /\\\\\\(|\\((?!\\?(?::|=|!|<=|<!))/;\n return (r) => e.test(r.source);\n })(), _e = /* @__PURE__ */ (() => {\n const e = /^[a-zA-Z0-9_-]+$/;\n return (r) => e.test(r.source) && !r.flags.includes(\"i\");\n })(), A = (e) => typeof e == \"string\", f = (e) => e === void 0, ye = (e) => {\n const r = /* @__PURE__ */ new Map();\n return (t) => {\n const a = r.get(t);\n if (a !== void 0) return a;\n const n = e(t);\n return r.set(t, n), n;\n };\n }, I = (e, r, t = {}) => {\n const a = { cache: {}, input: e, index: 0, indexBacktrackMax: 0, options: t, output: [] }, n = h(r)(a), o = Math.max(a.index, a.indexBacktrackMax);\n if (n && a.index === e.length) return a.output;\n throw new Error(`Failed to parse at index ${o}`);\n }, i = (e, r) => j(e) ? we(e, r) : A(e) ? F(e, r) : $e(e, r), we = (e, r) => {\n const t = {};\n for (const a of e) {\n if (a.length !== 1) throw new Error(`Invalid character: \"${a}\"`);\n const n = a.charCodeAt(0);\n t[n] = true;\n }\n return (a) => {\n const n = a.input;\n let o = a.index, s = o;\n for (; s < n.length && n.charCodeAt(s) in t; ) s += 1;\n if (s > o) {\n if (!f(r) && !a.options.silent) {\n const u = n.slice(o, s), l = _(r) ? r(u, n, `${o}`) : r;\n f(l) || a.output.push(l);\n }\n a.index = s;\n }\n return true;\n };\n }, $e = (e, r) => {\n if (_e(e)) return F(e.source, r);\n {\n const t = e.source, a = e.flags.replace(/y|$/, \"y\"), n = new RegExp(t, a);\n return Se(e) && _(r) && !ge(r) ? Ee(n, r) : Ce(n, r);\n }\n }, Ee = (e, r) => (t) => {\n const a = t.index, n = t.input;\n e.lastIndex = a;\n const o = e.exec(n);\n if (o) {\n const s = e.lastIndex;\n if (!t.options.silent) {\n const u = r(...o, n, `${a}`);\n f(u) || t.output.push(u);\n }\n return t.index = s, true;\n } else return false;\n }, Ce = (e, r) => (t) => {\n const a = t.index, n = t.input;\n if (e.lastIndex = a, e.test(n)) {\n const s = e.lastIndex;\n if (!f(r) && !t.options.silent) {\n const u = _(r) ? r(n.slice(a, s), n, `${a}`) : r;\n f(u) || t.output.push(u);\n }\n return t.index = s, true;\n } else return false;\n }, F = (e, r) => (t) => {\n const a = t.index, n = t.input;\n if (n.startsWith(e, a)) {\n if (!f(r) && !t.options.silent) {\n const s = _(r) ? r(e, n, `${a}`) : r;\n f(s) || t.output.push(s);\n }\n return t.index += e.length, true;\n } else return false;\n }, k = (e, r, t, a) => {\n const n = h(e), o = r > 1;\n return P(B(q((s) => {\n let u = 0;\n for (; u < t; ) {\n const l = s.index;\n if (!n(s) || (u += 1, s.index === l)) break;\n }\n return u >= r;\n }, o), a));\n }, L = (e, r) => k(e, 0, 1, r), $ = (e, r) => k(e, 0, 1 / 0, r), Re = (e, r) => k(e, 1, 1 / 0, r), x = (e, r) => {\n const t = e.map(h);\n return P(B(q((a) => {\n for (let n = 0, o = t.length; n < o; n++) if (!t[n](a)) return false;\n return true;\n }), r));\n }, p = (e, r) => {\n const t = e.map(h);\n return P(B((a) => {\n for (let n = 0, o = t.length; n < o; n++) if (t[n](a)) return true;\n return false;\n }, r));\n }, q = (e, r = true, t = false) => {\n const a = h(e);\n return r ? (n) => {\n const o = n.index, s = n.output.length, u = a(n);\n return !u && !t && (n.indexBacktrackMax = Math.max(n.indexBacktrackMax, n.index)), (!u || t) && (n.index = o, n.output.length !== s && (n.output.length = s)), u;\n } : a;\n }, B = (e, r) => {\n const t = h(e);\n return r ? (a) => {\n if (a.options.silent) return t(a);\n const n = a.output.length;\n if (t(a)) {\n const s = a.output.splice(n, 1 / 0), u = r(s);\n return f(u) || a.output.push(u), true;\n } else return false;\n } : t;\n }, P = /* @__PURE__ */ (() => {\n let e = 0;\n return (r) => {\n const t = h(r), a = e += 1;\n return (n) => {\n var o;\n if (n.options.memoization === false) return t(n);\n const s = n.index, u = (o = n.cache)[a] || (o[a] = { indexMax: -1, queue: [] }), l = u.queue;\n if (s <= u.indexMax) {\n const w = u.store || (u.store = /* @__PURE__ */ new Map());\n if (l.length) {\n for (let S = 0, br = l.length; S < br; S += 2) {\n const Nr = l[S * 2], zr = l[S * 2 + 1];\n w.set(Nr, zr);\n }\n l.length = 0;\n }\n const v = w.get(s);\n if (v === false) return false;\n if (de(v)) return n.index = v, true;\n if (v) return n.index = v.index, v.output?.length && n.output.push(...v.output), true;\n }\n const Y = n.output.length, Pr = t(n);\n if (u.indexMax = Math.max(u.indexMax, s), Pr) {\n const w = n.index, v = n.output.length;\n if (v > Y) {\n const S = n.output.slice(Y, v);\n l.push(s, { index: w, output: S });\n } else l.push(s, w);\n return true;\n } else return l.push(s, false), false;\n };\n };\n })(), G = (e) => {\n let r;\n return (t) => (r || (r = h(e())), r(t));\n }, h = ye((e) => {\n if (_(e)) return he(e) ? G(e) : e;\n if (A(e) || me(e)) return i(e);\n if (j(e)) return x(e);\n if (xe(e)) return p(Object.values(e));\n throw new Error(\"Invalid rule\");\n }), d = (e) => e, ke = (e) => typeof e == \"string\", Be = (e) => {\n const r = /* @__PURE__ */ new WeakMap(), t = /* @__PURE__ */ new WeakMap();\n return (a, n) => {\n const o = n?.partial ? t : r, s = o.get(a);\n if (s !== void 0) return s;\n const u = e(a, n);\n return o.set(a, u), u;\n };\n }, Pe = (e) => {\n const r = {}, t = {};\n return (a, n) => {\n const o = n?.partial ? t : r;\n return o[a] ?? (o[a] = e(a, n));\n };\n }, be = i(/\\\\./, d), Ne = i(/./, d), ze = i(/\\*\\*\\*+/, \"*\"), Me = i(/([^/{[(!])\\*\\*/, (e, r) => `${r}*`), Oe = i(/(^|.)\\*\\*(?=[^*/)\\]}])/, (e, r) => `${r}*`), je = $(p([be, ze, Me, Oe, Ne])), Ae = je, Ie = (e) => I(e, Ae, { memoization: false }).join(\"\"), Fe = Ie, U = \"abcdefghijklmnopqrstuvwxyz\", Le = (e) => {\n let r = \"\";\n for (; e > 0; ) {\n const t = (e - 1) % 26;\n r = U[t] + r, e = Math.floor((e - 1) / 26);\n }\n return r;\n }, V = (e) => {\n let r = 0;\n for (let t = 0, a = e.length; t < a; t++) r = r * 26 + U.indexOf(e[t]) + 1;\n return r;\n }, b = (e, r) => {\n if (r < e) return b(r, e);\n const t = [];\n for (; e <= r; ) t.push(e++);\n return t;\n }, qe = (e, r, t) => b(e, r).map((a) => String(a).padStart(t, \"0\")), W = (e, r) => b(V(e), V(r)).map(Le), c = (e) => ({ partial: false, regex: new RegExp(e, \"s\"), children: [] }), y = (e) => ({ children: e }), m = /* @__PURE__ */ (() => {\n const e = (r, t, a) => {\n if (a.has(r)) return;\n a.add(r);\n const { children: n } = r;\n if (!n.length) n.push(t);\n else for (let o = 0, s = n.length; o < s; o++) e(n[o], t, a);\n };\n return (r) => {\n if (!r.length) return y([]);\n for (let t = r.length - 1; t >= 1; t--) {\n const a = /* @__PURE__ */ new Set(), n = r[t - 1], o = r[t];\n e(n, o, a);\n }\n return r[0];\n };\n })(), g = () => ({ regex: new RegExp(\"[\\\\\\\\/]\", \"s\"), children: [] }), Ge = i(/\\\\./, c), Ue = i(/[$.*+?^(){}[\\]\\|]/, (e) => c(`\\\\${e}`)), Ve = i(/[\\\\\\/]/, g), We = i(/[^$.*+?^(){}[\\]\\|\\\\\\/]+/, c), Ze = i(/^(?:!!)*!(.*)$/, (e, r) => c(`(?!^${X.compile(r).source}$).*?`)), De = i(/^(!!)+/), Qe = p([Ze, De]), Te = i(/\\/(\\*\\*\\/)+/, () => y([m([g(), c(\".+?\"), g()]), g()])), He = i(/^(\\*\\*\\/)+/, () => y([c(\"^\"), m([c(\".*?\"), g()])])), Je = i(/\\/(\\*\\*)$/, () => y([m([g(), c(\".*?\")]), c(\"$\")])), Ke = i(/\\*\\*/, () => c(\".*?\")), Z = p([Te, He, Je, Ke]), Xe = i(/\\*\\/(?!\\*\\*\\/|\\*$)/, () => m([c(\"[^\\\\\\\\/]*?\"), g()])), Ye = i(/\\*/, () => c(\"[^\\\\\\\\/]*\")), D = p([Xe, Ye]), Q = i(\"?\", () => c(\"[^\\\\\\\\/]\")), er = i(\"[\", d), rr = i(\"]\", d), tr = i(/[!^]/, \"^\\\\\\\\/\"), nr = i(/[a-z]-[a-z]|[0-9]-[0-9]/i, d), ar = i(/\\\\./, d), or = i(/[$.*+?^(){}[\\|]/, (e) => `\\\\${e}`), sr = i(/[\\\\\\/]/, \"\\\\\\\\/\"), ir = i(/[^$.*+?^(){}[\\]\\|\\\\\\/]+/, d), ur = p([ar, or, sr, nr, ir]), T = x([er, L(tr), $(ur), rr], (e) => c(e.join(\"\"))), cr = i(\"{\", \"(?:\"), lr = i(\"}\", \")\"), pr = i(/(\\d+)\\.\\.(\\d+)/, (e, r, t) => qe(+r, +t, Math.min(r.length, t.length)).join(\"|\")), vr = i(/([a-z]+)\\.\\.([a-z]+)/, (e, r, t) => W(r, t).join(\"|\")), fr = i(/([A-Z]+)\\.\\.([A-Z]+)/, (e, r, t) => W(r.toLowerCase(), t.toLowerCase()).join(\"|\").toUpperCase()), hr = p([pr, vr, fr]), H = x([cr, hr, lr], (e) => c(e.join(\"\"))), gr = i(\"{\"), dr = i(\"}\"), xr = i(\",\"), mr = i(/\\\\./, c), Sr = i(/[$.*+?^(){[\\]\\|]/, (e) => c(`\\\\${e}`)), _r = i(/[\\\\\\/]/, g), yr = i(/[^$.*+?^(){}[\\]\\|\\\\\\/,]+/, c), wr = G(() => K), $r = i(\"\", () => c(\"(?:)\")), Er = Re(p([Z, D, Q, T, H, wr, mr, Sr, _r, yr]), m), J = p([Er, $r]), K = x([gr, L(x([J, $(x([xr, J]))])), dr], y), Cr = $(p([Qe, Z, D, Q, T, H, K, Ge, Ue, Ve, We]), m), Rr = Cr, kr = (e) => I(e, Rr, { memoization: false })[0], Br = kr, N = (e, r, t) => N.compile(e, t).test(r);\n N.compile = (() => {\n const e = Pe((t, a) => pe(Br(Fe(t)), a)), r = Be((t, a) => fe(t.map((n) => e(n, a))));\n return (t, a) => ke(t) ? e(t, a) : r(t, a);\n })();\n var X = N;\n return oe(z);\n })();\n return __lib__.default || __lib__;\n};\nlet _match;\nconst zeptomatch = (path, pattern) => {\n if (!_match) {\n _match = _lazyMatch();\n _lazyMatch = null;\n }\n return _match(path, pattern);\n};\n\nconst DRIVE_LETTER_START_RE = /^[A-Z]:\\//i;\nconst normalizeWindowsPath = (input = \"\") => {\n if (!input) {\n return input;\n }\n return input.replaceAll(\"\\\\\", \"/\").replace(DRIVE_LETTER_START_RE, (r) => r.toUpperCase());\n};\n\nconst UNC_REGEX = /^[/\\\\]{2}/;\nconst IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Z]:[/\\\\]/i;\nconst DRIVE_LETTER_RE = /^[A-Z]:$/i;\nconst ROOT_FOLDER_RE = /^\\/([A-Z]:)?$/i;\nconst EXTNAME_RE = /.(\\.[^./]+)$/;\nconst PATH_ROOT_RE = /^[/\\\\]|^[a-z]:[/\\\\]/i;\nconst cwd = () => {\n if (typeof process.cwd === \"function\") {\n return process.cwd().replaceAll(\"\\\\\", \"/\");\n }\n return \"/\";\n};\nconst sep = \"/\";\nconst delimiter = /^win/i.test(globalThis.process?.platform) ? \";\" : \":\";\nconst normalizeString = (path, allowAboveRoot) => {\n let result = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let char;\n for (let index = 0; index <= path.length; ++index) {\n if (index < path.length) {\n char = path[index];\n } else if (char === \"/\") {\n break;\n } else {\n char = \"/\";\n }\n if (char === \"/\") {\n if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {\n if (result.length < 2 || lastSegmentLength !== 2 || !result.endsWith(\".\") || result.at(-2) !== \".\") {\n if (result.length > 2) {\n const lastSlashIndex = result.lastIndexOf(\"/\");\n if (lastSlashIndex === -1) {\n result = \"\";\n lastSegmentLength = 0;\n } else {\n result = result.slice(0, lastSlashIndex);\n lastSegmentLength = result.length - 1 - result.lastIndexOf(\"/\");\n }\n lastSlash = index;\n dots = 0;\n continue;\n } else if (result.length > 0) {\n result = \"\";\n lastSegmentLength = 0;\n lastSlash = index;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n result += result.length > 0 ? \"/..\" : \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (result.length > 0) {\n result += `/${path.slice(lastSlash + 1, index)}`;\n } else {\n result = path.slice(lastSlash + 1, index);\n }\n lastSegmentLength = index - lastSlash - 1;\n }\n lastSlash = index;\n dots = 0;\n } else if (char === \".\" && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return result;\n};\nconst isAbsolute = (path) => IS_ABSOLUTE_RE.test(path);\nconst normalize = function(path) {\n if (path.length === 0) {\n return \".\";\n }\n path = normalizeWindowsPath(path);\n const isUNCPath = UNC_REGEX.exec(path);\n const isPathAbsolute = isAbsolute(path);\n const trailingSeparator = path.at(-1) === \"/\";\n path = normalizeString(path, !isPathAbsolute);\n if (path.length === 0) {\n if (isPathAbsolute) {\n return \"/\";\n }\n return trailingSeparator ? \"./\" : \".\";\n }\n if (trailingSeparator) {\n path += \"/\";\n }\n if (DRIVE_LETTER_RE.test(path)) {\n path += \"/\";\n }\n if (isUNCPath) {\n if (!isPathAbsolute) {\n return `//./${path}`;\n }\n return `//${path}`;\n }\n return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;\n};\nconst join = (...segments) => {\n let path = \"\";\n for (const seg of segments) {\n if (!seg) {\n continue;\n }\n if (path.length > 0) {\n const pathTrailing = path[path.length - 1] === \"/\";\n const segLeading = seg[0] === \"/\";\n const both = pathTrailing && segLeading;\n if (both) {\n path += seg.slice(1);\n } else {\n path += pathTrailing || segLeading ? seg : `/${seg}`;\n }\n } else {\n path += seg;\n }\n }\n return normalize(path);\n};\nconst resolve = function(...arguments_) {\n arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));\n let resolvedPath = \"\";\n let resolvedAbsolute = false;\n for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n const path = index >= 0 ? arguments_[index] : cwd();\n if (!path || path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = isAbsolute(path);\n }\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nconst toNamespacedPath = function(p) {\n return normalizeWindowsPath(p);\n};\nconst extname = function(p) {\n const match = EXTNAME_RE.exec(normalizeWindowsPath(p));\n return match?.[1] ?? \"\";\n};\nconst relative = function(from, to) {\n const splitFrom = resolve(from).replace(ROOT_FOLDER_RE, \"$1\").split(\"/\");\n const splitTo = resolve(to).replace(ROOT_FOLDER_RE, \"$1\").split(\"/\");\n if (splitTo[0][1] === \":\" && splitFrom[0][1] === \":\" && splitFrom[0] !== splitTo[0]) {\n return splitTo.join(\"/\");\n }\n const fromCopy = [...splitFrom];\n for (const segment of fromCopy) {\n if (splitTo[0] !== segment) {\n break;\n }\n splitFrom.shift();\n splitTo.shift();\n }\n return [...splitFrom.map(() => \"..\"), ...splitTo].join(\"/\");\n};\nconst dirname = (path) => {\n const segments = normalizeWindowsPath(path).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n if (segments.length === 1 && DRIVE_LETTER_RE.test(segments[0])) {\n segments[0] += \"/\";\n }\n return segments.join(\"/\") || (isAbsolute(path) ? \"/\" : \".\");\n};\nconst format = function(pathObject) {\n const segments = [pathObject.root, pathObject.dir, pathObject.base ?? pathObject.name + pathObject.ext].filter(Boolean);\n return normalizeWindowsPath(pathObject.root ? resolve(...segments) : segments.join(\"/\"));\n};\nconst basename = (path, extension) => {\n const lastSegment = normalizeWindowsPath(path).split(\"/\").pop();\n if (extension && lastSegment.endsWith(extension)) {\n return lastSegment.slice(0, -extension.length);\n }\n return lastSegment;\n};\nconst parse = function(p) {\n const root = PATH_ROOT_RE.exec(p)?.[0]?.replaceAll(\"\\\\\", \"/\") ?? \"\";\n const base = basename(p);\n const extension = extname(base);\n return {\n base,\n dir: dirname(p),\n ext: extension,\n name: base.slice(0, base.length - extension.length),\n root\n };\n};\nconst matchesGlob = (path, pattern) => (\n // https://github.com/nodejs/node/blob/main/lib/internal/fs/glob.js#L660\n zeptomatch(pattern, normalize(path))\n);\n\nconst path = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n basename,\n delimiter,\n dirname,\n extname,\n format,\n isAbsolute,\n join,\n matchesGlob,\n normalize,\n normalizeString,\n parse,\n relative,\n resolve,\n sep,\n toNamespacedPath\n}, Symbol.toStringTag, { value: 'Module' });\n\nexport { dirname as a, basename as b, normalizeString as c, delimiter as d, extname as e, format as f, parse as g, resolve as h, isAbsolute as i, join as j, normalizeWindowsPath as k, matchesGlob as m, normalize as n, path as p, relative as r, sep as s, toNamespacedPath as t };\n","import { createRequire as __cjs_createRequire } from \"node:module\";\n\nconst __cjs_require = __cjs_createRequire(import.meta.url);\n\nconst __cjs_getProcess = typeof globalThis !== \"undefined\" && typeof globalThis.process !== \"undefined\" ? globalThis.process : process;\n\nconst __cjs_getBuiltinModule = (module) => {\n // Check if we're in Node.js and version supports getBuiltinModule\n if (typeof __cjs_getProcess !== \"undefined\" && __cjs_getProcess.versions && __cjs_getProcess.versions.node) {\n const [major, minor] = __cjs_getProcess.versions.node.split(\".\").map(Number);\n // Node.js 20.16.0+ and 22.3.0+\n if (major > 22 || (major === 22 && minor >= 3) || (major === 20 && minor >= 16)) {\n return __cjs_getProcess.getBuiltinModule(module);\n }\n }\n // Fallback to createRequire\n return __cjs_require(module);\n};\n\nconst {\n fileURLToPath\n} = __cjs_getBuiltinModule(\"node:url\");\nimport { k as normalizeWindowsPath, j as join, e as extname } from './packem_shared/path-CR6YkPXX.js';\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar binaryExtensions$1;\nvar hasRequiredBinaryExtensions;\n\nfunction requireBinaryExtensions () {\n\tif (hasRequiredBinaryExtensions) return binaryExtensions$1;\n\thasRequiredBinaryExtensions = 1;\n\tbinaryExtensions$1 = [\n\t\t\"3dm\",\n\t\t\"3ds\",\n\t\t\"3g2\",\n\t\t\"3gp\",\n\t\t\"7z\",\n\t\t\"a\",\n\t\t\"aac\",\n\t\t\"adp\",\n\t\t\"afdesign\",\n\t\t\"afphoto\",\n\t\t\"afpub\",\n\t\t\"ai\",\n\t\t\"aif\",\n\t\t\"aiff\",\n\t\t\"alz\",\n\t\t\"ape\",\n\t\t\"apk\",\n\t\t\"appimage\",\n\t\t\"ar\",\n\t\t\"arj\",\n\t\t\"asf\",\n\t\t\"au\",\n\t\t\"avi\",\n\t\t\"bak\",\n\t\t\"baml\",\n\t\t\"bh\",\n\t\t\"bin\",\n\t\t\"bk\",\n\t\t\"bmp\",\n\t\t\"btif\",\n\t\t\"bz2\",\n\t\t\"bzip2\",\n\t\t\"cab\",\n\t\t\"caf\",\n\t\t\"cgm\",\n\t\t\"class\",\n\t\t\"cmx\",\n\t\t\"cpio\",\n\t\t\"cr2\",\n\t\t\"cr3\",\n\t\t\"cur\",\n\t\t\"dat\",\n\t\t\"dcm\",\n\t\t\"deb\",\n\t\t\"dex\",\n\t\t\"djvu\",\n\t\t\"dll\",\n\t\t\"dmg\",\n\t\t\"dng\",\n\t\t\"doc\",\n\t\t\"docm\",\n\t\t\"docx\",\n\t\t\"dot\",\n\t\t\"dotm\",\n\t\t\"dra\",\n\t\t\"DS_Store\",\n\t\t\"dsk\",\n\t\t\"dts\",\n\t\t\"dtshd\",\n\t\t\"dvb\",\n\t\t\"dwg\",\n\t\t\"dxf\",\n\t\t\"ecelp4800\",\n\t\t\"ecelp7470\",\n\t\t\"ecelp9600\",\n\t\t\"egg\",\n\t\t\"eol\",\n\t\t\"eot\",\n\t\t\"epub\",\n\t\t\"exe\",\n\t\t\"f4v\",\n\t\t\"fbs\",\n\t\t\"fh\",\n\t\t\"fla\",\n\t\t\"flac\",\n\t\t\"flatpak\",\n\t\t\"fli\",\n\t\t\"flv\",\n\t\t\"fpx\",\n\t\t\"fst\",\n\t\t\"fvt\",\n\t\t\"g3\",\n\t\t\"gh\",\n\t\t\"gif\",\n\t\t\"graffle\",\n\t\t\"gz\",\n\t\t\"gzip\",\n\t\t\"h261\",\n\t\t\"h263\",\n\t\t\"h264\",\n\t\t\"icns\",\n\t\t\"ico\",\n\t\t\"ief\",\n\t\t\"img\",\n\t\t\"ipa\",\n\t\t\"iso\",\n\t\t\"jar\",\n\t\t\"jpeg\",\n\t\t\"jpg\",\n\t\t\"jpgv\",\n\t\t\"jpm\",\n\t\t\"jxr\",\n\t\t\"key\",\n\t\t\"ktx\",\n\t\t\"lha\",\n\t\t\"lib\",\n\t\t\"lvp\",\n\t\t\"lz\",\n\t\t\"lzh\",\n\t\t\"lzma\",\n\t\t\"lzo\",\n\t\t\"m3u\",\n\t\t\"m4a\",\n\t\t\"m4v\",\n\t\t\"mar\",\n\t\t\"mdi\",\n\t\t\"mht\",\n\t\t\"mid\",\n\t\t\"midi\",\n\t\t\"mj2\",\n\t\t\"mka\",\n\t\t\"mkv\",\n\t\t\"mmr\",\n\t\t\"mng\",\n\t\t\"mobi\",\n\t\t\"mov\",\n\t\t\"movie\",\n\t\t\"mp3\",\n\t\t\"mp4\",\n\t\t\"mp4a\",\n\t\t\"mpeg\",\n\t\t\"mpg\",\n\t\t\"mpga\",\n\t\t\"mxu\",\n\t\t\"nef\",\n\t\t\"npx\",\n\t\t\"numbers\",\n\t\t\"nupkg\",\n\t\t\"o\",\n\t\t\"odp\",\n\t\t\"ods\",\n\t\t\"odt\",\n\t\t\"oga\",\n\t\t\"ogg\",\n\t\t\"ogv\",\n\t\t\"otf\",\n\t\t\"ott\",\n\t\t\"pages\",\n\t\t\"pbm\",\n\t\t\"pcx\",\n\t\t\"pdb\",\n\t\t\"pdf\",\n\t\t\"pea\",\n\t\t\"pgm\",\n\t\t\"pic\",\n\t\t\"png\",\n\t\t\"pnm\",\n\t\t\"pot\",\n\t\t\"potm\",\n\t\t\"potx\",\n\t\t\"ppa\",\n\t\t\"ppam\",\n\t\t\"ppm\",\n\t\t\"pps\",\n\t\t\"ppsm\",\n\t\t\"ppsx\",\n\t\t\"ppt\",\n\t\t\"pptm\",\n\t\t\"pptx\",\n\t\t\"psd\",\n\t\t\"pya\",\n\t\t\"pyc\",\n\t\t\"pyo\",\n\t\t\"pyv\",\n\t\t\"qt\",\n\t\t\"rar\",\n\t\t\"ras\",\n\t\t\"raw\",\n\t\t\"resources\",\n\t\t\"rgb\",\n\t\t\"rip\",\n\t\t\"rlc\",\n\t\t\"rmf\",\n\t\t\"rmvb\",\n\t\t\"rpm\",\n\t\t\"rtf\",\n\t\t\"rz\",\n\t\t\"s3m\",\n\t\t\"s7z\",\n\t\t\"scpt\",\n\t\t\"sgi\",\n\t\t\"shar\",\n\t\t\"snap\",\n\t\t\"sil\",\n\t\t\"sketch\",\n\t\t\"slk\",\n\t\t\"smv\",\n\t\t\"snk\",\n\t\t\"so\",\n\t\t\"stl\",\n\t\t\"suo\",\n\t\t\"sub\",\n\t\t\"swf\",\n\t\t\"tar\",\n\t\t\"tbz\",\n\t\t\"tbz2\",\n\t\t\"tga\",\n\t\t\"tgz\",\n\t\t\"thmx\",\n\t\t\"tif\",\n\t\t\"tiff\",\n\t\t\"tlz\",\n\t\t\"ttc\",\n\t\t\"ttf\",\n\t\t\"txz\",\n\t\t\"udf\",\n\t\t\"uvh\",\n\t\t\"uvi\",\n\t\t\"uvm\",\n\t\t\"uvp\",\n\t\t\"uvs\",\n\t\t\"uvu\",\n\t\t\"viv\",\n\t\t\"vob\",\n\t\t\"war\",\n\t\t\"wav\",\n\t\t\"wax\",\n\t\t\"wbmp\",\n\t\t\"wdp\",\n\t\t\"weba\",\n\t\t\"webm\",\n\t\t\"webp\",\n\t\t\"whl\",\n\t\t\"wim\",\n\t\t\"wm\",\n\t\t\"wma\",\n\t\t\"wmv\",\n\t\t\"wmx\",\n\t\t\"woff\",\n\t\t\"woff2\",\n\t\t\"wrm\",\n\t\t\"wvx\",\n\t\t\"xbm\",\n\t\t\"xif\",\n\t\t\"xla\",\n\t\t\"xlam\",\n\t\t\"xls\",\n\t\t\"xlsb\",\n\t\t\"xlsm\",\n\t\t\"xlsx\",\n\t\t\"xlt\",\n\t\t\"xltm\",\n\t\t\"xltx\",\n\t\t\"xm\",\n\t\t\"xmind\",\n\t\t\"xpi\",\n\t\t\"xpm\",\n\t\t\"xwd\",\n\t\t\"xz\",\n\t\t\"z\",\n\t\t\"zip\",\n\t\t\"zipx\"\n\t];\n\treturn binaryExtensions$1;\n}\n\nvar binaryExtensionsExports = /*@__PURE__*/ requireBinaryExtensions();\nconst binaryExtensions = /*@__PURE__*/getDefaultExportFromCjs(binaryExtensionsExports);\n\nconst extensions = new Set(binaryExtensions);\nconst pathSeparators = /* @__PURE__ */ new Set([\"/\", \"\\\\\", void 0]);\nconst normalizedAliasSymbol = /* @__PURE__ */ Symbol.for(\"pathe:normalizedAlias\");\nconst FILENAME_RE = /(^|[/\\\\])([^/\\\\]+?)(?=(?:\\.[^.]+)?$)/;\nconst compareAliases = (a, b) => b.split(\"/\").length - a.split(\"/\").length;\nconst hasTrailingSlash = (path = \"/\") => {\n const lastChar = path.at(-1);\n return lastChar === \"/\" || lastChar === \"\\\\\";\n};\nconst normalizeAliases = (_aliases) => {\n if (_aliases[normalizedAliasSymbol]) {\n return _aliases;\n }\n const aliases = Object.fromEntries(Object.entries(_aliases).toSorted(([a], [b]) => compareAliases(a, b)));\n for (const key in aliases) {\n for (const alias in aliases) {\n if (alias === key || key.startsWith(alias)) {\n continue;\n }\n if (aliases[key].startsWith(alias) && pathSeparators.has(aliases[key][alias.length])) {\n aliases[key] = aliases[alias] + aliases[key].slice(alias.length);\n }\n }\n }\n Object.defineProperty(aliases, normalizedAliasSymbol, {\n enumerable: false,\n value: true\n });\n return aliases;\n};\nconst resolveAlias = (path, aliases) => {\n path = normalizeWindowsPath(path);\n aliases = normalizeAliases(aliases);\n for (const [alias, to] of Object.entries(aliases)) {\n if (!path.startsWith(alias)) {\n continue;\n }\n const stripedAlias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;\n if (hasTrailingSlash(path[stripedAlias.length])) {\n return join(to, path.slice(alias.length));\n }\n }\n return path;\n};\nconst filename = (path) => FILENAME_RE.exec(path)?.[2];\nconst reverseResolveAlias = (path, aliases) => {\n path = normalizeWindowsPath(path);\n aliases = normalizeAliases(aliases);\n for (const [to, alias] of Object.entries(aliases).toReversed()) {\n if (!path.startsWith(alias)) {\n continue;\n }\n const stripedAlias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;\n if (hasTrailingSlash(path[stripedAlias.length])) {\n return join(to, path.slice(alias.length));\n }\n }\n return path;\n};\nconst isRelative = (path) => /^(?:\\.?\\.[/\\\\]|\\.\\.\\B)/.test(path) || path === \"..\";\nconst isBinaryPath = (path) => extensions.has(extname(path).slice(1).toLowerCase());\nconst toPath = (urlOrPath) => normalizeWindowsPath(urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath);\nconst isWindows = () => {\n if (!globalThis?.process) {\n return false;\n }\n if (globalThis?.process?.platform === \"win32\" || globalThis?.process?.platform === \"cygwin\") {\n return true;\n }\n const osType = globalThis?.process?.env.OSTYPE;\n if (typeof osType !== \"string\") {\n return false;\n }\n return /^(?:msys|cygwin)$/.test(osType);\n};\n\nexport { filename, isBinaryPath, isRelative, isWindows, normalizeAliases, resolveAlias, reverseResolveAlias, toPath };\n","class WalkError extends Error {\n /** File path of the root that's being walked. */\n root;\n /**\n * Constructs a new instance.\n * @param cause The underlying error or reason for the walk failure.\n * @param root The root directory path where the walk operation started or encountered the error.\n */\n constructor(cause, root) {\n super(`${cause instanceof Error ? cause.message : cause} for path \"${root}\"`);\n this.cause = cause;\n this.root = root;\n }\n // eslint-disable-next-line class-methods-use-this\n get name() {\n return \"WalkError\";\n }\n // eslint-disable-next-line class-methods-use-this,@typescript-eslint/explicit-module-boundary-types\n set name(_name) {\n throw new Error(\"Cannot overwrite name of WalkError\");\n }\n}\n\nexport { WalkError as default };\n","const assertValidFileOrDirectoryPath = (fileOrDirectoryPath) => {\n if (!fileOrDirectoryPath || !(fileOrDirectoryPath instanceof URL) && typeof fileOrDirectoryPath !== \"string\") {\n throw new TypeError(\"Path must be a non-empty string or URL.\");\n }\n};\n\nexport { assertValidFileOrDirectoryPath as default };\n","const globToRegExp = (glob) => {\n const reString = glob.replace(/\\.\\*/g, \".([^/]*)\").replace(/\\*\\*/g, \"(.*)\").replace(/(?<!\\.)\\*(?!\\*)/g, \"([^/]*)\").replace(/\\?/g, \"[^/]\").replace(/\\.(?!\\*)/g, String.raw`\\.`).replace(/\\{/g, \"(\").replace(/\\}/g, \")\").replace(/,/g, \"|\").replace(/\\[!(.*?)\\]/g, \"[^$1]\");\n return new RegExp(`^${reString}$`);\n};\n\nconst walkInclude = (path, extensions, match, skip) => {\n if (Array.isArray(extensions) && extensions.length > 0 && !extensions.some((extension) => path.endsWith(extension))) {\n return false;\n }\n if (match && !match.some((pattern) => pattern.test(path))) {\n return false;\n }\n return !skip?.some((pattern) => pattern.test(path));\n};\n\nexport { globToRegExp as g, walkInclude as w };\n","import { createRequire as __cjs_createRequire } from \"node:module\";\n\nconst __cjs_require = __cjs_createRequire(import.meta.url);\n\nconst __cjs_getProcess = typeof globalThis !== \"undefined\" && typeof globalThis.process !== \"undefined\" ? globalThis.process : process;\n\nconst __cjs_getBuiltinModule = (module) => {\n // Check if we're in Node.js and version supports getBuiltinModule\n if (typeof __cjs_getProcess !== \"undefined\" && __cjs_getProcess.versions && __cjs_getProcess.versions.node) {\n const [major, minor] = __cjs_getProcess.versions.node.split(\".\").map(Number);\n // Node.js 20.16.0+ and 22.3.0+\n if (major > 22 || (major === 22 && minor >= 3) || (major === 20 && minor >= 16)) {\n return __cjs_getProcess.getBuiltinModule(module);\n }\n }\n // Fallback to createRequire\n return __cjs_require(module);\n};\n\nconst {\n readdir,\n realpath,\n stat\n} = __cjs_getBuiltinModule(\"node:fs/promises\");\nimport { resolve, join, normalize, basename } from '@visulima/path';\nimport { toPath } from '@visulima/path/utils';\nimport WalkError from './WalkError-DUdQd6FT.js';\nimport assertValidFileOrDirectoryPath from './assertValidFileOrDirectoryPath-8HANmVjk.js';\nimport { g as globToRegExp, w as walkInclude } from './walk-include-CZco7BvN.js';\n\nconst _createWalkEntry = async (path) => {\n const normalizePath = normalize(path);\n const name = basename(normalizePath);\n const info = await stat(normalizePath);\n return {\n isDirectory: () => info.isDirectory(),\n isFile: () => info.isFile(),\n isSymbolicLink: () => info.isSymbolicLink(),\n name,\n path: normalizePath\n };\n};\nasync function* walk(directory, {\n extensions,\n followSymlinks = false,\n includeDirs: includeDirectories = true,\n includeFiles = true,\n includeSymlinks = true,\n match,\n maxDepth = Number.POSITIVE_INFINITY,\n skip\n} = {}) {\n assertValidFileOrDirectoryPath(directory);\n if (maxDepth < 0) {\n return;\n }\n const mappedMatch = match ? match.map((pattern) => typeof pattern === \"string\" ? globToRegExp(pattern) : pattern) : void 0;\n const mappedSkip = skip ? skip.map((pattern) => typeof pattern === \"string\" ? globToRegExp(pattern) : pattern) : void 0;\n directory = resolve(toPath(directory));\n if (includeDirectories && walkInclude(directory, extensions, mappedMatch, mappedSkip)) {\n yield await _createWalkEntry(directory);\n }\n if (maxDepth < 1 || !walkInclude(directory, void 0, void 0, mappedSkip)) {\n return;\n }\n try {\n for await (const entry of await readdir(directory, {\n withFileTypes: true\n })) {\n let path = join(directory, entry.name);\n if (entry.isSymbolicLink()) {\n if (followSymlinks) {\n path = await realpath(path);\n } else if (includeSymlinks && walkInclude(path, extensions, mappedMatch, mappedSkip)) {\n yield {\n isDirectory: entry.isDirectory,\n isFile: entry.isFile,\n isSymbolicLink: entry.isSymbolicLink,\n name: entry.name,\n path\n };\n } else {\n continue;\n }\n }\n if (entry.isSymbolicLink() || entry.isDirectory()) {\n yield* walk(path, {\n extensions,\n followSymlinks,\n includeDirs: includeDirectories,\n includeFiles,\n includeSymlinks,\n match: mappedMatch,\n maxDepth: maxDepth - 1,\n skip: mappedSkip\n });\n } else if (entry.isFile() && includeFiles && walkInclude(path, extensions, mappedMatch, mappedSkip)) {\n yield {\n isDirectory: () => entry.isDirectory(),\n isFile: () => entry.isFile(),\n isSymbolicLink: () => entry.isSymbolicLink(),\n name: entry.name,\n path\n };\n }\n }\n } catch (error) {\n if (error instanceof WalkError) {\n throw error;\n }\n throw new WalkError(error, directory);\n }\n}\n\nexport { walk as default };\n","import walk from './walk-BhTbpr3y.js';\n\nconst collect = async (directory, options = {}) => {\n if (!Array.isArray(options.extensions)) {\n options.extensions = [\"js\", \"mjs\", \"cjs\", \"ts\"];\n }\n const entries = [];\n for await (const entry of walk(directory, options)) {\n entries.push(entry.path);\n }\n return entries;\n};\n\nexport { collect as default };\n","// eslint-disable-next-line import/prefer-default-export\nexport const DEFAULT_EXCLUDE = [\n \"coverage/**\",\n \".github/**\",\n \"**/*.d.ts\",\n \"**/test{,s}/**\",\n \"**/test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}\",\n \"**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}\",\n \"**/__tests__/**\",\n \"**/{ava,babel,nyc}.config.{js,cjs,mjs}\",\n \"**/jest.config.{js,cjs,mjs,ts}\",\n \"**/{karma,rollup,webpack}.config.js\",\n \"**/.{eslint,mocha}rc.{js,cjs}\",\n \"**/.{travis,yarnrc}.yml\",\n \"**/{docker-compose,docker}.yml\",\n \"**/.yamllint.{yaml,yml}\",\n \"**/node_modules/**\",\n \"**/{pnpm-workspace,pnpm-lock}.yaml\",\n \"**/{package,package-lock}.json\",\n \"**/yarn.lock\",\n \"**/package.json5\",\n \"**/.next/**\",\n];\n","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport type OpenAPI from \"openapi-types\";\n\nconst validate = async (spec: Record<string, unknown>): Promise<void> => {\n await SwaggerParser.validate(spec as OpenAPI.OpenAPI.Document);\n};\n\nexport default validate;\n"]}