@typespec/compiler 1.14.0-dev.8 → 1.15.0-dev.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.
Files changed (98) hide show
  1. package/dist/manifest.js +2 -2
  2. package/dist/src/core/auto-decorator.d.ts +12 -0
  3. package/dist/src/core/auto-decorator.d.ts.map +1 -1
  4. package/dist/src/core/auto-decorator.js +16 -2
  5. package/dist/src/core/auto-decorator.js.map +1 -1
  6. package/dist/src/core/checker.d.ts.map +1 -1
  7. package/dist/src/core/checker.js +30 -22
  8. package/dist/src/core/checker.js.map +1 -1
  9. package/dist/src/core/cli/actions/vs.d.ts.map +1 -1
  10. package/dist/src/core/cli/actions/vs.js +21 -10
  11. package/dist/src/core/cli/actions/vs.js.map +1 -1
  12. package/dist/src/core/cli/actions/vscode.d.ts.map +1 -1
  13. package/dist/src/core/cli/actions/vscode.js +9 -4
  14. package/dist/src/core/cli/actions/vscode.js.map +1 -1
  15. package/dist/src/core/cli/cli.js +4 -4
  16. package/dist/src/core/cli/cli.js.map +1 -1
  17. package/dist/src/core/cli/download-vsix.d.ts +19 -0
  18. package/dist/src/core/cli/download-vsix.d.ts.map +1 -0
  19. package/dist/src/core/cli/download-vsix.js +76 -0
  20. package/dist/src/core/cli/download-vsix.js.map +1 -0
  21. package/dist/src/core/cli/utils.d.ts +7 -0
  22. package/dist/src/core/cli/utils.d.ts.map +1 -1
  23. package/dist/src/core/cli/utils.js +16 -0
  24. package/dist/src/core/cli/utils.js.map +1 -1
  25. package/dist/src/core/diagnostics.d.ts +3 -3
  26. package/dist/src/core/diagnostics.d.ts.map +1 -1
  27. package/dist/src/core/diagnostics.js +34 -3
  28. package/dist/src/core/diagnostics.js.map +1 -1
  29. package/dist/src/core/entrypoint-resolution.d.ts.map +1 -1
  30. package/dist/src/core/entrypoint-resolution.js +5 -4
  31. package/dist/src/core/entrypoint-resolution.js.map +1 -1
  32. package/dist/src/core/features.d.ts.map +1 -1
  33. package/dist/src/core/features.js +15 -5
  34. package/dist/src/core/features.js.map +1 -1
  35. package/dist/src/core/messages.d.ts +56 -2
  36. package/dist/src/core/messages.d.ts.map +1 -1
  37. package/dist/src/core/messages.js +18 -0
  38. package/dist/src/core/messages.js.map +1 -1
  39. package/dist/src/core/program.d.ts.map +1 -1
  40. package/dist/src/core/program.js +6 -1
  41. package/dist/src/core/program.js.map +1 -1
  42. package/dist/src/core/source-loader.d.ts.map +1 -1
  43. package/dist/src/core/source-loader.js +23 -0
  44. package/dist/src/core/source-loader.js.map +1 -1
  45. package/dist/src/core/suppression-tracking.d.ts +4 -0
  46. package/dist/src/core/suppression-tracking.d.ts.map +1 -1
  47. package/dist/src/core/suppression-tracking.js +25 -0
  48. package/dist/src/core/suppression-tracking.js.map +1 -1
  49. package/dist/src/core/types.d.ts +6 -0
  50. package/dist/src/core/types.d.ts.map +1 -1
  51. package/dist/src/core/types.js.map +1 -1
  52. package/dist/src/experimental/mutators.d.ts.map +1 -1
  53. package/dist/src/experimental/mutators.js +32 -8
  54. package/dist/src/experimental/mutators.js.map +1 -1
  55. package/dist/src/index.d.ts +1 -1
  56. package/dist/src/index.d.ts.map +1 -1
  57. package/dist/src/index.js +1 -1
  58. package/dist/src/index.js.map +1 -1
  59. package/dist/src/testing/code-fix-testing.d.ts.map +1 -1
  60. package/dist/src/testing/code-fix-testing.js +2 -0
  61. package/dist/src/testing/code-fix-testing.js.map +1 -1
  62. package/dist/src/testing/fs.js +1 -0
  63. package/dist/src/testing/fs.js.map +1 -1
  64. package/dist/src/testing/index.d.ts +2 -1
  65. package/dist/src/testing/index.d.ts.map +1 -1
  66. package/dist/src/testing/index.js +3 -0
  67. package/dist/src/testing/index.js.map +1 -1
  68. package/dist/src/testing/rule-tester.d.ts.map +1 -1
  69. package/dist/src/testing/rule-tester.js +4 -1
  70. package/dist/src/testing/rule-tester.js.map +1 -1
  71. package/dist/src/testing/test-compiler-host.d.ts.map +1 -1
  72. package/dist/src/testing/test-compiler-host.js +5 -0
  73. package/dist/src/testing/test-compiler-host.js.map +1 -1
  74. package/dist/src/testing/test-host.d.ts +2 -2
  75. package/dist/src/testing/test-host.d.ts.map +1 -1
  76. package/dist/src/testing/test-host.js +4 -2
  77. package/dist/src/testing/test-host.js.map +1 -1
  78. package/dist/src/testing/test-utils.d.ts +6 -1
  79. package/dist/src/testing/test-utils.d.ts.map +1 -1
  80. package/dist/src/testing/test-utils.js +8 -1
  81. package/dist/src/testing/test-utils.js.map +1 -1
  82. package/dist/src/testing/tester.d.ts.map +1 -1
  83. package/dist/src/testing/tester.js +10 -0
  84. package/dist/src/testing/tester.js.map +1 -1
  85. package/dist/src/testing/types.d.ts +7 -0
  86. package/dist/src/testing/types.d.ts.map +1 -1
  87. package/dist/src/testing/types.js +2 -0
  88. package/dist/src/testing/types.js.map +1 -1
  89. package/package.json +4 -4
  90. package/templates/scaffolding.json +3 -11
  91. package/dist/src/core/cli/install-vsix.d.ts +0 -3
  92. package/dist/src/core/cli/install-vsix.d.ts.map +0 -1
  93. package/dist/src/core/cli/install-vsix.js +0 -41
  94. package/dist/src/core/cli/install-vsix.js.map +0 -1
  95. package/templates/__snapshots__/emitter-ts/src/testing/index.ts +0 -8
  96. package/templates/__snapshots__/library-ts/src/testing/index.ts +0 -8
  97. package/templates/emitter-ts/src/testing/index.ts.mu +0 -8
  98. package/templates/library-ts/src/testing/index.ts.mu +0 -8
