@typespec/protobuf 0.43.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 (112) hide show
  1. package/.c8rc.json +3 -0
  2. package/.eslintrc.cjs +7 -0
  3. package/.mocharc.yaml +4 -0
  4. package/.rush/temp/operation/build/state.json +3 -0
  5. package/.rush/temp/operation/test-official/state.json +3 -0
  6. package/.rush/temp/package-deps_build.json +81 -0
  7. package/.rush/temp/package-deps_test-official.json +81 -0
  8. package/.rush/temp/shrinkwrap-deps.json +177 -0
  9. package/CHANGELOG.json +4 -0
  10. package/LICENSE +21 -0
  11. package/README.md +30 -0
  12. package/coverage/cobertura-coverage.xml +2291 -0
  13. package/coverage/coverage-final.json +7 -0
  14. package/coverage/tmp/coverage-6408-1683144315012-0.json +1 -0
  15. package/dist/src/ast.d.ts +199 -0
  16. package/dist/src/ast.d.ts.map +1 -0
  17. package/dist/src/ast.js +60 -0
  18. package/dist/src/ast.js.map +1 -0
  19. package/dist/src/index.d.ts +62 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +5 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/lib.d.ts +197 -0
  24. package/dist/src/lib.d.ts.map +1 -0
  25. package/dist/src/lib.js +134 -0
  26. package/dist/src/lib.js.map +1 -0
  27. package/dist/src/proto.d.ts +62 -0
  28. package/dist/src/proto.d.ts.map +1 -0
  29. package/dist/src/proto.js +162 -0
  30. package/dist/src/proto.js.map +1 -0
  31. package/dist/src/transform/index.d.ts +7 -0
  32. package/dist/src/transform/index.d.ts.map +1 -0
  33. package/dist/src/transform/index.js +744 -0
  34. package/dist/src/transform/index.js.map +1 -0
  35. package/dist/src/write.d.ts +12 -0
  36. package/dist/src/write.d.ts.map +1 -0
  37. package/dist/src/write.js +204 -0
  38. package/dist/src/write.js.map +1 -0
  39. package/dist/test/scenarios.test.d.ts +2 -0
  40. package/dist/test/scenarios.test.d.ts.map +1 -0
  41. package/dist/test/scenarios.test.js +165 -0
  42. package/dist/test/scenarios.test.js.map +1 -0
  43. package/lib/proto.tsp +303 -0
  44. package/package.json +49 -0
  45. package/protobuf.build.log +48 -0
  46. package/src/ast.ts +279 -0
  47. package/src/index.ts +7 -0
  48. package/src/lib.ts +161 -0
  49. package/src/proto.ts +217 -0
  50. package/src/transform/index.ts +980 -0
  51. package/src/write.ts +244 -0
  52. package/temp/tsconfig.tsbuildinfo +1 -0
  53. package/test/include/foo/bar.proto +7 -0
  54. package/test/scenarios/addressbook/input/addressbook.tsp +27 -0
  55. package/test/scenarios/addressbook/input/main.tsp +13 -0
  56. package/test/scenarios/addressbook/output/@typespec/protobuf/addressbook.proto +26 -0
  57. package/test/scenarios/addressbook/output/@typespec/protobuf/main.proto +14 -0
  58. package/test/scenarios/anonymous-model/diagnostics.txt +1 -0
  59. package/test/scenarios/anonymous-model/input/main.tsp +24 -0
  60. package/test/scenarios/anonymous-package/input/main.tsp +19 -0
  61. package/test/scenarios/anonymous-package/output/@typespec/protobuf/main.proto +15 -0
  62. package/test/scenarios/array/input/main.tsp +22 -0
  63. package/test/scenarios/array/output/@typespec/protobuf/com/azure/test.proto +18 -0
  64. package/test/scenarios/array-nested/diagnostics.txt +1 -0
  65. package/test/scenarios/array-nested/input/main.tsp +20 -0
  66. package/test/scenarios/cross package references/input/main.tsp +27 -0
  67. package/test/scenarios/cross package references/output/@typespec/protobuf/A.proto +10 -0
  68. package/test/scenarios/cross package references/output/@typespec/protobuf/B.proto +15 -0
  69. package/test/scenarios/derived-scalar/input/main.tsp +24 -0
  70. package/test/scenarios/derived-scalar/output/@typespec/protobuf/com/azure/Test.proto +18 -0
  71. package/test/scenarios/enum/input/main.tsp +33 -0
  72. package/test/scenarios/enum/output/@typespec/protobuf/main.proto +31 -0
  73. package/test/scenarios/enum-nonintegral/diagnostics.txt +4 -0
  74. package/test/scenarios/enum-nonintegral/input/main.tsp +31 -0
  75. package/test/scenarios/enum-nozero/diagnostics.txt +1 -0
  76. package/test/scenarios/enum-nozero/input/main.tsp +25 -0
  77. package/test/scenarios/extern/input/main.tsp +17 -0
  78. package/test/scenarios/extern/output/@typespec/protobuf/main.proto +19 -0
  79. package/test/scenarios/illegal field reservations/diagnostics.txt +2 -0
  80. package/test/scenarios/illegal field reservations/input/main.tsp +16 -0
  81. package/test/scenarios/inferred-message-names/input/main.tsp +16 -0
  82. package/test/scenarios/inferred-message-names/output/@typespec/protobuf/com/azure/test.proto +18 -0
  83. package/test/scenarios/intrinsics/input/main.tsp +17 -0
  84. package/test/scenarios/intrinsics/output/@typespec/protobuf/com/azure/Test.proto +16 -0
  85. package/test/scenarios/map/input/main.tsp +15 -0
  86. package/test/scenarios/map/output/@typespec/protobuf/main.proto +13 -0
  87. package/test/scenarios/model-no-package/diagnostics.txt +2 -0
  88. package/test/scenarios/model-no-package/input/main.tsp +19 -0
  89. package/test/scenarios/name-collision/input/main.tsp +24 -0
  90. package/test/scenarios/name-collision/output/@typespec/protobuf/main.proto +24 -0
  91. package/test/scenarios/options/input/main.tsp +25 -0
  92. package/test/scenarios/options/output/@typespec/protobuf/com/azure/Test.proto +20 -0
  93. package/test/scenarios/options-invalid/diagnostics.txt +1 -0
  94. package/test/scenarios/options-invalid/input/main.tsp +25 -0
  95. package/test/scenarios/reserved field collisions/diagnostics.txt +5 -0
  96. package/test/scenarios/reserved field collisions/input/main.tsp +19 -0
  97. package/test/scenarios/reserved fields/input/main.tsp +16 -0
  98. package/test/scenarios/reserved fields/output/@typespec/protobuf/main.proto +16 -0
  99. package/test/scenarios/simple/input/main.tsp +22 -0
  100. package/test/scenarios/simple/output/@typespec/protobuf/com/azure/Test.proto +18 -0
  101. package/test/scenarios/simple-error/diagnostics.txt +6 -0
  102. package/test/scenarios/simple-error/input/main.tsp +22 -0
  103. package/test/scenarios/simple-no-service/input/main.tsp +22 -0
  104. package/test/scenarios/simple-no-service/output/@typespec/protobuf/com/azure/Test.proto +18 -0
  105. package/test/scenarios/streams/input/main.tsp +30 -0
  106. package/test/scenarios/streams/output/@typespec/protobuf/main.proto +19 -0
  107. package/test/scenarios/type-validation/diagnostics.txt +1 -0
  108. package/test/scenarios/type-validation/input/main.tsp +11 -0
  109. package/test/scenarios/union/diagnostics.txt +1 -0
  110. package/test/scenarios/union/input/main.tsp +33 -0
  111. package/test/scenarios.test.ts +226 -0
  112. package/tsconfig.json +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,qBAAqB,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYzF,MAAM,oBAAoB,GAA2C;IACnE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC5C;IACD,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAE1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;IAC3D,IAAI,EAAE,YAAY;IAClB,cAAc,EAAE,CAAC,YAAY,CAAC;IAC9B,WAAW,EAAE;QACX,aAAa,EAAE;YACb,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,SAAS,MAAM,sFAAsF;gBAC1H,OAAO,EAAE,YAAY,CAAA,eAAe,OAAO,oDAAoD;gBAC/F,eAAe,EAAE,YAAY,CAAA,eAAe,OAAO,wCAAwC,KAAK,GAAG;gBACnG,QAAQ,EAAE,YAAY,CAAA,eAAe,OAAO,0EAA0E;gBACtH,eAAe,EAAE,YAAY,CAAA,eAAe,OAAO,mDAAmD;gBACtG,qBAAqB,EAAE,YAAY,CAAA,eAAe,OAAO,oEAAoE;aAC9H;SACF;QACD,YAAY,EAAE;YACZ,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,eAAe,EAAE,YAAY,CAAA,eAAe,MAAM,oDAAoD;aACvG;SACF;QACD,gBAAgB,EAAE;YAChB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EACL,qFAAqF;aACxF;SACF;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,kBAAkB,MAAM,+BAA+B;aAC7E;SACF;QACD,yBAAyB,EAAE;YACzB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,4CAA4C;aACtD;SACF;QACD,wBAAwB,EAAE;YACxB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,cAAc,EACZ,+EAA+E;gBACjF,YAAY,EAAE,4DAA4D;gBAC1E,aAAa,EAAE,4DAA4D;aAC5E;SACF;QACD,wBAAwB,EAAE;YACxB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,aAAa,EAAE,YAAY,CAAA,oBAAoB,MAAM,qEAAqE;gBAC1H,mBAAmB,EAAE,YAAY,CAAA,+CAA+C,MAAM,EAAE;gBACxF,gBAAgB,EAAE,YAAY,CAAA,qDAAqD,MAAM,EAAE;gBAC3F,eAAe,EAAE,4DAA4D;gBAC7E,KAAK,EAAE,2CAA2C;aACnD;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,oBAAoB,MAAM,wBAAwB;aACxE;SACF;QACD,oBAAoB,EAAE;YACpB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EACL,kGAAkG;gBACpG,eAAe,EACb,mFAAmF;aACtF;SACF;QACD,cAAc,EAAE;YACd,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,yDAAyD;aACnE;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,GAAG,MAAM,qFAAqF;aACpH;SACF;QACD,qBAAqB,EAAE;YACrB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EACL,gHAAgH;aACnH;SACF;QACD,sBAAsB,EAAE;YACtB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,YAAY,CAAA,SAAS,MAAM,oEAAoE;aACzG;SACF;QACD,iBAAiB,EAAE;YACjB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,OAAO,EAAE,sDAAsD;aAChE;SACF;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE;gBACR,wBAAwB,EAAE,YAAY,CAAA,WAAW,MAAM,gBAAgB,MAAM,iGAAiG;aAC/K;SACF;KACF;IACD,OAAO,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,uBAAuB,CAAC;AAI5D,MAAM,IAAI,GAAG;IACX,YAAY;IACZ,SAAS;IACT,SAAS;IACT,WAAW;IACX,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAGnE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { DecoratorContext, EmitContext, EmitOptionsFor, EnumMember, Interface, Model, ModelProperty, Namespace, Operation, Program, Type } from "@typespec/compiler";
