primitive-admin 1.0.61 → 1.0.62
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 +125 -69
- package/assets/skill/skills/primitive-platform/SKILL.md +336 -37
- package/dist/bin/primitive.js +25 -14
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/analytics.js +36 -16
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +49 -188
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +13 -153
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +14 -100
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +47 -8
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.d.ts +46 -0
- package/dist/src/commands/config.js +479 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/connections.js +12 -7
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +84 -176
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +171 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.js +4 -4
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/databases.d.ts +63 -0
- package/dist/src/commands/databases.js +649 -87
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +869 -12
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +18 -125
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.d.ts +12 -1
- package/dist/src/commands/env.js +98 -25
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +116 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/group-type-configs.js +14 -109
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/init.d.ts +9 -1
- package/dist/src/commands/init.js +1056 -277
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +136 -421
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +112 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.js +33 -141
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +206 -563
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -1
- package/dist/src/commands/rule-sets.js +16 -132
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.js +67 -234
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/sessions.js +17 -5
- package/dist/src/commands/sessions.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +113 -70
- package/dist/src/commands/sync-app-settings.js +193 -242
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +1932 -49
- package/dist/src/commands/sync.js +9521 -1769
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +8 -2
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +92 -1
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.js +44 -58
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/webhooks.js +318 -156
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +49 -12
- package/dist/src/commands/workflows.js +652 -1086
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/access-rule-display.d.ts +21 -0
- package/dist/src/lib/access-rule-display.js +34 -0
- package/dist/src/lib/access-rule-display.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +541 -61
- package/dist/src/lib/api-client.js +559 -102
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +180 -25
- package/dist/src/lib/app-settings-descriptor.js +403 -82
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/canonical-json.d.ts +12 -0
- package/dist/src/lib/canonical-json.js +35 -0
- package/dist/src/lib/canonical-json.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +8 -0
- package/dist/src/lib/cli-manifest.js +1 -0
- package/dist/src/lib/cli-manifest.js.map +1 -1
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +658 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +85 -0
- package/dist/src/lib/config-payload.js +116 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +130 -0
- package/dist/src/lib/config-surface.js +300 -0
- package/dist/src/lib/config-surface.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +10 -0
- package/dist/src/lib/credentials-store.js +23 -0
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/data-input.d.ts +23 -0
- package/dist/src/lib/data-input.js +50 -0
- package/dist/src/lib/data-input.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
- package/dist/src/lib/env-resolver-core.d.ts +147 -0
- package/dist/src/lib/env-resolver-core.js +265 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +28 -6
- package/dist/src/lib/env-resolver.js +44 -32
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/generated-allowlist.js +12 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
- package/dist/src/lib/generated-config-surfaces.js +4058 -0
- package/dist/src/lib/generated-config-surfaces.js.map +1 -0
- package/dist/src/lib/generated-template-lint.d.ts +212 -0
- package/dist/src/lib/generated-template-lint.js +624 -0
- package/dist/src/lib/generated-template-lint.js.map +1 -0
- package/dist/src/lib/init-adopt.d.ts +16 -0
- package/dist/src/lib/init-adopt.js +34 -0
- package/dist/src/lib/init-adopt.js.map +1 -0
- package/dist/src/lib/init-assets.d.ts +39 -0
- package/dist/src/lib/init-assets.js +97 -0
- package/dist/src/lib/init-assets.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +44 -5
- package/dist/src/lib/init-config.js +80 -7
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/init-ios-links.d.ts +50 -0
- package/dist/src/lib/init-ios-links.js +153 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/init-plan.d.ts +80 -0
- package/dist/src/lib/init-plan.js +95 -0
- package/dist/src/lib/init-plan.js.map +1 -0
- package/dist/src/lib/init-production-env.d.ts +48 -0
- package/dist/src/lib/init-production-env.js +59 -0
- package/dist/src/lib/init-production-env.js.map +1 -0
- package/dist/src/lib/init-schema.d.ts +74 -0
- package/dist/src/lib/init-schema.js +358 -0
- package/dist/src/lib/init-schema.js.map +1 -0
- package/dist/src/lib/init-xcode.d.ts +33 -0
- package/dist/src/lib/init-xcode.js +114 -0
- package/dist/src/lib/init-xcode.js.map +1 -0
- package/dist/src/lib/integration-request-config.d.ts +30 -0
- package/dist/src/lib/integration-request-config.js +145 -0
- package/dist/src/lib/integration-request-config.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +55 -0
- package/dist/src/lib/local-state.js +167 -0
- package/dist/src/lib/local-state.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +568 -0
- package/dist/src/lib/log-inspection.js +639 -0
- package/dist/src/lib/log-inspection.js.map +1 -0
- package/dist/src/lib/migration-nag.d.ts +2 -2
- package/dist/src/lib/migration-nag.js +3 -3
- package/dist/src/lib/object-status-filter.d.ts +22 -0
- package/dist/src/lib/object-status-filter.js +45 -0
- package/dist/src/lib/object-status-filter.js.map +1 -0
- package/dist/src/lib/output.d.ts +24 -1
- package/dist/src/lib/output.js +42 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manager.d.ts +140 -0
- package/dist/src/lib/package-manager.js +305 -0
- package/dist/src/lib/package-manager.js.map +1 -0
- package/dist/src/lib/paginate.d.ts +50 -0
- package/dist/src/lib/paginate.js +53 -0
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/platform-owned.d.ts +29 -3
- package/dist/src/lib/platform-owned.js +42 -3
- package/dist/src/lib/platform-owned.js.map +1 -1
- package/dist/src/lib/project-config.js +13 -5
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +1 -1
- package/dist/src/lib/query-operators.js +1 -1
- package/dist/src/lib/record-filter.d.ts +18 -0
- package/dist/src/lib/record-filter.js +55 -0
- package/dist/src/lib/record-filter.js.map +1 -0
- package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
- package/dist/src/lib/resolve-init-dev-port.js +55 -0
- package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
- package/dist/src/lib/resolve-init-server.d.ts +64 -0
- package/dist/src/lib/resolve-init-server.js +77 -0
- package/dist/src/lib/resolve-init-server.js.map +1 -0
- package/dist/src/lib/resolve-platform.d.ts +43 -14
- package/dist/src/lib/resolve-platform.js +74 -12
- package/dist/src/lib/resolve-platform.js.map +1 -1
- package/dist/src/lib/run-status.d.ts +19 -0
- package/dist/src/lib/run-status.generated.d.ts +39 -0
- package/dist/src/lib/run-status.generated.js +66 -0
- package/dist/src/lib/run-status.generated.js.map +1 -0
- package/dist/src/lib/run-status.js +19 -0
- package/dist/src/lib/run-status.js.map +1 -0
- package/dist/src/lib/server-text-normalization.d.ts +51 -0
- package/dist/src/lib/server-text-normalization.js +90 -0
- package/dist/src/lib/server-text-normalization.js.map +1 -0
- package/dist/src/lib/server-url.d.ts +22 -0
- package/dist/src/lib/server-url.js +33 -0
- package/dist/src/lib/server-url.js.map +1 -0
- package/dist/src/lib/signing-secret-status.d.ts +81 -0
- package/dist/src/lib/signing-secret-status.js +116 -0
- package/dist/src/lib/signing-secret-status.js.map +1 -0
- package/dist/src/lib/skill-installer.js +6 -3
- package/dist/src/lib/skill-installer.js.map +1 -1
- package/dist/src/lib/snapshots.d.ts +2 -2
- package/dist/src/lib/snapshots.js +2 -2
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
- package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/generator.d.ts +11 -2
- package/dist/src/lib/swift-codegen/generator.js +181 -7
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
- package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +39 -0
- package/dist/src/lib/sync-paths.js +70 -2
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +138 -31
- package/dist/src/lib/sync-resource-types.js +241 -47
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +95 -0
- package/dist/src/lib/sync-selectors.js +228 -0
- package/dist/src/lib/sync-selectors.js.map +1 -0
- package/dist/src/lib/template.d.ts +62 -4
- package/dist/src/lib/template.js +147 -39
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/test-case-keys.d.ts +29 -0
- package/dist/src/lib/test-case-keys.js +55 -0
- package/dist/src/lib/test-case-keys.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +15 -0
- package/dist/src/lib/test-case-variables.js +29 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +4 -4
- package/dist/src/lib/toml-database-config.js +27 -34
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +9 -5
- package/dist/src/lib/toml-metadata-config.js +40 -45
- package/dist/src/lib/toml-metadata-config.js.map +1 -1
- package/dist/src/lib/toml-native-form.d.ts +1 -1
- package/dist/src/lib/toml-native-form.js +1 -1
- package/dist/src/lib/toml-params-validator.d.ts +1 -1
- package/dist/src/lib/toml-params-validator.js +1 -1
- package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
- package/dist/src/lib/toml-scalar-edit.js +283 -0
- package/dist/src/lib/toml-scalar-edit.js.map +1 -0
- package/dist/src/lib/user-selector.d.ts +24 -0
- package/dist/src/lib/user-selector.js +33 -0
- package/dist/src/lib/user-selector.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +25 -0
- package/dist/src/lib/version-check.js +77 -8
- package/dist/src/lib/version-check.js.map +1 -1
- package/dist/src/lib/watch.d.ts +121 -0
- package/dist/src/lib/watch.js +169 -0
- package/dist/src/lib/watch.js.map +1 -0
- package/dist/src/lib/workflow-apply.d.ts +69 -45
- package/dist/src/lib/workflow-apply.js +99 -72
- package/dist/src/lib/workflow-apply.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +4 -4
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +11 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +5 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
- package/dist/src/lib/workflow-config-apply.d.ts +70 -0
- package/dist/src/lib/workflow-config-apply.js +137 -0
- package/dist/src/lib/workflow-config-apply.js.map +1 -0
- package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
- package/dist/src/lib/workflow-config-sidecar.js +96 -0
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
- package/dist/src/lib/workflow-defaults.d.ts +29 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
- package/dist/src/lib/workflow-include-preserve.js +286 -0
- package/dist/src/lib/workflow-include-preserve.js.map +1 -0
- package/dist/src/lib/workflow-payload.d.ts +31 -20
- package/dist/src/lib/workflow-payload.js +100 -110
- package/dist/src/lib/workflow-payload.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +37 -16
- package/dist/src/lib/workflow-toml-validator.js +141 -16
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +78 -22
- package/dist/src/validators.d.ts +7 -7
- package/dist/src/validators.js +6 -6
- package/package.json +11 -6
- package/dist/src/commands/settings.d.ts +0 -15
- package/dist/src/commands/settings.js +0 -102
- package/dist/src/commands/settings.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI's mirror of the server's integration `requestConfig` normalization
|
|
3
|
+
* (issue #2880, DSO-003).
|
|
4
|
+
*
|
|
5
|
+
* `normalizeIntegrationRequestConfig` (`src/services/integration-utils.ts`)
|
|
6
|
+
* rewrites an accepted request config on the way in: the base URL gains a
|
|
7
|
+
* single trailing slash, methods are upper-cased and de-duplicated, header and
|
|
8
|
+
* query lists are trimmed, and the optional keys are materialized. So the state
|
|
9
|
+
* the server RETURNS is not the text a hand-authored file holds — and comparing
|
|
10
|
+
* the two raw makes an authored integration read `local-edited` on every run,
|
|
11
|
+
* with push re-applying the same update forever. Baseline restamping cannot
|
|
12
|
+
* save it: after an apply the remote hash equals the fresh baseline while the
|
|
13
|
+
* local hash still does not.
|
|
14
|
+
*
|
|
15
|
+
* Mirrored rather than imported: the published CLI must not import server
|
|
16
|
+
* `src/` at runtime (the same rule the vendored config surfaces follow). The
|
|
17
|
+
* acceptance fixture pinning this mirror is the tripwire if the server's rule
|
|
18
|
+
* moves — a disagreement then shows as an ordinary `Modified` row, never a
|
|
19
|
+
* crash, which is why every step here is total: an input the server would
|
|
20
|
+
* REJECT (a missing base URL, a bogus method) is left exactly as authored so
|
|
21
|
+
* the server's own error is what the operator sees.
|
|
22
|
+
*/
|
|
23
|
+
/** Trim, drop empties, optionally re-case, and de-duplicate. */
|
|
24
|
+
function normalizeStringList(value, { lowercase = false, uppercase = false } = {}) {
|
|
25
|
+
if (!Array.isArray(value))
|
|
26
|
+
return [];
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const item of value) {
|
|
29
|
+
if (typeof item !== "string")
|
|
30
|
+
continue;
|
|
31
|
+
let normalized = item.trim();
|
|
32
|
+
if (!normalized)
|
|
33
|
+
continue;
|
|
34
|
+
if (lowercase)
|
|
35
|
+
normalized = normalized.toLowerCase();
|
|
36
|
+
if (uppercase)
|
|
37
|
+
normalized = normalized.toUpperCase();
|
|
38
|
+
out.push(normalized);
|
|
39
|
+
}
|
|
40
|
+
return [...new Set(out)];
|
|
41
|
+
}
|
|
42
|
+
/** `https://host/v1///` → `https://host/v1/`; anything else stays as authored. */
|
|
43
|
+
function canonicalBaseUrl(raw) {
|
|
44
|
+
if (typeof raw !== "string")
|
|
45
|
+
return raw;
|
|
46
|
+
const base = raw.trim();
|
|
47
|
+
if (!(base.startsWith("http://") ||
|
|
48
|
+
base.startsWith("https://") ||
|
|
49
|
+
base.startsWith("test://"))) {
|
|
50
|
+
// The server rejects this; leaving it alone keeps the rejection the
|
|
51
|
+
// server's to make and the difference visible in the meantime.
|
|
52
|
+
return base;
|
|
53
|
+
}
|
|
54
|
+
return `${base.replace(/\/+$/, "")}/`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The request config as the server would store it, from what the file says.
|
|
58
|
+
*
|
|
59
|
+
* Applied to BOTH sides of the comparison (the remote side reaches it through
|
|
60
|
+
* the same projection), which is safe because the server's own output is
|
|
61
|
+
* already canonical and this is idempotent.
|
|
62
|
+
*/
|
|
63
|
+
export function canonicalizeIntegrationRequestConfig(input) {
|
|
64
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
65
|
+
return input;
|
|
66
|
+
const raw = input;
|
|
67
|
+
const allowedMethods = normalizeStringList(raw.allowedMethods, {
|
|
68
|
+
uppercase: true,
|
|
69
|
+
});
|
|
70
|
+
const defaultMethod = raw.defaultMethod
|
|
71
|
+
? String(raw.defaultMethod).toUpperCase()
|
|
72
|
+
: allowedMethods[0] || "GET";
|
|
73
|
+
const methods = allowedMethods.length > 0 ? allowedMethods : ["GET"];
|
|
74
|
+
if (!methods.includes(defaultMethod))
|
|
75
|
+
methods.push(defaultMethod);
|
|
76
|
+
const allowedPaths = normalizeStringList(raw.allowedPaths).map((path) => path === "*" ? "/*" : path);
|
|
77
|
+
const defaultHeaders = {};
|
|
78
|
+
if (raw.defaultHeaders && typeof raw.defaultHeaders === "object") {
|
|
79
|
+
for (const [key, value] of Object.entries(raw.defaultHeaders)) {
|
|
80
|
+
if (!key)
|
|
81
|
+
continue;
|
|
82
|
+
defaultHeaders[key] = value == null ? "" : String(value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const staticQuery = {};
|
|
86
|
+
if (raw.staticQuery && typeof raw.staticQuery === "object") {
|
|
87
|
+
for (const [key, value] of Object.entries(raw.staticQuery)) {
|
|
88
|
+
if (!key)
|
|
89
|
+
continue;
|
|
90
|
+
if (typeof value === "string" ||
|
|
91
|
+
typeof value === "number" ||
|
|
92
|
+
typeof value === "boolean") {
|
|
93
|
+
staticQuery[key] = value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const validBodyModes = ["json", "raw", "multipart"];
|
|
98
|
+
const bodyMode = validBodyModes.includes(raw.bodyMode)
|
|
99
|
+
? raw.bodyMode
|
|
100
|
+
: undefined;
|
|
101
|
+
let multipartFieldMapping;
|
|
102
|
+
if (Array.isArray(raw.multipartFieldMapping)) {
|
|
103
|
+
multipartFieldMapping = raw.multipartFieldMapping
|
|
104
|
+
.filter((f) => f &&
|
|
105
|
+
typeof f === "object" &&
|
|
106
|
+
typeof f.fieldName === "string" &&
|
|
107
|
+
(f.type === "attachment" || f.type === "value"))
|
|
108
|
+
.map((f) => ({
|
|
109
|
+
fieldName: f.fieldName,
|
|
110
|
+
type: f.type,
|
|
111
|
+
...(f.attachmentIndex !== undefined && {
|
|
112
|
+
attachmentIndex: f.attachmentIndex,
|
|
113
|
+
}),
|
|
114
|
+
...(f.attachmentName !== undefined && {
|
|
115
|
+
attachmentName: f.attachmentName,
|
|
116
|
+
}),
|
|
117
|
+
...(f.value !== undefined && { value: f.value }),
|
|
118
|
+
}));
|
|
119
|
+
if (multipartFieldMapping.length === 0)
|
|
120
|
+
multipartFieldMapping = undefined;
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
baseUrl: canonicalBaseUrl(raw.baseUrl),
|
|
124
|
+
allowedMethods: methods,
|
|
125
|
+
allowedPaths: allowedPaths.length > 0 ? allowedPaths : ["/*"],
|
|
126
|
+
defaultMethod,
|
|
127
|
+
defaultHeaders,
|
|
128
|
+
forwardHeaders: normalizeStringList(raw.forwardHeaders, {
|
|
129
|
+
lowercase: true,
|
|
130
|
+
}),
|
|
131
|
+
staticQuery,
|
|
132
|
+
forwardQueryParams: normalizeStringList(raw.forwardQueryParams, {
|
|
133
|
+
lowercase: true,
|
|
134
|
+
}),
|
|
135
|
+
// The server stores `true` unless the value is exactly `false`.
|
|
136
|
+
responsePassthrough: raw.responsePassthrough === false ? false : true,
|
|
137
|
+
...(raw.exampleQuery && typeof raw.exampleQuery === "object"
|
|
138
|
+
? { exampleQuery: raw.exampleQuery }
|
|
139
|
+
: {}),
|
|
140
|
+
...(raw.exampleBody !== undefined ? { exampleBody: raw.exampleBody } : {}),
|
|
141
|
+
...(bodyMode ? { bodyMode } : {}),
|
|
142
|
+
...(multipartFieldMapping ? { multipartFieldMapping } : {}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=integration-request-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-request-config.js","sourceRoot":"","sources":["../../../src/lib/integration-request-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-machine Primitive state: `.primitive/local.json` (#2873).
|
|
3
|
+
*
|
|
4
|
+
* `primitive env use` records which environment THIS machine is pointed at.
|
|
5
|
+
* That is not a team decision, so it must not land in the committed
|
|
6
|
+
* `.primitive/config.json` — `defaultEnvironment` stays the team default a
|
|
7
|
+
* fresh clone resolves. The file sits beside `credentials.json`, which has the
|
|
8
|
+
* same "local, never committed" property.
|
|
9
|
+
*
|
|
10
|
+
* Reads go through the shared core (`env-resolver-core.ts`) so every reader —
|
|
11
|
+
* CLI, Vite plugin, Swift script — agrees; this module owns the writes and the
|
|
12
|
+
* ignore coverage that keeps the file out of `git status`.
|
|
13
|
+
*/
|
|
14
|
+
import { localStatePathForConfigPath, readLocalSelection } from "./env-resolver-core.js";
|
|
15
|
+
export { localStatePathForConfigPath, readLocalSelection };
|
|
16
|
+
/**
|
|
17
|
+
* Writes this machine's environment selection. Returns the path written so
|
|
18
|
+
* callers can name it in their success message.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeLocalSelection(configPath: string, name: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Clears the selection if (and only if) it names `name`. Used by `env remove`
|
|
23
|
+
* so removing the selected environment can't leave a dangling selection that
|
|
24
|
+
* makes every later command fail.
|
|
25
|
+
*/
|
|
26
|
+
export declare function clearLocalSelection(configPath: string, name: string): boolean;
|
|
27
|
+
export interface IgnoreCoverageOutcome {
|
|
28
|
+
/**
|
|
29
|
+
* - `not-a-repo` — nothing to do; the file cannot show up in a diff.
|
|
30
|
+
* - `already-ignored`— a committed .gitignore (or an earlier exclude) covers it.
|
|
31
|
+
* - `excluded` — we appended a pattern to the repo's info/exclude file.
|
|
32
|
+
* - `failed` — git was unavailable or the write failed; caller warns.
|
|
33
|
+
*/
|
|
34
|
+
status: "not-a-repo" | "already-ignored" | "excluded" | "failed";
|
|
35
|
+
/** The exclude file written, for `excluded`. */
|
|
36
|
+
excludePath?: string;
|
|
37
|
+
/** The pattern written, for `excluded`. */
|
|
38
|
+
pattern?: string;
|
|
39
|
+
/** Why, for `failed`. */
|
|
40
|
+
detail?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Makes sure `.primitive/local.json` is ignored before it is written.
|
|
44
|
+
*
|
|
45
|
+
* Templates scaffolded from now on carry the entry in their `.gitignore`, but
|
|
46
|
+
* projects created before this change do not — and `env use` writing an
|
|
47
|
+
* untracked-but-committable file would be exactly the "switching backends
|
|
48
|
+
* dirties the repo" problem this replaced. When the file is not already
|
|
49
|
+
* covered we append an anchored pattern to the repository's exclude file,
|
|
50
|
+
* resolved via `git rev-parse --git-path info/exclude` so a linked worktree
|
|
51
|
+
* (where `.git` is a FILE) works, and anchored relative to
|
|
52
|
+
* `git rev-parse --show-toplevel` so a project root nested below the worktree
|
|
53
|
+
* root is not mis-rooted.
|
|
54
|
+
*/
|
|
55
|
+
export declare function ensureLocalStateIgnored(localStatePath: string): IgnoreCoverageOutcome;
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-machine Primitive state: `.primitive/local.json` (#2873).
|
|
3
|
+
*
|
|
4
|
+
* `primitive env use` records which environment THIS machine is pointed at.
|
|
5
|
+
* That is not a team decision, so it must not land in the committed
|
|
6
|
+
* `.primitive/config.json` — `defaultEnvironment` stays the team default a
|
|
7
|
+
* fresh clone resolves. The file sits beside `credentials.json`, which has the
|
|
8
|
+
* same "local, never committed" property.
|
|
9
|
+
*
|
|
10
|
+
* Reads go through the shared core (`env-resolver-core.ts`) so every reader —
|
|
11
|
+
* CLI, Vite plugin, Swift script — agrees; this module owns the writes and the
|
|
12
|
+
* ignore coverage that keeps the file out of `git status`.
|
|
13
|
+
*/
|
|
14
|
+
import { execFileSync } from "child_process";
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "fs";
|
|
16
|
+
import { basename, dirname, join, relative, sep } from "path";
|
|
17
|
+
import { PRIMITIVE_LOCAL_STATE_VERSION, localStatePathForConfigPath, readLocalSelection, } from "./env-resolver-core.js";
|
|
18
|
+
export { localStatePathForConfigPath, readLocalSelection };
|
|
19
|
+
/**
|
|
20
|
+
* Writes this machine's environment selection. Returns the path written so
|
|
21
|
+
* callers can name it in their success message.
|
|
22
|
+
*/
|
|
23
|
+
export function writeLocalSelection(configPath, name) {
|
|
24
|
+
const path = localStatePathForConfigPath(configPath);
|
|
25
|
+
const dir = dirname(path);
|
|
26
|
+
if (!existsSync(dir))
|
|
27
|
+
mkdirSync(dir, { recursive: true });
|
|
28
|
+
// Preserve any unrelated keys a future version of the CLI may have written.
|
|
29
|
+
let existing = {};
|
|
30
|
+
if (existsSync(path)) {
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
33
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
34
|
+
existing = parsed;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// A corrupt file is replaced wholesale — that is exactly the remedy the
|
|
39
|
+
// corrupt-local-state error tells the user to reach for.
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const body = {
|
|
43
|
+
...existing,
|
|
44
|
+
version: PRIMITIVE_LOCAL_STATE_VERSION,
|
|
45
|
+
selectedEnvironment: name,
|
|
46
|
+
};
|
|
47
|
+
writeFileSync(path, JSON.stringify(body, null, 2) + "\n");
|
|
48
|
+
return path;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Clears the selection if (and only if) it names `name`. Used by `env remove`
|
|
52
|
+
* so removing the selected environment can't leave a dangling selection that
|
|
53
|
+
* makes every later command fail.
|
|
54
|
+
*/
|
|
55
|
+
export function clearLocalSelection(configPath, name) {
|
|
56
|
+
const path = localStatePathForConfigPath(configPath);
|
|
57
|
+
if (!existsSync(path))
|
|
58
|
+
return false;
|
|
59
|
+
let current;
|
|
60
|
+
try {
|
|
61
|
+
current = readLocalSelection(configPath);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Corrupt local state: nothing to match against, and rewriting it here
|
|
65
|
+
// would swallow an error the user should see from a resolution instead.
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (current !== name)
|
|
69
|
+
return false;
|
|
70
|
+
let existing = {};
|
|
71
|
+
try {
|
|
72
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
73
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
74
|
+
existing = parsed;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
delete existing.selectedEnvironment;
|
|
81
|
+
writeFileSync(path, JSON.stringify({ version: PRIMITIVE_LOCAL_STATE_VERSION, ...existing }, null, 2) + "\n");
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
function git(cwd, args) {
|
|
85
|
+
return execFileSync("git", args, {
|
|
86
|
+
cwd,
|
|
87
|
+
encoding: "utf-8",
|
|
88
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
89
|
+
}).trim();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Escapes a path segment for use in a gitignore pattern. `*`, `?`, `[`, `]`
|
|
93
|
+
* and `\` are pattern syntax; `#` and `!` are line-leading syntax. Anchoring
|
|
94
|
+
* the pattern with a leading `/` (done by the caller) is what makes it
|
|
95
|
+
* relative to the repository root rather than "any directory named this".
|
|
96
|
+
*/
|
|
97
|
+
function escapeGitignorePattern(relPath) {
|
|
98
|
+
return relPath.replace(/[\\*?[\]]/g, (c) => "\\" + c).replace(/^([#!])/, "\\$1");
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Makes sure `.primitive/local.json` is ignored before it is written.
|
|
102
|
+
*
|
|
103
|
+
* Templates scaffolded from now on carry the entry in their `.gitignore`, but
|
|
104
|
+
* projects created before this change do not — and `env use` writing an
|
|
105
|
+
* untracked-but-committable file would be exactly the "switching backends
|
|
106
|
+
* dirties the repo" problem this replaced. When the file is not already
|
|
107
|
+
* covered we append an anchored pattern to the repository's exclude file,
|
|
108
|
+
* resolved via `git rev-parse --git-path info/exclude` so a linked worktree
|
|
109
|
+
* (where `.git` is a FILE) works, and anchored relative to
|
|
110
|
+
* `git rev-parse --show-toplevel` so a project root nested below the worktree
|
|
111
|
+
* root is not mis-rooted.
|
|
112
|
+
*/
|
|
113
|
+
export function ensureLocalStateIgnored(localStatePath) {
|
|
114
|
+
const dir = dirname(localStatePath);
|
|
115
|
+
if (!existsSync(dir))
|
|
116
|
+
mkdirSync(dir, { recursive: true });
|
|
117
|
+
let topLevel;
|
|
118
|
+
try {
|
|
119
|
+
topLevel = git(dir, ["rev-parse", "--show-toplevel"]);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { status: "not-a-repo" };
|
|
123
|
+
}
|
|
124
|
+
if (!topLevel)
|
|
125
|
+
return { status: "not-a-repo" };
|
|
126
|
+
try {
|
|
127
|
+
execFileSync("git", ["check-ignore", "-q", "--", localStatePath], {
|
|
128
|
+
cwd: dir,
|
|
129
|
+
stdio: "ignore",
|
|
130
|
+
});
|
|
131
|
+
return { status: "already-ignored" };
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Exit 1 means "not ignored" — carry on and add coverage.
|
|
135
|
+
}
|
|
136
|
+
// git reports the toplevel with symlinks resolved (/private/var on macOS);
|
|
137
|
+
// the caller's path usually is not (/var). Compare like for like or the
|
|
138
|
+
// "relative" path escapes the repository entirely.
|
|
139
|
+
const realDir = realpathSync(dir);
|
|
140
|
+
const rel = relative(topLevel, join(realDir, basename(localStatePath)))
|
|
141
|
+
.split(sep)
|
|
142
|
+
.join("/");
|
|
143
|
+
const pattern = "/" + escapeGitignorePattern(rel);
|
|
144
|
+
try {
|
|
145
|
+
const excludePath = git(dir, ["rev-parse", "--path-format=absolute", "--git-path", "info/exclude"]);
|
|
146
|
+
if (!excludePath)
|
|
147
|
+
return { status: "failed", detail: "could not locate the git exclude file" };
|
|
148
|
+
mkdirSync(dirname(excludePath), { recursive: true });
|
|
149
|
+
const existing = existsSync(excludePath) ? readFileSync(excludePath, "utf-8") : "";
|
|
150
|
+
if (existing.split(/\r?\n/).some((line) => line.trim() === pattern)) {
|
|
151
|
+
return { status: "already-ignored" };
|
|
152
|
+
}
|
|
153
|
+
const prefix = existing === "" || existing.endsWith("\n") ? "" : "\n";
|
|
154
|
+
writeFileSync(excludePath, existing +
|
|
155
|
+
prefix +
|
|
156
|
+
`\n# Added by 'primitive env use' — this machine's Primitive environment\n` +
|
|
157
|
+
`# selection is local state, not a team decision. Add the same pattern to a\n` +
|
|
158
|
+
`# committed .gitignore to make the coverage shared.\n` +
|
|
159
|
+
pattern +
|
|
160
|
+
"\n");
|
|
161
|
+
return { status: "excluded", excludePath, pattern };
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
return { status: "failed", detail: err?.message || String(err) };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=local-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-state.js","sourceRoot":"","sources":["../../../src/lib/local-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE9D,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,IAAY;IAClE,MAAM,IAAI,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,4EAA4E;IAC5E,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,QAAQ,GAAG,MAAiC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,QAAQ;QACX,OAAO,EAAE,6BAA6B;QACtC,mBAAmB,EAAE,IAAI;KAC1B,CAAC;IACF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,IAAY;IAClE,MAAM,IAAI,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,IAAI,OAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,wEAAwE;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,QAAQ,GAAG,MAAiC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,mBAAmB,CAAC;IACpC,aAAa,CACX,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACxF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAkBD,SAAS,GAAG,CAAC,GAAW,EAAE,IAAc;IACtC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/B,GAAG;QACH,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;KACpC,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,cAAsB;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAE/C,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE;YAChE,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IAED,2EAA2E;IAC3E,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;SACpE,KAAK,CAAC,GAAG,CAAC;SACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,GAAG,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,wBAAwB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAE/F,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;YACpE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACvC,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,aAAa,CACX,WAAW,EACX,QAAQ;YACN,MAAM;YACN,2EAA2E;YAC3E,8EAA8E;YAC9E,uDAAuD;YACvD,OAAO;YACP,IAAI,CACP,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACnE,CAAC;AACH,CAAC"}
|