@azure-tools/typespec-azure-examples 0.2.0-dev.2 → 0.2.0-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/README.md +30 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/legacy-expand-cli.d.ts +3 -0
- package/dist/src/legacy-expand-cli.d.ts.map +1 -0
- package/dist/src/legacy-expand-cli.js +59 -0
- package/dist/src/legacy-expand-cli.js.map +1 -0
- package/dist/src/legacy.d.ts +29 -0
- package/dist/src/legacy.d.ts.map +1 -0
- package/dist/src/legacy.js +32 -0
- package/dist/src/legacy.js.map +1 -0
- package/dist/src/migrate/emit.js.map +1 -1
- package/dist/src/migrate/migrate.js.map +1 -1
- package/dist/src/migrate/swagger-types.d.ts.map +1 -1
- package/dist/src/resolve/index.d.ts +10 -0
- package/dist/src/resolve/index.d.ts.map +1 -0
- package/dist/src/resolve/index.js +10 -0
- package/dist/src/resolve/index.js.map +1 -0
- package/dist/src/resolve/legacy.d.ts +25 -0
- package/dist/src/resolve/legacy.d.ts.map +1 -0
- package/dist/src/resolve/legacy.js +93 -0
- package/dist/src/resolve/legacy.js.map +1 -0
- package/dist/src/resolve/materialize.d.ts +3 -0
- package/dist/src/resolve/materialize.d.ts.map +1 -0
- package/dist/src/resolve/materialize.js +21 -0
- package/dist/src/resolve/materialize.js.map +1 -0
- package/dist/src/resolve/resolve-dir.d.ts +14 -0
- package/dist/src/resolve/resolve-dir.d.ts.map +1 -0
- package/dist/src/resolve/resolve-dir.js +23 -0
- package/dist/src/resolve/resolve-dir.js.map +1 -0
- package/dist/src/resolve/resolve.d.ts +26 -0
- package/dist/src/resolve/resolve.d.ts.map +1 -0
- package/dist/src/resolve/resolve.js +62 -0
- package/dist/src/resolve/resolve.js.map +1 -0
- package/dist/src/resolve/select.d.ts +18 -0
- package/dist/src/resolve/select.d.ts.map +1 -0
- package/dist/src/resolve/select.js +32 -0
- package/dist/src/resolve/select.js.map +1 -0
- package/dist/src/validate.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @azure-tools/typespec-azure-examples
|
|
2
2
|
|
|
3
3
|
Tooling for the Azure **unified examples format** (`examples.yaml`): the published JSON Schema
|
|
4
|
-
and the `tsp-examples` CLI, plus the transitional `tsp-examples-migrate`
|
|
4
|
+
and the `tsp-examples` CLI, plus the transitional `tsp-examples-migrate` and
|
|
5
|
+
`tsp-examples-legacy-expand` tools.
|
|
5
6
|
|
|
6
7
|
The unified examples format replaces the ~282K per-version `x-ms-examples` JSON files with a
|
|
7
8
|
single version-aware `examples.yaml` per service (or `examples/<Interface>.yaml` for large
|
|
@@ -113,6 +114,31 @@ lineage with an `example-removed-before-latest` **warning** so the author can co
|
|
|
113
114
|
applies to later versions, or delete it. Services that rely on removing examples across versions are
|
|
114
115
|
not yet fully supported.
|
|
115
116
|
|
|
117
|
+
## `tsp-examples-legacy-expand`
|
|
118
|
+
|
|
119
|
+
> **Transitional tool.** Expands the unified format back into the classic per-version examples so
|
|
120
|
+
> downstream consumers keep working during rollout; it will be removed once consumers read
|
|
121
|
+
> `examples.yaml` directly.
|
|
122
|
+
|
|
123
|
+
Expand the unified examples into the concrete example for each operation at a target API version:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
tsp-examples-legacy-expand <service-dir> --api-version <version>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
It reads the linear version order from the adjacent `service.yaml`, discovers `examples.yaml` /
|
|
130
|
+
`examples/*.yaml`, and for each operation lineage selects the entry with the greatest `since` that
|
|
131
|
+
is `<=` the target (the base entry applies from the earliest version). The `{api-version}`
|
|
132
|
+
placeholder is substituted with the target version, and each resolved example is reconstructed into a
|
|
133
|
+
classic `x-ms-examples` document — the `title`/`operationId` envelope and the flat `parameters` bag
|
|
134
|
+
(with `api-version` re-added and the body under its Swagger parameter name), read from the service's
|
|
135
|
+
Swagger. Files are named by their preserved `legacyFilename` (or the conventional
|
|
136
|
+
`<OperationId>.json`). With `--out <dir>` each document is written as a separate JSON file; otherwise
|
|
137
|
+
a `filename → document` map is printed. Operations with no matching Swagger operation are reported
|
|
138
|
+
and skipped.
|
|
139
|
+
|
|
140
|
+
Options: `--api-version <v>` (required), `--out <dir>`.
|
|
141
|
+
|
|
116
142
|
## API
|
|
117
143
|
|
|
118
144
|
```ts
|
|
@@ -121,9 +147,12 @@ import {
|
|
|
121
147
|
validateExampleFiles,
|
|
122
148
|
loadExampleFile,
|
|
123
149
|
migrate,
|
|
150
|
+
resolveExamplesDir,
|
|
124
151
|
} from "@azure-tools/typespec-azure-examples";
|
|
125
152
|
|
|
126
153
|
const { diagnostics } = await validateExamplesDir("path/to/service");
|
|
127
154
|
|
|
128
155
|
const { files } = await migrate("path/to/specs", { namespace: "Microsoft.EventGrid" });
|
|
156
|
+
|
|
157
|
+
const { examples } = await resolveExamplesDir("path/to/service", "2024-06-01");
|
|
129
158
|
```
|
package/dist/src/index.d.ts
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* used by the `tsp-examples validate` command.
|
|
5
5
|
*/
|
|
6
6
|
export { discoverExampleFiles, validateExamplesDir, type ValidateDirResult } from "./discover.js";
|
|
7
|
+
export { materializeLegacyExample, type LegacyExample } from "./legacy.js";
|
|
7
8
|
export { isQuotedScalar, loadExampleFile, locationAt, parseServiceVersions, positionAt, type LoadedExampleFile, type Position, } from "./loader.js";
|
|
8
9
|
export * from "./migrate/index.js";
|
|
9
10
|
export { defaultLegacyExampleFilename, slugify, stripJsonExtension } from "./naming.js";
|
|
10
11
|
export { formatDiagnostics, formatSummary } from "./reporter.js";
|
|
12
|
+
export * from "./resolve/index.js";
|
|
11
13
|
export { checkFilePlacement, checkSemantics, type SemanticContext } from "./rules.js";
|
|
12
14
|
export { ExamplesYamlSchema } from "./schema.js";
|
|
13
15
|
export type { DiagnosticSeverity, ExampleDiagnostic, ExampleRequest, ExampleResponse, ExampleVariant, ServiceVersions, } from "./types.js";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* used by the `tsp-examples validate` command.
|
|
5
5
|
*/
|
|
6
6
|
export { discoverExampleFiles, validateExamplesDir } from "./discover.js";
|
|
7
|
+
export { materializeLegacyExample } from "./legacy.js";
|
|
7
8
|
export { isQuotedScalar, loadExampleFile, locationAt, parseServiceVersions, positionAt, } from "./loader.js";
|
|
8
9
|
export * from "./migrate/index.js";
|
|
9
10
|
export { defaultLegacyExampleFilename, slugify, stripJsonExtension } from "./naming.js";
|
|
10
11
|
export { formatDiagnostics, formatSummary } from "./reporter.js";
|
|
12
|
+
export * from "./resolve/index.js";
|
|
11
13
|
export { checkFilePlacement, checkSemantics } from "./rules.js";
|
|
12
14
|
export { ExamplesYamlSchema } from "./schema.js";
|
|
13
15
|
export { checkStructure, validateExampleFiles } from "./validate.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAA0B,MAAM,eAAe,CAAC;AAClG,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,UAAU,GAGX,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AASjD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAA0B,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAsB,MAAM,aAAa,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,UAAU,GAGX,MAAM,aAAa,CAAC;AACrB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AASjD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-expand-cli.d.ts","sourceRoot":"","sources":["../../src/legacy-expand-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
import { mkdir, writeFile } from "fs/promises";
|
|
4
|
+
import { join, resolve } from "path";
|
|
5
|
+
import yargs from "yargs";
|
|
6
|
+
import { hideBin } from "yargs/helpers";
|
|
7
|
+
import { formatDiagnostics, formatSummary } from "./reporter.js";
|
|
8
|
+
import { resolveLegacyExamples } from "./resolve/index.js";
|
|
9
|
+
async function main() {
|
|
10
|
+
const args = await yargs(hideBin(process.argv))
|
|
11
|
+
.scriptName("tsp-examples-legacy-expand")
|
|
12
|
+
.usage("$0 <dir>", "Expand the unified examples into classic x-ms-examples files for a target API version")
|
|
13
|
+
.positional("dir", {
|
|
14
|
+
type: "string",
|
|
15
|
+
describe: "Service directory containing examples.yaml / examples/*.yaml and service.yaml",
|
|
16
|
+
})
|
|
17
|
+
.demandCommand(0)
|
|
18
|
+
.option("api-version", {
|
|
19
|
+
type: "string",
|
|
20
|
+
demandOption: true,
|
|
21
|
+
describe: "Target API version to resolve for (must be listed in service.yaml)",
|
|
22
|
+
})
|
|
23
|
+
.option("out", {
|
|
24
|
+
type: "string",
|
|
25
|
+
describe: "Directory to write the classic x-ms-examples JSON files into (defaults to stdout)",
|
|
26
|
+
})
|
|
27
|
+
.strict()
|
|
28
|
+
.help()
|
|
29
|
+
.parse();
|
|
30
|
+
const dir = resolve(process.cwd(), args.dir ?? ".");
|
|
31
|
+
const apiVersion = args["api-version"];
|
|
32
|
+
const result = await resolveLegacyExamples(dir, apiVersion);
|
|
33
|
+
if (result.diagnostics.length > 0) {
|
|
34
|
+
console.error(formatDiagnostics(result.diagnostics));
|
|
35
|
+
console.error("");
|
|
36
|
+
console.error(formatSummary(result.diagnostics));
|
|
37
|
+
}
|
|
38
|
+
if (result.diagnostics.some((d) => d.severity === "error")) {
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (args.out) {
|
|
42
|
+
const outDir = resolve(process.cwd(), args.out);
|
|
43
|
+
await mkdir(outDir, { recursive: true });
|
|
44
|
+
for (const file of result.files) {
|
|
45
|
+
await writeFile(join(outDir, file.fileName), JSON.stringify(file.document, null, 2) + "\n");
|
|
46
|
+
}
|
|
47
|
+
console.error(`Wrote ${result.files.length} x-ms-examples file(s) to ${outDir}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Print a filename -> document map so the output is inspectable without writing to disk.
|
|
51
|
+
const map = Object.fromEntries(result.files.map((f) => [f.fileName, f.document]));
|
|
52
|
+
console.log(JSON.stringify(map, null, 2));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
main().catch((error) => {
|
|
56
|
+
console.error(error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=legacy-expand-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-expand-cli.js","sourceRoot":"","sources":["../../src/legacy-expand-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ResolvedExample } from "./resolve/resolve.js";
|
|
2
|
+
/**
|
|
3
|
+
* A legacy `x-ms-examples` document reconstructed from a resolved unified example: the `title` and
|
|
4
|
+
* `operationId` envelope, the flat `parameters` bag, and the `responses` map, exactly as the classic
|
|
5
|
+
* per-version JSON files carry them (with `title` first, matching the dominant convention).
|
|
6
|
+
*/
|
|
7
|
+
export interface LegacyExample {
|
|
8
|
+
readonly title: string;
|
|
9
|
+
readonly operationId: string;
|
|
10
|
+
readonly parameters: Record<string, unknown>;
|
|
11
|
+
readonly responses: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Reconstruct the full legacy `x-ms-examples` document from a resolved unified example. The unified
|
|
15
|
+
* `request` buckets (`path` / `query` / `headers` / `body`) are flattened back into the single flat
|
|
16
|
+
* `parameters` bag the classic format uses: the implicit `api-version` parameter is re-added, and the
|
|
17
|
+
* request body is placed under the operation's body parameter name. The `x-ms-examples` `title`
|
|
18
|
+
* defaults to the preserved title, else the preserved file name (sans extension), else the
|
|
19
|
+
* `operationId` — the same rule the file name uses — so the envelope round-trips too.
|
|
20
|
+
*
|
|
21
|
+
* This is the shared inverse of {@link transformExample} (the migration side) and the core of the
|
|
22
|
+
* `typespec-autorest` emitter's legacy reconstruction, so both directions and both consumers agree.
|
|
23
|
+
*/
|
|
24
|
+
export declare function materializeLegacyExample(resolved: Pick<ResolvedExample, "request" | "responses" | "title" | "legacyFilename">, options: {
|
|
25
|
+
operationId: string;
|
|
26
|
+
apiVersion: string;
|
|
27
|
+
bodyParameterName?: string;
|
|
28
|
+
}): LegacyExample;
|
|
29
|
+
//# sourceMappingURL=legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/legacy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,gBAAgB,CAAC,EACrF,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/E,aAAa,CAyBf"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { stripJsonExtension } from "./naming.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reconstruct the full legacy `x-ms-examples` document from a resolved unified example. The unified
|
|
4
|
+
* `request` buckets (`path` / `query` / `headers` / `body`) are flattened back into the single flat
|
|
5
|
+
* `parameters` bag the classic format uses: the implicit `api-version` parameter is re-added, and the
|
|
6
|
+
* request body is placed under the operation's body parameter name. The `x-ms-examples` `title`
|
|
7
|
+
* defaults to the preserved title, else the preserved file name (sans extension), else the
|
|
8
|
+
* `operationId` — the same rule the file name uses — so the envelope round-trips too.
|
|
9
|
+
*
|
|
10
|
+
* This is the shared inverse of {@link transformExample} (the migration side) and the core of the
|
|
11
|
+
* `typespec-autorest` emitter's legacy reconstruction, so both directions and both consumers agree.
|
|
12
|
+
*/
|
|
13
|
+
export function materializeLegacyExample(resolved, options) {
|
|
14
|
+
const request = (resolved.request ?? {});
|
|
15
|
+
const parameters = { "api-version": options.apiVersion };
|
|
16
|
+
for (const bucket of [request.path, request.query, request.headers]) {
|
|
17
|
+
if (bucket && typeof bucket === "object") {
|
|
18
|
+
Object.assign(parameters, bucket);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (request.body !== undefined) {
|
|
22
|
+
parameters[options.bodyParameterName ?? "body"] = request.body;
|
|
23
|
+
}
|
|
24
|
+
const responses = resolved.responses && typeof resolved.responses === "object"
|
|
25
|
+
? resolved.responses
|
|
26
|
+
: {};
|
|
27
|
+
const title = resolved.title ??
|
|
28
|
+
(resolved.legacyFilename ? stripJsonExtension(resolved.legacyFilename) : undefined) ??
|
|
29
|
+
options.operationId;
|
|
30
|
+
return { title, operationId: options.operationId, parameters, responses };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../src/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAsBjD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAqF,EACrF,OAAgF;IAEhF,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAmB,CAAC;IAC3D,MAAM,UAAU,GAA4B,EAAE,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAElF,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,UAAU,CAAC,OAAO,CAAC,iBAAiB,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACjE,CAAC;IAED,MAAM,SAAS,GACb,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ;QAC1D,CAAC,CAAE,QAAQ,CAAC,SAAqC;QACjD,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,KAAK,GACT,QAAQ,CAAC,KAAK;QACd,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,OAAO,CAAC,WAAW,CAAC;IAEtB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/migrate/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAcjD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAkC,EAClC,SAA6B;IAE7B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC9C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,MAA+B;IACnE,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,GAAG,EAAE;QACT,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI;YAChB,IACE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,OAAO;gBAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,EACpC,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,CAAC;YACD,oFAAoF;YACpF,gEAAgE;YAChE,IACE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ;gBAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,gBAAgB,CAAC,IAAI,CAAC,EACtB,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,kEAAkE;AAClE,SAAS,gBAAgB,CAAC,IAAwB;IAChD,4FAA4F;IAC5F,iGAAiG;IACjG,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,OAAkC,EAClC,SAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/migrate/emit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/migrate/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAyB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,SAAS,EAAyC,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,oBAAoB,CAAC;AAoC5B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/migrate/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger-types.d.ts","sourceRoot":"","sources":["../../../src/migrate/swagger-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAElF,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAClD;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACzC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,2EAA2E;AAC3E,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"swagger-types.d.ts","sourceRoot":"","sources":["../../../src/migrate/swagger-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAElF,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAClD;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACzC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,2EAA2E;AAC3E,eAAO,MAAM,YAAY,YAAI,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tsp-examples-legacy-expand`: expand the unified examples into the concrete example for each
|
|
3
|
+
* operation at a target API version.
|
|
4
|
+
*/
|
|
5
|
+
export { resolveLegacyExamples, type LegacyExampleFile, type ResolveLegacyResult, } from "./legacy.js";
|
|
6
|
+
export { substituteApiVersion } from "./materialize.js";
|
|
7
|
+
export { resolveExamplesDir, type ResolveDirResult } from "./resolve-dir.js";
|
|
8
|
+
export { resolveExampleFiles, type ResolveResult, type ResolvedExample } from "./resolve.js";
|
|
9
|
+
export { selectApplicable, type HasSince } from "./select.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resolve/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tsp-examples-legacy-expand`: expand the unified examples into the concrete example for each
|
|
3
|
+
* operation at a target API version.
|
|
4
|
+
*/
|
|
5
|
+
export { resolveLegacyExamples, } from "./legacy.js";
|
|
6
|
+
export { substituteApiVersion } from "./materialize.js";
|
|
7
|
+
export { resolveExamplesDir } from "./resolve-dir.js";
|
|
8
|
+
export { resolveExampleFiles } from "./resolve.js";
|
|
9
|
+
export { selectApplicable } from "./select.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/resolve/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,qBAAqB,GAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAyB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAA4C,MAAM,cAAc,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialize resolved unified examples into classic `x-ms-examples` documents for a target API
|
|
3
|
+
* version. This is the standalone counterpart to what the `typespec-autorest` emitter does inline:
|
|
4
|
+
* it reads the service's Swagger for the operation metadata the unified format intentionally drops
|
|
5
|
+
* (the `operationId` and the request-body parameter name), then reconstructs each legacy document via
|
|
6
|
+
* {@link materializeLegacyExample}, keyed by its original (or conventional) file name.
|
|
7
|
+
*/
|
|
8
|
+
import type { ExampleDiagnostic } from "../types.js";
|
|
9
|
+
/** A materialized legacy example: the classic `x-ms-examples` document and its file name. */
|
|
10
|
+
export interface LegacyExampleFile {
|
|
11
|
+
readonly fileName: string;
|
|
12
|
+
readonly document: unknown;
|
|
13
|
+
}
|
|
14
|
+
/** The outcome of resolving a service's examples into legacy documents for a version. */
|
|
15
|
+
export interface ResolveLegacyResult {
|
|
16
|
+
readonly apiVersion: string;
|
|
17
|
+
readonly files: LegacyExampleFile[];
|
|
18
|
+
readonly diagnostics: ExampleDiagnostic[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the unified examples in `dir` for `apiVersion` and reconstruct the classic `x-ms-examples`
|
|
22
|
+
* documents. Operations without matching Swagger metadata are reported and skipped.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveLegacyExamples(dir: string, apiVersion: string): Promise<ResolveLegacyResult>;
|
|
25
|
+
//# sourceMappingURL=legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../../src/resolve/legacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,6FAA6F;AAC7F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAC3C;AAOD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CA8B9B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialize resolved unified examples into classic `x-ms-examples` documents for a target API
|
|
3
|
+
* version. This is the standalone counterpart to what the `typespec-autorest` emitter does inline:
|
|
4
|
+
* it reads the service's Swagger for the operation metadata the unified format intentionally drops
|
|
5
|
+
* (the `operationId` and the request-body parameter name), then reconstructs each legacy document via
|
|
6
|
+
* {@link materializeLegacyExample}, keyed by its original (or conventional) file name.
|
|
7
|
+
*/
|
|
8
|
+
import { readFile } from "fs/promises";
|
|
9
|
+
import { materializeLegacyExample } from "../legacy.js";
|
|
10
|
+
import { deriveOperationKey } from "../migrate/operation-key.js";
|
|
11
|
+
import { HTTP_METHODS } from "../migrate/swagger-types.js";
|
|
12
|
+
import { collectParamLocations, discoverSwaggerFiles } from "../migrate/swagger.js";
|
|
13
|
+
import { defaultLegacyExampleFilename, stripJsonExtension } from "../naming.js";
|
|
14
|
+
import { resolveExamplesDir } from "./resolve-dir.js";
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the unified examples in `dir` for `apiVersion` and reconstruct the classic `x-ms-examples`
|
|
17
|
+
* documents. Operations without matching Swagger metadata are reported and skipped.
|
|
18
|
+
*/
|
|
19
|
+
export async function resolveLegacyExamples(dir, apiVersion) {
|
|
20
|
+
const resolved = await resolveExamplesDir(dir, apiVersion);
|
|
21
|
+
const diagnostics = [...resolved.diagnostics];
|
|
22
|
+
const metadata = await crawlOperationMetadata(dir);
|
|
23
|
+
const usedNames = new Set();
|
|
24
|
+
const files = [];
|
|
25
|
+
for (const example of resolved.examples) {
|
|
26
|
+
const meta = metadata.get(example.operation);
|
|
27
|
+
if (meta === undefined) {
|
|
28
|
+
diagnostics.push({
|
|
29
|
+
code: "missing-operation-metadata",
|
|
30
|
+
message: `No Swagger operation found for "${example.operation}"; cannot materialize a legacy example.`,
|
|
31
|
+
severity: "warning",
|
|
32
|
+
file: "examples.yaml",
|
|
33
|
+
});
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const document = materializeLegacyExample(example, {
|
|
37
|
+
operationId: meta.operationId,
|
|
38
|
+
apiVersion,
|
|
39
|
+
bodyParameterName: meta.bodyParameterName,
|
|
40
|
+
});
|
|
41
|
+
const base = stripJsonExtension(example.legacyFilename ?? defaultLegacyExampleFilename(meta.operationId, example.title));
|
|
42
|
+
files.push({ fileName: uniqueFileName(base, usedNames), document });
|
|
43
|
+
}
|
|
44
|
+
return { apiVersion: resolved.apiVersion, files, diagnostics };
|
|
45
|
+
}
|
|
46
|
+
/** Build a map of unified operation key → `{ operationId, bodyParameterName }` from the Swagger. */
|
|
47
|
+
async function crawlOperationMetadata(dir) {
|
|
48
|
+
const map = new Map();
|
|
49
|
+
for (const file of await discoverSwaggerFiles(dir)) {
|
|
50
|
+
let doc;
|
|
51
|
+
try {
|
|
52
|
+
doc = JSON.parse(await readFile(file, "utf-8"));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
for (const pathItem of Object.values(doc.paths ?? {})) {
|
|
58
|
+
if (pathItem === null || typeof pathItem !== "object")
|
|
59
|
+
continue;
|
|
60
|
+
for (const method of HTTP_METHODS) {
|
|
61
|
+
const operation = pathItem[method];
|
|
62
|
+
if (operation === undefined || typeof operation.operationId !== "string")
|
|
63
|
+
continue;
|
|
64
|
+
const locations = collectParamLocations(doc, [
|
|
65
|
+
...(pathItem.parameters ?? []),
|
|
66
|
+
...(operation.parameters ?? []),
|
|
67
|
+
]);
|
|
68
|
+
map.set(deriveOperationKey(operation.operationId), {
|
|
69
|
+
operationId: operation.operationId,
|
|
70
|
+
bodyParameterName: bodyParameterName(locations),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return map;
|
|
76
|
+
}
|
|
77
|
+
function bodyParameterName(locations) {
|
|
78
|
+
for (const [name, location] of locations) {
|
|
79
|
+
if (location === "body")
|
|
80
|
+
return name;
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
/** Disambiguate a base file name (without extension) against those already used. */
|
|
85
|
+
function uniqueFileName(base, used) {
|
|
86
|
+
let name = base;
|
|
87
|
+
let index = 2;
|
|
88
|
+
while (used.has(name))
|
|
89
|
+
name = `${base}_${index++}`;
|
|
90
|
+
used.add(name);
|
|
91
|
+
return `${name}.json`;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../src/resolve/legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../../../src/resolve/materialize.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAEvE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Substitute the `{api-version}` placeholder with a concrete version when materializing. */
|
|
2
|
+
export function substituteApiVersion(value, apiVersion) {
|
|
3
|
+
return substitute(value, apiVersion);
|
|
4
|
+
}
|
|
5
|
+
function substitute(value, apiVersion) {
|
|
6
|
+
if (typeof value === "string") {
|
|
7
|
+
return value.split("{api-version}").join(apiVersion);
|
|
8
|
+
}
|
|
9
|
+
if (Array.isArray(value)) {
|
|
10
|
+
return value.map((item) => substitute(item, apiVersion));
|
|
11
|
+
}
|
|
12
|
+
if (value !== null && typeof value === "object") {
|
|
13
|
+
const out = {};
|
|
14
|
+
for (const [key, item] of Object.entries(value)) {
|
|
15
|
+
out[key] = substitute(item, apiVersion);
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../../src/resolve/materialize.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAAI,KAAQ,EAAE,UAAkB;IAClE,OAAO,UAAU,CAAC,KAAK,EAAE,UAAU,CAAM,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,UAAkB;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ResolveResult } from "./resolve.js";
|
|
2
|
+
/** Result of resolving a service directory for a target version. */
|
|
3
|
+
export interface ResolveDirResult extends ResolveResult {
|
|
4
|
+
/** The example files that were discovered. */
|
|
5
|
+
readonly files: string[];
|
|
6
|
+
/** The version order read from `service.yaml`. */
|
|
7
|
+
readonly order: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a service directory for `apiVersion`: read the version order from `service.yaml`, discover
|
|
11
|
+
* `examples.yaml` / `examples/*.yaml`, and resolve + materialize the applicable examples.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveExamplesDir(dir: string, apiVersion: string): Promise<ResolveDirResult>;
|
|
14
|
+
//# sourceMappingURL=resolve-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-dir.d.ts","sourceRoot":"","sources":["../../../src/resolve/resolve-dir.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEvE,oEAAoE;AACpE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { join, relative } from "path";
|
|
3
|
+
import { discoverExampleFiles } from "../discover.js";
|
|
4
|
+
import { loadExampleFile, parseServiceVersions } from "../loader.js";
|
|
5
|
+
import { resolveExampleFiles } from "./resolve.js";
|
|
6
|
+
/**
|
|
7
|
+
* Resolve a service directory for `apiVersion`: read the version order from `service.yaml`, discover
|
|
8
|
+
* `examples.yaml` / `examples/*.yaml`, and resolve + materialize the applicable examples.
|
|
9
|
+
*/
|
|
10
|
+
export async function resolveExamplesDir(dir, apiVersion) {
|
|
11
|
+
let order = [];
|
|
12
|
+
try {
|
|
13
|
+
order = parseServiceVersions(await readFile(join(dir, "service.yaml"), "utf-8")).versions;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
order = [];
|
|
17
|
+
}
|
|
18
|
+
const filePaths = await discoverExampleFiles(dir);
|
|
19
|
+
const files = await Promise.all(filePaths.map(async (path) => loadExampleFile(relative(dir, path), await readFile(path, "utf-8"))));
|
|
20
|
+
const result = resolveExampleFiles(files, apiVersion, order);
|
|
21
|
+
return { ...result, order, files: filePaths.map((path) => relative(dir, path)) };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=resolve-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-dir.js","sourceRoot":"","sources":["../../../src/resolve/resolve-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAUvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,UAAkB;IAElB,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,oBAAoB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAC3B,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CACpE,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LoadedExampleFile } from "../loader.js";
|
|
2
|
+
import type { ExampleDiagnostic } from "../types.js";
|
|
3
|
+
/** A single resolved (and materialized) example for a target version. */
|
|
4
|
+
export interface ResolvedExample {
|
|
5
|
+
/** The operation key (e.g. `CaCertificates.get`). */
|
|
6
|
+
readonly operation: string;
|
|
7
|
+
/** The lineage title, when the operation has more than one lineage. */
|
|
8
|
+
readonly title?: string;
|
|
9
|
+
/** The original legacy `x-ms-examples` file name, when preserved during migration. */
|
|
10
|
+
readonly legacyFilename?: string;
|
|
11
|
+
readonly request?: unknown;
|
|
12
|
+
readonly responses?: unknown;
|
|
13
|
+
}
|
|
14
|
+
/** The outcome of resolving a set of example files for a target version. */
|
|
15
|
+
export interface ResolveResult {
|
|
16
|
+
readonly apiVersion: string;
|
|
17
|
+
readonly examples: ResolvedExample[];
|
|
18
|
+
readonly diagnostics: ExampleDiagnostic[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the applicable example for every operation/lineage at `apiVersion`, using the linear
|
|
22
|
+
* `order` from `service.yaml`, and materialize the `{api-version}` placeholder. Operations whose
|
|
23
|
+
* lineage has no applicable entry at the target version are omitted.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveExampleFiles(files: readonly LoadedExampleFile[], apiVersion: string, order: readonly string[]): ResolveResult;
|
|
26
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/resolve/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAC3C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,aAAa,CA6Cf"}
|