2
+ import { TypeSpecProtobufLibrary } from "./lib.js";
3
+ /**
4
+ * Defined in the [ProtoBuf Language Spec](https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#identifiers).
5
+ *
6
+ * ident = letter \{ letter | decimalDigit | "_" \}
7
+ * fullIdent = ident \{ "." ident \}
8
+ */
9
+ export declare const PROTO_FULL_IDENT: RegExp;
10
+ /**
11
+ * Decorate an interface as a service, indicating that it represents a Protobuf `service` declaration.
12
+ *
13
+ * @param ctx - decorator context
14
+ * @param target - the decorated interface
15
+ */
16
+ export declare function $service(ctx: DecoratorContext, target: Interface): void;
17
+ export interface PackageDetails {
18
+ name?: string;
19
+ }
20
+ /**
21
+ * Declare a Protobuf package.
22
+ *
23
+ * @param ctx - decorator context
24
+ * @param target - target decorator namespace
25
+ */
26
+ export declare function $package(ctx: DecoratorContext, target: Namespace, details?: Model): void;
27
+ /**
28
+ * Determines whether a type represents a Protobuf map.
29
+ *
30
+ * @param program - the program context
31
+ * @param m - the type to test
32
+ * @returns true if the internal representation of a Protobuf map is bound to this type.
33
+ */
34
+ export declare function isMap(program: Program, m: Type): boolean;
35
+ export declare function $externRef(ctx: DecoratorContext, target: Model, path: string, name: string): void;
36
+ export declare function $stream(ctx: DecoratorContext, target: Operation, mode: EnumMember): void;
37
+ export type Reservation = string | number | ([number, number] & {
38
+ type: Type;
39
+ });
40
+ export declare function $reserve(ctx: DecoratorContext, target: Model, ...reservations: readonly (Type | number | string)[]): void;
41
+ export declare function $message(ctx: DecoratorContext, target: Model): void;
42
+ /**
43
+ * Decorate a model property with a field index. Field indices are required for all fields of emitted messages.
44
+ *
45
+ * @param param0
46
+ * @param target
47
+ * @param fieldIndex
48
+ * @returns
49
+ */
50
+ export declare function $field(ctx: DecoratorContext, target: ModelProperty, fieldIndex: number): void;
51
+ /**
52
+ * Emitter main function.
53
+ *
54
+ * @param program - the program to emit
55
+ */
56
+ export declare function $onEmit(ctx: EmitContext<EmitOptionsFor<TypeSpecProtobufLibrary>>): Promise<void>;
57
+ /**
58
+ * Validation function
59
+ */
60
+ export declare function $onValidate(program: Program): Promise<void>;
61
+ export declare const namespace = "TypeSpec.Protobuf";
62
+ //# sourceMappingURL=proto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proto.d.ts","sourceRoot":"","sources":["../../src/proto.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,EACV,SAAS,EACT,KAAK,EACL,aAAa,EACb,SAAS,EAET,SAAS,EACT,OAAO,EAGP,IAAI,EACL,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAmD,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAmBpG;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAA6B,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,QAEhE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,QAEjF;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAExD;AAYD,wBAAgB,UAAU,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAE1F;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QASjF;AAkBD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAEhF,wBAAgB,QAAQ,CACtB,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,KAAK,EACb,GAAG,YAAY,EAAE,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,QASrD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,QAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,QAqCtF;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,iBAItF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,iBASjD;AAED,eAAO,MAAM,SAAS,sBAAsB,CAAC"}
@@ -0,0 +1,162 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { resolvePath, } from "@typespec/compiler";
4
+ import { reportDiagnostic, state } from "./lib.js";
5
+ import { createProtobufEmitter } from "./transform/index.js";
6
+ /**
7
+ * # @typespec/protobuf : Protobuf/gRPC Emitter and Decorators for TypeSpec
8
+ *
9
+ * This module defines an emitter and decorator library for TypeSpec that enables specifying Protobuf services and models.
10
+ */
11
+ /**
12
+ * The maximum field index allowed by Protocol Buffers.
13
+ */
14
+ const MAX_FIELD_INDEX = 2 ** 29 - 1;
15
+ /**
16
+ * The field range between 19000 and 19999 is reserved for Protobuf client implementations.
17
+ */
18
+ const IMPLEMENTATION_RESERVED_RANGE = [19000, 19999];
19
+ /**
20
+ * Defined in the [ProtoBuf Language Spec](https://developers.google.com/protocol-buffers/docs/reference/proto3-spec#identifiers).
21
+ *
22
+ * ident = letter \{ letter | decimalDigit | "_" \}
23
+ * fullIdent = ident \{ "." ident \}
24
+ */
25
+ export const PROTO_FULL_IDENT = /([a-zA-Z][a-zA-Z0-9_]*)+/;
26
+ /**
27
+ * Decorate an interface as a service, indicating that it represents a Protobuf `service` declaration.
28
+ *
29
+ * @param ctx - decorator context
30
+ * @param target - the decorated interface
31
+ */
32
+ export function $service(ctx, target) {
33
+ ctx.program.stateSet(state.service).add(target);
34
+ }
35
+ /**
36
+ * Declare a Protobuf package.
37
+ *
38
+ * @param ctx - decorator context
39
+ * @param target - target decorator namespace
40
+ */
41
+ export function $package(ctx, target, details) {
42
+ ctx.program.stateMap(state.package).set(target, details);
43
+ }
44
+ /**
45
+ * Determines whether a type represents a Protobuf map.
46
+ *
47
+ * @param program - the program context
48
+ * @param m - the type to test
49
+ * @returns true if the internal representation of a Protobuf map is bound to this type.
50
+ */
51
+ export function isMap(program, m) {
52
+ return program.stateSet(state._map).has(m);
53
+ }
54
+ /**
55
+ * Binds the internal representation of a Protobuf map.
56
+ * @internal
57
+ * @param ctx
58
+ * @param target
59
+ */
60
+ export function $_map(ctx, target) {
61
+ ctx.program.stateSet(state._map).add(target);
62
+ }
63
+ export function $externRef(ctx, target, path, name) {
64
+ ctx.program.stateMap(state.externRef).set(target, [path, name]);
65
+ }
66
+ export function $stream(ctx, target, mode) {
67
+ const emitStreamingMode = {
68
+ Duplex: 3 /* StreamingMode.Duplex */,
69
+ In: 2 /* StreamingMode.In */,
70
+ Out: 1 /* StreamingMode.Out */,
71
+ None: 0 /* StreamingMode.None */,
72
+ }[mode.name];
73
+ ctx.program.stateMap(state.stream).set(target, emitStreamingMode);
74
+ }
75
+ function getTuple(program, t) {
76
+ if (t.kind !== "Tuple" || t.values.some((v) => v.kind !== "Number") || t.values.length !== 2) {
77
+ reportDiagnostic(program, {
78
+ code: "illegal-reservation",
79
+ target: t,
80
+ });
81
+ return null;
82
+ }
83
+ return Object.assign(t.values.map((v) => v.value), { type: t });
84
+ }
85
+ export function $reserve(ctx, target, ...reservations) {
86
+ const finalReservations = reservations
87
+ .map((reservation) => typeof reservation === "object" ? getTuple(ctx.program, reservation) : reservation)
88
+ .filter((v) => v != null);
89
+ ctx.program.stateMap(state.reserve).set(target, finalReservations);
90
+ }
91
+ export function $message(ctx, target) {
92
+ ctx.program.stateSet(state.message).add(target);
93
+ }
94
+ /**
95
+ * Decorate a model property with a field index. Field indices are required for all fields of emitted messages.
96
+ *
97
+ * @param param0
98
+ * @param target
99
+ * @param fieldIndex
100
+ * @returns
101
+ */
102
+ export function $field(ctx, target, fieldIndex) {
103
+ if (!Number.isInteger(fieldIndex) || fieldIndex <= 0) {
104
+ reportDiagnostic(ctx.program, {
105
+ code: "field-index",
106
+ messageId: "invalid",
107
+ format: {
108
+ index: String(fieldIndex),
109
+ },
110
+ target,
111
+ });
112
+ return;
113
+ }
114
+ else if (fieldIndex > MAX_FIELD_INDEX) {
115
+ reportDiagnostic(ctx.program, {
116
+ code: "field-index",
117
+ messageId: "out-of-bounds",
118
+ format: {
119
+ index: String(fieldIndex),
120
+ max: String(MAX_FIELD_INDEX + 1),
121
+ },
122
+ target,
123
+ });
124
+ return;
125
+ }
126
+ else if (fieldIndex >= IMPLEMENTATION_RESERVED_RANGE[0] &&
127
+ fieldIndex <= IMPLEMENTATION_RESERVED_RANGE[1]) {
128
+ reportDiagnostic(ctx.program, {
129
+ code: "field-index",
130
+ messageId: "reserved",
131
+ format: {
132
+ index: String(fieldIndex),
133
+ },
134
+ target,
135
+ });
136
+ }
137
+ ctx.program.stateMap(state.fieldIndex).set(target, fieldIndex);
138
+ }
139
+ /**
140
+ * Emitter main function.
141
+ *
142
+ * @param program - the program to emit
143
+ */
144
+ export async function $onEmit(ctx) {
145
+ const emitter = createProtobufEmitter(ctx.program);
146
+ await emitter(resolvePath(ctx.emitterOutputDir), ctx.options);
147
+ }
148
+ /**
149
+ * Validation function
150
+ */
151
+ export async function $onValidate(program) {
152
+ var _a;
153
+ // Is this correct? See https://github.com/microsoft/typespec/issues/1859
154
+ /* c8 ignore next 6 */
155
+ if (program.compilerOptions.noEmit) {
156
+ const options = (_a = program.emitters.find((e) => e.emitFunction === $onEmit)) === null || _a === void 0 ? void 0 : _a.options;
157
+ const emitter = createProtobufEmitter(program);
158
+ await emitter("", options);
159
+ }
160
+ }
161
+ export const namespace = "TypeSpec.Protobuf";
162
+ //# sourceMappingURL=proto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proto.js","sourceRoot":"","sources":["../../src/proto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Program } from "@typespec/compiler";
2
+ import { ProtobufEmitterOptions } from "../lib.js";
3
+ /**
4
+ * Create a worker function that converts the TypeSpec program to Protobuf and writes it to the file system.
5
+ */
6
+ export declare function createProtobufEmitter(program: Program): (outDir: string, options: ProtobufEmitterOptions) => Promise<void>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transform/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAaL,OAAO,EAOR,MAAM,oBAAoB,CAAC;AAqB5B,OAAO,EAAE,sBAAsB,EAA2B,MAAM,WAAW,CAAC;AAQ5E;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GACf,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAuBpE"}