@apollo-deploy/signal-schemas 1.0.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 (258) hide show
  1. package/README.md +117 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/definitions/common.d.ts +72 -0
  4. package/dist/definitions/common.d.ts.map +1 -0
  5. package/dist/definitions/common.js +95 -0
  6. package/dist/definitions/common.js.map +1 -0
  7. package/dist/definitions/deliverability/deliverability.schema.d.ts +98 -0
  8. package/dist/definitions/deliverability/deliverability.schema.d.ts.map +1 -0
  9. package/dist/definitions/deliverability/deliverability.schema.js +77 -0
  10. package/dist/definitions/deliverability/domain.schema.d.ts +23 -0
  11. package/dist/definitions/deliverability/domain.schema.d.ts.map +1 -0
  12. package/dist/definitions/deliverability/domain.schema.js +12 -0
  13. package/dist/definitions/deliverability/domain.schema.js.map +1 -0
  14. package/dist/definitions/deliverability/index.d.ts +4 -0
  15. package/dist/definitions/deliverability/index.d.ts.map +1 -0
  16. package/dist/definitions/deliverability/index.js +4 -0
  17. package/dist/definitions/deliverability/index.js.map +1 -0
  18. package/dist/definitions/deliverability/request.schema.d.ts +27 -0
  19. package/dist/definitions/deliverability/request.schema.d.ts.map +1 -0
  20. package/dist/definitions/deliverability/request.schema.js +17 -0
  21. package/dist/definitions/deliverability/request.schema.js.map +1 -0
  22. package/dist/definitions/deliverability/response.schema.d.ts +72 -0
  23. package/dist/definitions/deliverability/response.schema.d.ts.map +1 -0
  24. package/dist/definitions/deliverability/response.schema.js +37 -0
  25. package/dist/definitions/deliverability/response.schema.js.map +1 -0
  26. package/dist/definitions/deliverability/schemas.d.ts +91 -0
  27. package/dist/definitions/deliverability/schemas.d.ts.map +1 -0
  28. package/dist/definitions/deliverability/schemas.js +67 -0
  29. package/dist/definitions/domains/domain.schema.d.ts +160 -0
  30. package/dist/definitions/domains/domain.schema.d.ts.map +1 -0
  31. package/dist/definitions/domains/domain.schema.js +36 -0
  32. package/dist/definitions/domains/domain.schema.js.map +1 -0
  33. package/dist/definitions/domains/domains.schema.d.ts +668 -0
  34. package/dist/definitions/domains/domains.schema.d.ts.map +1 -0
  35. package/dist/definitions/domains/domains.schema.js +113 -0
  36. package/dist/definitions/domains/index.d.ts +4 -0
  37. package/dist/definitions/domains/index.d.ts.map +1 -0
  38. package/dist/definitions/domains/index.js +4 -0
  39. package/dist/definitions/domains/index.js.map +1 -0
  40. package/dist/definitions/domains/request.schema.d.ts +26 -0
  41. package/dist/definitions/domains/request.schema.d.ts.map +1 -0
  42. package/dist/definitions/domains/request.schema.js +21 -0
  43. package/dist/definitions/domains/request.schema.js.map +1 -0
  44. package/dist/definitions/domains/response.schema.d.ts +491 -0
  45. package/dist/definitions/domains/response.schema.d.ts.map +1 -0
  46. package/dist/definitions/domains/response.schema.js +24 -0
  47. package/dist/definitions/domains/response.schema.js.map +1 -0
  48. package/dist/definitions/domains/schemas.d.ts +545 -0
  49. package/dist/definitions/domains/schemas.d.ts.map +1 -0
  50. package/dist/definitions/domains/schemas.js +110 -0
  51. package/dist/definitions/emails/domain.schema.d.ts +20 -0
  52. package/dist/definitions/emails/domain.schema.d.ts.map +1 -0
  53. package/dist/definitions/emails/domain.schema.js +11 -0
  54. package/dist/definitions/emails/domain.schema.js.map +1 -0
  55. package/dist/definitions/emails/emails.schema.d.ts +230 -0
  56. package/dist/definitions/emails/emails.schema.d.ts.map +1 -0
  57. package/dist/definitions/emails/emails.schema.js +176 -0
  58. package/dist/definitions/emails/index.d.ts +4 -0
  59. package/dist/definitions/emails/index.d.ts.map +1 -0
  60. package/dist/definitions/emails/index.js +4 -0
  61. package/dist/definitions/emails/index.js.map +1 -0
  62. package/dist/definitions/emails/request.schema.d.ts +96 -0
  63. package/dist/definitions/emails/request.schema.d.ts.map +1 -0
  64. package/dist/definitions/emails/request.schema.js +65 -0
  65. package/dist/definitions/emails/request.schema.js.map +1 -0
  66. package/dist/definitions/emails/response.schema.d.ts +141 -0
  67. package/dist/definitions/emails/response.schema.d.ts.map +1 -0
  68. package/dist/definitions/emails/response.schema.js +54 -0
  69. package/dist/definitions/emails/response.schema.js.map +1 -0
  70. package/dist/definitions/emails/schemas.d.ts +284 -0
  71. package/dist/definitions/emails/schemas.d.ts.map +1 -0
  72. package/dist/definitions/emails/schemas.js +227 -0
  73. package/dist/definitions/health/domain.schema.d.ts +11 -0
  74. package/dist/definitions/health/domain.schema.d.ts.map +1 -0
  75. package/dist/definitions/health/domain.schema.js +8 -0
  76. package/dist/definitions/health/domain.schema.js.map +1 -0
  77. package/dist/definitions/health/health.schema.d.ts +27 -0
  78. package/dist/definitions/health/health.schema.d.ts.map +1 -0
  79. package/dist/definitions/health/health.schema.js +23 -0
  80. package/dist/definitions/health/index.d.ts +3 -0
  81. package/dist/definitions/health/index.d.ts.map +1 -0
  82. package/dist/definitions/health/index.js +3 -0
  83. package/dist/definitions/health/index.js.map +1 -0
  84. package/dist/definitions/health/request.schema.d.ts +8 -0
  85. package/dist/definitions/health/request.schema.d.ts.map +1 -0
  86. package/dist/definitions/health/request.schema.js +8 -0
  87. package/dist/definitions/health/request.schema.js.map +1 -0
  88. package/dist/definitions/health/response.schema.d.ts +26 -0
  89. package/dist/definitions/health/response.schema.d.ts.map +1 -0
  90. package/dist/definitions/health/response.schema.js +16 -0
  91. package/dist/definitions/health/response.schema.js.map +1 -0
  92. package/dist/definitions/health/schemas.d.ts +30 -0
  93. package/dist/definitions/health/schemas.d.ts.map +1 -0
  94. package/dist/definitions/health/schemas.js +23 -0
  95. package/dist/definitions/index.d.ts +25 -0
  96. package/dist/definitions/index.d.ts.map +1 -0
  97. package/dist/definitions/index.js +25 -0
  98. package/dist/definitions/index.js.map +1 -0
  99. package/dist/definitions/projects/domain.schema.d.ts +42 -0
  100. package/dist/definitions/projects/domain.schema.d.ts.map +1 -0
  101. package/dist/definitions/projects/domain.schema.js +46 -0
  102. package/dist/definitions/projects/domain.schema.js.map +1 -0
  103. package/dist/definitions/projects/index.d.ts +4 -0
  104. package/dist/definitions/projects/index.d.ts.map +1 -0
  105. package/dist/definitions/projects/index.js +4 -0
  106. package/dist/definitions/projects/index.js.map +1 -0
  107. package/dist/definitions/projects/projects.schema.d.ts +8 -0
  108. package/dist/definitions/projects/projects.schema.d.ts.map +1 -0
  109. package/dist/definitions/projects/projects.schema.js +23 -0
  110. package/dist/definitions/projects/request.schema.d.ts +41 -0
  111. package/dist/definitions/projects/request.schema.d.ts.map +1 -0
  112. package/dist/definitions/projects/request.schema.js +43 -0
  113. package/dist/definitions/projects/request.schema.js.map +1 -0
  114. package/dist/definitions/projects/response.schema.d.ts +79 -0
  115. package/dist/definitions/projects/response.schema.d.ts.map +1 -0
  116. package/dist/definitions/projects/response.schema.js +43 -0
  117. package/dist/definitions/projects/response.schema.js.map +1 -0
  118. package/dist/definitions/projects/schemas.d.ts +114 -0
  119. package/dist/definitions/projects/schemas.d.ts.map +1 -0
  120. package/dist/definitions/projects/schemas.js +87 -0
  121. package/dist/definitions/signal-email/domain.schema.d.ts +135 -0
  122. package/dist/definitions/signal-email/domain.schema.d.ts.map +1 -0
  123. package/dist/definitions/signal-email/domain.schema.js +130 -0
  124. package/dist/definitions/signal-email/domain.schema.js.map +1 -0
  125. package/dist/definitions/signal-email/index.d.ts +23 -0
  126. package/dist/definitions/signal-email/index.d.ts.map +1 -0
  127. package/dist/definitions/signal-email/index.js +26 -0
  128. package/dist/definitions/signal-email/index.js.map +1 -0
  129. package/dist/definitions/signal-email/request.schema.d.ts +123 -0
  130. package/dist/definitions/signal-email/request.schema.d.ts.map +1 -0
  131. package/dist/definitions/signal-email/request.schema.js +201 -0
  132. package/dist/definitions/signal-email/request.schema.js.map +1 -0
  133. package/dist/definitions/signal-email/response.schema.d.ts +73 -0
  134. package/dist/definitions/signal-email/response.schema.d.ts.map +1 -0
  135. package/dist/definitions/signal-email/response.schema.js +83 -0
  136. package/dist/definitions/signal-email/response.schema.js.map +1 -0
  137. package/dist/definitions/signal-projects/domain.schema.d.ts +227 -0
  138. package/dist/definitions/signal-projects/domain.schema.d.ts.map +1 -0
  139. package/dist/definitions/signal-projects/domain.schema.js +230 -0
  140. package/dist/definitions/signal-projects/domain.schema.js.map +1 -0
  141. package/dist/definitions/signal-projects/index.d.ts +16 -0
  142. package/dist/definitions/signal-projects/index.d.ts.map +1 -0
  143. package/dist/definitions/signal-projects/index.js +16 -0
  144. package/dist/definitions/signal-projects/index.js.map +1 -0
  145. package/dist/definitions/signal-projects/request.schema.d.ts +254 -0
  146. package/dist/definitions/signal-projects/request.schema.d.ts.map +1 -0
  147. package/dist/definitions/signal-projects/request.schema.js +213 -0
  148. package/dist/definitions/signal-projects/request.schema.js.map +1 -0
  149. package/dist/definitions/signal-projects/response.schema.d.ts +615 -0
  150. package/dist/definitions/signal-projects/response.schema.d.ts.map +1 -0
  151. package/dist/definitions/signal-projects/response.schema.js +267 -0
  152. package/dist/definitions/signal-projects/response.schema.js.map +1 -0
  153. package/dist/definitions/suppressions/domain.schema.d.ts +13 -0
  154. package/dist/definitions/suppressions/domain.schema.d.ts.map +1 -0
  155. package/dist/definitions/suppressions/domain.schema.js +8 -0
  156. package/dist/definitions/suppressions/domain.schema.js.map +1 -0
  157. package/dist/definitions/suppressions/index.d.ts +4 -0
  158. package/dist/definitions/suppressions/index.d.ts.map +1 -0
  159. package/dist/definitions/suppressions/index.js +4 -0
  160. package/dist/definitions/suppressions/index.js.map +1 -0
  161. package/dist/definitions/suppressions/request.schema.d.ts +39 -0
  162. package/dist/definitions/suppressions/request.schema.d.ts.map +1 -0
  163. package/dist/definitions/suppressions/request.schema.js +27 -0
  164. package/dist/definitions/suppressions/request.schema.js.map +1 -0
  165. package/dist/definitions/suppressions/response.schema.d.ts +42 -0
  166. package/dist/definitions/suppressions/response.schema.d.ts.map +1 -0
  167. package/dist/definitions/suppressions/response.schema.js +18 -0
  168. package/dist/definitions/suppressions/response.schema.js.map +1 -0
  169. package/dist/definitions/suppressions/schemas.d.ts +90 -0
  170. package/dist/definitions/suppressions/schemas.d.ts.map +1 -0
  171. package/dist/definitions/suppressions/schemas.js +68 -0
  172. package/dist/definitions/suppressions/suppressions.schema.d.ts +79 -0
  173. package/dist/definitions/suppressions/suppressions.schema.d.ts.map +1 -0
  174. package/dist/definitions/suppressions/suppressions.schema.js +63 -0
  175. package/dist/definitions/templates/domain.schema.d.ts +11 -0
  176. package/dist/definitions/templates/domain.schema.d.ts.map +1 -0
  177. package/dist/definitions/templates/domain.schema.js +14 -0
  178. package/dist/definitions/templates/domain.schema.js.map +1 -0
  179. package/dist/definitions/templates/index.d.ts +4 -0
  180. package/dist/definitions/templates/index.d.ts.map +1 -0
  181. package/dist/definitions/templates/index.js +4 -0
  182. package/dist/definitions/templates/index.js.map +1 -0
  183. package/dist/definitions/templates/request.schema.d.ts +33 -0
  184. package/dist/definitions/templates/request.schema.d.ts.map +1 -0
  185. package/dist/definitions/templates/request.schema.js +32 -0
  186. package/dist/definitions/templates/request.schema.js.map +1 -0
  187. package/dist/definitions/templates/response.schema.d.ts +91 -0
  188. package/dist/definitions/templates/response.schema.d.ts.map +1 -0
  189. package/dist/definitions/templates/response.schema.js +49 -0
  190. package/dist/definitions/templates/response.schema.js.map +1 -0
  191. package/dist/definitions/templates/schemas.d.ts +113 -0
  192. package/dist/definitions/templates/schemas.d.ts.map +1 -0
  193. package/dist/definitions/templates/schemas.js +80 -0
  194. package/dist/definitions/usage/domain.schema.d.ts +60 -0
  195. package/dist/definitions/usage/domain.schema.d.ts.map +1 -0
  196. package/dist/definitions/usage/domain.schema.js +23 -0
  197. package/dist/definitions/usage/domain.schema.js.map +1 -0
  198. package/dist/definitions/usage/index.d.ts +4 -0
  199. package/dist/definitions/usage/index.d.ts.map +1 -0
  200. package/dist/definitions/usage/index.js +4 -0
  201. package/dist/definitions/usage/index.js.map +1 -0
  202. package/dist/definitions/usage/request.schema.d.ts +12 -0
  203. package/dist/definitions/usage/request.schema.d.ts.map +1 -0
  204. package/dist/definitions/usage/request.schema.js +13 -0
  205. package/dist/definitions/usage/request.schema.js.map +1 -0
  206. package/dist/definitions/usage/response.schema.d.ts +76 -0
  207. package/dist/definitions/usage/response.schema.d.ts.map +1 -0
  208. package/dist/definitions/usage/response.schema.js +22 -0
  209. package/dist/definitions/usage/response.schema.js.map +1 -0
  210. package/dist/definitions/usage/schemas.d.ts +156 -0
  211. package/dist/definitions/usage/schemas.d.ts.map +1 -0
  212. package/dist/definitions/usage/schemas.js +83 -0
  213. package/dist/definitions/usage/usage.schema.d.ts +140 -0
  214. package/dist/definitions/usage/usage.schema.d.ts.map +1 -0
  215. package/dist/definitions/usage/usage.schema.js +77 -0
  216. package/dist/definitions/webhooks/domain.schema.d.ts +26 -0
  217. package/dist/definitions/webhooks/domain.schema.d.ts.map +1 -0
  218. package/dist/definitions/webhooks/domain.schema.js +14 -0
  219. package/dist/definitions/webhooks/domain.schema.js.map +1 -0
  220. package/dist/definitions/webhooks/index.d.ts +4 -0
  221. package/dist/definitions/webhooks/index.d.ts.map +1 -0
  222. package/dist/definitions/webhooks/index.js +4 -0
  223. package/dist/definitions/webhooks/index.js.map +1 -0
  224. package/dist/definitions/webhooks/request.schema.d.ts +64 -0
  225. package/dist/definitions/webhooks/request.schema.d.ts.map +1 -0
  226. package/dist/definitions/webhooks/request.schema.js +32 -0
  227. package/dist/definitions/webhooks/request.schema.js.map +1 -0
  228. package/dist/definitions/webhooks/response.schema.d.ts +76 -0
  229. package/dist/definitions/webhooks/response.schema.d.ts.map +1 -0
  230. package/dist/definitions/webhooks/response.schema.js +27 -0
  231. package/dist/definitions/webhooks/response.schema.js.map +1 -0
  232. package/dist/definitions/webhooks/schemas.d.ts +145 -0
  233. package/dist/definitions/webhooks/schemas.d.ts.map +1 -0
  234. package/dist/definitions/webhooks/schemas.js +97 -0
  235. package/dist/definitions/webhooks/webhooks.schema.d.ts +152 -0
  236. package/dist/definitions/webhooks/webhooks.schema.d.ts.map +1 -0
  237. package/dist/definitions/webhooks/webhooks.schema.js +96 -0
  238. package/dist/generators/generate-schemas.d.ts +10 -0
  239. package/dist/generators/generate-schemas.d.ts.map +1 -0
  240. package/dist/generators/generate-schemas.js +119 -0
  241. package/dist/generators/generate-schemas.js.map +1 -0
  242. package/dist/generators/index.d.ts +8 -0
  243. package/dist/generators/index.d.ts.map +1 -0
  244. package/dist/generators/index.js +8 -0
  245. package/dist/generators/index.js.map +1 -0
  246. package/dist/generators/register-global-registry.d.ts +14 -0
  247. package/dist/generators/register-global-registry.d.ts.map +1 -0
  248. package/dist/generators/register-global-registry.js +516 -0
  249. package/dist/generators/register-global-registry.js.map +1 -0
  250. package/dist/generators/zod-to-json-schema.d.ts +64 -0
  251. package/dist/generators/zod-to-json-schema.d.ts.map +1 -0
  252. package/dist/generators/zod-to-json-schema.js +300 -0
  253. package/dist/generators/zod-to-json-schema.js.map +1 -0
  254. package/dist/index.d.ts +15 -0
  255. package/dist/index.d.ts.map +1 -0
  256. package/dist/index.js +15 -0
  257. package/dist/index.js.map +1 -0
  258. package/package.json +103 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Zod to JSON Schema Generator
