@sdk-it/core 0.20.0 → 0.21.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 +1 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -40
- package/dist/index.js.map +2 -2
- package/dist/lib/file-system.d.ts +23 -5
- package/dist/lib/file-system.d.ts.map +1 -1
- package/dist/lib/file-system.js +44 -21
- package/dist/lib/file-system.js.map +3 -3
- package/dist/lib/ref.d.ts +3 -2
- package/dist/lib/ref.d.ts.map +1 -1
- package/dist/lib/ref.js +47 -0
- package/dist/lib/ref.js.map +2 -2
- package/dist/lib/utils.d.ts +14 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +41 -0
- package/dist/lib/utils.js.map +7 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
import type ts from 'typescript';
|
|
2
|
-
import type { TypeDeriver } from './lib/deriver.ts';
|
|
3
|
-
import type { ResponseItem } from './lib/paths.ts';
|
|
4
1
|
export * from './lib/deriver.js';
|
|
5
2
|
export * from './lib/paths.js';
|
|
6
3
|
export * from './lib/program.js';
|
|
7
4
|
export * from './lib/ref.js';
|
|
8
|
-
export
|
|
9
|
-
export type InferRecordValue<T> = T extends Record<string, infer U> ? U : any;
|
|
10
|
-
export declare function toLitObject<T extends Record<string, any>>(obj: T, accessor?: (value: InferRecordValue<T>) => string): string;
|
|
11
|
-
export type NaunceResponseAnalyzerFn = (handler: ts.ArrowFunction, deriver: TypeDeriver, node: ts.Node) => ResponseItem[];
|
|
12
|
-
export type NaunceResponseAnalyzer = Record<string, NaunceResponseAnalyzerFn>;
|
|
13
|
-
export type ResponseAnalyzerFn = (handler: ts.ArrowFunction, deriver: TypeDeriver) => ResponseItem[];
|
|
14
|
-
export declare function isEmpty(value: unknown): value is null | undefined | '';
|
|
15
|
-
export declare function pascalcase(value: string): string;
|
|
16
|
-
export declare function spinalcase(value: string): string;
|
|
17
|
-
export declare function snakecase(value: string): string;
|
|
5
|
+
export * from './lib/utils.js';
|
|
18
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,45 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
pascalcase as _pascalcase,
|
|
3
|
-
snakecase as _snakecase,
|
|
4
|
-
spinalcase as _spinalcase
|
|
5
|
-
} from "stringcase";
|
|
6
1
|
export * from "./lib/deriver.js";
|
|
7
2
|
export * from "./lib/paths.js";
|
|
8
3
|
export * from "./lib/program.js";
|
|
9
4
|
export * from "./lib/ref.js";
|
|
10
|
-
|
|
11
|
-
return [...new Map(data.map((x) => [accessor(x), x])).values()];
|
|
12
|
-
}
|
|
13
|
-
function toLitObject(obj, accessor = (value) => value) {
|
|
14
|
-
return `{${Object.keys(obj).map((key) => `${key}: ${accessor(obj[key])}`).join(", ")}}`;
|
|
15
|
-
}
|
|
16
|
-
function isEmpty(value) {
|
|
17
|
-
if (value === null || value === void 0 || value === "") {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
if (Array.isArray(value) && value.length === 0) {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
if (typeof value === "object" && Object.keys(value).length === 0) {
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
function pascalcase(value) {
|
|
29
|
-
return _pascalcase(value.split("/").join(" "));
|
|
30
|
-
}
|
|
31
|
-
function spinalcase(value) {
|
|
32
|
-
return _spinalcase(value.split("/").join(" "));
|
|
33
|
-
}
|
|
34
|
-
function snakecase(value) {
|
|
35
|
-
return _snakecase(value.split("/").join(" "));
|
|
36
|
-
}
|
|
37
|
-
export {
|
|
38
|
-
isEmpty,
|
|
39
|
-
pascalcase,
|
|
40
|
-
removeDuplicates,
|
|
41
|
-
snakecase,
|
|
42
|
-
spinalcase,
|
|
43
|
-
toLitObject
|
|
44
|
-
};
|
|
5
|
+
export * from "./lib/utils.js";
|
|
45
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["\nexport * from './lib/deriver.js';\nexport * from './lib/paths.js';\nexport * from './lib/program.js';\nexport * from './lib/ref.js';\nexport * from './lib/utils.js';\n"],
|
|
5
|
+
"mappings": "AACA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
|
-
import type { Dirent } from 'node:fs';
|
|
2
1
|
export declare function getFile(filePath: string): Promise<string | null>;
|
|
3
2
|
export declare function exist(file: string): Promise<boolean>;
|
|
4
|
-
export declare function readFolder(path: string): Promise<string[]>;
|
|
3
|
+
export declare function readFolder(path: string, recursive?: boolean): Promise<string[]>;
|
|
5
4
|
export type WriteContent = Record<string, null | string | {
|
|
6
5
|
content: string;
|
|
7
6
|
ignoreIfExists?: boolean;
|
|
8
7
|
}>;
|
|
8
|
+
export type ReadFolderFn = (folder: string) => Promise<{
|
|
9
|
+
filePath: string;
|
|
10
|
+
fileName: string;
|
|
11
|
+
isFolder: boolean;
|
|
12
|
+
}[]>;
|
|
13
|
+
export type Writer = (dir: string, contents: WriteContent) => Promise<void>;
|
|
9
14
|
export declare function writeFiles(dir: string, contents: WriteContent): Promise<void>;
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated use getFolderExportsV2 instead
|
|
17
|
+
*/
|
|
18
|
+
export declare function getFolderExports(folder: string, readFolder: ReadFolderFn, includeExtension?: boolean, extensions?: string[], ignore?: (config: {
|
|
19
|
+
filePath: string;
|
|
20
|
+
fileName: string;
|
|
21
|
+
isFolder: boolean;
|
|
22
|
+
}) => boolean): Promise<string>;
|
|
23
|
+
export declare function getFolderExportsV2(folder: string, readFolder: ReadFolderFn, options?: {
|
|
12
24
|
includeExtension?: boolean;
|
|
13
25
|
extensions: string;
|
|
14
|
-
ignore?: (
|
|
26
|
+
ignore?: (fileInfo: {
|
|
27
|
+
filePath: string;
|
|
28
|
+
fileName: string;
|
|
29
|
+
isFolder: boolean;
|
|
30
|
+
}) => boolean;
|
|
15
31
|
exportSyntax: string;
|
|
16
32
|
}): Promise<string>;
|
|
17
33
|
export declare const getExt: (fileName?: string) => string;
|
|
34
|
+
export declare function addLeadingSlash(path: string): string;
|
|
35
|
+
export declare function removeTrialingSlashes(path: string, keepLastOne?: boolean): string;
|
|
18
36
|
//# sourceMappingURL=file-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/lib/file-system.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/lib/file-system.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,0BAK7C;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI1D;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,UAAQ,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAC/B,MAAM,EACN,IAAI,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAC9D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,CAAC;AAC1E,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,iBAqBnE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,gBAAgB,UAAO,EACvB,UAAU,WAAS,EACnB,MAAM,GAAE,CAAC,MAAM,EAAE;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,KAAK,OAAqB,mBAwB5B;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,OAAO,GAAE;IACP,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;KACnB,KAAK,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CAMtB,mBA8BF;AAED,eAAO,MAAM,MAAM,GAAI,WAAW,MAAM,WAkBvC,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,UAE3C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,UAAQ,UAKtE"}
|
package/dist/lib/file-system.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, extname, isAbsolute, join } from "node:path";
|
|
2
|
+
import { dirname, extname, isAbsolute, join, normalize } from "node:path";
|
|
3
3
|
async function getFile(filePath) {
|
|
4
4
|
if (await exist(filePath)) {
|
|
5
5
|
return readFile(filePath, "utf-8");
|
|
@@ -9,11 +9,25 @@ async function getFile(filePath) {
|
|
|
9
9
|
async function exist(file) {
|
|
10
10
|
return stat(file).then(() => true).catch(() => false);
|
|
11
11
|
}
|
|
12
|
-
async function readFolder(path) {
|
|
13
|
-
if (await exist(path)) {
|
|
14
|
-
return
|
|
12
|
+
async function readFolder(path, recursive = false) {
|
|
13
|
+
if (!await exist(path)) {
|
|
14
|
+
return [];
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
const entries = await readdir(path, { withFileTypes: true });
|
|
17
|
+
const results = [];
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
if (entry.isDirectory()) {
|
|
20
|
+
if (recursive) {
|
|
21
|
+
const subFiles = await readFolder(join(path, entry.name), true);
|
|
22
|
+
for (const sub of subFiles) {
|
|
23
|
+
results.push(`${entry.name}/${sub}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
results.push(entry.name);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return results;
|
|
17
31
|
}
|
|
18
32
|
async function writeFiles(dir, contents) {
|
|
19
33
|
await Promise.all(
|
|
@@ -37,28 +51,28 @@ async function writeFiles(dir, contents) {
|
|
|
37
51
|
})
|
|
38
52
|
);
|
|
39
53
|
}
|
|
40
|
-
async function getFolderExports(folder, includeExtension = true, extensions = ["ts"], ignore = () => false) {
|
|
41
|
-
const files = await
|
|
54
|
+
async function getFolderExports(folder, readFolder2, includeExtension = true, extensions = ["ts"], ignore = () => false) {
|
|
55
|
+
const files = await readFolder2(folder);
|
|
42
56
|
const exports = [];
|
|
43
57
|
for (const file of files) {
|
|
44
58
|
if (ignore(file)) {
|
|
45
59
|
continue;
|
|
46
60
|
}
|
|
47
|
-
if (file.
|
|
48
|
-
if (await exist(`${file.
|
|
61
|
+
if (file.isFolder) {
|
|
62
|
+
if (await exist(`${file.filePath}/index.ts`)) {
|
|
49
63
|
exports.push(
|
|
50
|
-
`export * from './${file.
|
|
64
|
+
`export * from './${file.fileName}/index${includeExtension ? ".ts" : ""}';`
|
|
51
65
|
);
|
|
52
66
|
}
|
|
53
|
-
} else if (file.
|
|
67
|
+
} else if (file.fileName !== "index.ts" && extensions.includes(getExt(file.fileName))) {
|
|
54
68
|
exports.push(
|
|
55
|
-
`export * from './${includeExtension ? file.
|
|
69
|
+
`export * from './${includeExtension ? file.fileName : file.fileName.replace(extname(file.fileName), "")}';`
|
|
56
70
|
);
|
|
57
71
|
}
|
|
58
72
|
}
|
|
59
73
|
return exports.join("\n");
|
|
60
74
|
}
|
|
61
|
-
async function getFolderExportsV2(folder, options = {
|
|
75
|
+
async function getFolderExportsV2(folder, readFolder2, options = {
|
|
62
76
|
extensions: "ts",
|
|
63
77
|
ignore: () => false,
|
|
64
78
|
includeExtension: true,
|
|
@@ -68,23 +82,21 @@ async function getFolderExportsV2(folder, options = {
|
|
|
68
82
|
if (!await exist(folder)) {
|
|
69
83
|
return "";
|
|
70
84
|
}
|
|
71
|
-
const files = await
|
|
85
|
+
const files = await readFolder2(folder);
|
|
72
86
|
const exports = [];
|
|
73
87
|
for (const file of files) {
|
|
74
88
|
if (options.ignore?.(file)) {
|
|
75
89
|
continue;
|
|
76
90
|
}
|
|
77
|
-
if (file.
|
|
78
|
-
if (await exist(
|
|
79
|
-
`${file.parentPath}/${file.name}/index.${options.extensions}`
|
|
80
|
-
)) {
|
|
91
|
+
if (file.isFolder) {
|
|
92
|
+
if (await exist(`${file.filePath}/index.${options.extensions}`)) {
|
|
81
93
|
exports.push(
|
|
82
|
-
`${options.exportSyntax} './${file.
|
|
94
|
+
`${options.exportSyntax} './${file.fileName}/index${options.includeExtension ? `.${options.extensions}` : ""}';`
|
|
83
95
|
);
|
|
84
96
|
}
|
|
85
|
-
} else if (file.
|
|
97
|
+
} else if (file.fileName !== `index.${options.extensions}` && options.extensions.includes(getExt(file.fileName))) {
|
|
86
98
|
exports.push(
|
|
87
|
-
`${options.exportSyntax} './${options.includeExtension ? file.
|
|
99
|
+
`${options.exportSyntax} './${options.includeExtension ? file.fileName : file.fileName.replace(extname(file.fileName), "")}';`
|
|
88
100
|
);
|
|
89
101
|
}
|
|
90
102
|
}
|
|
@@ -104,13 +116,24 @@ const getExt = (fileName) => {
|
|
|
104
116
|
}
|
|
105
117
|
return ext || "txt";
|
|
106
118
|
};
|
|
119
|
+
function addLeadingSlash(path) {
|
|
120
|
+
return normalize(join("/", path));
|
|
121
|
+
}
|
|
122
|
+
function removeTrialingSlashes(path, keepLastOne = false) {
|
|
123
|
+
while (path.endsWith("/")) {
|
|
124
|
+
path = path.slice(0, -1);
|
|
125
|
+
}
|
|
126
|
+
return path + (keepLastOne ? "/" : "");
|
|
127
|
+
}
|
|
107
128
|
export {
|
|
129
|
+
addLeadingSlash,
|
|
108
130
|
exist,
|
|
109
131
|
getExt,
|
|
110
132
|
getFile,
|
|
111
133
|
getFolderExports,
|
|
112
134
|
getFolderExportsV2,
|
|
113
135
|
readFolder,
|
|
136
|
+
removeTrialingSlashes,
|
|
114
137
|
writeFiles
|
|
115
138
|
};
|
|
116
139
|
//# sourceMappingURL=file-system.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/file-system.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { mkdir, readFile, readdir, stat, writeFile } from 'node:fs/promises';\nimport { dirname, extname, isAbsolute, join, normalize } from 'node:path';\n\nexport async function getFile(filePath: string) {\n if (await exist(filePath)) {\n return readFile(filePath, 'utf-8');\n }\n return null;\n}\n\nexport async function exist(file: string): Promise<boolean> {\n return stat(file)\n .then(() => true)\n .catch(() => false);\n}\n\nexport async function readFolder(\n path: string,\n recursive = false,\n): Promise<string[]> {\n if (!(await exist(path))) {\n return [];\n }\n const entries = await readdir(path, { withFileTypes: true });\n const results: string[] = [];\n for (const entry of entries) {\n if (entry.isDirectory()) {\n if (recursive) {\n const subFiles = await readFolder(join(path, entry.name), true);\n for (const sub of subFiles) {\n results.push(`${entry.name}/${sub}`);\n }\n }\n } else {\n results.push(entry.name);\n }\n }\n return results;\n}\n\nexport type WriteContent = Record<\n string,\n null | string | { content: string; ignoreIfExists?: boolean }\n>;\n\nexport type ReadFolderFn = (\n folder: string,\n) => Promise<{ filePath: string; fileName: string; isFolder: boolean }[]>;\nexport type Writer = (dir: string, contents: WriteContent) => Promise<void>;\n\nexport async function writeFiles(dir: string, contents: WriteContent) {\n await Promise.all(\n Object.entries(contents).map(async ([file, content]) => {\n if (content === null) {\n return;\n }\n const filePath = isAbsolute(file) ? file : join(dir, file);\n await mkdir(dirname(filePath), { recursive: true });\n if (typeof content === 'string') {\n await writeFile(filePath, content, 'utf-8');\n } else {\n if (content.ignoreIfExists) {\n if (!(await exist(filePath))) {\n await writeFile(filePath, content.content, 'utf-8');\n }\n } else {\n await writeFile(filePath, content.content, 'utf-8');\n }\n }\n }),\n );\n}\n\n/**\n * @deprecated use getFolderExportsV2 instead\n */\nexport async function getFolderExports(\n folder: string,\n readFolder: ReadFolderFn,\n includeExtension = true,\n extensions = ['ts'],\n ignore: (config: {\n filePath: string;\n fileName: string;\n isFolder: boolean;\n }) => boolean = () => false,\n) {\n const files = await readFolder(folder);\n const exports: string[] = [];\n for (const file of files) {\n if (ignore(file)) {\n continue;\n }\n if (file.isFolder) {\n if (await exist(`${file.filePath}/index.ts`)) {\n exports.push(\n `export * from './${file.fileName}/index${includeExtension ? '.ts' : ''}';`,\n );\n }\n } else if (\n file.fileName !== 'index.ts' &&\n extensions.includes(getExt(file.fileName))\n ) {\n exports.push(\n `export * from './${includeExtension ? file.fileName : file.fileName.replace(extname(file.fileName), '')}';`,\n );\n }\n }\n return exports.join('\\n');\n}\n\nexport async function getFolderExportsV2(\n folder: string,\n readFolder: ReadFolderFn,\n options: {\n includeExtension?: boolean;\n extensions: string;\n ignore?: (fileInfo: {\n filePath: string;\n fileName: string;\n isFolder: boolean;\n }) => boolean;\n exportSyntax: string;\n } = {\n extensions: 'ts',\n ignore: () => false,\n includeExtension: true,\n exportSyntax: 'export * from ',\n },\n) {\n options.includeExtension ??= true;\n if (!(await exist(folder))) {\n return '';\n }\n const files = await readFolder(folder);\n const exports: string[] = [];\n for (const file of files) {\n if (options.ignore?.(file)) {\n continue;\n }\n if (file.isFolder) {\n if (await exist(`${file.filePath}/index.${options.extensions}`)) {\n exports.push(\n `${options.exportSyntax} './${file.fileName}/index${\n options.includeExtension ? `.${options.extensions}` : ''\n }';`,\n );\n }\n } else if (\n file.fileName !== `index.${options.extensions}` &&\n options.extensions.includes(getExt(file.fileName))\n ) {\n exports.push(\n `${options.exportSyntax} './${options.includeExtension ? file.fileName : file.fileName.replace(extname(file.fileName), '')}';`,\n );\n }\n }\n return exports.join('\\n');\n}\n\nexport const getExt = (fileName?: string) => {\n if (!fileName) {\n return ''; // shouldn't happen as there will always be a file name\n }\n const lastDot = fileName.lastIndexOf('.');\n if (lastDot === -1) {\n return '';\n }\n const ext = fileName\n .slice(lastDot + 1)\n .split('/')\n .filter(Boolean)\n .join('');\n if (ext === fileName) {\n // files that have no extension\n return '';\n }\n return ext || 'txt';\n};\n\nexport function addLeadingSlash(path: string) {\n return normalize(join('/', path));\n}\n\nexport function removeTrialingSlashes(path: string, keepLastOne = false) {\n while (path.endsWith('/')) {\n path = path.slice(0, -1);\n }\n return path + (keepLastOne ? '/' : '');\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["readFolder"]
|
|
7
7
|
}
|
package/dist/lib/ref.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OpenAPIObject, ParameterObject, ReferenceObject, RequestBodyObject, SchemaObject } from 'openapi3-ts/oas31';
|
|
1
|
+
import type { HeaderObject, OpenAPIObject, ParameterObject, ReferenceObject, RequestBodyObject, SchemaObject } from 'openapi3-ts/oas31';
|
|
2
2
|
export declare function isRef(obj: any): obj is ReferenceObject;
|
|
3
3
|
export declare function notRef(obj: any): obj is SchemaObject;
|
|
4
4
|
export declare function cleanRef(ref: string): string;
|
|
@@ -7,5 +7,6 @@ export declare function parseRef(ref: string): {
|
|
|
7
7
|
namespace: string;
|
|
8
8
|
path: string;
|
|
9
9
|
};
|
|
10
|
-
export declare function followRef<T extends SchemaObject | ParameterObject | RequestBodyObject = SchemaObject>(spec: OpenAPIObject, ref: string): T;
|
|
10
|
+
export declare function followRef<T extends SchemaObject | HeaderObject | ParameterObject | ReferenceObject | RequestBodyObject = SchemaObject>(spec: OpenAPIObject, ref: string): T;
|
|
11
|
+
export declare function distillRef<T extends SchemaObject | HeaderObject | ParameterObject | ReferenceObject | RequestBodyObject = SchemaObject>(spec: OpenAPIObject, ref: string): T;
|
|
11
12
|
//# sourceMappingURL=ref.d.ts.map
|
package/dist/lib/ref.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/lib/ref.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/lib/ref.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,eAAe,CAEtD;AACD,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,YAAY,CAEpD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,UAEnC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM;;;;EASnC;AACD,wBAAgB,SAAS,CACvB,CAAC,SACG,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,eAAe,GACf,iBAAiB,GAAG,YAAY,EACpC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAOrC;AACD,wBAAgB,UAAU,CACxB,CAAC,SACG,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,eAAe,GACf,iBAAiB,GAAG,YAAY,EACpC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CA8CrC"}
|
package/dist/lib/ref.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { get } from "lodash-es";
|
|
2
|
+
import { isEmpty } from "./utils.js";
|
|
2
3
|
function isRef(obj) {
|
|
3
4
|
return obj && "$ref" in obj;
|
|
4
5
|
}
|
|
@@ -26,8 +27,54 @@ function followRef(spec, ref) {
|
|
|
26
27
|
}
|
|
27
28
|
return entry;
|
|
28
29
|
}
|
|
30
|
+
function distillRef(spec, ref) {
|
|
31
|
+
const def = followRef(spec, ref);
|
|
32
|
+
if (!def) {
|
|
33
|
+
return def;
|
|
34
|
+
}
|
|
35
|
+
if ("properties" in def) {
|
|
36
|
+
def.properties ??= {};
|
|
37
|
+
for (const key in def.properties) {
|
|
38
|
+
const prop = def.properties[key];
|
|
39
|
+
if (isRef(prop)) {
|
|
40
|
+
def.properties[key] = distillRef(spec, prop.$ref);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if ("items" in def) {
|
|
45
|
+
if (isRef(def.items)) {
|
|
46
|
+
def.items = distillRef(spec, def.items.$ref);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if ("allOf" in def && !isEmpty(def.allOf)) {
|
|
50
|
+
def.allOf = def.allOf.map((item) => {
|
|
51
|
+
if (isRef(item)) {
|
|
52
|
+
return distillRef(spec, item.$ref);
|
|
53
|
+
}
|
|
54
|
+
return item;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if ("oneOf" in def && !isEmpty(def.oneOf)) {
|
|
58
|
+
def.oneOf = def.oneOf.map((item) => {
|
|
59
|
+
if (isRef(item)) {
|
|
60
|
+
return distillRef(spec, item.$ref);
|
|
61
|
+
}
|
|
62
|
+
return item;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if ("anyOf" in def && !isEmpty(def.anyOf)) {
|
|
66
|
+
def.anyOf = def.anyOf.map((item) => {
|
|
67
|
+
if (isRef(item)) {
|
|
68
|
+
return distillRef(spec, item.$ref);
|
|
69
|
+
}
|
|
70
|
+
return item;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return def;
|
|
74
|
+
}
|
|
29
75
|
export {
|
|
30
76
|
cleanRef,
|
|
77
|
+
distillRef,
|
|
31
78
|
followRef,
|
|
32
79
|
isRef,
|
|
33
80
|
notRef,
|
package/dist/lib/ref.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/ref.ts"],
|
|
4
|
-
"sourcesContent": ["import { get } from 'lodash-es';\nimport type {\n OpenAPIObject,\n ParameterObject,\n ReferenceObject,\n RequestBodyObject,\n SchemaObject,\n} from 'openapi3-ts/oas31';\n\nexport function isRef(obj: any): obj is ReferenceObject {\n return obj && '$ref' in obj;\n}\nexport function notRef(obj: any): obj is SchemaObject {\n return !isRef(obj);\n}\n\nexport function cleanRef(ref: string) {\n return ref.replace(/^#\\//, '');\n}\n\nexport function parseRef(ref: string) {\n const parts = ref.split('/');\n const [model] = parts.splice(-1);\n const [namespace] = parts.splice(-1);\n return {\n model,\n namespace,\n path: cleanRef(parts.join('/')),\n };\n}\nexport function followRef<\n T extends SchemaObject | ParameterObject | RequestBodyObject = SchemaObject,\n>(spec: OpenAPIObject, ref: string): T {\n const pathParts = cleanRef(ref).split('/');\n const entry = get(spec, pathParts) as T | ReferenceObject;\n if (entry && '$ref' in entry) {\n return followRef<T>(spec, entry.$ref);\n }\n return entry;\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,WAAW;
|
|
4
|
+
"sourcesContent": ["import { get } from 'lodash-es';\nimport type {\n HeaderObject,\n OpenAPIObject,\n ParameterObject,\n ReferenceObject,\n RequestBodyObject,\n SchemaObject,\n} from 'openapi3-ts/oas31';\n\nimport { isEmpty } from './utils.js';\n\nexport function isRef(obj: any): obj is ReferenceObject {\n return obj && '$ref' in obj;\n}\nexport function notRef(obj: any): obj is SchemaObject {\n return !isRef(obj);\n}\n\nexport function cleanRef(ref: string) {\n return ref.replace(/^#\\//, '');\n}\n\nexport function parseRef(ref: string) {\n const parts = ref.split('/');\n const [model] = parts.splice(-1);\n const [namespace] = parts.splice(-1);\n return {\n model,\n namespace,\n path: cleanRef(parts.join('/')),\n };\n}\nexport function followRef<\n T extends\n | SchemaObject\n | HeaderObject\n | ParameterObject\n | ReferenceObject\n | RequestBodyObject = SchemaObject,\n>(spec: OpenAPIObject, ref: string): T {\n const pathParts = cleanRef(ref).split('/');\n const entry = get(spec, pathParts) as T | ReferenceObject;\n if (entry && '$ref' in entry) {\n return followRef<T>(spec, entry.$ref!);\n }\n return entry;\n}\nexport function distillRef<\n T extends\n | SchemaObject\n | HeaderObject\n | ParameterObject\n | ReferenceObject\n | RequestBodyObject = SchemaObject,\n>(spec: OpenAPIObject, ref: string): T {\n const def = followRef<T>(spec, ref);\n if (!def) {\n return def;\n }\n\n if ('properties' in def) {\n def.properties ??= {};\n for (const key in def.properties) {\n const prop = def.properties[key];\n if (isRef(prop)) {\n def.properties[key] = distillRef(spec, prop.$ref);\n }\n }\n }\n if ('items' in def) {\n if (isRef(def.items)) {\n def.items = distillRef<SchemaObject>(spec, def.items.$ref);\n }\n }\n if ('allOf' in def && !isEmpty(def.allOf)) {\n def.allOf = def.allOf.map((item) => {\n if (isRef(item)) {\n return distillRef<SchemaObject>(spec, item.$ref);\n }\n return item;\n });\n }\n if ('oneOf' in def && !isEmpty(def.oneOf)) {\n def.oneOf = def.oneOf.map((item) => {\n if (isRef(item)) {\n return distillRef<SchemaObject>(spec, item.$ref);\n }\n return item;\n });\n }\n if ('anyOf' in def && !isEmpty(def.anyOf)) {\n def.anyOf = def.anyOf.map((item) => {\n if (isRef(item)) {\n return distillRef<SchemaObject>(spec, item.$ref);\n }\n return item;\n });\n }\n\n return def;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,WAAW;AAUpB,SAAS,eAAe;AAEjB,SAAS,MAAM,KAAkC;AACtD,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,OAAO,KAA+B;AACpD,SAAO,CAAC,MAAM,GAAG;AACnB;AAEO,SAAS,SAAS,KAAa;AACpC,SAAO,IAAI,QAAQ,QAAQ,EAAE;AAC/B;AAEO,SAAS,SAAS,KAAa;AACpC,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,QAAM,CAAC,KAAK,IAAI,MAAM,OAAO,EAAE;AAC/B,QAAM,CAAC,SAAS,IAAI,MAAM,OAAO,EAAE;AACnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,GAAG,CAAC;AAAA,EAChC;AACF;AACO,SAAS,UAOd,MAAqB,KAAgB;AACrC,QAAM,YAAY,SAAS,GAAG,EAAE,MAAM,GAAG;AACzC,QAAM,QAAQ,IAAI,MAAM,SAAS;AACjC,MAAI,SAAS,UAAU,OAAO;AAC5B,WAAO,UAAa,MAAM,MAAM,IAAK;AAAA,EACvC;AACA,SAAO;AACT;AACO,SAAS,WAOd,MAAqB,KAAgB;AACrC,QAAM,MAAM,UAAa,MAAM,GAAG;AAClC,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,KAAK;AACvB,QAAI,eAAe,CAAC;AACpB,eAAW,OAAO,IAAI,YAAY;AAChC,YAAM,OAAO,IAAI,WAAW,GAAG;AAC/B,UAAI,MAAM,IAAI,GAAG;AACf,YAAI,WAAW,GAAG,IAAI,WAAW,MAAM,KAAK,IAAI;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AACA,MAAI,WAAW,KAAK;AAClB,QAAI,MAAM,IAAI,KAAK,GAAG;AACpB,UAAI,QAAQ,WAAyB,MAAM,IAAI,MAAM,IAAI;AAAA,IAC3D;AAAA,EACF;AACA,MAAI,WAAW,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG;AACzC,QAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS;AAClC,UAAI,MAAM,IAAI,GAAG;AACf,eAAO,WAAyB,MAAM,KAAK,IAAI;AAAA,MACjD;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,MAAI,WAAW,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG;AACzC,QAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS;AAClC,UAAI,MAAM,IAAI,GAAG;AACf,eAAO,WAAyB,MAAM,KAAK,IAAI;AAAA,MACjD;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACA,MAAI,WAAW,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG;AACzC,QAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,SAAS;AAClC,UAAI,MAAM,IAAI,GAAG;AACf,eAAO,WAAyB,MAAM,KAAK,IAAI;AAAA,MACjD;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { TypeDeriver } from './deriver';
|
|
3
|
+
import type { ResponseItem } from './paths';
|
|
4
|
+
export declare function removeDuplicates<T>(data: T[], accessor?: (item: T) => T[keyof T] | T): T[];
|
|
5
|
+
export type InferRecordValue<T> = T extends Record<string, infer U> ? U : any;
|
|
6
|
+
export declare function toLitObject<T extends Record<string, any>>(obj: T, accessor?: (value: InferRecordValue<T>) => string): string;
|
|
7
|
+
export type NaunceResponseAnalyzerFn = (handler: ts.ArrowFunction, deriver: TypeDeriver, node: ts.Node) => ResponseItem[];
|
|
8
|
+
export type NaunceResponseAnalyzer = Record<string, NaunceResponseAnalyzerFn>;
|
|
9
|
+
export type ResponseAnalyzerFn = (handler: ts.ArrowFunction, deriver: TypeDeriver) => ResponseItem[];
|
|
10
|
+
export declare function isEmpty(value: unknown): value is null | undefined | '';
|
|
11
|
+
export declare function pascalcase(value: string): string;
|
|
12
|
+
export declare function spinalcase(value: string): string;
|
|
13
|
+
export declare function snakecase(value: string): string;
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,CAAC,EAAE,EACT,QAAQ,GAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAkB,GACrD,CAAC,EAAE,CAEL;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE9E,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvD,GAAG,EAAE,CAAC,EACN,QAAQ,GAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,MAAyB,UAKpE;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,EAAE,CAAC,IAAI,KACV,YAAY,EAAE,CAAC;AACpB,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AAE9E,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,EAAE,CAAC,aAAa,EACzB,OAAO,EAAE,WAAW,KACjB,YAAY,EAAE,CAAC;AAEpB,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,SAAS,GAAG,EAAE,CAWtE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,UAEvC;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,UAEvC;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,UAEtC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
pascalcase as _pascalcase,
|
|
3
|
+
snakecase as _snakecase,
|
|
4
|
+
spinalcase as _spinalcase
|
|
5
|
+
} from "stringcase";
|
|
6
|
+
function removeDuplicates(data, accessor = (item) => item) {
|
|
7
|
+
return [...new Map(data.map((x) => [accessor(x), x])).values()];
|
|
8
|
+
}
|
|
9
|
+
function toLitObject(obj, accessor = (value) => value) {
|
|
10
|
+
return `{${Object.keys(obj).map((key) => `${key}: ${accessor(obj[key])}`).join(", ")}}`;
|
|
11
|
+
}
|
|
12
|
+
function isEmpty(value) {
|
|
13
|
+
if (value === null || value === void 0 || value === "") {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(value) && value.length === 0) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === "object" && Object.keys(value).length === 0) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
function pascalcase(value) {
|
|
25
|
+
return _pascalcase(value.split("/").join(" "));
|
|
26
|
+
}
|
|
27
|
+
function spinalcase(value) {
|
|
28
|
+
return _spinalcase(value.split("/").join(" "));
|
|
29
|
+
}
|
|
30
|
+
function snakecase(value) {
|
|
31
|
+
return _snakecase(value.split("/").join(" "));
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
isEmpty,
|
|
35
|
+
pascalcase,
|
|
36
|
+
removeDuplicates,
|
|
37
|
+
snakecase,
|
|
38
|
+
spinalcase,
|
|
39
|
+
toLitObject
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n pascalcase as _pascalcase,\n snakecase as _snakecase,\n spinalcase as _spinalcase,\n} from 'stringcase';\nimport type ts from 'typescript';\n\nimport type { TypeDeriver } from './deriver';\nimport type { ResponseItem } from './paths';\n\nexport function removeDuplicates<T>(\n data: T[],\n accessor: (item: T) => T[keyof T] | T = (item) => item,\n): T[] {\n return [...new Map(data.map((x) => [accessor(x), x])).values()];\n}\n\nexport type InferRecordValue<T> = T extends Record<string, infer U> ? U : any;\n\nexport function toLitObject<T extends Record<string, any>>(\n obj: T,\n accessor: (value: InferRecordValue<T>) => string = (value) => value,\n) {\n return `{${Object.keys(obj)\n .map((key) => `${key}: ${accessor(obj[key])}`)\n .join(', ')}}`;\n}\n\nexport type NaunceResponseAnalyzerFn = (\n handler: ts.ArrowFunction,\n deriver: TypeDeriver,\n node: ts.Node,\n) => ResponseItem[];\nexport type NaunceResponseAnalyzer = Record<string, NaunceResponseAnalyzerFn>;\n\nexport type ResponseAnalyzerFn = (\n handler: ts.ArrowFunction,\n deriver: TypeDeriver,\n) => ResponseItem[];\n\nexport function isEmpty(value: unknown): value is null | undefined | '' {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n if (Array.isArray(value) && value.length === 0) {\n return true;\n }\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return true;\n }\n return false;\n}\n\nexport function pascalcase(value: string) {\n return _pascalcase(value.split('/').join(' '));\n}\nexport function spinalcase(value: string) {\n return _spinalcase(value.split('/').join(' '));\n}\nexport function snakecase(value: string) {\n return _snakecase(value.split('/').join(' '));\n}\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE,cAAc;AAAA,EACd,aAAa;AAAA,EACb,cAAc;AAAA,OACT;AAMA,SAAS,iBACd,MACA,WAAwC,CAAC,SAAS,MAC7C;AACL,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAChE;AAIO,SAAS,YACd,KACA,WAAmD,CAAC,UAAU,OAC9D;AACA,SAAO,IAAI,OAAO,KAAK,GAAG,EACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,EAAE,EAC5C,KAAK,IAAI,CAAC;AACf;AAcO,SAAS,QAAQ,OAAgD;AACtE,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,IAAI;AACzD,WAAO;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG;AAC9C,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAChE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,WAAW,OAAe;AACxC,SAAO,YAAY,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AAC/C;AACO,SAAS,WAAW,OAAe;AACxC,SAAO,YAAY,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AAC/C;AACO,SAAS,UAAU,OAAe;AACvC,SAAO,WAAW,MAAM,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AAC9C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|