@sdk-it/spec 0.22.0 → 0.23.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.
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2629
- package/dist/index.js.map +4 -4
- package/dist/lib/find-polymorphic-varients.d.ts +1 -1
- package/dist/lib/find-polymorphic-varients.d.ts.map +1 -1
- package/dist/lib/find-polymorphic-varients.js +291 -0
- package/dist/lib/find-polymorphic-varients.js.map +7 -0
- package/dist/lib/find-polymorphic-varients.test.js +615 -0
- package/dist/lib/find-polymorphic-varients.test.js.map +7 -0
- package/dist/lib/find-unique-schema-name.js +16 -0
- package/dist/lib/find-unique-schema-name.js.map +7 -0
- package/dist/lib/for-each-operation.d.ts +3 -0
- package/dist/lib/for-each-operation.d.ts.map +1 -0
- package/dist/lib/for-each-operation.js +30 -0
- package/dist/lib/for-each-operation.js.map +7 -0
- package/dist/lib/format-name.js +86 -0
- package/dist/lib/format-name.js.map +7 -0
- package/dist/lib/get-ref-usage.d.ts +1 -1
- package/dist/lib/get-ref-usage.d.ts.map +1 -1
- package/dist/lib/get-ref-usage.js +52 -0
- package/dist/lib/get-ref-usage.js.map +7 -0
- package/dist/lib/is-primitive-schema.js +12 -0
- package/dist/lib/is-primitive-schema.js.map +7 -0
- package/dist/lib/is.d.ts +14 -0
- package/dist/lib/is.d.ts.map +1 -0
- package/dist/lib/is.js +71 -0
- package/dist/lib/is.js.map +7 -0
- package/dist/lib/loaders/load-spec.js +25 -0
- package/dist/lib/loaders/load-spec.js.map +7 -0
- package/dist/lib/loaders/local-loader.js +20 -0
- package/dist/lib/loaders/local-loader.js.map +7 -0
- package/dist/lib/loaders/postman/postman-converter.js +483 -0
- package/dist/lib/loaders/postman/postman-converter.js.map +7 -0
- package/dist/lib/loaders/postman/spec-types.js +1 -0
- package/dist/lib/loaders/postman/spec-types.js.map +7 -0
- package/dist/lib/loaders/remote-loader.js +29 -0
- package/dist/lib/loaders/remote-loader.js.map +7 -0
- package/dist/lib/metadata.js +51 -0
- package/dist/lib/metadata.js.map +7 -0
- package/dist/lib/operation.d.ts +4 -75
- package/dist/lib/operation.d.ts.map +1 -1
- package/dist/lib/operation.js +402 -0
- package/dist/lib/operation.js.map +7 -0
- package/dist/lib/operation.test.js +261 -0
- package/dist/lib/operation.test.js.map +7 -0
- package/dist/lib/options.d.ts +30 -0
- package/dist/lib/options.d.ts.map +1 -0
- package/dist/lib/options.js +54 -0
- package/dist/lib/options.js.map +7 -0
- package/dist/lib/overview-docs.d.ts +4 -0
- package/dist/lib/overview-docs.d.ts.map +1 -0
- package/dist/lib/overview-docs.js +276 -0
- package/dist/lib/overview-docs.js.map +7 -0
- package/dist/lib/pagination/pagination-result.js +235 -0
- package/dist/lib/pagination/pagination-result.js.map +7 -0
- package/dist/lib/pagination/pagination-result.test.js +548 -0
- package/dist/lib/pagination/pagination-result.test.js.map +7 -0
- package/dist/lib/pagination/pagination.d.ts +1 -1
- package/dist/lib/pagination/pagination.d.ts.map +1 -1
- package/dist/lib/pagination/pagination.js +222 -0
- package/dist/lib/pagination/pagination.js.map +7 -0
- package/dist/lib/pagination/pagination.test.js +378 -0
- package/dist/lib/pagination/pagination.test.js.map +7 -0
- package/dist/lib/reserved-keywords.d.ts +6 -0
- package/dist/lib/reserved-keywords.d.ts.map +1 -0
- package/dist/lib/reserved-keywords.js +71 -0
- package/dist/lib/reserved-keywords.js.map +7 -0
- package/dist/lib/security.d.ts +6 -4
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +75 -0
- package/dist/lib/security.js.map +7 -0
- package/dist/lib/sidebar.d.ts +5 -3
- package/dist/lib/sidebar.d.ts.map +1 -1
- package/dist/lib/sidebar.js +79 -0
- package/dist/lib/sidebar.js.map +7 -0
- package/dist/lib/tag.d.ts +19 -0
- package/dist/lib/tag.d.ts.map +1 -0
- package/dist/lib/tag.js +132 -0
- package/dist/lib/tag.js.map +7 -0
- package/dist/lib/tune.d.ts +1 -1
- package/dist/lib/tune.d.ts.map +1 -1
- package/dist/lib/tune.js +291 -0
- package/dist/lib/tune.js.map +7 -0
- package/dist/lib/tune.test.js +60 -0
- package/dist/lib/tune.test.js.map +7 -0
- package/dist/lib/types.d.ts +37 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +7 -0
- package/package.json +4 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/find-unique-schema-name.ts"],
|
|
4
|
+
"sourcesContent": ["import type { OpenAPIObject } from 'openapi3-ts/oas31';\n\nimport { joinSkipDigits, pascalcase } from '@sdk-it/core';\n\nconst reservedNames = new Set(['Function', 'Error']);\n\nexport function findUniqueSchemaName(\n spec: OpenAPIObject,\n initialName: string,\n potentialSuffixList: string[],\n fallback?: string,\n) {\n spec.components ??= {};\n spec.components.schemas ??= {};\n let name = pascalcase(initialName);\n while (spec.components.schemas[name] || reservedNames.has(name)) {\n const suffix = potentialSuffixList.shift();\n name = pascalcase(joinSkipDigits([name, suffix || ''], ' '));\n }\n return initialName === name ? (fallback ?? name) : name;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,gBAAgB,kBAAkB;AAE3C,MAAM,gBAAgB,oBAAI,IAAI,CAAC,YAAY,OAAO,CAAC;AAE5C,SAAS,qBACd,MACA,aACA,qBACA,UACA;AACA,OAAK,eAAe,CAAC;AACrB,OAAK,WAAW,YAAY,CAAC;AAC7B,MAAI,OAAO,WAAW,WAAW;AACjC,SAAO,KAAK,WAAW,QAAQ,IAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAC/D,UAAM,SAAS,oBAAoB,MAAM;AACzC,WAAO,WAAW,eAAe,CAAC,MAAM,UAAU,EAAE,GAAG,GAAG,CAAC;AAAA,EAC7D;AACA,SAAO,gBAAgB,OAAQ,YAAY,OAAQ;AACrD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { OperationEntry, OurOpenAPIObject, TunedOperationObject } from './types.js';
|
|
2
|
+
export declare function forEachOperation<T>(spec: OurOpenAPIObject, callback: (entry: OperationEntry, operation: TunedOperationObject) => T): T[];
|
|
3
|
+
//# sourceMappingURL=for-each-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"for-each-operation.d.ts","sourceRoot":"","sources":["../../src/lib/for-each-operation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,KAAK,CAAC,OA6BxE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { methods } from "@sdk-it/core/paths.js";
|
|
2
|
+
function forEachOperation(spec, callback) {
|
|
3
|
+
const result = [];
|
|
4
|
+
for (const [path, pathItem] of Object.entries(spec.paths)) {
|
|
5
|
+
for (const [method, operation] of Object.entries(pathItem)) {
|
|
6
|
+
if (!methods.includes(method)) {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
const metadata = operation["x-oaiMeta"] ?? {};
|
|
10
|
+
const operationTag = operation.tags?.[0];
|
|
11
|
+
result.push(
|
|
12
|
+
callback(
|
|
13
|
+
{
|
|
14
|
+
name: metadata.name,
|
|
15
|
+
method,
|
|
16
|
+
path,
|
|
17
|
+
groupName: operationTag,
|
|
18
|
+
tag: operationTag
|
|
19
|
+
},
|
|
20
|
+
operation
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
forEachOperation
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=for-each-operation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/for-each-operation.ts"],
|
|
4
|
+
"sourcesContent": ["import type { OperationObject } from 'openapi3-ts/oas31';\n\nimport { type Method, methods } from '@sdk-it/core/paths.js';\n\nimport type { OperationEntry, OurOpenAPIObject, TunedOperationObject } from './types.js';\n\nexport function forEachOperation<T>(\n spec: OurOpenAPIObject,\n callback: (entry: OperationEntry, operation: TunedOperationObject) => T,\n) {\n const result: T[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(pathItem) as [\n Method,\n OperationObject,\n ][]) {\n if (!methods.includes(method)) {\n continue;\n }\n const metadata = operation['x-oaiMeta'] ?? {};\n const operationTag = operation.tags?.[0] as string;\n\n result.push(\n callback(\n {\n name: metadata.name,\n method,\n path: path,\n groupName: operationTag,\n tag: operationTag,\n },\n operation as TunedOperationObject,\n ),\n );\n }\n }\n return result;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAsB,eAAe;AAI9B,SAAS,iBACd,MACA,UACA;AACA,QAAM,SAAc,CAAC;AACrB,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACzD,eAAW,CAAC,QAAQ,SAAS,KAAK,OAAO,QAAQ,QAAQ,GAGpD;AACH,UAAI,CAAC,QAAQ,SAAS,MAAM,GAAG;AAC7B;AAAA,MACF;AACA,YAAM,WAAW,UAAU,WAAW,KAAK,CAAC;AAC5C,YAAM,eAAe,UAAU,OAAO,CAAC;AAEvC,aAAO;AAAA,QACL;AAAA,UACE;AAAA,YACE,MAAM,SAAS;AAAA,YACf;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,KAAK;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const reservedWords = /* @__PURE__ */ new Set([
|
|
2
|
+
"abstract",
|
|
3
|
+
"as",
|
|
4
|
+
"assert",
|
|
5
|
+
"async",
|
|
6
|
+
"await",
|
|
7
|
+
"break",
|
|
8
|
+
"case",
|
|
9
|
+
"catch",
|
|
10
|
+
"class",
|
|
11
|
+
"const",
|
|
12
|
+
"continue",
|
|
13
|
+
"default",
|
|
14
|
+
"deferred",
|
|
15
|
+
"do",
|
|
16
|
+
"dynamic",
|
|
17
|
+
"else",
|
|
18
|
+
"enum",
|
|
19
|
+
"export",
|
|
20
|
+
"extends",
|
|
21
|
+
"extension",
|
|
22
|
+
"external",
|
|
23
|
+
"factory",
|
|
24
|
+
"final",
|
|
25
|
+
"finally",
|
|
26
|
+
"for",
|
|
27
|
+
"Function",
|
|
28
|
+
"get",
|
|
29
|
+
"set",
|
|
30
|
+
"hide",
|
|
31
|
+
"if",
|
|
32
|
+
"default",
|
|
33
|
+
"new",
|
|
34
|
+
"implements",
|
|
35
|
+
"import",
|
|
36
|
+
"in",
|
|
37
|
+
"interface",
|
|
38
|
+
"is",
|
|
39
|
+
"library",
|
|
40
|
+
"mixin",
|
|
41
|
+
"new",
|
|
42
|
+
"null",
|
|
43
|
+
"on",
|
|
44
|
+
"operator",
|
|
45
|
+
"part",
|
|
46
|
+
"required",
|
|
47
|
+
"rethrow",
|
|
48
|
+
"return",
|
|
49
|
+
"hide",
|
|
50
|
+
"show"
|
|
51
|
+
]);
|
|
52
|
+
const STARTS_WITH_MINUS_PATTERN = /^-/;
|
|
53
|
+
const STARTS_WITH_DIGITS_PATTERN = /^-?\d/;
|
|
54
|
+
const FIRST_DASH = /^_/;
|
|
55
|
+
const LAST_DASH = /_$/;
|
|
56
|
+
const ONLY_ENGLISH = /(^\$)|(\+)|(-)|[^A-Za-z0-9]+/g;
|
|
57
|
+
const formatName = (it) => {
|
|
58
|
+
if (reservedWords.has(it)) {
|
|
59
|
+
return `$${it}`;
|
|
60
|
+
}
|
|
61
|
+
if (typeof it === "number") {
|
|
62
|
+
if (Math.sign(it) === -1) {
|
|
63
|
+
return `$_${Math.abs(it)}`;
|
|
64
|
+
}
|
|
65
|
+
return `$${it}`;
|
|
66
|
+
}
|
|
67
|
+
if (typeof it === "string") {
|
|
68
|
+
if (STARTS_WITH_DIGITS_PATTERN.test(it)) {
|
|
69
|
+
if (Math.sign(parseInt(it, 10)) === -1) {
|
|
70
|
+
return `$_${Math.abs(parseInt(it, 10))}`;
|
|
71
|
+
}
|
|
72
|
+
return `$${it}`;
|
|
73
|
+
}
|
|
74
|
+
return it.replace(ONLY_ENGLISH, (match) => {
|
|
75
|
+
if (match === "-" && match === it[0]) return "desc_";
|
|
76
|
+
if (match === "+") return "_plus_";
|
|
77
|
+
if (match === "$" && match === it[0]) return "$";
|
|
78
|
+
return "_";
|
|
79
|
+
}).replace(FIRST_DASH, "").replace(LAST_DASH, "");
|
|
80
|
+
}
|
|
81
|
+
return String(it);
|
|
82
|
+
};
|
|
83
|
+
export {
|
|
84
|
+
formatName
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=format-name.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/format-name.ts"],
|
|
4
|
+
"sourcesContent": ["const reservedWords = new Set([\n 'abstract',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'default',\n 'deferred',\n 'do',\n 'dynamic',\n 'else',\n 'enum',\n 'export',\n 'extends',\n 'extension',\n 'external',\n 'factory',\n 'final',\n 'finally',\n 'for',\n 'Function',\n 'get',\n 'set',\n 'hide',\n 'if',\n 'default',\n 'new',\n 'implements',\n 'import',\n 'in',\n 'interface',\n 'is',\n 'library',\n 'mixin',\n 'new',\n 'null',\n 'on',\n 'operator',\n 'part',\n 'required',\n 'rethrow',\n 'return',\n 'hide',\n 'show',\n]);\nconst STARTS_WITH_MINUS_PATTERN = /^-/;\nconst STARTS_WITH_DIGITS_PATTERN = /^-?\\d/;\nconst FIRST_DASH = /^_/;\nconst LAST_DASH = /_$/;\nconst ONLY_ENGLISH = /(^\\$)|(\\+)|(-)|[^A-Za-z0-9]+/g;\n\nexport const formatName = (it: any): string => {\n if (reservedWords.has(it)) {\n return `$${it}`;\n }\n\n // 1. Handle numbers\n if (typeof it === 'number') {\n if (Math.sign(it) === -1) {\n return `$_${Math.abs(it)}`;\n }\n return `$${it}`;\n }\n\n // 3. Handle other strings\n if (typeof it === 'string') {\n // 3a. Check if the string starts with a digit FIRST\n if (STARTS_WITH_DIGITS_PATTERN.test(it)) {\n if (Math.sign(parseInt(it, 10)) === -1) {\n // if negative number, prefix with $_\n return `$_${Math.abs(parseInt(it, 10))}`;\n }\n // positive number or string starting with digit, prefix with $\n return `$${it}`;\n }\n\n return it\n .replace(ONLY_ENGLISH, (match) => {\n if (match === '-' && match === it[0]) return 'desc_';\n if (match === '+') return '_plus_';\n if (match === '$' && match === it[0]) return '$';\n return '_';\n })\n .replace(FIRST_DASH, '')\n .replace(LAST_DASH, '');\n }\n\n // 4. Fallback for any other types (e.g., null, undefined, objects)\n // Convert to string first, then apply snakecase\n return String(it);\n};\n"],
|
|
5
|
+
"mappings": "AAAA,MAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,MAAM,4BAA4B;AAClC,MAAM,6BAA6B;AACnC,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,eAAe;AAEd,MAAM,aAAa,CAAC,OAAoB;AAC7C,MAAI,cAAc,IAAI,EAAE,GAAG;AACzB,WAAO,IAAI,EAAE;AAAA,EACf;AAGA,MAAI,OAAO,OAAO,UAAU;AAC1B,QAAI,KAAK,KAAK,EAAE,MAAM,IAAI;AACxB,aAAO,KAAK,KAAK,IAAI,EAAE,CAAC;AAAA,IAC1B;AACA,WAAO,IAAI,EAAE;AAAA,EACf;AAGA,MAAI,OAAO,OAAO,UAAU;AAE1B,QAAI,2BAA2B,KAAK,EAAE,GAAG;AACvC,UAAI,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,IAAI;AAEtC,eAAO,KAAK,KAAK,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,MACxC;AAEA,aAAO,IAAI,EAAE;AAAA,IACf;AAEA,WAAO,GACJ,QAAQ,cAAc,CAAC,UAAU;AAChC,UAAI,UAAU,OAAO,UAAU,GAAG,CAAC,EAAG,QAAO;AAC7C,UAAI,UAAU,IAAK,QAAO;AAC1B,UAAI,UAAU,OAAO,UAAU,GAAG,CAAC,EAAG,QAAO;AAC7C,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,YAAY,EAAE,EACtB,QAAQ,WAAW,EAAE;AAAA,EAC1B;AAIA,SAAO,OAAO,EAAE;AAClB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-ref-usage.d.ts","sourceRoot":"","sources":["../../src/lib/get-ref-usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-ref-usage.d.ts","sourceRoot":"","sources":["../../src/lib/get-ref-usage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,WAAW,CACzB,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAO,GAClB,MAAM,EAAE,CAoDV"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isEmpty, isRef, parseRef, pascalcase } from "@sdk-it/core";
|
|
2
|
+
function getRefUsage(spec, schemaName, list = []) {
|
|
3
|
+
const checkSchema = (schema, withRefCheck = false) => {
|
|
4
|
+
if (isRef(schema)) {
|
|
5
|
+
if (!withRefCheck) return false;
|
|
6
|
+
const { model } = parseRef(schema.$ref);
|
|
7
|
+
return model === schemaName;
|
|
8
|
+
}
|
|
9
|
+
if (!isEmpty(schema.oneOf)) {
|
|
10
|
+
return schema.oneOf.some((it) => checkSchema(it, true));
|
|
11
|
+
}
|
|
12
|
+
if (schema.type === "array" && schema.items) {
|
|
13
|
+
if (isRef(schema.items)) {
|
|
14
|
+
return checkSchema(schema.items, withRefCheck);
|
|
15
|
+
}
|
|
16
|
+
if (schema.items.oneOf) {
|
|
17
|
+
return schema.items.oneOf.some((it) => checkSchema(it, true));
|
|
18
|
+
}
|
|
19
|
+
return checkSchema(schema.items, withRefCheck);
|
|
20
|
+
}
|
|
21
|
+
if (schema.type === "object") {
|
|
22
|
+
const properties = schema.properties;
|
|
23
|
+
if (!isEmpty(properties)) {
|
|
24
|
+
let found = false;
|
|
25
|
+
let propertyName = "";
|
|
26
|
+
for (const [key, it] of Object.entries(properties)) {
|
|
27
|
+
found = checkSchema(it, false);
|
|
28
|
+
if (found) {
|
|
29
|
+
propertyName = key;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return propertyName;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
for (const [key, value] of Object.entries(spec.components.schemas)) {
|
|
38
|
+
const thisWouldBeTheObjectPropertyKeyName = checkSchema(value);
|
|
39
|
+
if (thisWouldBeTheObjectPropertyKeyName) {
|
|
40
|
+
if (typeof thisWouldBeTheObjectPropertyKeyName === "string") {
|
|
41
|
+
list.push(pascalcase(`${key} ${thisWouldBeTheObjectPropertyKeyName}`));
|
|
42
|
+
} else {
|
|
43
|
+
list.push(pascalcase(key));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return list;
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
getRefUsage
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=get-ref-usage.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/get-ref-usage.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ReferenceObject, SchemaObject } from 'openapi3-ts/oas31';\n\nimport { isEmpty, isRef, parseRef, pascalcase } from '@sdk-it/core';\n\nimport type { OurOpenAPIObject } from './types.ts';\n\nexport function getRefUsage(\n spec: OurOpenAPIObject,\n schemaName: string,\n list: string[] = [],\n): string[] {\n const checkSchema = (\n schema: SchemaObject | ReferenceObject,\n withRefCheck = false,\n ): any => {\n if (isRef(schema)) {\n if (!withRefCheck) return false;\n const { model } = parseRef(schema.$ref);\n return model === schemaName;\n }\n if (!isEmpty(schema.oneOf)) {\n return schema.oneOf.some((it) => checkSchema(it, true));\n }\n if (schema.type === 'array' && schema.items) {\n if (isRef(schema.items)) {\n return checkSchema(schema.items, withRefCheck);\n }\n if (schema.items.oneOf) {\n return schema.items.oneOf.some((it) => checkSchema(it, true));\n }\n return checkSchema(schema.items, withRefCheck);\n }\n\n if (schema.type === 'object') {\n const properties = schema.properties;\n if (!isEmpty(properties)) {\n let found = false;\n let propertyName = '';\n for (const [key, it] of Object.entries(properties)) {\n found = checkSchema(it, false);\n if (found) {\n propertyName = key;\n }\n }\n return propertyName;\n }\n }\n return false;\n };\n\n for (const [key, value] of Object.entries(spec.components.schemas)) {\n const thisWouldBeTheObjectPropertyKeyName = checkSchema(value);\n if (thisWouldBeTheObjectPropertyKeyName) {\n if (typeof thisWouldBeTheObjectPropertyKeyName === 'string') {\n list.push(pascalcase(`${key} ${thisWouldBeTheObjectPropertyKeyName}`));\n } else {\n list.push(pascalcase(key));\n }\n }\n }\n\n return list;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,SAAS,OAAO,UAAU,kBAAkB;AAI9C,SAAS,YACd,MACA,YACA,OAAiB,CAAC,GACR;AACV,QAAM,cAAc,CAClB,QACA,eAAe,UACP;AACR,QAAI,MAAM,MAAM,GAAG;AACjB,UAAI,CAAC,aAAc,QAAO;AAC1B,YAAM,EAAE,MAAM,IAAI,SAAS,OAAO,IAAI;AACtC,aAAO,UAAU;AAAA,IACnB;AACA,QAAI,CAAC,QAAQ,OAAO,KAAK,GAAG;AAC1B,aAAO,OAAO,MAAM,KAAK,CAAC,OAAO,YAAY,IAAI,IAAI,CAAC;AAAA,IACxD;AACA,QAAI,OAAO,SAAS,WAAW,OAAO,OAAO;AAC3C,UAAI,MAAM,OAAO,KAAK,GAAG;AACvB,eAAO,YAAY,OAAO,OAAO,YAAY;AAAA,MAC/C;AACA,UAAI,OAAO,MAAM,OAAO;AACtB,eAAO,OAAO,MAAM,MAAM,KAAK,CAAC,OAAO,YAAY,IAAI,IAAI,CAAC;AAAA,MAC9D;AACA,aAAO,YAAY,OAAO,OAAO,YAAY;AAAA,IAC/C;AAEA,QAAI,OAAO,SAAS,UAAU;AAC5B,YAAM,aAAa,OAAO;AAC1B,UAAI,CAAC,QAAQ,UAAU,GAAG;AACxB,YAAI,QAAQ;AACZ,YAAI,eAAe;AACnB,mBAAW,CAAC,KAAK,EAAE,KAAK,OAAO,QAAQ,UAAU,GAAG;AAClD,kBAAQ,YAAY,IAAI,KAAK;AAC7B,cAAI,OAAO;AACT,2BAAe;AAAA,UACjB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,WAAW,OAAO,GAAG;AAClE,UAAM,sCAAsC,YAAY,KAAK;AAC7D,QAAI,qCAAqC;AACvC,UAAI,OAAO,wCAAwC,UAAU;AAC3D,aAAK,KAAK,WAAW,GAAG,GAAG,IAAI,mCAAmC,EAAE,CAAC;AAAA,MACvE,OAAO;AACL,aAAK,KAAK,WAAW,GAAG,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { coerceTypes } from "./tune.js";
|
|
2
|
+
function isPrimitiveSchema(schema) {
|
|
3
|
+
const types = coerceTypes(schema, false);
|
|
4
|
+
if (!types || types.length === 0) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
return types.includes("object") === false;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
isPrimitiveSchema
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=is-primitive-schema.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/is-primitive-schema.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SchemaObject } from 'openapi3-ts/oas31';\n\nimport { coerceTypes } from './tune.js';\n\nexport function isPrimitiveSchema(schema: SchemaObject) {\n const types = coerceTypes(schema, false);\n if (!types || types.length === 0) {\n return false;\n }\n return types.includes('object') === false;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,mBAAmB;AAErB,SAAS,kBAAkB,QAAsB;AACtD,QAAM,QAAQ,YAAY,QAAQ,KAAK;AACvC,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO,MAAM,SAAS,QAAQ,MAAM;AACtC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/lib/is.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function isStreamingContentType(contentType: string | null | undefined): boolean;
|
|
2
|
+
export declare function isSuccessStatusCode(statusCode: number | string): boolean;
|
|
3
|
+
export declare function isErrorStatusCode(statusCode: number | string): boolean;
|
|
4
|
+
export declare function parseJsonContentType(contentType: string | null | undefined): string | null;
|
|
5
|
+
export declare function isTextContentType(contentType: string | null | undefined): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Checks if a given content type string represents Server-Sent Events (SSE).
|
|
8
|
+
* Handles case-insensitivity, parameters (like charset), and leading/trailing whitespace.
|
|
9
|
+
*
|
|
10
|
+
* @param contentType The content type string to check (e.g., from a Content-Type header).
|
|
11
|
+
* @returns True if the content type is 'text/event-stream', false otherwise.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isSseContentType(contentType: string | null | undefined): boolean;
|
|
14
|
+
//# sourceMappingURL=is.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is.d.ts","sourceRoot":"","sources":["../../src/lib/is.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,OAAO,CAET;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAQxE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CActE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,iBAuB1E;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,OAAO,CAiBT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,OAAO,CAoBT"}
|
package/dist/lib/is.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
function isStreamingContentType(contentType) {
|
|
2
|
+
return contentType === "application/octet-stream";
|
|
3
|
+
}
|
|
4
|
+
function isSuccessStatusCode(statusCode) {
|
|
5
|
+
if (typeof statusCode === "string") {
|
|
6
|
+
const statusGroup = +statusCode.slice(0, 1);
|
|
7
|
+
const status = Number(statusCode);
|
|
8
|
+
return status >= 200 && status < 300 || status >= 2 && statusGroup <= 3;
|
|
9
|
+
}
|
|
10
|
+
statusCode = Number(statusCode);
|
|
11
|
+
return statusCode >= 200 && statusCode < 300;
|
|
12
|
+
}
|
|
13
|
+
function isErrorStatusCode(statusCode) {
|
|
14
|
+
if (typeof statusCode === "string") {
|
|
15
|
+
const statusGroup = +statusCode.slice(0, 1);
|
|
16
|
+
const status = Number(statusCode);
|
|
17
|
+
return status < 200 || status >= 300 || statusGroup >= 4 || statusGroup === 0 || statusGroup === 1;
|
|
18
|
+
}
|
|
19
|
+
statusCode = Number(statusCode);
|
|
20
|
+
return statusCode < 200 || statusCode >= 300;
|
|
21
|
+
}
|
|
22
|
+
function parseJsonContentType(contentType) {
|
|
23
|
+
if (!contentType) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
let mainType = contentType.trim();
|
|
27
|
+
const semicolonIndex = mainType.indexOf(";");
|
|
28
|
+
if (semicolonIndex !== -1) {
|
|
29
|
+
mainType = mainType.substring(0, semicolonIndex).trim();
|
|
30
|
+
}
|
|
31
|
+
mainType = mainType.toLowerCase();
|
|
32
|
+
if (mainType.endsWith("/json")) {
|
|
33
|
+
return mainType.split("/")[1];
|
|
34
|
+
} else if (mainType.endsWith("+json")) {
|
|
35
|
+
return mainType.split("+")[1];
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function isTextContentType(contentType) {
|
|
40
|
+
if (!contentType) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
let mainType = contentType.trim();
|
|
44
|
+
const semicolonIndex = mainType.indexOf(";");
|
|
45
|
+
if (semicolonIndex !== -1) {
|
|
46
|
+
mainType = mainType.substring(0, semicolonIndex).trim();
|
|
47
|
+
}
|
|
48
|
+
mainType = mainType.toLowerCase();
|
|
49
|
+
return mainType.startsWith("text/");
|
|
50
|
+
}
|
|
51
|
+
function isSseContentType(contentType) {
|
|
52
|
+
if (!contentType) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
let mainType = contentType.trim();
|
|
56
|
+
const semicolonIndex = mainType.indexOf(";");
|
|
57
|
+
if (semicolonIndex !== -1) {
|
|
58
|
+
mainType = mainType.substring(0, semicolonIndex).trim();
|
|
59
|
+
}
|
|
60
|
+
mainType = mainType.toLowerCase();
|
|
61
|
+
return mainType === "text/event-stream";
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
isErrorStatusCode,
|
|
65
|
+
isSseContentType,
|
|
66
|
+
isStreamingContentType,
|
|
67
|
+
isSuccessStatusCode,
|
|
68
|
+
isTextContentType,
|
|
69
|
+
parseJsonContentType
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=is.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/is.ts"],
|
|
4
|
+
"sourcesContent": ["export function isStreamingContentType(\n contentType: string | null | undefined,\n): boolean {\n return contentType === 'application/octet-stream';\n}\n\nexport function isSuccessStatusCode(statusCode: number | string): boolean {\n if (typeof statusCode === 'string') {\n const statusGroup = +statusCode.slice(0, 1);\n const status = Number(statusCode);\n return (status >= 200 && status < 300) || (status >= 2 && statusGroup <= 3);\n }\n statusCode = Number(statusCode);\n return statusCode >= 200 && statusCode < 300;\n}\n\nexport function isErrorStatusCode(statusCode: number | string): boolean {\n if (typeof statusCode === 'string') {\n const statusGroup = +statusCode.slice(0, 1);\n const status = Number(statusCode);\n return (\n status < 200 ||\n status >= 300 ||\n statusGroup >= 4 ||\n statusGroup === 0 ||\n statusGroup === 1\n );\n }\n statusCode = Number(statusCode);\n return statusCode < 200 || statusCode >= 300;\n}\n\nexport function parseJsonContentType(contentType: string | null | undefined) {\n if (!contentType) {\n return null;\n }\n\n // 1. Trim whitespace\n let mainType = contentType.trim();\n\n // 2. Remove parameters (anything after the first ';')\n const semicolonIndex = mainType.indexOf(';');\n if (semicolonIndex !== -1) {\n mainType = mainType.substring(0, semicolonIndex).trim(); // Trim potential space before ';'\n }\n\n // 3. Convert to lowercase for case-insensitive comparison\n mainType = mainType.toLowerCase();\n\n if (mainType.endsWith('/json')) {\n return mainType.split('/')[1];\n } else if (mainType.endsWith('+json')) {\n return mainType.split('+')[1];\n }\n return null;\n}\n\nexport function isTextContentType(\n contentType: string | null | undefined,\n): boolean {\n if (!contentType) {\n return false; // Handle null, undefined, or empty string\n }\n\n // 1. Trim whitespace from the input string\n let mainType = contentType.trim();\n // 2. Find the position of the first semicolon (if any) to remove parameters\n const semicolonIndex = mainType.indexOf(';');\n if (semicolonIndex !== -1) {\n // Extract the part before the semicolon and trim potential space\n mainType = mainType.substring(0, semicolonIndex).trim();\n }\n // 3. Convert the main type part to lowercase for case-insensitive comparison\n mainType = mainType.toLowerCase();\n // 4. Compare against the standard text MIME types\n return mainType.startsWith('text/'); // Catch-all for other text/* types\n}\n\n/**\n * Checks if a given content type string represents Server-Sent Events (SSE).\n * Handles case-insensitivity, parameters (like charset), and leading/trailing whitespace.\n *\n * @param contentType The content type string to check (e.g., from a Content-Type header).\n * @returns True if the content type is 'text/event-stream', false otherwise.\n */\nexport function isSseContentType(\n contentType: string | null | undefined,\n): boolean {\n if (!contentType) {\n return false; // Handle null, undefined, or empty string\n }\n\n // 1. Trim whitespace from the input string\n let mainType = contentType.trim();\n\n // 2. Find the position of the first semicolon (if any) to remove parameters\n const semicolonIndex = mainType.indexOf(';');\n if (semicolonIndex !== -1) {\n // Extract the part before the semicolon and trim potential space\n mainType = mainType.substring(0, semicolonIndex).trim();\n }\n\n // 3. Convert the main type part to lowercase for case-insensitive comparison\n mainType = mainType.toLowerCase();\n\n // 4. Compare against the standard SSE MIME type\n return mainType === 'text/event-stream';\n}\n"],
|
|
5
|
+
"mappings": "AAAO,SAAS,uBACd,aACS;AACT,SAAO,gBAAgB;AACzB;AAEO,SAAS,oBAAoB,YAAsC;AACxE,MAAI,OAAO,eAAe,UAAU;AAClC,UAAM,cAAc,CAAC,WAAW,MAAM,GAAG,CAAC;AAC1C,UAAM,SAAS,OAAO,UAAU;AAChC,WAAQ,UAAU,OAAO,SAAS,OAAS,UAAU,KAAK,eAAe;AAAA,EAC3E;AACA,eAAa,OAAO,UAAU;AAC9B,SAAO,cAAc,OAAO,aAAa;AAC3C;AAEO,SAAS,kBAAkB,YAAsC;AACtE,MAAI,OAAO,eAAe,UAAU;AAClC,UAAM,cAAc,CAAC,WAAW,MAAM,GAAG,CAAC;AAC1C,UAAM,SAAS,OAAO,UAAU;AAChC,WACE,SAAS,OACT,UAAU,OACV,eAAe,KACf,gBAAgB,KAChB,gBAAgB;AAAA,EAEpB;AACA,eAAa,OAAO,UAAU;AAC9B,SAAO,aAAa,OAAO,cAAc;AAC3C;AAEO,SAAS,qBAAqB,aAAwC;AAC3E,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAGA,MAAI,WAAW,YAAY,KAAK;AAGhC,QAAM,iBAAiB,SAAS,QAAQ,GAAG;AAC3C,MAAI,mBAAmB,IAAI;AACzB,eAAW,SAAS,UAAU,GAAG,cAAc,EAAE,KAAK;AAAA,EACxD;AAGA,aAAW,SAAS,YAAY;AAEhC,MAAI,SAAS,SAAS,OAAO,GAAG;AAC9B,WAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,EAC9B,WAAW,SAAS,SAAS,OAAO,GAAG;AACrC,WAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,EAC9B;AACA,SAAO;AACT;AAEO,SAAS,kBACd,aACS;AACT,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAGA,MAAI,WAAW,YAAY,KAAK;AAEhC,QAAM,iBAAiB,SAAS,QAAQ,GAAG;AAC3C,MAAI,mBAAmB,IAAI;AAEzB,eAAW,SAAS,UAAU,GAAG,cAAc,EAAE,KAAK;AAAA,EACxD;AAEA,aAAW,SAAS,YAAY;AAEhC,SAAO,SAAS,WAAW,OAAO;AACpC;AASO,SAAS,iBACd,aACS;AACT,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAGA,MAAI,WAAW,YAAY,KAAK;AAGhC,QAAM,iBAAiB,SAAS,QAAQ,GAAG;AAC3C,MAAI,mBAAmB,IAAI;AAEzB,eAAW,SAAS,UAAU,GAAG,cAAc,EAAE,KAAK;AAAA,EACxD;AAGA,aAAW,SAAS,YAAY;AAGhC,SAAO,aAAa;AACtB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { loadLocal } from "./local-loader.js";
|
|
2
|
+
import { convertPostmanToOpenAPI } from "./postman/postman-converter.js";
|
|
3
|
+
import { loadRemote } from "./remote-loader.js";
|
|
4
|
+
function isPostman(content) {
|
|
5
|
+
return typeof content === "object" && content !== null && "info" in content && typeof content.info === "object" && content.info !== null && "item" in content && Array.isArray(content.item) && "schema" in content.info && typeof content.info.schema === "string" && content.info.schema.includes("//schema.getpostman.com/");
|
|
6
|
+
}
|
|
7
|
+
async function loadSpec(location) {
|
|
8
|
+
let content = await loadFile(location);
|
|
9
|
+
if (isPostman(content)) {
|
|
10
|
+
content = convertPostmanToOpenAPI(content);
|
|
11
|
+
}
|
|
12
|
+
return content;
|
|
13
|
+
}
|
|
14
|
+
function loadFile(location) {
|
|
15
|
+
const [protocol] = location.split(":");
|
|
16
|
+
if (protocol === "http" || protocol === "https") {
|
|
17
|
+
return loadRemote(location);
|
|
18
|
+
}
|
|
19
|
+
return loadLocal(location);
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
loadFile,
|
|
23
|
+
loadSpec
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=load-spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lib/loaders/load-spec.ts"],
|
|
4
|
+
"sourcesContent": ["import type { OpenAPIObject } from 'openapi3-ts/oas31';\n\nimport { loadLocal } from './local-loader.js';\nimport { convertPostmanToOpenAPI } from './postman/postman-converter.js';\nimport type { PostmanCollection } from './postman/spec-types.js';\nimport { loadRemote } from './remote-loader.js';\n\nfunction isPostman(content: unknown): content is PostmanCollection {\n return (\n typeof content === 'object' &&\n content !== null &&\n 'info' in content &&\n typeof content.info === 'object' &&\n content.info !== null &&\n 'item' in content &&\n Array.isArray(content.item) &&\n 'schema' in content.info &&\n typeof content.info.schema === 'string' &&\n content.info.schema.includes('//schema.getpostman.com/')\n );\n}\nexport async function loadSpec(location: string): Promise<OpenAPIObject> {\n let content = await loadFile(location);\n if (isPostman(content)) {\n content = convertPostmanToOpenAPI(content);\n }\n return content as OpenAPIObject;\n}\n\nexport function loadFile<T>(location: string): Promise<T> {\n const [protocol] = location.split(':');\n if (protocol === 'http' || protocol === 'https') {\n return loadRemote(location);\n }\n return loadLocal(location);\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,iBAAiB;AAC1B,SAAS,+BAA+B;AAExC,SAAS,kBAAkB;AAE3B,SAAS,UAAU,SAAgD;AACjE,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,UAAU,WACV,OAAO,QAAQ,SAAS,YACxB,QAAQ,SAAS,QACjB,UAAU,WACV,MAAM,QAAQ,QAAQ,IAAI,KAC1B,YAAY,QAAQ,QACpB,OAAO,QAAQ,KAAK,WAAW,YAC/B,QAAQ,KAAK,OAAO,SAAS,0BAA0B;AAE3D;AACA,eAAsB,SAAS,UAA0C;AACvE,MAAI,UAAU,MAAM,SAAS,QAAQ;AACrC,MAAI,UAAU,OAAO,GAAG;AACtB,cAAU,wBAAwB,OAAO;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,SAAS,SAAY,UAA8B;AACxD,QAAM,CAAC,QAAQ,IAAI,SAAS,MAAM,GAAG;AACrC,MAAI,aAAa,UAAU,aAAa,SAAS;AAC/C,WAAO,WAAW,QAAQ;AAAA,EAC5B;AACA,SAAO,UAAU,QAAQ;AAC3B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { extname } from "node:path";
|
|
3
|
+
import { parse } from "yaml";
|
|
4
|
+
async function loadLocal(location) {
|
|
5
|
+
const extName = extname(location);
|
|
6
|
+
const text = await readFile(location, "utf-8");
|
|
7
|
+
switch (extName) {
|
|
8
|
+
case ".json":
|
|
9
|
+
return JSON.parse(text);
|
|
10
|
+
case ".yaml":
|
|
11
|
+
case ".yml":
|
|
12
|
+
return parse(text);
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Unsupported file extension: ${extName}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
loadLocal
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=local-loader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lib/loaders/local-loader.ts"],
|
|
4
|
+
"sourcesContent": ["import { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport { parse } from 'yaml';\n\nexport async function loadLocal(location: string) {\n const extName = extname(location);\n const text = await readFile(location, 'utf-8');\n switch (extName) {\n case '.json':\n return JSON.parse(text);\n case '.yaml':\n case '.yml':\n return parse(text);\n default:\n throw new Error(`Unsupported file extension: ${extName}`);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,aAAa;AAEtB,eAAsB,UAAU,UAAkB;AAChD,QAAM,UAAU,QAAQ,QAAQ;AAChC,QAAM,OAAO,MAAM,SAAS,UAAU,OAAO;AAC7C,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,MAAM,IAAI;AAAA,IACnB;AACE,YAAM,IAAI,MAAM,+BAA+B,OAAO,EAAE;AAAA,EAC5D;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|