@andrezz/openapimd 1.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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/cli/args.d.ts +10 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +56 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/help.d.ts +4 -0
  8. package/dist/cli/help.d.ts.map +1 -0
  9. package/dist/cli/help.js +25 -0
  10. package/dist/cli/help.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +6 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/convert.d.ts +17 -0
  16. package/dist/convert.d.ts.map +1 -0
  17. package/dist/convert.js +36 -0
  18. package/dist/convert.js.map +1 -0
  19. package/dist/errors.d.ts +18 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +22 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +4 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/loaders/file-loader.d.ts +6 -0
  28. package/dist/loaders/file-loader.d.ts.map +1 -0
  29. package/dist/loaders/file-loader.js +20 -0
  30. package/dist/loaders/file-loader.js.map +1 -0
  31. package/dist/loaders/loader.d.ts +15 -0
  32. package/dist/loaders/loader.d.ts.map +1 -0
  33. package/dist/loaders/loader.js +21 -0
  34. package/dist/loaders/loader.js.map +1 -0
  35. package/dist/loaders/url-loader.d.ts +12 -0
  36. package/dist/loaders/url-loader.d.ts.map +1 -0
  37. package/dist/loaders/url-loader.js +42 -0
  38. package/dist/loaders/url-loader.js.map +1 -0
  39. package/dist/parsers/json-parser.d.ts +6 -0
  40. package/dist/parsers/json-parser.d.ts.map +1 -0
  41. package/dist/parsers/json-parser.js +12 -0
  42. package/dist/parsers/json-parser.js.map +1 -0
  43. package/dist/parsers/parser.d.ts +11 -0
  44. package/dist/parsers/parser.d.ts.map +1 -0
  45. package/dist/parsers/parser.js +47 -0
  46. package/dist/parsers/parser.js.map +1 -0
  47. package/dist/parsers/yaml-parser.d.ts +6 -0
  48. package/dist/parsers/yaml-parser.d.ts.map +1 -0
  49. package/dist/parsers/yaml-parser.js +13 -0
  50. package/dist/parsers/yaml-parser.js.map +1 -0
  51. package/dist/renderers/document-renderer.d.ts +12 -0
  52. package/dist/renderers/document-renderer.d.ts.map +1 -0
  53. package/dist/renderers/document-renderer.js +76 -0
  54. package/dist/renderers/document-renderer.js.map +1 -0
  55. package/dist/renderers/markdown.d.ts +10 -0
  56. package/dist/renderers/markdown.d.ts.map +1 -0
  57. package/dist/renderers/markdown.js +46 -0
  58. package/dist/renderers/markdown.js.map +1 -0
  59. package/dist/renderers/renderer.d.ts +16 -0
  60. package/dist/renderers/renderer.d.ts.map +1 -0
  61. package/dist/renderers/renderer.js +12 -0
  62. package/dist/renderers/renderer.js.map +1 -0
  63. package/dist/renderers/sections.d.ts +22 -0
  64. package/dist/renderers/sections.d.ts.map +1 -0
  65. package/dist/renderers/sections.js +209 -0
  66. package/dist/renderers/sections.js.map +1 -0
  67. package/dist/renderers/single-renderer.d.ts +8 -0
  68. package/dist/renderers/single-renderer.d.ts.map +1 -0
  69. package/dist/renderers/single-renderer.js +23 -0
  70. package/dist/renderers/single-renderer.js.map +1 -0
  71. package/dist/run.d.ts +2 -0
  72. package/dist/run.d.ts.map +1 -0
  73. package/dist/run.js +52 -0
  74. package/dist/run.js.map +1 -0
  75. package/dist/template.d.ts +6 -0
  76. package/dist/template.d.ts.map +1 -0
  77. package/dist/template.js +11 -0
  78. package/dist/template.js.map +1 -0
  79. package/dist/types.d.ts +159 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +2 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/utils.d.ts +5 -0
  84. package/dist/utils.d.ts.map +1 -0
  85. package/dist/utils.js +11 -0
  86. package/dist/utils.js.map +1 -0
  87. package/dist/version.d.ts +2 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +2 -0
  90. package/dist/version.js.map +1 -0
  91. package/dist/writers/writer.d.ts +8 -0
  92. package/dist/writers/writer.d.ts.map +1 -0
  93. package/dist/writers/writer.js +15 -0
  94. package/dist/writers/writer.js.map +1 -0
  95. package/package.json +62 -0
