primitive-admin 1.0.61 → 1.0.63

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 (320) hide show
  1. package/README.md +125 -69
  2. package/assets/skill/skills/primitive-platform/SKILL.md +336 -37
  3. package/dist/bin/primitive.js +25 -14
  4. package/dist/bin/primitive.js.map +1 -1
  5. package/dist/src/commands/analytics.js +36 -16
  6. package/dist/src/commands/analytics.js.map +1 -1
  7. package/dist/src/commands/apps.js +52 -188
  8. package/dist/src/commands/apps.js.map +1 -1
  9. package/dist/src/commands/blob-buckets.js +13 -153
  10. package/dist/src/commands/blob-buckets.js.map +1 -1
  11. package/dist/src/commands/collection-type-configs.js +14 -100
  12. package/dist/src/commands/collection-type-configs.js.map +1 -1
  13. package/dist/src/commands/collections.js +47 -8
  14. package/dist/src/commands/collections.js.map +1 -1
  15. package/dist/src/commands/config.d.ts +46 -0
  16. package/dist/src/commands/config.js +479 -0
  17. package/dist/src/commands/config.js.map +1 -0
  18. package/dist/src/commands/connections.js +12 -7
  19. package/dist/src/commands/connections.js.map +1 -1
  20. package/dist/src/commands/cron-triggers.js +84 -176
  21. package/dist/src/commands/cron-triggers.js.map +1 -1
  22. package/dist/src/commands/database-type-configs.d.ts +2 -0
  23. package/dist/src/commands/database-type-configs.js +171 -0
  24. package/dist/src/commands/database-type-configs.js.map +1 -0
  25. package/dist/src/commands/database-types.js +4 -4
  26. package/dist/src/commands/database-types.js.map +1 -1
  27. package/dist/src/commands/databases.d.ts +63 -0
  28. package/dist/src/commands/databases.js +649 -87
  29. package/dist/src/commands/databases.js.map +1 -1
  30. package/dist/src/commands/documents.js +869 -12
  31. package/dist/src/commands/documents.js.map +1 -1
  32. package/dist/src/commands/email-templates.js +21 -128
  33. package/dist/src/commands/email-templates.js.map +1 -1
  34. package/dist/src/commands/env.d.ts +12 -1
  35. package/dist/src/commands/env.js +115 -26
  36. package/dist/src/commands/env.js.map +1 -1
  37. package/dist/src/commands/feature-flags.d.ts +14 -0
  38. package/dist/src/commands/feature-flags.js +116 -0
  39. package/dist/src/commands/feature-flags.js.map +1 -0
  40. package/dist/src/commands/group-type-configs.js +14 -109
  41. package/dist/src/commands/group-type-configs.js.map +1 -1
  42. package/dist/src/commands/init.d.ts +24 -1
  43. package/dist/src/commands/init.js +1194 -279
  44. package/dist/src/commands/init.js.map +1 -1
  45. package/dist/src/commands/integrations.js +166 -435
  46. package/dist/src/commands/integrations.js.map +1 -1
  47. package/dist/src/commands/metadata-category-configs.d.ts +12 -0
  48. package/dist/src/commands/metadata-category-configs.js +112 -0
  49. package/dist/src/commands/metadata-category-configs.js.map +1 -0
  50. package/dist/src/commands/metadata.js +33 -141
  51. package/dist/src/commands/metadata.js.map +1 -1
  52. package/dist/src/commands/prompts.js +206 -563
  53. package/dist/src/commands/prompts.js.map +1 -1
  54. package/dist/src/commands/rule-sets.d.ts +1 -1
  55. package/dist/src/commands/rule-sets.js +16 -132
  56. package/dist/src/commands/rule-sets.js.map +1 -1
  57. package/dist/src/commands/scripts.d.ts +10 -0
  58. package/dist/src/commands/scripts.js +203 -241
  59. package/dist/src/commands/scripts.js.map +1 -1
  60. package/dist/src/commands/sessions.js +17 -5
  61. package/dist/src/commands/sessions.js.map +1 -1
  62. package/dist/src/commands/sync-app-settings.d.ts +113 -70
  63. package/dist/src/commands/sync-app-settings.js +193 -242
  64. package/dist/src/commands/sync-app-settings.js.map +1 -1
  65. package/dist/src/commands/sync.d.ts +1904 -51
  66. package/dist/src/commands/sync.js +9468 -1790
  67. package/dist/src/commands/sync.js.map +1 -1
  68. package/dist/src/commands/tokens.js +8 -2
  69. package/dist/src/commands/tokens.js.map +1 -1
  70. package/dist/src/commands/users.js +92 -1
  71. package/dist/src/commands/users.js.map +1 -1
  72. package/dist/src/commands/vars.js +44 -58
  73. package/dist/src/commands/vars.js.map +1 -1
  74. package/dist/src/commands/webhooks.js +318 -156
  75. package/dist/src/commands/webhooks.js.map +1 -1
  76. package/dist/src/commands/workflows.d.ts +49 -12
  77. package/dist/src/commands/workflows.js +652 -1086
  78. package/dist/src/commands/workflows.js.map +1 -1
  79. package/dist/src/lib/access-rule-display.d.ts +21 -0
  80. package/dist/src/lib/access-rule-display.js +34 -0
  81. package/dist/src/lib/access-rule-display.js.map +1 -0
  82. package/dist/src/lib/api-client.d.ts +541 -61
  83. package/dist/src/lib/api-client.js +559 -102
  84. package/dist/src/lib/api-client.js.map +1 -1
  85. package/dist/src/lib/app-settings-descriptor.d.ts +180 -25
  86. package/dist/src/lib/app-settings-descriptor.js +403 -82
  87. package/dist/src/lib/app-settings-descriptor.js.map +1 -1
  88. package/dist/src/lib/canonical-json.d.ts +12 -0
  89. package/dist/src/lib/canonical-json.js +35 -0
  90. package/dist/src/lib/canonical-json.js.map +1 -0
  91. package/dist/src/lib/cli-manifest.d.ts +8 -0
  92. package/dist/src/lib/cli-manifest.js +1 -0
  93. package/dist/src/lib/cli-manifest.js.map +1 -1
  94. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
  95. package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
  96. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
  97. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
  98. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
  99. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
  100. package/dist/src/lib/config-object-descriptor.d.ts +127 -0
  101. package/dist/src/lib/config-object-descriptor.js +658 -0
  102. package/dist/src/lib/config-object-descriptor.js.map +1 -0
  103. package/dist/src/lib/config-payload.d.ts +85 -0
  104. package/dist/src/lib/config-payload.js +116 -0
  105. package/dist/src/lib/config-payload.js.map +1 -0
  106. package/dist/src/lib/config-surface.d.ts +130 -0
  107. package/dist/src/lib/config-surface.js +300 -0
  108. package/dist/src/lib/config-surface.js.map +1 -0
  109. package/dist/src/lib/credentials-store.d.ts +10 -0
  110. package/dist/src/lib/credentials-store.js +23 -0
  111. package/dist/src/lib/credentials-store.js.map +1 -1
  112. package/dist/src/lib/data-input.d.ts +23 -0
  113. package/dist/src/lib/data-input.js +50 -0
  114. package/dist/src/lib/data-input.js.map +1 -0
  115. package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
  116. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  117. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
  118. package/dist/src/lib/env-resolver-core.d.ts +187 -0
  119. package/dist/src/lib/env-resolver-core.js +325 -0
  120. package/dist/src/lib/env-resolver-core.js.map +1 -0
  121. package/dist/src/lib/env-resolver.d.ts +28 -6
  122. package/dist/src/lib/env-resolver.js +44 -32
  123. package/dist/src/lib/env-resolver.js.map +1 -1
  124. package/dist/src/lib/generated-allowlist.js +12 -0
  125. package/dist/src/lib/generated-allowlist.js.map +1 -1
  126. package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
  127. package/dist/src/lib/generated-config-surfaces.js +4058 -0
  128. package/dist/src/lib/generated-config-surfaces.js.map +1 -0
  129. package/dist/src/lib/generated-template-lint.d.ts +212 -0
  130. package/dist/src/lib/generated-template-lint.js +624 -0
  131. package/dist/src/lib/generated-template-lint.js.map +1 -0
  132. package/dist/src/lib/init-adopt.d.ts +16 -0
  133. package/dist/src/lib/init-adopt.js +34 -0
  134. package/dist/src/lib/init-adopt.js.map +1 -0
  135. package/dist/src/lib/init-assets.d.ts +39 -0
  136. package/dist/src/lib/init-assets.js +97 -0
  137. package/dist/src/lib/init-assets.js.map +1 -0
  138. package/dist/src/lib/init-client-platforms.d.ts +14 -0
  139. package/dist/src/lib/init-client-platforms.js +71 -0
  140. package/dist/src/lib/init-client-platforms.js.map +1 -0
  141. package/dist/src/lib/init-config.d.ts +44 -5
  142. package/dist/src/lib/init-config.js +80 -7
  143. package/dist/src/lib/init-config.js.map +1 -1
  144. package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
  145. package/dist/src/lib/init-email-redirect-uris.js +46 -0
  146. package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
  147. package/dist/src/lib/init-ios-links.d.ts +90 -0
  148. package/dist/src/lib/init-ios-links.js +218 -0
  149. package/dist/src/lib/init-ios-links.js.map +1 -0
  150. package/dist/src/lib/init-plan.d.ts +80 -0
  151. package/dist/src/lib/init-plan.js +95 -0
  152. package/dist/src/lib/init-plan.js.map +1 -0
  153. package/dist/src/lib/init-production-env.d.ts +48 -0
  154. package/dist/src/lib/init-production-env.js +59 -0
  155. package/dist/src/lib/init-production-env.js.map +1 -0
  156. package/dist/src/lib/init-schema.d.ts +74 -0
  157. package/dist/src/lib/init-schema.js +358 -0
  158. package/dist/src/lib/init-schema.js.map +1 -0
  159. package/dist/src/lib/init-xcode.d.ts +33 -0
  160. package/dist/src/lib/init-xcode.js +114 -0
  161. package/dist/src/lib/init-xcode.js.map +1 -0
  162. package/dist/src/lib/integration-request-config.d.ts +30 -0
  163. package/dist/src/lib/integration-request-config.js +145 -0
  164. package/dist/src/lib/integration-request-config.js.map +1 -0
  165. package/dist/src/lib/integration-selector.d.ts +42 -0
  166. package/dist/src/lib/integration-selector.js +46 -0
  167. package/dist/src/lib/integration-selector.js.map +1 -0
  168. package/dist/src/lib/local-state.d.ts +55 -0
  169. package/dist/src/lib/local-state.js +167 -0
  170. package/dist/src/lib/local-state.js.map +1 -0
  171. package/dist/src/lib/local-test-cases.d.ts +63 -0
  172. package/dist/src/lib/local-test-cases.js +135 -0
  173. package/dist/src/lib/local-test-cases.js.map +1 -0
  174. package/dist/src/lib/log-inspection.d.ts +568 -0
  175. package/dist/src/lib/log-inspection.js +639 -0
  176. package/dist/src/lib/log-inspection.js.map +1 -0
  177. package/dist/src/lib/migration-nag.d.ts +2 -2
  178. package/dist/src/lib/migration-nag.js +3 -3
  179. package/dist/src/lib/object-status-filter.d.ts +22 -0
  180. package/dist/src/lib/object-status-filter.js +45 -0
  181. package/dist/src/lib/object-status-filter.js.map +1 -0
  182. package/dist/src/lib/output.d.ts +24 -1
  183. package/dist/src/lib/output.js +42 -1
  184. package/dist/src/lib/output.js.map +1 -1
  185. package/dist/src/lib/package-manager.d.ts +140 -0
  186. package/dist/src/lib/package-manager.js +305 -0
  187. package/dist/src/lib/package-manager.js.map +1 -0
  188. package/dist/src/lib/paginate.d.ts +50 -0
  189. package/dist/src/lib/paginate.js +53 -0
  190. package/dist/src/lib/paginate.js.map +1 -1
  191. package/dist/src/lib/platform-owned.d.ts +29 -3
  192. package/dist/src/lib/platform-owned.js +42 -3
  193. package/dist/src/lib/platform-owned.js.map +1 -1
  194. package/dist/src/lib/project-config.d.ts +8 -0
  195. package/dist/src/lib/project-config.js +30 -5
  196. package/dist/src/lib/project-config.js.map +1 -1
  197. package/dist/src/lib/query-operators.d.ts +1 -1
  198. package/dist/src/lib/query-operators.js +1 -1
  199. package/dist/src/lib/record-filter.d.ts +18 -0
  200. package/dist/src/lib/record-filter.js +55 -0
  201. package/dist/src/lib/record-filter.js.map +1 -0
  202. package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
  203. package/dist/src/lib/resolve-init-dev-port.js +55 -0
  204. package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
  205. package/dist/src/lib/resolve-init-server.d.ts +64 -0
  206. package/dist/src/lib/resolve-init-server.js +77 -0
  207. package/dist/src/lib/resolve-init-server.js.map +1 -0
  208. package/dist/src/lib/resolve-platform.d.ts +43 -14
  209. package/dist/src/lib/resolve-platform.js +74 -12
  210. package/dist/src/lib/resolve-platform.js.map +1 -1
  211. package/dist/src/lib/run-status.d.ts +19 -0
  212. package/dist/src/lib/run-status.generated.d.ts +39 -0
  213. package/dist/src/lib/run-status.generated.js +66 -0
  214. package/dist/src/lib/run-status.generated.js.map +1 -0
  215. package/dist/src/lib/run-status.js +19 -0
  216. package/dist/src/lib/run-status.js.map +1 -0
  217. package/dist/src/lib/server-text-normalization.d.ts +51 -0
  218. package/dist/src/lib/server-text-normalization.js +90 -0
  219. package/dist/src/lib/server-text-normalization.js.map +1 -0
  220. package/dist/src/lib/server-url.d.ts +22 -0
  221. package/dist/src/lib/server-url.js +33 -0
  222. package/dist/src/lib/server-url.js.map +1 -0
  223. package/dist/src/lib/signing-secret-status.d.ts +81 -0
  224. package/dist/src/lib/signing-secret-status.js +116 -0
  225. package/dist/src/lib/signing-secret-status.js.map +1 -0
  226. package/dist/src/lib/skill-installer.js +6 -3
  227. package/dist/src/lib/skill-installer.js.map +1 -1
  228. package/dist/src/lib/snapshots.d.ts +2 -2
  229. package/dist/src/lib/snapshots.js +2 -2
  230. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
  231. package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
  232. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
  233. package/dist/src/lib/swift-codegen/generator.d.ts +11 -2
  234. package/dist/src/lib/swift-codegen/generator.js +181 -7
  235. package/dist/src/lib/swift-codegen/generator.js.map +1 -1
  236. package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
  237. package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
  238. package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
  239. package/dist/src/lib/sync-dir-selector.d.ts +21 -0
  240. package/dist/src/lib/sync-dir-selector.js +30 -0
  241. package/dist/src/lib/sync-dir-selector.js.map +1 -0
  242. package/dist/src/lib/sync-paths.d.ts +39 -0
  243. package/dist/src/lib/sync-paths.js +70 -2
  244. package/dist/src/lib/sync-paths.js.map +1 -1
  245. package/dist/src/lib/sync-resource-types.d.ts +138 -31
  246. package/dist/src/lib/sync-resource-types.js +241 -47
  247. package/dist/src/lib/sync-resource-types.js.map +1 -1
  248. package/dist/src/lib/sync-selectors.d.ts +95 -0
  249. package/dist/src/lib/sync-selectors.js +228 -0
  250. package/dist/src/lib/sync-selectors.js.map +1 -0
  251. package/dist/src/lib/template.d.ts +62 -4
  252. package/dist/src/lib/template.js +147 -39
  253. package/dist/src/lib/template.js.map +1 -1
  254. package/dist/src/lib/test-case-file-names.d.ts +40 -0
  255. package/dist/src/lib/test-case-file-names.js +91 -0
  256. package/dist/src/lib/test-case-file-names.js.map +1 -0
  257. package/dist/src/lib/test-case-keys.d.ts +29 -0
  258. package/dist/src/lib/test-case-keys.js +55 -0
  259. package/dist/src/lib/test-case-keys.js.map +1 -0
  260. package/dist/src/lib/test-case-variables.d.ts +15 -0
  261. package/dist/src/lib/test-case-variables.js +29 -0
  262. package/dist/src/lib/test-case-variables.js.map +1 -0
  263. package/dist/src/lib/toml-database-config.d.ts +4 -4
  264. package/dist/src/lib/toml-database-config.js +27 -34
  265. package/dist/src/lib/toml-database-config.js.map +1 -1
  266. package/dist/src/lib/toml-metadata-config.d.ts +9 -5
  267. package/dist/src/lib/toml-metadata-config.js +40 -45
  268. package/dist/src/lib/toml-metadata-config.js.map +1 -1
  269. package/dist/src/lib/toml-native-form.d.ts +1 -1
  270. package/dist/src/lib/toml-native-form.js +1 -1
  271. package/dist/src/lib/toml-params-validator.d.ts +1 -1
  272. package/dist/src/lib/toml-params-validator.js +1 -1
  273. package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
  274. package/dist/src/lib/toml-scalar-edit.js +283 -0
  275. package/dist/src/lib/toml-scalar-edit.js.map +1 -0
  276. package/dist/src/lib/user-selector.d.ts +24 -0
  277. package/dist/src/lib/user-selector.js +33 -0
  278. package/dist/src/lib/user-selector.js.map +1 -0
  279. package/dist/src/lib/version-check.d.ts +25 -0
  280. package/dist/src/lib/version-check.js +77 -8
  281. package/dist/src/lib/version-check.js.map +1 -1
  282. package/dist/src/lib/watch.d.ts +121 -0
  283. package/dist/src/lib/watch.js +169 -0
  284. package/dist/src/lib/watch.js.map +1 -0
  285. package/dist/src/lib/web-url.d.ts +40 -0
  286. package/dist/src/lib/web-url.js +76 -0
  287. package/dist/src/lib/web-url.js.map +1 -0
  288. package/dist/src/lib/workflow-apply.d.ts +69 -45
  289. package/dist/src/lib/workflow-apply.js +99 -72
  290. package/dist/src/lib/workflow-apply.js.map +1 -1
  291. package/dist/src/lib/workflow-codegen/generator.js +4 -4
  292. package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
  293. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +11 -0
  294. package/dist/src/lib/workflow-codegen/invokerIR.js +5 -0
  295. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
  296. package/dist/src/lib/workflow-config-apply.d.ts +70 -0
  297. package/dist/src/lib/workflow-config-apply.js +137 -0
  298. package/dist/src/lib/workflow-config-apply.js.map +1 -0
  299. package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
  300. package/dist/src/lib/workflow-config-sidecar.js +96 -0
  301. package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
  302. package/dist/src/lib/workflow-defaults.d.ts +29 -0
  303. package/dist/src/lib/workflow-defaults.js +41 -0
  304. package/dist/src/lib/workflow-defaults.js.map +1 -0
  305. package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
  306. package/dist/src/lib/workflow-include-preserve.js +286 -0
  307. package/dist/src/lib/workflow-include-preserve.js.map +1 -0
  308. package/dist/src/lib/workflow-payload.d.ts +31 -20
  309. package/dist/src/lib/workflow-payload.js +100 -110
  310. package/dist/src/lib/workflow-payload.js.map +1 -1
  311. package/dist/src/lib/workflow-toml-validator.d.ts +37 -16
  312. package/dist/src/lib/workflow-toml-validator.js +141 -16
  313. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  314. package/dist/src/types/index.d.ts +78 -22
  315. package/dist/src/validators.d.ts +7 -7
  316. package/dist/src/validators.js +6 -6
  317. package/package.json +11 -6
  318. package/dist/src/commands/settings.d.ts +0 -15
  319. package/dist/src/commands/settings.js +0 -102
  320. package/dist/src/commands/settings.js.map +0 -1
