primitive-admin 1.0.62 → 1.0.64
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.
- package/README.md +132 -42
- package/assets/skill/skills/primitive-platform/SKILL.md +142 -661
- package/dist/bin/primitive.js +121 -41
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.js +37 -50
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.js +178 -9
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +17 -7
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +7 -0
- package/dist/src/commands/auth-sessions.js +144 -0
- package/dist/src/commands/auth-sessions.js.map +1 -0
- package/dist/src/commands/auth.js +76 -116
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +2 -1
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +26 -10
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +3 -10
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +736 -19
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.js +13 -27
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/connections.js +8 -9
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +2 -1
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.js +5 -12
- package/dist/src/commands/database-type-configs.js.map +1 -1
- package/dist/src/commands/databases.js +59 -72
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +58 -0
- package/dist/src/commands/documents.js +1623 -95
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +5 -4
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.d.ts +1 -1
- package/dist/src/commands/env.js +106 -44
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.js +2 -1
- package/dist/src/commands/feature-flags.js.map +1 -1
- package/dist/src/commands/functions.d.ts +20 -0
- package/dist/src/commands/functions.js +1630 -0
- package/dist/src/commands/functions.js.map +1 -0
- package/dist/src/commands/group-type-configs.js +2 -1
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +30 -17
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.js +17 -11
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +24 -12
- package/dist/src/commands/init.js +198 -110
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +65 -26
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/locks.js +17 -2
- package/dist/src/commands/locks.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.js +2 -1
- package/dist/src/commands/metadata-category-configs.js.map +1 -1
- package/dist/src/commands/metadata.js +8 -1
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +106 -59
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +3 -10
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +10 -0
- package/dist/src/commands/scripts.js +159 -25
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/secrets.js +2 -1
- package/dist/src/commands/secrets.js.map +1 -1
- package/dist/src/commands/sessions.js +10 -9
- package/dist/src/commands/sessions.js.map +1 -1
- package/dist/src/commands/sync-app-settings.js +3 -5
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +391 -44
- package/dist/src/commands/sync.js +2622 -534
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +2 -1
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +19 -10
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.js +2 -1
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/waitlist.js +2 -1
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +29 -0
- package/dist/src/commands/webhooks.js +135 -64
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +1 -29
- package/dist/src/commands/workflows.js +113 -179
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +628 -14
- package/dist/src/lib/api-client.js +776 -70
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +1 -1
- package/dist/src/lib/app-settings-descriptor.js +9 -1
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/block-selector.d.ts +58 -0
- package/dist/src/lib/block-selector.js +92 -0
- package/dist/src/lib/block-selector.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +24 -54
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +31 -153
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/collection-export.d.ts +184 -0
- package/dist/src/lib/collection-export.js +252 -0
- package/dist/src/lib/collection-export.js.map +1 -0
- package/dist/src/lib/config-json-field.d.ts +28 -0
- package/dist/src/lib/config-json-field.js +56 -0
- package/dist/src/lib/config-json-field.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.js +88 -6
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.d.ts +8 -1
- package/dist/src/lib/config-payload.js +49 -4
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +12 -1
- package/dist/src/lib/config-surface.js +71 -3
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/config.d.ts +31 -13
- package/dist/src/lib/config.js +34 -70
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/credentials-store.d.ts +37 -22
- package/dist/src/lib/credentials-store.js +103 -97
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.js +8 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
- package/dist/src/lib/deprecation.d.ts +22 -0
- package/dist/src/lib/deprecation.js +43 -0
- package/dist/src/lib/deprecation.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +30 -0
- package/dist/src/lib/document-export-permissions.js +54 -0
- package/dist/src/lib/document-export-permissions.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
- package/dist/src/lib/document-ingest-artifact.js +505 -0
- package/dist/src/lib/document-ingest-artifact.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +51 -0
- package/dist/src/lib/document-ingest-input.js +132 -0
- package/dist/src/lib/document-ingest-input.js.map +1 -0
- package/dist/src/lib/document-ingest-rows.d.ts +137 -0
- package/dist/src/lib/document-ingest-rows.js +181 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -0
- package/dist/src/lib/document-ingest.d.ts +101 -0
- package/dist/src/lib/document-ingest.js +384 -0
- package/dist/src/lib/document-ingest.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +128 -17
- package/dist/src/lib/env-resolver-core.js +204 -22
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +18 -3
- package/dist/src/lib/env-resolver.js +23 -3
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/function-bundle.d.ts +147 -0
- package/dist/src/lib/function-bundle.js +341 -0
- package/dist/src/lib/function-bundle.js.map +1 -0
- package/dist/src/lib/function-collect.d.ts +123 -0
- package/dist/src/lib/function-collect.js +610 -0
- package/dist/src/lib/function-collect.js.map +1 -0
- package/dist/src/lib/function-db-types.d.ts +202 -0
- package/dist/src/lib/function-db-types.js +870 -0
- package/dist/src/lib/function-db-types.js.map +1 -0
- package/dist/src/lib/function-document-types.d.ts +144 -0
- package/dist/src/lib/function-document-types.js +370 -0
- package/dist/src/lib/function-document-types.js.map +1 -0
- package/dist/src/lib/function-grants-preflight.d.ts +64 -0
- package/dist/src/lib/function-grants-preflight.js +105 -0
- package/dist/src/lib/function-grants-preflight.js.map +1 -0
- package/dist/src/lib/function-log-lines.d.ts +76 -0
- package/dist/src/lib/function-log-lines.js +160 -0
- package/dist/src/lib/function-log-lines.js.map +1 -0
- package/dist/src/lib/function-log-row.d.ts +29 -0
- package/dist/src/lib/function-log-row.js +73 -0
- package/dist/src/lib/function-log-row.js.map +1 -0
- package/dist/src/lib/function-log-tail.d.ts +132 -0
- package/dist/src/lib/function-log-tail.js +262 -0
- package/dist/src/lib/function-log-tail.js.map +1 -0
- package/dist/src/lib/function-run.d.ts +289 -0
- package/dist/src/lib/function-run.js +389 -0
- package/dist/src/lib/function-run.js.map +1 -0
- package/dist/src/lib/function-schema-codegen.d.ts +143 -0
- package/dist/src/lib/function-schema-codegen.js +420 -0
- package/dist/src/lib/function-schema-codegen.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +459 -0
- package/dist/src/lib/function-sync.js +1258 -0
- package/dist/src/lib/function-sync.js.map +1 -0
- package/dist/src/lib/function-trigger-listing.d.ts +27 -0
- package/dist/src/lib/function-trigger-listing.js +70 -0
- package/dist/src/lib/function-trigger-listing.js.map +1 -0
- package/dist/src/lib/function-typecheck.d.ts +86 -0
- package/dist/src/lib/function-typecheck.js +370 -0
- package/dist/src/lib/function-typecheck.js.map +1 -0
- package/dist/src/lib/function-versions.d.ts +122 -0
- package/dist/src/lib/function-versions.js +182 -0
- package/dist/src/lib/function-versions.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +4 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +2332 -78
- package/dist/src/lib/generated-config-surfaces.js +6979 -468
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +12 -0
- package/dist/src/lib/generated-sdk-types.js +13 -0
- package/dist/src/lib/generated-sdk-types.js.map +1 -0
- package/dist/src/lib/init-adopt.js +2 -2
- package/dist/src/lib/init-adopt.js.map +1 -1
- package/dist/src/lib/init-assets.js +3 -3
- package/dist/src/lib/init-client-platforms.d.ts +14 -0
- package/dist/src/lib/init-client-platforms.js +71 -0
- package/dist/src/lib/init-client-platforms.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +1 -1
- package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
- package/dist/src/lib/init-email-redirect-uris.js +46 -0
- package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
- package/dist/src/lib/init-ios-links.d.ts +41 -0
- package/dist/src/lib/init-ios-links.js +67 -1
- package/dist/src/lib/init-ios-links.js.map +1 -1
- package/dist/src/lib/init-plan.d.ts +1 -1
- package/dist/src/lib/init-plan.js +1 -1
- package/dist/src/lib/init-xcode.d.ts +6 -5
- package/dist/src/lib/init-xcode.js +34 -10
- package/dist/src/lib/init-xcode.js.map +1 -1
- package/dist/src/lib/integration-selector.d.ts +42 -0
- package/dist/src/lib/integration-selector.js +46 -0
- package/dist/src/lib/integration-selector.js.map +1 -0
- package/dist/src/lib/ios-app-id.d.ts +34 -0
- package/dist/src/lib/ios-app-id.js +69 -0
- package/dist/src/lib/ios-app-id.js.map +1 -0
- package/dist/src/lib/list-options.d.ts +68 -0
- package/dist/src/lib/list-options.js +89 -0
- package/dist/src/lib/list-options.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +1 -1
- package/dist/src/lib/local-state.js +1 -1
- package/dist/src/lib/local-test-cases.d.ts +63 -0
- package/dist/src/lib/local-test-cases.js +136 -0
- package/dist/src/lib/local-test-cases.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +152 -5
- package/dist/src/lib/log-inspection.js +179 -2
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/logout-admin-session.d.ts +33 -0
- package/dist/src/lib/logout-admin-session.js +70 -0
- package/dist/src/lib/logout-admin-session.js.map +1 -0
- package/dist/src/lib/output.d.ts +15 -0
- package/dist/src/lib/output.js +28 -0
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +15 -0
- package/dist/src/lib/paginate.js +17 -0
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/project-config.d.ts +46 -21
- package/dist/src/lib/project-config.js +74 -47
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/prompt-cost-format.d.ts +11 -0
- package/dist/src/lib/prompt-cost-format.js +41 -0
- package/dist/src/lib/prompt-cost-format.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
- package/dist/src/lib/prompt-schema-codegen.js +462 -0
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +9 -1
- package/dist/src/lib/refresh-admin-credentials.js +22 -2
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
- package/dist/src/lib/resolve-owner.d.ts +19 -0
- package/dist/src/lib/resolve-owner.js +20 -0
- package/dist/src/lib/resolve-owner.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +49 -3
- package/dist/src/lib/skill-installer.js +275 -100
- package/dist/src/lib/skill-installer.js.map +1 -1
- package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
- package/dist/src/lib/snapshot-audit-source.js +58 -0
- package/dist/src/lib/snapshot-audit-source.js.map +1 -0
- package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
- package/dist/src/lib/snapshot-audit-store.js +196 -0
- package/dist/src/lib/snapshot-audit-store.js.map +1 -0
- package/dist/src/lib/snapshot-audit.d.ts +207 -0
- package/dist/src/lib/snapshot-audit.js +431 -0
- package/dist/src/lib/snapshot-audit.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
- package/dist/src/lib/snapshot-build-rows.js +87 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -0
- package/dist/src/lib/snapshot-build.d.ts +50 -0
- package/dist/src/lib/snapshot-build.js +111 -0
- package/dist/src/lib/snapshot-build.js.map +1 -0
- package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
- package/dist/src/lib/snapshot-manifest-layout.js +70 -0
- package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +8 -9
- package/dist/src/lib/snapshots.js +20 -83
- package/dist/src/lib/snapshots.js.map +1 -1
- package/dist/src/lib/step-run-table.d.ts +43 -0
- package/dist/src/lib/step-run-table.js +129 -0
- package/dist/src/lib/step-run-table.js.map +1 -0
- package/dist/src/lib/storage-pending-retry.d.ts +26 -0
- package/dist/src/lib/storage-pending-retry.js +42 -0
- package/dist/src/lib/storage-pending-retry.js.map +1 -0
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
- package/dist/src/lib/swift-codegen/banners.js +25 -0
- package/dist/src/lib/swift-codegen/banners.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +19 -7
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +7 -1
- package/dist/src/lib/swift-codegen/generator.js +28 -11
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +15 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +21 -4
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
- package/dist/src/lib/sync-paths.d.ts +72 -55
- package/dist/src/lib/sync-paths.js +97 -100
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +23 -4
- package/dist/src/lib/sync-resource-types.js +106 -8
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +45 -2
- package/dist/src/lib/sync-selectors.js +66 -5
- package/dist/src/lib/sync-selectors.js.map +1 -1
- package/dist/src/lib/template.d.ts +2 -2
- package/dist/src/lib/template.js +2 -2
- package/dist/src/lib/test-case-file-names.d.ts +40 -0
- package/dist/src/lib/test-case-file-names.js +91 -0
- package/dist/src/lib/test-case-file-names.js.map +1 -0
- package/dist/src/lib/test-case-keys.d.ts +1 -1
- package/dist/src/lib/test-case-keys.js +1 -1
- package/dist/src/lib/test-case-variables.d.ts +14 -0
- package/dist/src/lib/test-case-variables.js +42 -0
- package/dist/src/lib/test-case-variables.js.map +1 -1
- package/dist/src/lib/toml-database-config.js +19 -2
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/web-url.d.ts +40 -0
- package/dist/src/lib/web-url.js +76 -0
- package/dist/src/lib/web-url.js.map +1 -0
- package/dist/src/lib/webhook-deliver.d.ts +209 -0
- package/dist/src/lib/webhook-deliver.js +519 -0
- package/dist/src/lib/webhook-deliver.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +17 -8
- package/dist/src/lib/workflow-toml-validator.js +25 -12
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/lib/workflow-usage.d.ts +196 -0
- package/dist/src/lib/workflow-usage.js +310 -0
- package/dist/src/lib/workflow-usage.js.map +1 -0
- package/dist/src/types/index.d.ts +12 -2
- package/package.json +5 -4
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `functions codegen --lang swift` — the third CLI Swift generator (#3344).
|
|
3
|
+
*
|
|
4
|
+
* The Swift counterpart of `function-schema-codegen.ts`'s TypeScript invoker,
|
|
5
|
+
* and the sibling of `generator.ts` (workflows) and `dbGenerator.ts`
|
|
6
|
+
* (database types). Reads the SAME `functions/<key>.toml` files and emits one
|
|
7
|
+
* `<key>.generated.swift` per function carrying:
|
|
8
|
+
*
|
|
9
|
+
* - `<Key>Input` / `<Key>Output`, rendered from the declared schemas by the
|
|
10
|
+
* shared `renderSwiftRootType` — the same drift-guarded descriptor the
|
|
11
|
+
* server validates with, so a generated Swift type can never promise a
|
|
12
|
+
* shape an invocation door rejects; and
|
|
13
|
+
* - `<Key>Function`, a typed invoker struct carrying every verb, plus a
|
|
14
|
+
* free-function factory `<key>(client)`.
|
|
15
|
+
*
|
|
16
|
+
* ── Nothing about the function is re-derived here ────────────────────────
|
|
17
|
+
*
|
|
18
|
+
* Key, schemas and `inputRequired` all come from `describeFunctionSchemas` —
|
|
19
|
+
* the IR the TypeScript invoker reads — so the two clients can never disagree
|
|
20
|
+
* on what a function accepts or whether its input is required. Only Swift
|
|
21
|
+
* naming (through the workflow emitter's helpers) and Swift rendering happen
|
|
22
|
+
* in this file.
|
|
23
|
+
*
|
|
24
|
+
* ── Verbs ────────────────────────────────────────────────────────────────
|
|
25
|
+
*
|
|
26
|
+
* EVERY invoker gets `invoke` plus the four task verbs (`start`, `getStatus`,
|
|
27
|
+
* `waitFor`, `terminate`). It did once narrow the set by mode, so that the
|
|
28
|
+
* wrong verb was a compile error; #3482 retired that rule by making the ROUTE
|
|
29
|
+
* the runtime selector, and the mismatch is a `functionModeMismatch` thrown at
|
|
30
|
+
* runtime again. Only the INPUT SHAPE is compile-checked here.
|
|
31
|
+
*
|
|
32
|
+
* `FUNCTION_INVOKER_VERBS_BY_MODE` below therefore no longer gates emission —
|
|
33
|
+
* it survives as the verb inventory the signature-parity test reads.
|
|
34
|
+
*
|
|
35
|
+
* Every parameter besides `input` mirrors the generic `FunctionsAPI` overload
|
|
36
|
+
* it delegates to, label, type and default alike — `meta: [String: Any]?`
|
|
37
|
+
* included. The goldens are app-target code, outside the client's `Any`
|
|
38
|
+
* budget scan, and the workflow goldens set that precedent. The tables below
|
|
39
|
+
* are the single source of those parameter lists, and
|
|
40
|
+
* `swift-codegen-function-signature-parity-3344.test.ts` ties them to the
|
|
41
|
+
* client's actual declarations so an option added to `FunctionsAPI` later
|
|
42
|
+
* cannot leave every generated invoker silently behind.
|
|
43
|
+
*
|
|
44
|
+
* ── The nullable root input ──────────────────────────────────────────────
|
|
45
|
+
*
|
|
46
|
+
* The generic overload maps a `nil` input to an OMITTED `rootInput`, which the
|
|
47
|
+
* server defaults to `{}` — rejected by a schema that allows only a string or
|
|
48
|
+
* null. So when the rendered root input type is itself Optional, the generated
|
|
49
|
+
* body BRANCHES: a value delegates the typed value directly (keeping
|
|
50
|
+
* `JSONCoding`'s exact `Int64` path), and `nil` delegates `JSONValue.null`,
|
|
51
|
+
* which is a non-nil `Encodable` and reaches the wire as `rootInput: null`
|
|
52
|
+
* through the same forwarding path a scalar root already uses. Proved live
|
|
53
|
+
* before this emitter was written (#3344 step 0).
|
|
54
|
+
*/
|
|
55
|
+
import { type WriteOrCheckResult } from "../codegen-shared/generatedFiles.js";
|
|
56
|
+
import { type FunctionSchemaSource } from "../function-schema-codegen.js";
|
|
57
|
+
import { FUNCTION_SWIFT_BANNER_PREFIX } from "./banners.js";
|
|
58
|
+
import { type PromptSchemaSource } from "../prompt-schema-codegen.js";
|
|
59
|
+
export { FUNCTION_SWIFT_BANNER_PREFIX };
|
|
60
|
+
export interface FunctionInvokerParameter {
|
|
61
|
+
/** The argument label as the generated method spells it. */
|
|
62
|
+
label: string;
|
|
63
|
+
/**
|
|
64
|
+
* The Swift type, or `null` for the `input` parameter — whose type is bound
|
|
65
|
+
* per key from the declared schema and whose optionality is the IR's
|
|
66
|
+
* `inputRequired`, so a literal type comparison against the client's
|
|
67
|
+
* `Input?` would be meaningless.
|
|
68
|
+
*/
|
|
69
|
+
type: string | null;
|
|
70
|
+
/** The default expression, or `null` for a parameter with no default. */
|
|
71
|
+
defaultValue: string | null;
|
|
72
|
+
}
|
|
73
|
+
export interface FunctionInvokerVerb {
|
|
74
|
+
/** The method the generated invoker declares. */
|
|
75
|
+
verb: string;
|
|
76
|
+
/**
|
|
77
|
+
* How the verb's parameters are normalized against the client before they
|
|
78
|
+
* are compared (spec decision 15):
|
|
79
|
+
* - `overload`: the typed `FunctionsAPI` method of the same name, minus
|
|
80
|
+
* the pinned function-key parameter and any internally bound output
|
|
81
|
+
* witness.
|
|
82
|
+
* - `ref`: `FunctionRunRef`'s initializer, minus `functionKey` — the
|
|
83
|
+
* client takes one ref where the generated wrapper takes its fields.
|
|
84
|
+
*/
|
|
85
|
+
comparedAgainst: {
|
|
86
|
+
kind: "overload";
|
|
87
|
+
method: string;
|
|
88
|
+
dropLabels: string[];
|
|
89
|
+
} | {
|
|
90
|
+
kind: "ref";
|
|
91
|
+
type: string;
|
|
92
|
+
dropLabels: string[];
|
|
93
|
+
};
|
|
94
|
+
parameters: FunctionInvokerParameter[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The verb tables. `invoke` is a request function's whole surface; the other
|
|
98
|
+
* four are a task function's.
|
|
99
|
+
*/
|
|
100
|
+
export declare const FUNCTION_INVOKER_VERBS: Record<string, FunctionInvokerVerb>;
|
|
101
|
+
/**
|
|
102
|
+
* The verb inventory, grouped by the mode that once gated it.
|
|
103
|
+
*
|
|
104
|
+
* #3454 made `any` the default, exposing BOTH sets because the runner is
|
|
105
|
+
* chosen at call time; each lock then exposed only its own. #3482 retired the
|
|
106
|
+
* gating entirely — the ROUTE is the runtime selector, and every invoker is
|
|
107
|
+
* emitted with every verb (see the header, and the emission site). Nothing
|
|
108
|
+
* reads this to DECIDE what to emit any more; the signature-parity test reads
|
|
109
|
+
* it as the list of verbs whose parameters must match `FunctionsAPI`.
|
|
110
|
+
*/
|
|
111
|
+
export declare const FUNCTION_INVOKER_VERBS_BY_MODE: Record<string, string[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Render the full `<key>.generated.swift` content for one `functions/*.toml`.
|
|
114
|
+
* Pure — exported so tests can assert on the string directly.
|
|
115
|
+
*/
|
|
116
|
+
export declare function renderFunctionSwiftFile(source: FunctionSchemaSource): {
|
|
117
|
+
key: string;
|
|
118
|
+
content: string;
|
|
119
|
+
symbols: string[];
|
|
120
|
+
};
|
|
121
|
+
export interface GenerateFunctionSwiftTypesOptions {
|
|
122
|
+
inputs: readonly FunctionSchemaSource[];
|
|
123
|
+
/**
|
|
124
|
+
* #3798 — the tree's prompt sources. Each `kind = "agent"` prompt among them
|
|
125
|
+
* gets a `<key>.agent.generated.swift` in the same output directory, owned
|
|
126
|
+
* by this run (`agentGenerator.ts`); every other prompt is ignored.
|
|
127
|
+
*/
|
|
128
|
+
agentInputs?: readonly PromptSchemaSource[];
|
|
129
|
+
/** Directory where the `<key>.generated.swift` files are written. */
|
|
130
|
+
outputDir: string;
|
|
131
|
+
/** `--check`: compare against disk, do not write. */
|
|
132
|
+
check?: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Run Swift function codegen end-to-end. The whole `functions/` directory is
|
|
136
|
+
* always the input (there is no `--single` form), so the run owns its output
|
|
137
|
+
* directory's functions-banner files completely and sweeps the orphans.
|
|
138
|
+
*/
|
|
139
|
+
export declare function generateFunctionSwiftTypes(options: GenerateFunctionSwiftTypesOptions): Promise<WriteOrCheckResult>;
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `functions codegen --lang swift` — the third CLI Swift generator (#3344).
|
|
3
|
+
*
|
|
4
|
+
* The Swift counterpart of `function-schema-codegen.ts`'s TypeScript invoker,
|
|
5
|
+
* and the sibling of `generator.ts` (workflows) and `dbGenerator.ts`
|
|
6
|
+
* (database types). Reads the SAME `functions/<key>.toml` files and emits one
|
|
7
|
+
* `<key>.generated.swift` per function carrying:
|
|
8
|
+
*
|
|
9
|
+
* - `<Key>Input` / `<Key>Output`, rendered from the declared schemas by the
|
|
10
|
+
* shared `renderSwiftRootType` — the same drift-guarded descriptor the
|
|
11
|
+
* server validates with, so a generated Swift type can never promise a
|
|
12
|
+
* shape an invocation door rejects; and
|
|
13
|
+
* - `<Key>Function`, a typed invoker struct carrying every verb, plus a
|
|
14
|
+
* free-function factory `<key>(client)`.
|
|
15
|
+
*
|
|
16
|
+
* ── Nothing about the function is re-derived here ────────────────────────
|
|
17
|
+
*
|
|
18
|
+
* Key, schemas and `inputRequired` all come from `describeFunctionSchemas` —
|
|
19
|
+
* the IR the TypeScript invoker reads — so the two clients can never disagree
|
|
20
|
+
* on what a function accepts or whether its input is required. Only Swift
|
|
21
|
+
* naming (through the workflow emitter's helpers) and Swift rendering happen
|
|
22
|
+
* in this file.
|
|
23
|
+
*
|
|
24
|
+
* ── Verbs ────────────────────────────────────────────────────────────────
|
|
25
|
+
*
|
|
26
|
+
* EVERY invoker gets `invoke` plus the four task verbs (`start`, `getStatus`,
|
|
27
|
+
* `waitFor`, `terminate`). It did once narrow the set by mode, so that the
|
|
28
|
+
* wrong verb was a compile error; #3482 retired that rule by making the ROUTE
|
|
29
|
+
* the runtime selector, and the mismatch is a `functionModeMismatch` thrown at
|
|
30
|
+
* runtime again. Only the INPUT SHAPE is compile-checked here.
|
|
31
|
+
*
|
|
32
|
+
* `FUNCTION_INVOKER_VERBS_BY_MODE` below therefore no longer gates emission —
|
|
33
|
+
* it survives as the verb inventory the signature-parity test reads.
|
|
34
|
+
*
|
|
35
|
+
* Every parameter besides `input` mirrors the generic `FunctionsAPI` overload
|
|
36
|
+
* it delegates to, label, type and default alike — `meta: [String: Any]?`
|
|
37
|
+
* included. The goldens are app-target code, outside the client's `Any`
|
|
38
|
+
* budget scan, and the workflow goldens set that precedent. The tables below
|
|
39
|
+
* are the single source of those parameter lists, and
|
|
40
|
+
* `swift-codegen-function-signature-parity-3344.test.ts` ties them to the
|
|
41
|
+
* client's actual declarations so an option added to `FunctionsAPI` later
|
|
42
|
+
* cannot leave every generated invoker silently behind.
|
|
43
|
+
*
|
|
44
|
+
* ── The nullable root input ──────────────────────────────────────────────
|
|
45
|
+
*
|
|
46
|
+
* The generic overload maps a `nil` input to an OMITTED `rootInput`, which the
|
|
47
|
+
* server defaults to `{}` — rejected by a schema that allows only a string or
|
|
48
|
+
* null. So when the rendered root input type is itself Optional, the generated
|
|
49
|
+
* body BRANCHES: a value delegates the typed value directly (keeping
|
|
50
|
+
* `JSONCoding`'s exact `Int64` path), and `nil` delegates `JSONValue.null`,
|
|
51
|
+
* which is a non-nil `Encodable` and reaches the wire as `rootInput: null`
|
|
52
|
+
* through the same forwarding path a scalar root already uses. Proved live
|
|
53
|
+
* before this emitter was written (#3344 step 0).
|
|
54
|
+
*/
|
|
55
|
+
import * as path from "path";
|
|
56
|
+
import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
|
|
57
|
+
import { fingerprintToml } from "../db-codegen/dbFingerprint.js";
|
|
58
|
+
import { describeFunctionSchemas, describeFunctionSchemaSet, FunctionSchemaCodegenError, } from "../function-schema-codegen.js";
|
|
59
|
+
import { renderSwiftRootTypeDetail, SwiftCodegenError } from "./schemaToSwift.js";
|
|
60
|
+
import { workflowSwiftFactoryName } from "./swiftNaming.js";
|
|
61
|
+
import { GENERATED_SWIFT_FILE_SUFFIX, SWIFT_BANNER_PREFIX, swiftKeyLiteral, workflowSwiftTypeBaseName, } from "./generator.js";
|
|
62
|
+
import { DB_SWIFT_BANNER_PREFIXES } from "./dbGenerator.js";
|
|
63
|
+
import { AGENT_SWIFT_BANNER_PREFIX, FUNCTION_SWIFT_BANNER_PREFIX, } from "./banners.js";
|
|
64
|
+
import { AGENT_SWIFT_FILE_SUFFIX, renderAgentSwiftFile, } from "./agentGenerator.js";
|
|
65
|
+
import { describePromptSchema, } from "../prompt-schema-codegen.js";
|
|
66
|
+
import { assertNoForeignGeneratorSymbolCollision, parseTopLevelSwiftSymbols, } from "./siblingSymbols.js";
|
|
67
|
+
export { FUNCTION_SWIFT_BANNER_PREFIX };
|
|
68
|
+
/** The Swift module the generated types + invoker import. */
|
|
69
|
+
const CLIENT_MODULE = "JsBaoClient";
|
|
70
|
+
const INDENT = " ";
|
|
71
|
+
/** Banners owned by the OTHER two Swift generators, in every spelling. */
|
|
72
|
+
const FOREIGN_SWIFT_BANNERS = [SWIFT_BANNER_PREFIX, ...DB_SWIFT_BANNER_PREFIXES];
|
|
73
|
+
const INPUT_PARAMETER = {
|
|
74
|
+
label: "input",
|
|
75
|
+
type: null,
|
|
76
|
+
defaultValue: null,
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The verb tables. `invoke` is a request function's whole surface; the other
|
|
80
|
+
* four are a task function's.
|
|
81
|
+
*/
|
|
82
|
+
export const FUNCTION_INVOKER_VERBS = {
|
|
83
|
+
invoke: {
|
|
84
|
+
verb: "invoke",
|
|
85
|
+
comparedAgainst: { kind: "overload", method: "invoke", dropLabels: ["functionKey"] },
|
|
86
|
+
parameters: [
|
|
87
|
+
INPUT_PARAMETER,
|
|
88
|
+
{ label: "contextDocId", type: "String?", defaultValue: "nil" },
|
|
89
|
+
{ label: "meta", type: "[String: Any]?", defaultValue: "nil" },
|
|
90
|
+
{ label: "timeout", type: "TimeInterval?", defaultValue: "nil" },
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
start: {
|
|
94
|
+
verb: "start",
|
|
95
|
+
comparedAgainst: { kind: "overload", method: "start", dropLabels: ["functionKey"] },
|
|
96
|
+
parameters: [
|
|
97
|
+
INPUT_PARAMETER,
|
|
98
|
+
{ label: "runKey", type: "String?", defaultValue: "nil" },
|
|
99
|
+
{ label: "contextDocId", type: "String?", defaultValue: "nil" },
|
|
100
|
+
{ label: "meta", type: "[String: Any]?", defaultValue: "nil" },
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
getStatus: {
|
|
104
|
+
verb: "getStatus",
|
|
105
|
+
comparedAgainst: { kind: "overload", method: "getStatus", dropLabels: [] },
|
|
106
|
+
parameters: [{ label: "runId", type: "String", defaultValue: null }],
|
|
107
|
+
},
|
|
108
|
+
waitFor: {
|
|
109
|
+
verb: "waitFor",
|
|
110
|
+
// `as:` is the output witness the generated method binds itself.
|
|
111
|
+
comparedAgainst: { kind: "overload", method: "waitFor", dropLabels: ["as"] },
|
|
112
|
+
parameters: [
|
|
113
|
+
{ label: "runId", type: "String", defaultValue: null },
|
|
114
|
+
{ label: "options", type: "FunctionWaitOptions?", defaultValue: "nil" },
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
terminate: {
|
|
118
|
+
verb: "terminate",
|
|
119
|
+
comparedAgainst: { kind: "ref", type: "FunctionRunRef", dropLabels: ["functionKey"] },
|
|
120
|
+
parameters: [
|
|
121
|
+
{ label: "runKey", type: "String", defaultValue: null },
|
|
122
|
+
{ label: "contextDocId", type: "String?", defaultValue: "nil" },
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* The verb inventory, grouped by the mode that once gated it.
|
|
128
|
+
*
|
|
129
|
+
* #3454 made `any` the default, exposing BOTH sets because the runner is
|
|
130
|
+
* chosen at call time; each lock then exposed only its own. #3482 retired the
|
|
131
|
+
* gating entirely — the ROUTE is the runtime selector, and every invoker is
|
|
132
|
+
* emitted with every verb (see the header, and the emission site). Nothing
|
|
133
|
+
* reads this to DECIDE what to emit any more; the signature-parity test reads
|
|
134
|
+
* it as the list of verbs whose parameters must match `FunctionsAPI`.
|
|
135
|
+
*/
|
|
136
|
+
export const FUNCTION_INVOKER_VERBS_BY_MODE = {
|
|
137
|
+
request: ["invoke"],
|
|
138
|
+
task: ["start", "getStatus", "waitFor", "terminate"],
|
|
139
|
+
any: ["invoke", "start", "getStatus", "waitFor", "terminate"],
|
|
140
|
+
};
|
|
141
|
+
function parseFunction(source) {
|
|
142
|
+
const ir = describeFunctionSchemas(source);
|
|
143
|
+
const base = workflowSwiftTypeBaseName(ir.key);
|
|
144
|
+
const inputTypeName = `${base}Input`;
|
|
145
|
+
const outputTypeName = `${base}Output`;
|
|
146
|
+
// The banner and every schema failure name the FILE, which an authored
|
|
147
|
+
// `[function] key` can spell differently from the key (E1).
|
|
148
|
+
const sourceFile = ir.fileLabel;
|
|
149
|
+
const input = renderSwiftRootTypeDetail(inputTypeName, ir.inputSchema, { sourceFile });
|
|
150
|
+
const output = renderSwiftRootTypeDetail(outputTypeName, ir.outputSchema, { sourceFile });
|
|
151
|
+
return {
|
|
152
|
+
key: ir.key,
|
|
153
|
+
fileLabel: ir.fileLabel,
|
|
154
|
+
base,
|
|
155
|
+
inputTypeName,
|
|
156
|
+
outputTypeName,
|
|
157
|
+
structName: `${base}Function`,
|
|
158
|
+
factoryName: workflowSwiftFactoryName(ir.key),
|
|
159
|
+
inputRequired: ir.inputRequired,
|
|
160
|
+
inputOptionalRoot: input.optional,
|
|
161
|
+
inputDecl: input.decl,
|
|
162
|
+
outputDecl: output.decl,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The `input:` parameter declaration. An already-Optional root type is never
|
|
167
|
+
* wrapped a second time (spec decision 6) — the alias carries the optionality,
|
|
168
|
+
* and the branching body below gives its `nil` the meaning the schema gives it.
|
|
169
|
+
*/
|
|
170
|
+
function inputParameter(fn) {
|
|
171
|
+
if (fn.inputOptionalRoot) {
|
|
172
|
+
return fn.inputRequired
|
|
173
|
+
? `input: ${fn.inputTypeName}`
|
|
174
|
+
: `input: ${fn.inputTypeName} = nil`;
|
|
175
|
+
}
|
|
176
|
+
return fn.inputRequired
|
|
177
|
+
? `input: ${fn.inputTypeName}`
|
|
178
|
+
: `input: ${fn.inputTypeName}? = nil`;
|
|
179
|
+
}
|
|
180
|
+
/** `label: type = default` for a non-input parameter, from the verb table. */
|
|
181
|
+
function renderParameter(parameter) {
|
|
182
|
+
const withDefault = parameter.defaultValue === null ? "" : ` = ${parameter.defaultValue}`;
|
|
183
|
+
return `${parameter.label}: ${parameter.type}${withDefault}`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The delegation body for a verb that forwards `input`. When the root input
|
|
187
|
+
* type is Optional the body branches so a `nil` reaches the wire as the
|
|
188
|
+
* explicit `rootInput: null` the declaration allows, instead of being dropped
|
|
189
|
+
* into the client's "no input" path (which the server turns into `{}`).
|
|
190
|
+
*/
|
|
191
|
+
function renderForwardingBody(fn, indentLevel, call) {
|
|
192
|
+
const I = INDENT.repeat(indentLevel);
|
|
193
|
+
if (!fn.inputOptionalRoot)
|
|
194
|
+
return call("input", indentLevel);
|
|
195
|
+
return [
|
|
196
|
+
`${I}// \`${fn.inputTypeName}\` is Optional, so \`nil\` is the JSON \`null\` the`,
|
|
197
|
+
`${I}// declared schema allows — not "no input". Delegating \`nil\` would omit`,
|
|
198
|
+
`${I}// \`rootInput\`, which the server defaults to \`{}\`; \`JSONValue.null\``,
|
|
199
|
+
`${I}// travels as the null through the same path a scalar root uses.`,
|
|
200
|
+
`${I}if let input {`,
|
|
201
|
+
...call("input", indentLevel + 1),
|
|
202
|
+
`${I}}`,
|
|
203
|
+
...call("JSONValue.null", indentLevel),
|
|
204
|
+
];
|
|
205
|
+
}
|
|
206
|
+
function renderInvoke(fn) {
|
|
207
|
+
const keyLiteral = swiftKeyLiteral(fn.key);
|
|
208
|
+
const table = FUNCTION_INVOKER_VERBS.invoke;
|
|
209
|
+
const I = INDENT;
|
|
210
|
+
const call = (inputExpr, level) => {
|
|
211
|
+
const B = INDENT.repeat(level);
|
|
212
|
+
const keyword = fn.inputOptionalRoot ? "return try await " : "try await ";
|
|
213
|
+
return [
|
|
214
|
+
`${B}${keyword}client.functions.invoke(`,
|
|
215
|
+
`${B}${INDENT}${keyLiteral},`,
|
|
216
|
+
`${B}${INDENT}input: ${inputExpr},`,
|
|
217
|
+
`${B}${INDENT}contextDocId: contextDocId,`,
|
|
218
|
+
`${B}${INDENT}meta: meta,`,
|
|
219
|
+
`${B}${INDENT}timeout: timeout`,
|
|
220
|
+
`${B})`,
|
|
221
|
+
];
|
|
222
|
+
};
|
|
223
|
+
return [
|
|
224
|
+
``,
|
|
225
|
+
`${I}/// Invoke the \`${fn.key}\` request function and wait for its result.`,
|
|
226
|
+
`${I}public func invoke(`,
|
|
227
|
+
`${I}${I}${inputParameter(fn)},`,
|
|
228
|
+
...table.parameters
|
|
229
|
+
.slice(1)
|
|
230
|
+
.map((p, index, all) => `${I}${I}${renderParameter(p)}${index === all.length - 1 ? "" : ","}`),
|
|
231
|
+
`${I}) async throws -> FunctionResult<${fn.outputTypeName}> {`,
|
|
232
|
+
...renderForwardingBody(fn, 2, call),
|
|
233
|
+
`${I}}`,
|
|
234
|
+
];
|
|
235
|
+
}
|
|
236
|
+
function renderStart(fn) {
|
|
237
|
+
const keyLiteral = swiftKeyLiteral(fn.key);
|
|
238
|
+
const table = FUNCTION_INVOKER_VERBS.start;
|
|
239
|
+
const I = INDENT;
|
|
240
|
+
const call = (inputExpr, level) => {
|
|
241
|
+
const B = INDENT.repeat(level);
|
|
242
|
+
const keyword = fn.inputOptionalRoot ? "return try await " : "try await ";
|
|
243
|
+
return [
|
|
244
|
+
`${B}${keyword}client.functions.start(`,
|
|
245
|
+
`${B}${INDENT}${keyLiteral},`,
|
|
246
|
+
`${B}${INDENT}input: ${inputExpr},`,
|
|
247
|
+
`${B}${INDENT}runKey: runKey,`,
|
|
248
|
+
`${B}${INDENT}contextDocId: contextDocId,`,
|
|
249
|
+
`${B}${INDENT}meta: meta`,
|
|
250
|
+
`${B})`,
|
|
251
|
+
];
|
|
252
|
+
};
|
|
253
|
+
return [
|
|
254
|
+
``,
|
|
255
|
+
`${I}/// Start the \`${fn.key}\` task function; returns the run handle.`,
|
|
256
|
+
`${I}@discardableResult`,
|
|
257
|
+
`${I}public func start(`,
|
|
258
|
+
`${I}${I}${inputParameter(fn)},`,
|
|
259
|
+
...table.parameters
|
|
260
|
+
.slice(1)
|
|
261
|
+
.map((p, index, all) => `${I}${I}${renderParameter(p)}${index === all.length - 1 ? "" : ","}`),
|
|
262
|
+
`${I}) async throws -> FunctionStartResult {`,
|
|
263
|
+
...renderForwardingBody(fn, 2, call),
|
|
264
|
+
`${I}}`,
|
|
265
|
+
];
|
|
266
|
+
}
|
|
267
|
+
function renderTaskPollers(fn) {
|
|
268
|
+
const I = INDENT;
|
|
269
|
+
const keyLiteral = swiftKeyLiteral(fn.key);
|
|
270
|
+
const waitFor = FUNCTION_INVOKER_VERBS.waitFor;
|
|
271
|
+
const terminate = FUNCTION_INVOKER_VERBS.terminate;
|
|
272
|
+
return [
|
|
273
|
+
``,
|
|
274
|
+
`${I}/// A run's status, with \`output\` bound to \`${fn.outputTypeName}\`.`,
|
|
275
|
+
`${I}public func getStatus(${renderParameter(FUNCTION_INVOKER_VERBS.getStatus.parameters[0])}) async throws -> FunctionRunResult<${fn.outputTypeName}> {`,
|
|
276
|
+
`${I}${I}try await client.functions.getStatus(runId: runId)`,
|
|
277
|
+
`${I}}`,
|
|
278
|
+
``,
|
|
279
|
+
`${I}/// Wait for a run to settle; \`output\` is bound to \`${fn.outputTypeName}\`.`,
|
|
280
|
+
`${I}public func waitFor(`,
|
|
281
|
+
...waitFor.parameters.map((p, index, all) => `${I}${I}${renderParameter(p)}${index === all.length - 1 ? "" : ","}`),
|
|
282
|
+
`${I}) async throws -> FunctionRunResult<${fn.outputTypeName}> {`,
|
|
283
|
+
`${I}${I}try await client.functions.waitFor(`,
|
|
284
|
+
`${I}${I}${I}runId: runId,`,
|
|
285
|
+
`${I}${I}${I}as: ${fn.outputTypeName}.self,`,
|
|
286
|
+
`${I}${I}${I}options: options`,
|
|
287
|
+
`${I}${I})`,
|
|
288
|
+
`${I}}`,
|
|
289
|
+
``,
|
|
290
|
+
`${I}/// Terminate a run; \`output\` is bound to \`${fn.outputTypeName}\` (a terminated`,
|
|
291
|
+
`${I}/// run can carry partial output). The function key is pinned.`,
|
|
292
|
+
`${I}@discardableResult`,
|
|
293
|
+
`${I}public func terminate(`,
|
|
294
|
+
...terminate.parameters.map((p, index, all) => `${I}${I}${renderParameter(p)}${index === all.length - 1 ? "" : ","}`),
|
|
295
|
+
`${I}) async throws -> FunctionRunResult<${fn.outputTypeName}> {`,
|
|
296
|
+
`${I}${I}try await client.functions.terminate(`,
|
|
297
|
+
`${I}${I}${I}FunctionRunRef(`,
|
|
298
|
+
`${I}${I}${I}${I}functionKey: ${keyLiteral},`,
|
|
299
|
+
`${I}${I}${I}${I}runKey: runKey,`,
|
|
300
|
+
`${I}${I}${I}${I}contextDocId: contextDocId`,
|
|
301
|
+
`${I}${I}${I})`,
|
|
302
|
+
`${I}${I})`,
|
|
303
|
+
`${I}}`,
|
|
304
|
+
];
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The typed invoker struct + its free-function factory. Since #3482 every
|
|
308
|
+
* function carries BOTH verb sets: the config says nothing about how a
|
|
309
|
+
* function runs, and the caller picks the runtime at each call.
|
|
310
|
+
*/
|
|
311
|
+
function renderInvoker(fn) {
|
|
312
|
+
const lines = [
|
|
313
|
+
`/// Typed invoker for the \`${fn.key}\` function. Binds`,
|
|
314
|
+
`/// \`${fn.inputTypeName}\` / \`${fn.outputTypeName}\` over the generic`,
|
|
315
|
+
`/// \`FunctionsAPI\` overloads. Obtain one with \`${fn.factoryName}(client)\`.`,
|
|
316
|
+
`public struct ${fn.structName}: Sendable {`,
|
|
317
|
+
`${INDENT}public let client: JsBaoClient`,
|
|
318
|
+
``,
|
|
319
|
+
`${INDENT}public init(client: JsBaoClient) {`,
|
|
320
|
+
`${INDENT}${INDENT}self.client = client`,
|
|
321
|
+
`${INDENT}}`,
|
|
322
|
+
];
|
|
323
|
+
// #3482 — `invoke` first, then the four task verbs, for EVERY function.
|
|
324
|
+
lines.push(...renderInvoke(fn));
|
|
325
|
+
lines.push(...renderStart(fn), ...renderTaskPollers(fn));
|
|
326
|
+
lines.push(`}`);
|
|
327
|
+
lines.push(``, `/// Typed invoker factory for the \`${fn.key}\` function.`, `public func ${fn.factoryName}(_ client: JsBaoClient) -> ${fn.structName} {`, `${INDENT}${fn.structName}(client: client)`, `}`);
|
|
328
|
+
return lines.join("\n");
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Render the full `<key>.generated.swift` content for one `functions/*.toml`.
|
|
332
|
+
* Pure — exported so tests can assert on the string directly.
|
|
333
|
+
*/
|
|
334
|
+
export function renderFunctionSwiftFile(source) {
|
|
335
|
+
const fn = parseFunction(source);
|
|
336
|
+
const fingerprint = fingerprintToml(source.tomlContent);
|
|
337
|
+
const banner = [
|
|
338
|
+
`${FUNCTION_SWIFT_BANNER_PREFIX}${fn.fileLabel.replace(/^functions\//, "")} — DO NOT EDIT.`,
|
|
339
|
+
"// Run `primitive functions codegen --lang swift` to regenerate.",
|
|
340
|
+
`// fingerprint: ${fingerprint}`,
|
|
341
|
+
].join("\n");
|
|
342
|
+
const imports = ["import Foundation", `import ${CLIENT_MODULE}`].join("\n");
|
|
343
|
+
const content = [banner, imports, fn.inputDecl, fn.outputDecl, renderInvoker(fn)].join("\n\n") +
|
|
344
|
+
"\n";
|
|
345
|
+
return {
|
|
346
|
+
key: fn.key,
|
|
347
|
+
content,
|
|
348
|
+
// EVERY top-level declaration the file makes, read back off the rendered
|
|
349
|
+
// source rather than enumerated by hand (CR3344-001). The obvious four are
|
|
350
|
+
// `<Key>Input`/`<Key>Output`, the invoker struct and the factory — but a
|
|
351
|
+
// root that renders as a typealias (an array of objects, say) also declares
|
|
352
|
+
// its element type, `<Key>InputItem`, at module level. Enumerating the four
|
|
353
|
+
// left those helpers out of both the run-scoped registry and the
|
|
354
|
+
// cross-generator scan, so a database type or another function declaring
|
|
355
|
+
// the same symbol produced Swift that would not compile. This is also the
|
|
356
|
+
// exact parser the retained-sibling side uses, so the two halves of every
|
|
357
|
+
// comparison now speak one alphabet (backticks stripped included).
|
|
358
|
+
symbols: parseTopLevelSwiftSymbols(content),
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Run Swift function codegen end-to-end. The whole `functions/` directory is
|
|
363
|
+
* always the input (there is no `--single` form), so the run owns its output
|
|
364
|
+
* directory's functions-banner files completely and sweeps the orphans.
|
|
365
|
+
*/
|
|
366
|
+
export async function generateFunctionSwiftTypes(options) {
|
|
367
|
+
const outAbs = path.resolve(options.outputDir);
|
|
368
|
+
// The shared set-level IR: sorted, and two files resolving to one key
|
|
369
|
+
// refused naming both (E2). The TS base-name check stays on the TS side —
|
|
370
|
+
// the registry below is the Swift run's own, and covers the invoker struct
|
|
371
|
+
// and the factory the TS check knows nothing about.
|
|
372
|
+
const described = describeFunctionSchemaSet(options.inputs);
|
|
373
|
+
const symbolOwner = new Map();
|
|
374
|
+
const filesToWrite = new Map();
|
|
375
|
+
for (const { source } of described) {
|
|
376
|
+
const rendered = renderFunctionSwiftFile(source);
|
|
377
|
+
for (const symbol of rendered.symbols) {
|
|
378
|
+
const prior = symbolOwner.get(symbol);
|
|
379
|
+
if (prior !== undefined && prior !== rendered.key) {
|
|
380
|
+
throw new SwiftCodegenError(`swift function codegen: type-name collision — function keys ` +
|
|
381
|
+
`"${prior}" and "${rendered.key}" both produce Swift symbol ` +
|
|
382
|
+
`"${symbol}", which redeclare when all .generated.swift files ` +
|
|
383
|
+
`compile into one module. Rename one function key so the two differ ` +
|
|
384
|
+
`after Swift normalization.`, { sourceFile: `functions/${rendered.key}.toml` });
|
|
385
|
+
}
|
|
386
|
+
symbolOwner.set(symbol, rendered.key);
|
|
387
|
+
}
|
|
388
|
+
filesToWrite.set(path.join(outAbs, `${rendered.key}${GENERATED_SWIFT_FILE_SUFFIX}`), rendered.content);
|
|
389
|
+
}
|
|
390
|
+
// #3798 — the agents' files, in the same registry and the same write: a
|
|
391
|
+
// symbol an agent and a function both declare is refused naming both.
|
|
392
|
+
for (const source of options.agentInputs ?? []) {
|
|
393
|
+
if (!isAgentPromptSource(source))
|
|
394
|
+
continue;
|
|
395
|
+
const rendered = renderAgentSwiftFile(source);
|
|
396
|
+
const owner = `prompt ${rendered.key}`;
|
|
397
|
+
for (const symbol of rendered.symbols) {
|
|
398
|
+
const prior = symbolOwner.get(symbol);
|
|
399
|
+
if (prior !== undefined && prior !== owner) {
|
|
400
|
+
throw new SwiftCodegenError(`swift function codegen: type-name collision — "${prior}" and ` +
|
|
401
|
+
`"${owner}" both produce Swift symbol "${symbol}", which ` +
|
|
402
|
+
`redeclare when all .generated.swift files compile into one ` +
|
|
403
|
+
`module. Rename one key so the two differ after Swift normalization.`, { sourceFile: `prompts/${rendered.key}.toml` });
|
|
404
|
+
}
|
|
405
|
+
symbolOwner.set(symbol, owner);
|
|
406
|
+
}
|
|
407
|
+
filesToWrite.set(path.join(outAbs, `${rendered.key}${AGENT_SWIFT_FILE_SUFFIX}`), rendered.content);
|
|
408
|
+
}
|
|
409
|
+
// Cross-generator namespace collision (the #1857 scan, a third way round).
|
|
410
|
+
// A workflow- or database-owned sibling in the same directory declares its
|
|
411
|
+
// own top-level symbols; a full functions run does not regenerate them, so
|
|
412
|
+
// the two files coexist and redeclare once everything compiles into one
|
|
413
|
+
// module. The foreign-banner WRITE guard below is path-only and never sees
|
|
414
|
+
// it.
|
|
415
|
+
await assertNoForeignGeneratorSymbolCollision({
|
|
416
|
+
outputDir: outAbs,
|
|
417
|
+
foreignBanner: FOREIGN_SWIFT_BANNERS,
|
|
418
|
+
suffix: GENERATED_SWIFT_FILE_SUFFIX,
|
|
419
|
+
emitted: symbolOwner,
|
|
420
|
+
makeError: ({ symbol, owner, siblingStem }) => new SwiftCodegenError(`swift function codegen: type-name collision with another generator's ` +
|
|
421
|
+
`file — function key "${owner}" emits Swift symbol "${symbol}", but the ` +
|
|
422
|
+
`existing "${siblingStem}${GENERATED_SWIFT_FILE_SUFFIX}" (owned by the ` +
|
|
423
|
+
`workflow or database Swift generator) already declares a top-level ` +
|
|
424
|
+
`"${symbol}" in the same output directory, which redeclares when all ` +
|
|
425
|
+
`.generated.swift files compile into one module. Rename the function or ` +
|
|
426
|
+
`the "${siblingStem}" source so the two differ after Swift ` +
|
|
427
|
+
`normalization, or give one generator a separate -o directory.`, { sourceFile: `functions/${owner}.toml` }),
|
|
428
|
+
});
|
|
429
|
+
return await writeOrCheckGeneratedFiles({
|
|
430
|
+
outputDir: outAbs,
|
|
431
|
+
filesToWrite,
|
|
432
|
+
check: options.check,
|
|
433
|
+
fullOwnership: true,
|
|
434
|
+
generatedSuffix: GENERATED_SWIFT_FILE_SUFFIX,
|
|
435
|
+
// #3798 — the run owns the agents' files as well as the invokers.
|
|
436
|
+
ownershipBanner: [FUNCTION_SWIFT_BANNER_PREFIX, AGENT_SWIFT_BANNER_PREFIX],
|
|
437
|
+
foreignOwnershipBanners: FOREIGN_SWIFT_BANNERS,
|
|
438
|
+
onForeignBannerCollision: ({ filePath, foreignBanner }) => new SwiftCodegenError(`swift codegen: output collision — this run would overwrite ` +
|
|
439
|
+
`"${path.basename(filePath)}" in the shared output directory, which ` +
|
|
440
|
+
`is already owned by a different generator (banner ` +
|
|
441
|
+
`"${foreignBanner.trim()}"). A function key and a workflow key or ` +
|
|
442
|
+
`database type with the same name cannot share an output directory; ` +
|
|
443
|
+
`give one generator a separate -o directory.`),
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Whether a prompt source is an agent, read leniently: a prompt file that does
|
|
448
|
+
* not parse is reported by the commands that push it, not by a Swift run.
|
|
449
|
+
*/
|
|
450
|
+
function isAgentPromptSource(source) {
|
|
451
|
+
try {
|
|
452
|
+
return describePromptSchema(source).agent !== null;
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
if (error instanceof FunctionSchemaCodegenError &&
|
|
456
|
+
!/does not parse/.test(error.message)) {
|
|
457
|
+
throw error;
|
|
458
|
+
}
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=functionGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functionGenerator.js","sourceRoot":"","sources":["../../../../src/lib/swift-codegen/functionGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `workflows codegen --lang swift` orchestrator (issue #1547, Phases 2-3).
|
|
3
3
|
*
|
|
4
4
|
* The Swift counterpart of `workflow-codegen/generator.ts`. Reads the SAME
|
|
5
|
-
* synced workflow TOMLs (
|
|
5
|
+
* synced workflow TOMLs (`primitive/<env>/workflows/*.toml`) and
|
|
6
6
|
* emits ONE `<key>.generated.swift` per workflow. Each file carries the
|
|
7
7
|
* workflow's `<Key>Input`/`<Key>Output` Swift `Codable` types (Phase 1's
|
|
8
8
|
* `renderSwiftRootType`) plus — Phase 3 — a typed invoker factory: a free
|
|
@@ -76,6 +76,12 @@ export interface GenerateWorkflowSwiftTypesOptions {
|
|
|
76
76
|
* `create-checkout-session` → `CreateCheckoutSession`; `123-job` → `_123Job`
|
|
77
77
|
* (digit-leading prefixed, parity with the TS `ensureValidIdentifierStart`). */
|
|
78
78
|
export declare function workflowSwiftTypeBaseName(key: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* A Swift string literal for a config key (the runtime call passes it
|
|
81
|
+
* verbatim). Exported so the functions emitter (#3344) pins its key literals
|
|
82
|
+
* through the SAME escape helper rather than a second copy of these rules.
|
|
83
|
+
*/
|
|
84
|
+
export declare function swiftKeyLiteral(key: string): string;
|
|
79
85
|
/**
|
|
80
86
|
* Render the full `<key>.generated.swift` content for a single workflow TOML.
|
|
81
87
|
* Returns null for a reserved (`__internal.*`) workflow. Pure — exported so
|