@visulima/jsdoc-open-api 3.0.0-alpha.9 → 3.0.0

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.
Files changed (113) hide show
  1. package/CHANGELOG.md +429 -0
  2. package/LICENSE.md +34 -0
  3. package/README.md +44 -33
  4. package/bin/index.js +12 -9
  5. package/dist/cli/commander/index.d.ts +1000 -2
  6. package/dist/cli/commander/index.js +1 -0
  7. package/dist/cli/index.d.ts +9 -2
  8. package/dist/cli/index.js +1 -0
  9. package/dist/index.d.ts +266 -7
  10. package/dist/index.js +1 -0
  11. package/dist/packem_shared/DEFAULT_OPTIONS-C7o6qjwP.js +1 -0
  12. package/dist/packem_shared/SpecBuilder-Vbq42UbW.js +1 -0
  13. package/dist/packem_shared/SwaggerCompilerPlugin-PUOALp2i.js +1 -0
  14. package/dist/packem_shared/constants-CdEv9ZcD.js +1 -0
  15. package/dist/packem_shared/customizer-BXFVpImq.js +1 -0
  16. package/dist/packem_shared/generateCommand-C_XPsbS6.js +5 -0
  17. package/dist/packem_shared/generateCommand-ClL9Mnc3.js +1 -0
  18. package/dist/packem_shared/initCommand-Ca1hGdYS.js +35 -0
  19. package/dist/packem_shared/initCommand-TixxsVQU.js +1 -0
  20. package/dist/packem_shared/jsDocumentCommentsToOpenApi-TjPhUj5G.js +1 -0
  21. package/dist/packem_shared/loadDefinition-7r9qpfuE.js +1 -0
  22. package/dist/packem_shared/parseFile-RDlR4tEF.js +1 -0
  23. package/dist/packem_shared/swaggerJsDocumentCommentsToOpenApi-Bm9R1BnW.js +10 -0
  24. package/dist/packem_shared/validate-9Rwe2A3r.js +1 -0
  25. package/dist/packem_shared/yamlLoc-DPq-xUM4.js +1 -0
  26. package/package.json +23 -43
  27. package/dist/cli/command/generate-command.d.cts +0 -7
  28. package/dist/cli/command/generate-command.d.mts +0 -7
  29. package/dist/cli/command/generate-command.d.ts +0 -7
  30. package/dist/cli/command/init-command.d.cts +0 -2
  31. package/dist/cli/command/init-command.d.mts +0 -2
  32. package/dist/cli/command/init-command.d.ts +0 -2
  33. package/dist/cli/commander/command/generate-command.d.cts +0 -3
  34. package/dist/cli/commander/command/generate-command.d.mts +0 -3
  35. package/dist/cli/commander/command/generate-command.d.ts +0 -3
  36. package/dist/cli/commander/command/init-command.d.cts +0 -3
  37. package/dist/cli/commander/command/init-command.d.mts +0 -3
  38. package/dist/cli/commander/command/init-command.d.ts +0 -3
  39. package/dist/cli/commander/index.cjs +0 -11
  40. package/dist/cli/commander/index.d.cts +0 -2
  41. package/dist/cli/commander/index.d.mts +0 -2
  42. package/dist/cli/commander/index.mjs +0 -2
  43. package/dist/cli/index.cjs +0 -11
  44. package/dist/cli/index.d.cts +0 -2
  45. package/dist/cli/index.d.mts +0 -2
  46. package/dist/cli/index.mjs +0 -2
  47. package/dist/constants.d.cts +0 -1
  48. package/dist/constants.d.mts +0 -1
  49. package/dist/constants.d.ts +0 -1
  50. package/dist/exported.d.cts +0 -198
  51. package/dist/exported.d.mts +0 -198
  52. package/dist/exported.d.ts +0 -198
  53. package/dist/index.cjs +0 -19
  54. package/dist/index.d.cts +0 -7
  55. package/dist/index.d.mts +0 -7
  56. package/dist/index.mjs +0 -6
  57. package/dist/jsdoc/comments-to-open-api.d.cts +0 -6
  58. package/dist/jsdoc/comments-to-open-api.d.mts +0 -6
  59. package/dist/jsdoc/comments-to-open-api.d.ts +0 -6
  60. package/dist/packem_shared/SpecBuilder-B7YiF7zR.mjs +0 -61
  61. package/dist/packem_shared/SpecBuilder-CCESkmm5.cjs +0 -63
  62. package/dist/packem_shared/SwaggerCompilerPlugin-BkYJzU4f.cjs +0 -88
  63. package/dist/packem_shared/SwaggerCompilerPlugin-DZ7tIJ8x.mjs +0 -86
  64. package/dist/packem_shared/customizer-CoMXMU7a.mjs +0 -8
  65. package/dist/packem_shared/customizer-DDFwFqJl.cjs +0 -10
  66. package/dist/packem_shared/generateCommand-DRMkfIle.mjs +0 -15
  67. package/dist/packem_shared/generateCommand-MwnCNgEE.cjs +0 -82
  68. package/dist/packem_shared/generateCommand-RY4QFtm7.cjs +0 -17
  69. package/dist/packem_shared/generateCommand-a9_RAbug.mjs +0 -80
  70. package/dist/packem_shared/initCommand-B6Z9EXHP.mjs +0 -15
  71. package/dist/packem_shared/initCommand-Ch-72dKZ.cjs +0 -65
  72. package/dist/packem_shared/initCommand-D3yVEMwO.cjs +0 -17
  73. package/dist/packem_shared/initCommand-zE4VRDGW.mjs +0 -63
  74. package/dist/packem_shared/jsDocumentCommentsToOpenApi-C7yMeXJ5.cjs +0 -337
  75. package/dist/packem_shared/jsDocumentCommentsToOpenApi-DtrIZ2lK.mjs +0 -331
  76. package/dist/packem_shared/parseFile-BE-sKiRK.mjs +0 -35
  77. package/dist/packem_shared/parseFile-Dk7Bw7lt.cjs +0 -42
  78. package/dist/packem_shared/swaggerJsDocumentCommentsToOpenApi-B7g9rVr5.mjs +0 -131
  79. package/dist/packem_shared/swaggerJsDocumentCommentsToOpenApi-BuB7eE94.cjs +0 -138
  80. package/dist/packem_shared/validate-DZHaKH07.mjs +0 -30
  81. package/dist/packem_shared/validate-FKieC3ln.cjs +0 -37
  82. package/dist/packem_shared/yamlLoc-C7iHWvdq.mjs +0 -14
  83. package/dist/packem_shared/yamlLoc-CEvBiR4K.cjs +0 -16
  84. package/dist/parse-file.d.cts +0 -9
  85. package/dist/parse-file.d.mts +0 -9
  86. package/dist/parse-file.d.ts +0 -9
  87. package/dist/spec-builder.d.cts +0 -14
  88. package/dist/spec-builder.d.mts +0 -14
  89. package/dist/spec-builder.d.ts +0 -14
  90. package/dist/swagger-jsdoc/comments-to-open-api.d.cts +0 -6
  91. package/dist/swagger-jsdoc/comments-to-open-api.d.mts +0 -6
  92. package/dist/swagger-jsdoc/comments-to-open-api.d.ts +0 -6
  93. package/dist/swagger-jsdoc/organize-swagger-object.d.cts +0 -7
  94. package/dist/swagger-jsdoc/organize-swagger-object.d.mts +0 -7
  95. package/dist/swagger-jsdoc/organize-swagger-object.d.ts +0 -7
  96. package/dist/swagger-jsdoc/utils.d.cts +0 -22
  97. package/dist/swagger-jsdoc/utils.d.mts +0 -22
  98. package/dist/swagger-jsdoc/utils.d.ts +0 -22
  99. package/dist/util/customizer.d.cts +0 -2
  100. package/dist/util/customizer.d.mts +0 -2
  101. package/dist/util/customizer.d.ts +0 -2
  102. package/dist/util/object-merge.d.cts +0 -2
  103. package/dist/util/object-merge.d.mts +0 -2
  104. package/dist/util/object-merge.d.ts +0 -2
  105. package/dist/util/yaml-loc.d.cts +0 -2
  106. package/dist/util/yaml-loc.d.mts +0 -2
  107. package/dist/util/yaml-loc.d.ts +0 -2
  108. package/dist/validate.d.cts +0 -2
  109. package/dist/validate.d.mts +0 -2
  110. package/dist/validate.d.ts +0 -2
  111. package/dist/webpack/swagger-compiler-plugin.d.cts +0 -15
  112. package/dist/webpack/swagger-compiler-plugin.d.mts +0 -15
  113. package/dist/webpack/swagger-compiler-plugin.d.ts +0 -15
