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,153 @@
1
+ /**
2
+ * Environment resolution (CLI side).
3
+ *
4
+ * The algorithm itself lives in `env-resolver-core.ts` — the one copy the Vite
5
+ * plugin and the Swift pre-build script also run (#2873). This module is the
6
+ * CLI's thin wrapper around it: process-lifetime caching, the `--env` override
7
+ * commander sets, and — load-bearing — the CLI's own FULL field-level
8
+ * validation via `validateProjectConfig()`. The core carries only the version
9
+ * and structural checks the other readers need; running the CLI's validation
10
+ * first is what keeps `getProjectConfig()` and `getCurrentEnvironment()` from
11
+ * ever disagreeing about the same file.
12
+ *
13
+ * The resolution order is:
14
+ *
15
+ * 1. Explicit --env <name> flag (set via setCurrentEnvName from bin/primitive.ts)
16
+ * 2. PRIMITIVE_ENV environment variable
17
+ * 3. The per-machine selection in .primitive/local.json (`primitive env use`)
18
+ * 4. The project config's committed defaultEnvironment
19
+ * 5. If the project has exactly one environment, that one
20
+ * 6. null (legacy mode — fall back to ~/.primitive/credentials.json)
21
+ *
22
+ * Commands read the resolved environment once via getCurrentEnvironment().
23
+ * The resolution is cached for the lifetime of the process.
24
+ */
25
+ import { loadProjectConfig, findProjectConfigPath, findProjectRoot, } from "./project-config.js";
26
+ import { PrimitiveEnvError, localStatePathForConfigPath, missingConfigMessage, readLocalSelection, selectEnvironmentName, } from "./env-resolver-core.js";
27
+ /** Process-lifetime cache for resolution results. */
28
+ let cachedResolution;
29
+ let explicitEnvName = null;
30
+ let cachedProjectConfig;
31
+ /**
32
+ * Called by bin/primitive.ts when the user passes --env <name> on the command
33
+ * line. Must be called before any command code runs so subsequent calls to
34
+ * getCurrentEnvironment() see the override.
35
+ */
36
+ export function setCurrentEnvName(name) {
37
+ explicitEnvName = name;
38
+ // Invalidate any cached resolution so the next getCurrentEnvironment()
39
+ // picks up the new override.
40
+ cachedResolution = undefined;
41
+ }
42
+ /**
43
+ * Forces the resolver to re-read the project config on the next call.
44
+ * Used by tests and by commands that mutate the project config.
45
+ */
46
+ export function resetEnvResolver() {
47
+ cachedResolution = undefined;
48
+ cachedProjectConfig = undefined;
49
+ }
50
+ /**
51
+ * Loads and caches the project config. Returns null if no
52
+ * primitive/config.json is present. Throws ProjectConfigError on a broken config.
53
+ */
54
+ export function getProjectConfig() {
55
+ if (cachedProjectConfig === undefined) {
56
+ cachedProjectConfig = loadProjectConfig();
57
+ }
58
+ return cachedProjectConfig ?? null;
59
+ }
60
+ /**
61
+ * Reads this machine's environment selection (`primitive env use`), or null
62
+ * when nothing is selected. Throws PrimitiveEnvError on corrupt local state —
63
+ * `env list` / `env show` surface that distinctly instead of quietly falling
64
+ * back to the committed default.
65
+ */
66
+ export function getLocalSelection() {
67
+ const configPath = findProjectConfigPath();
68
+ if (!configPath)
69
+ return null;
70
+ return readLocalSelection(configPath);
71
+ }
72
+ /** Absolute path of the local-state file for the current project, if any. */
73
+ export function getLocalStatePath() {
74
+ const configPath = findProjectConfigPath();
75
+ return configPath ? localStatePathForConfigPath(configPath) : null;
76
+ }
77
+ /**
78
+ * Resolves the current environment, or returns null if we're running in
79
+ * legacy mode (no primitive/config.json present).
80
+ *
81
+ * This never throws for a missing project config — that's legitimate
82
+ * "legacy mode" usage. It DOES throw if the project config exists but the
83
+ * requested environment doesn't.
84
+ */
85
+ export function getCurrentEnvironment() {
86
+ if (cachedResolution !== undefined)
87
+ return cachedResolution;
88
+ // Validate through the CLI's own loader first: the core's checks are a
89
+ // subset, and a config the CLI rejects must never resolve here.
90
+ const project = getProjectConfig();
91
+ if (!project) {
92
+ cachedResolution = null;
93
+ return null;
94
+ }
95
+ const configPath = findProjectConfigPath();
96
+ const projectRoot = findProjectRoot();
97
+ const { name, source } = selectEnvironmentName(project, {
98
+ explicitEnvName,
99
+ envVarName: process.env.PRIMITIVE_ENV || null,
100
+ localSelection: readLocalSelection(configPath),
101
+ configPath,
102
+ });
103
+ cachedResolution = {
104
+ name,
105
+ config: project.environments[name],
106
+ projectConfigPath: configPath,
107
+ projectRoot,
108
+ source,
109
+ };
110
+ return cachedResolution;
111
+ }
112
+ /**
113
+ * The resolved environment, or the one refusal (#3154, intent criterion 5).
114
+ *
115
+ * `getCurrentEnvironment()` answers `null` outside a project, which used to
116
+ * mean "legacy mode — fall back to `./config` and `~/.primitive/`". There is
117
+ * no such mode any more: the environment is the ONLY thing that names the
118
+ * configuration tree, the app and the server, so a caller that needs one asks
119
+ * here and gets an error naming what is missing instead of a second answer.
120
+ *
121
+ * Everything else propagates untouched. `no-selection`, `unknown-environment`,
122
+ * `corrupt-local-state` and `stale-layout` are real answers about a real
123
+ * project, and the old `safeEnv()` swallowing them is exactly how a typo in
124
+ * `--env` used to end up writing into `./config`.
125
+ */
126
+ export function requireCurrentEnvironment() {
127
+ const env = getCurrentEnvironment();
128
+ if (env)
129
+ return env;
130
+ throw new PrimitiveEnvError("missing-config", missingConfigMessage(process.cwd()));
131
+ }
132
+ /**
133
+ * Returns the current environment name for display purposes (e.g. in status
134
+ * headers). Returns null in legacy mode. Swallows resolution errors so the
135
+ * header never crashes the CLI.
136
+ */
137
+ export function getCurrentEnvNameSafe() {
138
+ try {
139
+ return getCurrentEnvironment()?.name ?? null;
140
+ }
141
+ catch {
142
+ return null;
143
+ }
144
+ }
145
+ /**
146
+ * Returns the explicit name set via setCurrentEnvName(), for commands that
147
+ * need to know whether the user passed --env vs. relying on defaults.
148
+ */
149
+ export function getExplicitEnvName() {
150
+ return explicitEnvName;
151
+ }
152
+ export { PrimitiveEnvError };
153
+ //# sourceMappingURL=env-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-resolver.js","sourceRoot":"","sources":["../../../src/lib/env-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAGhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAehC,qDAAqD;AACrD,IAAI,gBAAwD,CAAC;AAC7D,IAAI,eAAe,GAAkB,IAAI,CAAC;AAC1C,IAAI,mBAAqD,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,eAAe,GAAG,IAAI,CAAC;IACvB,uEAAuE;IACvE,6BAA6B;IAC7B,gBAAgB,GAAG,SAAS,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,gBAAgB,GAAG,SAAS,CAAC;IAC7B,mBAAmB,GAAG,SAAS,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,mBAAmB,GAAG,iBAAiB,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,mBAAmB,IAAI,IAAI,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,OAAO,UAAU,CAAC,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC;IAE5D,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gBAAgB,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,qBAAqB,EAAG,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,EAAG,CAAC;IAEvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE;QACtD,eAAe;QACf,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI;QAC7C,cAAc,EAAE,kBAAkB,CAAC,UAAU,CAAC;QAC9C,UAAU;KACX,CAAC,CAAC;IAEH,gBAAgB,GAAG;QACjB,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;QAClC,iBAAiB,EAAE,UAAU;QAC7B,WAAW;QACX,MAAM;KACP,CAAC;IACF,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;IACpC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,IAAI,iBAAiB,CACzB,gBAAgB,EAChB,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,OAAO,qBAAqB,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Custom fetch that accepts self-signed certificates for localhost.
3
+ * Used for local development with HTTPS.
4
+ */
5
+ export declare function fetchWithTLS(url: string, options?: RequestInit): Promise<Response>;
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Building a server function's bundle, in the CLI (#3179, project
3
+ * `server-functions`).
4
+ *
5
+ * The intent decides that the build happens here and never on the server:
6
+ * `config push` runs esbuild over the authored `entry`, inlines the npm
7
+ * dependencies, and ships the built bundle next to the authored source bytes
8
+ * in one envelope. The server verifies the hash and stores the object; it does
9
+ * not compile anything.
10
+ *
11
+ * ── The two import rules ─────────────────────────────────────────────────
12
+ *
13
+ * They look contradictory and are not (F-005):
14
+ *
15
+ * - A **filesystem import** — relative or absolute — must stay inside the
16
+ * config tree. `entry`, every import it reaches, and every symlink they
17
+ * traverse are realpath-resolved and checked against the tree root, so a
18
+ * push can never read a file off a developer's disk that the tree does not
19
+ * contain.
20
+ * - A **bare package specifier** is exempt. It resolves through Node into an
21
+ * ancestor `node_modules`, which is outside every config tree by
22
+ * construction; esbuild inlines it into the bundle, and it is never
23
+ * captured as an authored source (so `config pull` never writes
24
+ * `node_modules` content back).
25
+ *
26
+ * The exemption follows the specifier, not the path a file happens to sit at.
27
+ * A resolver plugin records the files a BARE specifier reached (and the files
28
+ * those reach in turn), so `import "../../node_modules/private/index.js"` — a
29
+ * relative filesystem import that merely lands in a `node_modules` directory —
30
+ * is still an escape and still refused. Deciding by path would have let that
31
+ * one specifier read any file on the disk and upload it.
32
+ *
33
+ * `primitive-functions` is the one bare specifier left EXTERNAL: the loader
34
+ * (#3180) supplies it at invoke time, so baking a copy into every bundle would
35
+ * pin the SDK version to whenever the function was last pushed.
36
+ *
37
+ * ── The retired specifier ────────────────────────────────────────────────
38
+ *
39
+ * That module was called `primitive-sdk` until #3209. This file is the one
40
+ * place in the repo that still writes the old name on purpose: without a
41
+ * detector, an author who copied an older example gets esbuild's generic
42
+ * `Could not resolve "primitive-sdk"`, which reads as a missing dependency
43
+ * rather than a rename. `RETIRED_SDK_MODULE` below is that detector, and
44
+ * `cli/tests/unit/retired-sdk-name-guard-3209.test.ts` allowlists exactly this
45
+ * site while proving the name appears nowhere else.
46
+ *
47
+ * The refusal is made TWICE, because one mechanism cannot see both halves:
48
+ *
49
+ * - the resolver plugin catches a runtime import, which is the one that
50
+ * would otherwise reach the loader and fail there;
51
+ * - a scan of the authored source catches the TYPE-ONLY spellings —
52
+ * `import type … from`, `export type … from`, and a plain named import
53
+ * used only in type position. TypeScript erases all three, and esbuild
54
+ * erases them before any resolver callback runs, so the plugin never sees
55
+ * a specifier to compare. Those imports build and push silently, leaving
56
+ * the stored source teaching an import that no longer exists.
57
+ *
58
+ * The scan is anchored at the start of a line so that prose about the retired
59
+ * name — a `//` comment, a `*` doc-comment line, a string holding an example —
60
+ * does not refuse a push. Missing an import someone hid mid-line is the safe
61
+ * direction to be wrong in; refusing a valid push is not.
62
+ *
63
+ * ── The canonical envelope encoding ──────────────────────────────────────
64
+ *
65
+ * `canonicalFunctionEnvelopeBytes` reproduces `canonicalEnvelopeBytes` in
66
+ * `src/services/function-bundle-storage.ts` byte for byte. The server hashes
67
+ * the envelope to decide whether a push is a no-op; the CLI hashes it to decide
68
+ * whether to make the call at all, and the two answers have to agree or a push
69
+ * the CLI called unchanged lands as a new version (or worse, the reverse).
70
+ * `cli/tests/unit/function-bundle-3179.test.ts` pins them against each other.
71
+ */
72
+ /** The module the loader supplies; never bundled. */
73
+ export declare const PRIMITIVE_FUNCTIONS_MODULE = "primitive-functions";
74
+ /** What that module was called before #3209. Refused at push, by name. */
75
+ export declare const RETIRED_SDK_MODULE = "primitive-sdk";
76
+ /** Whether an authored source imports the retired module in any spelling. */
77
+ export declare function importsRetiredModule(source: string): boolean;
78
+ /** Matches the server's `FUNCTION_ENVELOPE_SCHEMA_VERSION`. */
79
+ /**
80
+ * 2 since #3187: the envelope carries the collected query MANIFEST.
81
+ *
82
+ * Bumped rather than added quietly, because the encoding the hash is taken
83
+ * over changed: the manifest is part of config-version identity (D3187-SO-005)
84
+ * precisely so a manifest change makes a new version and a collector fix can
85
+ * reach a tree that was pushed before it.
86
+ */
87
+ export declare const FUNCTION_ENVELOPE_SCHEMA_VERSION = 2;
88
+ /** A push that cannot proceed: a missing entry, a build error, or an escape. */
89
+ export declare class FunctionBuildError extends Error {
90
+ constructor(message: string);
91
+ }
92
+ export interface FunctionSourceFile {
93
+ /** Tree-relative, POSIX-separated — the path stored in the envelope. */
94
+ path: string;
95
+ /** The authored bytes, untouched. */
96
+ content: Buffer;
97
+ }
98
+ export interface BuiltFunctionBundle {
99
+ /** The entry, normalized tree-relative. */
100
+ entry: string;
101
+ /** The built bundle. */
102
+ bundle: Buffer;
103
+ /** sha256 of the bundle — what a durable run pins its code by. */
104
+ contentHash: string;
105
+ /** Every authored file the build read, sorted by path. */
106
+ sources: FunctionSourceFile[];
107
+ }
108
+ export interface EnvelopeShape {
109
+ schemaVersion: number;
110
+ entry: string;
111
+ toml: string;
112
+ sources: Array<{
113
+ path: string;
114
+ content: string;
115
+ }>;
116
+ bundle: string;
117
+ /** base64 of the collected manifest JSON, or null when there is none. */
118
+ manifest?: string | null;
119
+ /**
120
+ * base64 of the project's authored `models/models.toml` bytes, or absent
121
+ * when the project declares no document schema (#3455). Must stay identical
122
+ * to the server's `FunctionEnvelope.documentSchema`.
123
+ */
124
+ documentSchema?: string | null;
125
+ }
126
+ /**
127
+ * The canonical encoding both sides hash. Fixed key order, sources sorted by
128
+ * path — see the module note; this must stay identical to the server's.
129
+ */
130
+ export declare function canonicalFunctionEnvelopeBytes(envelope: EnvelopeShape): Uint8Array;
131
+ export declare function functionEnvelopeHash(envelope: EnvelopeShape): string;
132
+ /** Whether a tree-relative path names a `node_modules` file. */
133
+ export declare function isDependencyPath(path: string): boolean;
134
+ /**
135
+ * Build one function's bundle and collect its authored sources.
136
+ *
137
+ * Throws `FunctionBuildError` — never a raw esbuild error — so `config push`
138
+ * has one thing to report and nothing is pushed for that function.
139
+ */
140
+ export declare function buildFunctionBundle(options: {
141
+ /** The config tree root (`.primitive/` or the configured dir). */
142
+ configDir: string;
143
+ /** `entry` as authored in the TOML, relative to the config tree root. */
144
+ entry: string;
145
+ /** Only for the message; the key is not part of the build. */
146
+ functionKey: string;
147
+ }): Promise<BuiltFunctionBundle>;
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Building a server function's bundle, in the CLI (#3179, project
3
+ * `server-functions`).
4
+ *
5
+ * The intent decides that the build happens here and never on the server:
6
+ * `config push` runs esbuild over the authored `entry`, inlines the npm
7
+ * dependencies, and ships the built bundle next to the authored source bytes
8
+ * in one envelope. The server verifies the hash and stores the object; it does
9
+ * not compile anything.
10
+ *
11
+ * ── The two import rules ─────────────────────────────────────────────────
12
+ *
13
+ * They look contradictory and are not (F-005):
14
+ *
15
+ * - A **filesystem import** — relative or absolute — must stay inside the
16
+ * config tree. `entry`, every import it reaches, and every symlink they
17
+ * traverse are realpath-resolved and checked against the tree root, so a
18
+ * push can never read a file off a developer's disk that the tree does not
19
+ * contain.
20
+ * - A **bare package specifier** is exempt. It resolves through Node into an
21
+ * ancestor `node_modules`, which is outside every config tree by
22
+ * construction; esbuild inlines it into the bundle, and it is never
23
+ * captured as an authored source (so `config pull` never writes
24
+ * `node_modules` content back).
25
+ *
26
+ * The exemption follows the specifier, not the path a file happens to sit at.
27
+ * A resolver plugin records the files a BARE specifier reached (and the files
28
+ * those reach in turn), so `import "../../node_modules/private/index.js"` — a
29
+ * relative filesystem import that merely lands in a `node_modules` directory —
30
+ * is still an escape and still refused. Deciding by path would have let that
31
+ * one specifier read any file on the disk and upload it.
32
+ *
33
+ * `primitive-functions` is the one bare specifier left EXTERNAL: the loader
34
+ * (#3180) supplies it at invoke time, so baking a copy into every bundle would
35
+ * pin the SDK version to whenever the function was last pushed.
36
+ *
37
+ * ── The retired specifier ────────────────────────────────────────────────
38
+ *
39
+ * That module was called `primitive-sdk` until #3209. This file is the one
40
+ * place in the repo that still writes the old name on purpose: without a
41
+ * detector, an author who copied an older example gets esbuild's generic
42
+ * `Could not resolve "primitive-sdk"`, which reads as a missing dependency
43
+ * rather than a rename. `RETIRED_SDK_MODULE` below is that detector, and
44
+ * `cli/tests/unit/retired-sdk-name-guard-3209.test.ts` allowlists exactly this
45
+ * site while proving the name appears nowhere else.
46
+ *
47
+ * The refusal is made TWICE, because one mechanism cannot see both halves:
48
+ *
49
+ * - the resolver plugin catches a runtime import, which is the one that
50
+ * would otherwise reach the loader and fail there;
51
+ * - a scan of the authored source catches the TYPE-ONLY spellings —
52
+ * `import type … from`, `export type … from`, and a plain named import
53
+ * used only in type position. TypeScript erases all three, and esbuild
54
+ * erases them before any resolver callback runs, so the plugin never sees
55
+ * a specifier to compare. Those imports build and push silently, leaving
56
+ * the stored source teaching an import that no longer exists.
57
+ *
58
+ * The scan is anchored at the start of a line so that prose about the retired
59
+ * name — a `//` comment, a `*` doc-comment line, a string holding an example —
60
+ * does not refuse a push. Missing an import someone hid mid-line is the safe
61
+ * direction to be wrong in; refusing a valid push is not.
62
+ *
63
+ * ── The canonical envelope encoding ──────────────────────────────────────
64
+ *
65
+ * `canonicalFunctionEnvelopeBytes` reproduces `canonicalEnvelopeBytes` in
66
+ * `src/services/function-bundle-storage.ts` byte for byte. The server hashes
67
+ * the envelope to decide whether a push is a no-op; the CLI hashes it to decide
68
+ * whether to make the call at all, and the two answers have to agree or a push
69
+ * the CLI called unchanged lands as a new version (or worse, the reverse).
70
+ * `cli/tests/unit/function-bundle-3179.test.ts` pins them against each other.
71
+ */
72
+ import * as esbuild from "esbuild";
73
+ import { createHash } from "crypto";
74
+ import { existsSync, readFileSync, realpathSync } from "fs";
75
+ import { isAbsolute, relative, resolve, sep } from "path";
76
+ /** The module the loader supplies; never bundled. */
77
+ export const PRIMITIVE_FUNCTIONS_MODULE = "primitive-functions";
78
+ /** What that module was called before #3209. Refused at push, by name. */
79
+ export const RETIRED_SDK_MODULE = "primitive-sdk";
80
+ /** The refusal both detectors report, so an author reads one sentence. */
81
+ const retiredModuleRefusal = () => `the '${RETIRED_SDK_MODULE}' module was renamed: import from ` +
82
+ `'${PRIMITIVE_FUNCTIONS_MODULE}' instead`;
83
+ /**
84
+ * Import and export forms naming the retired module, in the type-only
85
+ * spellings esbuild erases before the resolver plugin can see them (see the
86
+ * module note). Anchored at the start of a line, and the specifier must be the
87
+ * WHOLE quoted string, so `primitive-sdk-utils` and `./primitive-sdk.js` are
88
+ * untouched — the same exact match the plugin makes.
89
+ */
90
+ const RETIRED_IMPORT_FORMS = [
91
+ // `import type { X } from "…"`, `export type { X } from "…"`, `export * from
92
+ // "…"`, and every value spelling in between, on one line.
93
+ new RegExp(`^[ \\t]*(?:import|export)[ \\t\\w*{},$]*[ \\t]from[ \\t]*(['"])${RETIRED_SDK_MODULE}\\1`, "m"),
94
+ // The tail of a multi-line named list: `} from "…"`.
95
+ new RegExp(`^[ \\t]*\\}[ \\t]*from[ \\t]*(['"])${RETIRED_SDK_MODULE}\\1`, "m"),
96
+ // A bare side-effect import. The plugin catches this one too; it costs
97
+ // nothing to be sure the scan agrees with it.
98
+ new RegExp(`^[ \\t]*import[ \\t]*(['"])${RETIRED_SDK_MODULE}\\1`, "m"),
99
+ ];
100
+ /** Whether an authored source imports the retired module in any spelling. */
101
+ export function importsRetiredModule(source) {
102
+ return RETIRED_IMPORT_FORMS.some((pattern) => pattern.test(source));
103
+ }
104
+ /** Matches the server's `FUNCTION_ENVELOPE_SCHEMA_VERSION`. */
105
+ /**
106
+ * 2 since #3187: the envelope carries the collected query MANIFEST.
107
+ *
108
+ * Bumped rather than added quietly, because the encoding the hash is taken
109
+ * over changed: the manifest is part of config-version identity (D3187-SO-005)
110
+ * precisely so a manifest change makes a new version and a collector fix can
111
+ * reach a tree that was pushed before it.
112
+ */
113
+ export const FUNCTION_ENVELOPE_SCHEMA_VERSION = 2;
114
+ /** A push that cannot proceed: a missing entry, a build error, or an escape. */
115
+ export class FunctionBuildError extends Error {
116
+ constructor(message) {
117
+ super(message);
118
+ this.name = "FunctionBuildError";
119
+ }
120
+ }
121
+ /**
122
+ * The canonical encoding both sides hash. Fixed key order, sources sorted by
123
+ * path — see the module note; this must stay identical to the server's.
124
+ */
125
+ export function canonicalFunctionEnvelopeBytes(envelope) {
126
+ const canonical = {
127
+ schemaVersion: envelope.schemaVersion,
128
+ entry: envelope.entry,
129
+ toml: envelope.toml,
130
+ sources: [...envelope.sources]
131
+ .map((s) => ({ path: s.path, content: s.content }))
132
+ .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0)),
133
+ bundle: envelope.bundle,
134
+ // #3187 — inside the hash, so a manifest change is a new version.
135
+ // `null` rather than absent when there is none, so the encoding of a
136
+ // manifest-less push is stable rather than depending on a missing key.
137
+ manifest: envelope.manifest ?? null,
138
+ // #3455 — the twin of the server's rule: the key is emitted ONLY when
139
+ // there is a schema, so a tree with no `models/models.toml` builds the
140
+ // same bytes it built before this change and its no-op detection is
141
+ // intact. `undefined` would be dropped by `JSON.stringify` anyway; the
142
+ // spread says the rule rather than relying on that.
143
+ ...(typeof envelope.documentSchema === "string" && envelope.documentSchema
144
+ ? { documentSchema: envelope.documentSchema }
145
+ : {}),
146
+ };
147
+ return new TextEncoder().encode(JSON.stringify(canonical));
148
+ }
149
+ export function functionEnvelopeHash(envelope) {
150
+ return createHash("sha256")
151
+ .update(Buffer.from(canonicalFunctionEnvelopeBytes(envelope)))
152
+ .digest("hex");
153
+ }
154
+ /** POSIX spelling, so a Windows push stores the same paths a macOS one does. */
155
+ const toPosix = (value) => value.split(sep).join("/");
156
+ /** Whether a tree-relative path names a `node_modules` file. */
157
+ export function isDependencyPath(path) {
158
+ return path.split("/").includes("node_modules");
159
+ }
160
+ /**
161
+ * `null` when `candidate` is inside `root`, else the tree-relative-ish spelling
162
+ * to name in the refusal. Lexical only — the caller realpaths first.
163
+ */
164
+ function outsideRoot(root, candidate) {
165
+ const rel = relative(root, candidate);
166
+ if (rel === "" || (!rel.startsWith("..") && !isAbsolute(rel)))
167
+ return null;
168
+ return toPosix(rel);
169
+ }
170
+ function escapeRefusal(what, path) {
171
+ return new FunctionBuildError(`${what} '${path}' resolves outside the config tree root. ` +
172
+ "Filesystem imports must stay inside the config tree; npm packages are " +
173
+ "imported by name and inlined into the bundle.");
174
+ }
175
+ /**
176
+ * Build one function's bundle and collect its authored sources.
177
+ *
178
+ * Throws `FunctionBuildError` — never a raw esbuild error — so `config push`
179
+ * has one thing to report and nothing is pushed for that function.
180
+ */
181
+ export async function buildFunctionBundle(options) {
182
+ const { configDir, entry, functionKey } = options;
183
+ const treeRoot = realpathSync(resolve(configDir));
184
+ // 1. The entry, lexically. An escaping entry is refused as an escape even
185
+ // when the file it names does not exist — "no such file" would be a
186
+ // misleading answer to `entry = "../../etc/passwd"`.
187
+ const entryAbs = resolve(treeRoot, entry);
188
+ const entryEscape = outsideRoot(treeRoot, entryAbs);
189
+ if (entryEscape !== null)
190
+ throw escapeRefusal("entry", toPosix(entry));
191
+ if (!existsSync(entryAbs)) {
192
+ throw new FunctionBuildError(`function '${functionKey}': entry file '${toPosix(entry)}' does not exist`);
193
+ }
194
+ // 2. …and after symlinks.
195
+ const entryReal = realpathSync(entryAbs);
196
+ if (outsideRoot(treeRoot, entryReal) !== null) {
197
+ throw escapeRefusal("entry", toPosix(entry));
198
+ }
199
+ const entryRelative = toPosix(relative(treeRoot, entryReal));
200
+ // Which files a BARE specifier reached. Membership — not the presence of a
201
+ // `node_modules` segment in the path — is what exempts a file from the tree
202
+ // boundary, so a relative or absolute import can never buy the exemption by
203
+ // pointing at a `node_modules` directory (see the module note).
204
+ const dependencyFiles = new Set();
205
+ const rememberDependency = (path) => {
206
+ if (!path)
207
+ return;
208
+ dependencyFiles.add(path);
209
+ try {
210
+ dependencyFiles.add(realpathSync(path));
211
+ }
212
+ catch {
213
+ /* a virtual or already-resolved path; the raw spelling is enough */
214
+ }
215
+ };
216
+ const isDependencyFile = (path) => {
217
+ if (dependencyFiles.has(path))
218
+ return true;
219
+ try {
220
+ return dependencyFiles.has(realpathSync(path));
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ };
226
+ const importBoundaryPlugin = {
227
+ name: "primitive-function-import-boundary",
228
+ setup(build) {
229
+ build.onResolve({ filter: /.*/ }, async (args) => {
230
+ // The nested `build.resolve` below re-enters this callback; the marker
231
+ // is what stops it recursing forever.
232
+ if (args.pluginData?.primitiveBoundaryResolved)
233
+ return null;
234
+ if (args.kind === "entry-point")
235
+ return null;
236
+ // The retired specifier, refused before esbuild can report it as a
237
+ // missing package (#3209). An EXACT match only: `primitive-sdk-utils`
238
+ // is a different package and `./primitive-sdk.ts` is a tree-local file,
239
+ // and both still resolve normally.
240
+ if (args.path === RETIRED_SDK_MODULE) {
241
+ return { errors: [{ text: retiredModuleRefusal() }] };
242
+ }
243
+ const bare = !args.path.startsWith(".") && !isAbsolute(args.path);
244
+ // A dependency's own relative imports are dependency files too — the
245
+ // exemption is inherited down the package's internal graph.
246
+ const fromDependency = !!args.importer && isDependencyFile(args.importer);
247
+ if (!bare && !fromDependency)
248
+ return null;
249
+ const resolved = await build.resolve(args.path, {
250
+ importer: args.importer,
251
+ namespace: args.namespace,
252
+ resolveDir: args.resolveDir,
253
+ kind: args.kind,
254
+ pluginData: { primitiveBoundaryResolved: true },
255
+ });
256
+ // Let esbuild resolve (and report) it the way it would have; nothing
257
+ // was recorded, so an unresolvable import stays esbuild's error.
258
+ if (resolved.errors.length > 0)
259
+ return null;
260
+ if (!resolved.external && resolved.path) {
261
+ rememberDependency(resolved.path);
262
+ }
263
+ return resolved;
264
+ });
265
+ },
266
+ };
267
+ let result;
268
+ try {
269
+ result = await esbuild.build({
270
+ entryPoints: [entryRelative],
271
+ absWorkingDir: treeRoot,
272
+ bundle: true,
273
+ write: false,
274
+ metafile: true,
275
+ format: "esm",
276
+ platform: "neutral",
277
+ target: "es2022",
278
+ // The loader supplies it; see the module note.
279
+ external: [PRIMITIVE_FUNCTIONS_MODULE],
280
+ plugins: [importBoundaryPlugin],
281
+ logLevel: "silent",
282
+ });
283
+ }
284
+ catch (error) {
285
+ const messages = Array.isArray(error?.errors)
286
+ ? error.errors.map((e) => {
287
+ const where = e?.location?.file
288
+ ? toPosix(String(e.location.file))
289
+ : toPosix(entry);
290
+ const line = e?.location?.line ? `:${e.location.line}` : "";
291
+ return ` ${where}${line}: ${e?.text ?? "build error"}`;
292
+ })
293
+ : [` ${toPosix(entry)}: ${error?.message ?? String(error)}`];
294
+ throw new FunctionBuildError(`function '${functionKey}' failed to build:\n${messages.join("\n")}`);
295
+ }
296
+ const output = result.outputFiles?.[0];
297
+ if (!output) {
298
+ throw new FunctionBuildError(`function '${functionKey}': the build produced no output for '${toPosix(entry)}'`);
299
+ }
300
+ const bundle = Buffer.from(output.contents);
301
+ // 3. Every file the build actually read, from the metafile — the honest list,
302
+ // rather than a re-parse of the imports. A file a BARE specifier reached is
303
+ // an inlined dependency and is dropped; every other input is a filesystem
304
+ // import, and one outside the tree is an escape esbuild followed that the
305
+ // push refuses.
306
+ const sources = [];
307
+ for (const input of Object.keys(result.metafile?.inputs ?? {})) {
308
+ const path = toPosix(input);
309
+ const absolute = resolve(treeRoot, input);
310
+ if (isDependencyFile(absolute))
311
+ continue;
312
+ if (path.startsWith("..") || isAbsolute(input)) {
313
+ throw escapeRefusal("import", path);
314
+ }
315
+ if (outsideRoot(treeRoot, realpathSync(absolute)) !== null) {
316
+ throw escapeRefusal("import", path);
317
+ }
318
+ // In-tree `node_modules` reached by a filesystem import: inside the
319
+ // boundary, so it builds — but `config pull` refuses to write a stored
320
+ // `node_modules` path, so capturing it would promise a round trip that
321
+ // cannot be kept.
322
+ if (isDependencyPath(path))
323
+ continue;
324
+ const content = readFileSync(absolute);
325
+ // The type-only half of the retired-specifier refusal (see the module
326
+ // note): esbuild erased these imports before the plugin could see them,
327
+ // so the build succeeded and the source would have been stored as pushed.
328
+ if (importsRetiredModule(content.toString("utf-8"))) {
329
+ throw new FunctionBuildError(`function '${functionKey}' failed to build:\n ${path}: ${retiredModuleRefusal()}`);
330
+ }
331
+ sources.push({ path, content });
332
+ }
333
+ sources.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
334
+ return {
335
+ entry: entryRelative,
336
+ bundle,
337
+ contentHash: createHash("sha256").update(bundle).digest("hex"),
338
+ sources,
339
+ };
340
+ }
341
+ //# sourceMappingURL=function-bundle.js.map