@typespec/compiler 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +9 -0
- package/cmd/tsp-server.js +3 -0
- package/cmd/tsp.js +3 -0
- package/dist/cmd/runner.d.ts +9 -0
- package/dist/cmd/runner.d.ts.map +1 -0
- package/dist/cmd/runner.js +62 -0
- package/dist/cmd/runner.js.map +1 -0
- package/dist/config/config-interpolation.d.ts +11 -0
- package/dist/config/config-interpolation.d.ts.map +1 -0
- package/dist/config/config-interpolation.js +109 -0
- package/dist/config/config-interpolation.js.map +1 -0
- package/dist/config/config-loader.d.ts +25 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +182 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config-schema.d.ts +4 -0
- package/dist/config/config-schema.d.ts.map +1 -0
- package/dist/config/config-schema.js +84 -0
- package/dist/config/config-schema.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +79 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/binder.d.ts +29 -0
- package/dist/core/binder.d.ts.map +1 -0
- package/dist/core/binder.js +455 -0
- package/dist/core/binder.js.map +1 -0
- package/dist/core/charcode.d.ts +130 -0
- package/dist/core/charcode.d.ts.map +1 -0
- package/dist/core/charcode.js +115 -0
- package/dist/core/charcode.js.map +1 -0
- package/dist/core/checker.d.ts +138 -0
- package/dist/core/checker.d.ts.map +1 -0
- package/dist/core/checker.js +4070 -0
- package/dist/core/checker.js.map +1 -0
- package/dist/core/cli/args.d.ts +18 -0
- package/dist/core/cli/args.d.ts.map +1 -0
- package/dist/core/cli/args.js +108 -0
- package/dist/core/cli/args.js.map +1 -0
- package/dist/core/cli/cli.d.ts +2 -0
- package/dist/core/cli/cli.d.ts.map +1 -0
- package/dist/core/cli/cli.js +477 -0
- package/dist/core/cli/cli.js.map +1 -0
- package/dist/core/cli/index.d.ts +2 -0
- package/dist/core/cli/index.d.ts.map +1 -0
- package/dist/core/cli/index.js +2 -0
- package/dist/core/cli/index.js.map +1 -0
- package/dist/core/decorator-utils.d.ts +108 -0
- package/dist/core/decorator-utils.d.ts.map +1 -0
- package/dist/core/decorator-utils.js +326 -0
- package/dist/core/decorator-utils.js.map +1 -0
- package/dist/core/diagnostics.d.ts +93 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +315 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/emitter-utils.d.ts +14 -0
- package/dist/core/emitter-utils.d.ts.map +1 -0
- package/dist/core/emitter-utils.js +16 -0
- package/dist/core/emitter-utils.js.map +1 -0
- package/dist/core/formatter-fs.d.ts +21 -0
- package/dist/core/formatter-fs.d.ts.map +1 -0
- package/dist/core/formatter-fs.js +79 -0
- package/dist/core/formatter-fs.js.map +1 -0
- package/dist/core/formatter.d.ts +10 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +24 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/helpers/discriminator-utils.d.ts +14 -0
- package/dist/core/helpers/discriminator-utils.d.ts.map +1 -0
- package/dist/core/helpers/discriminator-utils.js +169 -0
- package/dist/core/helpers/discriminator-utils.js.map +1 -0
- package/dist/core/helpers/index.d.ts +6 -0
- package/dist/core/helpers/index.d.ts.map +1 -0
- package/dist/core/helpers/index.js +6 -0
- package/dist/core/helpers/index.js.map +1 -0
- package/dist/core/helpers/operation-utils.d.ts +15 -0
- package/dist/core/helpers/operation-utils.d.ts.map +1 -0
- package/dist/core/helpers/operation-utils.js +35 -0
- package/dist/core/helpers/operation-utils.js.map +1 -0
- package/dist/core/helpers/projected-names-utils.d.ts +20 -0
- package/dist/core/helpers/projected-names-utils.d.ts.map +1 -0
- package/dist/core/helpers/projected-names-utils.js +40 -0
- package/dist/core/helpers/projected-names-utils.js.map +1 -0
- package/dist/core/helpers/type-name-utils.d.ts +14 -0
- package/dist/core/helpers/type-name-utils.d.ts.map +1 -0
- package/dist/core/helpers/type-name-utils.js +122 -0
- package/dist/core/helpers/type-name-utils.js.map +1 -0
- package/dist/core/helpers/usage-resolver.d.ts +20 -0
- package/dist/core/helpers/usage-resolver.d.ts.map +1 -0
- package/dist/core/helpers/usage-resolver.js +108 -0
- package/dist/core/helpers/usage-resolver.js.map +1 -0
- package/dist/core/index.d.ts +26 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/install.d.ts +2 -0
- package/dist/core/install.d.ts.map +1 -0
- package/dist/core/install.js +26 -0
- package/dist/core/install.js.map +1 -0
- package/dist/core/library.d.ts +34 -0
- package/dist/core/library.d.ts.map +1 -0
- package/dist/core/library.js +100 -0
- package/dist/core/library.js.map +1 -0
- package/dist/core/logger/console-sink.browser.d.ts +4 -0
- package/dist/core/logger/console-sink.browser.d.ts.map +1 -0
- package/dist/core/logger/console-sink.browser.js +14 -0
- package/dist/core/logger/console-sink.browser.js.map +1 -0
- package/dist/core/logger/console-sink.d.ts +9 -0
- package/dist/core/logger/console-sink.d.ts.map +1 -0
- package/dist/core/logger/console-sink.js +81 -0
- package/dist/core/logger/console-sink.js.map +1 -0
- package/dist/core/logger/index.d.ts +3 -0
- package/dist/core/logger/index.d.ts.map +1 -0
- package/dist/core/logger/index.js +3 -0
- package/dist/core/logger/index.js.map +1 -0
- package/dist/core/logger/logger.d.ts +7 -0
- package/dist/core/logger/logger.d.ts.map +1 -0
- package/dist/core/logger/logger.js +32 -0
- package/dist/core/logger/logger.js.map +1 -0
- package/dist/core/logger/tracer.d.ts +3 -0
- package/dist/core/logger/tracer.d.ts.map +1 -0
- package/dist/core/logger/tracer.js +91 -0
- package/dist/core/logger/tracer.js.map +1 -0
- package/dist/core/manifest.d.ts +21 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +8 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/messages.d.ts +2253 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +749 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/module-resolver.d.ts +84 -0
- package/dist/core/module-resolver.d.ts.map +1 -0
- package/dist/core/module-resolver.js +170 -0
- package/dist/core/module-resolver.js.map +1 -0
- package/dist/core/node-host.browser.d.ts +2 -0
- package/dist/core/node-host.browser.d.ts.map +1 -0
- package/dist/core/node-host.browser.js +2 -0
- package/dist/core/node-host.browser.js.map +1 -0
- package/dist/core/node-host.d.ts +7 -0
- package/dist/core/node-host.d.ts.map +1 -0
- package/dist/core/node-host.js +43 -0
- package/dist/core/node-host.js.map +1 -0
- package/dist/core/nonascii.d.ts +2 -0
- package/dist/core/nonascii.d.ts.map +1 -0
- package/dist/core/nonascii.js +712 -0
- package/dist/core/nonascii.js.map +1 -0
- package/dist/core/options.d.ts +46 -0
- package/dist/core/options.d.ts.map +1 -0
- package/dist/core/options.js +2 -0
- package/dist/core/options.js.map +1 -0
- package/dist/core/parser.d.ts +17 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +2561 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/path-utils.d.ts +193 -0
- package/dist/core/path-utils.d.ts.map +1 -0
- package/dist/core/path-utils.js +427 -0
- package/dist/core/path-utils.js.map +1 -0
- package/dist/core/program.d.ts +104 -0
- package/dist/core/program.d.ts.map +1 -0
- package/dist/core/program.js +898 -0
- package/dist/core/program.js.map +1 -0
- package/dist/core/projection-members.d.ts +8 -0
- package/dist/core/projection-members.d.ts.map +1 -0
- package/dist/core/projection-members.js +387 -0
- package/dist/core/projection-members.js.map +1 -0
- package/dist/core/projector.d.ts +26 -0
- package/dist/core/projector.d.ts.map +1 -0
- package/dist/core/projector.js +523 -0
- package/dist/core/projector.js.map +1 -0
- package/dist/core/scanner.d.ts +125 -0
- package/dist/core/scanner.d.ts.map +1 -0
- package/dist/core/scanner.js +1012 -0
- package/dist/core/scanner.js.map +1 -0
- package/dist/core/schema-validator.d.ts +6 -0
- package/dist/core/schema-validator.d.ts.map +1 -0
- package/dist/core/schema-validator.js +38 -0
- package/dist/core/schema-validator.js.map +1 -0
- package/dist/core/semantic-walker.d.ts +53 -0
- package/dist/core/semantic-walker.d.ts.map +1 -0
- package/dist/core/semantic-walker.js +355 -0
- package/dist/core/semantic-walker.js.map +1 -0
- package/dist/core/type-utils.d.ts +49 -0
- package/dist/core/type-utils.d.ts.map +1 -0
- package/dist/core/type-utils.js +95 -0
- package/dist/core/type-utils.js.map +1 -0
- package/dist/core/types.d.ts +1345 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +105 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/util.d.ts +150 -0
- package/dist/core/util.d.ts.map +1 -0
- package/dist/core/util.js +417 -0
- package/dist/core/util.js.map +1 -0
- package/dist/emitter-framework/asset-emitter.d.ts +5 -0
- package/dist/emitter-framework/asset-emitter.d.ts.map +1 -0
- package/dist/emitter-framework/asset-emitter.js +610 -0
- package/dist/emitter-framework/asset-emitter.js.map +1 -0
- package/dist/emitter-framework/builders/array-builder.d.ts +7 -0
- package/dist/emitter-framework/builders/array-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/array-builder.js +45 -0
- package/dist/emitter-framework/builders/array-builder.js.map +1 -0
- package/dist/emitter-framework/builders/object-builder.d.ts +9 -0
- package/dist/emitter-framework/builders/object-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/object-builder.js +30 -0
- package/dist/emitter-framework/builders/object-builder.js.map +1 -0
- package/dist/emitter-framework/builders/string-builder.d.ts +13 -0
- package/dist/emitter-framework/builders/string-builder.d.ts.map +1 -0
- package/dist/emitter-framework/builders/string-builder.js +98 -0
- package/dist/emitter-framework/builders/string-builder.js.map +1 -0
- package/dist/emitter-framework/custom-key-map.d.ts +29 -0
- package/dist/emitter-framework/custom-key-map.d.ts.map +1 -0
- package/dist/emitter-framework/custom-key-map.js +62 -0
- package/dist/emitter-framework/custom-key-map.js.map +1 -0
- package/dist/emitter-framework/index.d.ts +8 -0
- package/dist/emitter-framework/index.d.ts.map +1 -0
- package/dist/emitter-framework/index.js +8 -0
- package/dist/emitter-framework/index.js.map +1 -0
- package/dist/emitter-framework/placeholder.d.ts +12 -0
- package/dist/emitter-framework/placeholder.d.ts.map +1 -0
- package/dist/emitter-framework/placeholder.js +27 -0
- package/dist/emitter-framework/placeholder.js.map +1 -0
- package/dist/emitter-framework/type-emitter.d.ts +314 -0
- package/dist/emitter-framework/type-emitter.d.ts.map +1 -0
- package/dist/emitter-framework/type-emitter.js +612 -0
- package/dist/emitter-framework/type-emitter.js.map +1 -0
- package/dist/emitter-framework/types.d.ts +124 -0
- package/dist/emitter-framework/types.d.ts.map +1 -0
- package/dist/emitter-framework/types.js +39 -0
- package/dist/emitter-framework/types.js.map +1 -0
- package/dist/formatter/index.d.ts +11 -0
- package/dist/formatter/index.d.ts.map +1 -0
- package/dist/formatter/index.js +28 -0
- package/dist/formatter/index.js.map +1 -0
- package/dist/formatter/parser.d.ts +16 -0
- package/dist/formatter/parser.d.ts.map +1 -0
- package/dist/formatter/parser.js +23 -0
- package/dist/formatter/parser.js.map +1 -0
- package/dist/formatter/print/comment-handler.d.ts +7 -0
- package/dist/formatter/print/comment-handler.d.ts.map +1 -0
- package/dist/formatter/print/comment-handler.js +81 -0
- package/dist/formatter/print/comment-handler.js.map +1 -0
- package/dist/formatter/print/index.d.ts +3 -0
- package/dist/formatter/print/index.d.ts.map +1 -0
- package/dist/formatter/print/index.js +3 -0
- package/dist/formatter/print/index.js.map +1 -0
- package/dist/formatter/print/needs-parens.d.ts +10 -0
- package/dist/formatter/print/needs-parens.d.ts.map +1 -0
- package/dist/formatter/print/needs-parens.js +27 -0
- package/dist/formatter/print/needs-parens.js.map +1 -0
- package/dist/formatter/print/printer.d.ts +62 -0
- package/dist/formatter/print/printer.d.ts.map +1 -0
- package/dist/formatter/print/printer.js +1025 -0
- package/dist/formatter/print/printer.js.map +1 -0
- package/dist/formatter/print/types.d.ts +9 -0
- package/dist/formatter/print/types.d.ts.map +1 -0
- package/dist/formatter/print/types.js +2 -0
- package/dist/formatter/print/types.js.map +1 -0
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +2 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/init-template.d.ts +45 -0
- package/dist/init/init-template.d.ts.map +1 -0
- package/dist/init/init-template.js +45 -0
- package/dist/init/init-template.js.map +1 -0
- package/dist/init/init.d.ts +49 -0
- package/dist/init/init.d.ts.map +1 -0
- package/dist/init/init.js +224 -0
- package/dist/init/init.js.map +1 -0
- package/dist/lib/decorators.d.ts +222 -0
- package/dist/lib/decorators.d.ts.map +1 -0
- package/dist/lib/decorators.js +745 -0
- package/dist/lib/decorators.js.map +1 -0
- package/dist/lib/service.d.ts +38 -0
- package/dist/lib/service.d.ts.map +1 -0
- package/dist/lib/service.js +78 -0
- package/dist/lib/service.js.map +1 -0
- package/dist/manifest.js +4 -0
- package/dist/server/completion.d.ts +10 -0
- package/dist/server/completion.d.ts.map +1 -0
- package/dist/server/completion.js +207 -0
- package/dist/server/completion.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/language-config.d.ts +195 -0
- package/dist/server/language-config.d.ts.map +1 -0
- package/dist/server/language-config.js +102 -0
- package/dist/server/language-config.js.map +1 -0
- package/dist/server/server.d.ts +2 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +131 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/serverlib.d.ts +72 -0
- package/dist/server/serverlib.d.ts.map +1 -0
- package/dist/server/serverlib.js +1034 -0
- package/dist/server/serverlib.js.map +1 -0
- package/dist/server/symbol-structure.d.ts +4 -0
- package/dist/server/symbol-structure.d.ts.map +1 -0
- package/dist/server/symbol-structure.js +121 -0
- package/dist/server/symbol-structure.js.map +1 -0
- package/dist/server/tmlanguage.d.ts +3 -0
- package/dist/server/tmlanguage.d.ts.map +1 -0
- package/dist/server/tmlanguage.js +713 -0
- package/dist/server/tmlanguage.js.map +1 -0
- package/dist/server/type-details.d.ts +11 -0
- package/dist/server/type-details.d.ts.map +1 -0
- package/dist/server/type-details.js +72 -0
- package/dist/server/type-details.js.map +1 -0
- package/dist/server/type-signature.d.ts +2 -0
- package/dist/server/type-signature.d.ts.map +1 -0
- package/dist/server/type-signature.js +108 -0
- package/dist/server/type-signature.js.map +1 -0
- package/dist/testing/expect.d.ts +49 -0
- package/dist/testing/expect.d.ts.map +1 -0
- package/dist/testing/expect.js +83 -0
- package/dist/testing/expect.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +6 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-host.d.ts +14 -0
- package/dist/testing/test-host.d.ts.map +1 -0
- package/dist/testing/test-host.js +271 -0
- package/dist/testing/test-host.js.map +1 -0
- package/dist/testing/test-server-host.d.ts +39 -0
- package/dist/testing/test-server-host.d.ts.map +1 -0
- package/dist/testing/test-server-host.js +112 -0
- package/dist/testing/test-server-host.js.map +1 -0
- package/dist/testing/test-utils.d.ts +22 -0
- package/dist/testing/test-utils.d.ts.map +1 -0
- package/dist/testing/test-utils.js +60 -0
- package/dist/testing/test-utils.js.map +1 -0
- package/dist/testing/types.d.ts +69 -0
- package/dist/testing/types.d.ts.map +1 -0
- package/dist/testing/types.js +7 -0
- package/dist/testing/types.js.map +1 -0
- package/dist/typespec.tmLanguage +1760 -0
- package/lib/decorators.tsp +420 -0
- package/lib/lib.tsp +158 -0
- package/lib/main.tsp +4 -0
- package/lib/projected-names.tsp +94 -0
- package/lib/reflection.tsp +10 -0
- package/package.json +119 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { getPropertyType } from "../lib/decorators.js";
|
|
2
|
+
import { getTypeName } from "./helpers/type-name-utils.js";
|
|
3
|
+
import { compilerAssert, SyntaxKind } from "./index.js";
|
|
4
|
+
import { createDiagnostic, reportDiagnostic } from "./messages.js";
|
|
5
|
+
/**
|
|
6
|
+
* Validate the decorator target is matching the expected value.
|
|
7
|
+
* @param program
|
|
8
|
+
* @param target
|
|
9
|
+
* @param expectedType
|
|
10
|
+
* @param decoratorName
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
13
|
+
export function validateDecoratorTarget(context, target, decoratorName, expectedType) {
|
|
14
|
+
const isCorrectType = isTypeSpecValueTypeOf(target, expectedType);
|
|
15
|
+
if (!isCorrectType) {
|
|
16
|
+
reportDiagnostic(context.program, {
|
|
17
|
+
code: "decorator-wrong-target",
|
|
18
|
+
format: {
|
|
19
|
+
decorator: decoratorName,
|
|
20
|
+
to: target.kind,
|
|
21
|
+
},
|
|
22
|
+
target: context.decoratorTarget,
|
|
23
|
+
});
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
export function validateDecoratorTargetIntrinsic(context, target, decoratorName, expectedType) {
|
|
29
|
+
const expectedTypeStrs = typeof expectedType === "string" ? [expectedType] : expectedType;
|
|
30
|
+
const expectedTypes = expectedTypeStrs.map((x) => context.program.checker.getStdType(x));
|
|
31
|
+
const type = getPropertyType(target);
|
|
32
|
+
const isCorrect = expectedTypes.some((x) => { var _a; return context.program.checker.isTypeAssignableTo((_a = type.projectionBase) !== null && _a !== void 0 ? _a : type, x, type)[0]; });
|
|
33
|
+
if (!isCorrect) {
|
|
34
|
+
context.program.reportDiagnostic(createDiagnostic({
|
|
35
|
+
code: "decorator-wrong-target",
|
|
36
|
+
format: {
|
|
37
|
+
decorator: decoratorName,
|
|
38
|
+
to: `type it is not one of: ${typeof expectedTypeStrs.join(", ")}`,
|
|
39
|
+
},
|
|
40
|
+
target: context.decoratorTarget,
|
|
41
|
+
}));
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/** @deprecated use isTypeSpecValueTypeOf */
|
|
47
|
+
export const isCadlValueTypeOf = isTypeSpecValueTypeOf;
|
|
48
|
+
/**
|
|
49
|
+
* Check if the given target is of any of the typespec types.
|
|
50
|
+
* @param target Target to validate.
|
|
51
|
+
* @param expectedType One or multiple allowed typespec types.
|
|
52
|
+
* @returns boolean if the target is of one of the allowed types.
|
|
53
|
+
*/
|
|
54
|
+
export function isTypeSpecValueTypeOf(target, expectedType) {
|
|
55
|
+
const kind = getTypeKind(target);
|
|
56
|
+
if (kind === undefined) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return typeof expectedType === "string"
|
|
60
|
+
? expectedType === "Any" || kind === expectedType
|
|
61
|
+
: expectedType.includes("Any") || expectedType.includes(kind);
|
|
62
|
+
}
|
|
63
|
+
function getTypeKind(target) {
|
|
64
|
+
switch (typeof target) {
|
|
65
|
+
case "object":
|
|
66
|
+
return target.kind;
|
|
67
|
+
case "string":
|
|
68
|
+
return "String";
|
|
69
|
+
case "number":
|
|
70
|
+
return "Number";
|
|
71
|
+
case "boolean":
|
|
72
|
+
return "Boolean";
|
|
73
|
+
default:
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validate a decorator parameter has the correct type.
|
|
79
|
+
* @param program Program
|
|
80
|
+
* @param target Decorator target
|
|
81
|
+
* @param value Value of the parameter.
|
|
82
|
+
* @param expectedType Expected type or list of expected type
|
|
83
|
+
* @returns true if the value is of one of the type in the list of expected types. If not emit a diagnostic.
|
|
84
|
+
* @deprecated use @see createDecoratorDefinition#validate instead.
|
|
85
|
+
*/
|
|
86
|
+
export function validateDecoratorParamType(program, target, value, expectedType) {
|
|
87
|
+
if (!isTypeSpecValueTypeOf(value, expectedType)) {
|
|
88
|
+
reportDiagnostic(program, {
|
|
89
|
+
code: "invalid-argument",
|
|
90
|
+
format: {
|
|
91
|
+
value: prettyValue(program, value),
|
|
92
|
+
expected: typeof expectedType === "string" ? expectedType : expectedType.join(", "),
|
|
93
|
+
},
|
|
94
|
+
target,
|
|
95
|
+
});
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @deprecated use extern dec definition in typespec instead.
|
|
102
|
+
*/
|
|
103
|
+
export function createDecoratorDefinition(definition) {
|
|
104
|
+
const minParams = definition.args.filter((x) => !x.optional).length;
|
|
105
|
+
const maxParams = definition.spreadArgs ? undefined : definition.args.length;
|
|
106
|
+
function validate(context, target, args) {
|
|
107
|
+
var _a;
|
|
108
|
+
if (!validateDecoratorTarget(context, target, definition.name, definition.target) ||
|
|
109
|
+
!validateDecoratorParamCount(context, minParams, maxParams, args)) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
for (const [index, arg] of args.entries()) {
|
|
113
|
+
const paramDefinition = (_a = definition.args[index]) !== null && _a !== void 0 ? _a : definition.spreadArgs;
|
|
114
|
+
if (arg === undefined) {
|
|
115
|
+
if (!paramDefinition.optional) {
|
|
116
|
+
reportDiagnostic(context.program, {
|
|
117
|
+
code: "invalid-argument",
|
|
118
|
+
format: {
|
|
119
|
+
value: "undefined",
|
|
120
|
+
expected: expectedTypeList(paramDefinition.kind),
|
|
121
|
+
},
|
|
122
|
+
target: context.getArgumentTarget(index),
|
|
123
|
+
});
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else if (!isTypeSpecValueTypeOf(arg, paramDefinition.kind)) {
|
|
128
|
+
reportDiagnostic(context.program, {
|
|
129
|
+
code: "invalid-argument",
|
|
130
|
+
format: {
|
|
131
|
+
value: prettyValue(context.program, arg),
|
|
132
|
+
expected: expectedTypeList(paramDefinition.kind),
|
|
133
|
+
},
|
|
134
|
+
target: context.getArgumentTarget(index),
|
|
135
|
+
});
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
validate(context, target, parameters) {
|
|
143
|
+
return validate(context, target, parameters);
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function expectedTypeList(expectedType) {
|
|
148
|
+
return typeof expectedType === "string" ? expectedType : expectedType.join(", ");
|
|
149
|
+
}
|
|
150
|
+
export function validateDecoratorParamCount(context, min, max, parameters) {
|
|
151
|
+
let missing = 0;
|
|
152
|
+
for (let i = parameters.length - 1; i >= 0; i--) {
|
|
153
|
+
if (parameters[i] === undefined) {
|
|
154
|
+
missing++;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const parameterCount = parameters.length - missing;
|
|
161
|
+
if (parameterCount < min || (max !== undefined && parameterCount > max)) {
|
|
162
|
+
if (min === max) {
|
|
163
|
+
reportDiagnostic(context.program, {
|
|
164
|
+
code: "invalid-argument-count",
|
|
165
|
+
format: {
|
|
166
|
+
actual: parameterCount.toString(),
|
|
167
|
+
expected: min.toString(),
|
|
168
|
+
},
|
|
169
|
+
target: context.decoratorTarget,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
reportDiagnostic(context.program, {
|
|
174
|
+
code: "invalid-argument-count",
|
|
175
|
+
format: {
|
|
176
|
+
actual: parameterCount.toString(),
|
|
177
|
+
expected: `${min}-${max === undefined ? "infinity" : max.toString()}`,
|
|
178
|
+
},
|
|
179
|
+
target: context.decoratorTarget,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
function prettyValue(program, value) {
|
|
187
|
+
if (typeof value === "object" && value !== null && "kind" in value) {
|
|
188
|
+
return getTypeName(value);
|
|
189
|
+
}
|
|
190
|
+
return value;
|
|
191
|
+
}
|
|
192
|
+
/** @deprecated use typespecTypeToJson */
|
|
193
|
+
export const cadlTypeToJson = typespecTypeToJson;
|
|
194
|
+
/**
|
|
195
|
+
* Convert a typespec type to a serializable Json object.
|
|
196
|
+
* Emits diagnostics if the given type is invalid
|
|
197
|
+
* @param typespecType The type to convert to Json data
|
|
198
|
+
* @param target The diagnostic target in case of errors.
|
|
199
|
+
*/
|
|
200
|
+
export function typespecTypeToJson(typespecType, target) {
|
|
201
|
+
if (typeof typespecType !== "object") {
|
|
202
|
+
return [typespecType, []];
|
|
203
|
+
}
|
|
204
|
+
return typespecTypeToJsonInternal(typespecType, target, []);
|
|
205
|
+
}
|
|
206
|
+
function typespecTypeToJsonInternal(typespecType, target, path) {
|
|
207
|
+
var _a;
|
|
208
|
+
switch (typespecType.kind) {
|
|
209
|
+
case "String":
|
|
210
|
+
case "Boolean":
|
|
211
|
+
case "Number":
|
|
212
|
+
return [typespecType.value, []];
|
|
213
|
+
case "EnumMember":
|
|
214
|
+
return [(_a = typespecType.value) !== null && _a !== void 0 ? _a : typespecType.name, []];
|
|
215
|
+
case "Tuple": {
|
|
216
|
+
const result = [];
|
|
217
|
+
for (const [index, type] of typespecType.values.entries()) {
|
|
218
|
+
const [item, diagnostics] = typespecTypeToJsonInternal(type, target, [
|
|
219
|
+
...path,
|
|
220
|
+
index.toString(),
|
|
221
|
+
]);
|
|
222
|
+
if (diagnostics.length > 0) {
|
|
223
|
+
return [undefined, diagnostics];
|
|
224
|
+
}
|
|
225
|
+
result.push(item);
|
|
226
|
+
}
|
|
227
|
+
return [result, []];
|
|
228
|
+
}
|
|
229
|
+
case "Model": {
|
|
230
|
+
const result = {};
|
|
231
|
+
for (const [name, type] of typespecType.properties.entries()) {
|
|
232
|
+
const [item, diagnostics] = typespecTypeToJsonInternal(type.type, target, [
|
|
233
|
+
...path,
|
|
234
|
+
name.toString(),
|
|
235
|
+
]);
|
|
236
|
+
if (diagnostics.length > 0) {
|
|
237
|
+
return [undefined, diagnostics];
|
|
238
|
+
}
|
|
239
|
+
result[name] = item;
|
|
240
|
+
}
|
|
241
|
+
return [result, []];
|
|
242
|
+
}
|
|
243
|
+
default:
|
|
244
|
+
const diagnostic = path.length === 0
|
|
245
|
+
? createDiagnostic({
|
|
246
|
+
code: "invalid-value",
|
|
247
|
+
format: {
|
|
248
|
+
kind: typespecType.kind,
|
|
249
|
+
},
|
|
250
|
+
target,
|
|
251
|
+
})
|
|
252
|
+
: createDiagnostic({
|
|
253
|
+
code: "invalid-value",
|
|
254
|
+
messageId: "atPath",
|
|
255
|
+
format: {
|
|
256
|
+
kind: typespecType.kind,
|
|
257
|
+
path: path.join("."),
|
|
258
|
+
},
|
|
259
|
+
target,
|
|
260
|
+
});
|
|
261
|
+
return [undefined, [diagnostic]];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
export function validateDecoratorUniqueOnNode(context, type, decorator) {
|
|
265
|
+
compilerAssert("decorators" in type, "Type should have decorators");
|
|
266
|
+
const sameDecorators = type.decorators.filter((x) => {
|
|
267
|
+
var _a, _b;
|
|
268
|
+
return x.decorator === decorator &&
|
|
269
|
+
((_a = x.node) === null || _a === void 0 ? void 0 : _a.kind) === SyntaxKind.DecoratorExpression &&
|
|
270
|
+
((_b = x.node) === null || _b === void 0 ? void 0 : _b.parent) === type.node;
|
|
271
|
+
});
|
|
272
|
+
if (sameDecorators.length > 1) {
|
|
273
|
+
reportDiagnostic(context.program, {
|
|
274
|
+
code: "duplicate-decorator",
|
|
275
|
+
format: { decoratorName: "@" + decorator.name.slice(1) },
|
|
276
|
+
target: context.decoratorTarget,
|
|
277
|
+
});
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Validate that a given decorator is not on a type or any of its base types.
|
|
284
|
+
* Useful to check for decorator usage that conflicts with another decorator.
|
|
285
|
+
* @param context Decorator context
|
|
286
|
+
* @param type The type to check
|
|
287
|
+
* @param badDecorator The decorator we don't want present
|
|
288
|
+
* @param givenDecorator The decorator that is the reason why we don't want the bad decorator present
|
|
289
|
+
* @param includeHeritage Whether to check base types for the bad decorator too
|
|
290
|
+
* @returns Whether the decorator application is valid
|
|
291
|
+
*/
|
|
292
|
+
export function validateDecoratorNotOnType(context, type, badDecorator, givenDecorator) {
|
|
293
|
+
compilerAssert("decorators" in type, "Type should have decorators");
|
|
294
|
+
const decAppsToCheck = [];
|
|
295
|
+
let base = type;
|
|
296
|
+
while (base) {
|
|
297
|
+
decAppsToCheck.push(...base.decorators);
|
|
298
|
+
base = getHeritage(base);
|
|
299
|
+
}
|
|
300
|
+
for (const decapp of decAppsToCheck) {
|
|
301
|
+
if (decapp.decorator === badDecorator) {
|
|
302
|
+
reportDiagnostic(context.program, {
|
|
303
|
+
code: "decorator-conflict",
|
|
304
|
+
format: {
|
|
305
|
+
decoratorName: "@" + badDecorator.name.slice(1),
|
|
306
|
+
otherDecoratorName: "@" + givenDecorator.name.slice(1),
|
|
307
|
+
},
|
|
308
|
+
target: context.decoratorTarget,
|
|
309
|
+
});
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return true;
|
|
314
|
+
function getHeritage(type) {
|
|
315
|
+
if (type.kind === "Model") {
|
|
316
|
+
return type.baseModel;
|
|
317
|
+
}
|
|
318
|
+
else if (type.kind === "Scalar") {
|
|
319
|
+
return type.baseScalar;
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=decorator-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator-utils.js","sourceRoot":"","sources":["../../core/decorator-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Program } from "./program.js";
|
|
2
|
+
import { Diagnostic, DiagnosticCreator, DiagnosticMap, DiagnosticMessages, DiagnosticResult, DiagnosticTarget, LogSink, NoTarget, SourceFile, SourceLocation, Type } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Create a new diagnostics creator.
|
|
5
|
+
* @param diagnostics Map of the potential diagnostics.
|
|
6
|
+
* @param libraryName Optional name of the library if in the scope of a library.
|
|
7
|
+
* @returns @see DiagnosticCreator
|
|
8
|
+
*/
|
|
9
|
+
export declare function createDiagnosticCreator<T extends {
|
|
10
|
+
[code: string]: DiagnosticMessages;
|
|
11
|
+
}>(diagnostics: DiagnosticMap<T>, libraryName?: string): DiagnosticCreator<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Represents a failure while interpreting a projection.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ProjectionError extends Error {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export type WriteLine = (text?: string) => void;
|
|
19
|
+
export type DiagnosticHandler = (diagnostic: Diagnostic) => void;
|
|
20
|
+
export declare function logDiagnostics(diagnostics: readonly Diagnostic[], logger: LogSink): void;
|
|
21
|
+
export declare function formatDiagnostic(diagnostic: Diagnostic): string;
|
|
22
|
+
export declare function createSourceFile(text: string, path: string): SourceFile;
|
|
23
|
+
export declare function getSourceLocation(target: DiagnosticTarget): SourceLocation;
|
|
24
|
+
export declare function getSourceLocation(target: typeof NoTarget | undefined): undefined;
|
|
25
|
+
export declare function getSourceLocation(target: DiagnosticTarget | typeof NoTarget | undefined): SourceLocation | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Verbose output is enabled by default for runs in mocha explorer in VS Code,
|
|
28
|
+
* where the output is nicely associated with the individual test, and disabled
|
|
29
|
+
* by default for command line runs where we don't want to spam the console.
|
|
30
|
+
*
|
|
31
|
+
* If the steps taken to produce the message are expensive, pass a callback
|
|
32
|
+
* instead of producing the message then passing it here only to be dropped
|
|
33
|
+
* when verbose output is disabled.
|
|
34
|
+
*/
|
|
35
|
+
export declare function logVerboseTestOutput(messageOrCallback: string | ((log: (message: string) => void) => void)): void;
|
|
36
|
+
/**
|
|
37
|
+
* Use this to report bugs in the compiler, and not errors in the source code
|
|
38
|
+
* being compiled.
|
|
39
|
+
*
|
|
40
|
+
* @param condition Throw if this is not true.
|
|
41
|
+
*
|
|
42
|
+
* @param message Error message.
|
|
43
|
+
*
|
|
44
|
+
* @param target Optional location in source code that might give a clue about
|
|
45
|
+
* what got the compiler off track.
|
|
46
|
+
*/
|
|
47
|
+
export declare function compilerAssert(condition: any, message: string, target?: DiagnosticTarget): asserts condition;
|
|
48
|
+
/**
|
|
49
|
+
* Assert that the input type has one of the kinds provided
|
|
50
|
+
*/
|
|
51
|
+
export declare function assertType<TKind extends Type["kind"][]>(typeDescription: string, t: Type, ...kinds: TKind): asserts t is Type & {
|
|
52
|
+
kind: TKind[number];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Report a deprecated diagnostic.
|
|
56
|
+
* @param program TypeSpec Program.
|
|
57
|
+
* @param message Message describing the deprecation.
|
|
58
|
+
* @param target Target of the deprecation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function reportDeprecated(program: Program, message: string, target: DiagnosticTarget | typeof NoTarget): void;
|
|
61
|
+
/**
|
|
62
|
+
* Helper object to collect diagnostics from function following the diagnostics accessor pattern(foo() => [T, Diagnostic[]])
|
|
63
|
+
*/
|
|
64
|
+
export interface DiagnosticCollector {
|
|
65
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
66
|
+
/**
|
|
67
|
+
* Add a diagnostic to the collection
|
|
68
|
+
* @param diagnostic Diagnostic to add.
|
|
69
|
+
*/
|
|
70
|
+
add(diagnostic: Diagnostic): void;
|
|
71
|
+
/**
|
|
72
|
+
* Unwrap the Diagnostic result, add all the diagnostics and return the data.
|
|
73
|
+
* @param result Accessor diagnostic result
|
|
74
|
+
*/
|
|
75
|
+
pipe<T>(result: DiagnosticResult<T>): T;
|
|
76
|
+
/**
|
|
77
|
+
* Wrap the given value in a tuple including the diagnostics following the TypeSpec accessor pattern.
|
|
78
|
+
* @param value Accessor value to return
|
|
79
|
+
* @example return diagnostics.wrap(routes);
|
|
80
|
+
*/
|
|
81
|
+
wrap<T>(value: T): DiagnosticResult<T>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create a new instance of the @see DiagnosticCollector.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createDiagnosticCollector(): DiagnosticCollector;
|
|
87
|
+
/**
|
|
88
|
+
* Ignore the diagnostics emitted by the diagnostic accessor pattern and just return the actual result.
|
|
89
|
+
* @param result: Accessor pattern tuple result including the actual result and the list of diagnostics.
|
|
90
|
+
* @returns Actual result.
|
|
91
|
+
*/
|
|
92
|
+
export declare function ignoreDiagnostics<T>(result: DiagnosticResult<T>): T;
|
|
93
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../core/diagnostics.ts"],"names":[],"mappings":"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"}
|