3
+ *
4
+ * Converts Zod schemas to JSON Schema format for cross-language type definitions.
5
+ * This enables non-TypeScript services (Zig, Rust, Go) to consume the same
6
+ * type definitions as TypeScript services.
7
+ *
8
+ * Note: This is a custom implementation that works with Zod 4, as the
9
+ * zod-to-json-schema library doesn't fully support Zod 4 yet.
10
+ */
11
+ import { z } from 'zod';
12
+ /**
13
+ * JSON Schema type
14
+ */
15
+ export type JsonSchemaObject = Record<string, unknown>;
16
+ /**
17
+ * Options for JSON Schema generation
18
+ */
19
+ export interface GeneratorOptions {
20
+ /** Name of the schema (used as $id) */
21
+ name: string;
22
+ /** Optional description for the schema */
23
+ description?: string;
24
+ /** Whether to include $schema property */
25
+ includeSchema?: boolean;
26
+ }
27
+ /**
28
+ * Result of JSON Schema generation
29
+ */
30
+ export interface GeneratedSchema {
31
+ /** The generated JSON Schema */
32
+ schema: JsonSchemaObject;
33
+ /** The schema name */
34
+ name: string;
35
+ /** JSON string representation */
36
+ json: string;
37
+ }
38
+ type ZodSchemaInput = z.ZodType<any>;
39
+ /**
40
+ * Convert a Zod schema to JSON Schema format
41
+ *
42
+ * @param zodSchema - The Zod schema to convert
43
+ * @param options - Generation options
44
+ * @returns Generated JSON Schema with metadata
45
+ */
46
+ export declare function convertToJsonSchema(zodSchema: ZodSchemaInput, options: GeneratorOptions): GeneratedSchema;
47
+ /**
48
+ * Batch convert multiple Zod schemas to JSON Schema format
49
+ *
50
+ * @param schemas - Map of schema name to Zod schema
51
+ * @param baseOptions - Base options applied to all schemas
52
+ * @returns Map of schema name to generated schema
53
+ */
54
+ export declare function convertMultipleToJsonSchema(schemas: Record<string, ZodSchemaInput>, baseOptions?: Partial<Omit<GeneratorOptions, 'name'>>): Map<string, GeneratedSchema>;
55
+ /**
56
+ * Create a combined JSON Schema document with multiple definitions
57
+ *
58
+ * @param schemas - Map of schema name to Zod schema
59
+ * @param rootName - Name for the root schema document
60
+ * @returns Combined JSON Schema with all definitions
61
+ */
62
+ export declare function createCombinedSchema(schemas: Record<string, ZodSchemaInput>, rootName: string): GeneratedSchema;
63
+ export {};
64
+ //# sourceMappingURL=zod-to-json-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-to-json-schema.d.ts","sourceRoot":"","sources":["../../src/generators/zod-to-json-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAID,KAAK,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAErC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,gBAAgB,GACxB,eAAe,CAkBjB;AA8RD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACvC,WAAW,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,GACpD,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAY9B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACvC,QAAQ,EAAE,MAAM,GACf,eAAe,CAkBjB"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Zod to JSON Schema Generator
3
+ *
4
+ * Converts Zod schemas to JSON Schema format for cross-language type definitions.
5
+ * This enables non-TypeScript services (Zig, Rust, Go) to consume the same
6
+ * type definitions as TypeScript services.
7
+ *
8
+ * Note: This is a custom implementation that works with Zod 4, as the
9
+ * zod-to-json-schema library doesn't fully support Zod 4 yet.
10
+ */
11
+ import { z } from 'zod';
12
+ /**
13
+ * Convert a Zod schema to JSON Schema format
14
+ *
15
+ * @param zodSchema - The Zod schema to convert
16
+ * @param options - Generation options
17
+ * @returns Generated JSON Schema with metadata
18
+ */
19
+ export function convertToJsonSchema(zodSchema, options) {
20
+ const { name, description, includeSchema = true } = options;
21
+ const schema = zodToJsonSchemaInternal(zodSchema);
22
+ // Add metadata
23
+ const enrichedSchema = {
24
+ ...(includeSchema && { $schema: 'http://json-schema.org/draft-07/schema#' }),
25
+ $id: name,
26
+ ...(description && { description }),
27
+ ...schema,
28
+ };
29
+ return {
30
+ schema: enrichedSchema,
31
+ name,
32
+ json: JSON.stringify(enrichedSchema, null, 2),
33
+ };
34
+ }
35
+ /**
36
+ * Internal function to convert Zod schema to JSON Schema
37
+ */
38
+ function zodToJsonSchemaInternal(schema) {
39
+ // Get the schema definition - use any to handle Zod 4 internal types
40
+ const def = schema._zod?.def ?? schema._def;
41
+ if (!def) {
42
+ return {};
43
+ }
44
+ const typeName = def.typeName ?? def.type;
45
+ switch (typeName) {
46
+ case 'ZodString':
47
+ case 'string':
48
+ return convertString(def);
49
+ case 'ZodNumber':
50
+ case 'number':
51
+ return convertNumber(def);
52
+ case 'ZodBoolean':
53
+ case 'boolean':
54
+ return { type: 'boolean' };
55
+ case 'ZodArray':
56
+ case 'array':
57
+ return convertArray(def);
58
+ case 'ZodObject':
59
+ case 'object':
60
+ return convertObject(def);
61
+ case 'ZodEnum':
62
+ case 'enum':
63
+ return convertEnum(def);
64
+ case 'ZodUnion':
65
+ case 'union':
66
+ return convertUnion(def);
67
+ case 'ZodOptional':
68
+ case 'optional':
69
+ return zodToJsonSchemaInternal(def.innerType ?? def.inner);
70
+ case 'ZodNullable':
71
+ case 'nullable':
72
+ return convertNullable(def);
73
+ case 'ZodDefault':
74
+ case 'default':
75
+ return convertDefault(def);
76
+ case 'ZodRecord':
77
+ case 'record':
78
+ return convertRecord(def);
79
+ case 'ZodLiteral':
80
+ case 'literal':
81
+ return convertLiteral(def);
82
+ case 'ZodDate':
83
+ case 'date':
84
+ return { type: 'string', format: 'date-time' };
85
+ case 'ZodAny':
86
+ case 'any':
87
+ return {};
88
+ case 'ZodUnknown':
89
+ case 'unknown':
90
+ return {};
91
+ case 'ZodNull':
92
+ case 'null':
93
+ return { type: 'null' };
94
+ case 'ZodUndefined':
95
+ case 'undefined':
96
+ return {};
97
+ case 'ZodEffects':
98
+ case 'effects':
99
+ // For effects (transforms, refinements), use the inner schema
100
+ return zodToJsonSchemaInternal(def.schema ?? def.inner);
101
+ default:
102
+ console.warn(`Unknown Zod type: ${typeName}`);
103
+ return {};
104
+ }
105
+ }
106
+ function convertString(def) {
107
+ const result = { type: 'string' };
108
+ // Handle checks array (Zod 4 style)
109
+ const checks = (def.checks ?? []);
110
+ for (const check of checks) {
111
+ switch (check.kind) {
112
+ case 'min':
113
+ result.minLength = check.value;
114
+ break;
115
+ case 'max':
116
+ result.maxLength = check.value;
117
+ break;
118
+ case 'email':
119
+ result.format = 'email';
120
+ break;
121
+ case 'url':
122
+ result.format = 'uri';
123
+ break;
124
+ case 'uuid':
125
+ result.format = 'uuid';
126
+ break;
127
+ case 'datetime':
128
+ result.format = 'date-time';
129
+ break;
130
+ case 'regex':
131
+ result.pattern = check.value.source;
132
+ break;
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ function convertNumber(def) {
138
+ const checks = (def.checks ?? []);
139
+ const isInt = checks.some((c) => c.kind === 'int');
140
+ const result = { type: isInt ? 'integer' : 'number' };
141
+ for (const check of checks) {
142
+ switch (check.kind) {
143
+ case 'min':
144
+ result.minimum = check.value;
145
+ break;
146
+ case 'max':
147
+ result.maximum = check.value;
148
+ break;
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ function convertArray(def) {
154
+ // Zod 4 uses 'element' for the inner type
155
+ const innerType = def.element ?? def.type;
156
+ const result = {
157
+ type: 'array',
158
+ items: innerType ? zodToJsonSchemaInternal(innerType) : {},
159
+ };
160
+ // Handle min/max length checks
161
+ const checks = def.checks ?? [];
162
+ for (const check of checks) {
163
+ if (check.kind === 'min') {
164
+ result.minItems = check.value;
165
+ }
166
+ if (check.kind === 'max') {
167
+ result.maxItems = check.value;
168
+ }
169
+ }
170
+ // Also check for direct minLength/maxLength properties
171
+ if (def.minLength?.value) {
172
+ result.minItems = def.minLength.value;
173
+ }
174
+ if (def.maxLength?.value) {
175
+ result.maxItems = def.maxLength.value;
176
+ }
177
+ return result;
178
+ }
179
+ function convertObject(def) {
180
+ const shape = (def.shape ?? {});
181
+ const properties = {};
182
+ const required = [];
183
+ for (const [key, value] of Object.entries(shape)) {
184
+ properties[key] = zodToJsonSchemaInternal(value);
185
+ // Check if field is required (not optional)
186
+ const valueDef = value._zod?.def ?? value._def;
187
+ const isOptional = valueDef?.typeName === 'ZodOptional' ||
188
+ valueDef?.typeName === 'ZodDefault' ||
189
+ valueDef?.type === 'optional' ||
190
+ valueDef?.type === 'default';
191
+ if (!isOptional) {
192
+ required.push(key);
193
+ }
194
+ }
195
+ const result = {
196
+ type: 'object',
197
+ properties,
198
+ };
199
+ if (required.length > 0) {
200
+ result.required = required;
201
+ }
202
+ return result;
203
+ }
204
+ function convertEnum(def) {
205
+ // Zod 4 stores enum values differently
206
+ let values = def.values ?? def.entries;
207
+ // If values is an object (Zod 4 style), extract the values
208
+ if (values && typeof values === 'object' && !Array.isArray(values)) {
209
+ values = Object.values(values);
210
+ }
211
+ return {
212
+ type: 'string',
213
+ enum: values,
214
+ };
215
+ }
216
+ function convertUnion(def) {
217
+ const options = (def.options ?? []);
218
+ return {
219
+ oneOf: options.map((opt) => zodToJsonSchemaInternal(opt)),
220
+ };
221
+ }
222
+ function convertNullable(def) {
223
+ const innerSchema = zodToJsonSchemaInternal((def.innerType ?? def.inner));
224
+ return {
225
+ oneOf: [innerSchema, { type: 'null' }],
226
+ };
227
+ }
228
+ function convertDefault(def) {
229
+ const innerSchema = zodToJsonSchemaInternal((def.innerType ?? def.inner));
230
+ const defaultValue = def.defaultValue;
231
+ if (defaultValue !== undefined) {
232
+ innerSchema.default =
233
+ typeof defaultValue === 'function' ? defaultValue() : defaultValue;
234
+ }
235
+ return innerSchema;
236
+ }
237
+ function convertRecord(def) {
238
+ const valueType = def.valueType ?? def.value;
239
+ return {
240
+ type: 'object',
241
+ additionalProperties: valueType
242
+ ? zodToJsonSchemaInternal(valueType)
243
+ : true,
244
+ };
245
+ }
246
+ function convertLiteral(def) {
247
+ const value = def.value;
248
+ if (typeof value === 'string') {
249
+ return { type: 'string', const: value };
250
+ }
251
+ if (typeof value === 'number') {
252
+ return { type: 'number', const: value };
253
+ }
254
+ if (typeof value === 'boolean') {
255
+ return { type: 'boolean', const: value };
256
+ }
257
+ return { const: value };
258
+ }
259
+ /**
260
+ * Batch convert multiple Zod schemas to JSON Schema format
261
+ *
262
+ * @param schemas - Map of schema name to Zod schema
263
+ * @param baseOptions - Base options applied to all schemas
264
+ * @returns Map of schema name to generated schema
265
+ */
266
+ export function convertMultipleToJsonSchema(schemas, baseOptions) {
267
+ const results = new Map();
268
+ for (const [name, zodSchema] of Object.entries(schemas)) {
269
+ const result = convertToJsonSchema(zodSchema, {
270
+ ...baseOptions,
271
+ name,
272
+ });
273
+ results.set(name, result);
274
+ }
275
+ return results;
276
+ }
277
+ /**
278
+ * Create a combined JSON Schema document with multiple definitions
279
+ *
280
+ * @param schemas - Map of schema name to Zod schema
281
+ * @param rootName - Name for the root schema document
282
+ * @returns Combined JSON Schema with all definitions
283
+ */
284
+ export function createCombinedSchema(schemas, rootName) {
285
+ const definitions = {};
286
+ for (const [name, zodSchema] of Object.entries(schemas)) {
287
+ definitions[name] = zodToJsonSchemaInternal(zodSchema);
288
+ }
289
+ const combinedSchema = {
290
+ $schema: 'http://json-schema.org/draft-07/schema#',
291
+ $id: rootName,
292
+ definitions,
293
+ };
294
+ return {
295
+ schema: combinedSchema,
296
+ name: rootName,
297
+ json: JSON.stringify(combinedSchema, null, 2),
298
+ };
299
+ }
300
+ //# sourceMappingURL=zod-to-json-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-to-json-schema.js","sourceRoot":"","sources":["../../src/generators/zod-to-json-schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Zod to JSON Schema Generator\n *\n * Converts Zod schemas to JSON Schema format for cross-language type definitions.\n * This enables non-TypeScript services (Zig, Rust, Go) to consume the same\n * type definitions as TypeScript services.\n *\n * Note: This is a custom implementation that works with Zod 4, as the\n * zod-to-json-schema library doesn't fully support Zod 4 yet.\n */\n\nimport { z } from 'zod';\n\n/**\n * JSON Schema type\n */\nexport type JsonSchemaObject = Record<string, unknown>;\n\n/**\n * Options for JSON Schema generation\n */\nexport interface GeneratorOptions {\n /** Name of the schema (used as $id) */\n name: string;\n /** Optional description for the schema */\n description?: string;\n /** Whether to include $schema property */\n includeSchema?: boolean;\n}\n\n/**\n * Result of JSON Schema generation\n */\nexport interface GeneratedSchema {\n /** The generated JSON Schema */\n schema: JsonSchemaObject;\n /** The schema name */\n name: string;\n /** JSON string representation */\n json: string;\n}\n\n// Type alias for Zod schema input\n \ntype ZodSchemaInput = z.ZodType<any>;\n\n/**\n * Convert a Zod schema to JSON Schema format\n *\n * @param zodSchema - The Zod schema to convert\n * @param options - Generation options\n * @returns Generated JSON Schema with metadata\n */\nexport function convertToJsonSchema(\n zodSchema: ZodSchemaInput,\n options: GeneratorOptions\n): GeneratedSchema {\n const { name, description, includeSchema = true } = options;\n\n const schema = zodToJsonSchemaInternal(zodSchema);\n\n // Add metadata\n const enrichedSchema: JsonSchemaObject = {\n ...(includeSchema && { $schema: 'http://json-schema.org/draft-07/schema#' }),\n $id: name,\n ...(description && { description }),\n ...schema,\n };\n\n return {\n schema: enrichedSchema,\n name,\n json: JSON.stringify(enrichedSchema, null, 2),\n };\n}\n\n/**\n * Internal function to convert Zod schema to JSON Schema\n */\nfunction zodToJsonSchemaInternal(schema: ZodSchemaInput): JsonSchemaObject {\n // Get the schema definition - use any to handle Zod 4 internal types\n \n const def: any = (schema as any)._zod?.def ?? (schema as any)._def;\n\n if (!def) {\n return {};\n }\n\n const typeName = def.typeName ?? def.type;\n\n switch (typeName) {\n case 'ZodString':\n case 'string':\n return convertString(def);\n\n case 'ZodNumber':\n case 'number':\n return convertNumber(def);\n\n case 'ZodBoolean':\n case 'boolean':\n return { type: 'boolean' };\n\n case 'ZodArray':\n case 'array':\n return convertArray(def);\n\n case 'ZodObject':\n case 'object':\n return convertObject(def);\n\n case 'ZodEnum':\n case 'enum':\n return convertEnum(def);\n\n case 'ZodUnion':\n case 'union':\n return convertUnion(def);\n\n case 'ZodOptional':\n case 'optional':\n return zodToJsonSchemaInternal(def.innerType ?? def.inner);\n\n case 'ZodNullable':\n case 'nullable':\n return convertNullable(def);\n\n case 'ZodDefault':\n case 'default':\n return convertDefault(def);\n\n case 'ZodRecord':\n case 'record':\n return convertRecord(def);\n\n case 'ZodLiteral':\n case 'literal':\n return convertLiteral(def);\n\n case 'ZodDate':\n case 'date':\n return { type: 'string', format: 'date-time' };\n\n case 'ZodAny':\n case 'any':\n return {};\n\n case 'ZodUnknown':\n case 'unknown':\n return {};\n\n case 'ZodNull':\n case 'null':\n return { type: 'null' };\n\n case 'ZodUndefined':\n case 'undefined':\n return {};\n\n case 'ZodEffects':\n case 'effects':\n // For effects (transforms, refinements), use the inner schema\n return zodToJsonSchemaInternal(def.schema ?? def.inner);\n\n default:\n console.warn(`Unknown Zod type: ${typeName}`);\n return {};\n }\n}\n\n \nfunction convertString(def: any): JsonSchemaObject {\n const result: JsonSchemaObject = { type: 'string' };\n\n // Handle checks array (Zod 4 style)\n const checks = (def.checks ?? []) as Array<{ kind: string; value?: unknown; message?: string }>;\n\n for (const check of checks) {\n switch (check.kind) {\n case 'min':\n result.minLength = check.value as number;\n break;\n case 'max':\n result.maxLength = check.value as number;\n break;\n case 'email':\n result.format = 'email';\n break;\n case 'url':\n result.format = 'uri';\n break;\n case 'uuid':\n result.format = 'uuid';\n break;\n case 'datetime':\n result.format = 'date-time';\n break;\n case 'regex':\n result.pattern = (check.value as RegExp).source;\n break;\n }\n }\n\n return result;\n}\n\n \nfunction convertNumber(def: any): JsonSchemaObject {\n const checks = (def.checks ?? []) as Array<{ kind: string; value?: unknown }>;\n const isInt = checks.some((c) => c.kind === 'int');\n\n const result: JsonSchemaObject = { type: isInt ? 'integer' : 'number' };\n\n for (const check of checks) {\n switch (check.kind) {\n case 'min':\n result.minimum = check.value as number;\n break;\n case 'max':\n result.maximum = check.value as number;\n break;\n }\n }\n\n return result;\n}\n\n \nfunction convertArray(def: any): JsonSchemaObject {\n // Zod 4 uses 'element' for the inner type\n const innerType = def.element ?? def.type;\n const result: JsonSchemaObject = {\n type: 'array',\n items: innerType ? zodToJsonSchemaInternal(innerType as ZodSchemaInput) : {},\n };\n\n // Handle min/max length checks\n const checks = def.checks ?? [];\n for (const check of checks) {\n if (check.kind === 'min') {result.minItems = check.value;}\n if (check.kind === 'max') {result.maxItems = check.value;}\n }\n\n // Also check for direct minLength/maxLength properties\n if (def.minLength?.value) {result.minItems = def.minLength.value;}\n if (def.maxLength?.value) {result.maxItems = def.maxLength.value;}\n\n return result;\n}\n\n \nfunction convertObject(def: any): JsonSchemaObject {\n const shape = (def.shape ?? {}) as Record<string, ZodSchemaInput>;\n const properties: Record<string, JsonSchemaObject> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchemaInternal(value);\n\n // Check if field is required (not optional)\n \n const valueDef: any = (value as any)._zod?.def ?? (value as any)._def;\n const isOptional =\n valueDef?.typeName === 'ZodOptional' ||\n valueDef?.typeName === 'ZodDefault' ||\n valueDef?.type === 'optional' ||\n valueDef?.type === 'default';\n\n if (!isOptional) {\n required.push(key);\n }\n }\n\n const result: JsonSchemaObject = {\n type: 'object',\n properties,\n };\n\n if (required.length > 0) {\n result.required = required;\n }\n\n return result;\n}\n\n \nfunction convertEnum(def: any): JsonSchemaObject {\n // Zod 4 stores enum values differently\n let values = def.values ?? def.entries;\n\n // If values is an object (Zod 4 style), extract the values\n if (values && typeof values === 'object' && !Array.isArray(values)) {\n values = Object.values(values);\n }\n\n return {\n type: 'string',\n enum: values as string[],\n };\n}\n\n \nfunction convertUnion(def: any): JsonSchemaObject {\n const options = (def.options ?? []) as ZodSchemaInput[];\n return {\n oneOf: options.map((opt) => zodToJsonSchemaInternal(opt)),\n };\n}\n\n \nfunction convertNullable(def: any): JsonSchemaObject {\n const innerSchema = zodToJsonSchemaInternal(\n (def.innerType ?? def.inner) as ZodSchemaInput\n );\n return {\n oneOf: [innerSchema, { type: 'null' }],\n };\n}\n\n \nfunction convertDefault(def: any): JsonSchemaObject {\n const innerSchema = zodToJsonSchemaInternal(\n (def.innerType ?? def.inner) as ZodSchemaInput\n );\n const defaultValue = def.defaultValue;\n\n if (defaultValue !== undefined) {\n innerSchema.default =\n typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n }\n\n return innerSchema;\n}\n\n \nfunction convertRecord(def: any): JsonSchemaObject {\n const valueType = def.valueType ?? def.value;\n return {\n type: 'object',\n additionalProperties: valueType\n ? zodToJsonSchemaInternal(valueType as ZodSchemaInput)\n : true,\n };\n}\n\n \nfunction convertLiteral(def: any): JsonSchemaObject {\n const value = def.value;\n if (typeof value === 'string') {\n return { type: 'string', const: value };\n }\n if (typeof value === 'number') {\n return { type: 'number', const: value };\n }\n if (typeof value === 'boolean') {\n return { type: 'boolean', const: value };\n }\n return { const: value };\n}\n\n/**\n * Batch convert multiple Zod schemas to JSON Schema format\n *\n * @param schemas - Map of schema name to Zod schema\n * @param baseOptions - Base options applied to all schemas\n * @returns Map of schema name to generated schema\n */\nexport function convertMultipleToJsonSchema(\n schemas: Record<string, ZodSchemaInput>,\n baseOptions?: Partial<Omit<GeneratorOptions, 'name'>>\n): Map<string, GeneratedSchema> {\n const results = new Map<string, GeneratedSchema>();\n\n for (const [name, zodSchema] of Object.entries(schemas)) {\n const result = convertToJsonSchema(zodSchema, {\n ...baseOptions,\n name,\n });\n results.set(name, result);\n }\n\n return results;\n}\n\n/**\n * Create a combined JSON Schema document with multiple definitions\n *\n * @param schemas - Map of schema name to Zod schema\n * @param rootName - Name for the root schema document\n * @returns Combined JSON Schema with all definitions\n */\nexport function createCombinedSchema(\n schemas: Record<string, ZodSchemaInput>,\n rootName: string\n): GeneratedSchema {\n const definitions: Record<string, JsonSchemaObject> = {};\n\n for (const [name, zodSchema] of Object.entries(schemas)) {\n definitions[name] = zodToJsonSchemaInternal(zodSchema);\n }\n\n const combinedSchema: JsonSchemaObject = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: rootName,\n definitions,\n };\n\n return {\n schema: combinedSchema,\n name: rootName,\n json: JSON.stringify(combinedSchema, null, 2),\n };\n}\n"]}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @apollo-deploy/signal-schemas
3
+ *
4
+ * Wire contracts for the Apollo Signal transactional email service.
5
+ *
6
+ * Provides Zod schema definitions for runtime validation and TypeScript
7
+ * type inference across the Signal service boundary.
8
+ *
9
+ * Prefer subpath imports for tree-shaking:
10
+ * import { SignalSendEmailBodySchema } from '@apollo-deploy/signal-schemas/signal-email';
11
+ * import { SignalProjectSchema } from '@apollo-deploy/signal-schemas/signal-projects';
12
+ */
13
+ export * from './definitions/index.js';
14
+ export * from './generators/index.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @apollo-deploy/signal-schemas
3
+ *
4
+ * Wire contracts for the Apollo Signal transactional email service.
5
+ *
6
+ * Provides Zod schema definitions for runtime validation and TypeScript
7
+ * type inference across the Signal service boundary.
8
+ *
9
+ * Prefer subpath imports for tree-shaking:
10
+ * import { SignalSendEmailBodySchema } from '@apollo-deploy/signal-schemas/signal-email';
11
+ * import { SignalProjectSchema } from '@apollo-deploy/signal-schemas/signal-projects';
12
+ */
13
+ export * from './definitions/index.js';
14
+ export * from './generators/index.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC","sourcesContent":["/**\n * @apollo-deploy/signal-schemas\n *\n * Wire contracts for the Apollo Signal transactional email service.\n *\n * Provides Zod schema definitions for runtime validation and TypeScript\n * type inference across the Signal service boundary.\n *\n * Prefer subpath imports for tree-shaking:\n * import { SignalSendEmailBodySchema } from '@apollo-deploy/signal-schemas/signal-email';\n * import { SignalProjectSchema } from '@apollo-deploy/signal-schemas/signal-projects';\n */\n\nexport * from './definitions/index.js';\nexport * from './generators/index.js';\n"]}
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@apollo-deploy/signal-schemas",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "description": "Apollo Signal wire contracts \u2014 Zod schemas for the Signal transactional email service",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "sideEffects": false,
13
+ "exports": {
14
+ ".": {
15
+ "import": "./dist/index.js",
16
+ "types": "./dist/index.d.ts"
17
+ },
18
+ "./definitions": {
19
+ "import": "./dist/definitions/index.js",
20
+ "types": "./dist/definitions/index.d.ts"
21
+ },
22
+ "./generators": {
23
+ "import": "./dist/generators/index.js",
24
+ "types": "./dist/generators/index.d.ts"
25
+ },
26
+ "./common": {
27
+ "import": "./dist/definitions/common.js",
28
+ "types": "./dist/definitions/common.d.ts"
29
+ },
30
+ "./signal-email": {
31
+ "import": "./dist/definitions/signal-email/index.js",
32
+ "types": "./dist/definitions/signal-email/index.d.ts"
33
+ },
34
+ "./signal-projects": {
35
+ "import": "./dist/definitions/signal-projects/index.js",
36
+ "types": "./dist/definitions/signal-projects/index.d.ts"
37
+ },
38
+ "./projects": {
39
+ "import": "./dist/definitions/projects/index.js",
40
+ "types": "./dist/definitions/projects/index.d.ts"
41
+ },
42
+ "./domains": {
43
+ "import": "./dist/definitions/domains/index.js",
44
+ "types": "./dist/definitions/domains/index.d.ts"
45
+ },
46
+ "./emails": {
47
+ "import": "./dist/definitions/emails/index.js",
48
+ "types": "./dist/definitions/emails/index.d.ts"
49
+ },
50
+ "./suppressions": {
51
+ "import": "./dist/definitions/suppressions/index.js",
52
+ "types": "./dist/definitions/suppressions/index.d.ts"
53
+ },
54
+ "./webhooks": {
55
+ "import": "./dist/definitions/webhooks/index.js",
56
+ "types": "./dist/definitions/webhooks/index.d.ts"
57
+ },
58
+ "./usage": {
59
+ "import": "./dist/definitions/usage/index.js",
60
+ "types": "./dist/definitions/usage/index.d.ts"
61
+ },
62
+ "./deliverability": {
63
+ "import": "./dist/definitions/deliverability/index.js",
64
+ "types": "./dist/definitions/deliverability/index.d.ts"
65
+ },
66
+ "./templates": {
67
+ "import": "./dist/definitions/templates/index.js",
68
+ "types": "./dist/definitions/templates/index.d.ts"
69
+ },
70
+ "./health": {
71
+ "import": "./dist/definitions/health/index.js",
72
+ "types": "./dist/definitions/health/index.d.ts"
73
+ }
74
+ },
75
+ "publishConfig": {
76
+ "registry": "https://registry.npmjs.org",
77
+ "access": "public"
78
+ },
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "https://github.com/Apollo-Deploy/cross-language-schemas.git",
82
+ "directory": "packages/schemas"
83
+ },
84
+ "scripts": {
85
+ "build": "tsc --build",
86
+ "generate": "bun run src/generators/generate-schemas.ts",
87
+ "registry:check": "bun run src/generators/register-global-registry.ts --check",
88
+ "registry:fix": "bun run src/generators/register-global-registry.ts --write",
89
+ "typecheck": "tsc --noEmit",
90
+ "test": "bun test"
91
+ },
92
+ "dependencies": {
93
+ "zod-to-json-schema": "^3.25.0"
94
+ },
95
+ "peerDependencies": {
96
+ "zod": ">=4.0.0"
97
+ },
98
+ "devDependencies": {
99
+ "@apollo-deploy/tsconfig": "workspace:*",
100
+ "bun-types": "^1.1.42",
101
+ "typescript": "^5.6.3"
102
+ }
103
+ }