@sequenceholdings/pipeline-spec 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +114 -0
  2. package/dist/authoring/per-table-ingestion.d.ts +74 -0
  3. package/dist/authoring/per-table-ingestion.d.ts.map +1 -0
  4. package/dist/authoring/per-table-ingestion.js +122 -0
  5. package/dist/authoring/per-table-ingestion.js.map +1 -0
  6. package/dist/authoring/yaml.d.ts +6 -0
  7. package/dist/authoring/yaml.d.ts.map +1 -0
  8. package/dist/authoring/yaml.js +15 -0
  9. package/dist/authoring/yaml.js.map +1 -0
  10. package/dist/binding-gaps.d.ts +21 -0
  11. package/dist/binding-gaps.d.ts.map +1 -0
  12. package/dist/binding-gaps.js +74 -0
  13. package/dist/binding-gaps.js.map +1 -0
  14. package/dist/bodies/ingestion.d.ts +359 -0
  15. package/dist/bodies/ingestion.d.ts.map +1 -0
  16. package/dist/bodies/ingestion.js +446 -0
  17. package/dist/bodies/ingestion.js.map +1 -0
  18. package/dist/bodies/serving.d.ts +316 -0
  19. package/dist/bodies/serving.d.ts.map +1 -0
  20. package/dist/bodies/serving.js +290 -0
  21. package/dist/bodies/serving.js.map +1 -0
  22. package/dist/bodies/transformation.d.ts +397 -0
  23. package/dist/bodies/transformation.d.ts.map +1 -0
  24. package/dist/bodies/transformation.js +278 -0
  25. package/dist/bodies/transformation.js.map +1 -0
  26. package/dist/catalog-binding.d.ts +15 -0
  27. package/dist/catalog-binding.d.ts.map +1 -0
  28. package/dist/catalog-binding.js +15 -0
  29. package/dist/catalog-binding.js.map +1 -0
  30. package/dist/columns.d.ts +177 -0
  31. package/dist/columns.d.ts.map +1 -0
  32. package/dist/columns.js +89 -0
  33. package/dist/columns.js.map +1 -0
  34. package/dist/compatibility.d.ts +25 -0
  35. package/dist/compatibility.d.ts.map +1 -0
  36. package/dist/compatibility.js +108 -0
  37. package/dist/compatibility.js.map +1 -0
  38. package/dist/constants.d.ts +95 -0
  39. package/dist/constants.d.ts.map +1 -0
  40. package/dist/constants.js +105 -0
  41. package/dist/constants.js.map +1 -0
  42. package/dist/diff.d.ts +36 -0
  43. package/dist/diff.d.ts.map +1 -0
  44. package/dist/diff.js +300 -0
  45. package/dist/diff.js.map +1 -0
  46. package/dist/documentation.d.ts +22 -0
  47. package/dist/documentation.d.ts.map +1 -0
  48. package/dist/documentation.js +43 -0
  49. package/dist/documentation.js.map +1 -0
  50. package/dist/envelope.d.ts +1241 -0
  51. package/dist/envelope.d.ts.map +1 -0
  52. package/dist/envelope.js +163 -0
  53. package/dist/envelope.js.map +1 -0
  54. package/dist/errors.d.ts +30 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +47 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/graph-references.d.ts +34 -0
  59. package/dist/graph-references.d.ts.map +1 -0
  60. package/dist/graph-references.js +81 -0
  61. package/dist/graph-references.js.map +1 -0
  62. package/dist/graph.d.ts +112 -0
  63. package/dist/graph.d.ts.map +1 -0
  64. package/dist/graph.js +546 -0
  65. package/dist/graph.js.map +1 -0
  66. package/dist/hash.d.ts +28 -0
  67. package/dist/hash.d.ts.map +1 -0
  68. package/dist/hash.js +91 -0
  69. package/dist/hash.js.map +1 -0
  70. package/dist/index.d.ts +27 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +27 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/issues.d.ts +14 -0
  75. package/dist/issues.d.ts.map +1 -0
  76. package/dist/issues.js +27 -0
  77. package/dist/issues.js.map +1 -0
  78. package/dist/loader.d.ts +50 -0
  79. package/dist/loader.d.ts.map +1 -0
  80. package/dist/loader.js +241 -0
  81. package/dist/loader.js.map +1 -0
  82. package/dist/migrations/contracts.d.ts +38 -0
  83. package/dist/migrations/contracts.d.ts.map +1 -0
  84. package/dist/migrations/contracts.js +175 -0
  85. package/dist/migrations/contracts.js.map +1 -0
  86. package/dist/migrations/manifest.d.ts +137 -0
  87. package/dist/migrations/manifest.d.ts.map +1 -0
  88. package/dist/migrations/manifest.js +137 -0
  89. package/dist/migrations/manifest.js.map +1 -0
  90. package/dist/operations.d.ts +214 -0
  91. package/dist/operations.d.ts.map +1 -0
  92. package/dist/operations.js +275 -0
  93. package/dist/operations.js.map +1 -0
  94. package/dist/orm-satisfies.d.ts +132 -0
  95. package/dist/orm-satisfies.d.ts.map +1 -0
  96. package/dist/orm-satisfies.js +119 -0
  97. package/dist/orm-satisfies.js.map +1 -0
  98. package/dist/primitives.d.ts +11 -0
  99. package/dist/primitives.d.ts.map +1 -0
  100. package/dist/primitives.js +20 -0
  101. package/dist/primitives.js.map +1 -0
  102. package/dist/resolve.d.ts +124 -0
  103. package/dist/resolve.d.ts.map +1 -0
  104. package/dist/resolve.js +194 -0
  105. package/dist/resolve.js.map +1 -0
  106. package/dist/secret-scan.d.ts +34 -0
  107. package/dist/secret-scan.d.ts.map +1 -0
  108. package/dist/secret-scan.js +98 -0
  109. package/dist/secret-scan.js.map +1 -0
  110. package/dist/serving-compatibility.d.ts +14 -0
  111. package/dist/serving-compatibility.d.ts.map +1 -0
  112. package/dist/serving-compatibility.js +19 -0
  113. package/dist/serving-compatibility.js.map +1 -0
  114. package/dist/snapshot-transport.d.ts +83 -0
  115. package/dist/snapshot-transport.d.ts.map +1 -0
  116. package/dist/snapshot-transport.js +42 -0
  117. package/dist/snapshot-transport.js.map +1 -0
  118. package/dist/suggestions.d.ts +3 -0
  119. package/dist/suggestions.d.ts.map +1 -0
  120. package/dist/suggestions.js +26 -0
  121. package/dist/suggestions.js.map +1 -0
  122. package/dist/types.d.ts +72 -0
  123. package/dist/types.d.ts.map +1 -0
  124. package/dist/types.js +119 -0
  125. package/dist/types.js.map +1 -0
  126. package/package.json +52 -0
