@visulima/jsdoc-open-api 1.3.12 → 2.0.1
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 +32 -0
- package/dist/{chunk-WCKT775T.js → chunk-MXORJ2KC.js} +13 -13
- package/dist/chunk-MXORJ2KC.js.map +1 -0
- package/dist/{chunk-L5IKCPR2.mjs → chunk-NGEOD27G.mjs} +9 -9
- package/dist/chunk-NGEOD27G.mjs.map +1 -0
- package/dist/{chunk-D7VYGB4A.js → chunk-VNK4L5RV.js} +16 -16
- package/dist/{chunk-WHYPHVY6.mjs.map → chunk-VNK4L5RV.js.map} +1 -1
- package/dist/chunk-YQIJE75F.mjs +19 -0
- package/dist/{chunk-D7VYGB4A.js.map → chunk-YQIJE75F.mjs.map} +1 -1
- package/dist/cli/commander/index.js +5 -5
- package/dist/cli/commander/index.js.map +1 -1
- package/dist/cli/commander/index.mjs +4 -4
- package/dist/cli/commander/index.mjs.map +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.mjs +2 -2
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +44 -25
- package/dist/chunk-L5IKCPR2.mjs.map +0 -1
- package/dist/chunk-WCKT775T.js.map +0 -1
- package/dist/chunk-WHYPHVY6.mjs +0 -19
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/jsdoc-open-api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Generates swagger doc based on JSDoc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"visulima",
|
|
@@ -42,18 +42,36 @@
|
|
|
42
42
|
"exports": {
|
|
43
43
|
".": {
|
|
44
44
|
"types": "./dist/index.d.ts",
|
|
45
|
-
"require":
|
|
46
|
-
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/index.d.ts",
|
|
47
|
+
"default": "./dist/index.js"
|
|
48
|
+
},
|
|
49
|
+
"import": {
|
|
50
|
+
"types": "./dist/index.d.mts",
|
|
51
|
+
"default": "./dist/index.mjs"
|
|
52
|
+
}
|
|
47
53
|
},
|
|
48
54
|
"./cli": {
|
|
49
55
|
"types": "./dist/cli/index.d.ts",
|
|
50
|
-
"require":
|
|
51
|
-
|
|
56
|
+
"require": {
|
|
57
|
+
"types": "./dist/cli/index.d.ts",
|
|
58
|
+
"default": "./dist/cli/index.js"
|
|
59
|
+
},
|
|
60
|
+
"import": {
|
|
61
|
+
"types": "./dist/cli/index.d.mts",
|
|
62
|
+
"default": "./dist/cli/index.mjs"
|
|
63
|
+
}
|
|
52
64
|
},
|
|
53
65
|
"./cli/commander": {
|
|
54
66
|
"types": "./dist/cli/commander/index.d.ts",
|
|
55
|
-
"require":
|
|
56
|
-
|
|
67
|
+
"require": {
|
|
68
|
+
"types": "./dist/cli/commander/index.d.ts",
|
|
69
|
+
"default": "./dist/cli/commander/index.js"
|
|
70
|
+
},
|
|
71
|
+
"import": {
|
|
72
|
+
"types": "./dist/cli/commander/index.d.mts",
|
|
73
|
+
"default": "./dist/cli/commander/index.mjs"
|
|
74
|
+
}
|
|
57
75
|
},
|
|
58
76
|
"./package.json": "./package.json"
|
|
59
77
|
},
|
|
@@ -77,7 +95,7 @@
|
|
|
77
95
|
"clean": "rimraf node_modules dist .eslintcache",
|
|
78
96
|
"coverage": "vitest run --coverage",
|
|
79
97
|
"dev": "pnpm run build --watch",
|
|
80
|
-
"lint:eslint": "eslint . --ext js,jsx,ts,tsx --max-warnings=0 --config .eslintrc.js
|
|
98
|
+
"lint:eslint": "eslint . --ext js,cjs,mjs,jsx,ts,tsx,json,yaml,yml,md,mdx --max-warnings=0 --config .eslintrc.js",
|
|
81
99
|
"lint:eslint:fix": "pnpm run lint:eslint --fix",
|
|
82
100
|
"lint:prettier": "prettier --config=.prettierrc.js --check .",
|
|
83
101
|
"lint:prettier:fix": "prettier --config=.prettierrc.js --write .",
|
|
@@ -87,39 +105,40 @@
|
|
|
87
105
|
},
|
|
88
106
|
"dependencies": {
|
|
89
107
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
90
|
-
"@visulima/readdir": "
|
|
91
|
-
"comment-parser": "^1.
|
|
108
|
+
"@visulima/readdir": "2.0.1",
|
|
109
|
+
"comment-parser": "^1.4.0",
|
|
92
110
|
"lodash.mergewith": "^4.6.2",
|
|
93
111
|
"read-pkg-up": "^7.0.1",
|
|
94
112
|
"yaml": "^2.3.1"
|
|
95
113
|
},
|
|
96
114
|
"devDependencies": {
|
|
97
|
-
"@anolilab/eslint-config": "^11.
|
|
98
|
-
"@anolilab/prettier-config": "^5.0.
|
|
99
|
-
"@anolilab/semantic-release-preset": "^6.0.
|
|
115
|
+
"@anolilab/eslint-config": "^11.3.3",
|
|
116
|
+
"@anolilab/prettier-config": "^5.0.3",
|
|
117
|
+
"@anolilab/semantic-release-preset": "^6.0.4",
|
|
100
118
|
"@rushstack/eslint-plugin-security": "^0.6.0",
|
|
101
|
-
"@stoplight/types": "^13.17.0",
|
|
102
119
|
"@types/cli-progress": "^3.11.0",
|
|
103
120
|
"@types/http-errors": "^2.0.1",
|
|
104
121
|
"@types/lodash.mergewith": "^4.6.7",
|
|
105
|
-
"@types/node": "18.
|
|
106
|
-
"@types/webpack": "^5.28.
|
|
107
|
-
"@vitest/coverage-v8": "^0.
|
|
122
|
+
"@types/node": "18.17.1",
|
|
123
|
+
"@types/webpack": "^5.28.2",
|
|
124
|
+
"@vitest/coverage-v8": "^0.34.3",
|
|
108
125
|
"c8": "^8.0.1",
|
|
109
126
|
"cli-progress": "^3.12.0",
|
|
110
127
|
"commander": "^11.0.0",
|
|
111
128
|
"cross-env": "^7.0.3",
|
|
112
|
-
"eslint": "^8.
|
|
129
|
+
"eslint": "^8.48.0",
|
|
113
130
|
"eslint-plugin-etc": "^2.0.3",
|
|
114
|
-
"eslint-plugin-mdx": "^2.
|
|
131
|
+
"eslint-plugin-mdx": "^2.2.0",
|
|
115
132
|
"eslint-plugin-vitest": "^0.2.8",
|
|
133
|
+
"eslint-plugin-vitest-globals": "^1.4.0",
|
|
116
134
|
"openapi-types": "^12.1.3",
|
|
117
|
-
"prettier": "^3.0.
|
|
135
|
+
"prettier": "^3.0.2",
|
|
118
136
|
"rimraf": "^5.0.1",
|
|
119
|
-
"semantic-release": "^21.
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
137
|
+
"semantic-release": "^21.1.1",
|
|
138
|
+
"sort-package-json": "^2.5.1",
|
|
139
|
+
"tsup": "^7.2.0",
|
|
140
|
+
"typescript": "^5.2.2",
|
|
141
|
+
"vitest": "^0.34.3",
|
|
123
142
|
"webpack": "^5.88.2"
|
|
124
143
|
},
|
|
125
144
|
"optionalDependencies": {
|
|
@@ -128,7 +147,7 @@
|
|
|
128
147
|
"webpack": "^5.88.2"
|
|
129
148
|
},
|
|
130
149
|
"engines": {
|
|
131
|
-
"node": ">=
|
|
150
|
+
"node": ">=18.* <=20.*"
|
|
132
151
|
},
|
|
133
152
|
"publishConfig": {
|
|
134
153
|
"access": "public",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["collect","cliProgress","lstatSync","mkdirSync","writeFileSync","dirname","normalize","pathToFileURL","generateCommand","configName","paths","options","openapiConfig","config","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","validate_default","output","generate_command_default","existsSync","realpathSync","readPkgUp","initCommand","packageJsonPath","foundPackageJson","exportTemplate","package_","packagePath","init_command_default"],"mappings":"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","sourcesContent":["import { 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, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\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\";\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 // eslint-disable-next-line sonarjs/cognitive-complexity\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: ReadonlyArray<string> | 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 cliProgress.MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\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 // eslint-disable-next-line security/detect-non-literal-fs-filename\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\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 skip: [...openapiConfig.exclude, \"node_modules/**\"],\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 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 mkdirSync(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\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","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n // eslint-disable-next-line security/detect-non-literal-fs-filename\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 // eslint-disable-next-line security/detect-non-literal-fs-filename\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/command/generate-command.ts","../src/cli/command/init-command.ts"],"names":["collect","cliProgress","lstatSync","mkdirSync","writeFileSync","dirname","normalize","pathToFileURL","generateCommand","configName","paths","options","openapiConfig","config","multibar","spec","spec_builder_default","dir","files","bar","file","parsedJsDocumentFile","parse_file_default","comments_to_open_api_default","item","parsedSwaggerJsDocumentFile","validate_default","output","generate_command_default","existsSync","realpathSync","readPkgUp","initCommand","packageJsonPath","foundPackageJson","exportTemplate","package_","packagePath","init_command_default"],"mappings":"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","sourcesContent":["import { 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, normalize } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\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\";\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 // eslint-disable-next-line sonarjs/cognitive-complexity\n): Promise<void> => {\n let openapiConfig: {\n exclude: string[];\n extensions?: string[];\n followSymlinks?: boolean;\n include?: ReadonlyArray<string> | 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 cliProgress.MultiBar(\n {\n clearOnComplete: false,\n format: \"{value}/{total} | {bar} | {filename}\",\n hideCursor: true,\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 // eslint-disable-next-line security/detect-non-literal-fs-filename\n lstatSync(dir).isDirectory();\n\n const files = await collect(dir, {\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 skip: [...openapiConfig.exclude, \"node_modules/**\"],\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 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 mkdirSync(dirname(output), { recursive: true });\n // eslint-disable-next-line security/detect-non-literal-fs-filename\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","import { existsSync, realpathSync, writeFileSync } from \"node:fs\";\nimport readPkgUp from \"read-pkg-up\";\n\nconst initCommand = (configName: string, packageJsonPath = process.cwd()): void => {\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n if (existsSync(configName)) {\n throw new Error(\"Config file already exists\");\n }\n\n const foundPackageJson = readPkgUp.sync({\n // eslint-disable-next-line security/detect-non-literal-fs-filename\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 // eslint-disable-next-line security/detect-non-literal-fs-filename\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"]}
|
package/dist/chunk-WHYPHVY6.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { parse } from 'comment-parser';
|
|
2
|
-
import A from 'lodash.mergewith';
|
|
3
|
-
import { readFileSync } from 'fs';
|
|
4
|
-
import q from 'path';
|
|
5
|
-
import R from 'yaml';
|
|
6
|
-
import H from '@apidevtools/swagger-parser';
|
|
7
|
-
|
|
8
|
-
var E=(t,s)=>{if(Array.isArray(t))return [...t,...s]},m=E;var v=t=>{t.security&&(t.security=Object.keys(t.security).map(s=>({[s]:t.security[s]})));},w=new Set(["integer","number","string","boolean","object","array"]),y={binary:"string",byte:"string",date:"string","date-time":"string",double:"number",float:"number",int32:"integer",int64:"integer",password:"string"},k=t=>{let s=t.type,r=s.endsWith("[]"),e=s.replace(/\[]$/,""),a=w.has(e),n=Object.keys(y).includes(e),o;if(t.default)switch(e){case"integer":case"int32":case"int64":{o=Number.parseInt(t.default,10);break}case"number":case"double":case"float":{o=Number.parseFloat(t.default);break}default:{o=t.default;break}}let i;a?i={default:o,type:e}:n?i={default:o,format:e,type:y[e]}:i={$ref:`#/components/schemas/${e}`};let c=r?{items:{...i},type:"array"}:{...i};e===""&&(c=void 0);let p=t.description.trim().replace(/^- /,"");return p===""&&(p=void 0),{description:p,name:t.name,rawType:s,required:!t.optional,schema:c}},P=(t,s)=>t.map(r=>{let e=k(r),a="";switch(e.name&&(a+=e.name),e.description&&(a+=` ${e.description.trim()}`),r.tag){case"operationId":case"summary":case"description":return {[r.tag]:a};case"deprecated":return {deprecated:!0};case"externalDocs":return {externalDocs:{description:e.description,url:e.name}};case"server":return {servers:[{description:e.description,url:e.name}]};case"tag":return {tags:[a]};case"cookieParam":case"headerParam":case"queryParam":case"pathParam":return {parameters:[{description:e.description,in:r.tag.replace(/Param$/,""),name:e.name,required:e.required,schema:e.schema}]};case"bodyContent":return {requestBody:{content:{[e.name.replace("*\\/*","*/*")]:{schema:e.schema}}}};case"bodyExample":{let[n,o]=e.name.split(".");return {requestBody:{content:{[n]:{examples:{[o]:{$ref:`#/components/examples/${e.rawType}`}}}}}}}case"bodyDescription":return {requestBody:{description:a}};case"bodyRequired":return {requestBody:{required:!0}};case"response":return {responses:{[e.name]:{description:e.description}}};case"callback":return {callbacks:{[e.name]:{$ref:`#/components/callbacks/${e.rawType}`}}};case"responseContent":{let[n,o]=e.name.split(".");return {responses:{[n]:{content:{[o]:{schema:e.schema}}}}}}case"responseHeaderComponent":{let[n,o]=e.name.split(".");return {responses:{[n]:{headers:{[o]:{$ref:`#/components/headers/${e.rawType}`}}}}}}case"responseHeader":{let[n,o]=e.name.split(".");return {responses:{[n]:{headers:{[o]:{description:e.description,schema:e.schema}}}}}}case"responseExample":{let[n,o,i]=e.name.split(".");return {responses:{[n]:{content:{[o]:{examples:{[i]:{$ref:`#/components/examples/${e.rawType}`}}}}}}}}case"responseLink":{let[n,o]=e.name.split(".");return {responses:{[n]:{links:{[o]:{$ref:`#/components/links/${e.rawType}`}}}}}}case"bodyComponent":return {requestBody:{$ref:`#/components/requestBodies/${e.rawType}`}};case"responseComponent":return {responses:{[e.name]:{$ref:`#/components/responses/${e.rawType}`}}};case"paramComponent":return {parameters:[{$ref:`#/components/parameters/${e.rawType}`}]};case"security":{let[n,o]=e.name.split("."),i=[];return o&&(i=[o]),{security:{[n]:i}}}default:return {}}}),$=(t,s)=>{let r=/^(GET|PUT|POST|DELETE|OPTIONS|HEAD|PATCH|TRACE) \/.*$/;return parse(t,{spacing:"preserve"}).filter(a=>r.test(a.description.trim())).map(a=>{let n=a.tags.length+1,o=A({},...P(a.tags),m);v(o);let[i,c]=a.description.split(" "),p={[c.trim()]:{[i.toLowerCase().trim()]:{...o}}},T=JSON.parse(JSON.stringify({paths:p}));return {loc:n,spec:T}})},Q=$;var D=t=>t.split(/\r\n|\r|\n/).filter(e=>/^\s*(#\s*(?:\S.*)?)?$/.test(e)?!1:e.trim().length>0).length,g=D;var b=new Set(["openapi","info","servers","security","tags","externalDocs","components","paths"]),u=class extends Error{},L=(t,s,r)=>{let e=readFileSync(t,{encoding:"utf8"}),a=q.extname(t);if(a===".yaml"||a===".yml"){let n=R.parse(e),o=Object.keys(n).filter(i=>!b.has(i));if(o.length>0){let i=new u(`Unexpected keys: ${o.join(", ")}`);throw i.filePath=t,i}return Object.keys(n).some(i=>b.has(i))?[{loc:g(e),spec:n}]:[]}try{return s(e,r)}catch(n){throw n.filePath=t,n}},ne=L;var I=(t,s)=>{Object.keys(s).forEach(r=>{t[r]===void 0?t[r]={...s[r]}:Object.keys(s[r]).forEach(e=>{t[r][e]={...t[r][e],...s[r][e]};});});},h=I;var d=class{constructor(s){this.openapi=s.openapi,this.info=s.info,this.servers=s.servers,this.paths=s.paths??{},this.components=s.components,this.security=s.security,this.tags=s.tags,this.externalDocs=s.externalDocs;}addData(s){s.forEach(r=>{let{components:e,paths:a,...n}=r;h(this,{components:e??{},paths:a??{}}),Object.entries(n).forEach(([o,i])=>{this[o]=i;});});}},ce=d;var l=(t,s)=>A({},t,s,(r,e)=>e===null?r:void 0),O=t=>Object.keys(t).map(s=>t[s]).every(s=>typeof s=="object"&&Object.keys(s).every(r=>!(r in s))),f=(t,s)=>s.some(r=>t.name===r.name),j=t=>{switch(t.tag){case"openapi":return "v3";case"asyncapi":return "v4";case"swagger":return "v2";default:return "v2"}};var N=(t,s,r)=>{if(r==="x-webhooks"&&(t[r]=s[r]),r.startsWith("x-"))return;if(["components","consumes","produces","paths","schemas","securityDefinitions","responses","parameters","definitions","channels"].includes(r))Object.keys(s[r]).forEach(a=>{t[r][a]=l(t[r][a],s[r][a]);});else if(r==="tags"){let{tags:a}=s;Array.isArray(a)?a.forEach(n=>{f(n,t.tags)||t.tags.push(n);}):f(a,t.tags)||t.tags.push(a);}else if(r==="security"){let{security:a}=s;t.security=a;}else r.startsWith("/")&&(t.paths[r]=l(t.paths[r],s[r]));},x=N;var F={v2:["paths","definitions","responses","parameters","securityDefinitions"],v3:["paths","definitions","responses","parameters","securityDefinitions","components"],v4:["components","channels"]},z=(t,s)=>t.map(r=>{if((r.tag==="openapi"||r.tag==="swagger"||r.tag==="asyncapi")&&r.description!==""){let e=R.parseDocument(r.description);if(e.errors.length>0){e.errors.map(i=>{let c=i;return c.annotation=r.description,c});let o="Error parsing YAML in @openapi spec:";throw o+=s?e.errors.map(i=>`${i.toString()}
|
|
9
|
-
Imbedded within:
|
|
10
|
-
\`\`\`
|
|
11
|
-
${i.annotation?.replace(/\n/g,`
|
|
12
|
-
`)}
|
|
13
|
-
\`\`\``).join(`
|
|
14
|
-
`):e.errors.map(i=>i.toString()).join(`
|
|
15
|
-
`),new Error(o)}let a=e.toJSON(),n={tags:[]};return F[j(r)].forEach(o=>{n[o]=n[o]||{};}),Object.keys(a).forEach(o=>{x(n,a,o);}),n}return {}}),J=(t,s)=>parse(t,{spacing:"preserve"}).map(e=>{let a=e.tags.length+1,n=A({},...z(e.tags,s),m);["definitions","responses","parameters","securityDefinitions","components","tags"].forEach(i=>{n[i]!==void 0&&O(n[i])&&delete n[i];});let o=JSON.parse(JSON.stringify(n));return {loc:a,spec:o}}),je=J;var U=async t=>{await H.validate(t);},Ee=U;
|
|
16
|
-
|
|
17
|
-
export { Q as a, g as b, ne as c, ce as d, je as e, Ee as f };
|
|
18
|
-
//# sourceMappingURL=out.js.map
|
|
19
|
-
//# sourceMappingURL=chunk-WHYPHVY6.mjs.map
|