@@ -0,0 +1,624 @@
1
+ /**
2
+ * GENERATED FILE — DO NOT EDIT BY HAND.
3
+ *
4
+ * Verbatim copy of the server module
5
+ * `src/workflows/runner/template-static-lint.ts` — the single source of truth
6
+ * for the static `{{ }}` template lint the CLI runs at `config push` time and
7
+ * the server runs at save time (issue #2689).
8
+ *
9
+ * Regenerate with:
10
+ * node cli/scripts/gen-template-lint.mjs (runs automatically at CLI prebuild)
11
+ *
12
+ * A freshness guard (`cli/scripts/gen-template-lint.mjs --check`, also asserted
13
+ * by `cli/tests/unit/template-lint-drift-guard.test.ts`) fails if this committed
14
+ * copy does not match the server module.
15
+ */
16
+ /**
17
+ * Parse filter chain from expression.
18
+ * Supports: path | filter | filter: 'arg' | filter: 'arg1', 'arg2'
19
+ * Respects || (fallback operator) and quoted strings containing |.
20
+ *
21
+ * Moved here from `templates.ts` (#2689) so the lint and the renderer parse
22
+ * expressions with ONE implementation; `templates.ts` imports it back.
23
+ */
24
+ export function parseFilterChain(expr) {
25
+ // Split on single | that is NOT inside quotes and NOT part of ||
26
+ // Strategy: scan character by character, tracking quote state
27
+ const segments = [];
28
+ let current = "";
29
+ let inSingleQuote = false;
30
+ let inDoubleQuote = false;
31
+ for (let i = 0; i < expr.length; i++) {
32
+ const ch = expr[i];
33
+ if (ch === "'" && !inDoubleQuote) {
34
+ inSingleQuote = !inSingleQuote;
35
+ current += ch;
36
+ }
37
+ else if (ch === '"' && !inSingleQuote) {
38
+ inDoubleQuote = !inDoubleQuote;
39
+ current += ch;
40
+ }
41
+ else if (ch === "|" && !inSingleQuote && !inDoubleQuote) {
42
+ // Check for || (fallback operator)
43
+ if (expr[i + 1] === "|") {
44
+ current += "||";
45
+ i++; // Skip next |
46
+ }
47
+ else {
48
+ segments.push(current.trim());
49
+ current = "";
50
+ }
51
+ }
52
+ else {
53
+ current += ch;
54
+ }
55
+ }
56
+ if (current.trim())
57
+ segments.push(current.trim());
58
+ const path = segments[0] || "";
59
+ const filterList = [];
60
+ for (let i = 1; i < segments.length; i++) {
61
+ const part = segments[i].trim();
62
+ if (!part)
63
+ continue;
64
+ const colonIdx = part.indexOf(":");
65
+ if (colonIdx === -1) {
66
+ filterList.push({ name: part, args: [] });
67
+ }
68
+ else {
69
+ const name = part.slice(0, colonIdx).trim();
70
+ const argsStr = part.slice(colonIdx + 1).trim();
71
+ const args = [];
72
+ const argMatches = argsStr.matchAll(/["']([^"']*)["']|([^,\s]+)/g);
73
+ for (const m of argMatches) {
74
+ args.push(m[1] ?? m[2] ?? "");
75
+ }
76
+ filterList.push({ name, args });
77
+ }
78
+ }
79
+ return { path, filters: filterList };
80
+ }
81
+ /**
82
+ * Tokenize a path expression into segments. Handles:
83
+ * - dot navigation: `a.b.c` → idents
84
+ * - optional chain: `a?.b` → treated as `a.b` (existing behavior)
85
+ * - quoted bracket keys: `a['key']`, `a["key"]` → keys (preserve dots/dashes)
86
+ * - numeric literal brackets: `a[5]` → ident "5" (numeric coercion happens
87
+ * in walker)
88
+ * - **identifier-path brackets**: `a[iteration.index]`, `a[steps.x.id]` →
89
+ * bracket tokens whose `inner` is recursively resolved
90
+ *
91
+ * Bracket contents may themselves contain quoted strings or nested brackets;
92
+ * we track quote state and bracket depth so we don't confuse them with the
93
+ * outermost `]`.
94
+ *
95
+ * Moved here from `templates.ts` (#2689); see `parseFilterChain`.
96
+ */
97
+ export function tokenizePath(expr) {
98
+ // Pre-collapse optional chaining and whitespace, matching prior behavior.
99
+ const cleaned = expr.replace(/\?\./g, ".").replace(/\s+/g, " ").trim();
100
+ const tokens = [];
101
+ let buf = "";
102
+ const flushIdent = () => {
103
+ const trimmed = buf.trim();
104
+ if (trimmed)
105
+ tokens.push({ kind: "ident", value: trimmed });
106
+ buf = "";
107
+ };
108
+ let i = 0;
109
+ while (i < cleaned.length) {
110
+ const ch = cleaned[i];
111
+ if (ch === ".") {
112
+ flushIdent();
113
+ i++;
114
+ continue;
115
+ }
116
+ if (ch === "[") {
117
+ flushIdent();
118
+ // Find the matching `]`, tracking quotes and nested brackets.
119
+ let depth = 1;
120
+ let j = i + 1;
121
+ let inSingle = false;
122
+ let inDouble = false;
123
+ while (j < cleaned.length && depth > 0) {
124
+ const c = cleaned[j];
125
+ if (c === "'" && !inDouble) {
126
+ inSingle = !inSingle;
127
+ }
128
+ else if (c === '"' && !inSingle) {
129
+ inDouble = !inDouble;
130
+ }
131
+ else if (!inSingle && !inDouble) {
132
+ if (c === "[")
133
+ depth++;
134
+ else if (c === "]")
135
+ depth--;
136
+ }
137
+ if (depth === 0)
138
+ break;
139
+ j++;
140
+ }
141
+ // Unmatched `[` — fall back to treating the rest as a raw ident so we
142
+ // don't crash. The walker will return `found: false` for nonsense paths.
143
+ if (depth !== 0) {
144
+ buf += cleaned.slice(i);
145
+ i = cleaned.length;
146
+ continue;
147
+ }
148
+ const inner = cleaned.slice(i + 1, j).trim();
149
+ // Classify the bracket contents.
150
+ const isSingleQuoted = inner.startsWith("'") && inner.endsWith("'");
151
+ const isDoubleQuoted = inner.startsWith('"') && inner.endsWith('"');
152
+ if (isSingleQuoted || isDoubleQuoted) {
153
+ tokens.push({ kind: "key", value: inner.slice(1, -1) });
154
+ }
155
+ else if (/^\d+$/.test(inner)) {
156
+ tokens.push({ kind: "ident", value: inner });
157
+ }
158
+ else if (inner.length > 0) {
159
+ // Identifier path — resolved against the template context at walk time.
160
+ tokens.push({ kind: "bracket", inner });
161
+ }
162
+ // Empty brackets `[]` are silently skipped.
163
+ i = j + 1;
164
+ continue;
165
+ }
166
+ buf += ch;
167
+ i++;
168
+ }
169
+ flushIdent();
170
+ return tokens;
171
+ }
172
+ /**
173
+ * The valid top-level template roots (#1296 Fork 3; `vars` added by #1423).
174
+ * Named in the unresolved-reference error when the reference's root is not
175
+ * one of them (`{{ inputs.userId }}` — a common typo for `input`), and the
176
+ * baseline tolerated set for the static lint.
177
+ *
178
+ * Re-exported from `templates.ts` so existing importers are unaffected.
179
+ */
180
+ export const KNOWN_TEMPLATE_ROOTS = [
181
+ "input",
182
+ "steps",
183
+ "outputs",
184
+ "meta",
185
+ "secrets",
186
+ "vars",
187
+ ];
188
+ /**
189
+ * The built-in zero-arg roots every template context carries.
190
+ *
191
+ * `buildTemplateContext` (`templates.ts`) DERIVES its lazy-getter map from
192
+ * this list, so the runtime's built-ins and the lint's tolerated built-ins are
193
+ * one declaration rather than two lists to keep in sync (#2689 criterion 8b).
194
+ * Adding a built-in means adding it here and giving it a getter there — the
195
+ * derivation test in `tests/unit/workflows/template-static-lint.test.ts` fails
196
+ * if the two disagree.
197
+ */
198
+ export const TEMPLATE_BUILTIN_ROOTS = ["now", "today", "uuid", "ulid"];
199
+ /**
200
+ * Contextual roots tolerated in EVERY scanned expression.
201
+ *
202
+ * Binding sites:
203
+ * - `selected` / `user` / `md` — bound directly as context object literals by
204
+ * the engine (sequential step context, compensation context, forEach
205
+ * iteration contexts) and, for `user`, by the `iterate-users` runner's
206
+ * `utils.template(template, { user })` extra scope. These three are the
207
+ * only HAND-listed entries: they have no single declaration point, and
208
+ * they are deliberately tolerated GLOBALLY (their binding sites are
209
+ * broader and less uniform than the forEach roots below — a miss here is a
210
+ * harmless false negative the run-time check still catches, while a false
211
+ * rejection would break a working push).
212
+ * - built-ins — derived from {@link TEMPLATE_BUILTIN_ROOTS}.
213
+ *
214
+ * Roots bound by a step runner through `utils.template(value, extraScope)` are
215
+ * validated against these sets at run time by `contextWithExtraScope`
216
+ * (`engine.ts`), which throws under the test runner — so a new runner-bound
217
+ * root cannot silently become a push-time false rejection (#2689 criterion 8c).
218
+ */
219
+ export const GLOBAL_CONTEXTUAL_ROOTS = [
220
+ "selected",
221
+ "user",
222
+ "md",
223
+ ...TEMPLATE_BUILTIN_ROOTS,
224
+ ];
225
+ /**
226
+ * Roots bound ONLY inside a forEach step's body.
227
+ *
228
+ * The engine binds `loop`/`iteration` at exactly two sites — the in-process
229
+ * forEach iteration context and the durable batch's (`engine.ts`) — and NOT in
230
+ * the sequential step context, the compensation context, or the context a
231
+ * forEach SOURCE resolves against (`baseCtx`, `engine.ts`). So a
232
+ * `{{ iteration.index }}` on a non-forEach step, or in a forEach source, is a
233
+ * guaranteed run-time miss.
234
+ */
235
+ export const ITERATION_ROOTS = ["iteration", "loop"];
236
+ /**
237
+ * The step fields `templateStep` (`engine.ts`) destructures OUT before
238
+ * rendering — control fields that are never run through the template renderer
239
+ * (`runIf` / `successWhen` are CEL; `forEach` / `runs` / `selector.path` are
240
+ * bare paths). Keep in sync with that destructuring.
241
+ *
242
+ * `forEach` is excluded from the body walk here and linted separately against
243
+ * the source-scoped root set (see `lintWorkflowStepTemplates`).
244
+ */
245
+ export const NON_TEMPLATED_STEP_FIELDS = [
246
+ "id",
247
+ "kind",
248
+ "runIf",
249
+ "selector",
250
+ "saveAs",
251
+ "forEach",
252
+ "as",
253
+ "maxItems",
254
+ "_testSteps",
255
+ "runs",
256
+ "continueOnError",
257
+ "strict",
258
+ "strictParams",
259
+ "expects",
260
+ // #2735 — the `prompt.execute` / `block.call` output-type declaration. A
261
+ // static control field: the engine never renders it.
262
+ "expect",
263
+ "successWhen",
264
+ ];
265
+ /** Matches the renderer's interpolation pattern (`renderString`, templates.ts). */
266
+ const EXPRESSION_RE = /{{\s*([^}]+)\s*}}/g;
267
+ function isQuoted(value) {
268
+ return ((value.startsWith('"') && value.endsWith('"') && value.length >= 2) ||
269
+ (value.startsWith("'") && value.endsWith("'") && value.length >= 2));
270
+ }
271
+ /**
272
+ * A variant the engine evaluates as a literal rather than a path
273
+ * (`evaluateExpression`, templates.ts): a quoted string, a boolean, or a plain
274
+ * number. Returns `null` for anything else.
275
+ */
276
+ function literalValue(variant) {
277
+ if (isQuoted(variant))
278
+ return { falsy: variant.slice(1, -1) === "" };
279
+ // #2753 — `true` / `false` are literals, not paths. A terminal `false` is the
280
+ // typed-false default (`{{ steps.maybe.output.flag || false }}`), so it
281
+ // rescues the expression the way a terminal `''` does.
282
+ if (variant === "true")
283
+ return { falsy: false };
284
+ if (variant === "false")
285
+ return { falsy: true };
286
+ const asNumber = Number(variant);
287
+ if (!Number.isNaN(asNumber) && variant === String(asNumber)) {
288
+ return { falsy: !asNumber };
289
+ }
290
+ return null;
291
+ }
292
+ const LIVE = { live: true };
293
+ function classifyVariant(variant, scope) {
294
+ const literal = literalValue(variant);
295
+ if (literal) {
296
+ // A truthy literal short-circuits the chain; a falsy one falls through
297
+ // silently (it is dead, but it is not a mistake worth naming).
298
+ return literal.falsy ? { live: false } : { live: true, shortCircuits: true };
299
+ }
300
+ return classifyPath(variant, scope);
301
+ }
302
+ /**
303
+ * Classify one PATH — an expression variant, or a whole forEach source, which
304
+ * the engine resolves as a single path with no filter/fallback grammar at all.
305
+ */
306
+ function classifyPath(variant, scope) {
307
+ const tokens = tokenizePath(variant);
308
+ const first = tokens[0];
309
+ if (!first || first.kind !== "ident")
310
+ return LIVE; // undecidable
311
+ const root = first.value;
312
+ // A forEach binding name is spread LAST into the iteration context
313
+ // (engine.ts), so it shadows every other root — including `steps` /
314
+ // `outputs`. Check it before anything else and never apply membership
315
+ // checks to a shadowed root.
316
+ if (scope.bindings.has(root))
317
+ return LIVE;
318
+ if (!scope.roots.has(root)) {
319
+ return { live: false, problem: { variant, reason: "unknown-root", name: root } };
320
+ }
321
+ if (root === "steps" || root === "outputs") {
322
+ const second = tokens[1];
323
+ // No second segment, or a dynamic bracket key — undecidable.
324
+ if (!second || second.kind === "bracket")
325
+ return LIVE;
326
+ const name = second.value;
327
+ const declared = root === "steps" ? scope.declaredIds : scope.declaredSaveAs;
328
+ if (!declared.has(name)) {
329
+ return {
330
+ live: false,
331
+ problem: {
332
+ variant,
333
+ reason: root === "steps" ? "undeclared-step-id" : "undeclared-output-name",
334
+ name,
335
+ },
336
+ };
337
+ }
338
+ }
339
+ return LIVE;
340
+ }
341
+ function nameList(names) {
342
+ return names.size === 0 ? "(none)" : [...names].join(", ");
343
+ }
344
+ function buildMessage(expression, problems, scope,
345
+ /**
346
+ * `"expression"` — every way the expression could resolve is dead.
347
+ * `"fallback"` — an earlier variant can resolve, but the terminal `||`
348
+ * fallback cannot (#2753), so the expression fails exactly when the fallback
349
+ * is the thing that has to work.
350
+ */
351
+ kind = "expression") {
352
+ const parts = problems.map((p) => {
353
+ if (p.reason === "unknown-root") {
354
+ return (`unknown root "${p.name}" — valid roots: ${KNOWN_TEMPLATE_ROOTS.join(", ")} ` +
355
+ `(also available here: ${scope.contextualLabel})`);
356
+ }
357
+ if (p.reason === "undeclared-step-id") {
358
+ return (`step "${p.name}" is not declared in this workflow ` +
359
+ `(declared step ids: ${nameList(scope.declaredIds)})`);
360
+ }
361
+ return (`no step saves output "${p.name}" ` +
362
+ `(declared saveAs names: ${nameList(scope.declaredSaveAs)})`);
363
+ });
364
+ const lead = kind === "fallback"
365
+ ? `template expression {{ ${expression} }} has a fallback that can never resolve`
366
+ : `template expression {{ ${expression} }} can never resolve`;
367
+ return (`${lead}: ${parts.join("; ")}. ` +
368
+ `Mark the reference optional with \`| default: ''\` (or a trailing \`|| ''\`, ` +
369
+ `\`|| 0\`, \`|| false\`) if it is meant to be absent.`);
370
+ }
371
+ /**
372
+ * Lint one expression's inner text. Returns the problems that make it
373
+ * guaranteed-dead, or `null` when the expression can resolve.
374
+ */
375
+ function lintExpression(expression, scope) {
376
+ const { path, filters } = parseFilterChain(expression);
377
+ // A `default` / `now` filter anywhere in the chain rescues a miss at run
378
+ // time (`findRescueFilterIndex`, templates.ts) — the author's documented way
379
+ // of saying "this reference is optional".
380
+ if (filters.some((f) => f.name === "default" || f.name === "now"))
381
+ return null;
382
+ const variants = path
383
+ .split("||")
384
+ .map((v) => v.trim())
385
+ .filter((v) => v !== "");
386
+ if (variants.length === 0)
387
+ return null;
388
+ // A TERMINAL falsy literal resolves the whole expression without a warning
389
+ // (templates.ts) — the "optional, default to empty / to false" idiom. A
390
+ // non-terminal one just falls through, so it rescues nothing.
391
+ const lastLiteral = literalValue(variants[variants.length - 1]);
392
+ if (lastLiteral?.falsy)
393
+ return null;
394
+ const verdicts = variants.map((variant) => classifyVariant(variant, scope));
395
+ // A truthy literal anywhere in the chain resolves the expression and RETURNS
396
+ // (templates.ts), so every variant after it is unreachable and the expression
397
+ // can never fail: `{{ true || inputs.typo }}` is odd, not broken. Judging its
398
+ // terminal variant below would be a false rejection.
399
+ if (verdicts.some((v) => v.shortCircuits))
400
+ return null;
401
+ const problems = verdicts.flatMap((v) => (v.problem ? [v.problem] : []));
402
+ // #2753 — the TERMINAL variant is the expression's rescue: the engine reaches
403
+ // it precisely when everything before it missed. A dead one (an unknown root,
404
+ // an undeclared step — `|| false` used to land here too, before it became a
405
+ // literal) means the expression fails exactly when the fallback was supposed
406
+ // to save it, so it is rejected even though an earlier variant is live.
407
+ const lastVerdict = verdicts[verdicts.length - 1];
408
+ const anyLive = verdicts.some((v) => v.live);
409
+ if (!lastVerdict.live && lastVerdict.problem) {
410
+ // With an earlier live variant, only the dead fallback is worth naming.
411
+ return anyLive
412
+ ? { problems: [lastVerdict.problem], kind: "fallback" }
413
+ : { problems, kind: "expression" };
414
+ }
415
+ if (anyLive)
416
+ return null;
417
+ return problems.length > 0 ? { problems, kind: "expression" } : null;
418
+ }
419
+ /**
420
+ * Lint a forEach SOURCE, which is not an expression: `resolveForEachList`
421
+ * (`engine.ts`) resolves the whole string — or the inner text of a single
422
+ * `{{ }}` wrapper — as ONE bare path. Filters, `||` fallbacks and literals are
423
+ * never evaluated here (#2169 rejects those shapes outright), so applying the
424
+ * expression grammar would both miss dead sources (`"inputs.rows | default"`
425
+ * has no run-time rescue) and split a legitimate quoted key that contains
426
+ * `||` (`steps["a||b"].items`) into nonsense.
427
+ */
428
+ function lintSourcePath(path, scope) {
429
+ const verdict = classifyPath(path, scope);
430
+ if (verdict.live || !verdict.problem)
431
+ return null;
432
+ return [verdict.problem];
433
+ }
434
+ /**
435
+ * Lint every `{{ }}` expression in a string value, appending findings.
436
+ */
437
+ function lintString(value, location, stepIndex, stepId, scope, findings) {
438
+ if (!value.includes("{{"))
439
+ return;
440
+ EXPRESSION_RE.lastIndex = 0;
441
+ let match;
442
+ while ((match = EXPRESSION_RE.exec(value)) !== null) {
443
+ const expression = match[1].trim();
444
+ if (!expression)
445
+ continue;
446
+ const verdict = lintExpression(expression, scope);
447
+ if (!verdict)
448
+ continue;
449
+ findings.push({
450
+ stepIndex,
451
+ stepId,
452
+ location,
453
+ expression,
454
+ problems: verdict.problems,
455
+ message: buildMessage(expression, verdict.problems, scope, verdict.kind),
456
+ });
457
+ }
458
+ }
459
+ /**
460
+ * Recursively walk a templated step field. Mirrors what
461
+ * `renderTemplatesWithWarnings` renders: strings, arrays, plain objects —
462
+ * including a `collect` step's nested inner `step`, which the OUTER step's
463
+ * render covers (so it is scanned with the outer step's tolerated roots).
464
+ */
465
+ function walkValue(value, location, stepIndex, stepId, scope, findings, skipKey) {
466
+ if (typeof value === "string") {
467
+ lintString(value, location, stepIndex, stepId, scope, findings);
468
+ return;
469
+ }
470
+ if (Array.isArray(value)) {
471
+ value.forEach((entry, i) => walkValue(entry, `${location}[${i}]`, stepIndex, stepId, scope, findings, skipKey));
472
+ return;
473
+ }
474
+ if (value && typeof value === "object") {
475
+ for (const [key, entry] of Object.entries(value)) {
476
+ if (skipKey?.(location, key))
477
+ continue;
478
+ walkValue(entry, `${location}.${key}`, stepIndex, stepId, scope, findings, skipKey);
479
+ }
480
+ }
481
+ }
482
+ /**
483
+ * The forEach binding names bound into the iteration context for a step.
484
+ *
485
+ * String form: the explicit non-empty `as`, else the engine's default `item`
486
+ * (`resolveForEachItems`, engine.ts) — an explicit `as` REPLACES `item` rather
487
+ * than adding to it. Zip form: the string entries of `as[]`.
488
+ */
489
+ function forEachBindingNames(step) {
490
+ const names = new Set();
491
+ const forEachDef = step.forEach;
492
+ if (forEachDef === undefined || forEachDef === null)
493
+ return names;
494
+ if (typeof forEachDef === "string") {
495
+ const as = step.as;
496
+ names.add(typeof as === "string" && as ? as : "item");
497
+ return names;
498
+ }
499
+ // The zip form's names live on `forEach.as` and nowhere else
500
+ // (`resolveForEachItems`, engine.ts, which REQUIRES that array and never
501
+ // reads the step-level `as`): a name written at the step level is not bound
502
+ // at run time, so tolerating it would accept a root that misses every
503
+ // iteration.
504
+ const as = forEachDef.as;
505
+ if (Array.isArray(as)) {
506
+ for (const entry of as)
507
+ if (typeof entry === "string" && entry)
508
+ names.add(entry);
509
+ }
510
+ return names;
511
+ }
512
+ /**
513
+ * A forEach source is a bare path, or a single `{{ }}` expression wrapping one
514
+ * (#2169). Return the path to lint, or `null` when the value is neither (that
515
+ * shape is `validateForEachSource`'s error to report, not ours).
516
+ */
517
+ function forEachSourcePath(value) {
518
+ if (typeof value !== "string" || !value.trim())
519
+ return null;
520
+ if (!value.includes("{{"))
521
+ return value.trim();
522
+ const m = value.match(/^\s*{{\s*([^}]+)\s*}}\s*$/);
523
+ const inner = m ? m[1].trim() : "";
524
+ return inner || null;
525
+ }
526
+ /**
527
+ * Statically lint every `{{ }}` expression in a workflow's steps.
528
+ *
529
+ * Returns one finding per guaranteed-dead expression; an empty array for
530
+ * anything it cannot decide (including a non-array `steps`, whose shape errors
531
+ * belong to the surrounding validator).
532
+ */
533
+ export function lintWorkflowStepTemplates(steps, opts) {
534
+ const findings = [];
535
+ if (!Array.isArray(steps))
536
+ return findings;
537
+ const declaredIds = new Set();
538
+ const declaredSaveAs = new Set();
539
+ for (const step of steps) {
540
+ if (!step || typeof step !== "object" || Array.isArray(step))
541
+ continue;
542
+ const s = step;
543
+ if (typeof s.id === "string" && s.id)
544
+ declaredIds.add(s.id);
545
+ if (typeof s.saveAs === "string" && s.saveAs)
546
+ declaredSaveAs.add(s.saveAs);
547
+ }
548
+ const knownKinds = opts?.knownKinds ?? null;
549
+ steps.forEach((rawStep, stepIndex) => {
550
+ if (!rawStep || typeof rawStep !== "object" || Array.isArray(rawStep))
551
+ return;
552
+ const step = rawStep;
553
+ const kind = typeof step.kind === "string" ? step.kind : null;
554
+ // #998 skew posture — see `TemplateLintOptions.knownKinds`.
555
+ if (knownKinds && kind !== null && !knownKinds.has(kind))
556
+ return;
557
+ const stepId = typeof step.id === "string" ? step.id : null;
558
+ const hasForEach = step.forEach !== undefined && step.forEach !== null;
559
+ const bindings = forEachBindingNames(step);
560
+ const bodyRoots = new Set([
561
+ ...KNOWN_TEMPLATE_ROOTS,
562
+ ...GLOBAL_CONTEXTUAL_ROOTS,
563
+ ...(hasForEach ? ITERATION_ROOTS : []),
564
+ ...bindings,
565
+ ]);
566
+ const bodyScope = {
567
+ roots: bodyRoots,
568
+ bindings,
569
+ declaredIds,
570
+ declaredSaveAs,
571
+ contextualLabel: [
572
+ ...GLOBAL_CONTEXTUAL_ROOTS,
573
+ ...(hasForEach ? [...ITERATION_ROOTS, ...bindings] : []),
574
+ ].join(", "),
575
+ };
576
+ // `switch` renders only the chosen `cases[*].output` / `default.output`;
577
+ // `cases[*].when` is CEL and never goes through the template renderer.
578
+ const skipKey = kind === "switch"
579
+ ? (loc, key) => key === "when" && new RegExp(`^steps\\[${stepIndex}\\]\\.cases\\[\\d+\\]$`).test(loc)
580
+ : undefined;
581
+ for (const [key, value] of Object.entries(step)) {
582
+ if (NON_TEMPLATED_STEP_FIELDS.includes(key))
583
+ continue;
584
+ walkValue(value, `steps[${stepIndex}].${key}`, stepIndex, stepId, bodyScope, findings, skipKey);
585
+ }
586
+ if (!hasForEach)
587
+ return;
588
+ // The forEach SOURCE resolves against a context without the iteration
589
+ // roots and without the item bindings (`baseCtx`, engine.ts) — so it gets
590
+ // the narrower set even on a forEach step.
591
+ const sourceScope = {
592
+ roots: new Set([...KNOWN_TEMPLATE_ROOTS, ...GLOBAL_CONTEXTUAL_ROOTS]),
593
+ bindings: new Set(),
594
+ declaredIds,
595
+ declaredSaveAs,
596
+ contextualLabel: GLOBAL_CONTEXTUAL_ROOTS.join(", "),
597
+ };
598
+ const lintSource = (value, location) => {
599
+ const path = forEachSourcePath(value);
600
+ if (path === null)
601
+ return;
602
+ const problems = lintSourcePath(path, sourceScope);
603
+ if (!problems)
604
+ return;
605
+ findings.push({
606
+ stepIndex,
607
+ stepId,
608
+ location,
609
+ expression: path,
610
+ problems,
611
+ message: buildMessage(path, problems, sourceScope),
612
+ });
613
+ };
614
+ const forEachDef = step.forEach;
615
+ if (typeof forEachDef === "string") {
616
+ lintSource(forEachDef, `steps[${stepIndex}].forEach`);
617
+ }
618
+ else if (forEachDef && Array.isArray(forEachDef.zip)) {
619
+ forEachDef.zip.forEach((entry, k) => lintSource(entry, `steps[${stepIndex}].forEach.zip[${k}]`));
620
+ }
621
+ });
622
+ return findings;
623
+ }
624
+ //# sourceMappingURL=generated-template-lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-template-lint.js","sourceRoot":"","sources":["../../../src/lib/generated-template-lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ProjectConfig, type ProjectEnvironment } from "./project-config.js";
2
+ export interface AdoptedEnvironment {
3
+ name: string;
4
+ config: ProjectEnvironment;
5
+ projectConfig: ProjectConfig;
6
+ projectConfigPath: string;
7
+ }
8
+ /**
9
+ * Resolves the environment `init` adopts from the project rooted at `root`.
10
+ * Throws whatever the loader or the selector throws — a broken or ambiguous
11
+ * project config must stop the run, not be guessed around.
12
+ */
13
+ export declare function resolveAdoptedEnvironment(root: string, options?: {
14
+ explicitEnvName?: string | null;
15
+ envVarName?: string | null;
16
+ }): AdoptedEnvironment;