@@ -1,61 +0,0 @@
1
- const objectMerge = (a, b) => {
2
- Object.keys(b).forEach((key) => {
3
- if (a[key] === void 0) {
4
- a[key] = {
5
- ...b[key]
6
- };
7
- } else {
8
- Object.keys(b[key]).forEach((subKey) => {
9
- a[key][subKey] = {
10
- ...a[key][subKey],
11
- ...b[key][subKey]
12
- };
13
- });
14
- }
15
- });
16
- };
17
-
18
- class SpecBuilder {
19
- components;
20
- externalDocs;
21
- info;
22
- openapi;
23
- paths;
24
- security;
25
- servers;
26
- tags;
27
- constructor(baseDefinition) {
28
- this.openapi = baseDefinition.openapi;
29
- this.info = baseDefinition.info;
30
- this.paths = baseDefinition.paths ?? {};
31
- if (baseDefinition.servers) {
32
- this.servers = baseDefinition.servers;
33
- }
34
- if (baseDefinition.components) {
35
- this.components = baseDefinition.components;
36
- }
37
- if (baseDefinition.security) {
38
- this.security = baseDefinition.security;
39
- }
40
- if (baseDefinition.tags) {
41
- this.tags = baseDefinition.tags;
42
- }
43
- if (baseDefinition.externalDocs) {
44
- this.externalDocs = baseDefinition.externalDocs;
45
- }
46
- }
47
- addData(parsedFile) {
48
- parsedFile.forEach((file) => {
49
- const { components, paths, ...rest } = file;
50
- objectMerge(this, {
51
- components: components ?? {},
52
- paths: paths ?? {}
53
- });
54
- Object.entries(rest).forEach(([key, value]) => {
55
- this[key] = value;
56
- });
57
- });
58
- }
59
- }
60
-
61
- export { SpecBuilder as default };
@@ -1,63 +0,0 @@
1
- 'use strict';
2
-
3
- const objectMerge = (a, b) => {
4
- Object.keys(b).forEach((key) => {
5
- if (a[key] === void 0) {
6
- a[key] = {
7
- ...b[key]
8
- };
9
- } else {
10
- Object.keys(b[key]).forEach((subKey) => {
11
- a[key][subKey] = {
12
- ...a[key][subKey],
13
- ...b[key][subKey]
14
- };
15
- });
16
- }
17
- });
18
- };
19
-
20
- class SpecBuilder {
21
- components;
22
- externalDocs;
23
- info;
24
- openapi;
25
- paths;
26
- security;
27
- servers;
28
- tags;
29
- constructor(baseDefinition) {
30
- this.openapi = baseDefinition.openapi;
31
- this.info = baseDefinition.info;
32
- this.paths = baseDefinition.paths ?? {};
33
- if (baseDefinition.servers) {
34
- this.servers = baseDefinition.servers;
35
- }
36
- if (baseDefinition.components) {
37
- this.components = baseDefinition.components;
38
- }
39
- if (baseDefinition.security) {
40
- this.security = baseDefinition.security;
41
- }
42
- if (baseDefinition.tags) {
43
- this.tags = baseDefinition.tags;
44
- }
45
- if (baseDefinition.externalDocs) {
46
- this.externalDocs = baseDefinition.externalDocs;
47
- }
48
- }
49
- addData(parsedFile) {
50
- parsedFile.forEach((file) => {
51
- const { components, paths, ...rest } = file;
52
- objectMerge(this, {
53
- components: components ?? {},
54
- paths: paths ?? {}
55
- });
56
- Object.entries(rest).forEach(([key, value]) => {
57
- this[key] = value;
58
- });
59
- });
60
- }
61
- }
62
-
63
- module.exports = SpecBuilder;
@@ -1,88 +0,0 @@
1
- 'use strict';
2
-
3
- const node_fs = require('node:fs');
4
- const path = require('node:path');
5
- const node_process = require('node:process');
6
- const fs = require('@visulima/fs');
7
- const validate = require('./validate-FKieC3ln.cjs');
8
- const jsDocumentCommentsToOpenApi = require('./jsDocumentCommentsToOpenApi-C7yMeXJ5.cjs');
9
- const parseFile = require('./parseFile-Dk7Bw7lt.cjs');
10
- const SpecBuilder = require('./SpecBuilder-CCESkmm5.cjs');
11
- const swaggerJsDocumentCommentsToOpenApi = require('./swaggerJsDocumentCommentsToOpenApi-BuB7eE94.cjs');
12
-
13
- const errorHandler = (error) => {
14
- if (error) {
15
- console.error(error);
16
- node_process.exit(1);
17
- }
18
- };
19
- class SwaggerCompilerPlugin {
20
- assetsPath;
21
- ignore;
22
- sources;
23
- swaggerDefinition;
24
- verbose;
25
- constructor(assetsPath, sources, swaggerDefinition, options) {
26
- this.assetsPath = assetsPath;
27
- this.swaggerDefinition = swaggerDefinition;
28
- this.sources = sources;
29
- this.verbose = options.verbose ?? false;
30
- this.ignore = options.ignore ?? [];
31
- }
32
- apply(compiler) {
33
- const skip = /* @__PURE__ */ new Set([...validate.DEFAULT_EXCLUDE, ...this.ignore]);
34
- compiler.hooks.make.tapAsync("SwaggerCompilerPlugin", async (_, callback) => {
35
- console.log("Build paused, switching to swagger build");
36
- const spec = new SpecBuilder(this.swaggerDefinition);
37
- for (const dir of this.sources) {
38
- const files = await fs.collect(dir, {
39
- extensions: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
40
- includeDirs: false,
41
- skip: [...skip]
42
- });
43
- if (this.verbose) {
44
- console.log(`Found ${String(files.length)} files in ${dir}`);
45
- console.log(files);
46
- }
47
- files.forEach((file) => {
48
- if (this.verbose) {
49
- console.log(`Parsing file ${file}`);
50
- }
51
- try {
52
- const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, this.verbose);
53
- spec.addData(parsedJsDocumentFile.map((item) => item.spec));
54
- const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, this.verbose);
55
- spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
56
- } catch (error) {
57
- console.error(error);
58
- node_process.exit(1);
59
- }
60
- });
61
- }
62
- try {
63
- if (this.verbose) {
64
- console.log("Validating swagger spec");
65
- console.log(JSON.stringify(spec, void 0, 2));
66
- }
67
- await validate.validate(structuredClone(spec));
68
- } catch (error) {
69
- console.error(error.toJSON());
70
- node_process.exit(1);
71
- }
72
- const { assetsPath } = this;
73
- node_fs.mkdir(path.dirname(assetsPath), { recursive: true }, (error) => {
74
- if (error) {
75
- errorHandler(error);
76
- }
77
- node_fs.writeFile(assetsPath, JSON.stringify(spec, void 0, 2), errorHandler);
78
- });
79
- if (this.verbose) {
80
- console.log(`Written swagger spec to "${this.assetsPath}" file`);
81
- }
82
- console.log("switching back to normal build");
83
- callback();
84
- });
85
- }
86
- }
87
-
88
- module.exports = SwaggerCompilerPlugin;
@@ -1,86 +0,0 @@
1
- import { mkdir, writeFile } from 'node:fs';
2
- import { dirname } from 'node:path';
3
- import { exit } from 'node:process';
4
- import { collect } from '@visulima/fs';
5
- import { v as validate, D as DEFAULT_EXCLUDE } from './validate-DZHaKH07.mjs';
6
- import commentsToOpenApi from './jsDocumentCommentsToOpenApi-DtrIZ2lK.mjs';
7
- import parseFile from './parseFile-BE-sKiRK.mjs';
8
- import SpecBuilder from './SpecBuilder-B7YiF7zR.mjs';
9
- import commentsToOpenApi$1 from './swaggerJsDocumentCommentsToOpenApi-B7g9rVr5.mjs';
10
-
11
- const errorHandler = (error) => {
12
- if (error) {
13
- console.error(error);
14
- exit(1);
15
- }
16
- };
17
- class SwaggerCompilerPlugin {
18
- assetsPath;
19
- ignore;
20
- sources;
21
- swaggerDefinition;
22
- verbose;
23
- constructor(assetsPath, sources, swaggerDefinition, options) {
24
- this.assetsPath = assetsPath;
25
- this.swaggerDefinition = swaggerDefinition;
26
- this.sources = sources;
27
- this.verbose = options.verbose ?? false;
28
- this.ignore = options.ignore ?? [];
29
- }
30
- apply(compiler) {
31
- const skip = /* @__PURE__ */ new Set([...DEFAULT_EXCLUDE, ...this.ignore]);
32
- compiler.hooks.make.tapAsync("SwaggerCompilerPlugin", async (_, callback) => {
33
- console.log("Build paused, switching to swagger build");
34
- const spec = new SpecBuilder(this.swaggerDefinition);
35
- for (const dir of this.sources) {
36
- const files = await collect(dir, {
37
- extensions: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
38
- includeDirs: false,
39
- skip: [...skip]
40
- });
41
- if (this.verbose) {
42
- console.log(`Found ${String(files.length)} files in ${dir}`);
43
- console.log(files);
44
- }
45
- files.forEach((file) => {
46
- if (this.verbose) {
47
- console.log(`Parsing file ${file}`);
48
- }
49
- try {
50
- const parsedJsDocumentFile = parseFile(file, commentsToOpenApi, this.verbose);
51
- spec.addData(parsedJsDocumentFile.map((item) => item.spec));
52
- const parsedSwaggerJsDocumentFile = parseFile(file, commentsToOpenApi$1, this.verbose);
53
- spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
54
- } catch (error) {
55
- console.error(error);
56
- exit(1);
57
- }
58
- });
59
- }
60
- try {
61
- if (this.verbose) {
62
- console.log("Validating swagger spec");
63
- console.log(JSON.stringify(spec, void 0, 2));
64
- }
65
- await validate(structuredClone(spec));
66
- } catch (error) {
67
- console.error(error.toJSON());
68
- exit(1);
69
- }
70
- const { assetsPath } = this;
71
- mkdir(dirname(assetsPath), { recursive: true }, (error) => {
72
- if (error) {
73
- errorHandler(error);
74
- }
75
- writeFile(assetsPath, JSON.stringify(spec, void 0, 2), errorHandler);
76
- });
77
- if (this.verbose) {
78
- console.log(`Written swagger spec to "${this.assetsPath}" file`);
79
- }
80
- console.log("switching back to normal build");
81
- callback();
82
- });
83
- }
84
- }
85
-
86
- export { SwaggerCompilerPlugin as default };
@@ -1,8 +0,0 @@
1
- const customizer = (objectValue, sourceValue) => {
2
- if (Array.isArray(objectValue)) {
3
- return [...objectValue, ...sourceValue];
4
- }
5
- return void 0;
6
- };
7
-
8
- export { customizer as c };
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- const customizer = (objectValue, sourceValue) => {
4
- if (Array.isArray(objectValue)) {
5
- return [...objectValue, ...sourceValue];
6
- }
7
- return void 0;
8
- };
9
-
10
- exports.customizer = customizer;
@@ -1,15 +0,0 @@
1
- import { exit } from 'node:process';
2
- import generateCommand$1 from './generateCommand-a9_RAbug.mjs';
3
-
4
- const generateCommand = (program, commandName = "generate", configName = ".openapirc.js") => {
5
- 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) => {
6
- try {
7
- await generateCommand$1(configName, paths, options);
8
- } catch (error) {
9
- console.error(error);
10
- exit(1);
11
- }
12
- });
13
- };
14
-
15
- export { generateCommand as default };
@@ -1,82 +0,0 @@
1
- 'use strict';
2
-
3
- const promises = require('node:fs/promises');
4
- const path = require('node:path');
5
- const node_url = require('node:url');
6
- const fs = require('@visulima/fs');
7
- const cliProgress = require('cli-progress');
8
- const validate = require('./validate-FKieC3ln.cjs');
9
- const jsDocumentCommentsToOpenApi = require('./jsDocumentCommentsToOpenApi-C7yMeXJ5.cjs');
10
- const parseFile = require('./parseFile-Dk7Bw7lt.cjs');
11
- const SpecBuilder = require('./SpecBuilder-CCESkmm5.cjs');
12
- const swaggerJsDocumentCommentsToOpenApi = require('./swaggerJsDocumentCommentsToOpenApi-BuB7eE94.cjs');
13
-
14
- const generateCommand = async (configName, paths, options) => {
15
- let openapiConfig;
16
- try {
17
- let config = await import(node_url.pathToFileURL(path.normalize(options.config ?? configName)).href);
18
- if (config?.default) {
19
- config = config.default;
20
- }
21
- openapiConfig = config;
22
- } catch {
23
- throw new Error(`No config file found, on: ${options.config ?? ".openapirc.js"}
24
- `);
25
- }
26
- const multibar = new cliProgress.MultiBar(
27
- {
28
- clearOnComplete: false,
29
- format: "{value}/{total} | {bar} | {filename}",
30
- hideCursor: true
31
- },
32
- cliProgress.Presets.shades_grey
33
- );
34
- const spec = new SpecBuilder(openapiConfig.swaggerDefinition);
35
- const skip = /* @__PURE__ */ new Set([...validate.DEFAULT_EXCLUDE, ...openapiConfig.exclude]);
36
- for (const dir of paths) {
37
- (await promises.lstat(dir)).isDirectory();
38
- const realDirectory = await promises.realpath(dir);
39
- const files = await fs.collect(realDirectory, {
40
- extensions: openapiConfig.extensions ?? [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
41
- followSymlinks: openapiConfig.followSymlinks ?? false,
42
- match: openapiConfig.include,
43
- skip: [...skip]
44
- });
45
- if (options.verbose ?? options.veryVerbose) {
46
- console.log(`
47
- Found ${String(files.length)} files in ${realDirectory}`);
48
- }
49
- if (options.veryVerbose) {
50
- console.log(files);
51
- }
52
- const bar = multibar.create(files.length, 0);
53
- files.forEach((file) => {
54
- if (options.verbose) {
55
- console.log(`Parsing file ${file}`);
56
- }
57
- bar.increment(1, { filename: realDirectory });
58
- const parsedJsDocumentFile = parseFile(file, jsDocumentCommentsToOpenApi, options.verbose);
59
- spec.addData(parsedJsDocumentFile.map((item) => item.spec));
60
- const parsedSwaggerJsDocumentFile = parseFile(file, swaggerJsDocumentCommentsToOpenApi, options.verbose);
61
- spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
62
- });
63
- }
64
- if (options.verbose) {
65
- console.log("Validating swagger spec");
66
- }
67
- if (options.veryVerbose) {
68
- console.log(JSON.stringify(spec, void 0, 2));
69
- }
70
- await validate.validate(structuredClone(spec));
71
- const output = options.output ?? "swagger.json";
72
- multibar.stop();
73
- if (options.verbose) {
74
- console.log(`Written swagger spec to "${output}" file`);
75
- }
76
- await promises.mkdir(path.dirname(output), { recursive: true });
77
- await promises.writeFile(output, JSON.stringify(spec, void 0, 2));
78
- console.log(`
79
- Swagger specification is ready, check the "${output}" file.`);
80
- };
81
-
82
- module.exports = generateCommand;
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- const node_process = require('node:process');
4
- const generateCommand$1 = require('./generateCommand-MwnCNgEE.cjs');
5
-
6
- const generateCommand = (program, commandName = "generate", configName = ".openapirc.js") => {
7
- 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) => {
8
- try {
9
- await generateCommand$1(configName, paths, options);
10
- } catch (error) {
11
- console.error(error);
12
- node_process.exit(1);
13
- }
14
- });
15
- };
16
-
17
- module.exports = generateCommand;
@@ -1,80 +0,0 @@
1
- import { lstat, realpath, mkdir, writeFile } from 'node:fs/promises';
2
- import { normalize, dirname } from 'node:path';
3
- import { pathToFileURL } from 'node:url';
4
- import { collect } from '@visulima/fs';
5
- import { MultiBar, Presets } from 'cli-progress';
6
- import { v as validate, D as DEFAULT_EXCLUDE } from './validate-DZHaKH07.mjs';
7
- import commentsToOpenApi from './jsDocumentCommentsToOpenApi-DtrIZ2lK.mjs';
8
- import parseFile from './parseFile-BE-sKiRK.mjs';
9
- import SpecBuilder from './SpecBuilder-B7YiF7zR.mjs';
10
- import commentsToOpenApi$1 from './swaggerJsDocumentCommentsToOpenApi-B7g9rVr5.mjs';
11
-
12
- const generateCommand = async (configName, paths, options) => {
13
- let openapiConfig;
14
- try {
15
- let config = await import(pathToFileURL(normalize(options.config ?? configName)).href);
16
- if (config?.default) {
17
- config = config.default;
18
- }
19
- openapiConfig = config;
20
- } catch {
21
- throw new Error(`No config file found, on: ${options.config ?? ".openapirc.js"}
22
- `);
23
- }
24
- const multibar = new MultiBar(
25
- {
26
- clearOnComplete: false,
27
- format: "{value}/{total} | {bar} | {filename}",
28
- hideCursor: true
29
- },
30
- Presets.shades_grey
31
- );
32
- const spec = new SpecBuilder(openapiConfig.swaggerDefinition);
33
- const skip = /* @__PURE__ */ new Set([...DEFAULT_EXCLUDE, ...openapiConfig.exclude]);
34
- for (const dir of paths) {
35
- (await lstat(dir)).isDirectory();
36
- const realDirectory = await realpath(dir);
37
- const files = await collect(realDirectory, {
38
- extensions: openapiConfig.extensions ?? [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
39
- followSymlinks: openapiConfig.followSymlinks ?? false,
40
- match: openapiConfig.include,
41
- skip: [...skip]
42
- });
43
- if (options.verbose ?? options.veryVerbose) {
44
- console.log(`
45
- Found ${String(files.length)} files in ${realDirectory}`);
46
- }
47
- if (options.veryVerbose) {
48
- console.log(files);
49
- }
50
- const bar = multibar.create(files.length, 0);
51
- files.forEach((file) => {
52
- if (options.verbose) {
53
- console.log(`Parsing file ${file}`);
54
- }
55
- bar.increment(1, { filename: realDirectory });
56
- const parsedJsDocumentFile = parseFile(file, commentsToOpenApi, options.verbose);
57
- spec.addData(parsedJsDocumentFile.map((item) => item.spec));
58
- const parsedSwaggerJsDocumentFile = parseFile(file, commentsToOpenApi$1, options.verbose);
59
- spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
60
- });
61
- }
62
- if (options.verbose) {
63
- console.log("Validating swagger spec");
64
- }
65
- if (options.veryVerbose) {
66
- console.log(JSON.stringify(spec, void 0, 2));
67
- }
68
- await validate(structuredClone(spec));
69
- const output = options.output ?? "swagger.json";
70
- multibar.stop();
71
- if (options.verbose) {
72
- console.log(`Written swagger spec to "${output}" file`);
73
- }
74
- await mkdir(dirname(output), { recursive: true });
75
- await writeFile(output, JSON.stringify(spec, void 0, 2));
76
- console.log(`
77
- Swagger specification is ready, check the "${output}" file.`);
78
- };
79
-
80
- export { generateCommand as default };
@@ -1,15 +0,0 @@
1
- import { exit } from 'node:process';
2
- import initCommand$1 from './initCommand-zE4VRDGW.mjs';
3
-
4
- const initCommand = (program, commandName = "init", description = "Inits a pre-configured @visulima/jsdoc-open-api config file.", configName = ".openapirc.js") => {
5
- program.command(commandName).description(description).action(() => {
6
- try {
7
- initCommand$1(configName);
8
- } catch (error) {
9
- console.error(error);
10
- exit(1);
11
- }
12
- });
13
- };
14
-
15
- export { initCommand as default };
@@ -1,65 +0,0 @@
1
- 'use strict';
2
-
3
- const node_fs = require('node:fs');
4
- const fs = require('@visulima/fs');
5
-
6
- const initCommand = (configName, packageJsonPath = process.cwd()) => {
7
- if (node_fs.existsSync(configName)) {
8
- throw new Error("Config file already exists");
9
- }
10
- const packagePath = fs.findUpSync("package.json", {
11
- cwd: node_fs.realpathSync(packageJsonPath)
12
- });
13
- let exportTemplate = "module.exports =";
14
- if (packagePath) {
15
- const packageJson = fs.readJsonSync(packagePath);
16
- console.info(`Found package.json at "${packagePath}"`);
17
- if (packageJson.type === "module") {
18
- console.info("Found package.json with type: module, using ES6 as export for the config file");
19
- exportTemplate = "export default";
20
- }
21
- } else {
22
- console.info("No package.json found");
23
- }
24
- node_fs.writeFileSync(
25
- configName,
26
- `${exportTemplate} {
27
- exclude: [
28
- 'coverage/**',
29
- '.github/**',
30
- 'packages/*/test{,s}/**',
31
- '**/*.d.ts',
32
- 'test{,s}/**',
33
- 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
34
- '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
35
- '**/__tests__/**',
36
- '**/{ava,babel,nyc}.config.{js,cjs,mjs}',
37
- '**/jest.config.{js,cjs,mjs,ts}',
38
- '**/{karma,rollup,webpack}.config.js',
39
- '**/.{eslint,mocha}rc.{js,cjs}',
40
- '**/.{travis,yarnrc}.yml',
41
- '**/{docker-compose,docker}.yml',
42
- '**/.yamllint.{yaml,yml}',
43
- '**/node_modules/**',
44
- '**/pnpm-lock.yaml',
45
- '**/pnpm-workspace.yaml',
46
- '**/{package,package-lock}.json',
47
- '**/yarn.lock',
48
- '**/package.json5',
49
- '**/.next/**',
50
- ],
51
- followSymlinks: false,
52
- swaggerDefinition: {
53
- openapi: '3.0.0',
54
- info: {
55
- title: 'API',
56
- version: '1.0.0',
57
- },
58
- },
59
- };
60
- `
61
- );
62
- console.log(`Created "${configName}"`);
63
- };
64
-
65
- module.exports = initCommand;
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- const node_process = require('node:process');
4
- const initCommand$1 = require('./initCommand-Ch-72dKZ.cjs');
5
-
6
- const initCommand = (program, commandName = "init", description = "Inits a pre-configured @visulima/jsdoc-open-api config file.", configName = ".openapirc.js") => {
7
- program.command(commandName).description(description).action(() => {
8
- try {
9
- initCommand$1(configName);
10
- } catch (error) {
11
- console.error(error);
12
- node_process.exit(1);
13
- }
14
- });
15
- };
16
-
17
- module.exports = initCommand;
@@ -1,63 +0,0 @@
1
- import { existsSync, realpathSync, writeFileSync } from 'node:fs';
2
- import { findUpSync, readJsonSync } from '@visulima/fs';
3
-
4
- const initCommand = (configName, packageJsonPath = process.cwd()) => {
5
- if (existsSync(configName)) {
6
- throw new Error("Config file already exists");
7
- }
8
- const packagePath = findUpSync("package.json", {
9
- cwd: realpathSync(packageJsonPath)
10
- });
11
- let exportTemplate = "module.exports =";
12
- if (packagePath) {
13
- const packageJson = readJsonSync(packagePath);
14
- console.info(`Found package.json at "${packagePath}"`);
15
- if (packageJson.type === "module") {
16
- console.info("Found package.json with type: module, using ES6 as export for the config file");
17
- exportTemplate = "export default";
18
- }
19
- } else {
20
- console.info("No package.json found");
21
- }
22
- writeFileSync(
23
- configName,
24
- `${exportTemplate} {
25
- exclude: [
26
- 'coverage/**',
27
- '.github/**',
28
- 'packages/*/test{,s}/**',
29
- '**/*.d.ts',
30
- 'test{,s}/**',
31
- 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
32
- '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}',
33
- '**/__tests__/**',
34
- '**/{ava,babel,nyc}.config.{js,cjs,mjs}',
35
- '**/jest.config.{js,cjs,mjs,ts}',
36
- '**/{karma,rollup,webpack}.config.js',
37
- '**/.{eslint,mocha}rc.{js,cjs}',
38
- '**/.{travis,yarnrc}.yml',
39
- '**/{docker-compose,docker}.yml',
40
- '**/.yamllint.{yaml,yml}',
41
- '**/node_modules/**',
42
- '**/pnpm-lock.yaml',
43
- '**/pnpm-workspace.yaml',
44
- '**/{package,package-lock}.json',
45
- '**/yarn.lock',
46
- '**/package.json5',
47
- '**/.next/**',
48
- ],
49
- followSymlinks: false,
50
- swaggerDefinition: {
51
- openapi: '3.0.0',
52
- info: {
53
- title: 'API',
54
- version: '1.0.0',
55
- },
56
- },
57
- };
58
- `
59
- );
60
- console.log(`Created "${configName}"`);
61
- };
62
-
63
- export { initCommand as default };