package/dist/run.js ADDED
@@ -0,0 +1,52 @@
1
+ import { parseArgs } from './cli/args.js';
2
+ import { printHelp, printVersion } from './cli/help.js';
3
+ import { convert } from './convert.js';
4
+ import { OpenApiMdError } from './errors.js';
5
+ import { TEMPLATE_SINGLE } from './template.js';
6
+ export async function run(argv) {
7
+ let options;
8
+ try {
9
+ options = parseArgs(argv);
10
+ }
11
+ catch (error) {
12
+ writeError(error);
13
+ return 2;
14
+ }
15
+ if (options.help) {
16
+ printHelp();
17
+ return 0;
18
+ }
19
+ if (options.version) {
20
+ printVersion();
21
+ return 0;
22
+ }
23
+ if (!options.source) {
24
+ process.stderr.write('Error: missing input. Provide a file path or URL.\n\n');
25
+ printHelp(process.stderr);
26
+ return 2;
27
+ }
28
+ try {
29
+ const result = await convert(options.source, {
30
+ output: options.output,
31
+ template: options.template ?? TEMPLATE_SINGLE,
32
+ });
33
+ process.stdout.write(`Generated ${result.files.length} file(s) in ${result.outputDir}\n`);
34
+ for (const file of result.files) {
35
+ process.stdout.write(` - ${file}\n`);
36
+ }
37
+ return 0;
38
+ }
39
+ catch (error) {
40
+ writeError(error);
41
+ return 1;
42
+ }
43
+ }
44
+ function writeError(error) {
45
+ const message = error instanceof OpenApiMdError
46
+ ? error.message
47
+ : error instanceof Error
48
+ ? error.message
49
+ : String(error);
50
+ process.stderr.write(`Error: ${message}\n`);
51
+ }
52
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC9E,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,eAAe;SAC9C,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QAC1F,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,OAAO,GACX,KAAK,YAAY,cAAc;QAC7B,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,KAAK,YAAY,KAAK;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const TEMPLATE_SINGLE = "single";
2
+ export declare const TEMPLATE_DOCUMENT = "document";
3
+ export type TemplateType = typeof TEMPLATE_SINGLE | typeof TEMPLATE_DOCUMENT;
4
+ export declare const TEMPLATE_TYPES: readonly TemplateType[];
5
+ export declare function parseTemplate(value: string): TemplateType;
6
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,OAAO,eAAe,GAAG,OAAO,iBAAiB,CAAC;AAE7E,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAyC,CAAC;AAE5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAOzD"}
@@ -0,0 +1,11 @@
1
+ import { UnsupportedTemplateError } from './errors.js';
2
+ export const TEMPLATE_SINGLE = 'single';
3
+ export const TEMPLATE_DOCUMENT = 'document';
4
+ export const TEMPLATE_TYPES = [TEMPLATE_SINGLE, TEMPLATE_DOCUMENT];
5
+ export function parseTemplate(value) {
6
+ if (value === TEMPLATE_SINGLE || value === TEMPLATE_DOCUMENT) {
7
+ return value;
8
+ }
9
+ throw new UnsupportedTemplateError(`Unsupported template "${value}". Expected "single" or "document".`);
10
+ }
11
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAI5C,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAE5F,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,wBAAwB,CAChC,yBAAyB,KAAK,qCAAqC,CACpE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,159 @@
1
+ export interface OpenApiSpec {
2
+ openapi?: string;
3
+ info: InfoObject;
4
+ servers?: ServerObject[];
5
+ paths: PathsObject;
6
+ components?: ComponentsObject;
7
+ security?: SecurityRequirementObject[];
8
+ tags?: TagObject[];
9
+ externalDocs?: ExternalDocsObject;
10
+ }
11
+ export interface InfoObject {
12
+ title: string;
13
+ description?: string;
14
+ termsOfService?: string;
15
+ contact?: ContactObject;
16
+ license?: LicenseObject;
17
+ version?: string;
18
+ }
19
+ export interface ContactObject {
20
+ name?: string;
21
+ url?: string;
22
+ email?: string;
23
+ }
24
+ export interface LicenseObject {
25
+ name: string;
26
+ url?: string;
27
+ }
28
+ export interface ServerObject {
29
+ url: string;
30
+ description?: string;
31
+ variables?: Record<string, ServerVariableObject>;
32
+ }
33
+ export interface ServerVariableObject {
34
+ enum?: string[];
35
+ default: string;
36
+ description?: string;
37
+ }
38
+ export interface PathsObject {
39
+ [path: string]: PathItemObject;
40
+ }
41
+ export interface PathItemObject {
42
+ summary?: string;
43
+ description?: string;
44
+ get?: OperationObject;
45
+ put?: OperationObject;
46
+ post?: OperationObject;
47
+ delete?: OperationObject;
48
+ options?: OperationObject;
49
+ head?: OperationObject;
50
+ patch?: OperationObject;
51
+ trace?: OperationObject;
52
+ parameters?: Array<ParameterObject | ReferenceObject>;
53
+ }
54
+ export interface OperationObject {
55
+ tags?: string[];
56
+ summary?: string;
57
+ description?: string;
58
+ operationId?: string;
59
+ parameters?: Array<ParameterObject | ReferenceObject>;
60
+ requestBody?: RequestBodyObject | ReferenceObject;
61
+ responses: ResponsesObject;
62
+ deprecated?: boolean;
63
+ security?: SecurityRequirementObject[];
64
+ servers?: ServerObject[];
65
+ }
66
+ export interface ParameterObject {
67
+ name: string;
68
+ in: 'query' | 'header' | 'path' | 'cookie';
69
+ description?: string;
70
+ required?: boolean;
71
+ deprecated?: boolean;
72
+ allowEmptyValue?: boolean;
73
+ schema?: SchemaObject | ReferenceObject;
74
+ }
75
+ export interface RequestBodyObject {
76
+ description?: string;
77
+ required?: boolean;
78
+ content: ContentObject;
79
+ }
80
+ export interface ResponsesObject {
81
+ [statusCode: string]: ResponseObject | ReferenceObject;
82
+ }
83
+ export interface ResponseObject {
84
+ description?: string;
85
+ headers?: Record<string, HeaderObject | ReferenceObject>;
86
+ content?: ContentObject;
87
+ }
88
+ export interface HeaderObject {
89
+ description?: string;
90
+ schema?: SchemaObject | ReferenceObject;
91
+ }
92
+ export interface ContentObject {
93
+ [mediaType: string]: MediaTypeObject;
94
+ }
95
+ export interface MediaTypeObject {
96
+ schema?: SchemaObject | ReferenceObject;
97
+ example?: unknown;
98
+ }
99
+ export interface ComponentsObject {
100
+ schemas?: Record<string, SchemaObject | ReferenceObject>;
101
+ responses?: Record<string, ResponseObject | ReferenceObject>;
102
+ parameters?: Record<string, ParameterObject | ReferenceObject>;
103
+ securitySchemes?: Record<string, SecuritySchemeObject | ReferenceObject>;
104
+ }
105
+ export interface SecuritySchemeObject {
106
+ type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect' | 'mutualTLS';
107
+ description?: string;
108
+ name?: string;
109
+ in?: 'query' | 'header' | 'cookie';
110
+ scheme?: string;
111
+ bearerFormat?: string;
112
+ flows?: OAuthFlowsObject;
113
+ openIdConnectUrl?: string;
114
+ }
115
+ export interface OAuthFlowsObject {
116
+ implicit?: OAuthFlowObject;
117
+ password?: OAuthFlowObject;
118
+ clientCredentials?: OAuthFlowObject;
119
+ authorizationCode?: OAuthFlowObject;
120
+ }
121
+ export interface OAuthFlowObject {
122
+ authorizationUrl?: string;
123
+ tokenUrl?: string;
124
+ refreshUrl?: string;
125
+ scopes?: Record<string, string>;
126
+ }
127
+ export interface SchemaObject {
128
+ type?: string;
129
+ format?: string;
130
+ title?: string;
131
+ description?: string;
132
+ required?: string[];
133
+ properties?: Record<string, SchemaObject | ReferenceObject>;
134
+ items?: SchemaObject | ReferenceObject;
135
+ enum?: unknown[];
136
+ example?: unknown;
137
+ default?: unknown;
138
+ $ref?: string;
139
+ allOf?: Array<SchemaObject | ReferenceObject>;
140
+ oneOf?: Array<SchemaObject | ReferenceObject>;
141
+ anyOf?: Array<SchemaObject | ReferenceObject>;
142
+ nullable?: boolean;
143
+ additionalProperties?: boolean | SchemaObject | ReferenceObject;
144
+ }
145
+ export interface ReferenceObject {
146
+ $ref: string;
147
+ }
148
+ export interface SecurityRequirementObject {
149
+ [name: string]: string[];
150
+ }
151
+ export interface TagObject {
152
+ name: string;
153
+ description?: string;
154
+ }
155
+ export interface ExternalDocsObject {
156
+ description?: string;
157
+ url: string;
158
+ }
159
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { ReferenceObject } from './types.js';
2
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
3
+ export declare function isReference(value: unknown): value is ReferenceObject;
4
+ export declare function resolveRefName(ref: string): string;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAEpE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGlD"}
package/dist/utils.js ADDED
@@ -0,0 +1,11 @@
1
+ export function isObject(value) {
2
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
3
+ }
4
+ export function isReference(value) {
5
+ return isObject(value) && typeof value.$ref === 'string';
6
+ }
7
+ export function resolveRefName(ref) {
8
+ const parts = ref.split('/');
9
+ return parts[parts.length - 1] || ref;
10
+ }
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AACxC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "1.0.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const VERSION = '1.0.0';
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { RenderedFile } from '../renderers/renderer.js';
2
+ export interface FileWriter {
3
+ write(outputDir: string, files: RenderedFile[]): Promise<string[]>;
4
+ }
5
+ export declare class FsWriter implements FileWriter {
6
+ write(outputDir: string, files: RenderedFile[]): Promise<string[]>;
7
+ }
8
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/writers/writer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACpE;AAED,qBAAa,QAAS,YAAW,UAAU;IACnC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASvE;CACF"}
@@ -0,0 +1,15 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { dirname, resolve } from 'node:path';
3
+ export class FsWriter {
4
+ async write(outputDir, files) {
5
+ const written = [];
6
+ for (const file of files) {
7
+ const target = resolve(outputDir, file.path);
8
+ await mkdir(dirname(target), { recursive: true });
9
+ await writeFile(target, file.content, 'utf8');
10
+ written.push(target);
11
+ }
12
+ return written;
13
+ }
14
+ }
15
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/writers/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQ7C,MAAM,OAAO,QAAQ;IACnB,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,KAAqB;QAClD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@andrezz/openapimd",
3
+ "version": "1.0.0",
4
+ "description": "Convert OpenAPI specifications (JSON or YAML) into Markdown documentation.",
5
+ "keywords": [
6
+ "openapi",
7
+ "swagger",
8
+ "markdown",
9
+ "documentation",
10
+ "cli",
11
+ "converter"
12
+ ],
13
+ "license": "MIT",
14
+ "author": "andrezz",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "bin": {
25
+ "openapimd": "./dist/cli.js"
26
+ },
27
+ "files": [
28
+ "dist"
29
+ ],
30
+ "engines": {
31
+ "node": ">=18"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/andrezz/openapimd.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/andrezz/openapimd/issues"
39
+ },
40
+ "homepage": "https://github.com/andrezz/openapimd#readme",
41
+ "publishConfig": {
42
+ "registry": "https://registry.npmjs.org",
43
+ "access": "public"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -p tsconfig.json",
47
+ "clean": "node --input-type=module -e \"import fs from 'node:fs'; fs.rmSync('dist', { recursive: true, force: true })\"",
48
+ "test": "vitest run",
49
+ "test:watch": "vitest",
50
+ "test:coverage": "vitest run --coverage",
51
+ "prepublishOnly": "npm run clean && npm run build"
52
+ },
53
+ "dependencies": {
54
+ "yaml": "^2.9.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^26.2.0",
58
+ "@vitest/coverage-v8": "^4.1.11",
59
+ "typescript": "^7.0.2",
60
+ "vitest": "^4.1.11"
61
+ }
62
+ }