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,361 @@
1
+ /**
2
+ * `workflows codegen` orchestrator (issue #1442).
3
+ *
4
+ * Reads synced workflow TOMLs (`.primitive/sync/<env>/<appId>/workflows/*.toml`)
5
+ * and emits ONE generated file per workflow —
6
+ * `workflows/generated/<key>.generated.ts` — each containing the workflow's
7
+ * `<Key>Input`/`<Key>Output` types plus a typed `<key>(client)` invoker factory
8
+ * returning `{ runSync?, start, getStatus }`. This mirrors `databases codegen`'s per-type
9
+ * `<Type>.generated.ts` layout (#1441's `<type>Ops`): per-file artifacts keep
10
+ * team merges conflict-free and let a `[workflow-key]` filter regenerate exactly
11
+ * one file.
12
+ *
13
+ * Design decisions (see the plan of record on #1442, post-pivot):
14
+ * - Schemas are interpreted through the SHARED descriptor
15
+ * (`generated-schema-descriptor.ts`, a vendored copy of the server's
16
+ * `schema-validation` descriptor) so the generated types match runtime
17
+ * validation exactly. A malformed schema throws (fail-and-exit).
18
+ * - `.runSync` is emitted only for `syncCallable: true` workflows (the server
19
+ * rejects run-sync otherwise); `.start`, `.getStatus`, and `.terminate` for
20
+ * every non-reserved workflow (the typed async path, issue #1512 —
21
+ * async-only workflows are exactly the ones that need a typed `getStatus` /
22
+ * `terminate`). `.terminate` binds `<Key>Output` (a terminated run can carry
23
+ * partial output); issue #1543 added the member, reversing #1512's
24
+ * start/status-only decision.
25
+ * - `.define` is emitted only for an apply-mode workflow
26
+ * (`requiresClientApply !== false`, the server's default). It binds
27
+ * `<Key>Output` so the `onApply` handler's `output` is the workflow's real
28
+ * output type rather than `any` (issue #1543, on top of #1542's
29
+ * `define<O>` / `WorkflowDefineOptions<O>` generics). `getPendingApplies`
30
+ * gets no member — #1542 made it a concrete `PendingApply[]` with no output
31
+ * to bind, and it is scoped to a document rather than a workflow.
32
+ * - `.cronTriggers.{create,update}` bind `<Key>Input` to the trigger's
33
+ * `rootInput` and pin `workflowKey`, so a cron helper can't be redirected at
34
+ * another workflow (issue #1543). `rootInput` is `Partial<<Key>Input>` for
35
+ * an object-shaped input schema (an `inputMapping` may supply the rest) and
36
+ * the full `<Key>Input` otherwise.
37
+ * - `input` is a REQUIRED option iff the schema rejects `{}` (the client's
38
+ * `input ?? {}` fallback would fail validation); otherwise `input?`.
39
+ * - The runtime call always passes the ORIGINAL key string; only identifiers
40
+ * are sanitized. `workflowKey` is set AFTER spreading `opts`, so a caller
41
+ * cannot override it.
42
+ * - Disk lifecycle (write / `--check` / suffix-based cleanup) delegates to the
43
+ * shared `writeOrCheckGeneratedFiles`, exactly like `databases codegen`.
44
+ *
45
+ * FORMATTING CONTRACT (#1565): the emitted TypeScript must be a fixed point of
46
+ * Prettier's DEFAULT config — `prettier --write` over a generated file must
47
+ * leave it byte-for-byte unchanged, because `--check` byte-compares. There is
48
+ * no Prettier dependency and no automated round-trip test to catch a
49
+ * regression, so any edit here that changes line shapes must be verified by
50
+ * hand (regenerate a representative output, run Prettier over it, confirm no
51
+ * diff). Wrap long constructs through `codegen-shared/prettierStable.ts` rather
52
+ * than hand-joining strings — see that file's header for the full contract.
53
+ */
54
+ import * as path from "path";
55
+ import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
56
+ import { fingerprintToml } from "../db-codegen/dbFingerprint.js";
57
+ import { atom, generic, indent, intersection, objectType, printType, renderArrowCall, renderArrowProperty, renderParenList, renderTypeAlias, tsStringLiteral, union, } from "../codegen-shared/prettierStable.js";
58
+ import { schemaToTypeNode } from "./schemaToTs.js";
59
+ import { describeSchema } from "./generated-schema-descriptor.js";
60
+ import { describeWorkflowInvoker } from "./invokerIR.js";
61
+ import { workflowInputTypeName, workflowOutputTypeName, workflowFactoryName, } from "./naming.js";
62
+ /** Suffix identifying a generated file (shared with `databases codegen`). */
63
+ export const GENERATED_FILE_SUFFIX = ".generated.ts";
64
+ /** The client package the generated file imports its types from. */
65
+ const CLIENT_PACKAGE = "js-bao-wss-client";
66
+ /**
67
+ * Render a top-level `<Name>Input`/`<Name>Output` declaration. An absent schema
68
+ * → `unknown`. A plain object type → an `interface`; anything else → a `type`
69
+ * alias.
70
+ *
71
+ * A discriminated-union (`oneOf`) output renders as `{…} | {…}`, which begins
72
+ * with `{` too — but it must be a `type` alias, not `interface Foo {…} | {…}`
73
+ * (invalid TS). Decide via the shared descriptor (`describeSchema(...).oneOf`),
74
+ * not the `startsWith("{")` heuristic (#1511).
75
+ */
76
+ function renderTypeDecl(name, schema) {
77
+ if (schema === undefined) {
78
+ // Through `renderTypeAlias`, not hand-joined: a long enough workflow key
79
+ // pushes `export type <Key>Output = unknown;` past the print width, and
80
+ // Prettier then moves the `unknown` below the `=` (#1565).
81
+ return renderTypeAlias(name, atom("unknown"));
82
+ }
83
+ const node = schemaToTypeNode(schema);
84
+ if (node.kind === "block" && !describeSchema(schema).oneOf) {
85
+ return `export interface ${name} ${printType(node, 0, 0)}`;
86
+ }
87
+ return renderTypeAlias(name, node);
88
+ }
89
+ /**
90
+ * Parse a single workflow TOML into the data the emitter needs. Throws on
91
+ * malformed schema JSON (fail-and-exit) — the honest `unknown` fallback is for
92
+ * valid-but-untypeable schemas only. Returns null for a reserved workflow.
93
+ *
94
+ * The operation metadata (key, `syncCallable`, required-vs-optional `input`,
95
+ * parsed schemas) comes from the SHARED `describeWorkflowInvoker` IR so the TS
96
+ * and Swift invokers can never disagree (#1547 binding item 5). Only the
97
+ * TS-specific naming + type-declaration rendering happens here.
98
+ */
99
+ function parseWorkflow(input) {
100
+ // #1464 removed `@iarna/toml`; #1446 makes `config pull` emit schemas as native
101
+ // TOML tables (incl. mixed-type enums like `enum = ["ok", 1]`, TOML 1.0). The
102
+ // shared IR uses `parseConfigToml` + `safeJsonParse` under the hood.
103
+ const ir = describeWorkflowInvoker({
104
+ fileStem: input.fileStem,
105
+ tomlContent: input.tomlContent,
106
+ });
107
+ if (!ir)
108
+ return null; // reserved workflow
109
+ const inputTypeName = workflowInputTypeName(ir.key);
110
+ const outputTypeName = workflowOutputTypeName(ir.key);
111
+ return {
112
+ key: ir.key,
113
+ syncCallable: ir.syncCallable,
114
+ inputTypeName,
115
+ outputTypeName,
116
+ factoryName: workflowFactoryName(ir.key),
117
+ inputDecl: renderTypeDecl(inputTypeName, ir.inputSchema),
118
+ outputDecl: renderTypeDecl(outputTypeName, ir.outputSchema),
119
+ inputRequired: ir.inputRequired,
120
+ // Object-shaped only when the schema declares exactly `type: "object"` —
121
+ // the one case where `Partial<<Key>Input>` is a sound cron `rootInput`
122
+ // type. Schema-less / union / scalar / array → not object-shaped. Decided
123
+ // in the SHARED IR (#2806) so the Swift cron helper cannot disagree.
124
+ inputIsObjectShaped: ir.inputIsObjectShaped,
125
+ requiresClientApply: ir.requiresClientApply,
126
+ };
127
+ }
128
+ /**
129
+ * Render the typed invoker factory for one workflow.
130
+ *
131
+ * Every line shape here is emitted the way Prettier's default config would
132
+ * print it (#1565) — see `codegen-shared/prettierStable.ts`. `runSync`/`start`
133
+ * always break their parameter list: the shortest possible
134
+ * `opts: {…} & Omit<…>` parameter is already wider than the 80-column budget,
135
+ * so there is no width decision to make there.
136
+ */
137
+ function renderFactory(wf) {
138
+ const keyLiteral = tsStringLiteral(wf.key);
139
+ const inputMember = wf.inputRequired
140
+ ? `input: ${wf.inputTypeName}`
141
+ : `input?: ${wf.inputTypeName}`;
142
+ const lines = [
143
+ renderParenList(`export function ${wf.factoryName}`, ["client: JsBaoClient"], " {", 0),
144
+ ` return {`,
145
+ ];
146
+ // `opts: { input: X } & Omit<<Options>, "workflowKey" | "input">` — the
147
+ // intersection breaks inside the `Omit<...>` when it overflows.
148
+ const optsParam = (optionsTypeName) => {
149
+ const node = intersection([
150
+ objectType([inputMember]),
151
+ generic("Omit", [
152
+ atom(optionsTypeName),
153
+ union([atom(`"workflowKey"`), atom(`"input"`)]),
154
+ ]),
155
+ ]);
156
+ const head = `${indent(3)}opts: `;
157
+ return `${head}${printType(node, head.length, 3, 1)},`;
158
+ };
159
+ // Spread `opts` FIRST, then set `workflowKey` LAST, so the factory's intended
160
+ // key always wins. `Omit<..., "workflowKey">` only rejects an excess
161
+ // `workflowKey` on object literals; a caller passing an options *variable*
162
+ // carrying an extra `workflowKey` (or any untyped JS caller) would otherwise
163
+ // override the key and invoke the wrong workflow if the spread came last.
164
+ const invocation = (method, typeArgs, optionsTypeName) => renderArrowCall({
165
+ head: [
166
+ `${indent(2)}${method}: (`,
167
+ optsParam(optionsTypeName),
168
+ `${indent(2)}) =>`,
169
+ ].join("\n"),
170
+ callee: generic(`client.workflows.${method}`, typeArgs.map(atom)),
171
+ leadingArgs: [],
172
+ objectMembers: ["...opts", { key: "workflowKey", value: keyLiteral }],
173
+ level: 3,
174
+ tail: ",",
175
+ });
176
+ if (wf.syncCallable) {
177
+ lines.push(invocation("runSync", [wf.inputTypeName, wf.outputTypeName], "RunSyncWorkflowOptions"));
178
+ }
179
+ lines.push(invocation("start", [wf.inputTypeName], "StartWorkflowOptions"));
180
+ // Typed status fetch (#1512), emitted for EVERY non-reserved workflow — not
181
+ // gated on `syncCallable`, since async-only workflows are exactly the ones
182
+ // that need a typed `status.output`. `output` is bound to `<Key>Output` from
183
+ // the workflow's `outputSchema` (schema-less → `unknown`, same as the sync
184
+ // path). `runKey` stays required (unlike start/runSync, which auto-generate
185
+ // it — you cannot fetch a run's status without knowing which run). Same
186
+ // spread-first / key-last ordering so an untyped caller cannot override the
187
+ // key and read the wrong workflow's status.
188
+ //
189
+ // Its `opts` parameter carries no generated names, so it always fits on one
190
+ // line — unlike start/runSync above.
191
+ lines.push(renderArrowCall({
192
+ head: `${indent(2)}getStatus: (opts: Omit<GetWorkflowStatusOptions, "workflowKey">) =>`,
193
+ callee: generic("client.workflows.getStatus", [atom(wf.outputTypeName)]),
194
+ leadingArgs: [],
195
+ objectMembers: ["...opts", { key: "workflowKey", value: keyLiteral }],
196
+ level: 3,
197
+ tail: ",",
198
+ }));
199
+ // Typed termination (#1543), emitted for EVERY non-reserved workflow — any
200
+ // run can be terminated. `output` is bound to `<Key>Output` (a terminated run
201
+ // can carry partial output), same schema-less → `unknown` rule as getStatus.
202
+ // `runKey` stays required. Same spread-first / key-last ordering so an untyped
203
+ // caller cannot override the key and terminate the wrong workflow's run. This
204
+ // member reverses #1512's start/status-only decision.
205
+ lines.push(renderArrowProperty({
206
+ level: 2,
207
+ key: "terminate",
208
+ params: [`opts: Omit<TerminateWorkflowOptions, "workflowKey">`],
209
+ signatureTail: " =>",
210
+ callee: generic("client.workflows.terminate", [atom(wf.outputTypeName)]),
211
+ leadingArgs: [],
212
+ objectMembers: ["...opts", { key: "workflowKey", value: keyLiteral }],
213
+ tail: ",",
214
+ }));
215
+ // Typed apply handler (#1543 Phase 2), emitted ONLY for an apply-mode
216
+ // workflow (`requiresClientApply !== false` — the same default the server
217
+ // uses to decide a completed run needs a client apply). `WorkflowDefineOptions<O>`
218
+ // and `WorkflowApplyHandler<O>` come from #1542; binding `<Key>Output` here
219
+ // makes the `onApply` callback's `output` the workflow's real output type
220
+ // instead of `any`. The key is passed as a positional argument, so there is
221
+ // no spread a caller could use to override it.
222
+ //
223
+ // No `getPendingApplies` member: #1542 shipped it as a concrete
224
+ // `PendingApply[]` (the server element carries no `output`, so there is no
225
+ // output generic to bind), and the call is scoped to a DOCUMENT rather than
226
+ // a workflow — a per-workflow member would bind nothing and would wrongly
227
+ // suggest the result only covers this workflow.
228
+ if (wf.requiresClientApply) {
229
+ lines.push(renderArrowProperty({
230
+ level: 2,
231
+ key: "define",
232
+ params: [`options: WorkflowDefineOptions<${wf.outputTypeName}>`],
233
+ signatureTail: " =>",
234
+ callee: generic("client.workflows.define", [atom(wf.outputTypeName)]),
235
+ leadingArgs: [keyLiteral, "options"],
236
+ tail: ",",
237
+ }));
238
+ }
239
+ // Typed cron-trigger create/update (#1543), folded INTO the factory (not a
240
+ // separate export). The client's own `rootInput` generic (#1542) is bound to
241
+ // `<Key>Input`: `Partial<...>` for an object-shaped schema (an `inputMapping`
242
+ // may supply the rest), the full type otherwise. Binding the generic rather
243
+ // than restating the field keeps the caller-facing params in step with the
244
+ // client contract — notably `update` accepts `rootInput: null` to clear a
245
+ // stored root input, while `create` does not (the server rejects a null there
246
+ // with a 400). `workflowKey` is Omit-ted from the caller-facing params and
247
+ // pinned LAST so a caller can't redirect the trigger at another workflow.
248
+ // Nothing is spread after `workflowKey` — `rootInput` rides in via `...params`
249
+ // — preserving the key-last convention.
250
+ // `rootInput` is `Partial<<Key>Input>` for an object-shaped schema (an
251
+ // `inputMapping` may supply the rest) and the full `<Key>Input` otherwise.
252
+ // Built as a `TypeNode` so `printType` can break the nested type-argument
253
+ // lists Prettier opens up at long key lengths (e.g.
254
+ // `Omit<CreateCronTriggerParams<Partial<...>>, "workflowKey">`).
255
+ const rootInputNode = wf.inputIsObjectShaped
256
+ ? generic("Partial", [atom(wf.inputTypeName)])
257
+ : atom(wf.inputTypeName);
258
+ const cronParam = (paramsGeneric) => ({
259
+ name: "params",
260
+ type: generic("Omit", [
261
+ generic(paramsGeneric, [rootInputNode]),
262
+ atom(`"workflowKey"`),
263
+ ]),
264
+ });
265
+ lines.push([
266
+ ` cronTriggers: {`,
267
+ renderArrowProperty({
268
+ level: 3,
269
+ key: "create",
270
+ params: [cronParam("CreateCronTriggerParams")],
271
+ signatureTail: " =>",
272
+ callee: generic("client.cronTriggers.create", [rootInputNode]),
273
+ leadingArgs: [],
274
+ objectMembers: ["...params", { key: "workflowKey", value: keyLiteral }],
275
+ tail: ",",
276
+ }),
277
+ renderArrowProperty({
278
+ level: 3,
279
+ key: "update",
280
+ params: ["triggerId: string", cronParam("UpdateCronTriggerParams")],
281
+ signatureTail: " =>",
282
+ callee: generic("client.cronTriggers.update", [rootInputNode]),
283
+ leadingArgs: ["triggerId"],
284
+ objectMembers: ["...params", { key: "workflowKey", value: keyLiteral }],
285
+ tail: ",",
286
+ }),
287
+ ` },`,
288
+ ].join("\n"));
289
+ lines.push(` };`, `}`);
290
+ return lines.join("\n");
291
+ }
292
+ /**
293
+ * Render the full `<key>.generated.ts` content for a single workflow TOML input.
294
+ * Returns null for a reserved (`__internal.*`) workflow. Pure — exported so
295
+ * tests can assert on the string directly.
296
+ */
297
+ export function renderWorkflowFile(input) {
298
+ const wf = parseWorkflow(input);
299
+ if (!wf)
300
+ return null;
301
+ const fingerprint = fingerprintToml(input.tomlContent);
302
+ // Only import the option types actually referenced, so the generated file
303
+ // compiles under a consumer's `noUnusedLocals`. `GetWorkflowStatusOptions`,
304
+ // `TerminateWorkflowOptions`, and the two cron-param types are always
305
+ // referenced now — every factory emits `getStatus`, `terminate` (#1512 /
306
+ // #1543), and `cronTriggers.{create,update}` (#1543).
307
+ const imports = [
308
+ "CreateCronTriggerParams",
309
+ "GetWorkflowStatusOptions",
310
+ "JsBaoClient",
311
+ "StartWorkflowOptions",
312
+ "TerminateWorkflowOptions",
313
+ "UpdateCronTriggerParams",
314
+ ];
315
+ if (wf.syncCallable)
316
+ imports.push("RunSyncWorkflowOptions");
317
+ // Only an apply-mode workflow emits `define`, so its option type is imported
318
+ // only then — a non-apply-mode file would otherwise fail `noUnusedLocals`.
319
+ if (wf.requiresClientApply)
320
+ imports.push("WorkflowDefineOptions");
321
+ imports.sort();
322
+ const blocks = [];
323
+ blocks.push([
324
+ `// AUTO-GENERATED FROM workflows/${wf.key}.toml — DO NOT EDIT.`,
325
+ "// Run `primitive workflows codegen` to regenerate.",
326
+ `// fingerprint: ${fingerprint}`,
327
+ ].join("\n"));
328
+ blocks.push(`import type {\n${imports
329
+ .map((i) => ` ${i},`)
330
+ .join("\n")}\n} from "${CLIENT_PACKAGE}";`);
331
+ blocks.push(wf.inputDecl);
332
+ blocks.push(wf.outputDecl);
333
+ blocks.push(renderFactory(wf));
334
+ return { key: wf.key, content: blocks.join("\n\n") + "\n" };
335
+ }
336
+ /**
337
+ * Run workflow codegen end-to-end. One `<key>.generated.ts` per workflow;
338
+ * delegates the disk lifecycle to the shared writer/checker, exactly like
339
+ * `databases codegen`.
340
+ */
341
+ export async function generateWorkflowTypes(options) {
342
+ const outAbs = path.resolve(options.outputDir);
343
+ const filesToWrite = new Map();
344
+ for (const input of options.inputs) {
345
+ const rendered = renderWorkflowFile(input);
346
+ if (!rendered)
347
+ continue; // reserved workflow — no file
348
+ const filePath = path.join(outAbs, `${rendered.key}${GENERATED_FILE_SUFFIX}`);
349
+ filesToWrite.set(filePath, rendered.content);
350
+ }
351
+ return await writeOrCheckGeneratedFiles({
352
+ outputDir: outAbs,
353
+ filesToWrite,
354
+ check: options.check,
355
+ // A single-workflow filter run owns only a subset of the generated files,
356
+ // so orphan cleanup / stale detection must be scoped to the filtered file.
357
+ fullOwnership: options.singleWorkflow !== true,
358
+ generatedSuffix: GENERATED_FILE_SUFFIX,
359
+ });
360
+ }
361
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Shared workflow-invoker IR (issue #1547, Phase 3).
3
+ *
4
+ * The typed invoker factory is generated on BOTH the TypeScript side
5
+ * (`workflow-codegen/generator.ts`) and the Swift side
6
+ * (`swift-codegen/generator.ts`). The maintainer decision (item 5, binding)
7
+ * requires that invoker generation reuse ONE description of the workflow's
8
+ * operation metadata — the runtime key, whether `runSync` is emitted
9
+ * (`syncCallable`), whether `input` is a required argument, and whether the
10
+ * workflow is apply-mode (`requiresClientApply`) — rather than each language
11
+ * renderer re-deriving it from the TOML. This module is that
12
+ * single source: both renderers call `describeWorkflowInvoker` and read the
13
+ * SAME `WorkflowInvokerIR`, so the two clients can never disagree on which
14
+ * operations a workflow exposes or whether its input is required.
15
+ *
16
+ * What stays language-specific (and is therefore NOT in the IR): the emitted
17
+ * identifiers (the TS and Swift base names come from different naming helpers)
18
+ * and the rendered type declarations. The IR carries only the parsed schemas +
19
+ * the neutral operation flags; each renderer turns the schemas into its own
20
+ * syntax.
21
+ */
22
+ import { INTERNAL_WORKFLOW_KEY_PREFIX } from "../platform-owned.js";
23
+ export { INTERNAL_WORKFLOW_KEY_PREFIX };
24
+ /** Raw inputs a renderer already has on hand for one workflow TOML. */
25
+ export interface WorkflowInvokerSource {
26
+ /** Source `.toml` filename stem (fallback key when `[workflow].key` is absent). */
27
+ fileStem: string;
28
+ /** Raw TOML content (already read from disk). */
29
+ tomlContent: string;
30
+ }
31
+ /**
32
+ * Language-neutral description of one workflow's invoker surface. Consumed by
33
+ * both the TS and Swift invoker renderers; neither reconstructs these decisions
34
+ * on its own.
35
+ */
36
+ export interface WorkflowInvokerIR {
37
+ /**
38
+ * The ORIGINAL workflow key. The runtime call always passes this verbatim —
39
+ * only emitted identifiers are sanitized (per language).
40
+ */
41
+ key: string;
42
+ /**
43
+ * Whether the workflow is sync-callable. `runSync` is emitted ONLY when this
44
+ * is true (the server rejects run-sync for non-sync-callable workflows), on
45
+ * both clients.
46
+ */
47
+ syncCallable: boolean;
48
+ /**
49
+ * Whether `input` is a REQUIRED argument. True iff the input schema rejects
50
+ * the empty object `{}` (the client's `input ?? {}` fallback would then fail
51
+ * validation). A schema-less workflow accepts anything → optional. Computed
52
+ * ONCE here via `schemaRejectsEmptyObject`, shared with both renderers.
53
+ */
54
+ inputRequired: boolean;
55
+ /**
56
+ * Whether the workflow is apply-mode — its completed run waits for a client
57
+ * to apply the output. Mirrors the server's default: apply-mode unless the
58
+ * TOML sets `requiresClientApply = false` (`src/workflows/app-workflow.ts`).
59
+ * Only an apply-mode workflow gets a `define` member on the generated
60
+ * invoker (issue #1543). Parsed here, alongside `syncCallable`, so no
61
+ * renderer reparses the TOML for it.
62
+ */
63
+ requiresClientApply: boolean;
64
+ /**
65
+ * Whether the input schema is a plain object (`type: "object"`). Only an
66
+ * object-shaped input can be partialized, which is what each renderer's
67
+ * cron-trigger `rootInput` decision turns on: TS types it
68
+ * `Partial<<Key>Input>` (an `inputMapping` may supply the rest) and leaves
69
+ * Swift's — which has no `Partial<>` — an open `JSONValue`; anything else
70
+ * (schema-less / union / scalar / array) binds the full `<Key>Input` on both.
71
+ * Decided ONCE here (#2806) so the two renderers cannot disagree about which
72
+ * inputs are partializable.
73
+ */
74
+ inputIsObjectShaped: boolean;
75
+ /** Parsed input schema, or `undefined` when absent. */
76
+ inputSchema: unknown;
77
+ /** Parsed output schema, or `undefined` when absent. */
78
+ outputSchema: unknown;
79
+ }
80
+ /**
81
+ * True for a platform-owned (reserved) workflow key. Thin alias over the shared
82
+ * `isPlatformOwnedWorkflowKey` (#1660) kept for existing callers of this name.
83
+ */
84
+ export declare function isReservedWorkflowKey(key: string): boolean;
85
+ /**
86
+ * Parse one workflow TOML into the shared invoker IR. Returns `null` for a
87
+ * reserved (`__internal.*`) workflow (no invoker is generated). Throws on
88
+ * malformed schema JSON (fail-and-exit) — the honest `undefined`/`unknown`
89
+ * fallback is for valid-but-untypeable schemas only.
90
+ *
91
+ * This is the ONE place that reads `syncCallable` / `requiresClientApply` and
92
+ * computes required-vs-optional `input`; both language generators call it.
93
+ */
94
+ export declare function describeWorkflowInvoker(source: WorkflowInvokerSource): WorkflowInvokerIR | null;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Shared workflow-invoker IR (issue #1547, Phase 3).
3
+ *
4
+ * The typed invoker factory is generated on BOTH the TypeScript side
5
+ * (`workflow-codegen/generator.ts`) and the Swift side
6
+ * (`swift-codegen/generator.ts`). The maintainer decision (item 5, binding)
7
+ * requires that invoker generation reuse ONE description of the workflow's
8
+ * operation metadata — the runtime key, whether `runSync` is emitted
9
+ * (`syncCallable`), whether `input` is a required argument, and whether the
10
+ * workflow is apply-mode (`requiresClientApply`) — rather than each language
11
+ * renderer re-deriving it from the TOML. This module is that
12
+ * single source: both renderers call `describeWorkflowInvoker` and read the
13
+ * SAME `WorkflowInvokerIR`, so the two clients can never disagree on which
14
+ * operations a workflow exposes or whether its input is required.
15
+ *
16
+ * What stays language-specific (and is therefore NOT in the IR): the emitted
17
+ * identifiers (the TS and Swift base names come from different naming helpers)
18
+ * and the rendered type declarations. The IR carries only the parsed schemas +
19
+ * the neutral operation flags; each renderer turns the schemas into its own
20
+ * syntax.
21
+ */
22
+ import { parseConfigToml } from "../config-toml.js";
23
+ import { safeJsonParse } from "../workflow-payload.js";
24
+ import { schemaRejectsEmptyObject } from "./schemaToTs.js";
25
+ import { describeSchema } from "./generated-schema-descriptor.js";
26
+ import { INTERNAL_WORKFLOW_KEY_PREFIX, isPlatformOwnedWorkflowKey, } from "../platform-owned.js";
27
+ // Re-export so existing importers of these codegen symbols keep working; the
28
+ // single source of truth is now `../platform-owned.js` (#1660), shared with the
29
+ // `sync` pull/diff/push filters so codegen and sync can never drift.
30
+ export { INTERNAL_WORKFLOW_KEY_PREFIX };
31
+ /**
32
+ * True for a platform-owned (reserved) workflow key. Thin alias over the shared
33
+ * `isPlatformOwnedWorkflowKey` (#1660) kept for existing callers of this name.
34
+ */
35
+ export function isReservedWorkflowKey(key) {
36
+ return isPlatformOwnedWorkflowKey(key);
37
+ }
38
+ /**
39
+ * Parse one workflow TOML into the shared invoker IR. Returns `null` for a
40
+ * reserved (`__internal.*`) workflow (no invoker is generated). Throws on
41
+ * malformed schema JSON (fail-and-exit) — the honest `undefined`/`unknown`
42
+ * fallback is for valid-but-untypeable schemas only.
43
+ *
44
+ * This is the ONE place that reads `syncCallable` / `requiresClientApply` and
45
+ * computes required-vs-optional `input`; both language generators call it.
46
+ */
47
+ export function describeWorkflowInvoker(source) {
48
+ const data = parseConfigToml(source.tomlContent);
49
+ const workflow = data?.workflow ?? {};
50
+ const key = typeof workflow.key === "string" && workflow.key.length > 0
51
+ ? workflow.key
52
+ : source.fileStem;
53
+ if (isReservedWorkflowKey(key))
54
+ return null;
55
+ // safeJsonParse throws on invalid JSON in a schema string — let it bubble.
56
+ const inputSchema = safeJsonParse(workflow.inputSchema);
57
+ const outputSchema = safeJsonParse(workflow.outputSchema);
58
+ return {
59
+ key,
60
+ syncCallable: workflow.syncCallable === true,
61
+ // `input` is required iff the schema rejects the client's `{}` fallback.
62
+ // A schema-less workflow (`undefined`) accepts anything → optional.
63
+ inputRequired: inputSchema !== undefined && schemaRejectsEmptyObject(inputSchema),
64
+ // Apply-mode unless explicitly disabled — the same `!== false` default the
65
+ // server applies when it decides whether a completed run needs a client
66
+ // apply. An absent key means apply-mode.
67
+ requiresClientApply: workflow.requiresClientApply !== false,
68
+ // Object-shaped only when the schema declares exactly `type: "object"` —
69
+ // the one case a cron `rootInput` may legitimately be partial.
70
+ inputIsObjectShaped: inputSchema !== undefined &&
71
+ describeSchema(inputSchema).singularType === "object",
72
+ inputSchema,
73
+ outputSchema,
74
+ };
75
+ }
76
+ //# sourceMappingURL=invokerIR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invokerIR.js","sourceRoot":"","sources":["../../../../src/lib/workflow-codegen/invokerIR.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,6EAA6E;AAC7E,gFAAgF;AAChF,qEAAqE;AACrE,OAAO,EAAE,4BAA4B,EAAE,CAAC;AA4DxC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,0BAA0B,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA6B;IAE7B,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAQ,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GACP,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,CAAC,QAAQ,CAAC,GAAG;QACd,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAEtB,IAAI,qBAAqB,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,2EAA2E;IAC3E,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE1D,OAAO;QACL,GAAG;QACH,YAAY,EAAE,QAAQ,CAAC,YAAY,KAAK,IAAI;QAC5C,yEAAyE;QACzE,oEAAoE;QACpE,aAAa,EACX,WAAW,KAAK,SAAS,IAAI,wBAAwB,CAAC,WAAW,CAAC;QACpE,2EAA2E;QAC3E,wEAAwE;QACxE,yCAAyC;QACzC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,KAAK,KAAK;QAC3D,yEAAyE;QACzE,+DAA+D;QAC/D,mBAAmB,EACjB,WAAW,KAAK,SAAS;YACzB,cAAc,CAAC,WAAW,CAAC,CAAC,YAAY,KAAK,QAAQ;QACvD,WAAW;QACX,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Identifier-naming helpers for `workflows codegen` (issue #1442).
3
+ *
4
+ * Workflow keys resolve case-insensitively server-side and may contain
5
+ * characters that aren't valid TS identifiers (`.`, `-`). Only the emitted
6
+ * identifiers are sanitized — the runtime call always passes the ORIGINAL key
7
+ * string.
8
+ *
9
+ * Type names: `pascalCase(key) + "Input" | "Output"` (reuses `pascalCase` from
10
+ * the database codegen so the two commands share one PascalCase rule).
11
+ * Factory property: a camelCase form of the key.
12
+ */
13
+ /**
14
+ * `create-checkout-session` / `createCheckoutSession` → `CreateCheckoutSession`.
15
+ * A digit-leading key (`123-job` → `_123Job`) is prefixed with `_` so the
16
+ * emitted type name is a valid TS identifier.
17
+ */
18
+ export declare function workflowTypeBaseName(key: string): string;
19
+ /** PascalCase base + `Input` (e.g. `CreateCheckoutSessionInput`). */
20
+ export declare function workflowInputTypeName(key: string): string;
21
+ /** PascalCase base + `Output` (e.g. `CreateCheckoutSessionOutput`). */
22
+ export declare function workflowOutputTypeName(key: string): string;
23
+ /**
24
+ * camelCase factory function name for a workflow key: PascalCase, then lowercase
25
+ * the first character (`create-checkout-session` → `createCheckoutSession`,
26
+ * `refresh-sheet` → `refreshSheet`). Used as the top-level exported factory
27
+ * function name in the per-workflow generated file, so it must be a legal
28
+ * function identifier: a digit-leading key (`123-job` → `_123Job`) is
29
+ * underscore-prefixed, and a key that lands on a JS reserved word (`delete`,
30
+ * `new`, `import`) is underscore-suffixed (`delete_`). Only the emitted
31
+ * identifier changes; the runtime call still passes the ORIGINAL key string.
32
+ */
33
+ export declare function workflowFactoryName(key: string): string;