@visulima/jsdoc-open-api 1.3.3 → 1.3.5
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.
- package/CHANGELOG.md +14 -0
- package/dist/chunk-6MA34BEH.mjs +50 -0
- package/dist/chunk-6MA34BEH.mjs.map +1 -0
- package/dist/chunk-PVYGEAVR.js +59 -0
- package/dist/chunk-PVYGEAVR.js.map +1 -0
- package/dist/cli/commander/index.js +2 -2
- package/dist/cli/commander/index.mjs +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/package.json +2 -2
- package/dist/chunk-WV5JV6ET.js +0 -57
- package/dist/chunk-WV5JV6ET.js.map +0 -1
- package/dist/chunk-ZI2TL3UI.mjs +0 -49
- package/dist/chunk-ZI2TL3UI.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## @visulima/jsdoc-open-api [1.3.5](https://github.com/visulima/visulima/compare/@visulima/jsdoc-open-api@1.3.4...@visulima/jsdoc-open-api@1.3.5) (2023-05-29)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* added read-pkg-up to check if the first found package.json has the type key to create the correct config file export ([edc0e6e](https://github.com/visulima/visulima/commit/edc0e6e5cfef0b93a4280f67cd2dec37581e0dc6))
|
|
7
|
+
|
|
8
|
+
## @visulima/jsdoc-open-api [1.3.4](https://github.com/visulima/visulima/compare/@visulima/jsdoc-open-api@1.3.3...@visulima/jsdoc-open-api@1.3.4) (2023-05-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **#146:** check if config is a commonjs file ([e8f4522](https://github.com/visulima/visulima/commit/e8f45227b5df10a7b1652326141c5d4e47399b61)), closes [#146](https://github.com/visulima/visulima/issues/146)
|
|
14
|
+
|
|
1
15
|
## @visulima/jsdoc-open-api [1.3.3](https://github.com/visulima/visulima/compare/@visulima/jsdoc-open-api@1.3.2...@visulima/jsdoc-open-api@1.3.3) (2023-05-25)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { b, d, e, f } from './chunk-HCLKS7N6.mjs';
|
|
2
|
+
import { existsSync, realpathSync, writeFileSync, lstatSync, mkdirSync } from 'fs';
|
|
3
|
+
import x from 'read-pkg-up';
|
|
4
|
+
import S from '@apidevtools/swagger-parser';
|
|
5
|
+
import { collect } from '@visulima/readdir';
|
|
6
|
+
import u from 'cli-progress';
|
|
7
|
+
import { resolve, dirname } from 'path';
|
|
8
|
+
|
|
9
|
+
var h=(r,l=process.cwd())=>{if(existsSync(r))throw new Error("Config file already exists");let e=x.sync({cwd:realpathSync(l)}),o="module.exports =";if(e){let{packageJson:n,path:t}=e;console.info(`Found package.json at "${t}"`),n.type==="module"&&(console.info("Found package.json with type: module, using ES6 as export for the config file"),o="export default");}else console.info("No package.json found");writeFileSync(r,`${o} {
|
|
10
|
+
exclude: [
|
|
11
|
+
'coverage/**',
|
|
12
|
+
'.github/**',
|
|
13
|
+
'packages/*/test{,s}/**',
|
|
14
|
+
'**/*.d.ts',
|
|
15
|
+
'test{,s}/**',
|
|
16
|
+
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
17
|
+
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
18
|
+
'**/__tests__/**',
|
|
19
|
+
'**/{ava,babel,nyc}.config.{js,cjs,mjs}',
|
|
20
|
+
'**/jest.config.{js,cjs,mjs,ts}',
|
|
21
|
+
'**/{karma,rollup,webpack}.config.js',
|
|
22
|
+
'**/.{eslint,mocha}rc.{js,cjs}',
|
|
23
|
+
'**/.{travis,yarnrc}.yml',
|
|
24
|
+
'**/{docker-compose,docker}.yml',
|
|
25
|
+
'**/.yamllint.{yaml,yml}',
|
|
26
|
+
'**/node_modules/**',
|
|
27
|
+
'**/pnpm-lock.yaml',
|
|
28
|
+
'**/pnpm-workspace.yaml',
|
|
29
|
+
'**/{package,package-lock}.json',
|
|
30
|
+
'**/yarn.lock',
|
|
31
|
+
'**/package.json5',
|
|
32
|
+
'**/.next/**',
|
|
33
|
+
],
|
|
34
|
+
followSymlinks: false,
|
|
35
|
+
swaggerDefinition: {
|
|
36
|
+
openapi: '3.0.0',
|
|
37
|
+
info: {
|
|
38
|
+
title: 'API',
|
|
39
|
+
version: '1.0.0',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
`),console.log(`Created "${r}"`);},V=h;var O=async(r,l,e$1)=>{let o={exclude:[],swaggerDefinition:{}};try{let s=await import(resolve(e$1.config??r));s?.default&&(s=s.default),o=s;}catch{throw new Error(`No config file found, on: ${e$1.config??".openapirc.js"}
|
|
44
|
+
`)}let n=new u.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"{value}/{total} | {bar} | {filename}"},u.Presets.shades_grey),t=new b(o.swaggerDefinition);for await(let s of l){lstatSync(s).isDirectory();let i=await collect(s,{skip:[...o.exclude,"node_modules/**"],extensions:o.extensions??[".js",".cjs",".mjs",".ts",".tsx",".jsx",".yaml",".yml"],followSymlinks:o.followSymlinks??!1,match:o.include,minimatchOptions:{match:{debug:e$1.verbose,matchBase:!0},skip:{debug:e$1.verbose,matchBase:!0}}});(e$1.verbose??e$1.veryVerbose)&&console.log(`
|
|
45
|
+
Found ${i.length} files in ${s}`),e$1.veryVerbose&&console.log(i);let y=n.create(i.length,0);i.forEach(c=>{e$1.verbose&&console.log(`Parsing file ${c}`),y.increment(1,{filename:s});let w=d(c,e,e$1.verbose);t.addData(w.map(m=>m.spec));let j=d(c,f,e$1.verbose);t.addData(j.map(m=>m.spec));});}e$1.verbose&&console.log("Validating swagger spec"),e$1.veryVerbose&&console.log(JSON.stringify(t,null,2)),await S.validate(JSON.parse(JSON.stringify(t)));let a=e$1.output??"swagger.json";n.stop(),e$1.verbose&&console.log(`Written swagger spec to "${a}" file`),mkdirSync(dirname(a),{recursive:!0}),writeFileSync(a,JSON.stringify(t,null,2)),console.log(`
|
|
46
|
+
Swagger specification is ready, check the${a}file.`);},G=O;
|
|
47
|
+
|
|
48
|
+
export { V as a, G as b };
|
|
49
|
+
//# sourceMappingURL=out.js.map
|
|
50
|
+
//# sourceMappingURL=chunk-6MA34BEH.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/command/init-command.ts","../src/cli/command/generate-command.ts"],"names":["existsSync","realpathSync","writeFileSync","readPkgUp","initCommand","configName","packageJsonPath","foundPackageJson","exportTemplate","package_","packagePath","init_command_default","SwaggerParser","collect","cliProgress","lstatSync","mkdirSync","dirname","resolve","generateCommand","paths","options","openapiConfig","config","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","output","generate_command_default"],"mappings":"8DAAA,OAAS,cAAAA,EAAY,gBAAAC,EAAc,iBAAAC,MAAqB,KACxD,OAAOC,MAAe,cAEtB,IAAMC,EAAc,CAACC,EAAoBC,EAAkB,QAAQ,IAAI,IAAY,CAC/E,GAAIN,EAAWK,CAAU,EACrB,MAAM,IAAI,MAAM,4BAA4B,EAGhD,IAAME,EAAmBJ,EAAU,KAAK,CAEpC,IAAKF,EAAaK,CAAe,CACrC,CAAC,EAEGE,EAAiB,mBAErB,GAAID,EAAkB,CAElB,GAAM,CAAE,YAAaE,EAAU,KAAMC,CAAY,EAAIH,EAGrD,QAAQ,KAAK,0BAA0BG,IAAc,EAEjDD,EAAS,OAAY,WAErB,QAAQ,KAAK,+EAA+E,EAE5FD,EAAiB,uBAIrB,QAAQ,KAAK,uBAAuB,EAGxCN,EACIG,EACA,GAAGG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAmCP,EAGA,QAAQ,IAAI,YAAYH,IAAa,CACzC,EAEOM,EAAQP,EC5Ef,OAAOQ,MAAmB,8BAC1B,OAAS,WAAAC,MAAe,oBAExB,OAAOC,MAAiB,eACxB,OAAS,aAAAC,EAAW,aAAAC,EAAW,iBAAAd,MAAqB,KACpD,OAAS,WAAAe,EAAS,WAAAC,MAAe,OAQjC,IAAMC,EAAkB,MAAOd,EAAoBe,EAAiBC,IAM/C,CACjB,IAAIC,EAMA,CACA,QAAS,CAAC,EACV,kBAAmB,CAAC,CACxB,EAEA,GAAI,CAEA,IAAIC,EAAS,MAAM,OAAOL,EAAQG,EAAQ,QAAUhB,CAAU,GAE1DkB,GAAQ,UACRA,EAASA,EAAO,SAGpBD,EAAgBC,CACpB,MAAE,CACE,MAAM,IAAI,MAAM,6BAA6BF,EAAQ,QAAU;AAAA,CAAmB,CACtF,CAEA,IAAMG,EAAW,IAAIV,EAAY,SAC7B,CACI,gBAAiB,GACjB,WAAY,GACZ,OAAQ,sCACZ,EACAA,EAAY,QAAQ,WACxB,EACMW,EAAO,IAAIC,EAAYJ,EAAc,iBAAiB,EAG5D,cAAiBK,KAAOP,EAAO,CAE3BL,EAAUY,CAAG,EAAE,YAAY,EAE3B,IAAMC,EAAQ,MAAMf,EAAQc,EAAK,CAE7B,KAAM,CAAC,GAAGL,EAAc,QAAS,iBAAiB,EAClD,WAAYA,EAAc,YAAc,CAAC,MAAO,OAAQ,OAAQ,MAAO,OAAQ,OAAQ,QAAS,MAAM,EACtG,eAAgBA,EAAc,gBAAkB,GAChD,MAAOA,EAAc,QACrB,iBAAkB,CACd,MAAO,CACH,MAAOD,EAAQ,QACf,UAAW,EACf,EACA,KAAM,CACF,MAAOA,EAAQ,QACf,UAAW,EACf,CACJ,CACJ,CAAC,GAEGA,EAAQ,SAAWA,EAAQ,cAE3B,QAAQ,IAAI;AAAA,QAAWO,EAAM,mBAAmBD,GAAK,EAGrDN,EAAQ,aAER,QAAQ,IAAIO,CAAK,EAGrB,IAAMC,EAAML,EAAS,OAAOI,EAAM,OAAQ,CAAC,EAE3CA,EAAM,QAASE,GAAS,CAChBT,EAAQ,SAER,QAAQ,IAAI,gBAAgBS,GAAM,EAGtCD,EAAI,UAAU,EAAG,CAAE,SAAUF,CAAI,CAAC,EAElC,IAAMI,EAAuBC,EAAUF,EAAMG,EAA6BZ,EAAQ,OAAO,EAEzFI,EAAK,QAAQM,EAAqB,IAAKG,GAASA,EAAK,IAAI,CAAC,EAE1D,IAAMC,EAA8BH,EAAUF,EAAMG,EAAoCZ,EAAQ,OAAO,EAEvGI,EAAK,QAAQU,EAA4B,IAAKD,GAASA,EAAK,IAAI,CAAC,CACrE,CAAC,EAGDb,EAAQ,SAER,QAAQ,IAAI,yBAAyB,EAGrCA,EAAQ,aAER,QAAQ,IAAI,KAAK,UAAUI,EAAM,KAAM,CAAC,CAAC,EAG7C,MAAMb,EAAc,SAAS,KAAK,MAAM,KAAK,UAAUa,CAAI,CAAC,CAAC,EAE7D,IAAMW,EAASf,EAAQ,QAAU,eAEjCG,EAAS,KAAK,EAEVH,EAAQ,SAER,QAAQ,IAAI,4BAA4Be,SAAc,EAI1DpB,EAAUC,EAAQmB,CAAM,EAAG,CAAE,UAAW,EAAK,CAAC,EAC9ClC,EAAckC,EAAQ,KAAK,UAAUX,EAAM,KAAM,CAAC,CAAC,EAGnD,QAAQ,IAAI;AAAA,2CAA8CW,QAAa,CAC3E,EAEOC,EAAQlB","sourcesContent":["import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\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 // eslint-disable-next-line no-undef\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}\"`);\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","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { collect } from \"@visulima/readdir\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport cliProgress from \"cli-progress\";\nimport { lstatSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type { BaseDefinition } from \"../../exported.d\";\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\";\n\nconst generateCommand = async (configName: string, paths: string[], options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n // eslint-disable-next-line sonarjs/cognitive-complexity\n}): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n followSymlinks?: boolean;\n swaggerDefinition: BaseDefinition;\n extensions?: string[];\n include?: string | readonly string[];\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n // eslint-disable-next-line unicorn/prefer-module,import/no-dynamic-require\n let config = await import(resolve(options.config ?? configName));\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 cliProgress.MultiBar(\n {\n clearOnComplete: false,\n hideCursor: true,\n format: \"{value}/{total} | {bar} | {filename}\",\n },\n cliProgress.Presets.shades_grey,\n );\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n\n // eslint-disable-next-line no-restricted-syntax,unicorn/prevent-abbreviations\n for await (const dir of paths) {\n // Check if the path is a directory\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n skip: [...openapiConfig.exclude, \"node_modules/**\"],\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n minimatchOptions: {\n match: {\n debug: options.verbose,\n matchBase: true,\n },\n skip: {\n debug: options.verbose,\n matchBase: true,\n },\n },\n });\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${files.length} files in ${dir}`);\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: dir });\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 SwaggerParser.validate(JSON.parse(JSON.stringify(spec)));\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 consistent-return\n mkdirSync(dirname(output), { recursive: true });\n writeFileSync(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"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkTHSPLI4X_js = require('./chunk-THSPLI4X.js');
|
|
4
|
+
var fs = require('fs');
|
|
5
|
+
var x = require('read-pkg-up');
|
|
6
|
+
var S = require('@apidevtools/swagger-parser');
|
|
7
|
+
var readdir = require('@visulima/readdir');
|
|
8
|
+
var u = require('cli-progress');
|
|
9
|
+
var path = require('path');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
var x__default = /*#__PURE__*/_interopDefault(x);
|
|
14
|
+
var S__default = /*#__PURE__*/_interopDefault(S);
|
|
15
|
+
var u__default = /*#__PURE__*/_interopDefault(u);
|
|
16
|
+
|
|
17
|
+
var h=(r,l=process.cwd())=>{if(fs.existsSync(r))throw new Error("Config file already exists");let e=x__default.default.sync({cwd:fs.realpathSync(l)}),o="module.exports =";if(e){let{packageJson:n,path:t}=e;console.info(`Found package.json at "${t}"`),n.type==="module"&&(console.info("Found package.json with type: module, using ES6 as export for the config file"),o="export default");}else console.info("No package.json found");fs.writeFileSync(r,`${o} {
|
|
18
|
+
exclude: [
|
|
19
|
+
'coverage/**',
|
|
20
|
+
'.github/**',
|
|
21
|
+
'packages/*/test{,s}/**',
|
|
22
|
+
'**/*.d.ts',
|
|
23
|
+
'test{,s}/**',
|
|
24
|
+
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
25
|
+
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
26
|
+
'**/__tests__/**',
|
|
27
|
+
'**/{ava,babel,nyc}.config.{js,cjs,mjs}',
|
|
28
|
+
'**/jest.config.{js,cjs,mjs,ts}',
|
|
29
|
+
'**/{karma,rollup,webpack}.config.js',
|
|
30
|
+
'**/.{eslint,mocha}rc.{js,cjs}',
|
|
31
|
+
'**/.{travis,yarnrc}.yml',
|
|
32
|
+
'**/{docker-compose,docker}.yml',
|
|
33
|
+
'**/.yamllint.{yaml,yml}',
|
|
34
|
+
'**/node_modules/**',
|
|
35
|
+
'**/pnpm-lock.yaml',
|
|
36
|
+
'**/pnpm-workspace.yaml',
|
|
37
|
+
'**/{package,package-lock}.json',
|
|
38
|
+
'**/yarn.lock',
|
|
39
|
+
'**/package.json5',
|
|
40
|
+
'**/.next/**',
|
|
41
|
+
],
|
|
42
|
+
followSymlinks: false,
|
|
43
|
+
swaggerDefinition: {
|
|
44
|
+
openapi: '3.0.0',
|
|
45
|
+
info: {
|
|
46
|
+
title: 'API',
|
|
47
|
+
version: '1.0.0',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
`),console.log(`Created "${r}"`);},V=h;var O=async(r,l,e)=>{let o={exclude:[],swaggerDefinition:{}};try{let s=await import(path.resolve(e.config??r));s?.default&&(s=s.default),o=s;}catch{throw new Error(`No config file found, on: ${e.config??".openapirc.js"}
|
|
52
|
+
`)}let n=new u__default.default.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"{value}/{total} | {bar} | {filename}"},u__default.default.Presets.shades_grey),t=new chunkTHSPLI4X_js.b(o.swaggerDefinition);for await(let s of l){fs.lstatSync(s).isDirectory();let i=await readdir.collect(s,{skip:[...o.exclude,"node_modules/**"],extensions:o.extensions??[".js",".cjs",".mjs",".ts",".tsx",".jsx",".yaml",".yml"],followSymlinks:o.followSymlinks??!1,match:o.include,minimatchOptions:{match:{debug:e.verbose,matchBase:!0},skip:{debug:e.verbose,matchBase:!0}}});(e.verbose??e.veryVerbose)&&console.log(`
|
|
53
|
+
Found ${i.length} files in ${s}`),e.veryVerbose&&console.log(i);let y=n.create(i.length,0);i.forEach(c=>{e.verbose&&console.log(`Parsing file ${c}`),y.increment(1,{filename:s});let w=chunkTHSPLI4X_js.d(c,chunkTHSPLI4X_js.e,e.verbose);t.addData(w.map(m=>m.spec));let j=chunkTHSPLI4X_js.d(c,chunkTHSPLI4X_js.f,e.verbose);t.addData(j.map(m=>m.spec));});}e.verbose&&console.log("Validating swagger spec"),e.veryVerbose&&console.log(JSON.stringify(t,null,2)),await S__default.default.validate(JSON.parse(JSON.stringify(t)));let a=e.output??"swagger.json";n.stop(),e.verbose&&console.log(`Written swagger spec to "${a}" file`),fs.mkdirSync(path.dirname(a),{recursive:!0}),fs.writeFileSync(a,JSON.stringify(t,null,2)),console.log(`
|
|
54
|
+
Swagger specification is ready, check the${a}file.`);},G=O;
|
|
55
|
+
|
|
56
|
+
exports.a = V;
|
|
57
|
+
exports.b = G;
|
|
58
|
+
//# sourceMappingURL=out.js.map
|
|
59
|
+
//# sourceMappingURL=chunk-PVYGEAVR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/command/init-command.ts","../src/cli/command/generate-command.ts"],"names":["existsSync","realpathSync","writeFileSync","readPkgUp","initCommand","configName","packageJsonPath","foundPackageJson","exportTemplate","package_","packagePath","init_command_default","SwaggerParser","collect","cliProgress","lstatSync","mkdirSync","dirname","resolve","generateCommand","paths","options","openapiConfig","config","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","output","generate_command_default"],"mappings":"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","sourcesContent":["import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\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 // eslint-disable-next-line no-undef\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}\"`);\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","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { collect } from \"@visulima/readdir\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport cliProgress from \"cli-progress\";\nimport { lstatSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type { BaseDefinition } from \"../../exported.d\";\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\";\n\nconst generateCommand = async (configName: string, paths: string[], options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n // eslint-disable-next-line sonarjs/cognitive-complexity\n}): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n followSymlinks?: boolean;\n swaggerDefinition: BaseDefinition;\n extensions?: string[];\n include?: string | readonly string[];\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n // eslint-disable-next-line unicorn/prefer-module,import/no-dynamic-require\n let config = await import(resolve(options.config ?? configName));\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 cliProgress.MultiBar(\n {\n clearOnComplete: false,\n hideCursor: true,\n format: \"{value}/{total} | {bar} | {filename}\",\n },\n cliProgress.Presets.shades_grey,\n );\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n\n // eslint-disable-next-line no-restricted-syntax,unicorn/prevent-abbreviations\n for await (const dir of paths) {\n // Check if the path is a directory\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n skip: [...openapiConfig.exclude, \"node_modules/**\"],\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n minimatchOptions: {\n match: {\n debug: options.verbose,\n matchBase: true,\n },\n skip: {\n debug: options.verbose,\n matchBase: true,\n },\n },\n });\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${files.length} files in ${dir}`);\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: dir });\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 SwaggerParser.validate(JSON.parse(JSON.stringify(spec)));\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 consistent-return\n mkdirSync(dirname(output), { recursive: true });\n writeFileSync(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"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkPVYGEAVR_js = require('../../chunk-PVYGEAVR.js');
|
|
4
4
|
require('../../chunk-THSPLI4X.js');
|
|
5
5
|
var process = require('process');
|
|
6
6
|
|
|
7
|
-
var s=(o,e="init",t="Inits a pre-configured @visulima/jsdoc-open-api config file.",r=".openapirc.js")=>{o.command(e).description(t).action(()=>{try{
|
|
7
|
+
var s=(o,e="init",t="Inits a pre-configured @visulima/jsdoc-open-api config file.",r=".openapirc.js")=>{o.command(e).description(t).action(()=>{try{chunkPVYGEAVR_js.a(r);}catch(n){console.error(n),process.exit(1);}});},c=s;var f=(o,e="generate",t=".openapirc.js")=>{o.command(e).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("-vv, --very-verbose","Very verbose output.").action(async(r,n)=>{try{await chunkPVYGEAVR_js.b(t,r,n);}catch(m){console.error(m),process.exit(1);}});},g=f;
|
|
8
8
|
|
|
9
9
|
exports.generateCommand = g;
|
|
10
10
|
exports.initCommand = c;
|
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkPVYGEAVR_js = require('../chunk-PVYGEAVR.js');
|
|
4
4
|
require('../chunk-THSPLI4X.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, 'generateCommand', {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkPVYGEAVR_js.b; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, 'initCommand', {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkPVYGEAVR_js.a; }
|
|
15
15
|
});
|
|
16
16
|
//# sourceMappingURL=out.js.map
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/jsdoc-open-api",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"description": "Generates swagger doc based on JSDoc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"visulima",
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
"@visulima/readdir": "1.3.5",
|
|
88
88
|
"comment-parser": "^1.3.1",
|
|
89
89
|
"lodash.mergewith": "^4.6.2",
|
|
90
|
+
"read-pkg-up": "^7.0.1",
|
|
90
91
|
"yaml": "^2.3.0"
|
|
91
92
|
},
|
|
92
93
|
"devDependencies": {
|
|
@@ -127,7 +128,6 @@
|
|
|
127
128
|
"eslint-plugin-you-dont-need-momentjs": "^1.6.0",
|
|
128
129
|
"openapi-types": "^12.1.3",
|
|
129
130
|
"prettier": "^2.8.8",
|
|
130
|
-
"read-pkg": "^8.0.0",
|
|
131
131
|
"rimraf": "^5.0.1",
|
|
132
132
|
"semantic-release": "^21.0.2",
|
|
133
133
|
"tsup": "^6.7.0",
|
package/dist/chunk-WV5JV6ET.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkTHSPLI4X_js = require('./chunk-THSPLI4X.js');
|
|
4
|
-
var fs = require('fs');
|
|
5
|
-
var x = require('@apidevtools/swagger-parser');
|
|
6
|
-
var readdir = require('@visulima/readdir');
|
|
7
|
-
var d = require('cli-progress');
|
|
8
|
-
var path = require('path');
|
|
9
|
-
|
|
10
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
|
|
12
|
-
var x__default = /*#__PURE__*/_interopDefault(x);
|
|
13
|
-
var d__default = /*#__PURE__*/_interopDefault(d);
|
|
14
|
-
|
|
15
|
-
var k=o=>{if(fs.existsSync(o))throw new Error("Config file already exists");fs.writeFileSync(o,`module.exports = {
|
|
16
|
-
exclude: [
|
|
17
|
-
'coverage/**',
|
|
18
|
-
'.github/**',
|
|
19
|
-
'packages/*/test{,s}/**',
|
|
20
|
-
'**/*.d.ts',
|
|
21
|
-
'test{,s}/**',
|
|
22
|
-
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
23
|
-
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
24
|
-
'**/__tests__/**',
|
|
25
|
-
'**/{ava,babel,nyc}.config.{js,cjs,mjs}',
|
|
26
|
-
'**/jest.config.{js,cjs,mjs,ts}',
|
|
27
|
-
'**/{karma,rollup,webpack}.config.js',
|
|
28
|
-
'**/.{eslint,mocha}rc.{js,cjs}',
|
|
29
|
-
'**/.{travis,yarnrc}.yml',
|
|
30
|
-
'**/{docker-compose,docker}.yml',
|
|
31
|
-
'**/.yamllint.{yaml,yml}',
|
|
32
|
-
'**/node_modules/**',
|
|
33
|
-
'**/pnpm-lock.yaml',
|
|
34
|
-
'**/pnpm-workspace.yaml',
|
|
35
|
-
'**/{package,package-lock}.json',
|
|
36
|
-
'**/yarn.lock',
|
|
37
|
-
'**/package.json5',
|
|
38
|
-
'**/.next/**',
|
|
39
|
-
],
|
|
40
|
-
followSymlinks: false,
|
|
41
|
-
swaggerDefinition: {
|
|
42
|
-
openapi: '3.0.0',
|
|
43
|
-
info: {
|
|
44
|
-
title: 'API',
|
|
45
|
-
version: '1.0.0',
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
`),console.log(`Created "${o}"`);},$=k;var J=async(o,y,e)=>{let s={exclude:[],swaggerDefinition:{}};try{s=await import(path.resolve(e.config??o));}catch{throw new Error(`No config file found, on: ${e.config??".openapirc.js"}
|
|
50
|
-
`)}let m=new d__default.default.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"{value}/{total} | {bar} | {filename}"},d__default.default.Presets.shades_grey),r=new chunkTHSPLI4X_js.b(s.swaggerDefinition);for await(let i of y){fs.lstatSync(i).isDirectory();let n=await readdir.collect(i,{skip:[...s.exclude,"node_modules/**"],extensions:s.extensions??[".js",".cjs",".mjs",".ts",".tsx",".jsx",".yaml",".yml"],followSymlinks:s.followSymlinks??!1,match:s.include,minimatchOptions:{match:{debug:e.verbose,matchBase:!0},skip:{debug:e.verbose,matchBase:!0}}});(e.verbose??e.veryVerbose)&&console.log(`
|
|
51
|
-
Found ${n.length} files in ${i}`),e.veryVerbose&&console.log(n);let u=m.create(n.length,0);n.forEach(a=>{e.verbose&&console.log(`Parsing file ${a}`),u.increment(1,{filename:i});let w=chunkTHSPLI4X_js.d(a,chunkTHSPLI4X_js.e,e.verbose);r.addData(w.map(l=>l.spec));let j=chunkTHSPLI4X_js.d(a,chunkTHSPLI4X_js.f,e.verbose);r.addData(j.map(l=>l.spec));});}e.verbose&&console.log("Validating swagger spec"),e.veryVerbose&&console.log(JSON.stringify(r,null,2)),await x__default.default.validate(JSON.parse(JSON.stringify(r)));let t=e.output??"swagger.json";m.stop(),e.verbose&&console.log(`Written swagger spec to "${t}" file`),fs.mkdirSync(path.dirname(t),{recursive:!0}),fs.writeFileSync(t,JSON.stringify(r,null,2)),console.log(`
|
|
52
|
-
Swagger specification is ready, check the${t}file.`);},q=J;
|
|
53
|
-
|
|
54
|
-
exports.a = $;
|
|
55
|
-
exports.b = q;
|
|
56
|
-
//# sourceMappingURL=out.js.map
|
|
57
|
-
//# sourceMappingURL=chunk-WV5JV6ET.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/command/init-command.ts","../src/cli/command/generate-command.ts"],"names":["existsSync","writeFileSync","initCommand","configName","init_command_default","SwaggerParser","collect","cliProgress","lstatSync","mkdirSync","dirname","resolve","generateCommand","paths","options","openapiConfig","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","output","generate_command_default"],"mappings":"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","sourcesContent":["import { existsSync, writeFileSync } from \"node:fs\";\n\nconst initCommand = (configName: string): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n writeFileSync(\n configName,\n `module.exports = {\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","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { collect } from \"@visulima/readdir\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport cliProgress from \"cli-progress\";\nimport { lstatSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type { BaseDefinition } from \"../../exported.d\";\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\";\n\nconst generateCommand = async (configName: string, paths: string[], options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n // eslint-disable-next-line sonarjs/cognitive-complexity\n}): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n followSymlinks?: boolean;\n swaggerDefinition: BaseDefinition;\n extensions?: string[];\n include?: string | readonly string[];\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n // eslint-disable-next-line unicorn/prefer-module,import/no-dynamic-require\n openapiConfig = await import(resolve(options.config ?? configName));\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new cliProgress.MultiBar(\n {\n clearOnComplete: false,\n hideCursor: true,\n format: \"{value}/{total} | {bar} | {filename}\",\n },\n cliProgress.Presets.shades_grey,\n );\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n\n // eslint-disable-next-line no-restricted-syntax,unicorn/prevent-abbreviations\n for await (const dir of paths) {\n // Check if the path is a directory\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n skip: [...openapiConfig.exclude, \"node_modules/**\"],\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n minimatchOptions: {\n match: {\n debug: options.verbose,\n matchBase: true,\n },\n skip: {\n debug: options.verbose,\n matchBase: true,\n },\n },\n });\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${files.length} files in ${dir}`);\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: dir });\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 SwaggerParser.validate(JSON.parse(JSON.stringify(spec)));\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 consistent-return\n mkdirSync(dirname(output), { recursive: true });\n writeFileSync(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"]}
|
package/dist/chunk-ZI2TL3UI.mjs
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { b, d as d$1, e, f } from './chunk-HCLKS7N6.mjs';
|
|
2
|
-
import { existsSync, writeFileSync, lstatSync, mkdirSync } from 'fs';
|
|
3
|
-
import x from '@apidevtools/swagger-parser';
|
|
4
|
-
import { collect } from '@visulima/readdir';
|
|
5
|
-
import d from 'cli-progress';
|
|
6
|
-
import { resolve, dirname } from 'path';
|
|
7
|
-
|
|
8
|
-
var k=o=>{if(existsSync(o))throw new Error("Config file already exists");writeFileSync(o,`module.exports = {
|
|
9
|
-
exclude: [
|
|
10
|
-
'coverage/**',
|
|
11
|
-
'.github/**',
|
|
12
|
-
'packages/*/test{,s}/**',
|
|
13
|
-
'**/*.d.ts',
|
|
14
|
-
'test{,s}/**',
|
|
15
|
-
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
16
|
-
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
|
|
17
|
-
'**/__tests__/**',
|
|
18
|
-
'**/{ava,babel,nyc}.config.{js,cjs,mjs}',
|
|
19
|
-
'**/jest.config.{js,cjs,mjs,ts}',
|
|
20
|
-
'**/{karma,rollup,webpack}.config.js',
|
|
21
|
-
'**/.{eslint,mocha}rc.{js,cjs}',
|
|
22
|
-
'**/.{travis,yarnrc}.yml',
|
|
23
|
-
'**/{docker-compose,docker}.yml',
|
|
24
|
-
'**/.yamllint.{yaml,yml}',
|
|
25
|
-
'**/node_modules/**',
|
|
26
|
-
'**/pnpm-lock.yaml',
|
|
27
|
-
'**/pnpm-workspace.yaml',
|
|
28
|
-
'**/{package,package-lock}.json',
|
|
29
|
-
'**/yarn.lock',
|
|
30
|
-
'**/package.json5',
|
|
31
|
-
'**/.next/**',
|
|
32
|
-
],
|
|
33
|
-
followSymlinks: false,
|
|
34
|
-
swaggerDefinition: {
|
|
35
|
-
openapi: '3.0.0',
|
|
36
|
-
info: {
|
|
37
|
-
title: 'API',
|
|
38
|
-
version: '1.0.0',
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
`),console.log(`Created "${o}"`);},$=k;var J=async(o,y,e$1)=>{let s={exclude:[],swaggerDefinition:{}};try{s=await import(resolve(e$1.config??o));}catch{throw new Error(`No config file found, on: ${e$1.config??".openapirc.js"}
|
|
43
|
-
`)}let m=new d.MultiBar({clearOnComplete:!1,hideCursor:!0,format:"{value}/{total} | {bar} | {filename}"},d.Presets.shades_grey),r=new b(s.swaggerDefinition);for await(let i of y){lstatSync(i).isDirectory();let n=await collect(i,{skip:[...s.exclude,"node_modules/**"],extensions:s.extensions??[".js",".cjs",".mjs",".ts",".tsx",".jsx",".yaml",".yml"],followSymlinks:s.followSymlinks??!1,match:s.include,minimatchOptions:{match:{debug:e$1.verbose,matchBase:!0},skip:{debug:e$1.verbose,matchBase:!0}}});(e$1.verbose??e$1.veryVerbose)&&console.log(`
|
|
44
|
-
Found ${n.length} files in ${i}`),e$1.veryVerbose&&console.log(n);let u=m.create(n.length,0);n.forEach(a=>{e$1.verbose&&console.log(`Parsing file ${a}`),u.increment(1,{filename:i});let w=d$1(a,e,e$1.verbose);r.addData(w.map(l=>l.spec));let j=d$1(a,f,e$1.verbose);r.addData(j.map(l=>l.spec));});}e$1.verbose&&console.log("Validating swagger spec"),e$1.veryVerbose&&console.log(JSON.stringify(r,null,2)),await x.validate(JSON.parse(JSON.stringify(r)));let t=e$1.output??"swagger.json";m.stop(),e$1.verbose&&console.log(`Written swagger spec to "${t}" file`),mkdirSync(dirname(t),{recursive:!0}),writeFileSync(t,JSON.stringify(r,null,2)),console.log(`
|
|
45
|
-
Swagger specification is ready, check the${t}file.`);},q=J;
|
|
46
|
-
|
|
47
|
-
export { $ as a, q as b };
|
|
48
|
-
//# sourceMappingURL=out.js.map
|
|
49
|
-
//# sourceMappingURL=chunk-ZI2TL3UI.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/command/init-command.ts","../src/cli/command/generate-command.ts"],"names":["existsSync","writeFileSync","initCommand","configName","init_command_default","SwaggerParser","collect","cliProgress","lstatSync","mkdirSync","dirname","resolve","generateCommand","paths","options","openapiConfig","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","output","generate_command_default"],"mappings":"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","sourcesContent":["import { existsSync, writeFileSync } from \"node:fs\";\n\nconst initCommand = (configName: string): void => {\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n writeFileSync(\n configName,\n `module.exports = {\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","import SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { collect } from \"@visulima/readdir\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport cliProgress from \"cli-progress\";\nimport { lstatSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type { BaseDefinition } from \"../../exported.d\";\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\";\n\nconst generateCommand = async (configName: string, paths: string[], options: {\n config?: string;\n output?: string;\n verbose?: boolean;\n veryVerbose?: boolean;\n // eslint-disable-next-line sonarjs/cognitive-complexity\n}): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n followSymlinks?: boolean;\n swaggerDefinition: BaseDefinition;\n extensions?: string[];\n include?: string | readonly string[];\n } = {\n exclude: [],\n swaggerDefinition: {} as BaseDefinition,\n };\n\n try {\n // eslint-disable-next-line unicorn/prefer-module,import/no-dynamic-require\n openapiConfig = await import(resolve(options.config ?? configName));\n } catch {\n throw new Error(`No config file found, on: ${options.config ?? \".openapirc.js\"}\\n`);\n }\n\n const multibar = new cliProgress.MultiBar(\n {\n clearOnComplete: false,\n hideCursor: true,\n format: \"{value}/{total} | {bar} | {filename}\",\n },\n cliProgress.Presets.shades_grey,\n );\n const spec = new SpecBuilder(openapiConfig.swaggerDefinition);\n\n // eslint-disable-next-line no-restricted-syntax,unicorn/prevent-abbreviations\n for await (const dir of paths) {\n // Check if the path is a directory\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n skip: [...openapiConfig.exclude, \"node_modules/**\"],\n extensions: openapiConfig.extensions ?? [\".js\", \".cjs\", \".mjs\", \".ts\", \".tsx\", \".jsx\", \".yaml\", \".yml\"],\n followSymlinks: openapiConfig.followSymlinks ?? false,\n match: openapiConfig.include,\n minimatchOptions: {\n match: {\n debug: options.verbose,\n matchBase: true,\n },\n skip: {\n debug: options.verbose,\n matchBase: true,\n },\n },\n });\n\n if (options.verbose ?? options.veryVerbose) {\n // eslint-disable-next-line no-console\n console.log(`\\nFound ${files.length} files in ${dir}`);\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: dir });\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 SwaggerParser.validate(JSON.parse(JSON.stringify(spec)));\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 consistent-return\n mkdirSync(dirname(output), { recursive: true });\n writeFileSync(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"]}
|