@typespec/compiler 1.10.0-dev.2 → 1.10.0-dev.4

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 (62) hide show
  1. package/dist/generated-defs/TypeSpec.Prototypes.ts-test.js +1 -1
  2. package/dist/generated-defs/TypeSpec.Prototypes.ts-test.js.map +1 -1
  3. package/dist/generated-defs/TypeSpec.ts-test.js +1 -1
  4. package/dist/generated-defs/TypeSpec.ts-test.js.map +1 -1
  5. package/dist/manifest.js +2 -2
  6. package/dist/src/core/binder.d.ts.map +1 -1
  7. package/dist/src/core/binder.js +10 -8
  8. package/dist/src/core/binder.js.map +1 -1
  9. package/dist/src/core/checker.d.ts.map +1 -1
  10. package/dist/src/core/checker.js +485 -46
  11. package/dist/src/core/checker.js.map +1 -1
  12. package/dist/src/core/helpers/string-template-utils.d.ts.map +1 -1
  13. package/dist/src/core/helpers/string-template-utils.js +7 -4
  14. package/dist/src/core/helpers/string-template-utils.js.map +1 -1
  15. package/dist/src/core/helpers/type-name-utils.d.ts.map +1 -1
  16. package/dist/src/core/helpers/type-name-utils.js +13 -0
  17. package/dist/src/core/helpers/type-name-utils.js.map +1 -1
  18. package/dist/src/core/js-marshaller.d.ts +4 -2
  19. package/dist/src/core/js-marshaller.d.ts.map +1 -1
  20. package/dist/src/core/js-marshaller.js +96 -6
  21. package/dist/src/core/js-marshaller.js.map +1 -1
  22. package/dist/src/core/messages.d.ts +101 -12
  23. package/dist/src/core/messages.d.ts.map +1 -1
  24. package/dist/src/core/messages.js +27 -2
  25. package/dist/src/core/messages.js.map +1 -1
  26. package/dist/src/core/name-resolver.d.ts.map +1 -1
  27. package/dist/src/core/name-resolver.js +30 -0
  28. package/dist/src/core/name-resolver.js.map +1 -1
  29. package/dist/src/core/parser.d.ts.map +1 -1
  30. package/dist/src/core/parser.js +34 -6
  31. package/dist/src/core/parser.js.map +1 -1
  32. package/dist/src/core/scanner.d.ts +5 -5
  33. package/dist/src/core/scanner.d.ts.map +1 -1
  34. package/dist/src/core/scanner.js +8 -8
  35. package/dist/src/core/scanner.js.map +1 -1
  36. package/dist/src/core/semantic-walker.d.ts +3 -3
  37. package/dist/src/core/semantic-walker.d.ts.map +1 -1
  38. package/dist/src/core/semantic-walker.js +63 -44
  39. package/dist/src/core/semantic-walker.js.map +1 -1
  40. package/dist/src/core/type-relation-checker.d.ts.map +1 -1
  41. package/dist/src/core/type-relation-checker.js +157 -10
  42. package/dist/src/core/type-relation-checker.js.map +1 -1
  43. package/dist/src/core/types.d.ts +187 -23
  44. package/dist/src/core/types.d.ts.map +1 -1
  45. package/dist/src/core/types.js +1 -0
  46. package/dist/src/core/types.js.map +1 -1
  47. package/dist/src/experimental/typekit/index.d.ts.map +1 -1
  48. package/dist/src/experimental/typekit/index.js.map +1 -1
  49. package/dist/src/formatter/print/printer.d.ts.map +1 -1
  50. package/dist/src/formatter/print/printer.js +13 -0
  51. package/dist/src/formatter/print/printer.js.map +1 -1
  52. package/dist/src/index.d.ts +2 -1
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +1 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/lib/examples.d.ts +10 -3
  57. package/dist/src/lib/examples.d.ts.map +1 -1
  58. package/dist/src/lib/examples.js +22 -7
  59. package/dist/src/lib/examples.js.map +1 -1
  60. package/dist/src/server/type-signature.js +19 -0
  61. package/dist/src/server/type-signature.js.map +1 -1
  62. package/package.json +1 -1
