primitive-admin 1.1.0-alpha.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/README.md +523 -109
  2. package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
  3. package/dist/bin/primitive.d.ts +2 -0
  4. package/dist/bin/primitive.js +372 -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 +136 -30
  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 +713 -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 +65 -100
  14. package/dist/src/commands/apps.js.map +1 -1
  15. package/dist/src/commands/auth-sessions.d.ts +7 -0
  16. package/dist/src/commands/auth-sessions.js +144 -0
  17. package/dist/src/commands/auth-sessions.js.map +1 -0
  18. package/dist/src/commands/auth.d.ts +2 -0
  19. package/dist/src/commands/auth.js +238 -108
  20. package/dist/src/commands/auth.js.map +1 -1
  21. package/dist/src/commands/blob-buckets.d.ts +2 -0
  22. package/dist/src/commands/blob-buckets.js +331 -0
  23. package/dist/src/commands/blob-buckets.js.map +1 -0
  24. package/dist/src/commands/catalog.d.ts +2 -0
  25. package/dist/src/commands/catalog.js +63 -48
  26. package/dist/src/commands/catalog.js.map +1 -1
  27. package/dist/src/commands/collection-type-configs.d.ts +2 -0
  28. package/dist/src/commands/collection-type-configs.js +85 -0
  29. package/dist/src/commands/collection-type-configs.js.map +1 -0
  30. package/dist/src/commands/collections.d.ts +2 -0
  31. package/dist/src/commands/collections.js +1282 -0
  32. package/dist/src/commands/collections.js.map +1 -0
  33. package/dist/src/commands/comparisons.d.ts +2 -0
  34. package/dist/src/commands/comparisons.js +6 -6
  35. package/dist/src/commands/comparisons.js.map +1 -1
  36. package/dist/src/commands/config.d.ts +46 -0
  37. package/dist/src/commands/config.js +465 -0
  38. package/dist/src/commands/config.js.map +1 -0
  39. package/dist/src/commands/connections.d.ts +2 -0
  40. package/dist/src/commands/connections.js +99 -0
  41. package/dist/src/commands/connections.js.map +1 -0
  42. package/dist/src/commands/cron-triggers.d.ts +2 -0
  43. package/dist/src/commands/cron-triggers.js +266 -0
  44. package/dist/src/commands/cron-triggers.js.map +1 -0
  45. package/dist/src/commands/database-type-configs.d.ts +2 -0
  46. package/dist/src/commands/database-type-configs.js +164 -0
  47. package/dist/src/commands/database-type-configs.js.map +1 -0
  48. package/dist/src/commands/database-types.d.ts +2 -0
  49. package/dist/src/commands/database-types.js +471 -0
  50. package/dist/src/commands/database-types.js.map +1 -0
  51. package/dist/src/commands/databases.d.ts +65 -0
  52. package/dist/src/commands/databases.js +1887 -243
  53. package/dist/src/commands/databases.js.map +1 -1
  54. package/dist/src/commands/documents.d.ts +60 -0
  55. package/dist/src/commands/documents.js +2888 -22
  56. package/dist/src/commands/documents.js.map +1 -1
  57. package/dist/src/commands/email-templates.d.ts +2 -0
  58. package/dist/src/commands/email-templates.js +175 -0
  59. package/dist/src/commands/email-templates.js.map +1 -0
  60. package/dist/src/commands/env.d.ts +23 -0
  61. package/dist/src/commands/env.js +395 -0
  62. package/dist/src/commands/env.js.map +1 -0
  63. package/dist/src/commands/feature-flags.d.ts +14 -0
  64. package/dist/src/commands/feature-flags.js +117 -0
  65. package/dist/src/commands/feature-flags.js.map +1 -0
  66. package/dist/src/commands/functions.d.ts +20 -0
  67. package/dist/src/commands/functions.js +1630 -0
  68. package/dist/src/commands/functions.js.map +1 -0
  69. package/dist/src/commands/group-type-configs.d.ts +2 -0
  70. package/dist/src/commands/group-type-configs.js +87 -0
  71. package/dist/src/commands/group-type-configs.js.map +1 -0
  72. package/dist/src/commands/groups.d.ts +2 -0
  73. package/dist/src/commands/groups.js +65 -113
  74. package/dist/src/commands/groups.js.map +1 -1
  75. package/dist/src/commands/guides.d.ts +223 -0
  76. package/dist/src/commands/guides.js +627 -69
  77. package/dist/src/commands/guides.js.map +1 -1
  78. package/dist/src/commands/init.d.ts +37 -0
  79. package/dist/src/commands/init.js +1693 -208
  80. package/dist/src/commands/init.js.map +1 -1
  81. package/dist/src/commands/integrations.d.ts +2 -0
  82. package/dist/src/commands/integrations.js +428 -187
  83. package/dist/src/commands/integrations.js.map +1 -1
  84. package/dist/src/commands/llm.d.ts +2 -0
  85. package/dist/src/commands/llm.js +4 -2
  86. package/dist/src/commands/llm.js.map +1 -1
  87. package/dist/src/commands/locks.d.ts +8 -0
  88. package/dist/src/commands/locks.js +175 -0
  89. package/dist/src/commands/locks.js.map +1 -0
  90. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  91. package/dist/src/commands/metadata-category-configs.js +113 -0
  92. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  93. package/dist/src/commands/metadata.d.ts +2 -0
  94. package/dist/src/commands/metadata.js +288 -0
  95. package/dist/src/commands/metadata.js.map +1 -0
  96. package/dist/src/commands/prompts.d.ts +2 -0
  97. package/dist/src/commands/prompts.js +322 -634
  98. package/dist/src/commands/prompts.js.map +1 -1
  99. package/dist/src/commands/rule-sets.d.ts +3 -0
  100. package/dist/src/commands/rule-sets.js +139 -148
  101. package/dist/src/commands/rule-sets.js.map +1 -1
  102. package/dist/src/commands/scripts.d.ts +30 -0
  103. package/dist/src/commands/scripts.js +688 -0
  104. package/dist/src/commands/scripts.js.map +1 -0
  105. package/dist/src/commands/secrets.d.ts +2 -0
  106. package/dist/src/commands/secrets.js +109 -0
  107. package/dist/src/commands/secrets.js.map +1 -0
  108. package/dist/src/commands/sessions.d.ts +2 -0
  109. package/dist/src/commands/sessions.js +76 -0
  110. package/dist/src/commands/sessions.js.map +1 -0
  111. package/dist/src/commands/skill.d.ts +2 -0
  112. package/dist/src/commands/skill.js +29 -0
  113. package/dist/src/commands/skill.js.map +1 -0
  114. package/dist/src/commands/sync-app-settings.d.ts +158 -0
  115. package/dist/src/commands/sync-app-settings.js +328 -0
  116. package/dist/src/commands/sync-app-settings.js.map +1 -0
  117. package/dist/src/commands/sync.d.ts +2670 -0
  118. package/dist/src/commands/sync.js +17144 -834
  119. package/dist/src/commands/sync.js.map +1 -1
  120. package/dist/src/commands/tokens.d.ts +2 -0
  121. package/dist/src/commands/tokens.js +132 -22
  122. package/dist/src/commands/tokens.js.map +1 -1
  123. package/dist/src/commands/users.d.ts +2 -0
  124. package/dist/src/commands/users.js +542 -24
  125. package/dist/src/commands/users.js.map +1 -1
  126. package/dist/src/commands/vars.d.ts +8 -0
  127. package/dist/src/commands/vars.js +97 -0
  128. package/dist/src/commands/vars.js.map +1 -0
  129. package/dist/src/commands/waitlist.d.ts +2 -0
  130. package/dist/src/commands/waitlist.js +12 -11
  131. package/dist/src/commands/waitlist.js.map +1 -1
  132. package/dist/src/commands/webhooks.d.ts +31 -0
  133. package/dist/src/commands/webhooks.js +633 -0
  134. package/dist/src/commands/webhooks.js.map +1 -0
  135. package/dist/src/commands/workflows.d.ts +88 -0
  136. package/dist/src/commands/workflows.js +1568 -742
  137. package/dist/src/commands/workflows.js.map +1 -1
  138. package/dist/src/lib/access-rule-display.d.ts +21 -0
  139. package/dist/src/lib/access-rule-display.js +34 -0
  140. package/dist/src/lib/access-rule-display.js.map +1 -0
  141. package/dist/src/lib/api-client.d.ts +2550 -0
  142. package/dist/src/lib/api-client.js +2503 -160
  143. package/dist/src/lib/api-client.js.map +1 -1
  144. package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
  145. package/dist/src/lib/app-settings-descriptor.js +583 -0
  146. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  147. package/dist/src/lib/auth-flow.d.ts +8 -0
  148. package/dist/src/lib/batch.d.ts +26 -0
  149. package/dist/src/lib/batch.js +32 -0
  150. package/dist/src/lib/batch.js.map +1 -0
  151. package/dist/src/lib/block-layout.d.ts +160 -0
  152. package/dist/src/lib/block-layout.js +451 -0
  153. package/dist/src/lib/block-layout.js.map +1 -0
  154. package/dist/src/lib/block-selector.d.ts +58 -0
  155. package/dist/src/lib/block-selector.js +92 -0
  156. package/dist/src/lib/block-selector.js.map +1 -0
  157. package/dist/src/lib/canonical-json.d.ts +12 -0
  158. package/dist/src/lib/canonical-json.js +35 -0
  159. package/dist/src/lib/canonical-json.js.map +1 -0
  160. package/dist/src/lib/channel.d.ts +30 -0
  161. package/dist/src/lib/channel.js +68 -0
  162. package/dist/src/lib/channel.js.map +1 -0
  163. package/dist/src/lib/cli-manifest.d.ts +68 -0
  164. package/dist/src/lib/cli-manifest.js +71 -0
  165. package/dist/src/lib/cli-manifest.js.map +1 -0
  166. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
  167. package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
  168. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  169. package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
  170. package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
  171. package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
  172. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
  173. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
  174. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  175. package/dist/src/lib/collection-export.d.ts +184 -0
  176. package/dist/src/lib/collection-export.js +252 -0
  177. package/dist/src/lib/collection-export.js.map +1 -0
  178. package/dist/src/lib/config-json-field.d.ts +28 -0
  179. package/dist/src/lib/config-json-field.js +56 -0
  180. package/dist/src/lib/config-json-field.js.map +1 -0
  181. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  182. package/dist/src/lib/config-object-descriptor.js +740 -0
  183. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  184. package/dist/src/lib/config-payload.d.ts +92 -0
  185. package/dist/src/lib/config-payload.js +161 -0
  186. package/dist/src/lib/config-payload.js.map +1 -0
  187. package/dist/src/lib/config-surface.d.ts +141 -0
  188. package/dist/src/lib/config-surface.js +368 -0
  189. package/dist/src/lib/config-surface.js.map +1 -0
  190. package/dist/src/lib/config-toml.d.ts +10 -0
  191. package/dist/src/lib/config-toml.js +42 -0
  192. package/dist/src/lib/config-toml.js.map +1 -0
  193. package/dist/src/lib/config.d.ts +71 -0
  194. package/dist/src/lib/config.js +71 -68
  195. package/dist/src/lib/config.js.map +1 -1
  196. package/dist/src/lib/confirm-prompt.d.ts +83 -0
  197. package/dist/src/lib/confirm-prompt.js +110 -0
  198. package/dist/src/lib/confirm-prompt.js.map +1 -0
  199. package/dist/src/lib/constants.d.ts +11 -0
  200. package/dist/src/lib/constants.js +12 -0
  201. package/dist/src/lib/constants.js.map +1 -0
  202. package/dist/src/lib/crash-handlers.d.ts +20 -0
  203. package/dist/src/lib/crash-handlers.js +49 -0
  204. package/dist/src/lib/crash-handlers.js.map +1 -0
  205. package/dist/src/lib/credentials-store.d.ts +104 -0
  206. package/dist/src/lib/credentials-store.js +336 -0
  207. package/dist/src/lib/credentials-store.js.map +1 -0
  208. package/dist/src/lib/csv.d.ts +47 -0
  209. package/dist/src/lib/csv.js +172 -0
  210. package/dist/src/lib/csv.js.map +1 -0
  211. package/dist/src/lib/data-input.d.ts +23 -0
  212. package/dist/src/lib/data-input.js +50 -0
  213. package/dist/src/lib/data-input.js.map +1 -0
  214. package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
  215. package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
  216. package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
  217. package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
  218. package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
  219. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
  220. package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
  221. package/dist/src/lib/db-codegen/dbNaming.js +180 -0
  222. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
  223. package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
  224. package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
  225. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
  226. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
  227. package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
  228. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
  229. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  230. package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
  231. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  232. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
  233. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
  234. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  235. package/dist/src/lib/deprecation.d.ts +22 -0
  236. package/dist/src/lib/deprecation.js +43 -0
  237. package/dist/src/lib/deprecation.js.map +1 -0
  238. package/dist/src/lib/document-export-permissions.d.ts +30 -0
  239. package/dist/src/lib/document-export-permissions.js +54 -0
  240. package/dist/src/lib/document-export-permissions.js.map +1 -0
  241. package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
  242. package/dist/src/lib/document-ingest-artifact.js +505 -0
  243. package/dist/src/lib/document-ingest-artifact.js.map +1 -0
  244. package/dist/src/lib/document-ingest-input.d.ts +51 -0
  245. package/dist/src/lib/document-ingest-input.js +132 -0
  246. package/dist/src/lib/document-ingest-input.js.map +1 -0
  247. package/dist/src/lib/document-ingest-rows.d.ts +137 -0
  248. package/dist/src/lib/document-ingest-rows.js +181 -0
  249. package/dist/src/lib/document-ingest-rows.js.map +1 -0
  250. package/dist/src/lib/document-ingest.d.ts +101 -0
  251. package/dist/src/lib/document-ingest.js +384 -0
  252. package/dist/src/lib/document-ingest.js.map +1 -0
  253. package/dist/src/lib/env-resolver-core.d.ts +258 -0
  254. package/dist/src/lib/env-resolver-core.js +447 -0
  255. package/dist/src/lib/env-resolver-core.js.map +1 -0
  256. package/dist/src/lib/env-resolver.d.ts +99 -0
  257. package/dist/src/lib/env-resolver.js +153 -0
  258. package/dist/src/lib/env-resolver.js.map +1 -0
  259. package/dist/src/lib/fetch.d.ts +5 -0
  260. package/dist/src/lib/function-bundle.d.ts +147 -0
  261. package/dist/src/lib/function-bundle.js +341 -0
  262. package/dist/src/lib/function-bundle.js.map +1 -0
  263. package/dist/src/lib/function-collect.d.ts +123 -0
  264. package/dist/src/lib/function-collect.js +610 -0
  265. package/dist/src/lib/function-collect.js.map +1 -0
  266. package/dist/src/lib/function-db-types.d.ts +202 -0
  267. package/dist/src/lib/function-db-types.js +870 -0
  268. package/dist/src/lib/function-db-types.js.map +1 -0
  269. package/dist/src/lib/function-document-types.d.ts +144 -0
  270. package/dist/src/lib/function-document-types.js +370 -0
  271. package/dist/src/lib/function-document-types.js.map +1 -0
  272. package/dist/src/lib/function-grants-preflight.d.ts +64 -0
  273. package/dist/src/lib/function-grants-preflight.js +105 -0
  274. package/dist/src/lib/function-grants-preflight.js.map +1 -0
  275. package/dist/src/lib/function-log-lines.d.ts +76 -0
  276. package/dist/src/lib/function-log-lines.js +160 -0
  277. package/dist/src/lib/function-log-lines.js.map +1 -0
  278. package/dist/src/lib/function-log-row.d.ts +29 -0
  279. package/dist/src/lib/function-log-row.js +73 -0
  280. package/dist/src/lib/function-log-row.js.map +1 -0
  281. package/dist/src/lib/function-log-tail.d.ts +132 -0
  282. package/dist/src/lib/function-log-tail.js +262 -0
  283. package/dist/src/lib/function-log-tail.js.map +1 -0
  284. package/dist/src/lib/function-run.d.ts +289 -0
  285. package/dist/src/lib/function-run.js +389 -0
  286. package/dist/src/lib/function-run.js.map +1 -0
  287. package/dist/src/lib/function-schema-codegen.d.ts +143 -0
  288. package/dist/src/lib/function-schema-codegen.js +420 -0
  289. package/dist/src/lib/function-schema-codegen.js.map +1 -0
  290. package/dist/src/lib/function-sync.d.ts +459 -0
  291. package/dist/src/lib/function-sync.js +1258 -0
  292. package/dist/src/lib/function-sync.js.map +1 -0
  293. package/dist/src/lib/function-trigger-listing.d.ts +27 -0
  294. package/dist/src/lib/function-trigger-listing.js +70 -0
  295. package/dist/src/lib/function-trigger-listing.js.map +1 -0
  296. package/dist/src/lib/function-typecheck.d.ts +86 -0
  297. package/dist/src/lib/function-typecheck.js +370 -0
  298. package/dist/src/lib/function-typecheck.js.map +1 -0
  299. package/dist/src/lib/function-versions.d.ts +122 -0
  300. package/dist/src/lib/function-versions.js +182 -0
  301. package/dist/src/lib/function-versions.js.map +1 -0
  302. package/dist/src/lib/generated-allowlist.d.ts +28 -0
  303. package/dist/src/lib/generated-allowlist.js +281 -0
  304. package/dist/src/lib/generated-allowlist.js.map +1 -0
  305. package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
  306. package/dist/src/lib/generated-config-surfaces.js +10569 -0
  307. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  308. package/dist/src/lib/generated-sdk-types.d.ts +12 -0
  309. package/dist/src/lib/generated-sdk-types.js +13 -0
  310. package/dist/src/lib/generated-sdk-types.js.map +1 -0
  311. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  312. package/dist/src/lib/generated-template-lint.js +624 -0
  313. package/dist/src/lib/generated-template-lint.js.map +1 -0
  314. package/dist/src/lib/init-adopt.d.ts +16 -0
  315. package/dist/src/lib/init-adopt.js +34 -0
  316. package/dist/src/lib/init-adopt.js.map +1 -0
  317. package/dist/src/lib/init-assets.d.ts +39 -0
  318. package/dist/src/lib/init-assets.js +97 -0
  319. package/dist/src/lib/init-assets.js.map +1 -0
  320. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  321. package/dist/src/lib/init-client-platforms.js +71 -0
  322. package/dist/src/lib/init-client-platforms.js.map +1 -0
  323. package/dist/src/lib/init-config.d.ts +98 -0
  324. package/dist/src/lib/init-config.js +186 -0
  325. package/dist/src/lib/init-config.js.map +1 -0
  326. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  327. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  328. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  329. package/dist/src/lib/init-ios-links.d.ts +91 -0
  330. package/dist/src/lib/init-ios-links.js +219 -0
  331. package/dist/src/lib/init-ios-links.js.map +1 -0
  332. package/dist/src/lib/init-plan.d.ts +80 -0
  333. package/dist/src/lib/init-plan.js +95 -0
  334. package/dist/src/lib/init-plan.js.map +1 -0
  335. package/dist/src/lib/init-production-env.d.ts +48 -0
  336. package/dist/src/lib/init-production-env.js +59 -0
  337. package/dist/src/lib/init-production-env.js.map +1 -0
  338. package/dist/src/lib/init-schema.d.ts +74 -0
  339. package/dist/src/lib/init-schema.js +358 -0
  340. package/dist/src/lib/init-schema.js.map +1 -0
  341. package/dist/src/lib/init-xcode.d.ts +34 -0
  342. package/dist/src/lib/init-xcode.js +138 -0
  343. package/dist/src/lib/init-xcode.js.map +1 -0
  344. package/dist/src/lib/integration-request-config.d.ts +30 -0
  345. package/dist/src/lib/integration-request-config.js +145 -0
  346. package/dist/src/lib/integration-request-config.js.map +1 -0
  347. package/dist/src/lib/integration-selector.d.ts +42 -0
  348. package/dist/src/lib/integration-selector.js +46 -0
  349. package/dist/src/lib/integration-selector.js.map +1 -0
  350. package/dist/src/lib/ios-app-id.d.ts +34 -0
  351. package/dist/src/lib/ios-app-id.js +69 -0
  352. package/dist/src/lib/ios-app-id.js.map +1 -0
  353. package/dist/src/lib/list-options.d.ts +68 -0
  354. package/dist/src/lib/list-options.js +89 -0
  355. package/dist/src/lib/list-options.js.map +1 -0
  356. package/dist/src/lib/local-state.d.ts +55 -0
  357. package/dist/src/lib/local-state.js +167 -0
  358. package/dist/src/lib/local-state.js.map +1 -0
  359. package/dist/src/lib/local-test-cases.d.ts +63 -0
  360. package/dist/src/lib/local-test-cases.js +136 -0
  361. package/dist/src/lib/local-test-cases.js.map +1 -0
  362. package/dist/src/lib/log-inspection.d.ts +715 -0
  363. package/dist/src/lib/log-inspection.js +816 -0
  364. package/dist/src/lib/log-inspection.js.map +1 -0
  365. package/dist/src/lib/logout-admin-session.d.ts +33 -0
  366. package/dist/src/lib/logout-admin-session.js +70 -0
  367. package/dist/src/lib/logout-admin-session.js.map +1 -0
  368. package/dist/src/lib/migration-nag.d.ts +49 -0
  369. package/dist/src/lib/migration-nag.js +163 -0
  370. package/dist/src/lib/migration-nag.js.map +1 -0
  371. package/dist/src/lib/object-status-filter.d.ts +22 -0
  372. package/dist/src/lib/object-status-filter.js +45 -0
  373. package/dist/src/lib/object-status-filter.js.map +1 -0
  374. package/dist/src/lib/output.d.ts +124 -0
  375. package/dist/src/lib/output.js +219 -8
  376. package/dist/src/lib/output.js.map +1 -1
  377. package/dist/src/lib/package-manager.d.ts +140 -0
  378. package/dist/src/lib/package-manager.js +305 -0
  379. package/dist/src/lib/package-manager.js.map +1 -0
  380. package/dist/src/lib/paginate.d.ts +98 -0
  381. package/dist/src/lib/paginate.js +112 -0
  382. package/dist/src/lib/paginate.js.map +1 -0
  383. package/dist/src/lib/platform-owned.d.ts +63 -0
  384. package/dist/src/lib/platform-owned.js +85 -0
  385. package/dist/src/lib/platform-owned.js.map +1 -0
  386. package/dist/src/lib/project-config.d.ts +122 -0
  387. package/dist/src/lib/project-config.js +244 -0
  388. package/dist/src/lib/project-config.js.map +1 -0
  389. package/dist/src/lib/prompt-cost-format.d.ts +11 -0
  390. package/dist/src/lib/prompt-cost-format.js +41 -0
  391. package/dist/src/lib/prompt-cost-format.js.map +1 -0
  392. package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
  393. package/dist/src/lib/prompt-schema-codegen.js +462 -0
  394. package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
  395. package/dist/src/lib/query-operators.d.ts +43 -0
  396. package/dist/src/lib/query-operators.js +80 -0
  397. package/dist/src/lib/query-operators.js.map +1 -0
  398. package/dist/src/lib/record-filter.d.ts +18 -0
  399. package/dist/src/lib/record-filter.js +55 -0
  400. package/dist/src/lib/record-filter.js.map +1 -0
  401. package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
  402. package/dist/src/lib/refresh-admin-credentials.js +123 -0
  403. package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
  404. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  405. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  406. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  407. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  408. package/dist/src/lib/resolve-init-server.js +77 -0
  409. package/dist/src/lib/resolve-init-server.js.map +1 -0
  410. package/dist/src/lib/resolve-owner.d.ts +19 -0
  411. package/dist/src/lib/resolve-owner.js +20 -0
  412. package/dist/src/lib/resolve-owner.js.map +1 -0
  413. package/dist/src/lib/resolve-platform.d.ts +74 -0
  414. package/dist/src/lib/resolve-platform.js +105 -0
  415. package/dist/src/lib/resolve-platform.js.map +1 -0
  416. package/dist/src/lib/run-status.d.ts +19 -0
  417. package/dist/src/lib/run-status.generated.d.ts +39 -0
  418. package/dist/src/lib/run-status.generated.js +66 -0
  419. package/dist/src/lib/run-status.generated.js.map +1 -0
  420. package/dist/src/lib/run-status.js +19 -0
  421. package/dist/src/lib/run-status.js.map +1 -0
  422. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  423. package/dist/src/lib/server-text-normalization.js +90 -0
  424. package/dist/src/lib/server-text-normalization.js.map +1 -0
  425. package/dist/src/lib/server-url.d.ts +22 -0
  426. package/dist/src/lib/server-url.js +33 -0
  427. package/dist/src/lib/server-url.js.map +1 -0
  428. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  429. package/dist/src/lib/signing-secret-status.js +116 -0
  430. package/dist/src/lib/signing-secret-status.js.map +1 -0
  431. package/dist/src/lib/skill-installer.d.ts +71 -0
  432. package/dist/src/lib/skill-installer.js +441 -0
  433. package/dist/src/lib/skill-installer.js.map +1 -0
  434. package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
  435. package/dist/src/lib/snapshot-audit-source.js +58 -0
  436. package/dist/src/lib/snapshot-audit-source.js.map +1 -0
  437. package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
  438. package/dist/src/lib/snapshot-audit-store.js +196 -0
  439. package/dist/src/lib/snapshot-audit-store.js.map +1 -0
  440. package/dist/src/lib/snapshot-audit.d.ts +207 -0
  441. package/dist/src/lib/snapshot-audit.js +431 -0
  442. package/dist/src/lib/snapshot-audit.js.map +1 -0
  443. package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
  444. package/dist/src/lib/snapshot-build-rows.js +87 -0
  445. package/dist/src/lib/snapshot-build-rows.js.map +1 -0
  446. package/dist/src/lib/snapshot-build.d.ts +50 -0
  447. package/dist/src/lib/snapshot-build.js +111 -0
  448. package/dist/src/lib/snapshot-build.js.map +1 -0
  449. package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
  450. package/dist/src/lib/snapshot-manifest-layout.js +70 -0
  451. package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
  452. package/dist/src/lib/snapshots.d.ts +98 -0
  453. package/dist/src/lib/snapshots.js +294 -0
  454. package/dist/src/lib/snapshots.js.map +1 -0
  455. package/dist/src/lib/step-run-table.d.ts +43 -0
  456. package/dist/src/lib/step-run-table.js +129 -0
  457. package/dist/src/lib/step-run-table.js.map +1 -0
  458. package/dist/src/lib/storage-pending-retry.d.ts +26 -0
  459. package/dist/src/lib/storage-pending-retry.js +42 -0
  460. package/dist/src/lib/storage-pending-retry.js.map +1 -0
  461. package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
  462. package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
  463. package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
  464. package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
  465. package/dist/src/lib/swift-codegen/banners.js +25 -0
  466. package/dist/src/lib/swift-codegen/banners.js.map +1 -0
  467. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
  468. package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
  469. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  470. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  471. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  472. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  473. package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
  474. package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
  475. package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
  476. package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
  477. package/dist/src/lib/swift-codegen/generator.js +457 -0
  478. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  479. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
  480. package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
  481. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  482. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
  483. package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
  484. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
  485. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  486. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  487. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  488. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  489. package/dist/src/lib/sync-dir-selector.js +30 -0
  490. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  491. package/dist/src/lib/sync-paths.d.ts +128 -0
  492. package/dist/src/lib/sync-paths.js +195 -0
  493. package/dist/src/lib/sync-paths.js.map +1 -0
  494. package/dist/src/lib/sync-resource-types.d.ts +563 -0
  495. package/dist/src/lib/sync-resource-types.js +1073 -0
  496. package/dist/src/lib/sync-resource-types.js.map +1 -0
  497. package/dist/src/lib/sync-selectors.d.ts +138 -0
  498. package/dist/src/lib/sync-selectors.js +289 -0
  499. package/dist/src/lib/sync-selectors.js.map +1 -0
  500. package/dist/src/lib/template.d.ts +170 -0
  501. package/dist/src/lib/template.js +484 -68
  502. package/dist/src/lib/template.js.map +1 -1
  503. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  504. package/dist/src/lib/test-case-file-names.js +91 -0
  505. package/dist/src/lib/test-case-file-names.js.map +1 -0
  506. package/dist/src/lib/test-case-keys.d.ts +29 -0
  507. package/dist/src/lib/test-case-keys.js +55 -0
  508. package/dist/src/lib/test-case-keys.js.map +1 -0
  509. package/dist/src/lib/test-case-variables.d.ts +29 -0
  510. package/dist/src/lib/test-case-variables.js +71 -0
  511. package/dist/src/lib/test-case-variables.js.map +1 -0
  512. package/dist/src/lib/token-inject.d.ts +56 -0
  513. package/dist/src/lib/token-inject.js +204 -0
  514. package/dist/src/lib/token-inject.js.map +1 -0
  515. package/dist/src/lib/toml-database-config.d.ts +123 -0
  516. package/dist/src/lib/toml-database-config.js +544 -0
  517. package/dist/src/lib/toml-database-config.js.map +1 -0
  518. package/dist/src/lib/toml-metadata-config.d.ts +151 -0
  519. package/dist/src/lib/toml-metadata-config.js +476 -0
  520. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  521. package/dist/src/lib/toml-native-form.d.ts +46 -0
  522. package/dist/src/lib/toml-native-form.js +78 -0
  523. package/dist/src/lib/toml-native-form.js.map +1 -0
  524. package/dist/src/lib/toml-params-validator.d.ts +129 -0
  525. package/dist/src/lib/toml-params-validator.js +298 -0
  526. package/dist/src/lib/toml-params-validator.js.map +1 -0
  527. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  528. package/dist/src/lib/toml-scalar-edit.js +283 -0
  529. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  530. package/dist/src/lib/user-selector.d.ts +24 -0
  531. package/dist/src/lib/user-selector.js +33 -0
  532. package/dist/src/lib/user-selector.js.map +1 -0
  533. package/dist/src/lib/version-check.d.ts +35 -0
  534. package/dist/src/lib/version-check.js +241 -0
  535. package/dist/src/lib/version-check.js.map +1 -0
  536. package/dist/src/lib/watch.d.ts +121 -0
  537. package/dist/src/lib/watch.js +169 -0
  538. package/dist/src/lib/watch.js.map +1 -0
  539. package/dist/src/lib/web-url.d.ts +40 -0
  540. package/dist/src/lib/web-url.js +76 -0
  541. package/dist/src/lib/web-url.js.map +1 -0
  542. package/dist/src/lib/webhook-deliver.d.ts +209 -0
  543. package/dist/src/lib/webhook-deliver.js +519 -0
  544. package/dist/src/lib/webhook-deliver.js.map +1 -0
  545. package/dist/src/lib/workflow-apply.d.ts +110 -0
  546. package/dist/src/lib/workflow-apply.js +164 -0
  547. package/dist/src/lib/workflow-apply.js.map +1 -0
  548. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  549. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  550. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  551. package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
  552. package/dist/src/lib/workflow-codegen/generator.js +361 -0
  553. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  554. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
  555. package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
  556. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  557. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  558. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  559. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  560. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
  561. package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
  562. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  563. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  564. package/dist/src/lib/workflow-config-apply.js +137 -0
  565. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  566. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  567. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  568. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  569. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  570. package/dist/src/lib/workflow-defaults.js +41 -0
  571. package/dist/src/lib/workflow-defaults.js.map +1 -0
  572. package/dist/src/lib/workflow-fragments.d.ts +64 -0
  573. package/dist/src/lib/workflow-fragments.js +342 -0
  574. package/dist/src/lib/workflow-fragments.js.map +1 -0
  575. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  576. package/dist/src/lib/workflow-include-preserve.js +286 -0
  577. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  578. package/dist/src/lib/workflow-payload.d.ts +98 -0
  579. package/dist/src/lib/workflow-payload.js +178 -0
  580. package/dist/src/lib/workflow-payload.js.map +1 -0
  581. package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
  582. package/dist/src/lib/workflow-toml-validator.js +770 -0
  583. package/dist/src/lib/workflow-toml-validator.js.map +1 -0
  584. package/dist/src/lib/workflow-usage.d.ts +196 -0
  585. package/dist/src/lib/workflow-usage.js +310 -0
  586. package/dist/src/lib/workflow-usage.js.map +1 -0
  587. package/dist/src/types/index.d.ts +591 -0
  588. package/dist/src/validators.d.ts +65 -0
  589. package/dist/src/validators.js +64 -0
  590. package/dist/src/validators.js.map +1 -0
  591. package/package.json +34 -9
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared source-directory resolution for the CLI codegen commands
3
+ * (`workflows codegen` #1442, `databases codegen` #814, `databases schema
4
+ * generate` #666, issue #1510).
5
+ *
6
+ * Each of them reads a set of `*.toml` schemas out of one synced sub-directory
7
+ * (`workflows/`, `database-type-configs/`) and renders `*.generated.ts` beside
8
+ * them. It used to take four branches to say which directory that was: a
9
+ * `--dir` override, the resolved environment, an `--app`-alone fallback, and —
10
+ * when none of those answered — a SCAN of every `primitive/<env>/<subdir>` that resolved
11
+ * if exactly one environment happened to have the directory. The scan is how
12
+ * `PRIMITIVE_ENV=dev workflows codegen` could generate from the `alpha` TOML,
13
+ * and how two codegen commands in one run could read two different
14
+ * environments.
15
+ *
16
+ * There is one branch now (#3154, intent criterion 4): the sub-directory of
17
+ * the environment's own tree. `resolveSyncDir()` refuses rather than guesses,
18
+ * so an ambiguous project, an unknown `--env` and no project at all each reach
19
+ * the user as themselves.
20
+ *
21
+ * Design notes that survive:
22
+ * - Throw plain `Error`s; the calling commands keep their existing
23
+ * `error(); process.exit(1)` convention (they catch at the boundary). A
24
+ * `PrimitiveEnvError` from the resolver is an Error too, and its message is
25
+ * already the one the user needs.
26
+ * - Do NOT use `resolveAppId()` — it is auth-oriented, and codegen is
27
+ * offline.
28
+ */
29
+ export interface ResolveCodegenSourceDirArgs {
30
+ /** The synced sub-directory to resolve, e.g. "workflows" or "database-type-configs". */
31
+ subdir: string;
32
+ }
33
+ /**
34
+ * The single source directory a codegen command reads its `*.toml` schemas
35
+ * from. Throws with a user-facing message when the environment cannot be
36
+ * resolved or the directory is not there.
37
+ */
38
+ export declare function resolveCodegenSourceDir(args: ResolveCodegenSourceDirArgs): string;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Shared source-directory resolution for the CLI codegen commands
3
+ * (`workflows codegen` #1442, `databases codegen` #814, `databases schema
4
+ * generate` #666, issue #1510).
5
+ *
6
+ * Each of them reads a set of `*.toml` schemas out of one synced sub-directory
7
+ * (`workflows/`, `database-type-configs/`) and renders `*.generated.ts` beside
8
+ * them. It used to take four branches to say which directory that was: a
9
+ * `--dir` override, the resolved environment, an `--app`-alone fallback, and —
10
+ * when none of those answered — a SCAN of every `primitive/<env>/<subdir>` that resolved
11
+ * if exactly one environment happened to have the directory. The scan is how
12
+ * `PRIMITIVE_ENV=dev workflows codegen` could generate from the `alpha` TOML,
13
+ * and how two codegen commands in one run could read two different
14
+ * environments.
15
+ *
16
+ * There is one branch now (#3154, intent criterion 4): the sub-directory of
17
+ * the environment's own tree. `resolveSyncDir()` refuses rather than guesses,
18
+ * so an ambiguous project, an unknown `--env` and no project at all each reach
19
+ * the user as themselves.
20
+ *
21
+ * Design notes that survive:
22
+ * - Throw plain `Error`s; the calling commands keep their existing
23
+ * `error(); process.exit(1)` convention (they catch at the boundary). A
24
+ * `PrimitiveEnvError` from the resolver is an Error too, and its message is
25
+ * already the one the user needs.
26
+ * - Do NOT use `resolveAppId()` — it is auth-oriented, and codegen is
27
+ * offline.
28
+ */
29
+ import { existsSync } from "fs";
30
+ import { join } from "path";
31
+ import { resolveSyncDir } from "../sync-paths.js";
32
+ /**
33
+ * The single source directory a codegen command reads its `*.toml` schemas
34
+ * from. Throws with a user-facing message when the environment cannot be
35
+ * resolved or the directory is not there.
36
+ */
37
+ export function resolveCodegenSourceDir(args) {
38
+ const { subdir } = args;
39
+ const dir = join(resolveSyncDir(), subdir);
40
+ if (!existsSync(dir)) {
41
+ throw new Error(`No ${subdir}/ directory in ${dir}. Run \`primitive config pull\` first, ` +
42
+ `or select another environment with --env <name>.`);
43
+ }
44
+ return dir;
45
+ }
46
+ //# sourceMappingURL=resolveCodegenSourceDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveCodegenSourceDir.js","sourceRoot":"","sources":["../../../../src/lib/codegen-shared/resolveCodegenSourceDir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAiC;IACvE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,MAAM,MAAM,kBAAkB,GAAG,yCAAyC;YACxE,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * The `collections.json` artifact, and the decisions an import makes from it
3
+ * (#3643).
4
+ *
5
+ * `documents export-all` / `documents import` carry Yjs state, blobs,
6
+ * permissions and aliases, but nothing about collections: which exist, what
7
+ * each contains, who its members are and at what level, its group grants, and
8
+ * who owns it. This module is the half of `collections export` /
9
+ * `collections import` that needs no server — the file's shape, the plan the
10
+ * import builds from it, the comparisons that plan rests on, and the exit
11
+ * rule — so each is checkable on its own, as `document-ingest-rows` and
12
+ * `snapshot-build-rows` are for their commands.
13
+ *
14
+ * The one thing that does NOT live here is resolution: which userId an email
15
+ * answers to, whether a document exists, whether a group exists. Those are
16
+ * reads against a real server, they are the facts the plan is built from, and
17
+ * the command performs them and hands the answers in.
18
+ */
19
+ /** The only file version this CLI reads or writes. */
20
+ export declare const COLLECTION_EXPORT_VERSION = 1;
21
+ /** Its name inside an export directory, beside `manifest.json`. */
22
+ export declare const COLLECTION_EXPORT_FILENAME = "collections.json";
23
+ export type CollectionPermission = "reader" | "read-write";
24
+ export interface ExportedOwner {
25
+ /** The SOURCE app's userId. Meaningful in the target only for a same-app import. */
26
+ userId: string;
27
+ /** Present when the source server could resolve it; the only cross-app identity. */
28
+ email?: string;
29
+ }
30
+ export interface ExportedMember extends ExportedOwner {
31
+ permission: CollectionPermission;
32
+ }
33
+ export interface ExportedGroupGrant {
34
+ groupType: string;
35
+ groupId: string;
36
+ permission: CollectionPermission;
37
+ }
38
+ export interface ExportedCollectionDocument {
39
+ documentId: string;
40
+ addedAt?: string | null;
41
+ }
42
+ export interface ExportedCollection {
43
+ collectionId: string;
44
+ name: string;
45
+ description: string | null;
46
+ collectionType: string | null;
47
+ contextId: string | null;
48
+ createdAt: string | null;
49
+ owner: ExportedOwner | null;
50
+ documents: ExportedCollectionDocument[];
51
+ members: ExportedMember[];
52
+ groups: ExportedGroupGrant[];
53
+ }
54
+ export interface CollectionExportFile {
55
+ version: number;
56
+ exportedAt: string;
57
+ sourceAppId: string;
58
+ collectionCount: number;
59
+ collections: ExportedCollection[];
60
+ }
61
+ /**
62
+ * Resolve the `<path>` an import was given to the file it must read.
63
+ *
64
+ * Both forms work: an export DIRECTORY (the one `documents export-all` also
65
+ * wrote into) and the file itself.
66
+ */
67
+ export declare function resolveCollectionExportPath(inputPath: string): string;
68
+ /**
69
+ * Read and validate `collections.json`.
70
+ *
71
+ * Every refusal here happens BEFORE any request: a file this CLI cannot read
72
+ * is not a reason to start writing collections into the target app.
73
+ */
74
+ export declare function readCollectionExportFile(inputPath: string): CollectionExportFile;
75
+ export type CollectionImportAction = "create" | "merge" | "skip" | "refused";
76
+ /** Which part of a collection a per-item problem is about. */
77
+ export type CollectionProblemKind = "owner" | "collection" | "document" | "member" | "group";
78
+ export interface CollectionImportProblem {
79
+ sourceCollectionId: string;
80
+ name: string;
81
+ kind: CollectionProblemKind;
82
+ /** The offending identity: a userId, an email, a documentId, `type/id`. */
83
+ id: string;
84
+ reason: string;
85
+ }
86
+ /** The target collection a name match found, as far as compatibility cares. */
87
+ export interface ExistingTargetCollection {
88
+ collectionId: string;
89
+ createdBy: string;
90
+ collectionType: string | null;
91
+ contextId: string | null;
92
+ }
93
+ export interface CollectionResolution {
94
+ /** The userId the owner resolved to in the TARGET app, or null. */
95
+ ownerUserId: string | null;
96
+ /** Why the owner could not be resolved — becomes the refusal's reason. */
97
+ ownerReason?: string;
98
+ /** The target collection carrying this exact name, if any. */
99
+ existing?: ExistingTargetCollection | null;
100
+ /** The source id of an earlier collection in the same file with this name. */
101
+ duplicateOfSourceId?: string | null;
102
+ }
103
+ export interface CollectionPlanRow {
104
+ sourceCollectionId: string;
105
+ name: string;
106
+ action: CollectionImportAction;
107
+ /** Why it was refused or skipped. Absent for `create`/`merge`. */
108
+ reason?: string;
109
+ /** Where it lands: known up front only for a `merge`. */
110
+ targetCollectionId?: string;
111
+ /** The resolved owner, for a `create`. */
112
+ ownerUserId?: string;
113
+ /** A refusal that must also be REPORTED as a problem carries it here. */
114
+ problem?: Omit<CollectionImportProblem, "sourceCollectionId" | "name">;
115
+ }
116
+ /**
117
+ * Which of `createdBy`, `collectionType` and `contextId` a name match differs
118
+ * on — the fields the server will never let an update change
119
+ * (`collections-controller.ts` rejects type and context; `createdBy` is
120
+ * immutable), so a difference cannot be merged away (F2).
121
+ *
122
+ * Returns null when the match is compatible.
123
+ */
124
+ export declare function incompatibleField(collection: Pick<ExportedCollection, "collectionType" | "contextId">, existing: ExistingTargetCollection, ownerUserId: string): "owner" | "collectionType" | "contextId" | null;
125
+ /** What to do about one recorded group grant, given the target's grants. */
126
+ export type GrantDisposition = "grant" | "already-applied" | "update";
127
+ /**
128
+ * Compare a recorded grant with the target's.
129
+ *
130
+ * A grant already at the recorded level counts as applied without a write. A
131
+ * grant at a DIFFERENT level is sent: #3163 recomputes each document's
132
+ * materialized `DocumentGroupPermission` from its live sources on every
133
+ * collection-wide change, so the new level reaches what the group's members can
134
+ * actually do. Before that it did not — `materializeDGP` left an existing row
135
+ * alone once the collection was one of its sources — which is why the import
136
+ * used to report such a grant instead of changing it (F3).
137
+ */
138
+ export declare function grantDisposition(wanted: ExportedGroupGrant, targetGrants: ExportedGroupGrant[]): GrantDisposition;
139
+ /** The line a level change is announced with, named from and to. */
140
+ export declare function grantUpdateLine(groupLabel: string, existingPermission: string, wantedPermission: string): string;
141
+ /**
142
+ * What a server refusal reads as in a per-item problem.
143
+ *
144
+ * The prose alone is not enough to act on. `COLLECTION_FANOUT_LIMIT` is the
145
+ * case that matters here: past `COLLECTION_GROUP_FANOUT_MAX` documents the
146
+ * server refuses a collection-wide group change whole (#3163), and the remedy —
147
+ * split the collection, or grant its documents one at a time — is nothing like
148
+ * the remedy for a 404 group. Carrying the code makes the two tellable apart by
149
+ * a script as well as by a reader.
150
+ */
151
+ export declare function serverReason(err: any): string;
152
+ /**
153
+ * Decide what happens to one collection, from the facts the resolve phase read.
154
+ *
155
+ * Nothing here talks to a server: every input is already an answer.
156
+ */
157
+ export declare function planCollection(collection: ExportedCollection, resolution: CollectionResolution, options: {
158
+ overwrite: boolean;
159
+ }): CollectionPlanRow;
160
+ /**
161
+ * The source ids of earlier same-named collections, keyed by source id.
162
+ *
163
+ * The FIRST collection with a name is the one that may land; every later one
164
+ * maps to it here and is refused.
165
+ */
166
+ export declare function duplicateNameSources(collections: ExportedCollection[]): Map<string, string>;
167
+ export interface CollectionImportSummary {
168
+ created: number;
169
+ merged: number;
170
+ skipped: number;
171
+ refused: number;
172
+ groupsGranted: number;
173
+ membersAdded: number;
174
+ documentsAdded: number;
175
+ }
176
+ export declare function emptyImportSummary(): CollectionImportSummary;
177
+ /**
178
+ * The exit rule, in one place: 1 when any per-item problem was reported.
179
+ *
180
+ * A skip for a name collision is NOT a problem — it is the documented way to
181
+ * re-run an import without `--overwrite`. A refusal is, because something the
182
+ * operator asked for did not happen.
183
+ */
184
+ export declare function importExitCode(problems: CollectionImportProblem[]): number;
@@ -0,0 +1,252 @@
1
+ /**
2
+ * The `collections.json` artifact, and the decisions an import makes from it
3
+ * (#3643).
4
+ *
5
+ * `documents export-all` / `documents import` carry Yjs state, blobs,
6
+ * permissions and aliases, but nothing about collections: which exist, what
7
+ * each contains, who its members are and at what level, its group grants, and
8
+ * who owns it. This module is the half of `collections export` /
9
+ * `collections import` that needs no server — the file's shape, the plan the
10
+ * import builds from it, the comparisons that plan rests on, and the exit
11
+ * rule — so each is checkable on its own, as `document-ingest-rows` and
12
+ * `snapshot-build-rows` are for their commands.
13
+ *
14
+ * The one thing that does NOT live here is resolution: which userId an email
15
+ * answers to, whether a document exists, whether a group exists. Those are
16
+ * reads against a real server, they are the facts the plan is built from, and
17
+ * the command performs them and hands the answers in.
18
+ */
19
+ import fs from "node:fs";
20
+ import path from "node:path";
21
+ /** The only file version this CLI reads or writes. */
22
+ export const COLLECTION_EXPORT_VERSION = 1;
23
+ /** Its name inside an export directory, beside `manifest.json`. */
24
+ export const COLLECTION_EXPORT_FILENAME = "collections.json";
25
+ /**
26
+ * Resolve the `<path>` an import was given to the file it must read.
27
+ *
28
+ * Both forms work: an export DIRECTORY (the one `documents export-all` also
29
+ * wrote into) and the file itself.
30
+ */
31
+ export function resolveCollectionExportPath(inputPath) {
32
+ if (fs.existsSync(inputPath) && fs.statSync(inputPath).isDirectory()) {
33
+ return path.join(inputPath, COLLECTION_EXPORT_FILENAME);
34
+ }
35
+ return inputPath;
36
+ }
37
+ /**
38
+ * Read and validate `collections.json`.
39
+ *
40
+ * Every refusal here happens BEFORE any request: a file this CLI cannot read
41
+ * is not a reason to start writing collections into the target app.
42
+ */
43
+ export function readCollectionExportFile(inputPath) {
44
+ const filePath = resolveCollectionExportPath(inputPath);
45
+ if (!fs.existsSync(filePath)) {
46
+ throw new Error(`No ${COLLECTION_EXPORT_FILENAME} found at ${filePath}. Point the ` +
47
+ `import at an export directory holding one, or at the file itself.`);
48
+ }
49
+ let parsed;
50
+ try {
51
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
52
+ }
53
+ catch (err) {
54
+ throw new Error(`${filePath} is not valid JSON: ${err.message}`);
55
+ }
56
+ if (parsed?.version !== COLLECTION_EXPORT_VERSION) {
57
+ throw new Error(`${filePath} declares version ${JSON.stringify(parsed?.version)}; ` +
58
+ `this CLI reads version ${COLLECTION_EXPORT_VERSION} only.`);
59
+ }
60
+ const collections = Array.isArray(parsed.collections) ? parsed.collections : [];
61
+ return {
62
+ version: parsed.version,
63
+ exportedAt: String(parsed.exportedAt ?? ""),
64
+ sourceAppId: String(parsed.sourceAppId ?? ""),
65
+ collectionCount: Number(parsed.collectionCount ?? collections.length),
66
+ collections,
67
+ };
68
+ }
69
+ /**
70
+ * Which of `createdBy`, `collectionType` and `contextId` a name match differs
71
+ * on — the fields the server will never let an update change
72
+ * (`collections-controller.ts` rejects type and context; `createdBy` is
73
+ * immutable), so a difference cannot be merged away (F2).
74
+ *
75
+ * Returns null when the match is compatible.
76
+ */
77
+ export function incompatibleField(collection, existing, ownerUserId) {
78
+ if (existing.createdBy !== ownerUserId)
79
+ return "owner";
80
+ // The server defaults an unset type to "default", so the file's null and the
81
+ // target's "default" are the same collection type, not a difference.
82
+ const wanted = collection.collectionType || "default";
83
+ if ((existing.collectionType || "default") !== wanted)
84
+ return "collectionType";
85
+ if ((existing.contextId ?? null) !== (collection.contextId ?? null)) {
86
+ return "contextId";
87
+ }
88
+ return null;
89
+ }
90
+ /**
91
+ * Compare a recorded grant with the target's.
92
+ *
93
+ * A grant already at the recorded level counts as applied without a write. A
94
+ * grant at a DIFFERENT level is sent: #3163 recomputes each document's
95
+ * materialized `DocumentGroupPermission` from its live sources on every
96
+ * collection-wide change, so the new level reaches what the group's members can
97
+ * actually do. Before that it did not — `materializeDGP` left an existing row
98
+ * alone once the collection was one of its sources — which is why the import
99
+ * used to report such a grant instead of changing it (F3).
100
+ */
101
+ export function grantDisposition(wanted, targetGrants) {
102
+ const existing = targetGrants.find((g) => g.groupType === wanted.groupType && g.groupId === wanted.groupId);
103
+ if (!existing)
104
+ return "grant";
105
+ return existing.permission === wanted.permission
106
+ ? "already-applied"
107
+ : "update";
108
+ }
109
+ /** The line a level change is announced with, named from and to. */
110
+ export function grantUpdateLine(groupLabel, existingPermission, wantedPermission) {
111
+ return (`${groupLabel}: ${existingPermission} → ${wantedPermission} ` +
112
+ `(the level the export records)`);
113
+ }
114
+ /**
115
+ * What a server refusal reads as in a per-item problem.
116
+ *
117
+ * The prose alone is not enough to act on. `COLLECTION_FANOUT_LIMIT` is the
118
+ * case that matters here: past `COLLECTION_GROUP_FANOUT_MAX` documents the
119
+ * server refuses a collection-wide group change whole (#3163), and the remedy —
120
+ * split the collection, or grant its documents one at a time — is nothing like
121
+ * the remedy for a 404 group. Carrying the code makes the two tellable apart by
122
+ * a script as well as by a reader.
123
+ */
124
+ export function serverReason(err) {
125
+ const message = err?.message ?? String(err);
126
+ const code = typeof err?.code === "string" ? err.code : null;
127
+ return code ? `${message} (${code})` : message;
128
+ }
129
+ /**
130
+ * Decide what happens to one collection, from the facts the resolve phase read.
131
+ *
132
+ * Nothing here talks to a server: every input is already an answer.
133
+ */
134
+ export function planCollection(collection, resolution, options) {
135
+ const base = {
136
+ sourceCollectionId: collection.collectionId,
137
+ name: collection.name,
138
+ };
139
+ // A name is unique per app, so two collections in one file that share one
140
+ // could not both land. The second is refused before anything is written,
141
+ // naming both source ids.
142
+ if (resolution.duplicateOfSourceId) {
143
+ return {
144
+ ...base,
145
+ action: "refused",
146
+ reason: `the export lists two collections named "${collection.name}" ` +
147
+ `(${resolution.duplicateOfSourceId} and ${collection.collectionId}); ` +
148
+ `a collection name is unique per app, so only one can land. Rename ` +
149
+ `one in the export and re-run.`,
150
+ problem: {
151
+ kind: "collection",
152
+ id: collection.collectionId,
153
+ reason: `duplicate name "${collection.name}" in the export file`,
154
+ },
155
+ };
156
+ }
157
+ if (!resolution.ownerUserId) {
158
+ const reason = resolution.ownerReason ??
159
+ `its owner could not be resolved in the target app`;
160
+ return {
161
+ ...base,
162
+ action: "refused",
163
+ reason: `${reason}. Pass --owner <userId-or-email> to give every collection in this run an owner that exists here.`,
164
+ problem: {
165
+ kind: "owner",
166
+ id: collection.owner?.email || collection.owner?.userId || "(none)",
167
+ reason,
168
+ },
169
+ };
170
+ }
171
+ const existing = resolution.existing ?? null;
172
+ if (!existing) {
173
+ return {
174
+ ...base,
175
+ action: "create",
176
+ ownerUserId: resolution.ownerUserId,
177
+ };
178
+ }
179
+ // A name match is checked for compatibility WHETHER OR NOT --overwrite was
180
+ // given: none of these fields can be changed after creation, so an
181
+ // incompatible match can never become the collection the file describes, and
182
+ // reporting it under --dry-run is the point (F2).
183
+ const field = incompatibleField(collection, existing, resolution.ownerUserId);
184
+ if (field) {
185
+ const reason = `a collection named "${collection.name}" already exists in the target ` +
186
+ `(${existing.collectionId}) with a different ${field}, which cannot be ` +
187
+ `changed after creation`;
188
+ return {
189
+ ...base,
190
+ action: "refused",
191
+ targetCollectionId: existing.collectionId,
192
+ reason: `${reason}. Delete or rename it, or rename the collection in the export.`,
193
+ problem: { kind: "collection", id: existing.collectionId, reason },
194
+ };
195
+ }
196
+ if (!options.overwrite) {
197
+ return {
198
+ ...base,
199
+ action: "skip",
200
+ targetCollectionId: existing.collectionId,
201
+ reason: `already exists (use --overwrite to merge into ${existing.collectionId})`,
202
+ };
203
+ }
204
+ return {
205
+ ...base,
206
+ action: "merge",
207
+ targetCollectionId: existing.collectionId,
208
+ ownerUserId: resolution.ownerUserId,
209
+ };
210
+ }
211
+ /**
212
+ * The source ids of earlier same-named collections, keyed by source id.
213
+ *
214
+ * The FIRST collection with a name is the one that may land; every later one
215
+ * maps to it here and is refused.
216
+ */
217
+ export function duplicateNameSources(collections) {
218
+ const firstByName = new Map();
219
+ const duplicates = new Map();
220
+ for (const collection of collections) {
221
+ const seen = firstByName.get(collection.name);
222
+ if (seen) {
223
+ duplicates.set(collection.collectionId, seen);
224
+ }
225
+ else {
226
+ firstByName.set(collection.name, collection.collectionId);
227
+ }
228
+ }
229
+ return duplicates;
230
+ }
231
+ export function emptyImportSummary() {
232
+ return {
233
+ created: 0,
234
+ merged: 0,
235
+ skipped: 0,
236
+ refused: 0,
237
+ groupsGranted: 0,
238
+ membersAdded: 0,
239
+ documentsAdded: 0,
240
+ };
241
+ }
242
+ /**
243
+ * The exit rule, in one place: 1 when any per-item problem was reported.
244
+ *
245
+ * A skip for a name collision is NOT a problem — it is the documented way to
246
+ * re-run an import without `--overwrite`. A refusal is, because something the
247
+ * operator asked for did not happen.
248
+ */
249
+ export function importExitCode(problems) {
250
+ return problems.length > 0 ? 1 : 0;
251
+ }
252
+ //# sourceMappingURL=collection-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-export.js","sourceRoot":"","sources":["../../../src/lib/collection-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Emitting a `type: "json"` field (a JSON Schema, a provider-options blob) as
3
+ * TOML — the rule `config pull` writes every such field through.
4
+ *
5
+ * Issue #1446 wrote it for workflows and prompts inside `sync.ts`; #3317 moved
6
+ * it here because `serializeFunction` lives in its own module and needed the
7
+ * same rule rather than a second, subtly different copy of it. A function's
8
+ * schemas are stored as JSON STRINGS on the row, so the module that could not
9
+ * reach this one emitted nothing at all for them, and the comparison read the
10
+ * server as holding no schema.
11
+ */
12
+ /**
13
+ * The TOML value for one `type: "json"` field, or `undefined` when the record
14
+ * holds none (the key is then omitted).
15
+ *
16
+ * The parsed value is emitted as a native table whenever it round-trips
17
+ * faithfully (`canEmitNative === null`), falling back to the JSON string only
18
+ * for the values TOML silently drops (`null` / `undefined` anywhere inside).
19
+ * The empty object `{}` is a real, distinct value (for a schema: "accepts
20
+ * anything") and emits as an empty table, so it survives a pull → push cycle
21
+ * instead of being cleared server-side.
22
+ *
23
+ * The sponsor-approved decision is to always move to native aggressively — no
24
+ * form preservation — so this does not consult the existing file's form.
25
+ *
26
+ * `subject` names the object in the fallback warning, e.g. `Workflow 'greet'`.
27
+ */
28
+ export declare function serializeJsonField(value: any, fieldName: string, subject: string, log: (message: string) => void): any;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Emitting a `type: "json"` field (a JSON Schema, a provider-options blob) as
3
+ * TOML — the rule `config pull` writes every such field through.
4
+ *
5
+ * Issue #1446 wrote it for workflows and prompts inside `sync.ts`; #3317 moved
6
+ * it here because `serializeFunction` lives in its own module and needed the
7
+ * same rule rather than a second, subtly different copy of it. A function's
8
+ * schemas are stored as JSON STRINGS on the row, so the module that could not
9
+ * reach this one emitted nothing at all for them, and the comparison read the
10
+ * server as holding no schema.
11
+ */
12
+ import { canEmitNative } from "./toml-native-form.js";
13
+ /**
14
+ * The TOML value for one `type: "json"` field, or `undefined` when the record
15
+ * holds none (the key is then omitted).
16
+ *
17
+ * The parsed value is emitted as a native table whenever it round-trips
18
+ * faithfully (`canEmitNative === null`), falling back to the JSON string only
19
+ * for the values TOML silently drops (`null` / `undefined` anywhere inside).
20
+ * The empty object `{}` is a real, distinct value (for a schema: "accepts
21
+ * anything") and emits as an empty table, so it survives a pull → push cycle
22
+ * instead of being cleared server-side.
23
+ *
24
+ * The sponsor-approved decision is to always move to native aggressively — no
25
+ * form preservation — so this does not consult the existing file's form.
26
+ *
27
+ * `subject` names the object in the fallback warning, e.g. `Workflow 'greet'`.
28
+ */
29
+ export function serializeJsonField(value, fieldName, subject, log) {
30
+ if (value === undefined || value === null)
31
+ return undefined;
32
+ // JSON fields arrive from the server GET parsed; defensively accept a JSON
33
+ // string too (a function's schemas are always one, and an inline-authored
34
+ // file re-serialized here is another).
35
+ let obj = value;
36
+ if (typeof value === "string") {
37
+ try {
38
+ obj = JSON.parse(value);
39
+ }
40
+ catch {
41
+ // Not valid JSON — keep the original string as the emitted value.
42
+ return value;
43
+ }
44
+ }
45
+ if (obj && typeof obj === "object") {
46
+ const reason = canEmitNative(obj);
47
+ if (reason) {
48
+ log(`${subject}: cannot emit \`${fieldName}\` as native TOML (${reason}); using JSON string.`);
49
+ return JSON.stringify(obj);
50
+ }
51
+ return obj;
52
+ }
53
+ // A non-object value (unexpected) — preserve it as a JSON string.
54
+ return JSON.stringify(obj);
55
+ }
56
+ //# sourceMappingURL=config-json-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-json-field.js","sourceRoot":"","sources":["../../../src/lib/config-json-field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAU,EACV,SAAiB,EACjB,OAAe,EACf,GAA8B;IAE9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,2EAA2E;IAC3E,0EAA0E;IAC1E,uCAAuC;IACvC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CACD,GAAG,OAAO,mBAAmB,SAAS,sBAAsB,MAAM,uBAAuB,CAC1F,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,kEAAkE;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}