package/dist/hash.js ADDED
@@ -0,0 +1,91 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { CONTRACT_HASH_DOMAIN, SPEC_HASH_DOMAIN } from './constants.js';
3
+ import { isSchemaRef } from './columns.js';
4
+ import { feedContract, ingestionSourceIdentity } from './bodies/ingestion.js';
5
+ /**
6
+ * Key-sorted, undefined-skipped JSON — identical specs serialize identically
7
+ * regardless of YAML key order, so hashes are stable across processes and
8
+ * authoring styles. The same canonical form is used for resolved snapshots.
9
+ */
10
+ export function canonicalJson(value) {
11
+ if (value === null || typeof value !== 'object')
12
+ return JSON.stringify(value);
13
+ if (Array.isArray(value))
14
+ return `[${value.map(canonicalJson).join(',')}]`;
15
+ const entries = Object.entries(value)
16
+ .filter(([, entryValue]) => entryValue !== undefined)
17
+ .sort(([a], [b]) => (a < b ? -1 : 1))
18
+ .map(([key, entryValue]) => `${JSON.stringify(key)}:${canonicalJson(entryValue)}`);
19
+ return `{${entries.join(',')}}`;
20
+ }
21
+ const sha256 = (domain, payload) => createHash('sha256').update(domain).update(payload).digest('hex');
22
+ /** Hash of the full canonical portable spec — changes on ANY edit. */
23
+ export function computeSpecHash(spec) {
24
+ return sha256(SPEC_HASH_DOMAIN, canonicalJson(spec));
25
+ }
26
+ /** Drop the one cosmetic key nested contract objects carry. Everything else is contract-bearing. */
27
+ function omitDescription(value) {
28
+ const { description: _description, ...contract } = value;
29
+ return contract;
30
+ }
31
+ /** Columns with per-column `description` stripped; refs pass through (the ref name is the contract). */
32
+ function contractColumns(columns) {
33
+ if (isSchemaRef(columns))
34
+ return columns;
35
+ return Object.fromEntries(Object.entries(columns).map(([name, column]) => [name, omitDescription(column)]));
36
+ }
37
+ /**
38
+ * The contract-bearing surface of a spec: what downstream consumers depend
39
+ * on. Cosmetic edits do NOT appear here, so they never churn `contract_hash`
40
+ * — that includes top-level fields (title, runbook, owners, alerts) AND the
41
+ * NESTED `description` keys on feeds, outputs, columns, and projection
42
+ * columns, plus ingestion `columns` and `column_descriptions`. Everything else in these
43
+ * objects is contract-bearing:
44
+ *
45
+ * - ingestion → source identity + feeds (batch semantics, keys, cursors,
46
+ * formats, pii). The source identity (`source.system` / `worker.data_source`)
47
+ * determines every derived bronze name, so renaming it IS a contract change;
48
+ * the CREDENTIAL is a deployment binding, deliberately NOT contract surface.
49
+ * - transformation → outputs (columns + write/violation/compat posture)
50
+ * - serving → source, projection, sync_mode, exposed view, orm_binding, satisfies
51
+ */
52
+ export function contractSurface(spec) {
53
+ switch (spec.type) {
54
+ case 'ingestion':
55
+ return {
56
+ type: spec.type,
57
+ stage: spec.stage,
58
+ source: ingestionSourceIdentity(spec),
59
+ feeds: Object.fromEntries(Object.entries(spec.feeds).map(([name, feed]) => [name, feedContract(feed)])),
60
+ };
61
+ case 'transformation':
62
+ return {
63
+ type: spec.type,
64
+ stage: spec.stage,
65
+ outputs: Object.fromEntries(Object.entries(spec.outputs).map(([asset, output]) => [
66
+ asset,
67
+ { ...omitDescription(output), columns: contractColumns(output.columns) },
68
+ ])),
69
+ };
70
+ case 'serving':
71
+ return {
72
+ type: spec.type,
73
+ stage: spec.stage,
74
+ source: spec.source,
75
+ projection: {
76
+ columns: contractColumns(spec.projection.columns),
77
+ primary_key: spec.projection.primary_key,
78
+ },
79
+ ...(spec.transport ? { transport: spec.transport } : {}),
80
+ sync_mode: spec.sync_mode,
81
+ expose: spec.expose,
82
+ orm_binding: spec.orm_binding,
83
+ satisfies: spec.satisfies,
84
+ };
85
+ }
86
+ }
87
+ /** Hash of just the contract-bearing surface — stable across cosmetic edits. */
88
+ export function computeContractHash(spec) {
89
+ return sha256(CONTRACT_HASH_DOMAIN, canonicalJson(contractSurface(spec)));
90
+ }
91
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export { COLUMN_IDENTIFIER_PATTERN, CONTRACT_HASH_DOMAIN, DEPLOY_TARGET_PATTERN, DOCUMENTATION_DIRECTORY, DOCUMENTATION_FILE_SUFFIXES, GOLD_ASSET_PATTERN, IDENTIFIER_PATTERN, MAX_SPEC_FILE_BYTES, MAX_STAGE_SPEC_FILE_BYTES, OUTPUT_ASSET_PATTERN, PUBLIC_VIEW_PATTERN, REPORT_ASSET_PATTERN, REPORTING_TABLE_PATTERN, QUARANTINE_SUFFIX, RESERVED_OPERATION_NAMES, SCHEMA_FILE_SUFFIXES, SCHEMAS_DIRECTORY, SPEC_HASH_DOMAIN, STAGE_FILE_SUFFIXES, STAGE_ID_PATTERN, SYMBOLIC_REF_PATTERN, quarantineAssetName, } from './constants.js';
2
+ export { RESOLUTION_ERROR_CODES, SpecDefinitionError, SpecResolutionError, type ResolutionErrorCode, } from './errors.js';
3
+ export { credentialLikeReason, scanForCredentialLikeStrings, type CredentialFinding, } from './secret-scan.js';
4
+ export { DECIMAL_TYPE_PATTERN, DELTA_ONLY_TYPES, ORM_COLUMN_TYPES, ORM_MAPPABLE_TYPES, PIPELINE_TO_ORM_TYPE, ormMappable, ormMappingSuggestion, pipelineTypeSchema, pipelineToOrmType, type DeltaOnlyType, type OrmColumnType, type OrmMappableType, type PipelineType, } from './types.js';
5
+ export { columnIdentifierSchema, columnMapSchema, columnSchema, columnsOrRefSchema, identifierSchema, isSchemaRef, namedSchemaFileSchema, nullableKeyColumns, requireResolvedColumns, schemaRefSchema, type Column, type ColumnInput, type ColumnMap, type ColumnsOrRef, type NamedSchemaFile, type SchemaRef, } from './columns.js';
6
+ export { catalogBindingSchema, resolveCatalogBinding, targetAwareCatalogSchema, type CatalogBinding, } from './catalog-binding.js';
7
+ export { OPERATION_SCALAR_TYPES, operationInvocationSchema, operationNameSchema, operationParamSchema, operationPolicySchema, operationSchema, operationsBlockSchema, validateOperationParams, type OperationInvocation, type OperationParam, type OperationPolicy, type OperationScalarType, type OperationSpec, type OperationsBlock, type ParamValidationResult, } from './operations.js';
8
+ export { DEFAULT_MATERIALIZER_CONCURRENT, FEED_FORMATS, INGESTION_RUNTIMES, MATERIALIZER_STRATEGIES, MAX_MATERIALIZER_CONCURRENT, MAX_WORKER_CONCURRENT, SNAPSHOT_MODES, cursorSchema, feedBronzeTable, feedNameSchema, feedSchema, feedVolumePath, ingestionRuntimeSchema, ingestionSourceIdentity, materializerConcurrencySchema, materializerStrategySchema, sourceCatalog, isoDurationSchema, repoRelativePathSchema, scheduleSchema, snapshotModeSchema, sourceSystemSchema, symbolicRefSchema, workerCapacityGroup, workerSchema, type FeedFormat, type FeedSpec, type IngestionRuntime, type MaterializerStrategy, type ScheduleSpec, type SnapshotMode, } from './bodies/ingestion.js';
9
+ export { LAKEBASE_CDF_ENVELOPE_COLUMNS, TRANSFORMATION_ENGINES, WRITE_PATTERNS, isLakebaseCdfInput, outputAssetNameSchema, transformationEngineSchema, transformationInputSchema, transformationOutputSchema, transformationTriggerSchema, writePatternSchema, writeScopeSchema, type LakebaseCdfInput, type StageInput, type TransformationEngine, type TransformationInput, type TransformationOutput, type TransformationTrigger, type WritePattern, } from './bodies/transformation.js';
10
+ export { PUBLIC_VIEW_ACCESS, SYNC_MODES, ormBindingSchema, publicViewAccessSchema, projectionSchema, satisfiesSchema, syncModeSchema, type OrmBinding, type PublicViewAccess, type Projection, type SatisfiesBinding, type SyncMode, } from './bodies/serving.js';
11
+ export { CRITICALITIES, REMEDIATION_POSTURES, alertsSchema, criticalitySchema, deployTargetSchema, ingestionStageSchema, remediationPostureSchema, servingStageSchema, slosSchema, stageIdSchema, stageSpecSchema, transformationStageSchema, type Alerts, type Criticality, type IngestionStageSpec, type RemediationPosture, type ServingStageSpec, type Slos, type StageSpec, type StageSpecInput, type TransformationStageSpec, } from './envelope.js';
12
+ export { flattenSpecIssues, formatSpecIssues, type SpecIssue } from './issues.js';
13
+ export { loadSpecDirectory, parseSpecSources, parseStageFile, type LoadedPipeline, type SpecSource, } from './loader.js';
14
+ export { canonicalJson, computeContractHash, computeSpecHash, contractSurface } from './hash.js';
15
+ export { collectBindingGaps, collectPipelineBindingGaps, type BindingGap, } from './binding-gaps.js';
16
+ export { resolveSpec, targetFactsSchema, transformationOutputCatalog, type ResolvedBindings, type ResolvedIdentity, type ResolvedNames, type ResolvedProvenance, type ResolvedSpec, type SpecProvenanceInput, type TargetFacts, type TargetFactsInput, } from './resolve.js';
17
+ export { COMPATIBILITY_FINDING_CODES, checkCompatibility, type CompatibilityFinding, type CompatibilityFindingCode, } from './compatibility.js';
18
+ export { ORM_SATISFIES_FINDING_CODES, checkServingSatisfiesOrmContract, ormContractCatalogKey, ormContractCatalogSchema, ormSyncedContractRequirementSchema, type OrmContractCatalog, type OrmSatisfiesFinding, type OrmSatisfiesFindingCode, type OrmSyncedContractRequirement, } from './orm-satisfies.js';
19
+ export { CONTRACT_CHANGE_CODES, diffContracts, type ContractChange, type ContractChangeCode, type ContractClassification, type ContractDiff, type OutputContractDiff, } from './diff.js';
20
+ export { GRAPH_FINDING_CODES, externalAssetsExportSchema, validateSpecGraph, validateWriteOwnership, type ExternalAssetsExport, type GraphFinding, type GraphFindingCode, type GraphValidationResult, type ValidateSpecGraphOptions, } from './graph.js';
21
+ export { buildPerTableIngestionStages, generatePerTableStageFiles, perTableStageSlug, tableToSlug, type GeneratedStageFile, type IngestionTableDefinition, type PerTableIngestionAuthoring, } from './authoring/per-table-ingestion.js';
22
+ export { dumpStageYaml } from './authoring/yaml.js';
23
+ export { MIGRATIONS_DIRECTORY, MIGRATION_FILE_PATTERN, migrationManifestSchema, migrationExecutionModeSchema, migrationCheckSchema, parseMigrationFile, computeMigrationChecksum, validateMigrationHistory, type MigrationManifest, type MigrationExecutionMode, type MigrationCheck, type MigrationFinding, } from './migrations/manifest.js';
24
+ export { analyzeMigrationContracts, type MigrationParticipantContracts, type MigrationColumnChange, type MigrationContractReport, } from './migrations/contracts.js';
25
+ export * from './snapshot-transport.js';
26
+ export { consumedReferences, triggerTargets } from './graph-references.js';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ export { COLUMN_IDENTIFIER_PATTERN, CONTRACT_HASH_DOMAIN, DEPLOY_TARGET_PATTERN, DOCUMENTATION_DIRECTORY, DOCUMENTATION_FILE_SUFFIXES, GOLD_ASSET_PATTERN, IDENTIFIER_PATTERN, MAX_SPEC_FILE_BYTES, MAX_STAGE_SPEC_FILE_BYTES, OUTPUT_ASSET_PATTERN, PUBLIC_VIEW_PATTERN, REPORT_ASSET_PATTERN, REPORTING_TABLE_PATTERN, QUARANTINE_SUFFIX, RESERVED_OPERATION_NAMES, SCHEMA_FILE_SUFFIXES, SCHEMAS_DIRECTORY, SPEC_HASH_DOMAIN, STAGE_FILE_SUFFIXES, STAGE_ID_PATTERN, SYMBOLIC_REF_PATTERN, quarantineAssetName, } from './constants.js';
2
+ export { RESOLUTION_ERROR_CODES, SpecDefinitionError, SpecResolutionError, } from './errors.js';
3
+ export { credentialLikeReason, scanForCredentialLikeStrings, } from './secret-scan.js';
4
+ export { DECIMAL_TYPE_PATTERN, DELTA_ONLY_TYPES, ORM_COLUMN_TYPES, ORM_MAPPABLE_TYPES, PIPELINE_TO_ORM_TYPE, ormMappable, ormMappingSuggestion, pipelineTypeSchema, pipelineToOrmType, } from './types.js';
5
+ export { columnIdentifierSchema, columnMapSchema, columnSchema, columnsOrRefSchema, identifierSchema, isSchemaRef, namedSchemaFileSchema, nullableKeyColumns, requireResolvedColumns, schemaRefSchema, } from './columns.js';
6
+ export { catalogBindingSchema, resolveCatalogBinding, targetAwareCatalogSchema, } from './catalog-binding.js';
7
+ export { OPERATION_SCALAR_TYPES, operationInvocationSchema, operationNameSchema, operationParamSchema, operationPolicySchema, operationSchema, operationsBlockSchema, validateOperationParams, } from './operations.js';
8
+ export { DEFAULT_MATERIALIZER_CONCURRENT, FEED_FORMATS, INGESTION_RUNTIMES, MATERIALIZER_STRATEGIES, MAX_MATERIALIZER_CONCURRENT, MAX_WORKER_CONCURRENT, SNAPSHOT_MODES, cursorSchema, feedBronzeTable, feedNameSchema, feedSchema, feedVolumePath, ingestionRuntimeSchema, ingestionSourceIdentity, materializerConcurrencySchema, materializerStrategySchema, sourceCatalog, isoDurationSchema, repoRelativePathSchema, scheduleSchema, snapshotModeSchema, sourceSystemSchema, symbolicRefSchema, workerCapacityGroup, workerSchema, } from './bodies/ingestion.js';
9
+ export { LAKEBASE_CDF_ENVELOPE_COLUMNS, TRANSFORMATION_ENGINES, WRITE_PATTERNS, isLakebaseCdfInput, outputAssetNameSchema, transformationEngineSchema, transformationInputSchema, transformationOutputSchema, transformationTriggerSchema, writePatternSchema, writeScopeSchema, } from './bodies/transformation.js';
10
+ export { PUBLIC_VIEW_ACCESS, SYNC_MODES, ormBindingSchema, publicViewAccessSchema, projectionSchema, satisfiesSchema, syncModeSchema, } from './bodies/serving.js';
11
+ export { CRITICALITIES, REMEDIATION_POSTURES, alertsSchema, criticalitySchema, deployTargetSchema, ingestionStageSchema, remediationPostureSchema, servingStageSchema, slosSchema, stageIdSchema, stageSpecSchema, transformationStageSchema, } from './envelope.js';
12
+ export { flattenSpecIssues, formatSpecIssues } from './issues.js';
13
+ export { loadSpecDirectory, parseSpecSources, parseStageFile, } from './loader.js';
14
+ export { canonicalJson, computeContractHash, computeSpecHash, contractSurface } from './hash.js';
15
+ export { collectBindingGaps, collectPipelineBindingGaps, } from './binding-gaps.js';
16
+ export { resolveSpec, targetFactsSchema, transformationOutputCatalog, } from './resolve.js';
17
+ export { COMPATIBILITY_FINDING_CODES, checkCompatibility, } from './compatibility.js';
18
+ export { ORM_SATISFIES_FINDING_CODES, checkServingSatisfiesOrmContract, ormContractCatalogKey, ormContractCatalogSchema, ormSyncedContractRequirementSchema, } from './orm-satisfies.js';
19
+ export { CONTRACT_CHANGE_CODES, diffContracts, } from './diff.js';
20
+ export { GRAPH_FINDING_CODES, externalAssetsExportSchema, validateSpecGraph, validateWriteOwnership, } from './graph.js';
21
+ export { buildPerTableIngestionStages, generatePerTableStageFiles, perTableStageSlug, tableToSlug, } from './authoring/per-table-ingestion.js';
22
+ export { dumpStageYaml } from './authoring/yaml.js';
23
+ export { MIGRATIONS_DIRECTORY, MIGRATION_FILE_PATTERN, migrationManifestSchema, migrationExecutionModeSchema, migrationCheckSchema, parseMigrationFile, computeMigrationChecksum, validateMigrationHistory, } from './migrations/manifest.js';
24
+ export { analyzeMigrationContracts, } from './migrations/contracts.js';
25
+ export * from './snapshot-transport.js';
26
+ export { consumedReferences, triggerTargets } from './graph-references.js';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod issue flattening shared by the loader, the CLI, and tests — so union
4
+ * failures (e.g. the transformation input union) surface the ACTIONABLE
5
+ * nested issues ("fold is required") instead of a generic "Invalid input".
6
+ */
7
+ export interface SpecIssue {
8
+ /** Dotted path within the spec document. */
9
+ readonly path: string;
10
+ readonly message: string;
11
+ }
12
+ export declare function flattenSpecIssues(error: z.ZodError): SpecIssue[];
13
+ export declare function formatSpecIssues(error: z.ZodError): string;
14
+ //# sourceMappingURL=issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../src/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AAEH,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AA0BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,SAAS,EAAE,CAEhE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAI1D"}
package/dist/issues.js ADDED
@@ -0,0 +1,27 @@
1
+ function flattenIssue(issue, prefix) {
2
+ const path = [...prefix, ...issue.path];
3
+ if (issue.code === 'invalid_union' && issue.errors.length > 0) {
4
+ // Pick the union option that got CLOSEST to matching (fewest issues) —
5
+ // for a `kind: lakebase_cdf` input missing `fold`, that is the CDF
6
+ // option's "fold required", not the stage option's pile of mismatches.
7
+ const flattenedOptions = issue.errors.map((optionIssues) => optionIssues.flatMap((optionIssue) => flattenIssue(optionIssue, path)));
8
+ const closest = flattenedOptions.reduce((best, current) => current.length < best.length ? current : best);
9
+ if (closest.length > 0)
10
+ return closest;
11
+ }
12
+ return [
13
+ {
14
+ path: path.map(String).join('.'),
15
+ message: issue.message,
16
+ },
17
+ ];
18
+ }
19
+ export function flattenSpecIssues(error) {
20
+ return error.issues.flatMap((issue) => flattenIssue(issue, []));
21
+ }
22
+ export function formatSpecIssues(error) {
23
+ return flattenSpecIssues(error)
24
+ .map((issue) => (issue.path.length > 0 ? `${issue.path}: ${issue.message}` : issue.message))
25
+ .join('; ');
26
+ }
27
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../src/issues.ts"],"names":[],"mappings":"AAgBA,SAAS,YAAY,CAAC,KAAmB,EAAE,MAA8B;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,uEAAuE;QACvE,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CACzD,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CACvE,CAAA;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CACxD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC9C,CAAA;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAA;IACxC,CAAC;IACD,OAAO;QACL;YACE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,OAAO,iBAAiB,CAAC,KAAK,CAAC;SAC5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC3F,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type ColumnMap } from './columns.js';
2
+ import { type StageSpec } from './envelope.js';
3
+ import { type MigrationManifest } from './migrations/manifest.js';
4
+ /**
5
+ * A directory = one Pipeline's stage definitions:
6
+ *
7
+ * ```
8
+ * pipelines/<domain>/
9
+ * ├── <stage>.stage.yml # stage specs (this loader)
10
+ * ├── schemas/<name>.schema.yml # named schema artifacts (schema_ref targets)
11
+ * ├── documentation/<name>.documentation.yml # feed documentation_ref targets
12
+ * └── src/… # entrypoints / decoders (not parsed here)
13
+ * ```
14
+ *
15
+ * `parseSpecSources` is the ONE parse path (raw sources → validated
16
+ * definitions) shared by the CLI, CI gate, and the future registry — a local
17
+ * directory and an uploaded bundle can't diverge. `loadSpecDirectory` is the
18
+ * filesystem shell around it.
19
+ *
20
+ * After loading, every `schema_ref` is resolved: consumers of the same named
21
+ * schema share the same validated column-map instance (identity, not copies).
22
+ */
23
+ export interface SpecSource {
24
+ /** Path relative to the Pipeline root (e.g. `players.stage.yml`, `schemas/player.schema.yml`). */
25
+ readonly path: string;
26
+ readonly contents: string;
27
+ }
28
+ export interface LoadedPipeline {
29
+ readonly stages: readonly StageSpec[];
30
+ /** Resolved named schemas, keyed by artifact name. */
31
+ readonly schemas: Readonly<Record<string, ColumnMap>>;
32
+ readonly files: readonly string[];
33
+ readonly migrations?: readonly MigrationManifest[];
34
+ }
35
+ /** Parse and validate a single stage spec source (no ref resolution). */
36
+ export declare function parseStageFile(file: string, contents: string): StageSpec;
37
+ /**
38
+ * Raw sources → validated Pipeline definition: the one parse path. Splits
39
+ * named schema artifacts (`schemas/*.schema.yml`) from stage specs
40
+ * (`*.stage.yml`), validates each, resolves `schema_ref`s (shared identity),
41
+ * and enforces Pipeline-level uniqueness (stage ids).
42
+ */
43
+ export declare function parseSpecSources(sources: readonly SpecSource[]): LoadedPipeline;
44
+ /**
45
+ * Load a Pipeline directory from disk: `*.stage.yml` at the root plus
46
+ * `schemas/*.schema.yml` and `documentation/*.documentation.yml`.
47
+ * The filesystem shell around `parseSpecSources`.
48
+ */
49
+ export declare function loadSpecDirectory(dir: string): Promise<LoadedPipeline>;
50
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAeA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EAA6F,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5J;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,UAAU;IACzB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;IACrC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IACrD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACnD;AA2BD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAcxE;AA0GD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,cAAc,CA6E/E;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA8C5E"}
package/dist/loader.js ADDED
@@ -0,0 +1,241 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { load as loadYaml } from 'js-yaml';
4
+ import { MAX_SPEC_FILE_BYTES, MAX_STAGE_SPEC_FILE_BYTES, DOCUMENTATION_DIRECTORY, DOCUMENTATION_FILE_SUFFIXES, SCHEMA_FILE_SUFFIXES, SCHEMAS_DIRECTORY, STAGE_FILE_SUFFIXES, } from './constants.js';
5
+ import { SpecDefinitionError } from './errors.js';
6
+ import { flattenSpecIssues, formatSpecIssues } from './issues.js';
7
+ import { isSchemaRef, identifierSchema, namedSchemaFileSchema, } from './columns.js';
8
+ import { stageSpecSchema } from './envelope.js';
9
+ import { feedDocumentationSchema, resolveFeedDocumentation } from './documentation.js';
10
+ import { MIGRATION_FILE_PATTERN, MIGRATIONS_DIRECTORY, orderMigrationManifests, parseMigrationFile } from './migrations/manifest.js';
11
+ const hasSuffix = (name, suffixes) => suffixes.some((suffix) => name.endsWith(suffix));
12
+ const stripSuffix = (name, suffixes) => {
13
+ for (const suffix of suffixes) {
14
+ if (name.endsWith(suffix))
15
+ return name.slice(0, -suffix.length);
16
+ }
17
+ return name;
18
+ };
19
+ const baseName = (path) => path.split('/').at(-1) ?? path;
20
+ function parseYamlSource(file, contents) {
21
+ try {
22
+ return loadYaml(contents);
23
+ }
24
+ catch (error) {
25
+ throw new SpecDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file);
26
+ }
27
+ }
28
+ function firstIssue(error) {
29
+ const issue = flattenSpecIssues(error)[0];
30
+ return issue ?? { path: '', message: 'invalid' };
31
+ }
32
+ /** Parse and validate a single stage spec source (no ref resolution). */
33
+ export function parseStageFile(file, contents) {
34
+ const parsed = stageSpecSchema.safeParse(parseYamlSource(file, contents));
35
+ if (!parsed.success) {
36
+ throw new SpecDefinitionError(formatSpecIssues(parsed.error), file, firstIssue(parsed.error).path);
37
+ }
38
+ const expectedStage = stripSuffix(baseName(file), STAGE_FILE_SUFFIXES);
39
+ if (parsed.data.stage !== expectedStage) {
40
+ throw new SpecDefinitionError(`stage id '${parsed.data.stage}' must match the file basename '${expectedStage}'`, file, 'stage');
41
+ }
42
+ return parsed.data;
43
+ }
44
+ /**
45
+ * Resolve named schema artifacts, following ref chains (a schema may alias
46
+ * another) and rejecting cycles with the full chain in the error.
47
+ */
48
+ function resolveNamedSchemas(raw) {
49
+ const resolved = {};
50
+ const resolving = [];
51
+ const resolve = (name) => {
52
+ const existing = resolved[name];
53
+ if (existing)
54
+ return existing;
55
+ const entry = raw.get(name);
56
+ if (!entry) {
57
+ const from = resolving.at(-1);
58
+ throw new SpecDefinitionError(`schema_ref '${name}' does not resolve — no ${SCHEMAS_DIRECTORY}/${name}.schema.yml in this Pipeline`, from ? raw.get(from)?.file : undefined);
59
+ }
60
+ if (resolving.includes(name)) {
61
+ throw new SpecDefinitionError(`schema_ref cycle: ${[...resolving.slice(resolving.indexOf(name)), name].join(' → ')}`, entry.file);
62
+ }
63
+ resolving.push(name);
64
+ const target = isSchemaRef(entry.columns) ? resolve(entry.columns.schema_ref) : { columns: entry.columns };
65
+ const schema = { columns: target.columns, description: entry.description ?? target.description };
66
+ resolving.pop();
67
+ resolved[name] = schema;
68
+ return schema;
69
+ };
70
+ for (const name of raw.keys())
71
+ resolve(name);
72
+ return resolved;
73
+ }
74
+ /**
75
+ * Replace every `schema_ref` position in a validated stage spec with the
76
+ * shared resolved column map. Mutates the parsed spec in place (it is ours,
77
+ * fresh from the schema) so two consumers of one ref share identity.
78
+ */
79
+ function resolveSpecRefs(spec, file, schemas) {
80
+ const lookup = (ref, path) => {
81
+ const schema = schemas[ref];
82
+ if (!schema) {
83
+ throw new SpecDefinitionError(`schema_ref '${ref}' does not resolve — no ${SCHEMAS_DIRECTORY}/${ref}.schema.yml in this Pipeline`, file, path);
84
+ }
85
+ return schema;
86
+ };
87
+ if (spec.type === 'transformation') {
88
+ for (const [asset, output] of Object.entries(spec.outputs)) {
89
+ if (isSchemaRef(output.columns)) {
90
+ const schema = lookup(output.columns.schema_ref, `outputs.${asset}.columns`);
91
+ output.columns = schema.columns;
92
+ if (output.description === undefined && schema.description !== undefined) {
93
+ output.description = schema.description;
94
+ }
95
+ }
96
+ }
97
+ spec.inputs.forEach((input, index) => {
98
+ if ('kind' in input && input.kind === 'lakebase_cdf' && isSchemaRef(input.columns)) {
99
+ input.columns = lookup(input.columns.schema_ref, `inputs.${index}.columns`).columns;
100
+ }
101
+ });
102
+ }
103
+ if (spec.type === 'serving' && isSchemaRef(spec.projection.columns)) {
104
+ spec.projection.columns = lookup(spec.projection.columns.schema_ref, 'projection.columns').columns;
105
+ }
106
+ }
107
+ /**
108
+ * Refinements that need resolved columns are skipped by the schema when the
109
+ * position is a `schema_ref`; re-run the spec through the schema after
110
+ * resolution so those checks always apply to loaded definitions, then restore
111
+ * shared-identity column maps (parsing clones).
112
+ */
113
+ function revalidateResolved(spec, file) {
114
+ const reparsed = stageSpecSchema.safeParse(spec);
115
+ if (!reparsed.success) {
116
+ throw new SpecDefinitionError(formatSpecIssues(reparsed.error), file, firstIssue(reparsed.error).path);
117
+ }
118
+ }
119
+ /**
120
+ * Raw sources → validated Pipeline definition: the one parse path. Splits
121
+ * named schema artifacts (`schemas/*.schema.yml`) from stage specs
122
+ * (`*.stage.yml`), validates each, resolves `schema_ref`s (shared identity),
123
+ * and enforces Pipeline-level uniqueness (stage ids).
124
+ */
125
+ export function parseSpecSources(sources) {
126
+ const rawSchemas = new Map();
127
+ const documentation = new Map();
128
+ const stageSources = [];
129
+ const migrations = new Map();
130
+ for (const source of sources) {
131
+ const maxBytes = hasSuffix(source.path, STAGE_FILE_SUFFIXES) ? MAX_STAGE_SPEC_FILE_BYTES : MAX_SPEC_FILE_BYTES;
132
+ if (Buffer.byteLength(source.contents, 'utf8') > maxBytes) {
133
+ throw new SpecDefinitionError(`exceeds the maximum spec file size of ${maxBytes} bytes`, source.path);
134
+ }
135
+ if (source.path.startsWith(`${DOCUMENTATION_DIRECTORY}/`)) {
136
+ const name = stripSuffix(baseName(source.path), DOCUMENTATION_FILE_SUFFIXES);
137
+ if (!hasSuffix(source.path, DOCUMENTATION_FILE_SUFFIXES) || source.path.split('/').length !== 2 || !identifierSchema.safeParse(name).success) {
138
+ throw new SpecDefinitionError('expected documentation/<identifier>.documentation.yml', source.path);
139
+ }
140
+ if (documentation.has(name))
141
+ throw new SpecDefinitionError(`duplicate documentation '${name}'`, source.path);
142
+ const parsed = feedDocumentationSchema.safeParse(parseYamlSource(source.path, source.contents));
143
+ if (!parsed.success)
144
+ throw new SpecDefinitionError(formatSpecIssues(parsed.error), source.path, firstIssue(parsed.error).path);
145
+ documentation.set(name, parsed.data);
146
+ continue;
147
+ }
148
+ if (source.path.startsWith(`${MIGRATIONS_DIRECTORY}/`)) {
149
+ const migration = parseMigrationFile(source.path, source.contents);
150
+ if (migrations.has(migration.id))
151
+ throw new SpecDefinitionError(`duplicate migration '${migration.id}'`, source.path);
152
+ migrations.set(migration.id, migration);
153
+ continue;
154
+ }
155
+ if (hasSuffix(source.path, SCHEMA_FILE_SUFFIXES)) {
156
+ const name = stripSuffix(baseName(source.path), SCHEMA_FILE_SUFFIXES);
157
+ if (rawSchemas.has(name)) {
158
+ throw new SpecDefinitionError(`duplicate schema artifact '${name}'`, source.path);
159
+ }
160
+ const parsed = namedSchemaFileSchema.safeParse(parseYamlSource(source.path, source.contents));
161
+ if (!parsed.success) {
162
+ throw new SpecDefinitionError(formatSpecIssues(parsed.error), source.path, firstIssue(parsed.error).path);
163
+ }
164
+ rawSchemas.set(name, { file: source.path, ...parsed.data });
165
+ continue;
166
+ }
167
+ if (hasSuffix(source.path, STAGE_FILE_SUFFIXES)) {
168
+ stageSources.push(source);
169
+ continue;
170
+ }
171
+ throw new SpecDefinitionError(`unrecognized spec file — expected *${STAGE_FILE_SUFFIXES[0]}, ${SCHEMAS_DIRECTORY}/*${SCHEMA_FILE_SUFFIXES[0]}, or ${DOCUMENTATION_DIRECTORY}/*${DOCUMENTATION_FILE_SUFFIXES[0]}`, source.path);
172
+ }
173
+ const schemas = resolveNamedSchemas(rawSchemas);
174
+ const stages = [];
175
+ const seen = new Map();
176
+ for (const source of stageSources) {
177
+ const spec = parseStageFile(source.path, source.contents);
178
+ const duplicate = seen.get(spec.stage);
179
+ if (duplicate) {
180
+ throw new SpecDefinitionError(`duplicate stage id '${spec.stage}' (also declared in ${duplicate})`, source.path, 'stage');
181
+ }
182
+ seen.set(spec.stage, source.path);
183
+ resolveFeedDocumentation({ spec, file: source.path, documentation });
184
+ resolveSpecRefs(spec, source.path, schemas);
185
+ revalidateResolved(spec, source.path);
186
+ stages.push(spec);
187
+ }
188
+ return {
189
+ stages,
190
+ schemas: Object.fromEntries(Object.entries(schemas).map(([name, schema]) => [name, schema.columns])),
191
+ files: sources.map((source) => source.path),
192
+ ...(migrations.size > 0 ? { migrations: orderMigrationManifests([...migrations.values()]) } : {}),
193
+ };
194
+ }
195
+ /**
196
+ * Load a Pipeline directory from disk: `*.stage.yml` at the root plus
197
+ * `schemas/*.schema.yml` and `documentation/*.documentation.yml`.
198
+ * The filesystem shell around `parseSpecSources`.
199
+ */
200
+ export async function loadSpecDirectory(dir) {
201
+ const sources = [];
202
+ const rootEntries = await readdir(dir, { withFileTypes: true });
203
+ const stageFiles = rootEntries
204
+ .filter((entry) => entry.isFile() && hasSuffix(entry.name, STAGE_FILE_SUFFIXES))
205
+ .map((entry) => entry.name)
206
+ .sort();
207
+ const schemaDirEntries = rootEntries.some((entry) => entry.isDirectory() && entry.name === SCHEMAS_DIRECTORY)
208
+ ? await readdir(join(dir, SCHEMAS_DIRECTORY), { withFileTypes: true })
209
+ : [];
210
+ const schemaFiles = schemaDirEntries
211
+ .filter((entry) => entry.isFile() && hasSuffix(entry.name, SCHEMA_FILE_SUFFIXES))
212
+ .map((entry) => `${SCHEMAS_DIRECTORY}/${entry.name}`)
213
+ .sort();
214
+ const documentationDirEntries = rootEntries.some((entry) => entry.isDirectory() && entry.name === DOCUMENTATION_DIRECTORY)
215
+ ? await readdir(join(dir, DOCUMENTATION_DIRECTORY), { withFileTypes: true })
216
+ : [];
217
+ const documentationFiles = documentationDirEntries
218
+ .filter((entry) => entry.isFile() && hasSuffix(entry.name, DOCUMENTATION_FILE_SUFFIXES))
219
+ .map((entry) => `${DOCUMENTATION_DIRECTORY}/${entry.name}`)
220
+ .sort();
221
+ const migrationDirEntries = rootEntries.some((entry) => entry.isDirectory() && entry.name === MIGRATIONS_DIRECTORY)
222
+ ? await readdir(join(dir, MIGRATIONS_DIRECTORY), { withFileTypes: true })
223
+ : [];
224
+ const migrationFiles = migrationDirEntries
225
+ .filter((entry) => entry.isFile() && /\.ya?ml$/.test(entry.name))
226
+ .map((entry) => `${MIGRATIONS_DIRECTORY}/${entry.name}`)
227
+ .sort();
228
+ for (const file of migrationFiles) {
229
+ if (!MIGRATION_FILE_PATTERN.test(file))
230
+ throw new SpecDefinitionError('expected migrations/<id>.yml', file);
231
+ }
232
+ if (stageFiles.length === 0) {
233
+ throw new SpecDefinitionError(`no *${STAGE_FILE_SUFFIXES[0]} files in ${dir}`);
234
+ }
235
+ for (const file of [...schemaFiles, ...documentationFiles, ...stageFiles, ...migrationFiles]) {
236
+ const contents = await readFile(join(dir, file), 'utf8');
237
+ sources.push({ path: file, contents });
238
+ }
239
+ return parseSpecSources(sources);
240
+ }
241
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { StageSpec } from '../envelope.js';
2
+ import type { MigrationFinding, MigrationManifest } from './manifest.js';
3
+ export interface MigrationParticipantContracts {
4
+ readonly repo: string;
5
+ readonly before: readonly StageSpec[];
6
+ readonly after: readonly StageSpec[];
7
+ }
8
+ export interface MigrationColumnChange {
9
+ readonly repo: string;
10
+ readonly stage: string;
11
+ readonly output: string;
12
+ readonly physicalTable: string;
13
+ readonly column: string;
14
+ readonly kind: 'add_column' | 'change_column_type';
15
+ readonly oldType: string | null;
16
+ readonly newType: string;
17
+ }
18
+ export interface MigrationContractReport {
19
+ readonly changes: readonly MigrationColumnChange[];
20
+ readonly findings: readonly MigrationFinding[];
21
+ }
22
+ type AnalysisInput = {
23
+ readonly rootRepo: string;
24
+ readonly manifest?: MigrationManifest;
25
+ readonly participants: readonly MigrationParticipantContracts[];
26
+ readonly externalWriters: readonly StageSpec[];
27
+ readonly catalog: string;
28
+ readonly deployTarget: string;
29
+ };
30
+ /**
31
+ * Contract analysis only: physical inventory and executable capabilities are
32
+ * separate planner gates. A clean report is never authorization to mutate.
33
+ * External writers exclude ONLY the exact participating repositories;
34
+ * combining proposed releases retains the existing shared-writer rules.
35
+ */
36
+ export declare function analyzeMigrationContracts(input: AnalysisInput): MigrationContractReport;
37
+ export {};
38
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/migrations/contracts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAExE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAA;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC/C;AAID,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IACrC,QAAQ,CAAC,YAAY,EAAE,SAAS,6BAA6B,EAAE,CAAA;IAC/D,QAAQ,CAAC,eAAe,EAAE,SAAS,SAAS,EAAE,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B,CAAA;AAUD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,uBAAuB,CAYvF"}