@nestia/sdk 12.0.0-dev.20260601.1 → 12.0.0-dev.20260612.2
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/LICENSE +21 -21
- package/README.md +93 -93
- package/assets/bundle/api/HttpError.ts +1 -1
- package/assets/bundle/api/IConnection.ts +1 -1
- package/assets/bundle/api/Primitive.ts +1 -1
- package/assets/bundle/api/Resolved.ts +1 -1
- package/assets/bundle/api/index.ts +4 -4
- package/assets/bundle/api/module.ts +6 -6
- package/assets/bundle/distribute/README.md +37 -37
- package/assets/bundle/distribute/package.json +28 -28
- package/assets/bundle/distribute/tsconfig.json +109 -109
- package/assets/bundle/e2e/index.ts +42 -42
- package/assets/config/nestia.config.ts +97 -97
- package/lib/NestiaSdkApplication.js +29 -7
- package/lib/NestiaSdkApplication.js.map +1 -1
- package/lib/NestiaSwaggerComposer.js +21 -13
- package/lib/NestiaSwaggerComposer.js.map +1 -1
- package/lib/analyses/AccessorAnalyzer.d.ts +4 -1
- package/lib/analyses/AccessorAnalyzer.js.map +1 -1
- package/lib/analyses/ConfigAnalyzer.js +1 -1
- package/lib/analyses/PathAnalyzer.d.ts +18 -3
- package/lib/analyses/PathAnalyzer.js +32 -0
- package/lib/analyses/PathAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectControllerAnalyzer.js +3 -2
- package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +1 -1
- package/lib/analyses/ReflectHttpOperationAnalyzer.js +1 -1
- package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +1 -1
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +53 -20
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +14 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js +79 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js.map +1 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.d.ts +9 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.js +31 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.js.map +1 -0
- package/lib/executable/internal/NestiaConfigLoader.js +5 -1
- package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
- package/lib/executable/internal/NestiaSdkCommand.js +30 -14
- package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
- package/lib/executable/internal/NestiaSdkWatcher.d.ts +10 -0
- package/lib/executable/internal/NestiaSdkWatcher.js +322 -0
- package/lib/executable/internal/NestiaSdkWatcher.js.map +1 -0
- package/lib/executable/sdk.js +12 -12
- package/lib/executable/sdk.js.map +1 -1
- package/lib/generates/CloneGenerator.js +4 -2
- package/lib/generates/CloneGenerator.js.map +1 -1
- package/lib/generates/SdkGenerator.js +50 -1
- package/lib/generates/SdkGenerator.js.map +1 -1
- package/lib/generates/SwaggerGenerator.js +18 -2
- package/lib/generates/SwaggerGenerator.js.map +1 -1
- package/lib/generates/internal/E2eFileProgrammer.js +3 -1
- package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
- package/lib/generates/internal/ImportDictionary.d.ts +1 -0
- package/lib/generates/internal/ImportDictionary.js +9 -4
- package/lib/generates/internal/ImportDictionary.js.map +1 -1
- package/lib/generates/internal/SdkAliasCollection.d.ts +2 -0
- package/lib/generates/internal/SdkAliasCollection.js +11 -2
- package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
- package/lib/generates/internal/SdkDistributionComposer.d.ts +1 -0
- package/lib/generates/internal/SdkDistributionComposer.js +3 -0
- package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
- package/lib/generates/internal/SdkFileProgrammer.js +4 -1
- package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpCloneReferencer.d.ts +1 -1
- package/lib/generates/internal/SdkHttpCloneReferencer.js +42 -9
- package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
- package/lib/generates/internal/SdkHttpFunctionProgrammer.js +3 -4
- package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +2 -1
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpSimulationProgrammer.js +6 -3
- package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkMcpRouteProgrammer.d.ts +15 -0
- package/lib/generates/internal/SdkMcpRouteProgrammer.js +148 -0
- package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -0
- package/lib/generates/internal/SdkRouteDirectory.d.ts +2 -1
- package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.d.ts +6 -0
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.js +283 -0
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.js.map +1 -0
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +11 -9
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationParameterComposer.js +10 -2
- package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +1 -1
- package/lib/generates/internal/SwaggerOperationResponseComposer.js +6 -1
- package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.d.ts +9 -0
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.js +174 -0
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.js.map +1 -0
- package/lib/structures/INestiaSdkInput.d.ts +9 -2
- package/lib/structures/IReflectController.d.ts +2 -1
- package/lib/structures/IReflectHttpOperationSuccess.d.ts +4 -2
- package/lib/structures/IReflectMcpOperation.d.ts +35 -0
- package/lib/structures/IReflectMcpOperation.js +3 -0
- package/lib/structures/IReflectMcpOperation.js.map +1 -0
- package/lib/structures/IReflectMcpOperationParameter.d.ts +19 -0
- package/lib/structures/IReflectMcpOperationParameter.js +3 -0
- package/lib/structures/IReflectMcpOperationParameter.js.map +1 -0
- package/lib/structures/ITypedApplication.d.ts +2 -1
- package/lib/structures/ITypedHttpRouteSuccess.d.ts +3 -1
- package/lib/structures/ITypedMcpRoute.d.ts +31 -0
- package/lib/structures/ITypedMcpRoute.js +3 -0
- package/lib/structures/ITypedMcpRoute.js.map +1 -0
- package/lib/utils/HttpResponseContentTypeUtil.d.ts +5 -0
- package/lib/utils/HttpResponseContentTypeUtil.js +22 -0
- package/lib/utils/HttpResponseContentTypeUtil.js.map +1 -0
- package/native/go.mod +52 -52
- package/native/go.sum +84 -54
- package/native/sdk/register.go +322 -165
- package/native/sdk/sdk.go +17 -17
- package/native/sdk/sdk_metadata_json.go +327 -327
- package/native/sdk/sdk_transform.go +1879 -1549
- package/package.json +11 -9
- package/src/INestiaConfig.ts +267 -267
- package/src/NestiaSdkApplication.ts +39 -8
- package/src/NestiaSwaggerComposer.ts +153 -142
- package/src/analyses/AccessorAnalyzer.ts +64 -67
- package/src/analyses/ConfigAnalyzer.ts +330 -330
- package/src/analyses/ImportAnalyzer.ts +92 -92
- package/src/analyses/PathAnalyzer.ts +130 -69
- package/src/analyses/ReflectControllerAnalyzer.ts +112 -105
- package/src/analyses/ReflectHttpOperationAnalyzer.ts +183 -183
- package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +90 -90
- package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +350 -350
- package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +163 -130
- package/src/analyses/ReflectMcpOperationAnalyzer.ts +124 -0
- package/src/analyses/ReflectMetadataAnalyzer.ts +44 -44
- package/src/analyses/SecurityAnalyzer.ts +25 -25
- package/src/analyses/TypedMcpRouteAnalyzer.ts +34 -0
- package/src/decorators/OperationMetadata.ts +29 -29
- package/src/executable/internal/CommandParser.ts +15 -15
- package/src/executable/internal/NestiaConfigLoader.ts +451 -446
- package/src/executable/internal/NestiaSdkCommand.ts +124 -106
- package/src/executable/internal/NestiaSdkWatcher.ts +342 -0
- package/src/executable/sdk.ts +90 -88
- package/src/generates/CloneGenerator.ts +73 -66
- package/src/generates/E2eGenerator.ts +32 -32
- package/src/generates/SdkGenerator.ts +176 -118
- package/src/generates/SwaggerGenerator.ts +342 -310
- package/src/generates/internal/E2eFileProgrammer.ts +240 -233
- package/src/generates/internal/FilePrinter.ts +65 -65
- package/src/generates/internal/ImportDictionary.ts +209 -204
- package/src/generates/internal/SdkAliasCollection.ts +274 -261
- package/src/generates/internal/SdkDistributionComposer.ts +123 -116
- package/src/generates/internal/SdkFileProgrammer.ts +116 -112
- package/src/generates/internal/SdkHttpCloneProgrammer.ts +126 -126
- package/src/generates/internal/SdkHttpCloneReferencer.ts +131 -77
- package/src/generates/internal/SdkHttpFunctionProgrammer.ts +301 -301
- package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +520 -510
- package/src/generates/internal/SdkHttpParameterProgrammer.ts +165 -165
- package/src/generates/internal/SdkHttpRouteProgrammer.ts +109 -109
- package/src/generates/internal/SdkHttpSimulationProgrammer.ts +331 -314
- package/src/generates/internal/SdkImportWizard.ts +62 -62
- package/src/generates/internal/SdkMcpRouteProgrammer.ts +452 -0
- package/src/generates/internal/SdkRouteDirectory.ts +21 -18
- package/src/generates/internal/SdkTypeTagProgrammer.ts +114 -114
- package/src/generates/internal/SdkWebSocketCloneProgrammer.ts +319 -0
- package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +389 -389
- package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +89 -89
- package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +331 -323
- package/src/generates/internal/SwaggerDescriptionComposer.ts +64 -64
- package/src/generates/internal/SwaggerOperationComposer.ts +119 -119
- package/src/generates/internal/SwaggerOperationParameterComposer.ts +175 -162
- package/src/generates/internal/SwaggerOperationResponseComposer.ts +115 -110
- package/src/generates/internal/SwaggerReadonlyArrayEmender.ts +262 -0
- package/src/index.ts +4 -4
- package/src/internal/legacy.ts +492 -492
- package/src/module.ts +4 -4
- package/src/structures/INestiaProject.ts +10 -10
- package/src/structures/INestiaSdkInput.ts +27 -20
- package/src/structures/IOperationMetadata.ts +41 -41
- package/src/structures/IReflectController.ts +18 -15
- package/src/structures/IReflectHttpOperation.ts +26 -26
- package/src/structures/IReflectHttpOperationException.ts +18 -18
- package/src/structures/IReflectHttpOperationParameter.ts +79 -79
- package/src/structures/IReflectHttpOperationSuccess.ts +18 -21
- package/src/structures/IReflectImport.ts +6 -6
- package/src/structures/IReflectMcpOperation.ts +38 -0
- package/src/structures/IReflectMcpOperationParameter.ts +27 -0
- package/src/structures/IReflectOperationError.ts +26 -26
- package/src/structures/IReflectType.ts +4 -4
- package/src/structures/IReflectWebSocketOperation.ts +17 -17
- package/src/structures/ITypedApplication.ts +12 -11
- package/src/structures/ITypedHttpRoute.ts +41 -41
- package/src/structures/ITypedHttpRouteException.ts +15 -15
- package/src/structures/ITypedHttpRouteParameter.ts +41 -41
- package/src/structures/ITypedHttpRouteSuccess.ts +18 -22
- package/src/structures/ITypedMcpRoute.ts +33 -0
- package/src/structures/ITypedWebSocketRoute.ts +24 -24
- package/src/structures/ITypedWebSocketRouteParameter.ts +3 -3
- package/src/transform.ts +59 -59
- package/src/typings/get-function-location.d.ts +7 -7
- package/src/utils/ArrayUtil.ts +26 -26
- package/src/utils/EmittedJavaScriptPatcher.ts +88 -88
- package/src/utils/FileRetriever.ts +22 -22
- package/src/utils/HttpResponseContentTypeUtil.ts +30 -0
- package/src/utils/MapUtil.ts +14 -14
- package/src/utils/PathUtil.ts +10 -10
- package/src/utils/SourceFinder.ts +63 -63
- package/src/utils/StringUtil.ts +17 -17
- package/src/utils/TsConfigReader.ts +108 -108
- package/src/utils/TtscExecutor.ts +68 -68
- package/src/utils/VersioningStrategy.ts +28 -28
- package/src/validators/HttpHeadersValidator.ts +11 -11
- package/src/validators/HttpQueryValidator.ts +11 -11
- package/src/validators/TextPlainValidator.ts +17 -17
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
|
|
4
|
-
export namespace TsConfigReader {
|
|
5
|
-
export interface ITsConfig {
|
|
6
|
-
extends?: string | string[];
|
|
7
|
-
compilerOptions?: Record<string, any>;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const read = async (file: string): Promise<ITsConfig> =>
|
|
11
|
-
merge(file, new Set());
|
|
12
|
-
|
|
13
|
-
const merge = async (file: string, visited: Set<string>): Promise<ITsConfig> => {
|
|
14
|
-
const location: string = path.resolve(file);
|
|
15
|
-
if (visited.has(location)) return {};
|
|
16
|
-
visited.add(location);
|
|
17
|
-
|
|
18
|
-
const current: ITsConfig = parse(
|
|
19
|
-
await fs.promises.readFile(location, "utf8"),
|
|
20
|
-
);
|
|
21
|
-
const bases: ITsConfig[] = [];
|
|
22
|
-
for (const parent of asArray(current.extends)) {
|
|
23
|
-
const next: string | null = resolveExtends(parent, path.dirname(location));
|
|
24
|
-
if (next !== null) bases.push(await merge(next, visited));
|
|
25
|
-
}
|
|
26
|
-
return [...bases, current].reduce<ITsConfig>(
|
|
27
|
-
(acc, elem) => ({
|
|
28
|
-
...acc,
|
|
29
|
-
...elem,
|
|
30
|
-
compilerOptions: {
|
|
31
|
-
...(acc.compilerOptions ?? {}),
|
|
32
|
-
...(elem.compilerOptions ?? {}),
|
|
33
|
-
},
|
|
34
|
-
}),
|
|
35
|
-
{},
|
|
36
|
-
);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const parse = (text: string): ITsConfig =>
|
|
40
|
-
JSON.parse(stripTrailingCommas(stripJsonComments(text))) as ITsConfig;
|
|
41
|
-
|
|
42
|
-
const asArray = <T>(value: T | T[] | undefined): T[] =>
|
|
43
|
-
value === undefined ? [] : Array.isArray(value) ? value : [value];
|
|
44
|
-
|
|
45
|
-
const resolveExtends = (specifier: string, cwd: string): string | null => {
|
|
46
|
-
const candidates = (base: string): string[] => {
|
|
47
|
-
const ext: string = path.extname(base);
|
|
48
|
-
return ext === ".json" || ext === ".jsonc" ? [base] : [base, `${base}.json`];
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
if (path.isAbsolute(specifier) || specifier.startsWith(".")) {
|
|
52
|
-
for (const candidate of candidates(path.resolve(cwd, specifier)))
|
|
53
|
-
if (fs.existsSync(candidate)) return candidate;
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
for (const candidate of [
|
|
58
|
-
specifier,
|
|
59
|
-
...candidates(specifier),
|
|
60
|
-
path.join(specifier, "tsconfig.json"),
|
|
61
|
-
])
|
|
62
|
-
try {
|
|
63
|
-
return require.resolve(candidate, { paths: [cwd] });
|
|
64
|
-
} catch {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
const stripJsonComments = (input: string): string => {
|
|
71
|
-
let output = "";
|
|
72
|
-
let string: false | '"' | "'" = false;
|
|
73
|
-
let escaped = false;
|
|
74
|
-
for (let i = 0; i < input.length; ++i) {
|
|
75
|
-
const ch = input[i]!;
|
|
76
|
-
const next = input[i + 1];
|
|
77
|
-
if (string !== false) {
|
|
78
|
-
output += ch;
|
|
79
|
-
if (escaped) escaped = false;
|
|
80
|
-
else if (ch === "\\") escaped = true;
|
|
81
|
-
else if (ch === string) string = false;
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (ch === '"' || ch === "'") {
|
|
85
|
-
string = ch;
|
|
86
|
-
output += ch;
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (ch === "/" && next === "/") {
|
|
90
|
-
while (i < input.length && input[i] !== "\n") ++i;
|
|
91
|
-
output += "\n";
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (ch === "/" && next === "*") {
|
|
95
|
-
i += 2;
|
|
96
|
-
while (i < input.length && !(input[i] === "*" && input[i + 1] === "/"))
|
|
97
|
-
++i;
|
|
98
|
-
++i;
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
output += ch;
|
|
102
|
-
}
|
|
103
|
-
return output;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const stripTrailingCommas = (input: string): string =>
|
|
107
|
-
input.replace(/,\s*([}\]])/g, "$1");
|
|
108
|
-
}
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
|
|
4
|
+
export namespace TsConfigReader {
|
|
5
|
+
export interface ITsConfig {
|
|
6
|
+
extends?: string | string[];
|
|
7
|
+
compilerOptions?: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const read = async (file: string): Promise<ITsConfig> =>
|
|
11
|
+
merge(file, new Set());
|
|
12
|
+
|
|
13
|
+
const merge = async (file: string, visited: Set<string>): Promise<ITsConfig> => {
|
|
14
|
+
const location: string = path.resolve(file);
|
|
15
|
+
if (visited.has(location)) return {};
|
|
16
|
+
visited.add(location);
|
|
17
|
+
|
|
18
|
+
const current: ITsConfig = parse(
|
|
19
|
+
await fs.promises.readFile(location, "utf8"),
|
|
20
|
+
);
|
|
21
|
+
const bases: ITsConfig[] = [];
|
|
22
|
+
for (const parent of asArray(current.extends)) {
|
|
23
|
+
const next: string | null = resolveExtends(parent, path.dirname(location));
|
|
24
|
+
if (next !== null) bases.push(await merge(next, visited));
|
|
25
|
+
}
|
|
26
|
+
return [...bases, current].reduce<ITsConfig>(
|
|
27
|
+
(acc, elem) => ({
|
|
28
|
+
...acc,
|
|
29
|
+
...elem,
|
|
30
|
+
compilerOptions: {
|
|
31
|
+
...(acc.compilerOptions ?? {}),
|
|
32
|
+
...(elem.compilerOptions ?? {}),
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
{},
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const parse = (text: string): ITsConfig =>
|
|
40
|
+
JSON.parse(stripTrailingCommas(stripJsonComments(text))) as ITsConfig;
|
|
41
|
+
|
|
42
|
+
const asArray = <T>(value: T | T[] | undefined): T[] =>
|
|
43
|
+
value === undefined ? [] : Array.isArray(value) ? value : [value];
|
|
44
|
+
|
|
45
|
+
const resolveExtends = (specifier: string, cwd: string): string | null => {
|
|
46
|
+
const candidates = (base: string): string[] => {
|
|
47
|
+
const ext: string = path.extname(base);
|
|
48
|
+
return ext === ".json" || ext === ".jsonc" ? [base] : [base, `${base}.json`];
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
if (path.isAbsolute(specifier) || specifier.startsWith(".")) {
|
|
52
|
+
for (const candidate of candidates(path.resolve(cwd, specifier)))
|
|
53
|
+
if (fs.existsSync(candidate)) return candidate;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
for (const candidate of [
|
|
58
|
+
specifier,
|
|
59
|
+
...candidates(specifier),
|
|
60
|
+
path.join(specifier, "tsconfig.json"),
|
|
61
|
+
])
|
|
62
|
+
try {
|
|
63
|
+
return require.resolve(candidate, { paths: [cwd] });
|
|
64
|
+
} catch {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const stripJsonComments = (input: string): string => {
|
|
71
|
+
let output = "";
|
|
72
|
+
let string: false | '"' | "'" = false;
|
|
73
|
+
let escaped = false;
|
|
74
|
+
for (let i = 0; i < input.length; ++i) {
|
|
75
|
+
const ch = input[i]!;
|
|
76
|
+
const next = input[i + 1];
|
|
77
|
+
if (string !== false) {
|
|
78
|
+
output += ch;
|
|
79
|
+
if (escaped) escaped = false;
|
|
80
|
+
else if (ch === "\\") escaped = true;
|
|
81
|
+
else if (ch === string) string = false;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (ch === '"' || ch === "'") {
|
|
85
|
+
string = ch;
|
|
86
|
+
output += ch;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === "/" && next === "/") {
|
|
90
|
+
while (i < input.length && input[i] !== "\n") ++i;
|
|
91
|
+
output += "\n";
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (ch === "/" && next === "*") {
|
|
95
|
+
i += 2;
|
|
96
|
+
while (i < input.length && !(input[i] === "*" && input[i + 1] === "/"))
|
|
97
|
+
++i;
|
|
98
|
+
++i;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
output += ch;
|
|
102
|
+
}
|
|
103
|
+
return output;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const stripTrailingCommas = (input: string): string =>
|
|
107
|
+
input.replace(/,\s*([}\]])/g, "$1");
|
|
108
|
+
}
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import cp from "child_process";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
import path from "path";
|
|
4
|
-
|
|
5
|
-
export namespace TtscExecutor {
|
|
6
|
-
export const run = (props: {
|
|
7
|
-
cwd: string;
|
|
8
|
-
env?: NodeJS.ProcessEnv;
|
|
9
|
-
project: string;
|
|
10
|
-
stdio?: cp.StdioOptions;
|
|
11
|
-
}): Buffer => {
|
|
12
|
-
const args: string[] = [bin(props.cwd), "-p", props.project];
|
|
13
|
-
if (process.env.TTSC_CACHE_DIR !== undefined)
|
|
14
|
-
args.push("--cache-dir", process.env.TTSC_CACHE_DIR);
|
|
15
|
-
return cp.execFileSync(process.execPath, args, {
|
|
16
|
-
cwd: props.cwd,
|
|
17
|
-
env: {
|
|
18
|
-
...process.env,
|
|
19
|
-
...props.env,
|
|
20
|
-
},
|
|
21
|
-
stdio: props.stdio ?? "pipe",
|
|
22
|
-
maxBuffer: 64 * 1024 * 1024,
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const bin_: Map<string, string> = new Map();
|
|
27
|
-
|
|
28
|
-
const bin = (cwd: string): string => {
|
|
29
|
-
const cached: string | undefined = bin_.get(cwd);
|
|
30
|
-
if (cached !== undefined) return cached;
|
|
31
|
-
|
|
32
|
-
// Prefer the user's project-local ttsc; fall back to the module's own
|
|
33
|
-
// lookup path so a programmatic caller without an installed ttsc in
|
|
34
|
-
// `cwd` still resolves the bundled dep.
|
|
35
|
-
let manifest: string;
|
|
36
|
-
try {
|
|
37
|
-
manifest = require.resolve("ttsc/package.json", { paths: [cwd] });
|
|
38
|
-
} catch {
|
|
39
|
-
manifest = require.resolve("ttsc/package.json");
|
|
40
|
-
}
|
|
41
|
-
const directory: string = path.dirname(manifest);
|
|
42
|
-
const pack: { bin?: string | Record<string, string> } = JSON.parse(
|
|
43
|
-
fs.readFileSync(manifest, "utf8"),
|
|
44
|
-
);
|
|
45
|
-
const location: string | undefined =
|
|
46
|
-
typeof pack.bin === "string" ? pack.bin : pack.bin?.ttsc;
|
|
47
|
-
if (location === undefined) {
|
|
48
|
-
const keys =
|
|
49
|
-
typeof pack.bin === "object" && pack.bin !== null
|
|
50
|
-
? Object.keys(pack.bin).join(", ")
|
|
51
|
-
: "<none>";
|
|
52
|
-
throw new Error(
|
|
53
|
-
`Unable to find "ttsc" binary from package metadata. ` +
|
|
54
|
-
`Available bin entries: ${keys}. ` +
|
|
55
|
-
`Reinstall with: npm install --save-dev ttsc`,
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const resolved: string = path.join(directory, location);
|
|
60
|
-
if (!fs.existsSync(resolved))
|
|
61
|
-
throw new Error(
|
|
62
|
-
`"ttsc" binary not found at "${resolved}". ` +
|
|
63
|
-
`Reinstall with: npm install --save-dev ttsc`,
|
|
64
|
-
);
|
|
65
|
-
bin_.set(cwd, resolved);
|
|
66
|
-
return resolved;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
1
|
+
import cp from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
|
|
5
|
+
export namespace TtscExecutor {
|
|
6
|
+
export const run = (props: {
|
|
7
|
+
cwd: string;
|
|
8
|
+
env?: NodeJS.ProcessEnv;
|
|
9
|
+
project: string;
|
|
10
|
+
stdio?: cp.StdioOptions;
|
|
11
|
+
}): Buffer => {
|
|
12
|
+
const args: string[] = [bin(props.cwd), "-p", props.project];
|
|
13
|
+
if (process.env.TTSC_CACHE_DIR !== undefined)
|
|
14
|
+
args.push("--cache-dir", process.env.TTSC_CACHE_DIR);
|
|
15
|
+
return cp.execFileSync(process.execPath, args, {
|
|
16
|
+
cwd: props.cwd,
|
|
17
|
+
env: {
|
|
18
|
+
...process.env,
|
|
19
|
+
...props.env,
|
|
20
|
+
},
|
|
21
|
+
stdio: props.stdio ?? "pipe",
|
|
22
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const bin_: Map<string, string> = new Map();
|
|
27
|
+
|
|
28
|
+
const bin = (cwd: string): string => {
|
|
29
|
+
const cached: string | undefined = bin_.get(cwd);
|
|
30
|
+
if (cached !== undefined) return cached;
|
|
31
|
+
|
|
32
|
+
// Prefer the user's project-local ttsc; fall back to the module's own
|
|
33
|
+
// lookup path so a programmatic caller without an installed ttsc in
|
|
34
|
+
// `cwd` still resolves the bundled dep.
|
|
35
|
+
let manifest: string;
|
|
36
|
+
try {
|
|
37
|
+
manifest = require.resolve("ttsc/package.json", { paths: [cwd] });
|
|
38
|
+
} catch {
|
|
39
|
+
manifest = require.resolve("ttsc/package.json");
|
|
40
|
+
}
|
|
41
|
+
const directory: string = path.dirname(manifest);
|
|
42
|
+
const pack: { bin?: string | Record<string, string> } = JSON.parse(
|
|
43
|
+
fs.readFileSync(manifest, "utf8"),
|
|
44
|
+
);
|
|
45
|
+
const location: string | undefined =
|
|
46
|
+
typeof pack.bin === "string" ? pack.bin : pack.bin?.ttsc;
|
|
47
|
+
if (location === undefined) {
|
|
48
|
+
const keys =
|
|
49
|
+
typeof pack.bin === "object" && pack.bin !== null
|
|
50
|
+
? Object.keys(pack.bin).join(", ")
|
|
51
|
+
: "<none>";
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Unable to find "ttsc" binary from package metadata. ` +
|
|
54
|
+
`Available bin entries: ${keys}. ` +
|
|
55
|
+
`Reinstall with: npm install --save-dev ttsc`,
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const resolved: string = path.join(directory, location);
|
|
60
|
+
if (!fs.existsSync(resolved))
|
|
61
|
+
throw new Error(
|
|
62
|
+
`"ttsc" binary not found at "${resolved}". ` +
|
|
63
|
+
`Reinstall with: npm install --save-dev ttsc`,
|
|
64
|
+
);
|
|
65
|
+
bin_.set(cwd, resolved);
|
|
66
|
+
return resolved;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { VERSION_NEUTRAL, VersionValue } from "@nestjs/common/interfaces";
|
|
2
|
-
|
|
3
|
-
import { INestiaProject } from "../structures/INestiaProject";
|
|
4
|
-
|
|
5
|
-
export namespace VersioningStrategy {
|
|
6
|
-
export const cast = (
|
|
7
|
-
value: VersionValue | undefined,
|
|
8
|
-
): Array<string | typeof VERSION_NEUTRAL> =>
|
|
9
|
-
value === undefined ? [] : Array.isArray(value) ? value : [value];
|
|
10
|
-
|
|
11
|
-
export const merge =
|
|
12
|
-
(project: Omit<INestiaProject, "config">) =>
|
|
13
|
-
(values: Array<string | typeof VERSION_NEUTRAL>): string[] => {
|
|
14
|
-
if (project.input.versioning === undefined) return [""];
|
|
15
|
-
const set: Set<string | typeof VERSION_NEUTRAL> = new Set(values);
|
|
16
|
-
const array: Array<string | typeof VERSION_NEUTRAL> =
|
|
17
|
-
set.size === 0
|
|
18
|
-
? cast(project.input.versioning?.defaultVersion)
|
|
19
|
-
: Array.from(set);
|
|
20
|
-
return !!array?.length
|
|
21
|
-
? array.map((x) =>
|
|
22
|
-
typeof x === "symbol"
|
|
23
|
-
? ""
|
|
24
|
-
: `${project.input.versioning!.prefix}${x}`,
|
|
25
|
-
)
|
|
26
|
-
: [];
|
|
27
|
-
};
|
|
28
|
-
}
|
|
1
|
+
import { VERSION_NEUTRAL, VersionValue } from "@nestjs/common/interfaces";
|
|
2
|
+
|
|
3
|
+
import { INestiaProject } from "../structures/INestiaProject";
|
|
4
|
+
|
|
5
|
+
export namespace VersioningStrategy {
|
|
6
|
+
export const cast = (
|
|
7
|
+
value: VersionValue | undefined,
|
|
8
|
+
): Array<string | typeof VERSION_NEUTRAL> =>
|
|
9
|
+
value === undefined ? [] : Array.isArray(value) ? value : [value];
|
|
10
|
+
|
|
11
|
+
export const merge =
|
|
12
|
+
(project: Omit<INestiaProject, "config">) =>
|
|
13
|
+
(values: Array<string | typeof VERSION_NEUTRAL>): string[] => {
|
|
14
|
+
if (project.input.versioning === undefined) return [""];
|
|
15
|
+
const set: Set<string | typeof VERSION_NEUTRAL> = new Set(values);
|
|
16
|
+
const array: Array<string | typeof VERSION_NEUTRAL> =
|
|
17
|
+
set.size === 0
|
|
18
|
+
? cast(project.input.versioning?.defaultVersion)
|
|
19
|
+
: Array.from(set);
|
|
20
|
+
return !!array?.length
|
|
21
|
+
? array.map((x) =>
|
|
22
|
+
typeof x === "symbol"
|
|
23
|
+
? ""
|
|
24
|
+
: `${project.input.versioning!.prefix}${x}`,
|
|
25
|
+
)
|
|
26
|
+
: [];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { MetadataFactory } from "../internal/legacy";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Validator slot reserved for `@TypedHeaders` per-field SDK-side checks.
|
|
5
|
-
* Returns `[]` because the typia native transform already enforces the
|
|
6
|
-
* "atomic-or-array-of-atomic" constraint at compile time, and `MetadataFactory.validate`
|
|
7
|
-
* — the only call site — is itself a passthrough on the v13 runtime.
|
|
8
|
-
*/
|
|
9
|
-
export namespace HttpHeadersValidator {
|
|
10
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
11
|
-
}
|
|
1
|
+
import { MetadataFactory } from "../internal/legacy";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validator slot reserved for `@TypedHeaders` per-field SDK-side checks.
|
|
5
|
+
* Returns `[]` because the typia native transform already enforces the
|
|
6
|
+
* "atomic-or-array-of-atomic" constraint at compile time, and `MetadataFactory.validate`
|
|
7
|
+
* — the only call site — is itself a passthrough on the v13 runtime.
|
|
8
|
+
*/
|
|
9
|
+
export namespace HttpHeadersValidator {
|
|
10
|
+
export const validate: MetadataFactory.Validator = () => [];
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { MetadataFactory } from "../internal/legacy";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Validator slot reserved for `@TypedQuery` per-field SDK-side checks.
|
|
5
|
-
* Returns `[]` because the typia native transform already enforces the
|
|
6
|
-
* atomic-only constraint at compile time, and `MetadataFactory.validate` —
|
|
7
|
-
* the only call site — is itself a passthrough on the v13 runtime.
|
|
8
|
-
*/
|
|
9
|
-
export namespace HttpQueryValidator {
|
|
10
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
11
|
-
}
|
|
1
|
+
import { MetadataFactory } from "../internal/legacy";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validator slot reserved for `@TypedQuery` per-field SDK-side checks.
|
|
5
|
+
* Returns `[]` because the typia native transform already enforces the
|
|
6
|
+
* atomic-only constraint at compile time, and `MetadataFactory.validate` —
|
|
7
|
+
* the only call site — is itself a passthrough on the v13 runtime.
|
|
8
|
+
*/
|
|
9
|
+
export namespace HttpQueryValidator {
|
|
10
|
+
export const validate: MetadataFactory.Validator = () => [];
|
|
11
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { MetadataSchema, sizeOf } from "../internal/legacy";
|
|
2
|
-
|
|
3
|
-
export namespace TextPlainValidator {
|
|
4
|
-
export const validate = (props: { metadata: MetadataSchema }): string[] => {
|
|
5
|
-
const expected: number =
|
|
6
|
-
props.metadata.atomics.filter((a) => a.type === "string").length +
|
|
7
|
-
props.metadata.constants
|
|
8
|
-
.filter((c) => c.type === "string")
|
|
9
|
-
.map((c) => c.values.length)
|
|
10
|
-
.reduce((a, b) => a + b, 0) +
|
|
11
|
-
props.metadata.templates.length +
|
|
12
|
-
props.metadata.natives.filter((n) => n.name === "String").length;
|
|
13
|
-
if (sizeOf(props.metadata) === 0 || sizeOf(props.metadata) !== expected)
|
|
14
|
-
return [`Only string type is allowed in the "text/plain" content type.`];
|
|
15
|
-
return [];
|
|
16
|
-
};
|
|
17
|
-
}
|
|
1
|
+
import { MetadataSchema, sizeOf } from "../internal/legacy";
|
|
2
|
+
|
|
3
|
+
export namespace TextPlainValidator {
|
|
4
|
+
export const validate = (props: { metadata: MetadataSchema }): string[] => {
|
|
5
|
+
const expected: number =
|
|
6
|
+
props.metadata.atomics.filter((a) => a.type === "string").length +
|
|
7
|
+
props.metadata.constants
|
|
8
|
+
.filter((c) => c.type === "string")
|
|
9
|
+
.map((c) => c.values.length)
|
|
10
|
+
.reduce((a, b) => a + b, 0) +
|
|
11
|
+
props.metadata.templates.length +
|
|
12
|
+
props.metadata.natives.filter((n) => n.name === "String").length;
|
|
13
|
+
if (sizeOf(props.metadata) === 0 || sizeOf(props.metadata) !== expected)
|
|
14
|
+
return [`Only string type is allowed in the "text/plain" content type.`];
|
|
15
|
+
return [];
|
|
16
|
+
};
|
|
17
|
+
}
|