@typespec/http-server-csharp 0.58.0-alpha.28 → 0.58.0-alpha.29-dev.3
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/src/cli/cli.js +118 -154
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/components/controller-action/controller-action.d.ts +16 -0
- package/dist/src/components/controller-action/controller-action.d.ts.map +1 -0
- package/dist/src/components/controller-action/controller-action.js +251 -0
- package/dist/src/components/controller-action/controller-action.js.map +1 -0
- package/dist/src/components/controller-action/controller-action.test.d.ts +2 -0
- package/dist/src/components/controller-action/controller-action.test.d.ts.map +1 -0
- package/dist/src/components/controller-action/controller-action.test.js +106 -0
- package/dist/src/components/controller-action/controller-action.test.js.map +1 -0
- package/dist/src/components/controller-action/parameter-binding.d.ts +17 -0
- package/dist/src/components/controller-action/parameter-binding.d.ts.map +1 -0
- package/dist/src/components/controller-action/parameter-binding.js +77 -0
- package/dist/src/components/controller-action/parameter-binding.js.map +1 -0
- package/dist/src/components/controller-action/response-analysis.d.ts +10 -0
- package/dist/src/components/controller-action/response-analysis.d.ts.map +1 -0
- package/dist/src/components/controller-action/response-analysis.js +61 -0
- package/dist/src/components/controller-action/response-analysis.js.map +1 -0
- package/dist/src/components/controllers/controllers.d.ts +18 -0
- package/dist/src/components/controllers/controllers.d.ts.map +1 -0
- package/dist/src/components/controllers/controllers.js +64 -0
- package/dist/src/components/controllers/controllers.js.map +1 -0
- package/dist/src/components/controllers/controllers.test.d.ts +2 -0
- package/dist/src/components/controllers/controllers.test.d.ts.map +1 -0
- package/dist/src/components/controllers/controllers.test.js +84 -0
- package/dist/src/components/controllers/controllers.test.js.map +1 -0
- package/dist/src/components/csharp-file.d.ts +15 -0
- package/dist/src/components/csharp-file.d.ts.map +1 -0
- package/dist/src/components/csharp-file.js +28 -0
- package/dist/src/components/csharp-file.js.map +1 -0
- package/dist/src/components/enums/enums.d.ts +28 -0
- package/dist/src/components/enums/enums.d.ts.map +1 -0
- package/dist/src/components/enums/enums.js +158 -0
- package/dist/src/components/enums/enums.js.map +1 -0
- package/dist/src/components/enums/enums.test.d.ts +2 -0
- package/dist/src/components/enums/enums.test.d.ts.map +1 -0
- package/dist/src/components/enums/enums.test.js +112 -0
- package/dist/src/components/enums/enums.test.js.map +1 -0
- package/dist/src/components/interfaces/interfaces.d.ts +17 -0
- package/dist/src/components/interfaces/interfaces.d.ts.map +1 -0
- package/dist/src/components/interfaces/interfaces.js +153 -0
- package/dist/src/components/interfaces/interfaces.js.map +1 -0
- package/dist/src/components/interfaces/interfaces.test.d.ts +2 -0
- package/dist/src/components/interfaces/interfaces.test.d.ts.map +1 -0
- package/dist/src/components/interfaces/interfaces.test.js +76 -0
- package/dist/src/components/interfaces/interfaces.test.js.map +1 -0
- package/dist/src/components/models/anonymous-models.d.ts +9 -0
- package/dist/src/components/models/anonymous-models.d.ts.map +1 -0
- package/dist/src/components/models/anonymous-models.js +37 -0
- package/dist/src/components/models/anonymous-models.js.map +1 -0
- package/dist/src/components/models/error-models.d.ts +5 -0
- package/dist/src/components/models/error-models.d.ts.map +1 -0
- package/dist/src/components/models/error-models.js +84 -0
- package/dist/src/components/models/error-models.js.map +1 -0
- package/dist/src/components/models/model-helpers.d.ts +40 -0
- package/dist/src/components/models/model-helpers.d.ts.map +1 -0
- package/dist/src/components/models/model-helpers.js +239 -0
- package/dist/src/components/models/model-helpers.js.map +1 -0
- package/dist/src/components/models/models.d.ts +15 -0
- package/dist/src/components/models/models.d.ts.map +1 -0
- package/dist/src/components/models/models.js +234 -0
- package/dist/src/components/models/models.js.map +1 -0
- package/dist/src/components/models/models.test.d.ts +2 -0
- package/dist/src/components/models/models.test.d.ts.map +1 -0
- package/dist/src/components/models/models.test.js +151 -0
- package/dist/src/components/models/models.test.js.map +1 -0
- package/dist/src/components/project/csproj.d.ts +12 -0
- package/dist/src/components/project/csproj.d.ts.map +1 -0
- package/dist/src/components/project/csproj.js +35 -0
- package/dist/src/components/project/csproj.js.map +1 -0
- package/dist/src/components/project/csproj.test.d.ts +2 -0
- package/dist/src/components/project/csproj.test.d.ts.map +1 -0
- package/dist/src/components/project/csproj.test.js +42 -0
- package/dist/src/components/project/csproj.test.js.map +1 -0
- package/dist/src/components/project/launch-settings.d.ts +16 -0
- package/dist/src/components/project/launch-settings.d.ts.map +1 -0
- package/dist/src/components/project/launch-settings.js +73 -0
- package/dist/src/components/project/launch-settings.js.map +1 -0
- package/dist/src/components/project/launch-settings.test.d.ts +2 -0
- package/dist/src/components/project/launch-settings.test.d.ts.map +1 -0
- package/dist/src/components/project/launch-settings.test.js +48 -0
- package/dist/src/components/project/launch-settings.test.js.map +1 -0
- package/dist/src/components/project/program.d.ts +14 -0
- package/dist/src/components/project/program.d.ts.map +1 -0
- package/dist/src/components/project/program.js +75 -0
- package/dist/src/components/project/program.js.map +1 -0
- package/dist/src/components/project/program.test.d.ts +2 -0
- package/dist/src/components/project/program.test.d.ts.map +1 -0
- package/dist/src/components/project/program.test.js +50 -0
- package/dist/src/components/project/program.test.js.map +1 -0
- package/dist/src/components/render-root.d.ts +14 -0
- package/dist/src/components/render-root.d.ts.map +1 -0
- package/dist/src/components/render-root.js +122 -0
- package/dist/src/components/render-root.js.map +1 -0
- package/dist/src/components/request-models.d.ts +15 -0
- package/dist/src/components/request-models.d.ts.map +1 -0
- package/dist/src/components/request-models.js +97 -0
- package/dist/src/components/request-models.js.map +1 -0
- package/dist/src/components/scaffolding/documentation.d.ts +12 -0
- package/dist/src/components/scaffolding/documentation.d.ts.map +1 -0
- package/dist/src/{lib/doc.js → components/scaffolding/documentation.js} +56 -46
- package/dist/src/components/scaffolding/documentation.js.map +1 -0
- package/dist/src/components/scaffolding/mock-helpers.d.ts +10 -0
- package/dist/src/components/scaffolding/mock-helpers.d.ts.map +1 -0
- package/dist/src/components/scaffolding/mock-helpers.js +268 -0
- package/dist/src/components/scaffolding/mock-helpers.js.map +1 -0
- package/dist/src/components/scaffolding/mock-implementations.d.ts +14 -0
- package/dist/src/components/scaffolding/mock-implementations.d.ts.map +1 -0
- package/dist/src/components/scaffolding/mock-implementations.js +152 -0
- package/dist/src/components/scaffolding/mock-implementations.js.map +1 -0
- package/dist/src/components/scaffolding/mock-return-utils.d.ts +11 -0
- package/dist/src/components/scaffolding/mock-return-utils.d.ts.map +1 -0
- package/dist/src/components/scaffolding/mock-return-utils.js +62 -0
- package/dist/src/components/scaffolding/mock-return-utils.js.map +1 -0
- package/dist/src/components/scaffolding/mock-scaffolding.d.ts +6 -0
- package/dist/src/components/scaffolding/mock-scaffolding.d.ts.map +1 -0
- package/dist/src/components/scaffolding/mock-scaffolding.js +5 -0
- package/dist/src/components/scaffolding/mock-scaffolding.js.map +1 -0
- package/dist/src/components/scaffolding/mock-scaffolding.test.d.ts +2 -0
- package/dist/src/components/scaffolding/mock-scaffolding.test.d.ts.map +1 -0
- package/dist/src/components/scaffolding/mock-scaffolding.test.js +59 -0
- package/dist/src/components/scaffolding/mock-scaffolding.test.js.map +1 -0
- package/dist/src/components/serialization/base64-url-json-converter.d.ts +7 -0
- package/dist/src/components/serialization/base64-url-json-converter.d.ts.map +1 -0
- package/dist/src/components/serialization/base64-url-json-converter.js +58 -0
- package/dist/src/components/serialization/base64-url-json-converter.js.map +1 -0
- package/dist/src/components/serialization/constraint-attributes.d.ts +7 -0
- package/dist/src/components/serialization/constraint-attributes.d.ts.map +1 -0
- package/dist/src/components/serialization/constraint-attributes.js +556 -0
- package/dist/src/components/serialization/constraint-attributes.js.map +1 -0
- package/dist/src/components/serialization/http-service-exception-filter.d.ts +8 -0
- package/dist/src/components/serialization/http-service-exception-filter.d.ts.map +1 -0
- package/dist/src/components/serialization/http-service-exception-filter.js +71 -0
- package/dist/src/components/serialization/http-service-exception-filter.js.map +1 -0
- package/dist/src/components/serialization/json-converters.d.ts +7 -0
- package/dist/src/components/serialization/json-converters.d.ts.map +1 -0
- package/dist/src/components/serialization/json-converters.js +22 -0
- package/dist/src/components/serialization/json-converters.js.map +1 -0
- package/dist/src/components/serialization/json-converters.test.d.ts +2 -0
- package/dist/src/components/serialization/json-converters.test.d.ts.map +1 -0
- package/dist/src/components/serialization/json-converters.test.js +136 -0
- package/dist/src/components/serialization/json-converters.test.js.map +1 -0
- package/dist/src/components/serialization/json-serialization-provider.d.ts +7 -0
- package/dist/src/components/serialization/json-serialization-provider.d.ts.map +1 -0
- package/dist/src/components/serialization/json-serialization-provider.js +90 -0
- package/dist/src/components/serialization/json-serialization-provider.js.map +1 -0
- package/dist/src/components/serialization/time-span-duration-converter.d.ts +7 -0
- package/dist/src/components/serialization/time-span-duration-converter.d.ts.map +1 -0
- package/dist/src/components/serialization/time-span-duration-converter.js +44 -0
- package/dist/src/components/serialization/time-span-duration-converter.js.map +1 -0
- package/dist/src/components/serialization/unix-epoch-date-time-converter.d.ts +7 -0
- package/dist/src/components/serialization/unix-epoch-date-time-converter.d.ts.map +1 -0
- package/dist/src/components/serialization/unix-epoch-date-time-converter.js +71 -0
- package/dist/src/components/serialization/unix-epoch-date-time-converter.js.map +1 -0
- package/dist/src/components/type-expression/type-expression.d.ts +24 -0
- package/dist/src/components/type-expression/type-expression.d.ts.map +1 -0
- package/dist/src/components/type-expression/type-expression.js +223 -0
- package/dist/src/components/type-expression/type-expression.js.map +1 -0
- package/dist/src/components/type-expression/type-expression.test.d.ts +2 -0
- package/dist/src/components/type-expression/type-expression.test.d.ts.map +1 -0
- package/dist/src/components/type-expression/type-expression.test.js +207 -0
- package/dist/src/components/type-expression/type-expression.test.js.map +1 -0
- package/dist/src/context/emitter-options-context.d.ts +13 -0
- package/dist/src/context/emitter-options-context.d.ts.map +1 -0
- package/dist/src/context/emitter-options-context.js +15 -0
- package/dist/src/context/emitter-options-context.js.map +1 -0
- package/dist/src/diagnostics.d.ts +8 -0
- package/dist/src/diagnostics.d.ts.map +1 -0
- package/dist/src/diagnostics.js +164 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/emitter.d.ts +8 -0
- package/dist/src/emitter.d.ts.map +1 -0
- package/dist/src/emitter.js +180 -0
- package/dist/src/emitter.js.map +1 -0
- package/dist/src/{lib/index.d.ts → index.d.ts} +1 -1
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/{lib/index.js → index.js} +1 -1
- package/dist/src/index.js.map +1 -0
- package/dist/src/{lib/lib.d.ts → lib.d.ts} +4 -14
- package/dist/src/lib.d.ts.map +1 -0
- package/dist/src/lib.js +133 -0
- package/dist/src/lib.js.map +1 -0
- package/dist/src/output-writer.d.ts +11 -0
- package/dist/src/output-writer.d.ts.map +1 -0
- package/dist/src/output-writer.js +72 -0
- package/dist/src/output-writer.js.map +1 -0
- package/dist/src/service-discovery.d.ts +13 -0
- package/dist/src/service-discovery.d.ts.map +1 -0
- package/dist/src/service-discovery.js +93 -0
- package/dist/src/service-discovery.js.map +1 -0
- package/dist/src/service-resolution.d.ts +34 -0
- package/dist/src/service-resolution.d.ts.map +1 -0
- package/dist/src/service-resolution.js +244 -0
- package/dist/src/service-resolution.js.map +1 -0
- package/dist/src/testing/index.d.ts +2 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +2 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/utils/attributes.d.ts +8 -0
- package/dist/src/utils/attributes.d.ts.map +1 -0
- package/dist/src/utils/attributes.js +224 -0
- package/dist/src/utils/attributes.js.map +1 -0
- package/dist/src/utils/csharp-libs.d.ts +87 -0
- package/dist/src/utils/csharp-libs.d.ts.map +1 -0
- package/dist/src/utils/csharp-libs.js +90 -0
- package/dist/src/utils/csharp-libs.js.map +1 -0
- package/dist/src/utils/doc-comments.d.ts +2 -0
- package/dist/src/utils/doc-comments.d.ts.map +1 -0
- package/dist/src/utils/doc-comments.js +4 -0
- package/dist/src/utils/doc-comments.js.map +1 -0
- package/dist/src/utils/http-helpers.d.ts +19 -0
- package/dist/src/utils/http-helpers.d.ts.map +1 -0
- package/dist/src/utils/http-helpers.js +70 -0
- package/dist/src/utils/http-helpers.js.map +1 -0
- package/dist/src/utils/http-helpers.test.d.ts +2 -0
- package/dist/src/utils/http-helpers.test.d.ts.map +1 -0
- package/dist/src/utils/http-helpers.test.js +68 -0
- package/dist/src/utils/http-helpers.test.js.map +1 -0
- package/dist/src/utils/namespace-utils.d.ts +13 -0
- package/dist/src/utils/namespace-utils.d.ts.map +1 -0
- package/dist/src/utils/namespace-utils.js +55 -0
- package/dist/src/utils/namespace-utils.js.map +1 -0
- package/dist/src/utils/naming.d.ts +31 -0
- package/dist/src/utils/naming.d.ts.map +1 -0
- package/dist/src/utils/naming.js +87 -0
- package/dist/src/utils/naming.js.map +1 -0
- package/dist/src/utils/naming.test.d.ts +2 -0
- package/dist/src/utils/naming.test.d.ts.map +1 -0
- package/dist/src/utils/naming.test.js +86 -0
- package/dist/src/utils/naming.test.js.map +1 -0
- package/dist/src/utils/port.d.ts +5 -0
- package/dist/src/utils/port.d.ts.map +1 -0
- package/dist/src/utils/port.js +33 -0
- package/dist/src/utils/port.js.map +1 -0
- package/dist/src/utils/return-type-helpers.d.ts +8 -0
- package/dist/src/utils/return-type-helpers.d.ts.map +1 -0
- package/dist/src/utils/return-type-helpers.js +59 -0
- package/dist/src/utils/return-type-helpers.js.map +1 -0
- package/package.json +36 -28
- package/dist/src/lib/attributes.d.ts +0 -43
- package/dist/src/lib/attributes.d.ts.map +0 -1
- package/dist/src/lib/attributes.js +0 -422
- package/dist/src/lib/attributes.js.map +0 -1
- package/dist/src/lib/boilerplate.d.ts +0 -6
- package/dist/src/lib/boilerplate.d.ts.map +0 -1
- package/dist/src/lib/boilerplate.js +0 -792
- package/dist/src/lib/boilerplate.js.map +0 -1
- package/dist/src/lib/doc.d.ts +0 -5
- package/dist/src/lib/doc.d.ts.map +0 -1
- package/dist/src/lib/doc.js.map +0 -1
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/interfaces.d.ts +0 -183
- package/dist/src/lib/interfaces.d.ts.map +0 -1
- package/dist/src/lib/interfaces.js +0 -287
- package/dist/src/lib/interfaces.js.map +0 -1
- package/dist/src/lib/lib.d.ts.map +0 -1
- package/dist/src/lib/lib.js +0 -146
- package/dist/src/lib/lib.js.map +0 -1
- package/dist/src/lib/project.d.ts +0 -5
- package/dist/src/lib/project.d.ts.map +0 -1
- package/dist/src/lib/project.js +0 -101
- package/dist/src/lib/project.js.map +0 -1
- package/dist/src/lib/scaffolding.d.ts +0 -22
- package/dist/src/lib/scaffolding.d.ts.map +0 -1
- package/dist/src/lib/scaffolding.js +0 -461
- package/dist/src/lib/scaffolding.js.map +0 -1
- package/dist/src/lib/service.d.ts +0 -4
- package/dist/src/lib/service.d.ts.map +0 -1
- package/dist/src/lib/service.js +0 -1208
- package/dist/src/lib/service.js.map +0 -1
- package/dist/src/lib/type-helpers.d.ts +0 -44
- package/dist/src/lib/type-helpers.d.ts.map +0 -1
- package/dist/src/lib/type-helpers.js +0 -106
- package/dist/src/lib/type-helpers.js.map +0 -1
- package/dist/src/lib/utils.d.ts +0 -120
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -1580
- package/dist/src/lib/utils.js.map +0 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { renderAsync } from "@alloy-js/core";
|
|
2
|
+
import { emitFile, joinPaths, resolveCompilerOptions, resolvePath } from "@typespec/compiler";
|
|
3
|
+
/**
|
|
4
|
+
* Custom write function that respects the overwrite option.
|
|
5
|
+
* Files in the "generated/" directory are always written.
|
|
6
|
+
* Other files (scaffolding, mocks, project files) are only written if they don't exist or overwrite is true.
|
|
7
|
+
*/
|
|
8
|
+
export async function writeOutputWithOverwrite(program, rootComponent, emitterOutputDir, overwrite) {
|
|
9
|
+
const tree = await renderAsync(rootComponent);
|
|
10
|
+
await writeOutputDir(program, tree, emitterOutputDir, overwrite);
|
|
11
|
+
}
|
|
12
|
+
async function writeOutputDir(program, dir, emitterOutputDir, overwrite) {
|
|
13
|
+
for (const sub of dir.contents) {
|
|
14
|
+
if ("contents" in sub) {
|
|
15
|
+
if (Array.isArray(sub.contents)) {
|
|
16
|
+
await writeOutputDir(program, sub, emitterOutputDir, overwrite);
|
|
17
|
+
} else {
|
|
18
|
+
const filePath = joinPaths(emitterOutputDir, sub.path);
|
|
19
|
+
// Files in "generated/" are always written; others respect overwrite option
|
|
20
|
+
const isGenerated = sub.path.includes("generated/") || sub.path.startsWith("generated");
|
|
21
|
+
if (isGenerated || overwrite || !(await fileExists(program, filePath))) {
|
|
22
|
+
await emitFile(program, {
|
|
23
|
+
content: sub.contents,
|
|
24
|
+
path: filePath
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function fileExists(program, path) {
|
|
32
|
+
try {
|
|
33
|
+
await program.host.stat(path);
|
|
34
|
+
return true;
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function normalizeSlashes(p) {
|
|
40
|
+
return p.replaceAll("\\", "/");
|
|
41
|
+
}
|
|
42
|
+
export async function resolveOpenApiPath(context) {
|
|
43
|
+
const root = context.program.projectRoot;
|
|
44
|
+
try {
|
|
45
|
+
const [resolvedOptions] = await resolveCompilerOptions(context.program.host, {
|
|
46
|
+
cwd: root,
|
|
47
|
+
entrypoint: resolvePath(root, "main.tsp")
|
|
48
|
+
});
|
|
49
|
+
const oaiOptions = resolvedOptions.options && Object.keys(resolvedOptions.options).includes("@typespec/openapi3") ? resolvedOptions.options["@typespec/openapi3"] : undefined;
|
|
50
|
+
const emitted = resolvedOptions.emit !== undefined && resolvedOptions.emit.includes("@typespec/openapi3");
|
|
51
|
+
const outputDir = oaiOptions?.["emitter-output-dir"];
|
|
52
|
+
const fileName = oaiOptions?.["output-file"];
|
|
53
|
+
|
|
54
|
+
// Use emitterOutputDir resolved as absolute path
|
|
55
|
+
const projectDir = resolvePath(root, context.emitterOutputDir);
|
|
56
|
+
if (outputDir) {
|
|
57
|
+
const openApiFullPath = resolvePath(outputDir, fileName || "openapi.yaml");
|
|
58
|
+
const pathModule = await import("path");
|
|
59
|
+
return normalizeSlashes(pathModule.relative(projectDir, openApiFullPath));
|
|
60
|
+
}
|
|
61
|
+
if (emitted) {
|
|
62
|
+
const baseDir = context.program.compilerOptions.outputDir || resolvePath(root, "tsp-output");
|
|
63
|
+
const openApiFullPath = resolvePath(baseDir, "@typespec", "openapi3", fileName || "openapi.yaml");
|
|
64
|
+
const pathModule = await import("path");
|
|
65
|
+
return normalizeSlashes(pathModule.relative(projectDir, openApiFullPath));
|
|
66
|
+
}
|
|
67
|
+
} catch {
|
|
68
|
+
// Config resolution failed, fall through
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=output-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["renderAsync","emitFile","joinPaths","resolveCompilerOptions","resolvePath","writeOutputWithOverwrite","program","rootComponent","emitterOutputDir","overwrite","tree","writeOutputDir","dir","sub","contents","Array","isArray","filePath","path","isGenerated","includes","startsWith","fileExists","content","host","stat","normalizeSlashes","p","replaceAll","resolveOpenApiPath","context","root","projectRoot","resolvedOptions","cwd","entrypoint","oaiOptions","options","Object","keys","undefined","emitted","emit","outputDir","fileName","projectDir","openApiFullPath","pathModule","relative","baseDir","compilerOptions"],"sources":["../../src/output-writer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Interface } from "@typespec/compiler";
|
|
2
|
+
import type { useTsp } from "@typespec/emitter-framework";
|
|
3
|
+
/**
|
|
4
|
+
* Collects all interfaces from the service namespace(s).
|
|
5
|
+
* Also creates synthetic interfaces for namespace-level operations
|
|
6
|
+
* (following the old emitter pattern: `${namespaceName}Operations`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function getServiceInterfaces(program: ReturnType<typeof useTsp>["$"]["program"]): Interface[];
|
|
9
|
+
/**
|
|
10
|
+
* Gets the full service namespace name from the program (e.g., "Microsoft.Contoso").
|
|
11
|
+
*/
|
|
12
|
+
export declare function getServiceNamespaceName(program: ReturnType<typeof useTsp>["$"]["program"]): string | undefined;
|
|
13
|
+
//# sourceMappingURL=service-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-discovery.d.ts","sourceRoot":"","sources":["../../src/service-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAKV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GACjD,SAAS,EAAE,CAmDb;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GACjD,MAAM,GAAG,SAAS,CAoCpB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { isStdNamespace, isTemplateDeclaration } from "@typespec/compiler";
|
|
2
|
+
import { getCSharpIdentifier, NameCasingType } from "./utils/naming.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Collects all interfaces from the service namespace(s).
|
|
6
|
+
* Also creates synthetic interfaces for namespace-level operations
|
|
7
|
+
* (following the old emitter pattern: `${namespaceName}Operations`).
|
|
8
|
+
*/
|
|
9
|
+
export function getServiceInterfaces(program) {
|
|
10
|
+
const interfaces = [];
|
|
11
|
+
const globalNs = program.getGlobalNamespaceType();
|
|
12
|
+
function collectFromNamespace(ns) {
|
|
13
|
+
// Collect explicit TypeSpec interfaces
|
|
14
|
+
for (const iface of ns.interfaces?.values() ?? []) {
|
|
15
|
+
if (iface.name && !interfaces.includes(iface) && !isTemplateDeclaration(iface)) {
|
|
16
|
+
interfaces.push(iface);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Create synthetic interface for namespace-level operations
|
|
21
|
+
if (ns.operations.size > 0) {
|
|
22
|
+
const nsOps = [];
|
|
23
|
+
for (const [name, op] of ns.operations) {
|
|
24
|
+
if (!isTemplateDeclaration(op)) {
|
|
25
|
+
nsOps.push([name, op]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (nsOps.length > 0) {
|
|
29
|
+
const syntheticIface = program.checker.createAndFinishType({
|
|
30
|
+
sourceInterfaces: [],
|
|
31
|
+
decorators: [],
|
|
32
|
+
operations: new Map(nsOps),
|
|
33
|
+
kind: "Interface",
|
|
34
|
+
name: `${ns.name}Operations`,
|
|
35
|
+
namespace: ns,
|
|
36
|
+
entityKind: "Type",
|
|
37
|
+
isFinished: true
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Temporarily associate ops with the synthetic interface
|
|
41
|
+
for (const [_, op] of nsOps) {
|
|
42
|
+
op.interface = syntheticIface;
|
|
43
|
+
}
|
|
44
|
+
interfaces.push(syntheticIface);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const childNs of ns.namespaces?.values() ?? []) {
|
|
48
|
+
if (isStdNamespace(childNs)) continue;
|
|
49
|
+
collectFromNamespace(childNs);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const ns of globalNs.namespaces.values()) {
|
|
53
|
+
if (isStdNamespace(ns)) continue;
|
|
54
|
+
collectFromNamespace(ns);
|
|
55
|
+
}
|
|
56
|
+
return interfaces;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Gets the full service namespace name from the program (e.g., "Microsoft.Contoso").
|
|
61
|
+
*/
|
|
62
|
+
export function getServiceNamespaceName(program) {
|
|
63
|
+
const globalNs = program.getGlobalNamespaceType();
|
|
64
|
+
function getFullName(ns) {
|
|
65
|
+
const parts = [];
|
|
66
|
+
let current = ns;
|
|
67
|
+
while (current && current !== globalNs) {
|
|
68
|
+
parts.unshift(current.name);
|
|
69
|
+
current = current.namespace;
|
|
70
|
+
}
|
|
71
|
+
return parts.join(".");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Find the service namespace (deepest non-std namespace in the first branch)
|
|
75
|
+
function findServiceNs(ns) {
|
|
76
|
+
for (const child of ns.namespaces.values()) {
|
|
77
|
+
if (isStdNamespace(child)) continue;
|
|
78
|
+
// If this namespace has content (models, interfaces, operations, enums), use it
|
|
79
|
+
// Otherwise, recurse deeper
|
|
80
|
+
const hasContent = child.models.size > 0 || child.interfaces.size > 0 || child.operations.size > 0 || child.enums.size > 0;
|
|
81
|
+
if (hasContent) return child;
|
|
82
|
+
const deeper = findServiceNs(child);
|
|
83
|
+
if (deeper) return deeper;
|
|
84
|
+
return child;
|
|
85
|
+
}
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
const serviceNs = findServiceNs(globalNs);
|
|
89
|
+
if (!serviceNs) return undefined;
|
|
90
|
+
const fullName = getFullName(serviceNs);
|
|
91
|
+
return getCSharpIdentifier(fullName, NameCasingType.Namespace);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=service-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isStdNamespace","isTemplateDeclaration","getCSharpIdentifier","NameCasingType","getServiceInterfaces","program","interfaces","globalNs","getGlobalNamespaceType","collectFromNamespace","ns","iface","values","name","includes","push","operations","size","nsOps","op","length","syntheticIface","checker","createAndFinishType","sourceInterfaces","decorators","Map","kind","namespace","entityKind","isFinished","_","interface","childNs","namespaces","getServiceNamespaceName","getFullName","parts","current","unshift","join","findServiceNs","child","hasContent","models","enums","deeper","undefined","serviceNs","fullName","Namespace"],"sources":["../../src/service-discovery.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Enum, type Interface, type Model, type Program, type Namespace as TspNamespace, type Union } from "@typespec/compiler";
|
|
2
|
+
import type { Typekit } from "@typespec/compiler/typekit";
|
|
3
|
+
import type { HttpCanonicalizer, OperationHttpCanonicalization } from "@typespec/http-canonicalization";
|
|
4
|
+
/** All resolved service types, computed once before rendering. */
|
|
5
|
+
export interface ServiceTypeResolution {
|
|
6
|
+
/** The service namespace (first non-std namespace with content). */
|
|
7
|
+
serviceNamespace: TspNamespace | undefined;
|
|
8
|
+
/** The C#-normalized service namespace name. */
|
|
9
|
+
serviceNamespaceName: string | undefined;
|
|
10
|
+
/** All service interfaces (including synthetic ones for namespace-level operations). */
|
|
11
|
+
interfaces: Interface[];
|
|
12
|
+
/** All models to emit (namespace-level + operation-referenced). */
|
|
13
|
+
models: Model[];
|
|
14
|
+
/** All named enums from service namespaces. */
|
|
15
|
+
enums: Enum[];
|
|
16
|
+
/** All named unions that qualify as C# string enums. */
|
|
17
|
+
unionEnums: Union[];
|
|
18
|
+
/** Canonicalized HTTP operations per interface. */
|
|
19
|
+
canonicalOpsMap: Map<string, OperationHttpCanonicalization[]>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resolves all service types in a single pass, eliminating redundant
|
|
23
|
+
* namespace traversals that previously occurred in individual components.
|
|
24
|
+
*
|
|
25
|
+
* Ordering:
|
|
26
|
+
* 1. Service namespace discovery
|
|
27
|
+
* 2. Interface collection (including synthetic interfaces for namespace-level ops)
|
|
28
|
+
* 3. Anonymous response model naming (depends on interfaces)
|
|
29
|
+
* 4. Enum and union-enum collection
|
|
30
|
+
* 5. Model discovery (walks operations from interfaces + namespace models)
|
|
31
|
+
* 6. Canonicalization of HTTP operations
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveServiceTypes(program: Program, $: Typekit, canonicalizer: HttpCanonicalizer): ServiceTypeResolution;
|
|
34
|
+
//# sourceMappingURL=service-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-resolution.d.ts","sourceRoot":"","sources":["../../src/service-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,YAAY,EAE9B,KAAK,KAAK,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,EACV,iBAAiB,EACjB,6BAA6B,EAC9B,MAAM,iCAAiC,CAAC;AASzC,kEAAkE;AAClE,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,gDAAgD;IAChD,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,wFAAwF;IACxF,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,mEAAmE;IACnE,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,wDAAwD;IACxD,UAAU,EAAE,KAAK,EAAE,CAAC;IACpB,mDAAmD;IACnD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,CAAC,EAAE,OAAO,EACV,aAAa,EAAE,iBAAiB,GAC/B,qBAAqB,CAmCvB"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { getNamespaceFullName, isStdNamespace, isTemplateDeclaration } from "@typespec/compiler";
|
|
2
|
+
import { isUnionEnum } from "./components/enums/enums.js";
|
|
3
|
+
import { preAssignAnonymousResponseNames, resetAnonymousModels } from "./components/models/anonymous-models.js";
|
|
4
|
+
import { getServiceInterfaces, getServiceNamespaceName } from "./service-discovery.js";
|
|
5
|
+
import { findServiceNamespace } from "./utils/namespace-utils.js";
|
|
6
|
+
|
|
7
|
+
/** All resolved service types, computed once before rendering. */
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Resolves all service types in a single pass, eliminating redundant
|
|
11
|
+
* namespace traversals that previously occurred in individual components.
|
|
12
|
+
*
|
|
13
|
+
* Ordering:
|
|
14
|
+
* 1. Service namespace discovery
|
|
15
|
+
* 2. Interface collection (including synthetic interfaces for namespace-level ops)
|
|
16
|
+
* 3. Anonymous response model naming (depends on interfaces)
|
|
17
|
+
* 4. Enum and union-enum collection
|
|
18
|
+
* 5. Model discovery (walks operations from interfaces + namespace models)
|
|
19
|
+
* 6. Canonicalization of HTTP operations
|
|
20
|
+
*/
|
|
21
|
+
export function resolveServiceTypes(program, $, canonicalizer) {
|
|
22
|
+
resetAnonymousModels();
|
|
23
|
+
const globalNs = program.getGlobalNamespaceType();
|
|
24
|
+
|
|
25
|
+
// Phase 1: Service namespace
|
|
26
|
+
const serviceNamespace = findServiceNamespace(globalNs);
|
|
27
|
+
const serviceNamespaceName = getServiceNamespaceName(program);
|
|
28
|
+
|
|
29
|
+
// Phase 2: Interfaces (includes synthetic ones for namespace-level operations)
|
|
30
|
+
const interfaces = getServiceInterfaces(program);
|
|
31
|
+
|
|
32
|
+
// Phase 3: Pre-assign contextual names to anonymous response models
|
|
33
|
+
preAssignAnonymousResponseNames(interfaces);
|
|
34
|
+
|
|
35
|
+
// Phase 4: Enums and union-enums from all non-std namespaces
|
|
36
|
+
const enums = [];
|
|
37
|
+
const unionEnums = [];
|
|
38
|
+
collectEnumsFromNamespaces(globalNs, enums, unionEnums);
|
|
39
|
+
|
|
40
|
+
// Phase 5: Model discovery (namespace models + operation-referenced models)
|
|
41
|
+
const models = getServiceModels($, globalNs);
|
|
42
|
+
|
|
43
|
+
// Phase 6: Canonicalize all HTTP operations
|
|
44
|
+
const canonicalOpsMap = canonicalizeAllInterfaces(canonicalizer, interfaces);
|
|
45
|
+
return {
|
|
46
|
+
serviceNamespace,
|
|
47
|
+
serviceNamespaceName,
|
|
48
|
+
interfaces,
|
|
49
|
+
models,
|
|
50
|
+
enums,
|
|
51
|
+
unionEnums,
|
|
52
|
+
canonicalOpsMap
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Collects all enums and union-enums from non-std namespaces in a single walk.
|
|
58
|
+
*/
|
|
59
|
+
function collectEnumsFromNamespaces(globalNs, enums, unionEnums) {
|
|
60
|
+
const seenEnums = new Set();
|
|
61
|
+
const seenUnions = new Set();
|
|
62
|
+
function walk(ns) {
|
|
63
|
+
for (const en of ns.enums?.values() ?? []) {
|
|
64
|
+
if (!seenEnums.has(en) && en.name) {
|
|
65
|
+
seenEnums.add(en);
|
|
66
|
+
enums.push(en);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const union of ns.unions?.values() ?? []) {
|
|
70
|
+
if (!seenUnions.has(union) && isUnionEnum(union)) {
|
|
71
|
+
seenUnions.add(union);
|
|
72
|
+
unionEnums.push(union);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const childNs of ns.namespaces?.values() ?? []) {
|
|
76
|
+
if (isStdNamespace(childNs)) continue;
|
|
77
|
+
walk(childNs);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
walk(globalNs);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Canonicalize all operations for each interface, skipping any that fail.
|
|
85
|
+
*/
|
|
86
|
+
function canonicalizeAllInterfaces(canonicalizer, interfaces) {
|
|
87
|
+
const result = new Map();
|
|
88
|
+
for (const iface of interfaces) {
|
|
89
|
+
const ops = [];
|
|
90
|
+
for (const [, op] of iface.operations) {
|
|
91
|
+
try {
|
|
92
|
+
ops.push(canonicalizer.canonicalize(op));
|
|
93
|
+
} catch {
|
|
94
|
+
// Skip operations that can't be canonicalized
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
result.set(iface.name, ops);
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ── Model discovery ─────────────────────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Retrieves all models from the program that should be emitted.
|
|
106
|
+
* Includes namespace-level models AND models referenced by operations.
|
|
107
|
+
*/
|
|
108
|
+
function getServiceModels($, globalNs) {
|
|
109
|
+
const models = [];
|
|
110
|
+
const seen = new Set();
|
|
111
|
+
function addModel(model) {
|
|
112
|
+
if (seen.has(model)) return;
|
|
113
|
+
seen.add(model);
|
|
114
|
+
if (shouldEmitModel($, model)) {
|
|
115
|
+
models.push(model);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Collect from namespaces
|
|
120
|
+
for (const model of globalNs.models.values()) {
|
|
121
|
+
addModel(model);
|
|
122
|
+
}
|
|
123
|
+
for (const ns of globalNs.namespaces.values()) {
|
|
124
|
+
if (isStdNamespace(ns)) continue;
|
|
125
|
+
collectModelsFromNamespace($, ns, models, seen);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Walk operations to discover referenced models (template instantiations, etc.)
|
|
129
|
+
const visited = new Set();
|
|
130
|
+
for (const ns of globalNs.namespaces.values()) {
|
|
131
|
+
if (isStdNamespace(ns)) continue;
|
|
132
|
+
discoverReferencedModels($, ns, addModel, visited);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Walk all collected model properties to discover anonymous sub-models
|
|
136
|
+
const modelsSnapshot = [...models];
|
|
137
|
+
for (const model of modelsSnapshot) {
|
|
138
|
+
for (const prop of model.properties.values()) {
|
|
139
|
+
discoverModelsInType($, prop.type, addModel, visited);
|
|
140
|
+
}
|
|
141
|
+
if (model.baseModel) {
|
|
142
|
+
discoverModelsInType($, model.baseModel, addModel, visited);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return models;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Walks operations in a namespace to discover referenced model types. */
|
|
149
|
+
function discoverReferencedModels($, ns, addModel, visited) {
|
|
150
|
+
for (const op of ns.operations?.values() ?? []) {
|
|
151
|
+
discoverModelsInType($, op.returnType, addModel, visited);
|
|
152
|
+
for (const param of op.parameters?.properties?.values() ?? []) {
|
|
153
|
+
discoverModelsInType($, param.type, addModel, visited);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (const iface of ns.interfaces?.values() ?? []) {
|
|
157
|
+
for (const op of iface.operations?.values() ?? []) {
|
|
158
|
+
discoverModelsInType($, op.returnType, addModel, visited);
|
|
159
|
+
for (const param of op.parameters?.properties?.values() ?? []) {
|
|
160
|
+
discoverModelsInType($, param.type, addModel, visited);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
for (const childNs of ns.namespaces?.values() ?? []) {
|
|
165
|
+
if (isStdNamespace(childNs)) continue;
|
|
166
|
+
discoverReferencedModels($, childNs, addModel, visited);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Recursively discovers models referenced by a type. */
|
|
171
|
+
function discoverModelsInType($, type, addModel, visited) {
|
|
172
|
+
if (visited.has(type)) return;
|
|
173
|
+
visited.add(type);
|
|
174
|
+
if (type.kind === "Model") {
|
|
175
|
+
if ($.array.is(type)) {
|
|
176
|
+
if (type.indexer?.value) {
|
|
177
|
+
discoverModelsInType($, type.indexer.value, addModel, visited);
|
|
178
|
+
}
|
|
179
|
+
} else if (!$.record.is(type)) {
|
|
180
|
+
addModel(type);
|
|
181
|
+
for (const prop of type.properties.values()) {
|
|
182
|
+
discoverModelsInType($, prop.type, addModel, visited);
|
|
183
|
+
}
|
|
184
|
+
if (type.baseModel) {
|
|
185
|
+
discoverModelsInType($, type.baseModel, addModel, visited);
|
|
186
|
+
}
|
|
187
|
+
if (type.templateMapper) {
|
|
188
|
+
for (const arg of type.templateMapper.args) {
|
|
189
|
+
if (arg.entityKind === "Type") {
|
|
190
|
+
discoverModelsInType($, arg, addModel, visited);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
} else if (type.kind === "Union") {
|
|
196
|
+
for (const variant of type.variants.values()) {
|
|
197
|
+
discoverModelsInType($, variant.type, addModel, visited);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function collectModelsFromNamespace($, ns, models, seen) {
|
|
202
|
+
for (const model of ns.models?.values() ?? []) {
|
|
203
|
+
if (!seen.has(model) && shouldEmitModel($, model)) {
|
|
204
|
+
seen.add(model);
|
|
205
|
+
models.push(model);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
for (const childNs of ns.namespaces?.values() ?? []) {
|
|
209
|
+
collectModelsFromNamespace($, childNs, models, seen);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function shouldEmitModel($, model) {
|
|
213
|
+
if (model.name === "") return true;
|
|
214
|
+
if (!model.name) return false;
|
|
215
|
+
if ($.array.is(model)) return false;
|
|
216
|
+
if ($.record.is(model)) return false;
|
|
217
|
+
if (isTemplateDeclaration(model)) return false;
|
|
218
|
+
if (model.name === "HttpPart" && model.templateMapper) return false;
|
|
219
|
+
if (isMultipartBodyContainer(model)) return false;
|
|
220
|
+
if (model.templateMapper) return true;
|
|
221
|
+
if (model.namespace && isStdNamespace(model.namespace)) return false;
|
|
222
|
+
const nsName = model.namespace ? getNamespaceFullName(model.namespace) : "";
|
|
223
|
+
if (nsName.startsWith("TypeSpec.Http") || nsName.startsWith("TypeSpec.Rest")) return false;
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/** Detects models whose properties are all HttpPart<T>. */
|
|
228
|
+
function isMultipartBodyContainer(model) {
|
|
229
|
+
if (model.properties.size === 0) return false;
|
|
230
|
+
for (const prop of model.properties.values()) {
|
|
231
|
+
if (isHttpPartType(prop.type)) continue;
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
function isHttpPartType(type) {
|
|
237
|
+
if (type.kind !== "Model") return false;
|
|
238
|
+
if (type.name === "HttpPart" && type.templateMapper) return true;
|
|
239
|
+
if (type.indexer?.value) {
|
|
240
|
+
return isHttpPartType(type.indexer.value);
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=service-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getNamespaceFullName","isStdNamespace","isTemplateDeclaration","isUnionEnum","preAssignAnonymousResponseNames","resetAnonymousModels","getServiceInterfaces","getServiceNamespaceName","findServiceNamespace","resolveServiceTypes","program","$","canonicalizer","globalNs","getGlobalNamespaceType","serviceNamespace","serviceNamespaceName","interfaces","enums","unionEnums","collectEnumsFromNamespaces","models","getServiceModels","canonicalOpsMap","canonicalizeAllInterfaces","seenEnums","Set","seenUnions","walk","ns","en","values","has","name","add","push","union","unions","childNs","namespaces","result","Map","iface","ops","op","operations","canonicalize","set","seen","addModel","model","shouldEmitModel","collectModelsFromNamespace","visited","discoverReferencedModels","modelsSnapshot","prop","properties","discoverModelsInType","type","baseModel","returnType","param","parameters","kind","array","is","indexer","value","record","templateMapper","arg","args","entityKind","variant","variants","isMultipartBodyContainer","namespace","nsName","startsWith","size","isHttpPartType"],"sources":["../../src/service-resolution.ts"],"sourcesContent":[null],"mappings":"AAAA,SACEA,oBAAoB,EACpBC,cAAc,EACdC,qBAAqB,QAQhB,oBAAoB;AAM3B,SAASC,WAAW;AACpB,SACEC,+BAA+B,EAC/BC,oBAAoB,QACf,yCAAyC;AAChD,SAASC,oBAAoB,EAAEC,uBAAuB,QAAQ,wBAAwB;AACtF,SAASC,oBAAoB,QAAQ,4BAA4B;;AAEjE;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAmBA,CACjCC,OAAgB,EAChBC,CAAU,EACVC,aAAgC,EACT;EACvBP,oBAAoB,CAAC,CAAC;EAEtB,MAAMQ,QAAQ,GAAGH,OAAO,CAACI,sBAAsB,CAAC,CAAC;;EAEjD;EACA,MAAMC,gBAAgB,GAAGP,oBAAoB,CAACK,QAAQ,CAAC;EACvD,MAAMG,oBAAoB,GAAGT,uBAAuB,CAACG,OAAO,CAAC;;EAE7D;EACA,MAAMO,UAAU,GAAGX,oBAAoB,CAACI,OAAO,CAAC;;EAEhD;EACAN,+BAA+B,CAACa,UAAU,CAAC;;EAE3C;EACA,MAAMC,KAAa,GAAG,EAAE;EACxB,MAAMC,UAAmB,GAAG,EAAE;EAC9BC,0BAA0B,CAACP,QAAQ,EAAEK,KAAK,EAAEC,UAAU,CAAC;;EAEvD;EACA,MAAME,MAAM,GAAGC,gBAAgB,CAACX,CAAC,EAAEE,QAAQ,CAAC;;EAE5C;EACA,MAAMU,eAAe,GAAGC,yBAAyB,CAACZ,aAAa,EAAEK,UAAU,CAAC;EAE5E,OAAO;IACLF,gBAAgB;IAChBC,oBAAoB;IACpBC,UAAU;IACVI,MAAM;IACNH,KAAK;IACLC,UAAU;IACVI;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAASH,0BAA0BA,CACjCP,QAAsB,EACtBK,KAAa,EACbC,UAAmB,EACb;EACN,MAAMM,SAAS,GAAG,IAAIC,GAAG,CAAO,CAAC;EACjC,MAAMC,UAAU,GAAG,IAAID,GAAG,CAAQ,CAAC;EAEnC,SAASE,IAAIA,CAACC,EAAgB,EAAQ;IACpC,KAAK,MAAMC,EAAE,IAAID,EAAE,CAACX,KAAK,EAAEa,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACzC,IAAI,CAACN,SAAS,CAACO,GAAG,CAACF,EAAE,CAAC,IAAIA,EAAE,CAACG,IAAI,EAAE;QACjCR,SAAS,CAACS,GAAG,CAACJ,EAAE,CAAC;QACjBZ,KAAK,CAACiB,IAAI,CAACL,EAAE,CAAC;MAChB;IACF;IACA,KAAK,MAAMM,KAAK,IAAIP,EAAE,CAACQ,MAAM,EAAEN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MAC7C,IAAI,CAACJ,UAAU,CAACK,GAAG,CAACI,KAAK,CAAC,IAAIjC,WAAW,CAACiC,KAAK,CAAC,EAAE;QAChDT,UAAU,CAACO,GAAG,CAACE,KAAK,CAAC;QACrBjB,UAAU,CAACgB,IAAI,CAACC,KAAK,CAAC;MACxB;IACF;IACA,KAAK,MAAME,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACnD,IAAI9B,cAAc,CAACqC,OAAO,CAAC,EAAE;MAC7BV,IAAI,CAACU,OAAO,CAAC;IACf;EACF;EAEAV,IAAI,CAACf,QAAQ,CAAC;AAChB;;AAEA;AACA;AACA;AACA,SAASW,yBAAyBA,CAChCZ,aAAgC,EAChCK,UAAuB,EACuB;EAC9C,MAAMuB,MAAM,GAAG,IAAIC,GAAG,CAA0C,CAAC;EACjE,KAAK,MAAMC,KAAK,IAAIzB,UAAU,EAAE;IAC9B,MAAM0B,GAAoC,GAAG,EAAE;IAC/C,KAAK,MAAM,GAAGC,EAAE,CAAC,IAAIF,KAAK,CAACG,UAAU,EAAE;MACrC,IAAI;QACFF,GAAG,CAACR,IAAI,CAACvB,aAAa,CAACkC,YAAY,CAACF,EAAE,CAAkC,CAAC;MAC3E,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ;IACAJ,MAAM,CAACO,GAAG,CAACL,KAAK,CAACT,IAAI,EAAEU,GAAG,CAAC;EAC7B;EACA,OAAOH,MAAM;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAASlB,gBAAgBA,CAACX,CAAU,EAAEE,QAAsB,EAAW;EACrE,MAAMQ,MAAe,GAAG,EAAE;EAC1B,MAAM2B,IAAI,GAAG,IAAItB,GAAG,CAAQ,CAAC;EAE7B,SAASuB,QAAQA,CAACC,KAAY,EAAE;IAC9B,IAAIF,IAAI,CAAChB,GAAG,CAACkB,KAAK,CAAC,EAAE;IACrBF,IAAI,CAACd,GAAG,CAACgB,KAAK,CAAC;IACf,IAAIC,eAAe,CAACxC,CAAC,EAAEuC,KAAK,CAAC,EAAE;MAC7B7B,MAAM,CAACc,IAAI,CAACe,KAAK,CAAC;IACpB;EACF;;EAEA;EACA,KAAK,MAAMA,KAAK,IAAIrC,QAAQ,CAACQ,MAAM,CAACU,MAAM,CAAC,CAAC,EAAE;IAC5CkB,QAAQ,CAACC,KAAK,CAAC;EACjB;EACA,KAAK,MAAMrB,EAAE,IAAIhB,QAAQ,CAAC0B,UAAU,CAACR,MAAM,CAAC,CAAC,EAAE;IAC7C,IAAI9B,cAAc,CAAC4B,EAAE,CAAC,EAAE;IACxBuB,0BAA0B,CAACzC,CAAC,EAAEkB,EAAE,EAAER,MAAM,EAAE2B,IAAI,CAAC;EACjD;;EAEA;EACA,MAAMK,OAAO,GAAG,IAAI3B,GAAG,CAAO,CAAC;EAC/B,KAAK,MAAMG,EAAE,IAAIhB,QAAQ,CAAC0B,UAAU,CAACR,MAAM,CAAC,CAAC,EAAE;IAC7C,IAAI9B,cAAc,CAAC4B,EAAE,CAAC,EAAE;IACxByB,wBAAwB,CAAC3C,CAAC,EAAEkB,EAAE,EAAEoB,QAAQ,EAAEI,OAAO,CAAC;EACpD;;EAEA;EACA,MAAME,cAAc,GAAG,CAAC,GAAGlC,MAAM,CAAC;EAClC,KAAK,MAAM6B,KAAK,IAAIK,cAAc,EAAE;IAClC,KAAK,MAAMC,IAAI,IAAIN,KAAK,CAACO,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;MAC5C2B,oBAAoB,CAAC/C,CAAC,EAAE6C,IAAI,CAACG,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IACvD;IACA,IAAIH,KAAK,CAACU,SAAS,EAAE;MACnBF,oBAAoB,CAAC/C,CAAC,EAAEuC,KAAK,CAACU,SAAS,EAAEX,QAAQ,EAAEI,OAAO,CAAC;IAC7D;EACF;EAEA,OAAOhC,MAAM;AACf;;AAEA;AACA,SAASiC,wBAAwBA,CAC/B3C,CAAU,EACVkB,EAAgB,EAChBoB,QAA4B,EAC5BI,OAAkB,EACZ;EACN,KAAK,MAAMT,EAAE,IAAIf,EAAE,CAACgB,UAAU,EAAEd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAC9C2B,oBAAoB,CAAC/C,CAAC,EAAEiC,EAAE,CAACiB,UAAU,EAAEZ,QAAQ,EAAEI,OAAO,CAAC;IACzD,KAAK,MAAMS,KAAK,IAAIlB,EAAE,CAACmB,UAAU,EAAEN,UAAU,EAAE1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MAC7D2B,oBAAoB,CAAC/C,CAAC,EAAEmD,KAAK,CAACH,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IACxD;EACF;EACA,KAAK,MAAMX,KAAK,IAAIb,EAAE,CAACZ,UAAU,EAAEc,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACjD,KAAK,MAAMa,EAAE,IAAIF,KAAK,CAACG,UAAU,EAAEd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;MACjD2B,oBAAoB,CAAC/C,CAAC,EAAEiC,EAAE,CAACiB,UAAU,EAAEZ,QAAQ,EAAEI,OAAO,CAAC;MACzD,KAAK,MAAMS,KAAK,IAAIlB,EAAE,CAACmB,UAAU,EAAEN,UAAU,EAAE1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7D2B,oBAAoB,CAAC/C,CAAC,EAAEmD,KAAK,CAACH,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;MACxD;IACF;EACF;EACA,KAAK,MAAMf,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACnD,IAAI9B,cAAc,CAACqC,OAAO,CAAC,EAAE;IAC7BgB,wBAAwB,CAAC3C,CAAC,EAAE2B,OAAO,EAAEW,QAAQ,EAAEI,OAAO,CAAC;EACzD;AACF;;AAEA;AACA,SAASK,oBAAoBA,CAC3B/C,CAAU,EACVgD,IAAU,EACVV,QAA4B,EAC5BI,OAAkB,EACZ;EACN,IAAIA,OAAO,CAACrB,GAAG,CAAC2B,IAAI,CAAC,EAAE;EACvBN,OAAO,CAACnB,GAAG,CAACyB,IAAI,CAAC;EAEjB,IAAIA,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE;IACzB,IAAIrD,CAAC,CAACsD,KAAK,CAACC,EAAE,CAACP,IAAI,CAAC,EAAE;MACpB,IAAIA,IAAI,CAACQ,OAAO,EAAEC,KAAK,EAAE;QACvBV,oBAAoB,CAAC/C,CAAC,EAAEgD,IAAI,CAACQ,OAAO,CAACC,KAAK,EAAEnB,QAAQ,EAAEI,OAAO,CAAC;MAChE;IACF,CAAC,MAAM,IAAI,CAAC1C,CAAC,CAAC0D,MAAM,CAACH,EAAE,CAACP,IAAI,CAAC,EAAE;MAC7BV,QAAQ,CAACU,IAAI,CAAC;MACd,KAAK,MAAMH,IAAI,IAAIG,IAAI,CAACF,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;QAC3C2B,oBAAoB,CAAC/C,CAAC,EAAE6C,IAAI,CAACG,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;MACvD;MACA,IAAIM,IAAI,CAACC,SAAS,EAAE;QAClBF,oBAAoB,CAAC/C,CAAC,EAAEgD,IAAI,CAACC,SAAS,EAAEX,QAAQ,EAAEI,OAAO,CAAC;MAC5D;MACA,IAAIM,IAAI,CAACW,cAAc,EAAE;QACvB,KAAK,MAAMC,GAAG,IAAIZ,IAAI,CAACW,cAAc,CAACE,IAAI,EAAE;UAC1C,IAAID,GAAG,CAACE,UAAU,KAAK,MAAM,EAAE;YAC7Bf,oBAAoB,CAAC/C,CAAC,EAAE4D,GAAG,EAAEtB,QAAQ,EAAEI,OAAO,CAAC;UACjD;QACF;MACF;IACF;EACF,CAAC,MAAM,IAAIM,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE;IAChC,KAAK,MAAMU,OAAO,IAAIf,IAAI,CAACgB,QAAQ,CAAC5C,MAAM,CAAC,CAAC,EAAE;MAC5C2B,oBAAoB,CAAC/C,CAAC,EAAE+D,OAAO,CAACf,IAAI,EAAEV,QAAQ,EAAEI,OAAO,CAAC;IAC1D;EACF;AACF;AAEA,SAASD,0BAA0BA,CACjCzC,CAAU,EACVkB,EAAgB,EAChBR,MAAe,EACf2B,IAAgB,EACV;EACN,KAAK,MAAME,KAAK,IAAIrB,EAAE,CAACR,MAAM,EAAEU,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IAC7C,IAAI,CAACiB,IAAI,CAAChB,GAAG,CAACkB,KAAK,CAAC,IAAIC,eAAe,CAACxC,CAAC,EAAEuC,KAAK,CAAC,EAAE;MACjDF,IAAI,CAACd,GAAG,CAACgB,KAAK,CAAC;MACf7B,MAAM,CAACc,IAAI,CAACe,KAAK,CAAC;IACpB;EACF;EACA,KAAK,MAAMZ,OAAO,IAAIT,EAAE,CAACU,UAAU,EAAER,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACnDqB,0BAA0B,CAACzC,CAAC,EAAE2B,OAAO,EAAEjB,MAAM,EAAE2B,IAAI,CAAC;EACtD;AACF;AAEA,SAASG,eAAeA,CAACxC,CAAU,EAAEuC,KAAY,EAAW;EAC1D,IAAIA,KAAK,CAACjB,IAAI,KAAK,EAAE,EAAE,OAAO,IAAI;EAClC,IAAI,CAACiB,KAAK,CAACjB,IAAI,EAAE,OAAO,KAAK;EAC7B,IAAItB,CAAC,CAACsD,KAAK,CAACC,EAAE,CAAChB,KAAK,CAAC,EAAE,OAAO,KAAK;EACnC,IAAIvC,CAAC,CAAC0D,MAAM,CAACH,EAAE,CAAChB,KAAK,CAAC,EAAE,OAAO,KAAK;EACpC,IAAIhD,qBAAqB,CAACgD,KAAK,CAAC,EAAE,OAAO,KAAK;EAC9C,IAAIA,KAAK,CAACjB,IAAI,KAAK,UAAU,IAAIiB,KAAK,CAACoB,cAAc,EAAE,OAAO,KAAK;EACnE,IAAIM,wBAAwB,CAAC1B,KAAK,CAAC,EAAE,OAAO,KAAK;EACjD,IAAIA,KAAK,CAACoB,cAAc,EAAE,OAAO,IAAI;EACrC,IAAIpB,KAAK,CAAC2B,SAAS,IAAI5E,cAAc,CAACiD,KAAK,CAAC2B,SAAS,CAAC,EAAE,OAAO,KAAK;EACpE,MAAMC,MAAM,GAAG5B,KAAK,CAAC2B,SAAS,GAAG7E,oBAAoB,CAACkD,KAAK,CAAC2B,SAAS,CAAC,GAAG,EAAE;EAC3E,IAAIC,MAAM,CAACC,UAAU,CAAC,eAAe,CAAC,IAAID,MAAM,CAACC,UAAU,CAAC,eAAe,CAAC,EAAE,OAAO,KAAK;EAC1F,OAAO,IAAI;AACb;;AAEA;AACA,SAASH,wBAAwBA,CAAC1B,KAAY,EAAW;EACvD,IAAIA,KAAK,CAACO,UAAU,CAACuB,IAAI,KAAK,CAAC,EAAE,OAAO,KAAK;EAC7C,KAAK,MAAMxB,IAAI,IAAIN,KAAK,CAACO,UAAU,CAAC1B,MAAM,CAAC,CAAC,EAAE;IAC5C,IAAIkD,cAAc,CAACzB,IAAI,CAACG,IAAI,CAAC,EAAE;IAC/B,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb;AAEA,SAASsB,cAAcA,CAACtB,IAAU,EAAW;EAC3C,IAAIA,IAAI,CAACK,IAAI,KAAK,OAAO,EAAE,OAAO,KAAK;EACvC,IAAIL,IAAI,CAAC1B,IAAI,KAAK,UAAU,IAAI0B,IAAI,CAACW,cAAc,EAAE,OAAO,IAAI;EAChE,IAAIX,IAAI,CAACQ,OAAO,EAAEC,KAAK,EAAE;IACvB,OAAOa,cAAc,CAACtB,IAAI,CAACQ,OAAO,CAACC,KAAK,CAAC;EAC3C;EACA,OAAO,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["$lib"],"sources":["../../../src/testing/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,IAAI,QAAQ,WAAW","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Children } from "@alloy-js/core";
|
|
2
|
+
import { type ModelProperty, type Program } from "@typespec/compiler";
|
|
3
|
+
/**
|
|
4
|
+
* Get all C# attributes for a model property.
|
|
5
|
+
* Returns an array of attribute strings like `[JsonConverter(typeof(TimeSpanDurationConverter))]`
|
|
6
|
+
*/
|
|
7
|
+
export declare function getPropertyAttributes(program: Program, property: ModelProperty): Children[];
|
|
8
|
+
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/utils/attributes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAaL,KAAK,aAAa,EAClB,KAAK,OAAO,EAGb,MAAM,oBAAoB,CAAC;AAgE5B;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,QAAQ,EAAE,CAyC3F"}
|