primitive-admin 1.1.0-alpha.7 → 1.1.0-alpha.71

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 (438) hide show
  1. package/README.md +404 -80
  2. package/assets/skill/skills/primitive-platform/SKILL.md +808 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +294 -21
  5. package/dist/bin/primitive.js.map +1 -1
  6. package/dist/src/commands/admins.d.ts +2 -0
  7. package/dist/src/commands/admins.js +138 -19
  8. package/dist/src/commands/admins.js.map +1 -1
  9. package/dist/src/commands/analytics.d.ts +2 -0
  10. package/dist/src/commands/analytics.js +544 -55
  11. package/dist/src/commands/analytics.js.map +1 -1
  12. package/dist/src/commands/apps.d.ts +2 -0
  13. package/dist/src/commands/apps.js +51 -96
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth.d.ts +2 -0
  16. package/dist/src/commands/auth.js +177 -7
  17. package/dist/src/commands/auth.js.map +1 -1
  18. package/dist/src/commands/blob-buckets.d.ts +2 -0
  19. package/dist/src/commands/blob-buckets.js +330 -0
  20. package/dist/src/commands/blob-buckets.js.map +1 -0
  21. package/dist/src/commands/catalog.d.ts +2 -0
  22. package/dist/src/commands/catalog.js +37 -38
  23. package/dist/src/commands/catalog.js.map +1 -1
  24. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  25. package/dist/src/commands/collection-type-configs.js +92 -0
  26. package/dist/src/commands/collection-type-configs.js.map +1 -0
  27. package/dist/src/commands/collections.d.ts +2 -0
  28. package/dist/src/commands/collections.js +565 -0
  29. package/dist/src/commands/collections.js.map +1 -0
  30. package/dist/src/commands/comparisons.d.ts +2 -0
  31. package/dist/src/commands/comparisons.js +6 -6
  32. package/dist/src/commands/comparisons.js.map +1 -1
  33. package/dist/src/commands/config.d.ts +46 -0
  34. package/dist/src/commands/config.js +479 -0
  35. package/dist/src/commands/config.js.map +1 -0
  36. package/dist/src/commands/connections.d.ts +2 -0
  37. package/dist/src/commands/connections.js +100 -0
  38. package/dist/src/commands/connections.js.map +1 -0
  39. package/dist/src/commands/cron-triggers.d.ts +2 -0
  40. package/dist/src/commands/cron-triggers.js +265 -0
  41. package/dist/src/commands/cron-triggers.js.map +1 -0
  42. package/dist/src/commands/database-type-configs.d.ts +2 -0
  43. package/dist/src/commands/database-type-configs.js +171 -0
  44. package/dist/src/commands/database-type-configs.js.map +1 -0
  45. package/dist/src/commands/database-types.d.ts +2 -0
  46. package/dist/src/commands/database-types.js +471 -0
  47. package/dist/src/commands/database-types.js.map +1 -0
  48. package/dist/src/commands/databases.d.ts +65 -0
  49. package/dist/src/commands/databases.js +2140 -112
  50. package/dist/src/commands/databases.js.map +1 -1
  51. package/dist/src/commands/documents.d.ts +2 -0
  52. package/dist/src/commands/documents.js +1357 -19
  53. package/dist/src/commands/documents.js.map +1 -1
  54. package/dist/src/commands/email-templates.d.ts +2 -0
  55. package/dist/src/commands/email-templates.js +174 -0
  56. package/dist/src/commands/email-templates.js.map +1 -0
  57. package/dist/src/commands/env.d.ts +23 -0
  58. package/dist/src/commands/env.js +333 -0
  59. package/dist/src/commands/env.js.map +1 -0
  60. package/dist/src/commands/feature-flags.d.ts +14 -0
  61. package/dist/src/commands/feature-flags.js +116 -0
  62. package/dist/src/commands/feature-flags.js.map +1 -0
  63. package/dist/src/commands/group-type-configs.d.ts +2 -0
  64. package/dist/src/commands/group-type-configs.js +86 -0
  65. package/dist/src/commands/group-type-configs.js.map +1 -0
  66. package/dist/src/commands/groups.d.ts +2 -0
  67. package/dist/src/commands/groups.js +38 -99
  68. package/dist/src/commands/groups.js.map +1 -1
  69. package/dist/src/commands/guides.d.ts +223 -0
  70. package/dist/src/commands/guides.js +617 -65
  71. package/dist/src/commands/guides.js.map +1 -1
  72. package/dist/src/commands/init.d.ts +25 -0
  73. package/dist/src/commands/init.js +1605 -208
  74. package/dist/src/commands/init.js.map +1 -1
  75. package/dist/src/commands/integrations.d.ts +2 -0
  76. package/dist/src/commands/integrations.js +380 -178
  77. package/dist/src/commands/integrations.js.map +1 -1
  78. package/dist/src/commands/llm.d.ts +2 -0
  79. package/dist/src/commands/llm.js +4 -2
  80. package/dist/src/commands/llm.js.map +1 -1
  81. package/dist/src/commands/locks.d.ts +8 -0
  82. package/dist/src/commands/locks.js +160 -0
  83. package/dist/src/commands/locks.js.map +1 -0
  84. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  85. package/dist/src/commands/metadata-category-configs.js +112 -0
  86. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  87. package/dist/src/commands/metadata.d.ts +2 -0
  88. package/dist/src/commands/metadata.js +281 -0
  89. package/dist/src/commands/metadata.js.map +1 -0
  90. package/dist/src/commands/prompts.d.ts +2 -0
  91. package/dist/src/commands/prompts.js +225 -584
  92. package/dist/src/commands/prompts.js.map +1 -1
  93. package/dist/src/commands/rule-sets.d.ts +3 -0
  94. package/dist/src/commands/rule-sets.js +272 -0
  95. package/dist/src/commands/rule-sets.js.map +1 -0
  96. package/dist/src/commands/scripts.d.ts +20 -0
  97. package/dist/src/commands/scripts.js +554 -0
  98. package/dist/src/commands/scripts.js.map +1 -0
  99. package/dist/src/commands/secrets.d.ts +2 -0
  100. package/dist/src/commands/secrets.js +108 -0
  101. package/dist/src/commands/secrets.js.map +1 -0
  102. package/dist/src/commands/sessions.d.ts +2 -0
  103. package/dist/src/commands/sessions.js +75 -0
  104. package/dist/src/commands/sessions.js.map +1 -0
  105. package/dist/src/commands/skill.d.ts +2 -0
  106. package/dist/src/commands/skill.js +29 -0
  107. package/dist/src/commands/skill.js.map +1 -0
  108. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  109. package/dist/src/commands/sync-app-settings.js +330 -0
  110. package/dist/src/commands/sync-app-settings.js.map +1 -0
  111. package/dist/src/commands/sync.d.ts +2323 -0
  112. package/dist/src/commands/sync.js +15065 -843
  113. package/dist/src/commands/sync.js.map +1 -1
  114. package/dist/src/commands/tokens.d.ts +2 -0
  115. package/dist/src/commands/tokens.js +130 -21
  116. package/dist/src/commands/tokens.js.map +1 -1
  117. package/dist/src/commands/users.d.ts +2 -0
  118. package/dist/src/commands/users.js +532 -23
  119. package/dist/src/commands/users.js.map +1 -1
  120. package/dist/src/commands/vars.d.ts +8 -0
  121. package/dist/src/commands/vars.js +96 -0
  122. package/dist/src/commands/vars.js.map +1 -0
  123. package/dist/src/commands/waitlist.d.ts +2 -0
  124. package/dist/src/commands/waitlist.js +10 -10
  125. package/dist/src/commands/waitlist.js.map +1 -1
  126. package/dist/src/commands/webhooks.d.ts +2 -0
  127. package/dist/src/commands/webhooks.js +562 -0
  128. package/dist/src/commands/webhooks.js.map +1 -0
  129. package/dist/src/commands/workflows.d.ts +116 -0
  130. package/dist/src/commands/workflows.js +1583 -681
  131. package/dist/src/commands/workflows.js.map +1 -1
  132. package/dist/src/lib/access-rule-display.d.ts +21 -0
  133. package/dist/src/lib/access-rule-display.js +34 -0
  134. package/dist/src/lib/access-rule-display.js.map +1 -0
  135. package/dist/src/lib/api-client.d.ts +1936 -0
  136. package/dist/src/lib/api-client.js +1826 -138
  137. package/dist/src/lib/api-client.js.map +1 -1
  138. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  139. package/dist/src/lib/app-settings-descriptor.js +575 -0
  140. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  141. package/dist/src/lib/auth-flow.d.ts +8 -0
  142. package/dist/src/lib/batch.d.ts +26 -0
  143. package/dist/src/lib/batch.js +32 -0
  144. package/dist/src/lib/batch.js.map +1 -0
  145. package/dist/src/lib/block-layout.d.ts +160 -0
  146. package/dist/src/lib/block-layout.js +451 -0
  147. package/dist/src/lib/block-layout.js.map +1 -0
  148. package/dist/src/lib/canonical-json.d.ts +12 -0
  149. package/dist/src/lib/canonical-json.js +35 -0
  150. package/dist/src/lib/canonical-json.js.map +1 -0
  151. package/dist/src/lib/channel.d.ts +30 -0
  152. package/dist/src/lib/channel.js +68 -0
  153. package/dist/src/lib/channel.js.map +1 -0
  154. package/dist/src/lib/cli-manifest.d.ts +68 -0
  155. package/dist/src/lib/cli-manifest.js +71 -0
  156. package/dist/src/lib/cli-manifest.js.map +1 -0
  157. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  158. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  159. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  160. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  161. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  162. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  163. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  164. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  165. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  166. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  167. package/dist/src/lib/config-object-descriptor.js +658 -0
  168. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  169. package/dist/src/lib/config-payload.d.ts +85 -0
  170. package/dist/src/lib/config-payload.js +116 -0
  171. package/dist/src/lib/config-payload.js.map +1 -0
  172. package/dist/src/lib/config-surface.d.ts +130 -0
  173. package/dist/src/lib/config-surface.js +300 -0
  174. package/dist/src/lib/config-surface.js.map +1 -0
  175. package/dist/src/lib/config-toml.d.ts +10 -0
  176. package/dist/src/lib/config-toml.js +42 -0
  177. package/dist/src/lib/config-toml.js.map +1 -0
  178. package/dist/src/lib/config.d.ts +53 -0
  179. package/dist/src/lib/config.js +92 -53
  180. package/dist/src/lib/config.js.map +1 -1
  181. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  182. package/dist/src/lib/confirm-prompt.js +110 -0
  183. package/dist/src/lib/confirm-prompt.js.map +1 -0
  184. package/dist/src/lib/constants.d.ts +11 -0
  185. package/dist/src/lib/constants.js +12 -0
  186. package/dist/src/lib/constants.js.map +1 -0
  187. package/dist/src/lib/crash-handlers.d.ts +20 -0
  188. package/dist/src/lib/crash-handlers.js +49 -0
  189. package/dist/src/lib/crash-handlers.js.map +1 -0
  190. package/dist/src/lib/credentials-store.d.ts +89 -0
  191. package/dist/src/lib/credentials-store.js +330 -0
  192. package/dist/src/lib/credentials-store.js.map +1 -0
  193. package/dist/src/lib/csv.d.ts +47 -0
  194. package/dist/src/lib/csv.js +172 -0
  195. package/dist/src/lib/csv.js.map +1 -0
  196. package/dist/src/lib/data-input.d.ts +23 -0
  197. package/dist/src/lib/data-input.js +50 -0
  198. package/dist/src/lib/data-input.js.map +1 -0
  199. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  200. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  201. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  202. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  203. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  204. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  205. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  206. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  207. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  208. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  209. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  210. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  211. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  212. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  213. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  215. package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
  216. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  217. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  218. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  219. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  220. package/dist/src/lib/env-resolver-core.d.ts +147 -0
  221. package/dist/src/lib/env-resolver-core.js +265 -0
  222. package/dist/src/lib/env-resolver-core.js.map +1 -0
  223. package/dist/src/lib/env-resolver.d.ts +84 -0
  224. package/dist/src/lib/env-resolver.js +133 -0
  225. package/dist/src/lib/env-resolver.js.map +1 -0
  226. package/dist/src/lib/fetch.d.ts +5 -0
  227. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  228. package/dist/src/lib/generated-allowlist.js +277 -0
  229. package/dist/src/lib/generated-allowlist.js.map +1 -0
  230. package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
  231. package/dist/src/lib/generated-config-surfaces.js +4058 -0
  232. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  233. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  234. package/dist/src/lib/generated-template-lint.js +624 -0
  235. package/dist/src/lib/generated-template-lint.js.map +1 -0
  236. package/dist/src/lib/init-adopt.d.ts +16 -0
  237. package/dist/src/lib/init-adopt.js +34 -0
  238. package/dist/src/lib/init-adopt.js.map +1 -0
  239. package/dist/src/lib/init-assets.d.ts +39 -0
  240. package/dist/src/lib/init-assets.js +97 -0
  241. package/dist/src/lib/init-assets.js.map +1 -0
  242. package/dist/src/lib/init-config.d.ts +98 -0
  243. package/dist/src/lib/init-config.js +186 -0
  244. package/dist/src/lib/init-config.js.map +1 -0
  245. package/dist/src/lib/init-ios-links.d.ts +50 -0
  246. package/dist/src/lib/init-ios-links.js +153 -0
  247. package/dist/src/lib/init-ios-links.js.map +1 -0
  248. package/dist/src/lib/init-plan.d.ts +80 -0
  249. package/dist/src/lib/init-plan.js +95 -0
  250. package/dist/src/lib/init-plan.js.map +1 -0
  251. package/dist/src/lib/init-production-env.d.ts +48 -0
  252. package/dist/src/lib/init-production-env.js +59 -0
  253. package/dist/src/lib/init-production-env.js.map +1 -0
  254. package/dist/src/lib/init-schema.d.ts +74 -0
  255. package/dist/src/lib/init-schema.js +358 -0
  256. package/dist/src/lib/init-schema.js.map +1 -0
  257. package/dist/src/lib/init-xcode.d.ts +33 -0
  258. package/dist/src/lib/init-xcode.js +114 -0
  259. package/dist/src/lib/init-xcode.js.map +1 -0
  260. package/dist/src/lib/integration-request-config.d.ts +30 -0
  261. package/dist/src/lib/integration-request-config.js +145 -0
  262. package/dist/src/lib/integration-request-config.js.map +1 -0
  263. package/dist/src/lib/local-state.d.ts +55 -0
  264. package/dist/src/lib/local-state.js +167 -0
  265. package/dist/src/lib/local-state.js.map +1 -0
  266. package/dist/src/lib/log-inspection.d.ts +568 -0
  267. package/dist/src/lib/log-inspection.js +639 -0
  268. package/dist/src/lib/log-inspection.js.map +1 -0
  269. package/dist/src/lib/migration-nag.d.ts +49 -0
  270. package/dist/src/lib/migration-nag.js +163 -0
  271. package/dist/src/lib/migration-nag.js.map +1 -0
  272. package/dist/src/lib/object-status-filter.d.ts +22 -0
  273. package/dist/src/lib/object-status-filter.js +45 -0
  274. package/dist/src/lib/object-status-filter.js.map +1 -0
  275. package/dist/src/lib/output.d.ts +109 -0
  276. package/dist/src/lib/output.js +191 -8
  277. package/dist/src/lib/output.js.map +1 -1
  278. package/dist/src/lib/package-manager.d.ts +140 -0
  279. package/dist/src/lib/package-manager.js +305 -0
  280. package/dist/src/lib/package-manager.js.map +1 -0
  281. package/dist/src/lib/paginate.d.ts +83 -0
  282. package/dist/src/lib/paginate.js +95 -0
  283. package/dist/src/lib/paginate.js.map +1 -0
  284. package/dist/src/lib/platform-owned.d.ts +63 -0
  285. package/dist/src/lib/platform-owned.js +85 -0
  286. package/dist/src/lib/platform-owned.js.map +1 -0
  287. package/dist/src/lib/project-config.d.ts +97 -0
  288. package/dist/src/lib/project-config.js +217 -0
  289. package/dist/src/lib/project-config.js.map +1 -0
  290. package/dist/src/lib/query-operators.d.ts +43 -0
  291. package/dist/src/lib/query-operators.js +80 -0
  292. package/dist/src/lib/query-operators.js.map +1 -0
  293. package/dist/src/lib/record-filter.d.ts +18 -0
  294. package/dist/src/lib/record-filter.js +55 -0
  295. package/dist/src/lib/record-filter.js.map +1 -0
  296. package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
  297. package/dist/src/lib/refresh-admin-credentials.js +103 -0
  298. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  299. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  300. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  301. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  302. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  303. package/dist/src/lib/resolve-init-server.js +77 -0
  304. package/dist/src/lib/resolve-init-server.js.map +1 -0
  305. package/dist/src/lib/resolve-platform.d.ts +74 -0
  306. package/dist/src/lib/resolve-platform.js +105 -0
  307. package/dist/src/lib/resolve-platform.js.map +1 -0
  308. package/dist/src/lib/run-status.d.ts +19 -0
  309. package/dist/src/lib/run-status.generated.d.ts +39 -0
  310. package/dist/src/lib/run-status.generated.js +66 -0
  311. package/dist/src/lib/run-status.generated.js.map +1 -0
  312. package/dist/src/lib/run-status.js +19 -0
  313. package/dist/src/lib/run-status.js.map +1 -0
  314. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  315. package/dist/src/lib/server-text-normalization.js +90 -0
  316. package/dist/src/lib/server-text-normalization.js.map +1 -0
  317. package/dist/src/lib/server-url.d.ts +22 -0
  318. package/dist/src/lib/server-url.js +33 -0
  319. package/dist/src/lib/server-url.js.map +1 -0
  320. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  321. package/dist/src/lib/signing-secret-status.js +116 -0
  322. package/dist/src/lib/signing-secret-status.js.map +1 -0
  323. package/dist/src/lib/skill-installer.d.ts +25 -0
  324. package/dist/src/lib/skill-installer.js +266 -0
  325. package/dist/src/lib/skill-installer.js.map +1 -0
  326. package/dist/src/lib/snapshots.d.ts +99 -0
  327. package/dist/src/lib/snapshots.js +357 -0
  328. package/dist/src/lib/snapshots.js.map +1 -0
  329. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  330. package/dist/src/lib/swift-codegen/dbGenerator.js +914 -0
  331. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  332. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  333. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  334. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  335. package/dist/src/lib/swift-codegen/generator.d.ts +94 -0
  336. package/dist/src/lib/swift-codegen/generator.js +440 -0
  337. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  338. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
  339. package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
  340. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  341. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  342. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  343. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  344. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  345. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  346. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  347. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  348. package/dist/src/lib/sync-dir-selector.js +30 -0
  349. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  350. package/dist/src/lib/sync-paths.d.ts +111 -0
  351. package/dist/src/lib/sync-paths.js +198 -0
  352. package/dist/src/lib/sync-paths.js.map +1 -0
  353. package/dist/src/lib/sync-resource-types.d.ts +544 -0
  354. package/dist/src/lib/sync-resource-types.js +975 -0
  355. package/dist/src/lib/sync-resource-types.js.map +1 -0
  356. package/dist/src/lib/sync-selectors.d.ts +95 -0
  357. package/dist/src/lib/sync-selectors.js +228 -0
  358. package/dist/src/lib/sync-selectors.js.map +1 -0
  359. package/dist/src/lib/template.d.ts +170 -0
  360. package/dist/src/lib/template.js +484 -68
  361. package/dist/src/lib/template.js.map +1 -1
  362. package/dist/src/lib/test-case-keys.d.ts +29 -0
  363. package/dist/src/lib/test-case-keys.js +55 -0
  364. package/dist/src/lib/test-case-keys.js.map +1 -0
  365. package/dist/src/lib/test-case-variables.d.ts +15 -0
  366. package/dist/src/lib/test-case-variables.js +29 -0
  367. package/dist/src/lib/test-case-variables.js.map +1 -0
  368. package/dist/src/lib/token-inject.d.ts +56 -0
  369. package/dist/src/lib/token-inject.js +204 -0
  370. package/dist/src/lib/token-inject.js.map +1 -0
  371. package/dist/src/lib/toml-database-config.d.ts +123 -0
  372. package/dist/src/lib/toml-database-config.js +527 -0
  373. package/dist/src/lib/toml-database-config.js.map +1 -0
  374. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  375. package/dist/src/lib/toml-metadata-config.js +476 -0
  376. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  377. package/dist/src/lib/toml-native-form.d.ts +46 -0
  378. package/dist/src/lib/toml-native-form.js +78 -0
  379. package/dist/src/lib/toml-native-form.js.map +1 -0
  380. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  381. package/dist/src/lib/toml-params-validator.js +298 -0
  382. package/dist/src/lib/toml-params-validator.js.map +1 -0
  383. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  384. package/dist/src/lib/toml-scalar-edit.js +283 -0
  385. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  386. package/dist/src/lib/user-selector.d.ts +24 -0
  387. package/dist/src/lib/user-selector.js +33 -0
  388. package/dist/src/lib/user-selector.js.map +1 -0
  389. package/dist/src/lib/version-check.d.ts +35 -0
  390. package/dist/src/lib/version-check.js +241 -0
  391. package/dist/src/lib/version-check.js.map +1 -0
  392. package/dist/src/lib/watch.d.ts +121 -0
  393. package/dist/src/lib/watch.js +169 -0
  394. package/dist/src/lib/watch.js.map +1 -0
  395. package/dist/src/lib/workflow-apply.d.ts +110 -0
  396. package/dist/src/lib/workflow-apply.js +164 -0
  397. package/dist/src/lib/workflow-apply.js.map +1 -0
  398. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  399. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  400. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  401. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  402. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  403. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  404. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  405. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  406. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  407. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  408. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  409. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  410. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  411. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  412. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  413. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  414. package/dist/src/lib/workflow-config-apply.js +137 -0
  415. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  416. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  417. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  418. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  419. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  420. package/dist/src/lib/workflow-defaults.js +41 -0
  421. package/dist/src/lib/workflow-defaults.js.map +1 -0
  422. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  423. package/dist/src/lib/workflow-fragments.js +342 -0
  424. package/dist/src/lib/workflow-fragments.js.map +1 -0
  425. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  426. package/dist/src/lib/workflow-include-preserve.js +286 -0
  427. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  428. package/dist/src/lib/workflow-payload.d.ts +98 -0
  429. package/dist/src/lib/workflow-payload.js +178 -0
  430. package/dist/src/lib/workflow-payload.js.map +1 -0
  431. package/dist/src/lib/workflow-toml-validator.d.ts +202 -0
  432. package/dist/src/lib/workflow-toml-validator.js +757 -0
  433. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  434. package/dist/src/types/index.d.ts +581 -0
  435. package/dist/src/validators.d.ts +65 -0
  436. package/dist/src/validators.js +64 -0
  437. package/dist/src/validators.js.map +1 -0
  438. package/package.json +32 -8
