@elevasis/core 0.23.0 → 0.24.1
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/dist/index.d.ts +4343 -2690
- package/dist/index.js +1101 -156
- package/dist/knowledge/index.d.ts +574 -210
- package/dist/knowledge/index.js +104 -1
- package/dist/organization-model/index.d.ts +4343 -2690
- package/dist/organization-model/index.js +1101 -156
- package/dist/test-utils/index.d.ts +483 -109
- package/dist/test-utils/index.js +904 -144
- package/package.json +3 -3
- package/src/README.md +14 -14
- package/src/__tests__/publish.test.ts +24 -24
- package/src/__tests__/template-core-compatibility.test.ts +9 -12
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2137 -2093
- package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
- package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
- package/src/auth/multi-tenancy/index.ts +26 -26
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
- package/src/auth/multi-tenancy/memberships/index.ts +26 -26
- package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
- package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
- package/src/auth/multi-tenancy/permissions.test.ts +42 -42
- package/src/auth/multi-tenancy/permissions.ts +123 -123
- package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
- package/src/auth/multi-tenancy/role-management/index.ts +16 -16
- package/src/auth/multi-tenancy/theme-presets.ts +45 -45
- package/src/auth/multi-tenancy/types.ts +57 -57
- package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
- package/src/business/README.md +2 -2
- package/src/business/acquisition/activity-events.test.ts +250 -250
- package/src/business/acquisition/activity-events.ts +93 -93
- package/src/business/acquisition/api-schemas.test.ts +1883 -1843
- package/src/business/acquisition/api-schemas.ts +1492 -1497
- package/src/business/acquisition/build-templates.test.ts +240 -240
- package/src/business/acquisition/build-templates.ts +98 -98
- package/src/business/acquisition/crm-next-action.test.ts +262 -262
- package/src/business/acquisition/crm-next-action.ts +220 -220
- package/src/business/acquisition/crm-priority.test.ts +216 -216
- package/src/business/acquisition/crm-priority.ts +349 -349
- package/src/business/acquisition/crm-state-actions.test.ts +153 -153
- package/src/business/acquisition/deal-ownership.test.ts +351 -351
- package/src/business/acquisition/deal-ownership.ts +120 -120
- package/src/business/acquisition/derive-actions.test.ts +129 -104
- package/src/business/acquisition/derive-actions.ts +74 -84
- package/src/business/acquisition/index.ts +171 -170
- package/src/business/acquisition/ontology-validation.ts +309 -0
- package/src/business/acquisition/stateful.ts +30 -30
- package/src/business/acquisition/types.ts +396 -396
- package/src/business/clients/api-schemas.test.ts +115 -115
- package/src/business/clients/api-schemas.ts +158 -158
- package/src/business/clients/index.ts +1 -1
- package/src/business/crm/api-schemas.ts +40 -40
- package/src/business/crm/index.ts +1 -1
- package/src/business/deals/api-schemas.ts +87 -87
- package/src/business/deals/index.ts +1 -1
- package/src/business/index.ts +5 -5
- package/src/business/projects/types.ts +144 -144
- package/src/commands/queue/types/task.ts +15 -15
- package/src/execution/core/runner-types.ts +61 -61
- package/src/execution/core/sse-executions.ts +7 -7
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
- package/src/execution/engine/agent/core/types.ts +25 -25
- package/src/execution/engine/agent/index.ts +6 -6
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
- package/src/execution/engine/index.ts +443 -443
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
- package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
- package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
- package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
- package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
- package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
- package/src/execution/engine/tools/integration/service.test.ts +239 -239
- package/src/execution/engine/tools/integration/service.ts +172 -172
- package/src/execution/engine/tools/integration/tool.ts +255 -255
- package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
- package/src/execution/engine/tools/messages.ts +43 -43
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
- package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
- package/src/execution/engine/tools/platform/email/types.ts +97 -97
- package/src/execution/engine/tools/registry.ts +704 -704
- package/src/execution/engine/tools/tool-maps.ts +831 -831
- package/src/execution/engine/tools/types.ts +234 -234
- package/src/execution/engine/workflow/types.ts +195 -197
- package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
- package/src/execution/external/api-schemas.ts +40 -40
- package/src/execution/external/index.ts +1 -1
- package/src/index.ts +18 -18
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
- package/src/integrations/credentials/api-schemas.ts +146 -146
- package/src/integrations/credentials/schemas.ts +200 -200
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
- package/src/integrations/oauth/provider-registry.ts +74 -74
- package/src/integrations/oauth/server/credentials.ts +43 -43
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
- package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
- package/src/integrations/webhook-endpoints/types.ts +58 -58
- package/src/knowledge/README.md +32 -32
- package/src/knowledge/__tests__/queries.test.ts +626 -535
- package/src/knowledge/format.ts +99 -99
- package/src/knowledge/index.ts +5 -5
- package/src/knowledge/published.ts +5 -5
- package/src/knowledge/queries.ts +269 -218
- package/src/operations/activities/api-schemas.ts +80 -80
- package/src/operations/activities/types.ts +64 -64
- package/src/organization-model/README.md +149 -149
- package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
- package/src/organization-model/__tests__/defaults.test.ts +168 -168
- package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
- package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
- package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
- package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
- package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
- package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
- package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
- package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
- package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
- package/src/organization-model/__tests__/domains/resources.test.ts +387 -277
- package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
- package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
- package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
- package/src/organization-model/__tests__/domains/topology.test.ts +188 -0
- package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
- package/src/organization-model/__tests__/foundation.test.ts +77 -77
- package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
- package/src/organization-model/__tests__/graph.test.ts +1312 -862
- package/src/organization-model/__tests__/icons.test.ts +10 -1
- package/src/organization-model/__tests__/knowledge.test.ts +251 -15
- package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
- package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
- package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
- package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
- package/src/organization-model/__tests__/resolve.test.ts +274 -164
- package/src/organization-model/__tests__/schema.test.ts +844 -301
- package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
- package/src/organization-model/catalogs/lead-gen.ts +144 -144
- package/src/organization-model/content-kinds/config.ts +36 -36
- package/src/organization-model/content-kinds/index.ts +76 -72
- package/src/organization-model/content-kinds/pipeline.ts +68 -68
- package/src/organization-model/content-kinds/registry.ts +44 -44
- package/src/organization-model/content-kinds/status.ts +71 -71
- package/src/organization-model/content-kinds/template.ts +83 -83
- package/src/organization-model/content-kinds/types.ts +117 -117
- package/src/organization-model/contracts.ts +27 -27
- package/src/organization-model/defaults.ts +42 -50
- package/src/organization-model/domains/actions.ts +333 -239
- package/src/organization-model/domains/customers.ts +78 -78
- package/src/organization-model/domains/entities.ts +144 -144
- package/src/organization-model/domains/goals.ts +83 -83
- package/src/organization-model/domains/knowledge.ts +117 -101
- package/src/organization-model/domains/navigation.ts +139 -139
- package/src/organization-model/domains/offerings.ts +71 -71
- package/src/organization-model/domains/policies.ts +102 -102
- package/src/organization-model/domains/projects.ts +14 -14
- package/src/organization-model/domains/prospecting.ts +395 -395
- package/src/organization-model/domains/resources.ts +202 -124
- package/src/organization-model/domains/roles.ts +96 -96
- package/src/organization-model/domains/sales.test.ts +218 -218
- package/src/organization-model/domains/sales.ts +380 -380
- package/src/organization-model/domains/shared.ts +63 -63
- package/src/organization-model/domains/statuses.ts +339 -339
- package/src/organization-model/domains/systems.ts +217 -172
- package/src/organization-model/domains/topology.ts +261 -0
- package/src/organization-model/foundation.ts +75 -75
- package/src/organization-model/graph/build.ts +1043 -867
- package/src/organization-model/graph/index.ts +4 -4
- package/src/organization-model/graph/link.ts +10 -10
- package/src/organization-model/graph/schema.ts +75 -68
- package/src/organization-model/graph/types.ts +71 -64
- package/src/organization-model/helpers.ts +289 -241
- package/src/organization-model/icons.ts +78 -66
- package/src/organization-model/index.ts +128 -125
- package/src/organization-model/migration-helpers.ts +247 -244
- package/src/organization-model/ontology.ts +658 -0
- package/src/organization-model/organization-graph.mdx +110 -90
- package/src/organization-model/organization-model.mdx +225 -213
- package/src/organization-model/published.ts +299 -222
- package/src/organization-model/resolve.ts +146 -91
- package/src/organization-model/schema.ts +818 -659
- package/src/organization-model/surface-projection.ts +212 -212
- package/src/organization-model/types.ts +179 -155
- package/src/platform/api/types.ts +38 -38
- package/src/platform/constants/versions.ts +3 -3
- package/src/platform/index.ts +23 -23
- package/src/platform/registry/__tests__/command-view.test.ts +10 -10
- package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
- package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
- package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
- package/src/platform/registry/__tests__/validation.test.ts +1444 -1259
- package/src/platform/registry/command-view.ts +10 -10
- package/src/platform/registry/index.ts +103 -103
- package/src/platform/registry/resource-link.ts +32 -32
- package/src/platform/registry/resource-registry.ts +886 -886
- package/src/platform/registry/serialization.ts +295 -295
- package/src/platform/registry/serialized-types.ts +166 -166
- package/src/platform/registry/stats-types.ts +68 -68
- package/src/platform/registry/types.ts +425 -425
- package/src/platform/registry/validation.ts +876 -684
- package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
- package/src/platform/utils/validation.ts +425 -425
- package/src/projects/api-schemas.test.ts +39 -39
- package/src/projects/api-schemas.ts +291 -291
- package/src/reference/_generated/contracts.md +2136 -2093
- package/src/reference/glossary.md +76 -76
- package/src/scaffold-registry/__tests__/index.test.ts +206 -206
- package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
- package/src/scaffold-registry/index.ts +392 -392
- package/src/scaffold-registry/schema.ts +243 -243
- package/src/server.ts +289 -289
- package/src/supabase/database.types.ts +3 -0
- package/src/test-utils/README.md +37 -37
- package/src/test-utils/entities.ts +108 -108
- package/src/test-utils/fixtures/memberships.ts +82 -82
- package/src/test-utils/index.ts +12 -12
- package/src/test-utils/organization-model.ts +65 -65
- package/src/test-utils/published.ts +6 -6
- package/src/test-utils/rls/RLSTestContext.ts +588 -588
- package/src/test-utils/test-utils.test.ts +44 -44
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest'
|
|
2
|
-
import {
|
|
3
|
-
ExternalSyncCategorySchema,
|
|
4
|
-
ExternalSyncDeletePolicySchema,
|
|
5
|
-
ExternalSyncOwnerSchema,
|
|
6
|
-
ExternalSyncStrategySchema,
|
|
7
|
-
ScaffoldEntryKindSchema,
|
|
8
|
-
ScaffoldRegistryEntrySchema,
|
|
9
|
-
ScaffoldRegistrySchema
|
|
10
|
-
} from '../schema'
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import {
|
|
3
|
+
ExternalSyncCategorySchema,
|
|
4
|
+
ExternalSyncDeletePolicySchema,
|
|
5
|
+
ExternalSyncOwnerSchema,
|
|
6
|
+
ExternalSyncStrategySchema,
|
|
7
|
+
ScaffoldEntryKindSchema,
|
|
8
|
+
ScaffoldRegistryEntrySchema,
|
|
9
|
+
ScaffoldRegistrySchema
|
|
10
|
+
} from '../schema'
|
|
11
11
|
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// Kind enum
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
15
|
|
|
16
|
-
describe('ScaffoldEntryKindSchema', () => {
|
|
16
|
+
describe('ScaffoldEntryKindSchema', () => {
|
|
17
17
|
it('accepts all declared kinds', () => {
|
|
18
18
|
const validKinds = [
|
|
19
19
|
'autogen',
|
|
20
20
|
'manual-scaffold',
|
|
21
|
-
'sync-preservation',
|
|
22
|
-
'validator',
|
|
23
|
-
'other'
|
|
21
|
+
'sync-preservation',
|
|
22
|
+
'validator',
|
|
23
|
+
'other'
|
|
24
24
|
]
|
|
25
25
|
for (const kind of validKinds) {
|
|
26
26
|
expect(ScaffoldEntryKindSchema.safeParse(kind).success).toBe(true)
|
|
@@ -34,47 +34,47 @@ describe('ScaffoldEntryKindSchema', () => {
|
|
|
34
34
|
|
|
35
35
|
it('rejects empty string', () => {
|
|
36
36
|
expect(ScaffoldEntryKindSchema.safeParse('').success).toBe(false)
|
|
37
|
-
})
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
describe('External sync enums', () => {
|
|
41
|
-
it('accepts all declared external sync categories', () => {
|
|
42
|
-
for (const category of ['replace', 'merge', 'never-touch', 'generated']) {
|
|
43
|
-
expect(ExternalSyncCategorySchema.safeParse(category).success).toBe(true)
|
|
44
|
-
}
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('accepts all declared external sync owners', () => {
|
|
48
|
-
for (const owner of ['template', '@elevasis/ui', '@elevasis/core', '@elevasis/sdk', 'generator', 'project']) {
|
|
49
|
-
expect(ExternalSyncOwnerSchema.safeParse(owner).success).toBe(true)
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('accepts all declared external sync strategies', () => {
|
|
54
|
-
for (const strategy of [
|
|
55
|
-
'replace-all',
|
|
56
|
-
'merge-regions',
|
|
57
|
-
'merge-baseline',
|
|
58
|
-
'verify-only',
|
|
59
|
-
'generated-freshness'
|
|
60
|
-
]) {
|
|
61
|
-
expect(ExternalSyncStrategySchema.safeParse(strategy).success).toBe(true)
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('accepts all declared external sync delete policies', () => {
|
|
66
|
-
for (const deletePolicy of ['none', 'manifest-only']) {
|
|
67
|
-
expect(ExternalSyncDeletePolicySchema.safeParse(deletePolicy).success).toBe(true)
|
|
68
|
-
}
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
it('rejects unknown external sync enum values', () => {
|
|
72
|
-
expect(ExternalSyncCategorySchema.safeParse('rewrite').success).toBe(false)
|
|
73
|
-
expect(ExternalSyncOwnerSchema.safeParse('packages/core').success).toBe(false)
|
|
74
|
-
expect(ExternalSyncStrategySchema.safeParse('replace-some').success).toBe(false)
|
|
75
|
-
expect(ExternalSyncDeletePolicySchema.safeParse('delete-all').success).toBe(false)
|
|
76
|
-
})
|
|
77
|
-
})
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
describe('External sync enums', () => {
|
|
41
|
+
it('accepts all declared external sync categories', () => {
|
|
42
|
+
for (const category of ['replace', 'merge', 'never-touch', 'generated']) {
|
|
43
|
+
expect(ExternalSyncCategorySchema.safeParse(category).success).toBe(true)
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
it('accepts all declared external sync owners', () => {
|
|
48
|
+
for (const owner of ['template', '@elevasis/ui', '@elevasis/core', '@elevasis/sdk', 'generator', 'project']) {
|
|
49
|
+
expect(ExternalSyncOwnerSchema.safeParse(owner).success).toBe(true)
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('accepts all declared external sync strategies', () => {
|
|
54
|
+
for (const strategy of [
|
|
55
|
+
'replace-all',
|
|
56
|
+
'merge-regions',
|
|
57
|
+
'merge-baseline',
|
|
58
|
+
'verify-only',
|
|
59
|
+
'generated-freshness'
|
|
60
|
+
]) {
|
|
61
|
+
expect(ExternalSyncStrategySchema.safeParse(strategy).success).toBe(true)
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('accepts all declared external sync delete policies', () => {
|
|
66
|
+
for (const deletePolicy of ['none', 'manifest-only']) {
|
|
67
|
+
expect(ExternalSyncDeletePolicySchema.safeParse(deletePolicy).success).toBe(true)
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('rejects unknown external sync enum values', () => {
|
|
72
|
+
expect(ExternalSyncCategorySchema.safeParse('rewrite').success).toBe(false)
|
|
73
|
+
expect(ExternalSyncOwnerSchema.safeParse('packages/core').success).toBe(false)
|
|
74
|
+
expect(ExternalSyncStrategySchema.safeParse('replace-some').success).toBe(false)
|
|
75
|
+
expect(ExternalSyncDeletePolicySchema.safeParse('delete-all').success).toBe(false)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
78
|
|
|
79
79
|
// ---------------------------------------------------------------------------
|
|
80
80
|
// Valid full entry
|
|
@@ -88,8 +88,8 @@ const validEntry = {
|
|
|
88
88
|
dependents: [
|
|
89
89
|
{
|
|
90
90
|
path: '.navigation/_generated/skeleton.md',
|
|
91
|
-
regen: 'pnpm navigation:generate',
|
|
92
|
-
hint: 'Regenerate after rename.'
|
|
91
|
+
regen: 'pnpm navigation:generate',
|
|
92
|
+
hint: 'Regenerate after rename.'
|
|
93
93
|
}
|
|
94
94
|
]
|
|
95
95
|
}
|
|
@@ -163,77 +163,77 @@ describe('ScaffoldRegistryEntrySchema — valid entry', () => {
|
|
|
163
163
|
expect(ScaffoldRegistryEntrySchema.safeParse(withAutoRegen).success).toBe(true)
|
|
164
164
|
})
|
|
165
165
|
|
|
166
|
-
it('accepts entry without auto_regen (optional)', () => {
|
|
167
|
-
expect(ScaffoldRegistryEntrySchema.safeParse(validEntry).success).toBe(true)
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
it('rejects auto_regen as a non-boolean', () => {
|
|
166
|
+
it('accepts entry without auto_regen (optional)', () => {
|
|
167
|
+
expect(ScaffoldRegistryEntrySchema.safeParse(validEntry).success).toBe(true)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
it('rejects auto_regen as a non-boolean', () => {
|
|
171
171
|
const withBadAutoRegen = { ...validEntry, auto_regen: 'yes' }
|
|
172
172
|
expect(ScaffoldRegistryEntrySchema.safeParse(withBadAutoRegen).success).toBe(false)
|
|
173
173
|
})
|
|
174
174
|
|
|
175
|
-
it('parses all seed-entry kinds with required invariants', () => {
|
|
176
|
-
const entries = [
|
|
177
|
-
{ ...validEntry, kind: 'autogen', regen: 'pnpm navigation:generate' },
|
|
178
|
-
{ ...validEntry, kind: 'manual-scaffold' },
|
|
179
|
-
{
|
|
180
|
-
...validEntry,
|
|
181
|
-
kind: 'sync-preservation',
|
|
182
|
-
owner: 'template',
|
|
183
|
-
category: 'replace',
|
|
184
|
-
strategy: 'replace-all',
|
|
185
|
-
delete_policy: 'none'
|
|
186
|
-
},
|
|
187
|
-
{ ...validEntry, kind: 'validator', dependents: [{ path: '(self)', regen: 'pnpm meta:verify' }] },
|
|
188
|
-
{ ...validEntry, kind: 'other', notes: 'Vendor generated.' }
|
|
189
|
-
]
|
|
190
|
-
for (const entry of entries) {
|
|
191
|
-
const result = ScaffoldRegistryEntrySchema.safeParse(entry)
|
|
192
|
-
const kind = entry.kind
|
|
193
|
-
expect(result.success, `kind ${kind} should parse`).toBe(true)
|
|
194
|
-
}
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
it('accepts optional external sync fields for external-sync-aware entries', () => {
|
|
198
|
-
const withExternalSyncFields = {
|
|
199
|
-
...validEntry,
|
|
200
|
-
owner: 'template',
|
|
201
|
-
category: 'replace',
|
|
202
|
-
strategy: 'replace-all',
|
|
203
|
-
delete_policy: 'manifest-only'
|
|
204
|
-
}
|
|
205
|
-
const result = ScaffoldRegistryEntrySchema.safeParse(withExternalSyncFields)
|
|
206
|
-
expect(result.success).toBe(true)
|
|
207
|
-
if (result.success) {
|
|
208
|
-
expect(result.data.category).toBe('replace')
|
|
209
|
-
expect(result.data.strategy).toBe('replace-all')
|
|
210
|
-
expect(result.data.delete_policy).toBe('manifest-only')
|
|
211
|
-
}
|
|
212
|
-
})
|
|
213
|
-
|
|
214
|
-
it('rejects autogen entries without top-level regen', () => {
|
|
215
|
-
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'autogen' })
|
|
216
|
-
expect(result.success).toBe(false)
|
|
217
|
-
})
|
|
218
|
-
|
|
219
|
-
it('rejects other entries without notes', () => {
|
|
220
|
-
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'other' })
|
|
221
|
-
expect(result.success).toBe(false)
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
it('rejects sync-preservation entries without external sync metadata', () => {
|
|
225
|
-
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'sync-preservation' })
|
|
226
|
-
expect(result.success).toBe(false)
|
|
227
|
-
})
|
|
228
|
-
|
|
229
|
-
it('keeps legacy free-form owner values valid when external sync fields are omitted', () => {
|
|
230
|
-
const result = ScaffoldRegistryEntrySchema.safeParse({
|
|
231
|
-
...validEntry,
|
|
232
|
-
owner: 'packages/core'
|
|
233
|
-
})
|
|
234
|
-
expect(result.success).toBe(true)
|
|
235
|
-
})
|
|
236
|
-
})
|
|
175
|
+
it('parses all seed-entry kinds with required invariants', () => {
|
|
176
|
+
const entries = [
|
|
177
|
+
{ ...validEntry, kind: 'autogen', regen: 'pnpm navigation:generate' },
|
|
178
|
+
{ ...validEntry, kind: 'manual-scaffold' },
|
|
179
|
+
{
|
|
180
|
+
...validEntry,
|
|
181
|
+
kind: 'sync-preservation',
|
|
182
|
+
owner: 'template',
|
|
183
|
+
category: 'replace',
|
|
184
|
+
strategy: 'replace-all',
|
|
185
|
+
delete_policy: 'none'
|
|
186
|
+
},
|
|
187
|
+
{ ...validEntry, kind: 'validator', dependents: [{ path: '(self)', regen: 'pnpm meta:verify' }] },
|
|
188
|
+
{ ...validEntry, kind: 'other', notes: 'Vendor generated.' }
|
|
189
|
+
]
|
|
190
|
+
for (const entry of entries) {
|
|
191
|
+
const result = ScaffoldRegistryEntrySchema.safeParse(entry)
|
|
192
|
+
const kind = entry.kind
|
|
193
|
+
expect(result.success, `kind ${kind} should parse`).toBe(true)
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
it('accepts optional external sync fields for external-sync-aware entries', () => {
|
|
198
|
+
const withExternalSyncFields = {
|
|
199
|
+
...validEntry,
|
|
200
|
+
owner: 'template',
|
|
201
|
+
category: 'replace',
|
|
202
|
+
strategy: 'replace-all',
|
|
203
|
+
delete_policy: 'manifest-only'
|
|
204
|
+
}
|
|
205
|
+
const result = ScaffoldRegistryEntrySchema.safeParse(withExternalSyncFields)
|
|
206
|
+
expect(result.success).toBe(true)
|
|
207
|
+
if (result.success) {
|
|
208
|
+
expect(result.data.category).toBe('replace')
|
|
209
|
+
expect(result.data.strategy).toBe('replace-all')
|
|
210
|
+
expect(result.data.delete_policy).toBe('manifest-only')
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
it('rejects autogen entries without top-level regen', () => {
|
|
215
|
+
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'autogen' })
|
|
216
|
+
expect(result.success).toBe(false)
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
it('rejects other entries without notes', () => {
|
|
220
|
+
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'other' })
|
|
221
|
+
expect(result.success).toBe(false)
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
it('rejects sync-preservation entries without external sync metadata', () => {
|
|
225
|
+
const result = ScaffoldRegistryEntrySchema.safeParse({ ...validEntry, kind: 'sync-preservation' })
|
|
226
|
+
expect(result.success).toBe(false)
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
it('keeps legacy free-form owner values valid when external sync fields are omitted', () => {
|
|
230
|
+
const result = ScaffoldRegistryEntrySchema.safeParse({
|
|
231
|
+
...validEntry,
|
|
232
|
+
owner: 'packages/core'
|
|
233
|
+
})
|
|
234
|
+
expect(result.success).toBe(true)
|
|
235
|
+
})
|
|
236
|
+
})
|
|
237
237
|
|
|
238
238
|
// ---------------------------------------------------------------------------
|
|
239
239
|
// Invalid entries — required fields missing
|
|
@@ -304,38 +304,38 @@ describe('ScaffoldRegistryEntrySchema — invalid entries', () => {
|
|
|
304
304
|
expect(ScaffoldRegistryEntrySchema.safeParse(withBadCooldown).success).toBe(false)
|
|
305
305
|
})
|
|
306
306
|
|
|
307
|
-
it('rejects non-integer cooldown_ms', () => {
|
|
308
|
-
const withBadCooldown = { ...validEntry, cooldown_ms: 300.5 }
|
|
309
|
-
expect(ScaffoldRegistryEntrySchema.safeParse(withBadCooldown).success).toBe(false)
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
it('rejects invalid external sync category', () => {
|
|
313
|
-
const withBadCategory = { ...validEntry, owner: 'template', category: 'rewrite' }
|
|
314
|
-
expect(ScaffoldRegistryEntrySchema.safeParse(withBadCategory).success).toBe(false)
|
|
315
|
-
})
|
|
316
|
-
|
|
317
|
-
it('rejects invalid external sync strategy', () => {
|
|
318
|
-
const withBadStrategy = { ...validEntry, owner: 'template', strategy: 'replace-some' }
|
|
319
|
-
expect(ScaffoldRegistryEntrySchema.safeParse(withBadStrategy).success).toBe(false)
|
|
320
|
-
})
|
|
321
|
-
|
|
322
|
-
it('rejects invalid external sync delete policy', () => {
|
|
323
|
-
const withBadDeletePolicy = { ...validEntry, owner: 'template', delete_policy: 'delete-all' }
|
|
324
|
-
expect(ScaffoldRegistryEntrySchema.safeParse(withBadDeletePolicy).success).toBe(false)
|
|
325
|
-
})
|
|
326
|
-
|
|
327
|
-
it('rejects legacy owner strings when external sync metadata is present', () => {
|
|
328
|
-
const withLegacyOwner = {
|
|
329
|
-
...validEntry,
|
|
330
|
-
owner: 'external/_template',
|
|
331
|
-
category: 'replace',
|
|
332
|
-
strategy: 'replace-all',
|
|
333
|
-
delete_policy: 'manifest-only'
|
|
334
|
-
}
|
|
335
|
-
const result = ScaffoldRegistryEntrySchema.safeParse(withLegacyOwner)
|
|
336
|
-
expect(result.success).toBe(false)
|
|
337
|
-
})
|
|
338
|
-
})
|
|
307
|
+
it('rejects non-integer cooldown_ms', () => {
|
|
308
|
+
const withBadCooldown = { ...validEntry, cooldown_ms: 300.5 }
|
|
309
|
+
expect(ScaffoldRegistryEntrySchema.safeParse(withBadCooldown).success).toBe(false)
|
|
310
|
+
})
|
|
311
|
+
|
|
312
|
+
it('rejects invalid external sync category', () => {
|
|
313
|
+
const withBadCategory = { ...validEntry, owner: 'template', category: 'rewrite' }
|
|
314
|
+
expect(ScaffoldRegistryEntrySchema.safeParse(withBadCategory).success).toBe(false)
|
|
315
|
+
})
|
|
316
|
+
|
|
317
|
+
it('rejects invalid external sync strategy', () => {
|
|
318
|
+
const withBadStrategy = { ...validEntry, owner: 'template', strategy: 'replace-some' }
|
|
319
|
+
expect(ScaffoldRegistryEntrySchema.safeParse(withBadStrategy).success).toBe(false)
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
it('rejects invalid external sync delete policy', () => {
|
|
323
|
+
const withBadDeletePolicy = { ...validEntry, owner: 'template', delete_policy: 'delete-all' }
|
|
324
|
+
expect(ScaffoldRegistryEntrySchema.safeParse(withBadDeletePolicy).success).toBe(false)
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
it('rejects legacy owner strings when external sync metadata is present', () => {
|
|
328
|
+
const withLegacyOwner = {
|
|
329
|
+
...validEntry,
|
|
330
|
+
owner: 'external/_template',
|
|
331
|
+
category: 'replace',
|
|
332
|
+
strategy: 'replace-all',
|
|
333
|
+
delete_policy: 'manifest-only'
|
|
334
|
+
}
|
|
335
|
+
const result = ScaffoldRegistryEntrySchema.safeParse(withLegacyOwner)
|
|
336
|
+
expect(result.success).toBe(false)
|
|
337
|
+
})
|
|
338
|
+
})
|
|
339
339
|
|
|
340
340
|
// ---------------------------------------------------------------------------
|
|
341
341
|
// Top-level registry document
|
|
@@ -386,16 +386,16 @@ describe('ScaffoldRegistrySchema', () => {
|
|
|
386
386
|
sources: ['apps/docs/content/docs/**/meta.json'],
|
|
387
387
|
dependents: [{ path: '(self)', regen: 'pnpm check-docs-meta' }]
|
|
388
388
|
},
|
|
389
|
-
{
|
|
390
|
-
id: 'external-template-hook-added',
|
|
391
|
-
kind: 'sync-preservation',
|
|
392
|
-
owner: 'template',
|
|
393
|
-
category: 'replace',
|
|
394
|
-
strategy: 'replace-all',
|
|
395
|
-
delete_policy: 'none',
|
|
396
|
-
sources: ['external/_template/.claude/hooks/*.mjs'],
|
|
397
|
-
dependents: [{ path: 'external/_template/.claude/settings.json', regen: 'manual' }]
|
|
398
|
-
}
|
|
389
|
+
{
|
|
390
|
+
id: 'external-template-hook-added',
|
|
391
|
+
kind: 'sync-preservation',
|
|
392
|
+
owner: 'template',
|
|
393
|
+
category: 'replace',
|
|
394
|
+
strategy: 'replace-all',
|
|
395
|
+
delete_policy: 'none',
|
|
396
|
+
sources: ['external/_template/.claude/hooks/*.mjs'],
|
|
397
|
+
dependents: [{ path: 'external/_template/.claude/settings.json', regen: 'manual' }]
|
|
398
|
+
}
|
|
399
399
|
]
|
|
400
400
|
}
|
|
401
401
|
const result = ScaffoldRegistrySchema.safeParse(multiEntry)
|