@typespec/compiler 0.52.0-dev.0 → 0.52.0-dev.10
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/.scripts/build-init-templates.d.ts +2 -0
- package/dist/.scripts/build-init-templates.d.ts.map +1 -0
- package/dist/.scripts/build-init-templates.js +38 -0
- package/dist/.scripts/build-init-templates.js.map +1 -0
- package/dist/.scripts/helpers.d.ts +4 -0
- package/dist/.scripts/helpers.d.ts.map +1 -0
- package/dist/.scripts/helpers.js +44 -0
- package/dist/.scripts/helpers.js.map +1 -0
- package/dist/manifest.js +2 -2
- package/dist/src/config/config-interpolation.js.map +1 -1
- package/dist/src/config/config-loader.d.ts.map +1 -1
- package/dist/src/config/config-loader.js +1 -1
- package/dist/src/config/config-loader.js.map +1 -1
- package/dist/src/config/config-schema.js +1 -1
- package/dist/src/config/config-schema.js.map +1 -1
- package/dist/src/config/config-to-options.js.map +1 -1
- package/dist/src/core/binder.d.ts.map +1 -1
- package/dist/src/core/binder.js +1 -1
- package/dist/src/core/binder.js.map +1 -1
- package/dist/src/core/charcode.d.ts +1 -1
- package/dist/src/core/charcode.d.ts.map +1 -1
- package/dist/src/core/charcode.js.map +1 -1
- package/dist/src/core/checker.d.ts +4 -0
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +155 -65
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/cli/actions/compile/args.js.map +1 -1
- package/dist/src/core/cli/actions/compile/compile.js.map +1 -1
- package/dist/src/core/cli/actions/compile/watch.js.map +1 -1
- package/dist/src/core/cli/actions/format.js +1 -1
- package/dist/src/core/cli/actions/format.js.map +1 -1
- package/dist/src/core/cli/actions/init.d.ts +1 -0
- package/dist/src/core/cli/actions/init.d.ts.map +1 -1
- package/dist/src/core/cli/actions/init.js +1 -1
- package/dist/src/core/cli/actions/init.js.map +1 -1
- package/dist/src/core/cli/actions/vs.js.map +1 -1
- package/dist/src/core/cli/actions/vscode.js.map +1 -1
- package/dist/src/core/cli/cli.js +6 -1
- package/dist/src/core/cli/cli.js.map +1 -1
- package/dist/src/core/cli/install-vsix.js.map +1 -1
- package/dist/src/core/cli/utils.d.ts.map +1 -1
- package/dist/src/core/cli/utils.js +3 -0
- package/dist/src/core/cli/utils.js.map +1 -1
- package/dist/src/core/decorator-utils.js.map +1 -1
- package/dist/src/core/deprecation.js.map +1 -1
- package/dist/src/core/diagnostic-creator.d.ts +11 -0
- package/dist/src/core/diagnostic-creator.d.ts.map +1 -0
- package/dist/src/core/diagnostic-creator.js +48 -0
- package/dist/src/core/diagnostic-creator.js.map +1 -0
- package/dist/src/core/diagnostics.d.ts +2 -11
- package/dist/src/core/diagnostics.d.ts.map +1 -1
- package/dist/src/core/diagnostics.js +3 -52
- package/dist/src/core/diagnostics.js.map +1 -1
- package/dist/src/core/entrypoint-resolution.js.map +1 -1
- package/dist/src/core/external-error.js.map +1 -1
- package/dist/src/core/fetch.js.map +1 -1
- package/dist/src/core/formatter-fs.d.ts +1 -1
- package/dist/src/core/formatter-fs.d.ts.map +1 -1
- package/dist/src/core/formatter-fs.js +1 -1
- package/dist/src/core/formatter-fs.js.map +1 -1
- package/dist/src/core/helpers/discriminator-utils.js.map +1 -1
- package/dist/src/core/helpers/location-context.js +1 -1
- package/dist/src/core/helpers/location-context.js.map +1 -1
- package/dist/src/core/helpers/operation-utils.js.map +1 -1
- package/dist/src/core/helpers/path-interpolation.js.map +1 -1
- package/dist/src/core/helpers/projected-names-utils.js.map +1 -1
- package/dist/src/core/helpers/string-template-utils.js.map +1 -1
- package/dist/src/core/helpers/type-name-utils.js.map +1 -1
- package/dist/src/core/helpers/usage-resolver.js.map +1 -1
- package/dist/src/core/index.d.ts +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -1
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/install.js.map +1 -1
- package/dist/src/core/library.d.ts +4 -3
- package/dist/src/core/library.d.ts.map +1 -1
- package/dist/src/core/library.js +14 -15
- package/dist/src/core/library.js.map +1 -1
- package/dist/src/core/linter.d.ts.map +1 -1
- package/dist/src/core/linter.js +12 -6
- package/dist/src/core/linter.js.map +1 -1
- package/dist/src/core/logger/console-sink.js.map +1 -1
- package/dist/src/core/logger/logger.d.ts +1 -1
- package/dist/src/core/logger/logger.d.ts.map +1 -1
- package/dist/src/core/logger/logger.js.map +1 -1
- package/dist/src/core/logger/tracer.js.map +1 -1
- package/dist/src/core/messages.d.ts +41 -8
- package/dist/src/core/messages.d.ts.map +1 -1
- package/dist/src/core/messages.js +12 -3
- package/dist/src/core/messages.js.map +1 -1
- package/dist/src/core/module-resolver.js.map +1 -1
- package/dist/src/core/node-host.d.ts.map +1 -1
- package/dist/src/core/node-host.js +4 -3
- package/dist/src/core/node-host.js.map +1 -1
- package/dist/src/core/param-message.d.ts +3 -0
- package/dist/src/core/param-message.d.ts.map +1 -0
- package/dist/src/core/param-message.js +16 -0
- package/dist/src/core/param-message.js.map +1 -0
- package/dist/src/core/parser.d.ts +5 -1
- package/dist/src/core/parser.d.ts.map +1 -1
- package/dist/src/core/parser.js +56 -2
- package/dist/src/core/parser.js.map +1 -1
- package/dist/src/core/path-utils.js.map +1 -1
- package/dist/src/core/program.js +8 -5
- package/dist/src/core/program.js.map +1 -1
- package/dist/src/core/projection-members.js +2 -2
- package/dist/src/core/projection-members.js.map +1 -1
- package/dist/src/core/projector.js.map +1 -1
- package/dist/src/core/scanner.js.map +1 -1
- package/dist/src/core/schema-validator.js.map +1 -1
- package/dist/src/core/semantic-walker.js.map +1 -1
- package/dist/src/core/type-utils.js.map +1 -1
- package/dist/src/core/types.d.ts +31 -15
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +7 -5
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/core/util.d.ts +1 -2
- package/dist/src/core/util.d.ts.map +1 -1
- package/dist/src/core/util.js +2 -3
- package/dist/src/core/util.js.map +1 -1
- package/dist/src/emitter-framework/asset-emitter.js.map +1 -1
- package/dist/src/emitter-framework/builders/array-builder.js.map +1 -1
- package/dist/src/emitter-framework/builders/object-builder.js.map +1 -1
- package/dist/src/emitter-framework/builders/string-builder.js.map +1 -1
- package/dist/src/emitter-framework/custom-key-map.js.map +1 -1
- package/dist/src/emitter-framework/placeholder.js.map +1 -1
- package/dist/src/emitter-framework/ref-scope.js.map +1 -1
- package/dist/src/emitter-framework/reference-cycle.d.ts +1 -1
- package/dist/src/emitter-framework/reference-cycle.d.ts.map +1 -1
- package/dist/src/emitter-framework/reference-cycle.js +1 -1
- package/dist/src/emitter-framework/reference-cycle.js.map +1 -1
- package/dist/src/emitter-framework/type-emitter.js.map +1 -1
- package/dist/src/emitter-framework/types.js.map +1 -1
- package/dist/src/formatter/parser.js.map +1 -1
- package/dist/src/formatter/print/comment-handler.js.map +1 -1
- package/dist/src/formatter/print/needs-parens.js.map +1 -1
- package/dist/src/formatter/print/printer.d.ts +2 -1
- package/dist/src/formatter/print/printer.d.ts.map +1 -1
- package/dist/src/formatter/print/printer.js +12 -0
- package/dist/src/formatter/print/printer.js.map +1 -1
- package/dist/src/init/core-templates.d.ts +6 -0
- package/dist/src/init/core-templates.d.ts.map +1 -0
- package/dist/src/init/core-templates.js +11 -0
- package/dist/src/init/core-templates.js.map +1 -0
- package/dist/src/init/file-templating.d.ts +25 -0
- package/dist/src/init/file-templating.d.ts.map +1 -0
- package/dist/src/init/file-templating.js +39 -0
- package/dist/src/init/file-templating.js.map +1 -0
- package/dist/src/init/init-template.d.ts +3 -3
- package/dist/src/init/init-template.d.ts.map +1 -1
- package/dist/src/init/init-template.js +4 -3
- package/dist/src/init/init-template.js.map +1 -1
- package/dist/src/init/init.d.ts +11 -47
- package/dist/src/init/init.d.ts.map +1 -1
- package/dist/src/init/init.js +32 -190
- package/dist/src/init/init.js.map +1 -1
- package/dist/src/init/scaffold.d.ts +39 -0
- package/dist/src/init/scaffold.d.ts.map +1 -0
- package/dist/src/init/scaffold.js +132 -0
- package/dist/src/init/scaffold.js.map +1 -0
- package/dist/src/lib/decorators.js.map +1 -1
- package/dist/src/lib/service.js.map +1 -1
- package/dist/src/manifest.d.ts.map +1 -1
- package/dist/src/manifest.js +10 -3
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/runner.js.map +1 -1
- package/dist/src/server/completion.js +3 -3
- package/dist/src/server/completion.js.map +1 -1
- package/dist/src/server/server-utils.js.map +1 -1
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/serverlib.d.ts.map +1 -1
- package/dist/src/server/serverlib.js +4 -0
- package/dist/src/server/serverlib.js.map +1 -1
- package/dist/src/server/symbol-structure.js.map +1 -1
- package/dist/src/server/tmlanguage.js +5 -5
- package/dist/src/server/tmlanguage.js.map +1 -1
- package/dist/src/server/type-details.js.map +1 -1
- package/dist/src/server/type-signature.js.map +1 -1
- package/dist/src/testing/expect.js.map +1 -1
- package/dist/src/testing/test-host.js +2 -2
- package/dist/src/testing/test-host.js.map +1 -1
- package/dist/src/testing/test-server-host.js +1 -1
- package/dist/src/testing/test-server-host.js.map +1 -1
- package/dist/src/testing/test-utils.d.ts +2 -0
- package/dist/src/testing/test-utils.d.ts.map +1 -1
- package/dist/src/testing/test-utils.js +8 -3
- package/dist/src/testing/test-utils.js.map +1 -1
- package/dist/src/yaml/diagnostics.js.map +1 -1
- package/dist/src/yaml/parser.js.map +1 -1
- package/dist/typespec.tmLanguage +8 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.e2e.d.ts +3 -0
- package/dist/vitest.config.e2e.d.ts.map +1 -0
- package/dist/vitest.config.e2e.js +16 -0
- package/dist/vitest.config.e2e.js.map +1 -0
- package/dist/vitest.config.js +15 -0
- package/dist/vitest.config.js.map +1 -0
- package/lib/decorators.tsp +3 -3
- package/lib/lib.tsp +30 -25
- package/package.json +25 -22
- package/templates/__snapshots__/emitter-ts/.eslintrc.yml +14 -0
- package/templates/__snapshots__/emitter-ts/package.json +37 -0
- package/templates/__snapshots__/emitter-ts/prettierrc.yaml +8 -0
- package/templates/__snapshots__/emitter-ts/src/emitter.ts +10 -0
- package/templates/__snapshots__/emitter-ts/src/index.ts +2 -0
- package/templates/__snapshots__/emitter-ts/src/lib.ts +8 -0
- package/templates/__snapshots__/emitter-ts/src/testing/index.ts +10 -0
- package/templates/__snapshots__/emitter-ts/test/hello.test.ts +10 -0
- package/templates/__snapshots__/emitter-ts/test/test-host.ts +47 -0
- package/templates/__snapshots__/emitter-ts/tsconfig.json +17 -0
- package/templates/emitter-ts/.eslintrc.yml +14 -0
- package/templates/emitter-ts/package.json +37 -0
- package/templates/emitter-ts/prettierrc.yaml +8 -0
- package/templates/emitter-ts/src/emitter.ts +10 -0
- package/templates/emitter-ts/src/index.ts +2 -0
- package/templates/emitter-ts/src/lib.ts +8 -0
- package/templates/emitter-ts/src/testing/index.ts +10 -0
- package/templates/emitter-ts/test/hello.test.ts +10 -0
- package/templates/emitter-ts/test/test-host.ts.mu +47 -0
- package/templates/emitter-ts/tsconfig.json +17 -0
- package/templates/scaffolding.json +79 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/yaml/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAIrF,MAAM,UAAU,SAAS,CAAC,MAA2B;IACnD,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAEhD,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhG,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE;QACnC,YAAY,EAAE,KAAK,EAAE,2EAA2E;KACjG,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/yaml/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAIrF,MAAM,UAAU,SAAS,CAAC,MAA2B;IACnD,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAEhD,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEhG,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE;QACnC,YAAY,EAAE,KAAK,EAAE,2EAA2E;KACjG,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnC,WAAW,CAAC,GAAG,CAAC,4BAA4B,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,aAAa;QACnB,IAAI;QACJ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QACnB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACnC,QAA4B,EAC5B,KAAgB,EAChB,IAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;QAC3D,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ;QACR,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;KACvD,CAAC;AACJ,CAAC"}
|
package/dist/typespec.tmLanguage
CHANGED
|
@@ -1750,6 +1750,14 @@
|
|
|
1750
1750
|
</dict>
|
|
1751
1751
|
<key>patterns</key>
|
|
1752
1752
|
<array>
|
|
1753
|
+
<dict>
|
|
1754
|
+
<key>include</key>
|
|
1755
|
+
<string>#identifier-expression</string>
|
|
1756
|
+
</dict>
|
|
1757
|
+
<dict>
|
|
1758
|
+
<key>include</key>
|
|
1759
|
+
<string>#operator-assignment</string>
|
|
1760
|
+
</dict>
|
|
1753
1761
|
<dict>
|
|
1754
1762
|
<key>include</key>
|
|
1755
1763
|
<string>#expression</string>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAaG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.e2e.d.ts","sourceRoot":"","sources":["../vitest.config.e2e.ts"],"names":[],"mappings":";AAEA,wBAcG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
test: {
|
|
4
|
+
environment: "node",
|
|
5
|
+
testTimeout: 60000,
|
|
6
|
+
isolate: false,
|
|
7
|
+
coverage: {
|
|
8
|
+
reporter: ["cobertura", "json", "text"],
|
|
9
|
+
},
|
|
10
|
+
outputFile: {
|
|
11
|
+
junit: "./test-results.xml",
|
|
12
|
+
},
|
|
13
|
+
include: ["test/**/*.e2e.ts"],
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=vitest.config.e2e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.e2e.js","sourceRoot":"","sources":["../vitest.config.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,KAAM;QACnB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE;YACR,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;SACxC;QACD,UAAU,EAAE;YACV,KAAK,EAAE,oBAAoB;SAC5B;QAED,OAAO,EAAE,CAAC,kBAAkB,CAAC;KAC9B;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
test: {
|
|
4
|
+
environment: "node",
|
|
5
|
+
isolate: false,
|
|
6
|
+
coverage: {
|
|
7
|
+
reporter: ["cobertura", "json", "text"],
|
|
8
|
+
},
|
|
9
|
+
outputFile: {
|
|
10
|
+
junit: "./test-results.xml",
|
|
11
|
+
},
|
|
12
|
+
include: ["test/**/*.test.ts"],
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=vitest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE;YACR,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC;SACxC;QACD,UAAU,EAAE;YACV,KAAK,EAAE,oBAAoB;SAC5B;QAED,OAAO,EAAE,CAAC,mBAAmB,CAAC;KAC/B;CACF,CAAC,CAAC"}
|
package/lib/decorators.tsp
CHANGED
|
@@ -69,7 +69,7 @@ extern dec errorsDoc(target: Operation, doc: valueof string);
|
|
|
69
69
|
*
|
|
70
70
|
* ```typespec
|
|
71
71
|
* #deprecated "Use ActionV2"
|
|
72
|
-
* op Action<
|
|
72
|
+
* op Action<Result>(): Result;
|
|
73
73
|
* ```
|
|
74
74
|
*/
|
|
75
75
|
#deprecated "@deprecated decorator is deprecated. Use the `#deprecated` directive instead."
|
|
@@ -288,8 +288,8 @@ extern dec tag(target: Namespace | Interface | Operation, tag: valueof string);
|
|
|
288
288
|
* @example
|
|
289
289
|
* ```typespec
|
|
290
290
|
* @friendlyName("{name}List", T)
|
|
291
|
-
* model List<
|
|
292
|
-
* value:
|
|
291
|
+
* model List<Item> {
|
|
292
|
+
* value: Item[];
|
|
293
293
|
* nextLink: string;
|
|
294
294
|
* }
|
|
295
295
|
* ```
|
package/lib/lib.tsp
CHANGED
|
@@ -138,18 +138,18 @@ scalar unixTimestamp32 extends utcDateTime;
|
|
|
138
138
|
model object {}
|
|
139
139
|
|
|
140
140
|
/**
|
|
141
|
-
* @dev Array model type, equivalent to `
|
|
142
|
-
* @template
|
|
141
|
+
* @dev Array model type, equivalent to `Element[]`
|
|
142
|
+
* @template Element The type of the array elements
|
|
143
143
|
*/
|
|
144
|
-
@indexer(integer,
|
|
145
|
-
model Array<
|
|
144
|
+
@indexer(integer, Element)
|
|
145
|
+
model Array<Element> {}
|
|
146
146
|
|
|
147
147
|
/**
|
|
148
|
-
* @dev Model with string properties where all the properties have type `
|
|
149
|
-
* @template
|
|
148
|
+
* @dev Model with string properties where all the properties have type `Property`
|
|
149
|
+
* @template Element The type of the properties
|
|
150
150
|
*/
|
|
151
|
-
@indexer(string,
|
|
152
|
-
model Record<
|
|
151
|
+
@indexer(string, Element)
|
|
152
|
+
model Record<Element> {}
|
|
153
153
|
|
|
154
154
|
/**
|
|
155
155
|
* Represent a URL string as described by https://url.spec.whatwg.org/
|
|
@@ -158,51 +158,56 @@ scalar url extends string;
|
|
|
158
158
|
|
|
159
159
|
/**
|
|
160
160
|
* Represents a collection of optional properties.
|
|
161
|
-
*
|
|
161
|
+
*
|
|
162
|
+
* @template Source An object whose spread properties are all optional.
|
|
162
163
|
*/
|
|
163
164
|
@doc("The template for adding optional properties.")
|
|
164
165
|
@withOptionalProperties
|
|
165
|
-
model OptionalProperties<
|
|
166
|
-
...
|
|
166
|
+
model OptionalProperties<Source> {
|
|
167
|
+
...Source;
|
|
167
168
|
}
|
|
168
169
|
|
|
169
170
|
/**
|
|
170
171
|
* Represents a collection of updateable properties.
|
|
171
|
-
*
|
|
172
|
+
*
|
|
173
|
+
* @template Source An object whose spread properties are all updateable.
|
|
172
174
|
*/
|
|
173
175
|
@doc("The template for adding updateable properties.")
|
|
174
176
|
@withUpdateableProperties
|
|
175
|
-
model UpdateableProperties<
|
|
176
|
-
...
|
|
177
|
+
model UpdateableProperties<Source> {
|
|
178
|
+
...Source;
|
|
177
179
|
}
|
|
178
180
|
|
|
179
181
|
/**
|
|
180
182
|
* Represents a collection of omitted properties.
|
|
181
|
-
*
|
|
182
|
-
* @template
|
|
183
|
+
*
|
|
184
|
+
* @template Source An object whose properties are spread.
|
|
185
|
+
* @template Keys The property keys to omit.
|
|
183
186
|
*/
|
|
184
187
|
@doc("The template for omitting properties.")
|
|
185
|
-
@withoutOmittedProperties(
|
|
186
|
-
model OmitProperties<
|
|
187
|
-
...
|
|
188
|
+
@withoutOmittedProperties(Keys)
|
|
189
|
+
model OmitProperties<Source, Keys extends string> {
|
|
190
|
+
...Source;
|
|
188
191
|
}
|
|
189
192
|
|
|
190
193
|
/**
|
|
191
194
|
* Represents a collection of properties with default values omitted.
|
|
192
|
-
*
|
|
195
|
+
*
|
|
196
|
+
* @template Source An object whose spread property defaults are all omitted.
|
|
193
197
|
*/
|
|
194
198
|
@withoutDefaultValues
|
|
195
|
-
model OmitDefaults<
|
|
196
|
-
...
|
|
199
|
+
model OmitDefaults<Source> {
|
|
200
|
+
...Source;
|
|
197
201
|
}
|
|
198
202
|
|
|
199
203
|
/**
|
|
200
204
|
* Applies a visibility setting to a collection of properties.
|
|
201
|
-
*
|
|
205
|
+
*
|
|
206
|
+
* @template Source An object whose properties are spread.
|
|
202
207
|
* @template Visibility The visibility to apply to all properties.
|
|
203
208
|
*/
|
|
204
209
|
@doc("The template for setting the default visibility of key properties.")
|
|
205
210
|
@withDefaultKeyVisibility(Visibility)
|
|
206
|
-
model DefaultKeyVisibility<
|
|
207
|
-
...
|
|
211
|
+
model DefaultKeyVisibility<Source, Visibility extends valueof string> {
|
|
212
|
+
...Source;
|
|
208
213
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typespec/compiler",
|
|
3
|
-
"version": "0.52.0-dev.
|
|
3
|
+
"version": "0.52.0-dev.10",
|
|
4
4
|
"description": "TypeSpec Compiler Preview",
|
|
5
5
|
"author": "Microsoft Corporation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,61 +52,64 @@
|
|
|
52
52
|
"files": [
|
|
53
53
|
"lib/*.tsp",
|
|
54
54
|
"dist/**",
|
|
55
|
+
"templates/**",
|
|
55
56
|
"entrypoints",
|
|
56
57
|
"!dist/test/**"
|
|
57
58
|
],
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"@babel/code-frame": "~7.
|
|
60
|
+
"@babel/code-frame": "~7.23.5",
|
|
60
61
|
"ajv": "~8.12.0",
|
|
61
62
|
"picocolors": "~1.0.0",
|
|
62
|
-
"globby": "~
|
|
63
|
-
"yaml": "~2.3.
|
|
63
|
+
"globby": "~14.0.0",
|
|
64
|
+
"yaml": "~2.3.4",
|
|
64
65
|
"mustache": "~4.2.0",
|
|
65
|
-
"prettier": "~3.1.
|
|
66
|
+
"prettier": "~3.1.1",
|
|
66
67
|
"prompts": "~2.4.2",
|
|
67
68
|
"semver": "^7.5.4",
|
|
68
69
|
"vscode-languageserver": "~9.0.0",
|
|
69
70
|
"vscode-languageserver-textdocument": "~1.0.8",
|
|
70
71
|
"yargs": "~17.7.2",
|
|
71
|
-
"change-case": "~
|
|
72
|
+
"change-case": "~5.3.0"
|
|
72
73
|
},
|
|
73
74
|
"devDependencies": {
|
|
74
|
-
"@types/babel__code-frame": "~7.0.
|
|
75
|
-
"@types/
|
|
76
|
-
"@types/mustache": "~4.2.2",
|
|
75
|
+
"@types/babel__code-frame": "~7.0.6",
|
|
76
|
+
"@types/mustache": "~4.2.5",
|
|
77
77
|
"@types/node": "~18.11.9",
|
|
78
|
-
"@types/prompts": "~2.4.
|
|
79
|
-
"@types/semver": "^7.5.
|
|
80
|
-
"@types/yargs": "~17.0.
|
|
78
|
+
"@types/prompts": "~2.4.9",
|
|
79
|
+
"@types/semver": "^7.5.6",
|
|
80
|
+
"@types/yargs": "~17.0.32",
|
|
81
81
|
"@typespec/eslint-config-typespec": "~0.51.0 || >=0.52.0-dev <0.52.0",
|
|
82
82
|
"@typespec/internal-build-utils": "~0.51.0 || >=0.52.0-dev <0.52.0",
|
|
83
|
-
"eslint": "^8.
|
|
83
|
+
"eslint": "^8.55.0",
|
|
84
84
|
"grammarkdown": "~3.3.2",
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"mocha-multi-reporters": "~1.5.1",
|
|
85
|
+
"vitest": "^1.1.0",
|
|
86
|
+
"@vitest/coverage-v8": "^1.1.0",
|
|
88
87
|
"c8": "~8.0.1",
|
|
89
|
-
"prettier-plugin-organize-imports": "~3.2.
|
|
88
|
+
"prettier-plugin-organize-imports": "~3.2.4",
|
|
90
89
|
"source-map-support": "~0.5.21",
|
|
91
90
|
"rimraf": "~5.0.1",
|
|
92
91
|
"tmlanguage-generator": "~0.5.1 || >=0.6.0-dev <0.6.0",
|
|
93
|
-
"typescript": "~5.
|
|
92
|
+
"typescript": "~5.3.3",
|
|
94
93
|
"vscode-oniguruma": "~2.0.1",
|
|
95
94
|
"vscode-textmate": "~9.0.0",
|
|
96
95
|
"sinon": "~17.0.1",
|
|
97
|
-
"@types/sinon": "~10.0.20"
|
|
96
|
+
"@types/sinon": "~10.0.20",
|
|
97
|
+
"ts-node": "~10.9.1"
|
|
98
98
|
},
|
|
99
99
|
"peerDependencies": {},
|
|
100
100
|
"scripts": {
|
|
101
101
|
"clean": "rimraf ./dist ./temp",
|
|
102
|
-
"build": "
|
|
102
|
+
"build:init-templates-index": "node --no-warnings --experimental-specifier-resolution=node --loader ts-node/esm ./.scripts/build-init-templates.ts",
|
|
103
|
+
"build": "npm run gen-manifest && npm run build:init-templates-index && npm run compile && npm run generate-tmlanguage",
|
|
103
104
|
"compile": "tsc -p .",
|
|
104
105
|
"watch": "tsc -p . --watch",
|
|
105
106
|
"watch-tmlanguage": "node scripts/watch-tmlanguage.js",
|
|
106
107
|
"generate-tmlanguage": "node scripts/generate-tmlanguage.js",
|
|
107
108
|
"dogfood": "node scripts/dogfood.js",
|
|
108
|
-
"test": "
|
|
109
|
-
"test
|
|
109
|
+
"test": "vitest run",
|
|
110
|
+
"test:watch": "vitest -w",
|
|
111
|
+
"test-official": "vitest run --coverage --reporter=junit --reporter=default --no-file-parallelism",
|
|
112
|
+
"e2e": "vitest run --config ./vitest.config.e2e.ts",
|
|
110
113
|
"gen-manifest": "node scripts/generate-manifest.js",
|
|
111
114
|
"regen-nonascii": "node scripts/regen-nonascii.js",
|
|
112
115
|
"fuzz": "node dist/test/manual/fuzz.js run",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
root: true
|
|
2
|
+
env:
|
|
3
|
+
es2021: true
|
|
4
|
+
node: true
|
|
5
|
+
extends:
|
|
6
|
+
- eslint:recommended
|
|
7
|
+
- plugin:@typescript-eslint/recommended
|
|
8
|
+
parser: "@typescript-eslint/parser"
|
|
9
|
+
parserOptions:
|
|
10
|
+
ecmaVersion: latest
|
|
11
|
+
sourceType: module
|
|
12
|
+
plugins:
|
|
13
|
+
- "@typescript-eslint"
|
|
14
|
+
rules: {}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "emitter-ts",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/src/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/src/index.d.ts",
|
|
9
|
+
"default": "./dist/src/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./testing": {
|
|
12
|
+
"types": "./dist/src/testing/index.d.ts",
|
|
13
|
+
"default": "./dist/src/testing/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@typespec/compiler": "latest"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "latest",
|
|
21
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
22
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
23
|
+
"eslint": "^8.45.0",
|
|
24
|
+
"typescript": "^5.3.3",
|
|
25
|
+
"prettier": "^3.0.3"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"watch": "tsc --watch",
|
|
30
|
+
"test": "node --test ./dist/test/",
|
|
31
|
+
"lint": "eslint src/ test/ --report-unused-disable-directives --max-warnings=0",
|
|
32
|
+
"lint:fix": "eslint . --report-unused-disable-directives --fix",
|
|
33
|
+
"format": "prettier . --write",
|
|
34
|
+
"format:check": "prettier --check ."
|
|
35
|
+
},
|
|
36
|
+
"private": true
|
|
37
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EmitContext, emitFile, resolvePath } from "@typespec/compiler";
|
|
2
|
+
|
|
3
|
+
export async function $onEmit(context: EmitContext) {
|
|
4
|
+
if (!context.program.compilerOptions.noEmit) {
|
|
5
|
+
await emitFile(context.program, {
|
|
6
|
+
path: resolvePath(context.emitterOutputDir, "output.txt"),
|
|
7
|
+
content: "Hello world\n",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTestLibrary,
|
|
3
|
+
findTestPackageRoot,
|
|
4
|
+
TypeSpecTestLibrary,
|
|
5
|
+
} from "@typespec/compiler/testing";
|
|
6
|
+
|
|
7
|
+
export const TestLibrary: TypeSpecTestLibrary = createTestLibrary({
|
|
8
|
+
name: "emitter-ts",
|
|
9
|
+
packageRoot: await findTestPackageRoot(import.meta.url),
|
|
10
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { strictEqual } from "node:assert";
|
|
2
|
+
import { describe, it } from "vitest";
|
|
3
|
+
import { emit } from "./test-host.js";
|
|
4
|
+
|
|
5
|
+
describe("hello", () => {
|
|
6
|
+
it("emit output.txt with content hello world", async () => {
|
|
7
|
+
const results = await emit(`op test(): void;`);
|
|
8
|
+
strictEqual(results["output.txt"], "Hello world\n");
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Diagnostic, resolvePath } from "@typespec/compiler";
|
|
2
|
+
import {
|
|
3
|
+
createTestHost,
|
|
4
|
+
createTestWrapper,
|
|
5
|
+
expectDiagnosticEmpty,
|
|
6
|
+
} from "@typespec/compiler/testing";
|
|
7
|
+
import { TestLibrary } from "../src/testing/index.js";
|
|
8
|
+
|
|
9
|
+
export async function createEmitterTsTestHost() {
|
|
10
|
+
return createTestHost({
|
|
11
|
+
libraries: [TestLibrary],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function createEmitterTsTestRunner() {
|
|
16
|
+
const host = await createEmitterTsTestHost();
|
|
17
|
+
|
|
18
|
+
return createTestWrapper(host, {
|
|
19
|
+
compilerOptions: {
|
|
20
|
+
noEmit: false,
|
|
21
|
+
emit: ["emitter-ts"],
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function emitWithDiagnostics(
|
|
27
|
+
code: string
|
|
28
|
+
): Promise<[Record<string, string>, readonly Diagnostic[]]> {
|
|
29
|
+
const runner = await createEmitterTsTestRunner();
|
|
30
|
+
await runner.compileAndDiagnose(code, {
|
|
31
|
+
outputDir: "tsp-output",
|
|
32
|
+
});
|
|
33
|
+
const emitterOutputDir = "./tsp-output/emitter-ts";
|
|
34
|
+
const files = await runner.program.host.readDir(emitterOutputDir);
|
|
35
|
+
|
|
36
|
+
const result: Record<string, string> = {};
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
result[file] = (await runner.program.host.readFile(resolvePath(emitterOutputDir, file))).text;
|
|
39
|
+
}
|
|
40
|
+
return [result, runner.program.diagnostics];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function emit(code: string): Promise<Record<string, string>> {
|
|
44
|
+
const [result, diagnostics] = await emitWithDiagnostics(code);
|
|
45
|
+
expectDiagnosticEmpty(diagnostics);
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"module": "NodeNext",
|
|
6
|
+
"moduleResolution": "NodeNext",
|
|
7
|
+
"lib": ["ES2022"],
|
|
8
|
+
"rootDir": ".",
|
|
9
|
+
"outDir": "dist",
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
|
|
13
|
+
/* Linting */
|
|
14
|
+
"strict": true
|
|
15
|
+
},
|
|
16
|
+
"include": ["src", "test"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
root: true
|
|
2
|
+
env:
|
|
3
|
+
es2021: true
|
|
4
|
+
node: true
|
|
5
|
+
extends:
|
|
6
|
+
- eslint:recommended
|
|
7
|
+
- plugin:@typescript-eslint/recommended
|
|
8
|
+
parser: "@typescript-eslint/parser"
|
|
9
|
+
parserOptions:
|
|
10
|
+
ecmaVersion: latest
|
|
11
|
+
sourceType: module
|
|
12
|
+
plugins:
|
|
13
|
+
- "@typescript-eslint"
|
|
14
|
+
rules: {}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/src/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"types": "./dist/src/index.d.ts",
|
|
9
|
+
"default": "./dist/src/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./testing": {
|
|
12
|
+
"types": "./dist/src/testing/index.d.ts",
|
|
13
|
+
"default": "./dist/src/testing/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@typespec/compiler": "latest"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "latest",
|
|
21
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
22
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
23
|
+
"eslint": "^8.45.0",
|
|
24
|
+
"typescript": "^5.3.3",
|
|
25
|
+
"prettier": "^3.0.3"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"watch": "tsc --watch",
|
|
30
|
+
"test": "node --test ./dist/test/",
|
|
31
|
+
"lint": "eslint src/ test/ --report-unused-disable-directives --max-warnings=0",
|
|
32
|
+
"lint:fix": "eslint . --report-unused-disable-directives --fix",
|
|
33
|
+
"format": "prettier . --write",
|
|
34
|
+
"format:check": "prettier --check ."
|
|
35
|
+
},
|
|
36
|
+
"private": true
|
|
37
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EmitContext, emitFile, resolvePath } from "@typespec/compiler";
|
|
2
|
+
|
|
3
|
+
export async function $onEmit(context: EmitContext) {
|
|
4
|
+
if (!context.program.compilerOptions.noEmit) {
|
|
5
|
+
await emitFile(context.program, {
|
|
6
|
+
path: resolvePath(context.emitterOutputDir, "output.txt"),
|
|
7
|
+
content: "Hello world\n",
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createTestLibrary,
|
|
3
|
+
findTestPackageRoot,
|
|
4
|
+
TypeSpecTestLibrary,
|
|
5
|
+
} from "@typespec/compiler/testing";
|
|
6
|
+
|
|
7
|
+
export const TestLibrary: TypeSpecTestLibrary = createTestLibrary({
|
|
8
|
+
name: "{{name}}",
|
|
9
|
+
packageRoot: await findTestPackageRoot(import.meta.url),
|
|
10
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { strictEqual } from "node:assert";
|
|
2
|
+
import { describe, it } from "vitest";
|
|
3
|
+
import { emit } from "./test-host.js";
|
|
4
|
+
|
|
5
|
+
describe("hello", () => {
|
|
6
|
+
it("emit output.txt with content hello world", async () => {
|
|
7
|
+
const results = await emit(`op test(): void;`);
|
|
8
|
+
strictEqual(results["output.txt"], "Hello world\n");
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Diagnostic, resolvePath } from "@typespec/compiler";
|
|
2
|
+
import {
|
|
3
|
+
createTestHost,
|
|
4
|
+
createTestWrapper,
|
|
5
|
+
expectDiagnosticEmpty,
|
|
6
|
+
} from "@typespec/compiler/testing";
|
|
7
|
+
import { TestLibrary } from "../src/testing/index.js";
|
|
8
|
+
|
|
9
|
+
export async function create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestHost() {
|
|
10
|
+
return createTestHost({
|
|
11
|
+
libraries: [TestLibrary],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestRunner() {
|
|
16
|
+
const host = await create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestHost();
|
|
17
|
+
|
|
18
|
+
return createTestWrapper(host, {
|
|
19
|
+
compilerOptions: {
|
|
20
|
+
noEmit: false,
|
|
21
|
+
emit: ["{{name}}"],
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function emitWithDiagnostics(
|
|
27
|
+
code: string
|
|
28
|
+
): Promise<[Record<string, string>, readonly Diagnostic[]]> {
|
|
29
|
+
const runner = await create{{#casing.pascalCase}}{{name}}{{/casing.pascalCase}}TestRunner();
|
|
30
|
+
await runner.compileAndDiagnose(code, {
|
|
31
|
+
outputDir: "tsp-output",
|
|
32
|
+
});
|
|
33
|
+
const emitterOutputDir = "./tsp-output/{{name}}";
|
|
34
|
+
const files = await runner.program.host.readDir(emitterOutputDir);
|
|
35
|
+
|
|
36
|
+
const result: Record<string, string> = {};
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
result[file] = (await runner.program.host.readFile(resolvePath(emitterOutputDir, file))).text;
|
|
39
|
+
}
|
|
40
|
+
return [result, runner.program.diagnostics];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function emit(code: string): Promise<Record<string, string>> {
|
|
44
|
+
const [result, diagnostics] = await emitWithDiagnostics(code);
|
|
45
|
+
expectDiagnosticEmpty(diagnostics);
|
|
46
|
+
return result;
|
|
47
|
+
}
|