package/dist/manifest.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export default {
2
- "version": "1.14.0-dev.8",
3
- "commit": "e9bf0fe2e17f8519401ce218b180b6f2dc3c1cf7"
2
+ "version": "1.15.0-dev.0",
3
+ "commit": "156c91d401959eba1bde02142eb00b27c669e571"
4
4
  };
@@ -1,5 +1,17 @@
1
1
  import type { Program } from "./program.js";
2
2
  import type { Type } from "./types.js";
3
+ /**
4
+ * Programmatically apply an auto decorator to a target, storing its argument values.
5
+ *
6
+ * Mirrors what the synthesized `auto dec` implementation does when the decorator is
7
+ * written in source, so emitters and mutators can mark synthetic types the same way
8
+ * without reaching into the program state map directly.
9
+ * @param program - The current program.
10
+ * @param decoratorFqn - The fully-qualified name of the decorator (e.g., "MyLib.myDec").
11
+ * @param target - The type to mark.
12
+ * @param value - The stored `{ paramName: value }` record (defaults to `{}` for a no-arg decorator).
13
+ */
14
+ export declare function setAutoDecorator(program: Program, decoratorFqn: string, target: Type, value?: Record<string, unknown>): void;
3
15
  /**
4
16
  * Check if an auto decorator has been applied to a target.
5
17
  * @param program - The current program.
@@ -1 +1 @@
1
- {"version":3,"file":"auto-decorator.d.ts","sourceRoot":"","sources":["../../../src/core/auto-decorator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAA4D,IAAI,EAAE,MAAM,YAAY,CAAC;AAyDjG;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAG9F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,IAAI,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAGrC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAGpB"}
1
+ {"version":3,"file":"auto-decorator.d.ts","sourceRoot":"","sources":["../../../src/core/auto-decorator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAA4D,IAAI,EAAE,MAAM,YAAY,CAAC;AAwDjG;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,IAAI,EACZ,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,IAAI,CAGN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAG9F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,IAAI,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAGrC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAGpB"}
@@ -21,7 +21,6 @@ export function getAutoDecoratorStateKey(decoratorFqn) {
21
21
  */