@@ -0,0 +1,440 @@
1
+ /**
2
+ * `workflows codegen --lang swift` orchestrator (issue #1547, Phases 2-3).
3
+ *
4
+ * The Swift counterpart of `workflow-codegen/generator.ts`. Reads the SAME
5
+ * synced workflow TOMLs (`.primitive/sync/<env>/<appId>/workflows/*.toml`) and
6
+ * emits ONE `<key>.generated.swift` per workflow. Each file carries the
7
+ * workflow's `<Key>Input`/`<Key>Output` Swift `Codable` types (Phase 1's
8
+ * `renderSwiftRootType`) plus — Phase 3 — a typed invoker factory: a free
9
+ * function `func <key>(_ client:) -> <Key>Workflow` returning a struct with
10
+ * `async throws` `runSync`/`start`/`getStatus` methods (Fork 2 = A). The
11
+ * factory binds `<Key>Input`/`<Key>Output` over the additive generic overloads
12
+ * on `WorkflowsAPI` (the only published SDK surface).
13
+ *
14
+ * Design decisions realized (maintainer decision, issue #1547):
15
+ * - Schemas are interpreted through the SAME drift-guarded descriptor the TS
16
+ * emitter reads (Fork 1 = A), via `renderSwiftRootType`, so a generated
17
+ * Swift type can never promise a shape the runtime validator rejects.
18
+ * - Operation metadata (key, `syncCallable`, required-vs-optional `input`) is
19
+ * read from the SHARED `describeWorkflowInvoker` IR — the SAME source the TS
20
+ * invoker uses. The Swift renderer reconstructs none of it (#1547 binding 5),
21
+ * so the two clients can never disagree on which operations a workflow
22
+ * exposes or whether its input is required.
23
+ * - `runSync` is emitted ONLY for `syncCallable: true` workflows (the server
24
+ * rejects run-sync otherwise), matching the TS factory. `start`,
25
+ * `getStatus`, `terminate`, and the workflow-scoped
26
+ * `cronTriggers.{create,update}` are emitted for every non-reserved
27
+ * workflow; `define` only for an apply-mode one. That is the SAME per-member
28
+ * gating the TS factory uses (#2806) — the two factories expose one surface,
29
+ * decided by the shared IR, not per language.
30
+ * - Where the Swift client is less typed than the JS one, the OPERATION still
31
+ * reaches parity while the payload stays as typed as the client is: a cron
32
+ * `rootInput` over an object-shaped schema is an open `JSONValue` (Swift has
33
+ * no `Partial<>` for the fields an `inputMapping` may supply), and
34
+ * `define`'s handler sees the client's untyped `WorkflowApplyContext`.
35
+ * - Disk lifecycle (write / `--check` / orphan cleanup) delegates to the shared
36
+ * `writeOrCheckGeneratedFiles`, scoped by an ownership BANNER (the "banner
37
+ * namespacing" edge case) so a shared Swift output dir stays safe.
38
+ */
39
+ import * as path from "path";
40
+ import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
41
+ import { fingerprintToml } from "../db-codegen/dbFingerprint.js";
42
+ import { describeWorkflowInvoker } from "../workflow-codegen/invokerIR.js";
43
+ import { renderSwiftRootType, SwiftCodegenError } from "./schemaToSwift.js";
44
+ import { structTypeName, workflowSwiftFactoryName } from "./swiftNaming.js";
45
+ // Foreign banner guarded against when a workflow run shares an output dir with
46
+ // the database Swift generator (issue #1653, class 3b). Function-time use only,
47
+ // so the generator.ts ↔ dbGenerator.ts import cycle resolves safely.
48
+ import { DB_SWIFT_BANNER_PREFIXES } from "./dbGenerator.js";
49
+ import { assertNoRetainedSiblingCollision, assertNoForeignGeneratorSymbolCollision, } from "./siblingSymbols.js";
50
+ /** Suffix identifying a generated Swift file. */
51
+ export const GENERATED_SWIFT_FILE_SUFFIX = ".generated.swift";
52
+ /**
53
+ * Banner prefix stamped at the top of every CLI-emitted `.generated.swift`
54
+ * file. Deliberately DISTINCT from the Swift model codegen's
55
+ * `// Generated by swift-bao-codegen` header so that:
56
+ * - the model codegen's stale-sweep (which only removes files starting with
57
+ * its own header) never deletes these; and
58
+ * - this generator's cleanup (scoped to this prefix) never deletes a
59
+ * model-codegen file that shares the `.generated.swift` suffix.
60
+ * The prefix is common to every workflow file, so it is a safe ownership key.
61
+ */
62
+ export const SWIFT_BANNER_PREFIX = "// AUTO-GENERATED FROM workflows/";
63
+ /** The Swift module the generated types + invoker import (`JSONValue`,
64
+ * `JsBaoClient`, the `WorkflowsAPI` generics, and the typed result structs all
65
+ * live there). */
66
+ const CLIENT_MODULE = "JsBaoClient";
67
+ const INDENT = " ";
68
+ /** PascalCase, sanitized, non-keyword base type name for a workflow key.
69
+ * `create-checkout-session` → `CreateCheckoutSession`; `123-job` → `_123Job`
70
+ * (digit-leading prefixed, parity with the TS `ensureValidIdentifierStart`). */
71
+ export function workflowSwiftTypeBaseName(key) {
72
+ return structTypeName(key);
73
+ }
74
+ /**
75
+ * Parse a single workflow TOML into the data the Swift emitter needs. The
76
+ * operation metadata comes from the SHARED `describeWorkflowInvoker` IR (the
77
+ * SAME source the TS invoker uses); only the Swift-specific naming +
78
+ * type-declaration rendering happens here. Throws on malformed schema JSON
79
+ * (fail-and-exit). Returns null for a reserved workflow.
80
+ */
81
+ function parseWorkflow(input) {
82
+ const ir = describeWorkflowInvoker({
83
+ fileStem: input.fileStem,
84
+ tomlContent: input.tomlContent,
85
+ });
86
+ if (!ir)
87
+ return null; // reserved workflow
88
+ const base = workflowSwiftTypeBaseName(ir.key);
89
+ const inputTypeName = `${base}Input`;
90
+ const outputTypeName = `${base}Output`;
91
+ const sourceFile = `workflows/${ir.key}.toml`;
92
+ return {
93
+ key: ir.key,
94
+ base,
95
+ inputTypeName,
96
+ outputTypeName,
97
+ syncCallable: ir.syncCallable,
98
+ inputRequired: ir.inputRequired,
99
+ requiresClientApply: ir.requiresClientApply,
100
+ inputIsObjectShaped: ir.inputIsObjectShaped,
101
+ inputDecl: renderSwiftRootType(inputTypeName, ir.inputSchema, { sourceFile }),
102
+ outputDecl: renderSwiftRootType(outputTypeName, ir.outputSchema, {
103
+ sourceFile,
104
+ }),
105
+ };
106
+ }
107
+ /** A Swift string literal for the workflow key (runtime call passes it verbatim). */
108
+ function swiftKeyLiteral(key) {
109
+ const escaped = key
110
+ .replace(/\\/g, "\\\\")
111
+ .replace(/"/g, '\\"')
112
+ .replace(/\n/g, "\\n")
113
+ .replace(/\r/g, "\\r")
114
+ .replace(/\t/g, "\\t");
115
+ return `"${escaped}"`;
116
+ }
117
+ /**
118
+ * Render the workflow-scoped cron-trigger helpers (#2806), the Swift half of
119
+ * the JS factory's `cronTriggers.{create,update}`. They live in a NESTED
120
+ * `CronTriggers` struct reached through a `cronTriggers` property, so the call
121
+ * shape matches JS (`<key>(client).cronTriggers.create(...)`) and no extra
122
+ * top-level Swift symbol is declared.
123
+ *
124
+ * `workflowKey` is pinned into the params the helper builds and is not a
125
+ * caller-facing argument, so a trigger cannot be redirected at another
126
+ * workflow. Every other field of `CreateCronTriggerParams` /
127
+ * `UpdateCronTriggerParams` is passed through, defaulted exactly as the client
128
+ * struct defaults it — including `update`'s clearable `description`
129
+ * (`Updatable<String>`), which the client models and JS types as
130
+ * `string | null`.
131
+ *
132
+ * `rootInput` follows the SHARED IR's `inputIsObjectShaped` decision: an
133
+ * object-shaped input keeps the open `JSONValue` the client takes, because the
134
+ * JS factory types it `Partial<<Key>Input>` (an `inputMapping` may supply the
135
+ * rest) and Swift has no `Partial<>` to express that; anything else binds the
136
+ * full `<Key>Input` and is encoded here, matching the JS rule.
137
+ *
138
+ * `update`'s `rootInput` is TRI-STATE, because the JS param it mirrors is
139
+ * `rootInput?: I | null` — omitted leaves the stored value alone, a value
140
+ * replaces it, and JSON null CLEARS it. The open `JSONValue` branch already
141
+ * spells the clear `.null`; the bound branch would otherwise have no way to say
142
+ * it (a bound `<Key>Input?` reads `nil` as "omitted"), so it takes the client's
143
+ * own `Updatable<<Key>Input>` — the same wrapper `description` uses — and maps
144
+ * `.clear` to the `JSONValue.null` the wire wants.
145
+ */
146
+ function renderCronTriggers(wf) {
147
+ const keyLiteral = swiftKeyLiteral(wf.key);
148
+ const I = INDENT;
149
+ // Object-shaped → open value (JS's `Partial<>`); otherwise the bound type.
150
+ const rootInputParam = wf.inputIsObjectShaped
151
+ ? `rootInput: JSONValue? = nil`
152
+ : `rootInput: ${wf.inputTypeName}? = nil`;
153
+ const rootInputArg = wf.inputIsObjectShaped
154
+ ? `rootInput: rootInput,`
155
+ : `rootInput: try rootInput.map { try JSONValue(encoding: $0) },`;
156
+ // `update` only: the clearable form of the same parameter.
157
+ const updateRootInputParam = wf.inputIsObjectShaped
158
+ ? rootInputParam
159
+ : `rootInput: Updatable<${wf.inputTypeName}>? = nil`;
160
+ const updateRootInputDoc = wf.inputIsObjectShaped
161
+ ? [
162
+ `${I}${I}/// unchanged; \`description\` removes the stored value with \`.clear\``,
163
+ `${I}${I}/// and \`rootInput\` with \`.null\`.`,
164
+ ]
165
+ : [
166
+ `${I}${I}/// unchanged; \`description\` and \`rootInput\` both remove the stored`,
167
+ `${I}${I}/// value with \`.clear\`.`,
168
+ ];
169
+ // Lowering the tri-state to the client's `JSONValue?` needs a statement, so
170
+ // the bound branch hoists it into a local instead of inlining the map.
171
+ const updateRootInputPrelude = wf.inputIsObjectShaped
172
+ ? []
173
+ : [
174
+ `${I}${I}${I}let rootInputValue: JSONValue? = try rootInput.map {`,
175
+ `${I}${I}${I}${I}(change: Updatable<${wf.inputTypeName}>) throws -> JSONValue in`,
176
+ `${I}${I}${I}${I}switch change {`,
177
+ `${I}${I}${I}${I}case .clear: return .null`,
178
+ `${I}${I}${I}${I}case let .value(input): return try JSONValue(encoding: input)`,
179
+ `${I}${I}${I}${I}}`,
180
+ `${I}${I}${I}}`,
181
+ ];
182
+ const updateRootInputArg = wf.inputIsObjectShaped
183
+ ? `rootInput: rootInput,`
184
+ : `rootInput: rootInputValue,`;
185
+ // The prelude costs the body its implicit single-expression return.
186
+ const updateReturn = updateRootInputPrelude.length > 0 ? `return ` : ``;
187
+ return [
188
+ ``,
189
+ `${I}/// Cron triggers scoped to the \`${wf.key}\` workflow. The workflow key is`,
190
+ `${I}/// pinned by the helpers below, so a trigger cannot be redirected.`,
191
+ `${I}public var cronTriggers: CronTriggers {`,
192
+ `${I}${I}CronTriggers(client: client)`,
193
+ `${I}}`,
194
+ ``,
195
+ `${I}/// Typed cron-trigger management for the \`${wf.key}\` workflow.`,
196
+ `${I}public struct CronTriggers: Sendable {`,
197
+ `${I}${I}public let client: JsBaoClient`,
198
+ ``,
199
+ `${I}${I}public init(client: JsBaoClient) {`,
200
+ `${I}${I}${I}self.client = client`,
201
+ `${I}${I}}`,
202
+ ``,
203
+ `${I}${I}/// Create a cron trigger that fires this workflow.`,
204
+ `${I}${I}@discardableResult`,
205
+ `${I}${I}public func create(`,
206
+ `${I}${I}${I}triggerKey: String,`,
207
+ `${I}${I}${I}displayName: String,`,
208
+ `${I}${I}${I}cron: String,`,
209
+ `${I}${I}${I}timezone: String? = nil,`,
210
+ `${I}${I}${I}description: String? = nil,`,
211
+ `${I}${I}${I}overlapPolicy: CronOverlapPolicy? = nil,`,
212
+ `${I}${I}${I}${rootInputParam},`,
213
+ `${I}${I}${I}inputMapping: JSONValue? = nil`,
214
+ `${I}${I}) async throws -> CronTriggerInfo {`,
215
+ `${I}${I}${I}try await client.cronTriggers.create(`,
216
+ `${I}${I}${I}${I}params: CreateCronTriggerParams(`,
217
+ `${I}${I}${I}${I}${I}triggerKey: triggerKey,`,
218
+ `${I}${I}${I}${I}${I}displayName: displayName,`,
219
+ `${I}${I}${I}${I}${I}cron: cron,`,
220
+ `${I}${I}${I}${I}${I}workflowKey: ${keyLiteral},`,
221
+ `${I}${I}${I}${I}${I}timezone: timezone,`,
222
+ `${I}${I}${I}${I}${I}description: description,`,
223
+ `${I}${I}${I}${I}${I}overlapPolicy: overlapPolicy,`,
224
+ `${I}${I}${I}${I}${I}${rootInputArg}`,
225
+ `${I}${I}${I}${I}${I}inputMapping: inputMapping`,
226
+ `${I}${I}${I}${I})`,
227
+ `${I}${I}${I})`,
228
+ `${I}${I}}`,
229
+ ``,
230
+ `${I}${I}/// Update a cron trigger that fires this workflow. Omitted fields stay`,
231
+ ...updateRootInputDoc,
232
+ `${I}${I}@discardableResult`,
233
+ `${I}${I}public func update(`,
234
+ `${I}${I}${I}triggerId: String,`,
235
+ `${I}${I}${I}displayName: String? = nil,`,
236
+ `${I}${I}${I}description: Updatable<String>? = nil,`,
237
+ `${I}${I}${I}cron: String? = nil,`,
238
+ `${I}${I}${I}timezone: String? = nil,`,
239
+ `${I}${I}${I}overlapPolicy: CronOverlapPolicy? = nil,`,
240
+ `${I}${I}${I}${updateRootInputParam},`,
241
+ `${I}${I}${I}inputMapping: JSONValue? = nil`,
242
+ `${I}${I}) async throws -> CronTriggerInfo {`,
243
+ ...updateRootInputPrelude,
244
+ `${I}${I}${I}${updateReturn}try await client.cronTriggers.update(`,
245
+ `${I}${I}${I}${I}triggerId: triggerId,`,
246
+ `${I}${I}${I}${I}params: UpdateCronTriggerParams(`,
247
+ `${I}${I}${I}${I}${I}displayName: displayName,`,
248
+ `${I}${I}${I}${I}${I}description: description,`,
249
+ `${I}${I}${I}${I}${I}cron: cron,`,
250
+ `${I}${I}${I}${I}${I}timezone: timezone,`,
251
+ `${I}${I}${I}${I}${I}workflowKey: ${keyLiteral},`,
252
+ `${I}${I}${I}${I}${I}overlapPolicy: overlapPolicy,`,
253
+ `${I}${I}${I}${I}${I}${updateRootInputArg}`,
254
+ `${I}${I}${I}${I}${I}inputMapping: inputMapping`,
255
+ `${I}${I}${I}${I})`,
256
+ `${I}${I}${I})`,
257
+ `${I}${I}}`,
258
+ `${I}}`,
259
+ ];
260
+ }
261
+ /**
262
+ * Render the typed Swift invoker for one workflow (Fork 2 = A): a free function
263
+ * returning a small struct with `async throws` methods, mirroring the JS
264
+ * factory. `runSync` is emitted only when the shared IR says `syncCallable`;
265
+ * `start` + `getStatus` always. The `input` argument is required or optional
266
+ * per the shared IR's `inputRequired` (the SAME decision the TS factory makes).
267
+ *
268
+ * Each method delegates to the additive generic overloads on `WorkflowsAPI`
269
+ * (`runSync<Input,Output>` / `start<Input>` / `getStatus<Output>`), binding
270
+ * `<Key>Input`/`<Key>Output`. Those overloads are the only published SDK
271
+ * surface; this generated struct is app-target code.
272
+ */
273
+ function renderInvoker(wf) {
274
+ const structName = `${wf.base}Workflow`;
275
+ const factoryName = workflowSwiftFactoryName(wf.key);
276
+ const keyLiteral = swiftKeyLiteral(wf.key);
277
+ // Required `input` → `input: <Key>Input`; optional → `input: <Key>Input? = nil`.
278
+ // The generic overloads take `Input?`, so a required value auto-promotes and
279
+ // an omitted optional sends the server `{}` (parity with the JS `input ?? {}`).
280
+ const inputParam = wf.inputRequired
281
+ ? `input: ${wf.inputTypeName}`
282
+ : `input: ${wf.inputTypeName}? = nil`;
283
+ const lines = [];
284
+ lines.push(`/// Typed invoker for the \`${wf.key}\` workflow. Bind its \`${wf.inputTypeName}\` /`, `/// \`${wf.outputTypeName}\` over the generic \`WorkflowsAPI\` overloads. Obtain one`, `/// with \`${factoryName}(client)\`.`, `public struct ${structName}: Sendable {`, `${INDENT}public let client: JsBaoClient`, ``, `${INDENT}public init(client: JsBaoClient) {`, `${INDENT}${INDENT}self.client = client`, `${INDENT}}`);
285
+ if (wf.syncCallable) {
286
+ lines.push(``, `${INDENT}/// Run the workflow synchronously and wait for its terminal status.`, `${INDENT}/// Emitted only because \`${wf.key}\` is \`syncCallable\` (parity with JS).`, `${INDENT}public func runSync(`, `${INDENT}${INDENT}${inputParam},`, `${INDENT}${INDENT}runKey: String? = nil,`, `${INDENT}${INDENT}contextDocId: String? = nil,`, `${INDENT}${INDENT}meta: [String: Any]? = nil,`, `${INDENT}${INDENT}timeout: TimeInterval? = nil`, `${INDENT}) async throws -> RunSyncResult<${wf.outputTypeName}> {`, `${INDENT}${INDENT}try await client.workflows.runSync(`, `${INDENT}${INDENT}${INDENT}workflowKey: ${keyLiteral},`, `${INDENT}${INDENT}${INDENT}input: input,`, `${INDENT}${INDENT}${INDENT}runKey: runKey,`, `${INDENT}${INDENT}${INDENT}contextDocId: contextDocId,`, `${INDENT}${INDENT}${INDENT}meta: meta,`, `${INDENT}${INDENT}${INDENT}timeout: timeout`, `${INDENT}${INDENT})`, `${INDENT}}`);
287
+ }
288
+ lines.push(``, `${INDENT}/// Start the workflow asynchronously; returns the run handle.`, `${INDENT}@discardableResult`, `${INDENT}public func start(`, `${INDENT}${INDENT}${inputParam},`, `${INDENT}${INDENT}runKey: String? = nil,`, `${INDENT}${INDENT}contextDocId: String? = nil,`, `${INDENT}${INDENT}meta: [String: Any]? = nil,`, `${INDENT}${INDENT}forceRerun: Bool? = nil`, `${INDENT}) async throws -> StartWorkflowResult {`, `${INDENT}${INDENT}try await client.workflows.start(`, `${INDENT}${INDENT}${INDENT}workflowKey: ${keyLiteral},`, `${INDENT}${INDENT}${INDENT}input: input,`, `${INDENT}${INDENT}${INDENT}runKey: runKey,`, `${INDENT}${INDENT}${INDENT}contextDocId: contextDocId,`, `${INDENT}${INDENT}${INDENT}meta: meta,`, `${INDENT}${INDENT}${INDENT}forceRerun: forceRerun`, `${INDENT}${INDENT})`, `${INDENT}}`);
289
+ lines.push(``, `${INDENT}/// Fetch a run's status with a typed \`output\` bound to \`${wf.outputTypeName}\`.`, `${INDENT}public func getStatus(`, `${INDENT}${INDENT}runKey: String,`, `${INDENT}${INDENT}contextDocId: String? = nil`, `${INDENT}) async throws -> WorkflowStatus<${wf.outputTypeName}> {`, `${INDENT}${INDENT}try await client.workflows.getStatus(`, `${INDENT}${INDENT}${INDENT}workflowKey: ${keyLiteral},`, `${INDENT}${INDENT}${INDENT}runKey: runKey,`, `${INDENT}${INDENT}${INDENT}contextDocId: contextDocId`, `${INDENT}${INDENT})`, `${INDENT}}`);
290
+ // Typed termination (#2806), the Swift half of the JS factory's `terminate`.
291
+ // Emitted for EVERY non-reserved workflow — any run can be terminated — and
292
+ // bound to `<Key>Output`, since a terminated run can carry partial output
293
+ // (same rule as `getStatus`). `runKey` stays required and the key is pinned,
294
+ // so a caller cannot terminate another workflow's run.
295
+ lines.push(``, `${INDENT}/// Terminate a run; \`output\` is bound to \`${wf.outputTypeName}\` (a terminated`, `${INDENT}/// run can carry partial output).`, `${INDENT}@discardableResult`, `${INDENT}public func terminate(`, `${INDENT}${INDENT}runKey: String,`, `${INDENT}${INDENT}contextDocId: String? = nil`, `${INDENT}) async throws -> WorkflowStatus<${wf.outputTypeName}> {`, `${INDENT}${INDENT}try await client.workflows.terminate(`, `${INDENT}${INDENT}${INDENT}workflowKey: ${keyLiteral},`, `${INDENT}${INDENT}${INDENT}runKey: runKey,`, `${INDENT}${INDENT}${INDENT}contextDocId: contextDocId`, `${INDENT}${INDENT})`, `${INDENT}}`);
296
+ // Typed apply-handler registration (#2806), emitted ONLY for an apply-mode
297
+ // workflow (`requiresClientApply !== false` — the same shared-IR flag that
298
+ // gates the JS factory's `define`). The key is passed positionally, so there
299
+ // is nothing a caller could spread over it. Unlike JS, the handler's `output`
300
+ // is NOT bound to `<Key>Output`: the Swift client's `WorkflowApplyContext`
301
+ // carries an untyped `Any?` and no output generic to bind, so this member
302
+ // brings the OPERATION to parity while the payload stays as typed as the
303
+ // client itself is.
304
+ if (wf.requiresClientApply) {
305
+ lines.push(``, `${INDENT}/// Register this workflow's apply handler. Emitted only because`, `${INDENT}/// \`${wf.key}\` is apply-mode (parity with JS). The context's \`output\``, `${INDENT}/// is the client's untyped \`Any?\`.`, `${INDENT}public func define(onApply: @escaping WorkflowApplyHandler) {`, `${INDENT}${INDENT}client.workflows.define(${keyLiteral}, onApply: onApply)`, `${INDENT}}`);
306
+ }
307
+ lines.push(...renderCronTriggers(wf));
308
+ lines.push(`}`);
309
+ // The free-function factory (Fork 2 = A call shape: `<key>(client).runSync(...)`).
310
+ lines.push(``, `/// Typed invoker factory for the \`${wf.key}\` workflow.`, `public func ${factoryName}(_ client: JsBaoClient) -> ${structName} {`, `${INDENT}${structName}(client: client)`, `}`);
311
+ return lines.join("\n");
312
+ }
313
+ /**
314
+ * Render the full `<key>.generated.swift` content for a single workflow TOML.
315
+ * Returns null for a reserved (`__internal.*`) workflow. Pure — exported so
316
+ * tests can assert on the string directly.
317
+ */
318
+ export function renderWorkflowSwiftFile(input) {
319
+ const wf = parseWorkflow(input);
320
+ if (!wf)
321
+ return null;
322
+ const fingerprint = fingerprintToml(input.tomlContent);
323
+ const banner = [
324
+ `// AUTO-GENERATED FROM workflows/${wf.key}.toml — DO NOT EDIT.`,
325
+ "// Run `primitive workflows codegen --lang swift` to regenerate.",
326
+ `// fingerprint: ${fingerprint}`,
327
+ ].join("\n");
328
+ const imports = ["import Foundation", `import ${CLIENT_MODULE}`].join("\n");
329
+ const content = [banner, imports, wf.inputDecl, wf.outputDecl, renderInvoker(wf)].join("\n\n") + "\n";
330
+ // Every top-level Swift symbol this file declares: the `<Key>Input` /
331
+ // `<Key>Output` types, the `<Key>Workflow` invoker struct, and its
332
+ // free-function factory. Enumerating ALL of them (issue #1653, Codex
333
+ // refinement) lets the run-scoped registry catch a cross-workflow collision on
334
+ // any of them, not just Input/Output.
335
+ const symbols = [
336
+ wf.inputTypeName,
337
+ wf.outputTypeName,
338
+ `${wf.base}Workflow`,
339
+ workflowSwiftFactoryName(wf.key),
340
+ ];
341
+ return { key: wf.key, content, symbols };
342
+ }
343
+ /**
344
+ * Run Swift workflow codegen end-to-end. One `<key>.generated.swift` per
345
+ * workflow; delegates the disk lifecycle to the shared writer/checker with
346
+ * banner-scoped ownership so a shared Swift output dir stays safe.
347
+ */
348
+ export async function generateWorkflowSwiftTypes(options) {
349
+ const outAbs = path.resolve(options.outputDir);
350
+ // Run-scoped registry: emitted top-level Swift symbol → the workflow key that
351
+ // emitted it. Two DIFFERENT keys emitting the same symbol redeclare when all
352
+ // `.generated.swift` files compile into one module (issue #1653, class 1).
353
+ const symbolOwner = new Map();
354
+ const filesToWrite = new Map();
355
+ for (const input of options.inputs) {
356
+ const rendered = renderWorkflowSwiftFile(input);
357
+ if (!rendered)
358
+ continue; // reserved workflow — no file, no symbols
359
+ for (const symbol of rendered.symbols) {
360
+ const prior = symbolOwner.get(symbol);
361
+ if (prior !== undefined && prior !== rendered.key) {
362
+ throw new SwiftCodegenError(`swift workflow codegen: type-name collision — workflow keys ` +
363
+ `"${prior}" and "${rendered.key}" both produce Swift type ` +
364
+ `"${symbol}", which redeclare when all .generated.swift files ` +
365
+ `compile into one module. Rename one workflow key so the two differ ` +
366
+ `after Swift PascalCase normalization.`, { sourceFile: `workflows/${rendered.key}.toml` });
367
+ }
368
+ symbolOwner.set(symbol, rendered.key);
369
+ }
370
+ const filePath = path.join(outAbs, `${rendered.key}${GENERATED_SWIFT_FILE_SUFFIX}`);
371
+ filesToWrite.set(filePath, rendered.content);
372
+ }
373
+ // Filtered-run sibling collision (issue #1653, class 1 for `--single` runs).
374
+ // A `singleWorkflow` run renders only the selected key; its retained sibling
375
+ // `.generated.swift` files stay on disk but never enter `symbolOwner` above,
376
+ // so a symbol this run emits could still redeclare against a sibling once
377
+ // every file compiles into one module. The foreign-banner write guard does NOT
378
+ // cover this (siblings carry the SAME banner and a different filename, so there
379
+ // is no path or banner collision). Compare against the retained siblings' own
380
+ // declared symbols — no persistent manifest (sponsor decision #1).
381
+ if (options.singleWorkflow === true) {
382
+ await assertNoRetainedSiblingCollision({
383
+ outputDir: outAbs,
384
+ ownershipBanner: SWIFT_BANNER_PREFIX,
385
+ suffix: GENERATED_SWIFT_FILE_SUFFIX,
386
+ emitted: symbolOwner,
387
+ ownPaths: filesToWrite.keys(),
388
+ makeError: ({ symbol, owner, siblingStem }) => new SwiftCodegenError(`swift workflow codegen: type-name collision with a retained sibling — ` +
389
+ `workflow key "${owner}" (this run) and the existing ` +
390
+ `"${siblingStem}${GENERATED_SWIFT_FILE_SUFFIX}" both declare Swift ` +
391
+ `symbol "${symbol}", which redeclares when all .generated.swift files ` +
392
+ `compile into one module. A filtered (single-workflow) run does not ` +
393
+ `regenerate siblings, so both files coexist. Rename one workflow key, ` +
394
+ `or regenerate the whole output directory.`, { sourceFile: `workflows/${owner}.toml` }),
395
+ });
396
+ }
397
+ // Cross-generator namespace collision (issue #1857), the mirror of the check
398
+ // in the DB generator. A workflow's top-level symbol (`<Key>Input`, etc.) can
399
+ // match the namespace enum name a DATABASE-generated file already declares in
400
+ // a shared output dir — e.g. workflow `foo` emits a top-level struct `FooInput`
401
+ // while db type `foo-input` emits `public enum FooInput`. Their filenames
402
+ // differ, so the foreign-banner WRITE guard below (path-only) never trips, and
403
+ // the retained-sibling guard above only scans workflow-owned files. This scan
404
+ // reads the DB-owned siblings' declared top-level symbols and throws if any of
405
+ // this run's emitted symbols collides. It runs on every workflow run (not just
406
+ // filtered), because a full workflow run does not regenerate DB files — they
407
+ // coexist regardless of ordering.
408
+ await assertNoForeignGeneratorSymbolCollision({
409
+ outputDir: outAbs,
410
+ foreignBanner: DB_SWIFT_BANNER_PREFIXES,
411
+ suffix: GENERATED_SWIFT_FILE_SUFFIX,
412
+ emitted: symbolOwner,
413
+ makeError: ({ symbol, owner, siblingStem }) => new SwiftCodegenError(`swift workflow codegen: type-name collision with a database-generated ` +
414
+ `file — workflow key "${owner}" emits Swift type "${symbol}", but the ` +
415
+ `existing "${siblingStem}${GENERATED_SWIFT_FILE_SUFFIX}" (owned by the ` +
416
+ `database Swift generator) already declares a top-level "${symbol}" in ` +
417
+ `the same output directory, which redeclares when all .generated.swift ` +
418
+ `files compile into one module. Rename the workflow or the ` +
419
+ `"${siblingStem}" database type so the two differ after Swift ` +
420
+ `normalization, or give one generator a separate --output directory.`, { sourceFile: `workflows/${owner}.toml` }),
421
+ });
422
+ return await writeOrCheckGeneratedFiles({
423
+ outputDir: outAbs,
424
+ filesToWrite,
425
+ check: options.check,
426
+ fullOwnership: options.singleWorkflow !== true,
427
+ generatedSuffix: GENERATED_SWIFT_FILE_SUFFIX,
428
+ ownershipBanner: SWIFT_BANNER_PREFIX,
429
+ // Class 3b: never clobber a file owned by the database Swift generator —
430
+ // including one it stamped before the #2760 banner rename.
431
+ foreignOwnershipBanners: DB_SWIFT_BANNER_PREFIXES,
432
+ onForeignBannerCollision: ({ filePath, foreignBanner }) => new SwiftCodegenError(`swift codegen: output collision — this run would overwrite ` +
433
+ `"${path.basename(filePath)}" in the shared output directory, which ` +
434
+ `is already owned by a different generator (banner ` +
435
+ `"${foreignBanner.trim()}"). A workflow key and a database type with ` +
436
+ `the same name cannot share an output directory; give one generator a ` +
437
+ `separate --output directory.`),
438
+ });
439
+ }
440
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/swift-codegen/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * JSON-Schema → Swift `Codable` converter for `swift-codegen` (issue #1547,
3
+ * Phase 1). The Swift counterpart of `workflow-codegen/schemaToTs.ts`.
4
+ *
5
+ * Both emitters read the SAME drift-guarded interpretation of the JSON-Schema
6
+ * subset the workflow platform supports — the vendored `SchemaDescriptor`
7
+ * (`workflow-codegen/generated-schema-descriptor.ts`, a byte copy of the server
8
+ * validator). Only the emitted syntax differs, so a generated Swift type can
9
+ * never promise a shape the runtime validator rejects. See the design and
10
+ * maintainer decision on issue #1547.
11
+ *
12
+ * Where Swift diverges from TypeScript:
13
+ *
14
+ * - **Named types, not anonymous.** TS renders nested object/enum/`oneOf`
15
+ * types inline; Swift `Codable` needs a NAMED `struct`/`enum` for each, so
16
+ * this emitter declares nested types inside their enclosing type.
17
+ * - **Scalars** (Fork 4, maintainer-confirmed): `string`→`String`,
18
+ * `number`→`Double`, `integer`→`Int` (ergonomic divergence from TS
19
+ * `number`), `boolean`→`Bool`.
20
+ * - **Un-descended nodes** (`$ref`, `allOf`, `format`, tuple `items`,
21
+ * `patternProperties`, numeric constraints, multi-scalar non-null unions,
22
+ * mixed-type enums, open-object extra values) → `JSONValue`, the Swift
23
+ * analog of TS `unknown`.
24
+ * - **`never`** (an uninhabitable enum after the type gate) → a strict codegen
25
+ * error, since the field can never be constructed (Fork 4).
26
+ * - **Scalar `enum`, all strings** → a nested `enum … : String, Codable,
27
+ * CaseIterable, Sendable`, the same form the Swift model codegen emits.
28
+ * - **`oneOf` discriminated union** → an `enum` with associated values plus a
29
+ * generated `init(from:)`/`encode(to:)` keyed on the discriminator.
30
+ *
31
+ * Codable semantics adopted from the maintainer decision (binding item 4):
32
+ *
33
+ * - Every generated `struct` gets a generated **public memberwise
34
+ * initializer** (Swift's synthesized memberwise init is not `public` across
35
+ * module boundaries).
36
+ * - A **required-nullable** property (required, but its value may be `null`)
37
+ * is encoded with an EXPLICIT null (not omitted) so server-side
38
+ * required-key validation still sees the key; decode is lenient (a missing
39
+ * key decodes to `nil`).
40
+ * - An **open object** stores unknown keys in an `extra: [String: JSONValue]`
41
+ * catch-all via custom Codable that separates known keys from extras; a key
42
+ * that collides with a known property is owned by the known property (the
43
+ * extra copy is dropped on encode, and never captured on decode).
44
+ * - A `oneOf` branch `struct` CARRIES the discriminator as a single-case
45
+ * `String` enum property, so decoding a branch rejects a conflicting
46
+ * discriminator value, and encoding re-emits the tag from the branch.
47
+ *
48
+ * Errors are named (`SwiftCodegenError`) and carry the source file and schema
49
+ * path for diagnostics (binding item 6).
50
+ */
51
+ import { schemaRejectsEmptyObject } from "../workflow-codegen/schemaToTs.js";
52
+ /** Re-exported so the invoker phases share ONE required-vs-optional decision. */
53
+ export { schemaRejectsEmptyObject };
54
+ /** A named codegen error carrying the source file + schema path (binding 6). */
55
+ export declare class SwiftCodegenError extends Error {
56
+ readonly sourceFile?: string;
57
+ readonly schemaPath?: string;
58
+ constructor(message: string, opts?: {
59
+ sourceFile?: string;
60
+ schemaPath?: string;
61
+ });
62
+ }
63
+ export interface SwiftCodegenContext {
64
+ /** The `.toml`/schema file this type was generated from, for diagnostics. */
65
+ sourceFile?: string;
66
+ }
67
+ /**
68
+ * Render a full Swift type declaration for a ROOT schema (e.g. a workflow's
69
+ * `<Key>Input`/`<Key>Output`), including every nested type it needs. Returns the
70
+ * Swift source for the type only — the CLI adds the import/banner (Phase 2).
71
+ */
72
+ export declare function renderSwiftRootType(rootTypeName: string, schema: any, ctx?: SwiftCodegenContext): string;