@@ -30,7 +30,6 @@ const ReflectionNameToKind = {
30
30
  Union: "Union",
31
31
  UnionVariant: "UnionVariant",
32
32
  };
33
- const _assertReflectionNameToKind = ReflectionNameToKind;
34
33
  export function createTypeRelationChecker(program, checker) {
35
34
  return {
36
35
  isTypeAssignableTo,
@@ -142,6 +141,11 @@ export function createTypeRelationChecker(program, checker) {
142
141
  if (source.entityKind === "MixedParameterConstraint") {
143
142
  return isTypeAssignableToInternal(source.type, target, diagnosticTarget, relationCache);
144
143
  }
144
+ if (isReflectionType(target)) {
145
+ return source.kind === ReflectionNameToKind[target.name] || isNeverType(source)
146
+ ? [Related.true, []]
147
+ : [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
148
+ }
145
149
  const isSimpleTypeRelated = isSimpleTypeAssignableTo(source, target);
146
150
  if (isSimpleTypeRelated === true) {
147
151
  return [Related.true, []];
@@ -202,6 +206,9 @@ export function createTypeRelationChecker(program, checker) {
202
206
  else if (target.kind === "Enum") {
203
207
  return isAssignableToEnum(source, target, diagnosticTarget);
204
208
  }
209
+ else if (target.kind === "FunctionType") {
210
+ return isAssignableToFunctionType(source, target, diagnosticTarget, relationCache);
211
+ }
205
212
  return [Related.false, [createUnassignableDiagnostic(source, target, diagnosticTarget)]];
206
213
  }
207
214
  function isIndeterminateEntityAssignableTo(indeterminate, target, diagnosticTarget, relationCache) {
@@ -295,12 +302,9 @@ export function createTypeRelationChecker(program, checker) {
295
302
  if (isNeverType(source))
296
303
  return true;
297
304
  if (isVoidType(target))
298
- return false;
305
+ return isVoidType(source);
299
306
  if (isUnknownType(target))
300
307
  return true;
301
- if (isReflectionType(target)) {
302
- return source.kind === ReflectionNameToKind[target.name];
303
- }
304
308
  if (target.kind === "Scalar") {
305
309
  return isRelatedToScalar(source, target);
306
310
  }
@@ -320,6 +324,146 @@ export function createTypeRelationChecker(program, checker) {
320
324
  }
321
325
  return undefined;
322
326
  }
327
+ function isAssignableToFunctionType(source, target, diagnosticTarget, relationCache) {
328
+ if (source.kind !== "FunctionType") {
329
+ return [Related.false, [createUnassignableDiagnostic(source, target, source)]];
330
+ }
331
+ const { parameters: sourceParameters, returnType: sourceReturnType } = source;
332
+ const { parameters: targetParameters, returnType: targetReturnType } = target;
333
+ // Check that target parameters assignable to source parameters (contravariant relation)
334
+ const [parametersAssignable, parameterErrors] = areParametersAssignable(targetParameters, sourceParameters, diagnosticTarget, relationCache);
335
+ // Check that source return type is assignable to target return type (covariant relation)
336
+ const [returnTypeAssignable, returnTypeErrors] = isAssignableToMixedParameterConstraint(sourceReturnType, targetReturnType, diagnosticTarget, relationCache);
337
+ const related = returnTypeAssignable === Related.true && parametersAssignable === Related.true;
338
+ return related
339
+ ? [Related.true, []]
340
+ : [
341
+ Related.false,
342
+ wrapUnassignableErrors(source, target, [...parameterErrors, ...returnTypeErrors]),
343
+ ];
344
+ }
345
+ /**
346
+ * Checks if a set of source parameter constraints are assignable to a set of target parameter constraints.
347
+ *
348
+ * This function assumes the directionality of source -> target has already been adjusted for contravariance. To check if
349
+ * a function F1 is assignable to F2, check that F2.parameters are assignable to F1.parameters.
350
+ *
351
+ * @param sourceParameters
352
+ * @param targetParameters
353
+ * @param diagnosticTarget
354
+ * @param relationCache
355
+ */
356
+ function areParametersAssignable(sourceParameters, targetParameters, diagnosticTarget, relationCache) {
357
+ const queue = sourceParameters.slice();
358
+ const errors = [];
359
+ for (const targetParam of targetParameters) {
360
+ if (targetParam.rest) {
361
+ // Target is a rest parameter, so all remaining source parameters must be assignable to the rest parameter type.
362
+ const restElementType = getArrayElementType(targetParam.type);
363
+ for (const sourceParam of queue) {
364
+ if (sourceParam.rest) {
365
+ // Source is also a rest parameter, so its element type must be assignable to the target rest element type.
366
+ const sourceRestElementType = getArrayElementType(sourceParam.type);
367
+ const [assignable, innerErrors] = isTypeAssignableToInternal(sourceRestElementType, restElementType, diagnosticTarget, relationCache);
368
+ // Assignability check can terminate here, since nothing can follow a rest parameter.
369
+ return assignable === Related.true
370
+ ? [Related.true, []]
371
+ : [Related.false, [...errors, ...innerErrors]];
372
+ }
373
+ else {
374
+ const [assignable, innerErrors] = isTypeAssignableToInternal(sourceParam.type, restElementType, diagnosticTarget, relationCache);
375
+ if (!assignable) {
376
+ errors.push(...innerErrors);
377
+ }
378
+ }
379
+ }
380
+ // Assignability check can again terminate here, because the target parameter was a rest parameter and we have drained
381
+ // both source and target parameters.
382
+ return errors.length === 0 ? [Related.true, []] : [Related.false, errors];
383
+ }
384
+ else {
385
+ // Target is not a rest parameter.
386
+ const nextSourceParam = queue.shift();
387
+ if (!nextSourceParam) {
388
+ if (!targetParam.optional) {
389
+ // No more source params, but target param is required.
390
+ errors.push(createTypeRelationError({
391
+ code: "parameter-required",
392
+ messageId: "missing",
393
+ format: {
394
+ paramName: targetParam.name,
395
+ },
396
+ diagnosticTarget,
397
+ }));
398
+ }
399
+ }
400
+ else {
401
+ if (nextSourceParam.rest) {
402
+ if (!targetParam.optional) {
403
+ // Rest parameters are effectively optional for satisfying non-rest target parameters, so this is an error.
404
+ errors.push(createTypeRelationError({
405
+ code: "parameter-required",
406
+ messageId: "rest-to-required",
407
+ format: {
408
+ paramName: nextSourceParam.name,
409
+ },
410
+ diagnosticTarget,
411
+ }));
412
+ }
413
+ // Source is a rest parameter, so its element type must be assignable to the target parameter type.
414
+ const sourceRestElementType = getArrayElementType(nextSourceParam.type);
415
+ const [assignable, innerErrors] = isTypeAssignableToInternal(sourceRestElementType, targetParam.type, diagnosticTarget, relationCache);
416
+ if (!assignable) {
417
+ errors.push(...innerErrors);
418
+ }
419
+ queue.unshift(nextSourceParam); // Put it back since it can be used for subsequent target parameters as well.
420
+ }
421
+ else {
422
+ if (nextSourceParam.optional && !targetParam.optional) {
423
+ // Source parameter is optional and cannot satisfy required target parameter.
424
+ errors.push(createTypeRelationError({
425
+ code: "parameter-required",
426
+ format: {
427
+ paramName: nextSourceParam.name,
428
+ },
429
+ diagnosticTarget,
430
+ }));
431
+ }
432
+ // Source is a normal parameter
433
+ const [assignable, innerErrors] = isTypeAssignableToInternal(nextSourceParam.type, targetParam.type, diagnosticTarget, relationCache);
434
+ if (!assignable) {
435
+ errors.push(...innerErrors);
436
+ }
437
+ }
438
+ }
439
+ }
440
+ }
441
+ return errors.length === 0 ? [Related.true, []] : [Related.false, errors];
442
+ function getArrayElementType(constraint) {
443
+ // There are two cases:
444
+ // - constraint has `type` only: there's only a type constraint
445
+ // - constraint has `valueType` only: there's only a value constraint
446
+ compilerAssert((constraint.type || constraint.valueType) && (!constraint.type || !constraint.valueType), "Mixed parameter rest constraint cannot have both type and value constraints.");
447
+ if (constraint.type) {
448
+ compilerAssert(constraint.type.kind === "Model" && isArrayModelType(constraint.type), "Expected rest parameter type constraint to be an array type.");
449
+ return {
450
+ entityKind: "MixedParameterConstraint",
451
+ node: constraint.node,
452
+ type: constraint.type.indexer.value,
453
+ };
454
+ }
455
+ else {
456
+ compilerAssert(constraint.valueType &&
457
+ constraint.valueType.kind === "Model" &&
458
+ isArrayModelType(constraint.valueType), "Mixed parameter rest constraint must have either type or value constraint.");
459
+ return {
460
+ entityKind: "MixedParameterConstraint",
461
+ node: constraint.node,
462
+ valueType: constraint.valueType.indexer.value,
463
+ };
464
+ }
465
+ }
466
+ }
323
467
  function isNumericLiteralRelatedTo(source, target) {
324
468
  // First check that the source numeric literal is assignable to the target scalar
325
469
  if (!isNumericAssignableToNumericScalar(source.numericValue, target)) {
@@ -450,10 +594,12 @@ export function createTypeRelationChecker(program, checker) {
450
594
  }
451
595
  }
452
596
  }
453
- return [
454
- errors.length === 0 ? Related.true : Related.false,
455
- wrapUnassignableErrors(source, target, errors),
456
- ];
597
+ if (errors.length === 0) {
598
+ return [Related.true, []];
599
+ }
600
+ else {
601
+ return [Related.false, wrapUnassignableErrors(source, target, errors)];
602
+ }
457
603
  }
458
604
  /** If we should check for excess properties on the given model. */
459
605
  function shouldCheckExcessProperties(model) {
@@ -593,9 +739,10 @@ function wrapUnassignablePropertyErrors(source, errors) {
593
739
  error.children = errors;
594
740
  return [error];
595
741
  }
596
- function createTypeRelationError({ code, format, details, diagnosticTarget, skipIfFirst, }) {
742
+ function createTypeRelationError({ code, messageId, format, details, diagnosticTarget, skipIfFirst, }) {
597
743
  const diag = createDiagnostic({
598
744
  code: code,
745
+ messageId,
599
746
  format: format,
600
747
  target: NoTarget,
601
748
  });
@@ -1 +1 @@
1
- {"version":3,"file":"type-relation-checker.js","sourceRoot":"","sources":["../../../src/core/type-relation-checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type-relation-checker.js","sourceRoot":"","sources":["../../../src/core/type-relation-checker.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export interface DecoratorApplication {
26
26
  * Use `@typespec/tspd` to generate an accurate signature from the `extern dec`
27
27
  */
28
28
  export interface DecoratorFunction {
29
- (program: DecoratorContext, target: any, ...customArgs: any[]): DecoratorValidatorCallbacks | void;
29
+ (context: DecoratorContext, target: any, ...customArgs: any[]): DecoratorValidatorCallbacks | void;
30
30
  namespace?: string;
31
31
  }
32
32
  export type ValidatorFn = () => readonly Diagnostic[];
@@ -84,7 +84,7 @@ export interface TemplatedTypeBase {
84
84
  * - Value Constraints
85
85
  */
86
86
  export type Entity = Type | Value | MixedParameterConstraint | IndeterminateEntity;
87
- export type Type = BooleanLiteral | Decorator | Enum | EnumMember | FunctionParameter | Interface | IntrinsicType | Model | ModelProperty | Namespace | NumericLiteral | Operation | Scalar | ScalarConstructor | StringLiteral | StringTemplate | StringTemplateSpan | TemplateParameter | Tuple | Union | UnionVariant;
87
+ export type Type = BooleanLiteral | Decorator | FunctionType | Enum | EnumMember | FunctionParameter | Interface | IntrinsicType | Model | ModelProperty | Namespace | NumericLiteral | Operation | Scalar | ScalarConstructor | StringLiteral | StringTemplate | StringTemplateSpan | TemplateParameter | Tuple | Union | UnionVariant;
88
88
  export type StdTypes = {
89
89
  Array: Model;
90
90
  Record: Model;
@@ -206,7 +206,7 @@ export interface ModelProperty extends BaseType, DecoratedType {
206
206
  defaultValue?: Value;
207
207
  model?: Model;
208
208
  }
209
- export type Value = ScalarValue | NumericValue | StringValue | BooleanValue | ObjectValue | ArrayValue | EnumValue | NullValue;
209
+ export type Value = ScalarValue | NumericValue | StringValue | BooleanValue | ObjectValue | ArrayValue | EnumValue | NullValue | FunctionValue;
210
210
  interface BaseValue {
211
211
  readonly entityKind: "Value";
212
212
  readonly valueKind: string;
@@ -406,6 +406,12 @@ export interface Namespace extends BaseType, DecoratedType {
406
406
  * Order is implementation-defined and may change.
407
407
  */
408
408
  decoratorDeclarations: Map<string, Decorator>;
409
+ /**
410
+ * The functions declared in the namespace.
411
+ *
412
+ * Order is implementation-defined and may change.
413
+ */
414
+ functionDeclarations: Map<string, FunctionValue>;
409
415
  }
410
416
  export type LiteralType = StringLiteral | NumericLiteral | BooleanLiteral;
411
417
  export interface StringLiteral extends BaseType {
@@ -487,25 +493,110 @@ export interface Decorator extends BaseType {
487
493
  namespace: Namespace;
488
494
  target: MixedFunctionParameter;
489
495
  parameters: MixedFunctionParameter[];
490
- implementation: (...args: unknown[]) => void;
496
+ implementation: (ctx: DecoratorContext, target: Type, ...args: unknown[]) => void;
497
+ }
498
+ /**
499
+ * The type of a Function in TypeSpec.
500
+ */
501
+ export interface FunctionType extends BaseType {
502
+ kind: "FunctionType";
503
+ /**
504
+ * The parameter constraints of the function.
505
+ */
506
+ parameters: MixedFunctionParameter[];
507
+ /**
508
+ * The return type constraint of the function.
509
+ */
510
+ returnType: MixedParameterConstraint;
511
+ }
512
+ /**
513
+ * A function (`fn`) declared in the TypeSpec program.
514
+ *
515
+ * By default, function values have very restrictive types, where the parameters have type `never`, and the return type is `unknown`.
516
+ *
517
+ * To call a function, you must assert the type of the parameters. For example, if you have a `FunctionValue` that represents
518
+ * the following TypeSpec function:
519
+ *
520
+ * ```tsp
521
+ * extern fn example(a: valueof string, b: valueof int32): valueof boolean;
522
+ * ```
523
+ *
524
+ * You can assert the parameter types in TypeScript like this:
525
+ *
526
+ * ```ts
527
+ * const exampleFn: FunctionValue = ...; // however you obtain a reference to the function value, it will be strictly typed.
528
+ *
529
+ * const assertedExampleFn = exampleFn as FunctionValue<[a: string, b: number], boolean>;
530
+ *
531
+ * // Now you can call assertedExampleFn with the correct types:
532
+ * ctx.callFunction(assertedExampleFn.implementation, "hello", 10);
533
+ * ```
534
+ */
535
+ export interface FunctionValue<Parameters extends unknown[] = never[], ReturnType = unknown> extends BaseValue {
536
+ valueKind: "Function";
537
+ node?: FunctionDeclarationStatementNode;
538
+ /**
539
+ * The function's name as declared in the TypeSpec source, if any.
540
+ */
541
+ name?: string;
542
+ /**
543
+ * The namespace in which this function was declared, if any.
544
+ */
545
+ namespace?: Namespace;
546
+ /**
547
+ * The parameters of the function.
548
+ */
549
+ parameters: MixedFunctionParameter[];
550
+ /**
551
+ * The return type constraint of the function.
552
+ */
553
+ returnType: MixedParameterConstraint;
554
+ /**
555
+ * The JavaScript implementation of the function.
556
+ *
557
+ * WARNING: Calling the implementation function directly is dangerous. It assumes that you have marshaled the arguments
558
+ * to JS values correctly and that you will handle the return value appropriately. Constructing the correct context
559
+ * is your responsibility (use the `call` methods of `FunctionContext` or `DecoratorContext` to create the context for you).
560
+ *
561
+ * @param ctx - The FunctionContext providing information about the call site.
562
+ * @param args - The arguments passed to the function.
563
+ * @returns The return value of the function, which is arbitrary.
564
+ */
565
+ implementation: (ctx: FunctionContext, ...args: Parameters) => ReturnType;
491
566
  }
492
567
  export interface FunctionParameterBase extends BaseType {
493
568
  kind: "FunctionParameter";
494
569
  node?: FunctionParameterNode;
570
+ /**
571
+ * The name of this function parameter, as declared in the TypeSpec source.
572
+ */
495
573
  name: string;
574
+ /**
575
+ * Whether this parameter is optional.
576
+ */
496
577
  optional: boolean;
578
+ /**
579
+ * Whether this parameter is a rest parameter (i.e., `...args`).
580
+ */
497
581
  rest: boolean;
498
582
  }
499
- /** Represent a function parameter that could accept types or values in the TypeSpec program. */
583
+ /**
584
+ * A function parameter with a mixed parameter constraint that could accept a value.
585
+ */
500
586
  export interface MixedFunctionParameter extends FunctionParameterBase {
501
587
  mixed: true;
502
588
  type: MixedParameterConstraint;
503
589
  }
504
- /** Represent a function parameter that represent the parameter signature(i.e the type would be the type of the value passed) */
590
+ /**
591
+ * A function parameter with a simple type constraint.
592
+ */
505
593
  export interface SignatureFunctionParameter extends FunctionParameterBase {
506
594
  mixed: false;
507
595
  type: Type;
508
596
  }
597
+ /**
598
+ * A function parameter.
599
+ */
509
600
  export type FunctionParameter = MixedFunctionParameter | SignatureFunctionParameter;
510
601
  export interface Sym {
511
602
  readonly flags: SymbolFlags;
@@ -794,7 +885,8 @@ export declare enum SyntaxKind {
794
885
  ArrayLiteral = 66,
795
886
  ConstStatement = 67,
796
887
  CallExpression = 68,
797
- ScalarConstructor = 69
888
+ ScalarConstructor = 69,
889
+ FunctionTypeExpression = 70
798
890
  }
799
891
  export declare const enum NodeFlags {
800
892
  None = 0,
@@ -947,7 +1039,10 @@ export interface DirectiveExpressionNode extends BaseNode {
947
1039
  readonly arguments: readonly DirectiveArgument[];
948
1040
  }
949
1041
  export type DirectiveArgument = StringLiteralNode | IdentifierNode;
950
- export type Expression = ArrayExpressionNode | MemberExpressionNode | ModelExpressionNode | ObjectLiteralNode | ArrayLiteralNode | TupleExpressionNode | UnionExpressionNode | IntersectionExpressionNode | TypeReferenceNode | ValueOfExpressionNode | TypeOfExpressionNode | CallExpressionNode | StringLiteralNode | NumericLiteralNode | BooleanLiteralNode | StringTemplateExpressionNode | VoidKeywordNode | NeverKeywordNode | AnyKeywordNode;
1042
+ export type Expression = ArrayExpressionNode | MemberExpressionNode | ModelExpressionNode | ObjectLiteralNode | ArrayLiteralNode | TupleExpressionNode | UnionExpressionNode | IntersectionExpressionNode | TypeReferenceNode | ValueOfExpressionNode | TypeOfExpressionNode | CallExpressionNode | StringLiteralNode | NumericLiteralNode | BooleanLiteralNode | StringTemplateExpressionNode | VoidKeywordNode | NeverKeywordNode | AnyKeywordNode | FunctionTypeExpressionNode;
1043
+ export type ParenthesizedExpression = Expression & {
1044
+ readonly parenthesized: true;
1045
+ };
951
1046
  export type ReferenceExpression = TypeReferenceNode | MemberExpressionNode | IdentifierNode | VoidKeywordNode | NeverKeywordNode;
952
1047
  export interface MemberExpressionNode extends BaseNode {
953
1048
  readonly kind: SyntaxKind.MemberExpression;
@@ -1234,10 +1329,11 @@ export interface FunctionParameterNode extends BaseNode {
1234
1329
  readonly rest: boolean;
1235
1330
  }
1236
1331
  /**
1237
- * Represent a function declaration
1332
+ * The syntax representing a function value declaration.
1333
+ *
1238
1334
  * @example
1239
1335
  * ```typespec
1240
- * extern fn camelCase(value: StringLiteral): StringLiteral;
1336
+ * extern fn camelCase(value: valueof string): valueof string;
1241
1337
  * ```
1242
1338
  */
1243
1339
  export interface FunctionDeclarationStatementNode extends BaseNode, DeclarationNode {
@@ -1248,6 +1344,19 @@ export interface FunctionDeclarationStatementNode extends BaseNode, DeclarationN
1248
1344
  readonly returnType?: Expression;
1249
1345
  readonly parent?: TypeSpecScriptNode | NamespaceStatementNode;
1250
1346
  }
1347
+ /**
1348
+ * The syntax representing a function type expression.
1349
+ *
1350
+ * @example
1351
+ * ```typespec
1352
+ * fn(value: valueof string) => valueof string
1353
+ * ```
1354
+ */
1355
+ export interface FunctionTypeExpressionNode extends BaseNode {
1356
+ readonly kind: SyntaxKind.FunctionTypeExpression;
1357
+ readonly parameters: FunctionParameterNode[];
1358
+ readonly returnType?: Expression;
1359
+ }
1251
1360
  export interface IdentifierContext {
1252
1361
  kind: IdentifierKind;
1253
1362
  node: Node;
@@ -1569,9 +1678,15 @@ type ListenerForType<T extends Type> = T extends Type ? {
1569
1678
  [k in Uncapitalize<T["kind"]> | exitListener<T["kind"]>]?: TypeListener<T>;
1570
1679
  } : never;
1571
1680
  export type TypeListeners = UnionToIntersection<ListenerForType<Type>>;
1681
+ type ValueListener<V> = (context: V) => ListenerFlow | undefined | void;
1682
+ type exitValueListener<T extends string | number | symbol> = T extends string ? `exit${T}` : T;
1683
+ type ListenerForValue<V extends Value> = V extends Value ? {
1684
+ [k in Uncapitalize<V["valueKind"]> | exitValueListener<V["valueKind"]>]?: ValueListener<V>;
1685
+ } : never;
1686
+ export type ValueListeners = UnionToIntersection<ListenerForValue<Value>>;
1572
1687
  export type SemanticNodeListener = {
1573
1688
  root?: (context: Program) => void | undefined;
1574
- } & TypeListeners;
1689
+ } & TypeListeners & ValueListeners;
1575
1690
  export type DiagnosticReportWithoutTarget<T extends {
1576
1691
  [code: string]: DiagnosticMessages;
1577
1692
  }, C extends keyof T, M extends keyof T[C] = "default"> = {
@@ -1695,6 +1810,11 @@ export interface DecoratorImplementations {
1695
1810
  readonly [name: string]: DecoratorFunction;
1696
1811
  };
1697
1812
  }
1813
+ export interface FunctionImplementations {
1814
+ readonly [namespace: string]: {
1815
+ readonly [name: string]: (ctx: FunctionContext, ...parameters: never[]) => unknown;
1816
+ };
1817
+ }
1698
1818
  export interface PackageFlags {
1699
1819
  }
1700
1820
  export interface LinterDefinition {
@@ -1788,27 +1908,71 @@ export interface TypeSpecLibrary<T extends {
1788
1908
  * Get the options for the onEmit of this library.
1789
1909
  */
1790
1910
  export type EmitOptionsFor<C> = C extends TypeSpecLibrary<infer _T, infer E> ? E : never;
1791
- export interface DecoratorContext {
1911
+ /**
1912
+ * Base context passed to JavaScript implementations of invocable constructs (decorators, functions).
1913
+ */
1914
+ export interface InvocationContext {
1915
+ /**
1916
+ * The current TypeSpec Program.
1917
+ */
1792
1918
  program: Program;
1793
1919
  /**
1794
- * Point to the decorator target
1920
+ * Helper to get the target for a given argument index.
1921
+ *
1922
+ * @param argIndex Argument index in the decorator call.
1923
+ * @example
1924
+ * ```tsp
1925
+ * @dec("hello", 123)
1926
+ * model MyModel { }
1927
+ * ```
1928
+ * - `getArgumentTarget(0)` -> target for "hello"
1929
+ * - `getArgumentTarget(1)` -> target for 123
1795
1930
  */
1796
- decoratorTarget: DiagnosticTarget;
1931
+ getArgumentTarget(argIndex: number): DiagnosticTarget | undefined;
1797
1932
  /**
1798
- * Function that can be used to retrieve the target for a parameter at the given index.
1799
- * @param paramIndex Parameter index in the typespec
1800
- * @example @foo("bar", 123) -> $foo(context, target, arg0: string, arg1: number);
1801
- * getArgumentTarget(0) -> target for arg0
1802
- * getArgumentTarget(1) -> target for arg1
1933
+ * Helper to call a decorator implementation from within another decorator implementation.
1934
+ *
1935
+ * @param decorator The decorator function to call.
1936
+ * @param target The target to which the decorator is applied.
1937
+ * @param args Arguments to pass to the decorator.
1803
1938
  */
1804
- getArgumentTarget(paramIndex: number): DiagnosticTarget | undefined;
1939
+ callDecorator<T extends Type, A extends any[], R>(decorator: (context: DecoratorContext, target: T, ...args: A) => R, target: T, ...args: A): R;
1805
1940
  /**
1806
- * Helper to call out to another decorator
1807
- * @param decorator Other decorator function
1808
- * @param args Args to pass to other decorator function
1941
+ * Helper to call a function implementation from within a decorator implementation.
1942
+ * @param func The function implementation to call.
1943
+ * @param args Arguments to pass to the function.
1944
+ */
1945
+ callFunction<A extends any[], R>(func: (context: FunctionContext, ...args: A) => R, ...args: A): R;
1946
+ }
1947
+ /**
1948
+ * Context passed to decorator implementations.
1949
+ */
1950
+ export interface DecoratorContext extends InvocationContext {
1951
+ program: Program;
1952
+ /**
1953
+ * The diagnostic target for the decorator application.
1954
+ */
1955
+ decoratorTarget: DiagnosticTarget;
1956
+ /**
1957
+ * Helper to call a decorator implementation from within another decorator implementation.
1958
+ *
1959
+ * This function is identical to `callDecorator`.
1960
+ *
1961
+ * @param decorator The decorator function to call.
1962
+ * @param target The target to which the decorator is applied.
1963
+ * @param args Arguments to pass to the decorator.
1809
1964
  */
1810
1965
  call<T extends Type, A extends any[], R>(decorator: (context: DecoratorContext, target: T, ...args: A) => R, target: T, ...args: A): R;
1811
1966
  }
1967
+ /**
1968
+ * Context passed to function implementations.
1969
+ */
1970
+ export interface FunctionContext extends InvocationContext {
1971
+ /**
1972
+ * The function call diagnostic target.
1973
+ */
1974
+ functionCallTarget: DiagnosticTarget;
1975
+ }
1812
1976
  export interface EmitContext<TOptions extends object = Record<string, never>> {
1813
1977
  /**
1814
1978
  * TypeSpec Program.