22
22
  export function createAutoDecoratorImplementation(symbol, node) {
23
23
  const fqn = getFullyQualifiedSymbolName(symbol);
24
- const stateKey = getAutoDecoratorStateKey(fqn);
25
24
  const paramNames = node.parameters.map((p) => p.id.sv);
26
25
  const lastParamIsRest = node.parameters.length > 0 && node.parameters[node.parameters.length - 1].rest;
27
26
  const impl = (context, target, ...args) => {
@@ -43,13 +42,28 @@ export function createAutoDecoratorImplementation(symbol, node) {
43
42
  data[paramNames[i]] = args[i];
44
43
  }
45
44
  }
46
- context.program.stateMap(stateKey).set(target, data);
45
+ setAutoDecorator(context.program, fqn, target, data);
47
46
  };
48
47
  // The function name drives the `@<name>` text in the duplicate-decorator
49
48
  // diagnostic; mirror the extern `$name` convention so the helper strips it.
50
49
  Object.defineProperty(impl, "name", { value: `$${node.id.sv}` });
51
50
  return impl;
52
51
  }
52
+ /**
53
+ * Programmatically apply an auto decorator to a target, storing its argument values.
54
+ *
55
+ * Mirrors what the synthesized `auto dec` implementation does when the decorator is
56
+ * written in source, so emitters and mutators can mark synthetic types the same way
57
+ * without reaching into the program state map directly.
58
+ * @param program - The current program.
59
+ * @param decoratorFqn - The fully-qualified name of the decorator (e.g., "MyLib.myDec").
60
+ * @param target - The type to mark.
61
+ * @param value - The stored `{ paramName: value }` record (defaults to `{}` for a no-arg decorator).
62
+ */
63
+ export function setAutoDecorator(program, decoratorFqn, target, value = {}) {
64
+ const key = getAutoDecoratorStateKey(decoratorFqn);
65
+ program.stateMap(key).set(target, value);
66
+ }
53
67
  /**
54
68
  * Check if an auto decorator has been applied to a target.
55
69
  * @param program - The current program.
@@ -1 +1 @@
1
- {"version":3,"file":"auto-decorator.js","sourceRoot":"","sources":["../../../src/core/auto-decorator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-decorator.js","sourceRoot":"","sources":["../../../src/core/auto-decorator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
@@ -3383,24 +3383,30 @@ export function createChecker(program, resolver) {
3383
3383
  function checkStringTemplateExpresion(ctx, node) {
3384
3384
  let hasType = false;
3385
3385
  let hasValue = false;
3386
- const spanTypeOrValues = node.spans.map((span) => [span, checkNode(ctx, span.expression)]);
3386
+ const spanTypeOrValues = [];
3387
+ for (const span of node.spans) {
3388
+ const typeOrValue = checkNode(ctx, span.expression);
3389
+ // A null span is the value-world equivalent of `errorType`: the expression couldn't
3390
+ // produce a usable value (e.g. an already-reported error, or a function call that can't
3391
+ // be evaluated yet in a template declaration). Like `checkArrayValue`/`checkObjectValue`,
3392
+ // propagate the null up so the whole template resolves to null instead of fabricating a
3393
+ // partial string. It is re-evaluated against the real value when the template is instantiated.
3394
+ if (typeOrValue === null) {
3395
+ return null;
3396
+ }
3397
+ spanTypeOrValues.push([span, typeOrValue]);
3398
+ }
3387
3399
  for (const [_, typeOrValue] of spanTypeOrValues) {
3388
- if (typeOrValue !== null) {
3389
- if (isValue(typeOrValue)) {
3390
- hasValue = true;
3391
- }
3392
- else if ("kind" in typeOrValue &&
3393
- (typeOrValue.kind === "TemplateParameter" ||
3394
- typeOrValue.kind === "TemplateParameterAccess")) {
3395
- if (typeOrValue.constraint) {
3396
- if (typeOrValue.constraint.valueType) {
3397
- hasValue = true;
3398
- }
3399
- if (typeOrValue.constraint.type) {
3400
- hasType = true;
3401
- }
3400
+ if (isValue(typeOrValue)) {
3401
+ hasValue = true;
3402
+ }
3403
+ else if ("kind" in typeOrValue &&
3404
+ (typeOrValue.kind === "TemplateParameter" || typeOrValue.kind === "TemplateParameterAccess")) {
3405
+ if (typeOrValue.constraint) {
3406
+ if (typeOrValue.constraint.valueType) {
3407
+ hasValue = true;
3402
3408
  }
3403
- else {
3409
+ if (typeOrValue.constraint.type) {
3404
3410
  hasType = true;
3405
3411
  }
3406
3412
  }
@@ -3408,6 +3414,9 @@ export function createChecker(program, resolver) {
3408
3414
  hasType = true;
3409
3415
  }
3410
3416
  }
3417
+ else {
3418
+ hasType = true;
3419
+ }
3411
3420
  }
3412
3421
  if (hasType && hasValue) {
3413
3422
  reportCheckerDiagnostic(createDiagnostic({
@@ -3419,11 +3428,10 @@ export function createChecker(program, resolver) {
3419
3428
  if (hasValue) {
3420
3429
  let str = node.head.value;
3421
3430
  for (const [span, typeOrValue] of spanTypeOrValues) {
3422
- if (typeOrValue !== null &&
3423
- (!("kind" in typeOrValue) ||
3424
- (typeOrValue.kind !== "TemplateParameter" &&
3425
- typeOrValue.kind !== "TemplateParameterAccess"))) {
3426
- compilerAssert(typeOrValue !== null && isValue(typeOrValue), "Expected value.");
3431
+ if (!("kind" in typeOrValue) ||
3432
+ (typeOrValue.kind !== "TemplateParameter" &&
3433
+ typeOrValue.kind !== "TemplateParameterAccess")) {
3434
+ compilerAssert(isValue(typeOrValue), "Expected value.");
3427
3435
  str += stringifyValueForTemplate(typeOrValue);
3428
3436
  }
3429
3437
  str += span.literal.value;
@@ -3435,7 +3443,7 @@ export function createChecker(program, resolver) {
3435
3443
  let stringValue = node.head.value;
3436
3444
  const spans = [createTemplateSpanLiteral(node.head)];
3437
3445
  for (const [span, typeOrValue] of spanTypeOrValues) {
3438
- compilerAssert(typeOrValue !== null && !isValue(typeOrValue), "Expected type.");
3446
+ compilerAssert(!isValue(typeOrValue), "Expected type.");
3439
3447
  const type = typeOrValue.entityKind === "Indeterminate" ? typeOrValue.type : typeOrValue;
3440
3448
  const spanValue = createTemplateSpanValue(span.expression, type);
3441
3449
  spans.push(spanValue);