create-relkit 0.6.0 → 0.7.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.
- package/dist/add-name.d.ts +8 -1
- package/dist/add-name.d.ts.map +1 -1
- package/dist/add-name.js +5 -1
- package/dist/add-name.js.map +1 -1
- package/dist/add-options-parser.d.ts +49 -0
- package/dist/add-options-parser.d.ts.map +1 -1
- package/dist/add-options-parser.js +52 -0
- package/dist/add-options-parser.js.map +1 -1
- package/dist/add-options-resource.d.ts +8 -0
- package/dist/add-options-resource.d.ts.map +1 -1
- package/dist/add-options-resource.js +8 -0
- package/dist/add-options-resource.js.map +1 -1
- package/dist/add-options.d.ts +6 -1
- package/dist/add-options.d.ts.map +1 -1
- package/dist/add-options.js +48 -1
- package/dist/add-options.js.map +1 -1
- package/dist/add-output.d.ts +10 -0
- package/dist/add-output.d.ts.map +1 -1
- package/dist/add-output.js +21 -0
- package/dist/add-output.js.map +1 -1
- package/dist/add-plan.d.ts +25 -0
- package/dist/add-plan.d.ts.map +1 -1
- package/dist/add-plan.js +91 -57
- package/dist/add-plan.js.map +1 -1
- package/dist/add-plan.types.d.ts +13 -0
- package/dist/add-plan.types.d.ts.map +1 -0
- package/dist/add-plan.types.js +2 -0
- package/dist/add-plan.types.js.map +1 -0
- package/dist/add-resolution-discovery.d.ts +56 -2
- package/dist/add-resolution-discovery.d.ts.map +1 -1
- package/dist/add-resolution-discovery.js +74 -10
- package/dist/add-resolution-discovery.js.map +1 -1
- package/dist/add-resolution-prompt.d.ts +46 -0
- package/dist/add-resolution-prompt.d.ts.map +1 -0
- package/dist/add-resolution-prompt.js +88 -0
- package/dist/add-resolution-prompt.js.map +1 -0
- package/dist/add-resolution-state-base.d.ts +112 -0
- package/dist/add-resolution-state-base.d.ts.map +1 -0
- package/dist/add-resolution-state-base.js +141 -0
- package/dist/add-resolution-state-base.js.map +1 -0
- package/dist/add-resolution-state.d.ts +66 -11
- package/dist/add-resolution-state.d.ts.map +1 -1
- package/dist/add-resolution-state.js +81 -69
- package/dist/add-resolution-state.js.map +1 -1
- package/dist/add-resolution-state.types.d.ts +6 -0
- package/dist/add-resolution-state.types.d.ts.map +1 -0
- package/dist/add-resolution-state.types.js +2 -0
- package/dist/add-resolution-state.types.js.map +1 -0
- package/dist/add-resolver-domain-execution.d.ts +35 -0
- package/dist/add-resolver-domain-execution.d.ts.map +1 -0
- package/dist/add-resolver-domain-execution.js +101 -0
- package/dist/add-resolver-domain-execution.js.map +1 -0
- package/dist/add-resolver-domain-input.d.ts +30 -0
- package/dist/add-resolver-domain-input.d.ts.map +1 -0
- package/dist/add-resolver-domain-input.js +83 -0
- package/dist/add-resolver-domain-input.js.map +1 -0
- package/dist/add-resolver-domain.d.ts +17 -0
- package/dist/add-resolver-domain.d.ts.map +1 -1
- package/dist/add-resolver-domain.js +36 -136
- package/dist/add-resolver-domain.js.map +1 -1
- package/dist/add-resolver-platform.d.ts +17 -0
- package/dist/add-resolver-platform.d.ts.map +1 -1
- package/dist/add-resolver-platform.js +83 -36
- package/dist/add-resolver-platform.js.map +1 -1
- package/dist/add-resolver-provider.d.ts +15 -0
- package/dist/add-resolver-provider.d.ts.map +1 -0
- package/dist/add-resolver-provider.js +67 -0
- package/dist/add-resolver-provider.js.map +1 -0
- package/dist/add-resolver-resources.d.ts +17 -0
- package/dist/add-resolver-resources.d.ts.map +1 -1
- package/dist/add-resolver-resources.js +79 -85
- package/dist/add-resolver-resources.js.map +1 -1
- package/dist/add-resolver.d.ts +33 -9
- package/dist/add-resolver.d.ts.map +1 -1
- package/dist/add-resolver.js +70 -31
- package/dist/add-resolver.js.map +1 -1
- package/dist/add-resolver.types.d.ts +27 -0
- package/dist/add-resolver.types.d.ts.map +1 -0
- package/dist/add-resolver.types.js +2 -0
- package/dist/add-resolver.types.js.map +1 -0
- package/dist/add-transaction-files-compat.d.ts +33 -0
- package/dist/add-transaction-files-compat.d.ts.map +1 -0
- package/dist/add-transaction-files-compat.js +42 -0
- package/dist/add-transaction-files-compat.js.map +1 -0
- package/dist/add-transaction-files.d.ts +49 -9
- package/dist/add-transaction-files.d.ts.map +1 -1
- package/dist/add-transaction-files.js +122 -74
- package/dist/add-transaction-files.js.map +1 -1
- package/dist/add-transaction-files.types.d.ts +7 -0
- package/dist/add-transaction-files.types.d.ts.map +1 -0
- package/dist/add-transaction-files.types.js +2 -0
- package/dist/add-transaction-files.types.js.map +1 -0
- package/dist/add-transaction-process.d.ts +37 -0
- package/dist/add-transaction-process.d.ts.map +1 -0
- package/dist/add-transaction-process.js +54 -0
- package/dist/add-transaction-process.js.map +1 -0
- package/dist/add-transaction-workflow.d.ts +23 -0
- package/dist/add-transaction-workflow.d.ts.map +1 -0
- package/dist/add-transaction-workflow.js +77 -0
- package/dist/add-transaction-workflow.js.map +1 -0
- package/dist/add-transaction.d.ts +26 -13
- package/dist/add-transaction.d.ts.map +1 -1
- package/dist/add-transaction.js +55 -105
- package/dist/add-transaction.js.map +1 -1
- package/dist/add-transaction.types.d.ts +32 -0
- package/dist/add-transaction.types.d.ts.map +1 -0
- package/dist/add-transaction.types.js +2 -0
- package/dist/add-transaction.types.js.map +1 -0
- package/dist/add-types.d.ts +56 -0
- package/dist/add-types.d.ts.map +1 -1
- package/dist/add-types.js +15 -0
- package/dist/add-types.js.map +1 -1
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +83 -0
- package/dist/bin.js.map +1 -0
- package/dist/bucket-profiles.d.ts +17 -3
- package/dist/bucket-profiles.d.ts.map +1 -1
- package/dist/bucket-profiles.js +27 -5
- package/dist/bucket-profiles.js.map +1 -1
- package/dist/bucket-profiles.types.d.ts +9 -0
- package/dist/bucket-profiles.types.d.ts.map +1 -0
- package/dist/bucket-profiles.types.js +2 -0
- package/dist/bucket-profiles.types.js.map +1 -0
- package/dist/build-catalog.d.ts +14 -0
- package/dist/build-catalog.d.ts.map +1 -0
- package/dist/build-catalog.js +70 -0
- package/dist/build-catalog.js.map +1 -0
- package/dist/catalog-resolution.d.ts +12 -0
- package/dist/catalog-resolution.d.ts.map +1 -0
- package/dist/catalog-resolution.js +43 -0
- package/dist/catalog-resolution.js.map +1 -0
- package/dist/catalog-resolution.types.d.ts +3 -0
- package/dist/catalog-resolution.types.d.ts.map +1 -0
- package/dist/catalog-resolution.types.js +2 -0
- package/dist/catalog-resolution.types.js.map +1 -0
- package/dist/create-preview.d.ts +30 -7
- package/dist/create-preview.d.ts.map +1 -1
- package/dist/create-preview.js +41 -11
- package/dist/create-preview.js.map +1 -1
- package/dist/create-preview.types.d.ts +9 -0
- package/dist/create-preview.types.d.ts.map +1 -0
- package/dist/create-preview.types.js +2 -0
- package/dist/create-preview.types.js.map +1 -0
- package/dist/create-resolver.d.ts +27 -10
- package/dist/create-resolver.d.ts.map +1 -1
- package/dist/create-resolver.js +105 -74
- package/dist/create-resolver.js.map +1 -1
- package/dist/create-resolver.types.d.ts +15 -0
- package/dist/create-resolver.types.d.ts.map +1 -0
- package/dist/create-resolver.types.js +2 -0
- package/dist/create-resolver.types.js.map +1 -0
- package/dist/dependency-patch-installation.d.ts +16 -0
- package/dist/dependency-patch-installation.d.ts.map +1 -0
- package/dist/dependency-patch-installation.js +59 -0
- package/dist/dependency-patch-installation.js.map +1 -0
- package/dist/dependency-patches.d.ts +57 -0
- package/dist/dependency-patches.d.ts.map +1 -0
- package/dist/dependency-patches.js +134 -0
- package/dist/dependency-patches.js.map +1 -0
- package/dist/dependency-patches.types.d.ts +21 -0
- package/dist/dependency-patches.types.d.ts.map +1 -0
- package/dist/dependency-patches.types.js +2 -0
- package/dist/dependency-patches.types.js.map +1 -0
- package/dist/domain-artifact.d.ts +76 -0
- package/dist/domain-artifact.d.ts.map +1 -0
- package/dist/domain-artifact.js +115 -0
- package/dist/domain-artifact.js.map +1 -0
- package/dist/domain-planning.d.ts +36 -20
- package/dist/domain-planning.d.ts.map +1 -1
- package/dist/domain-planning.js +45 -55
- package/dist/domain-planning.js.map +1 -1
- package/dist/domain-planning.types.d.ts +21 -0
- package/dist/domain-planning.types.d.ts.map +1 -0
- package/dist/domain-planning.types.js +2 -0
- package/dist/domain-planning.types.js.map +1 -0
- package/dist/generate-deployment.d.ts +18 -0
- package/dist/generate-deployment.d.ts.map +1 -0
- package/dist/generate-deployment.js +100 -0
- package/dist/generate-deployment.js.map +1 -0
- package/dist/generate-files-compat.d.ts +43 -0
- package/dist/generate-files-compat.d.ts.map +1 -0
- package/dist/generate-files-compat.js +56 -0
- package/dist/generate-files-compat.js.map +1 -0
- package/dist/generate-files-utilities.d.ts +63 -10
- package/dist/generate-files-utilities.d.ts.map +1 -1
- package/dist/generate-files-utilities.js +99 -48
- package/dist/generate-files-utilities.js.map +1 -1
- package/dist/generate-files-utilities.types.d.ts +6 -0
- package/dist/generate-files-utilities.types.d.ts.map +1 -0
- package/dist/generate-files-utilities.types.js +2 -0
- package/dist/generate-files-utilities.types.js.map +1 -0
- package/dist/generate-files.d.ts +30 -1
- package/dist/generate-files.d.ts.map +1 -1
- package/dist/generate-files.js +56 -85
- package/dist/generate-files.js.map +1 -1
- package/dist/generate-output.d.ts +14 -17
- package/dist/generate-output.d.ts.map +1 -1
- package/dist/generate-output.js +27 -0
- package/dist/generate-output.js.map +1 -1
- package/dist/generate-output.types.d.ts +21 -0
- package/dist/generate-output.types.d.ts.map +1 -0
- package/dist/generate-output.types.js +2 -0
- package/dist/generate-output.types.js.map +1 -0
- package/dist/generate-process.d.ts +60 -0
- package/dist/generate-process.d.ts.map +1 -1
- package/dist/generate-process.js +95 -31
- package/dist/generate-process.js.map +1 -1
- package/dist/generate-stage-cleanup.d.ts +17 -0
- package/dist/generate-stage-cleanup.d.ts.map +1 -0
- package/dist/generate-stage-cleanup.js +30 -0
- package/dist/generate-stage-cleanup.js.map +1 -0
- package/dist/generate-types.d.ts +36 -0
- package/dist/generate-types.d.ts.map +1 -1
- package/dist/generate-types.js +16 -0
- package/dist/generate-types.js.map +1 -1
- package/dist/generate-workflow.d.ts +31 -0
- package/dist/generate-workflow.d.ts.map +1 -0
- package/dist/generate-workflow.js +117 -0
- package/dist/generate-workflow.js.map +1 -0
- package/dist/generate.d.ts +29 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +55 -97
- package/dist/generate.js.map +1 -1
- package/dist/generate.service.types.d.ts +15 -0
- package/dist/generate.service.types.d.ts.map +1 -0
- package/dist/generate.service.types.js +2 -0
- package/dist/generate.service.types.js.map +1 -0
- package/dist/generator-cleanup.d.ts +27 -0
- package/dist/generator-cleanup.d.ts.map +1 -0
- package/dist/generator-cleanup.js +64 -0
- package/dist/generator-cleanup.js.map +1 -0
- package/dist/generator-cleanup.types.d.ts +6 -0
- package/dist/generator-cleanup.types.d.ts.map +1 -0
- package/dist/generator-cleanup.types.js +2 -0
- package/dist/generator-cleanup.types.js.map +1 -0
- package/dist/generator-errors.d.ts +74 -0
- package/dist/generator-errors.d.ts.map +1 -0
- package/dist/generator-errors.js +89 -0
- package/dist/generator-errors.js.map +1 -0
- package/dist/generator-filesystem.d.ts +25 -0
- package/dist/generator-filesystem.d.ts.map +1 -0
- package/dist/generator-filesystem.js +68 -0
- package/dist/generator-filesystem.js.map +1 -0
- package/dist/generator-filesystem.types.d.ts +112 -0
- package/dist/generator-filesystem.types.d.ts.map +1 -0
- package/dist/generator-filesystem.types.js +2 -0
- package/dist/generator-filesystem.types.js.map +1 -0
- package/dist/generator-paths.d.ts +13 -0
- package/dist/generator-paths.d.ts.map +1 -0
- package/dist/generator-paths.js +45 -0
- package/dist/generator-paths.js.map +1 -0
- package/dist/generator-paths.types.d.ts +40 -0
- package/dist/generator-paths.types.d.ts.map +1 -0
- package/dist/generator-paths.types.js +2 -0
- package/dist/generator-paths.types.js.map +1 -0
- package/dist/generator-process.d.ts +25 -0
- package/dist/generator-process.d.ts.map +1 -0
- package/dist/generator-process.js +124 -0
- package/dist/generator-process.js.map +1 -0
- package/dist/generator-process.types.d.ts +27 -0
- package/dist/generator-process.types.d.ts.map +1 -0
- package/dist/generator-process.types.js +2 -0
- package/dist/generator-process.types.js.map +1 -0
- package/dist/generator-prompt.d.ts +22 -0
- package/dist/generator-prompt.d.ts.map +1 -0
- package/dist/generator-prompt.js +58 -0
- package/dist/generator-prompt.js.map +1 -0
- package/dist/generator-prompt.types.d.ts +38 -0
- package/dist/generator-prompt.types.d.ts.map +1 -0
- package/dist/generator-prompt.types.js +2 -0
- package/dist/generator-prompt.types.js.map +1 -0
- package/dist/generator-runtime.d.ts +22 -0
- package/dist/generator-runtime.d.ts.map +1 -0
- package/dist/generator-runtime.js +31 -0
- package/dist/generator-runtime.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -79
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +50 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +48 -1
- package/dist/options.js.map +1 -1
- package/dist/patches/drizzle-orm.patch +692 -0
- package/dist/plan-builder-effects.d.ts +124 -0
- package/dist/plan-builder-effects.d.ts.map +1 -0
- package/dist/plan-builder-effects.js +172 -0
- package/dist/plan-builder-effects.js.map +1 -0
- package/dist/plan-builder-files.d.ts +12 -0
- package/dist/plan-builder-files.d.ts.map +1 -0
- package/dist/plan-builder-files.js +99 -0
- package/dist/plan-builder-files.js.map +1 -0
- package/dist/plan-builder-files.types.d.ts +49 -0
- package/dist/plan-builder-files.types.d.ts.map +1 -0
- package/dist/plan-builder-files.types.js +2 -0
- package/dist/plan-builder-files.types.js.map +1 -0
- package/dist/plan-builder-manifest.d.ts +11 -0
- package/dist/plan-builder-manifest.d.ts.map +1 -0
- package/dist/plan-builder-manifest.js +37 -0
- package/dist/plan-builder-manifest.js.map +1 -0
- package/dist/plan-builder.d.ts +78 -18
- package/dist/plan-builder.d.ts.map +1 -1
- package/dist/plan-builder.js +105 -126
- package/dist/plan-builder.js.map +1 -1
- package/dist/plan-builder.types.d.ts +22 -0
- package/dist/plan-builder.types.d.ts.map +1 -0
- package/dist/plan-builder.types.js +2 -0
- package/dist/plan-builder.types.js.map +1 -0
- package/dist/plan-manifest.d.ts +16 -4
- package/dist/plan-manifest.d.ts.map +1 -1
- package/dist/plan-manifest.js +60 -3
- package/dist/plan-manifest.js.map +1 -1
- package/dist/plan-manifest.types.d.ts +13 -0
- package/dist/plan-manifest.types.d.ts.map +1 -0
- package/dist/plan-manifest.types.js +2 -0
- package/dist/plan-manifest.types.js.map +1 -0
- package/dist/project-catalog.d.ts +17 -0
- package/dist/project-catalog.d.ts.map +1 -0
- package/dist/project-catalog.js +69 -0
- package/dist/project-catalog.js.map +1 -0
- package/dist/project-discovery-app.d.ts +7 -0
- package/dist/project-discovery-app.d.ts.map +1 -1
- package/dist/project-discovery-app.js +71 -0
- package/dist/project-discovery-app.js.map +1 -1
- package/dist/project-discovery-database.d.ts +10 -0
- package/dist/project-discovery-database.d.ts.map +1 -1
- package/dist/project-discovery-database.js +18 -0
- package/dist/project-discovery-database.js.map +1 -1
- package/dist/project-discovery-facts.d.ts +13 -0
- package/dist/project-discovery-facts.d.ts.map +1 -0
- package/dist/project-discovery-facts.js +170 -0
- package/dist/project-discovery-facts.js.map +1 -0
- package/dist/project-discovery-types.d.ts +15 -0
- package/dist/project-discovery-types.d.ts.map +1 -1
- package/dist/project-discovery.d.ts +31 -1
- package/dist/project-discovery.d.ts.map +1 -1
- package/dist/project-discovery.js +51 -147
- package/dist/project-discovery.js.map +1 -1
- package/dist/project-discovery.service.types.d.ts +13 -0
- package/dist/project-discovery.service.types.d.ts.map +1 -0
- package/dist/project-discovery.service.types.js +2 -0
- package/dist/project-discovery.service.types.js.map +1 -0
- package/dist/project-manifest.schemas.d.ts +22 -0
- package/dist/project-manifest.schemas.d.ts.map +1 -0
- package/dist/project-manifest.schemas.js +22 -0
- package/dist/project-manifest.schemas.js.map +1 -0
- package/dist/prompt-driver.d.ts +7 -30
- package/dist/prompt-driver.d.ts.map +1 -1
- package/dist/prompt-driver.js +25 -4
- package/dist/prompt-driver.js.map +1 -1
- package/dist/prompt-driver.types.d.ts +92 -0
- package/dist/prompt-driver.types.d.ts.map +1 -0
- package/dist/prompt-driver.types.js +2 -0
- package/dist/prompt-driver.types.js.map +1 -0
- package/dist/provider-planning-definitions.d.ts +43 -0
- package/dist/provider-planning-definitions.d.ts.map +1 -1
- package/dist/provider-planning-definitions.js +43 -0
- package/dist/provider-planning-definitions.js.map +1 -1
- package/dist/provider-planning.d.ts +37 -7
- package/dist/provider-planning.d.ts.map +1 -1
- package/dist/provider-planning.js +69 -76
- package/dist/provider-planning.js.map +1 -1
- package/dist/provider-planning.types.d.ts +14 -0
- package/dist/provider-planning.types.d.ts.map +1 -0
- package/dist/provider-planning.types.js +2 -0
- package/dist/provider-planning.types.js.map +1 -0
- package/dist/provider-profile-definition.d.ts +45 -0
- package/dist/provider-profile-definition.d.ts.map +1 -0
- package/dist/provider-profile-definition.js +93 -0
- package/dist/provider-profile-definition.js.map +1 -0
- package/dist/render-ai-sources.d.ts +20 -0
- package/dist/render-ai-sources.d.ts.map +1 -1
- package/dist/render-ai-sources.js +21 -0
- package/dist/render-ai-sources.js.map +1 -1
- package/dist/render-ai.d.ts +49 -0
- package/dist/render-ai.d.ts.map +1 -1
- package/dist/render-ai.js +62 -12
- package/dist/render-ai.js.map +1 -1
- package/dist/render-auth-schema.d.ts +5 -0
- package/dist/render-auth-schema.d.ts.map +1 -1
- package/dist/render-auth-schema.js +8 -0
- package/dist/render-auth-schema.js.map +1 -1
- package/dist/render-auth-sources.d.ts +8 -0
- package/dist/render-auth-sources.d.ts.map +1 -1
- package/dist/render-auth-sources.js +8 -0
- package/dist/render-auth-sources.js.map +1 -1
- package/dist/render-auth.d.ts +21 -0
- package/dist/render-auth.d.ts.map +1 -1
- package/dist/render-auth.js +86 -24
- package/dist/render-auth.js.map +1 -1
- package/dist/render-database-sources.d.ts +15 -0
- package/dist/render-database-sources.d.ts.map +1 -1
- package/dist/render-database-sources.js +15 -0
- package/dist/render-database-sources.js.map +1 -1
- package/dist/render-database.d.ts +24 -0
- package/dist/render-database.d.ts.map +1 -1
- package/dist/render-database.js +37 -17
- package/dist/render-database.js.map +1 -1
- package/dist/render-domain-callables.d.ts +67 -0
- package/dist/render-domain-callables.d.ts.map +1 -0
- package/dist/render-domain-callables.js +99 -0
- package/dist/render-domain-callables.js.map +1 -0
- package/dist/render-domain-events.d.ts +59 -0
- package/dist/render-domain-events.d.ts.map +1 -0
- package/dist/render-domain-events.js +92 -0
- package/dist/render-domain-events.js.map +1 -0
- package/dist/render-domain-jobs.d.ts +56 -0
- package/dist/render-domain-jobs.d.ts.map +1 -0
- package/dist/render-domain-jobs.js +84 -0
- package/dist/render-domain-jobs.js.map +1 -0
- package/dist/render-domain-register.d.ts +18 -0
- package/dist/render-domain-register.d.ts.map +1 -1
- package/dist/render-domain-register.js +27 -7
- package/dist/render-domain-register.js.map +1 -1
- package/dist/render-domain-sources.d.ts +63 -0
- package/dist/render-domain-sources.d.ts.map +1 -1
- package/dist/render-domain-sources.js +65 -0
- package/dist/render-domain-sources.js.map +1 -1
- package/dist/render-domain.d.ts +4 -25
- package/dist/render-domain.d.ts.map +1 -1
- package/dist/render-domain.js +3 -97
- package/dist/render-domain.js.map +1 -1
- package/dist/render-domain.types.d.ts +15 -0
- package/dist/render-domain.types.d.ts.map +1 -0
- package/dist/render-domain.types.js +2 -0
- package/dist/render-domain.types.js.map +1 -0
- package/dist/render-resource-sources.d.ts +12 -0
- package/dist/render-resource-sources.d.ts.map +1 -1
- package/dist/render-resource-sources.js +12 -0
- package/dist/render-resource-sources.js.map +1 -1
- package/dist/render-resources.d.ts +47 -0
- package/dist/render-resources.d.ts.map +1 -1
- package/dist/render-resources.js +62 -15
- package/dist/render-resources.js.map +1 -1
- package/dist/render-route-sources.d.ts +19 -0
- package/dist/render-route-sources.d.ts.map +1 -1
- package/dist/render-route-sources.js +19 -0
- package/dist/render-route-sources.js.map +1 -1
- package/dist/render-routes.d.ts +57 -0
- package/dist/render-routes.d.ts.map +1 -1
- package/dist/render-routes.js +72 -10
- package/dist/render-routes.js.map +1 -1
- package/dist/render-service.d.ts +23 -1
- package/dist/render-service.d.ts.map +1 -1
- package/dist/render-service.js +65 -20
- package/dist/render-service.js.map +1 -1
- package/dist/scaffold-catalog.d.ts +7 -6
- package/dist/scaffold-catalog.d.ts.map +1 -1
- package/dist/scaffold-catalog.js +11 -5
- package/dist/scaffold-catalog.js.map +1 -1
- package/dist/scaffold-catalog.types.d.ts +11 -0
- package/dist/scaffold-catalog.types.d.ts.map +1 -0
- package/dist/scaffold-catalog.types.js +2 -0
- package/dist/scaffold-catalog.types.js.map +1 -0
- package/dist/source-edit.d.ts +38 -2
- package/dist/source-edit.d.ts.map +1 -1
- package/dist/source-edit.js +39 -94
- package/dist/source-edit.js.map +1 -1
- package/dist/source-factory-edit.d.ts +78 -0
- package/dist/source-factory-edit.d.ts.map +1 -0
- package/dist/source-factory-edit.js +156 -0
- package/dist/source-factory-edit.js.map +1 -0
- package/dist/source-import-edit.d.ts +7 -1
- package/dist/source-import-edit.d.ts.map +1 -1
- package/dist/source-import-edit.js +20 -1
- package/dist/source-import-edit.js.map +1 -1
- package/dist/template-root.d.ts +15 -4
- package/dist/template-root.d.ts.map +1 -1
- package/dist/template-root.js +22 -5
- package/dist/template-root.js.map +1 -1
- package/dist/templates/default/README.md +1 -1
- package/dist/templates/default/v1/agent/package.json +4 -4
- package/dist/templates/default/v1/api/package.json +3 -3
- package/dist/templates/default/v1/fullstack/package.json +6 -6
- package/dist/templates/default/v1/minimal/package.json +3 -3
- package/dist/templates/default/v1/tasks/package.json +3 -3
- package/dist/validate-errors.d.ts +12 -0
- package/dist/validate-errors.d.ts.map +1 -0
- package/dist/validate-errors.js +16 -0
- package/dist/validate-errors.js.map +1 -0
- package/dist/validate-paths.d.ts +43 -0
- package/dist/validate-paths.d.ts.map +1 -0
- package/dist/validate-paths.js +105 -0
- package/dist/validate-paths.js.map +1 -0
- package/dist/validate.d.ts +56 -17
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +89 -130
- package/dist/validate.js.map +1 -1
- package/dist/validate.types.d.ts +19 -0
- package/dist/validate.types.d.ts.map +1 -0
- package/dist/validate.types.js +2 -0
- package/dist/validate.types.js.map +1 -0
- package/package.json +67 -5
- package/src/catalog-resolution.ts +55 -0
- package/src/catalog-resolution.types.ts +2 -0
- package/dist/create-additions.d.ts +0 -7
- package/dist/create-additions.d.ts.map +0 -1
- package/dist/create-additions.js +0 -27
- package/dist/create-additions.js.map +0 -1
package/dist/add-resolver.d.ts
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
1
2
|
import { type AddRequest } from "./add-types.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
readonly prompted: boolean;
|
|
3
|
+
import { ProjectDiscoveryServiceTag } from "./project-discovery.js";
|
|
4
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
5
|
+
import { GeneratorPrompt } from "./generator-prompt.js";
|
|
6
|
+
import type { AddResolutionService, ResolveAddContext, ResolvedAddRequest } from "./add-resolver.types.js";
|
|
7
|
+
export type { ResolveAddContext, ResolvedAddRequest } from "./add-resolver.types.js";
|
|
8
|
+
declare const AddResolution_base: Context.ServiceClass<AddResolution, "create-relkit/AddResolution", AddResolutionService>;
|
|
9
|
+
/** Ordered interactive-add resolution, distinct from applying the user's final consent. */
|
|
10
|
+
export declare class AddResolution extends AddResolution_base {
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Captures declaration discovery, filesystem reads and prompt input at the owning Layer boundary.
|
|
14
|
+
* @returns An AddResolution Layer requiring discovery, filesystem and prompt services.
|
|
15
|
+
*/
|
|
16
|
+
export declare const addResolutionLive: Layer.Layer<AddResolution, never, GeneratorFileSystem | ProjectDiscoveryServiceTag | GeneratorPrompt>;
|
|
17
|
+
/**
|
|
18
|
+
* Resolves a request through explicit add-resolution authority while retaining consent metadata.
|
|
19
|
+
* @param args - Literal flag and positional arguments.
|
|
20
|
+
* @param context - Caller-owned settings and cancellation.
|
|
21
|
+
* @returns The validated add request and whether resolution asked for interactive input.
|
|
22
|
+
*/
|
|
23
|
+
export declare const resolveAddRequestDetailsEffect: (args: readonly string[], context?: ResolveAddContext | undefined) => Effect.Effect<ResolvedAddRequest, import("./generator-errors.js").GeneratorIoError | import("./generator-errors.js").GeneratorPromptError | import("./generator-errors.js").GeneratorDomainError, AddResolution>;
|
|
24
|
+
/**
|
|
25
|
+
* Preserves the existing normalized-request Promise API.
|
|
26
|
+
* @param args - Literal flag and positional arguments.
|
|
27
|
+
* @param context - Caller-owned settings and cancellation.
|
|
28
|
+
* @returns The validated add request after all required choices are resolved.
|
|
29
|
+
*/
|
|
12
30
|
export declare function resolveAddRequest(args: readonly string[], context?: ResolveAddContext): Promise<AddRequest>;
|
|
31
|
+
/**
|
|
32
|
+
* Preserves the existing detailed Promise API and add-flow consent behavior.
|
|
33
|
+
* @param args - Literal flag and positional arguments.
|
|
34
|
+
* @param context - Caller-owned settings and cancellation.
|
|
35
|
+
* @returns The validated request and prompt-consent metadata after native input settles.
|
|
36
|
+
*/
|
|
13
37
|
export declare function resolveAddRequestDetails(args: readonly string[], context?: ResolveAddContext): Promise<ResolvedAddRequest>;
|
|
14
38
|
//# sourceMappingURL=add-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-resolver.d.ts","sourceRoot":"","sources":["../src/add-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add-resolver.d.ts","sourceRoot":"","sources":["../src/add-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAShD,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAwB,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAI9E,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;;AAErF,2FAA2F;AAC3F,qBAAa,aAAc,SAAQ,kBAElC;CAAG;AAEJ;;;GAGG;AACH,eAAO,MAAM,iBAAiB,uGAoD7B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,wRAK1C,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CAS7B"}
|
package/dist/add-resolver.js
CHANGED
|
@@ -1,41 +1,80 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { observeExecution } from "@relkit/contracts/operation";
|
|
1
3
|
import { normalizeAddRequest } from "./add-options.js";
|
|
2
4
|
import { usage } from "./add-options-parser.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { resolveDomainOptionsEffect } from "./add-resolver-domain.js";
|
|
6
|
+
import { resolvePlatformOptionsEffect } from "./add-resolver-platform.js";
|
|
7
|
+
import { resolveResourceOptionsEffect } from "./add-resolver-resources.js";
|
|
8
|
+
import { resolveServiceForKindEffect } from "./add-resolution-discovery.js";
|
|
7
9
|
import { AddResolutionState, choices } from "./add-resolution-state.js";
|
|
8
10
|
import { ADD_KINDS } from "./add-types.js";
|
|
9
|
-
import {
|
|
11
|
+
import { ProjectDiscoveryServiceTag, projectDiscoveryLive } from "./project-discovery.js";
|
|
12
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
13
|
+
import { GeneratorPrompt, generatorPromptLayer } from "./generator-prompt.js";
|
|
14
|
+
import { domainTry, scaffoldErrors } from "./generator-errors.js";
|
|
15
|
+
import { runGeneratorPromise } from "./generator-runtime.js";
|
|
10
16
|
import { createClackPromptDriver } from "./prompt-driver.js";
|
|
17
|
+
/** Ordered interactive-add resolution, distinct from applying the user's final consent. */
|
|
18
|
+
export class AddResolution extends Context.Service()("create-relkit/AddResolution") {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Captures declaration discovery, filesystem reads and prompt input at the owning Layer boundary.
|
|
22
|
+
* @returns An AddResolution Layer requiring discovery, filesystem and prompt services.
|
|
23
|
+
*/
|
|
24
|
+
export const addResolutionLive = Layer.effect(AddResolution, Effect.gen(function* () {
|
|
25
|
+
const discovery = yield* ProjectDiscoveryServiceTag;
|
|
26
|
+
const fs = yield* GeneratorFileSystem;
|
|
27
|
+
const prompt = yield* GeneratorPrompt;
|
|
28
|
+
return AddResolution.of({
|
|
29
|
+
resolve: Effect.fn("AddResolution.resolve")((args, context) => observeExecution("generator", "add.resolve", Effect.gen(function* () {
|
|
30
|
+
const interactive = context.interactive === true;
|
|
31
|
+
const input = [...args];
|
|
32
|
+
let prompted = false;
|
|
33
|
+
if (!ADD_KINDS.some((kind) => kind === input[0])) {
|
|
34
|
+
if (!interactive)
|
|
35
|
+
usage("Usage: relkit add <kind> [name] [options]");
|
|
36
|
+
input.unshift(yield* prompt.select({
|
|
37
|
+
message: "What would you like to add?",
|
|
38
|
+
options: choices(ADD_KINDS),
|
|
39
|
+
}));
|
|
40
|
+
prompted = true;
|
|
41
|
+
}
|
|
42
|
+
const state = new AddResolutionState(input, context.cwd, interactive, context.promptDriver);
|
|
43
|
+
const facts = yield* discovery.discover(state.parsed.projectRoot);
|
|
44
|
+
yield* resolveServiceForKindEffect(state, facts);
|
|
45
|
+
yield* resolveDomainOptionsEffect(state, facts);
|
|
46
|
+
yield* resolveResourceOptionsEffect(state, facts);
|
|
47
|
+
yield* resolvePlatformOptionsEffect(state, facts);
|
|
48
|
+
const request = yield* domainTry(() => normalizeAddRequest(state.args, context.cwd === undefined ? {} : { cwd: context.cwd }));
|
|
49
|
+
return Object.freeze({ request, prompted: prompted || state.prompted });
|
|
50
|
+
}).pipe(scaffoldErrors, Effect.provideService(GeneratorFileSystem, fs), Effect.provideService(GeneratorPrompt, prompt)))),
|
|
51
|
+
});
|
|
52
|
+
}));
|
|
53
|
+
/**
|
|
54
|
+
* Resolves a request through explicit add-resolution authority while retaining consent metadata.
|
|
55
|
+
* @param args - Literal flag and positional arguments.
|
|
56
|
+
* @param context - Caller-owned settings and cancellation.
|
|
57
|
+
* @returns The validated add request and whether resolution asked for interactive input.
|
|
58
|
+
*/
|
|
59
|
+
export const resolveAddRequestDetailsEffect = Effect.fn("AddResolution.details")(function* (args, context = {}) {
|
|
60
|
+
return yield* (yield* AddResolution).resolve(args, context);
|
|
61
|
+
}, (effect) => observeExecution("generator", "add.resolve.details", effect));
|
|
62
|
+
/**
|
|
63
|
+
* Preserves the existing normalized-request Promise API.
|
|
64
|
+
* @param args - Literal flag and positional arguments.
|
|
65
|
+
* @param context - Caller-owned settings and cancellation.
|
|
66
|
+
* @returns The validated add request after all required choices are resolved.
|
|
67
|
+
*/
|
|
11
68
|
export async function resolveAddRequest(args, context = {}) {
|
|
12
69
|
return (await resolveAddRequestDetails(args, context)).request;
|
|
13
70
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const kind = await prompt.select({
|
|
23
|
-
message: "What would you like to add?",
|
|
24
|
-
options: choices(ADD_KINDS),
|
|
25
|
-
});
|
|
26
|
-
input.unshift(kind);
|
|
27
|
-
prompted = true;
|
|
28
|
-
}
|
|
29
|
-
const state = new AddResolutionState(input, context.cwd, interactive, prompt);
|
|
30
|
-
const discovery = await discoverProject(state.parsed.projectRoot);
|
|
31
|
-
await resolveServiceForKind(state, discovery);
|
|
32
|
-
await resolveDomainOptions(state, discovery);
|
|
33
|
-
await resolveResourceOptions(state, discovery);
|
|
34
|
-
await resolvePlatformOptions(state, discovery);
|
|
35
|
-
const normalizeContext = context.cwd === undefined ? {} : { cwd: context.cwd };
|
|
36
|
-
return Object.freeze({
|
|
37
|
-
request: normalizeAddRequest(state.args, normalizeContext),
|
|
38
|
-
prompted: prompted || state.prompted,
|
|
39
|
-
});
|
|
71
|
+
/**
|
|
72
|
+
* Preserves the existing detailed Promise API and add-flow consent behavior.
|
|
73
|
+
* @param args - Literal flag and positional arguments.
|
|
74
|
+
* @param context - Caller-owned settings and cancellation.
|
|
75
|
+
* @returns The validated request and prompt-consent metadata after native input settles.
|
|
76
|
+
*/
|
|
77
|
+
export function resolveAddRequestDetails(args, context = {}) {
|
|
78
|
+
return runGeneratorPromise(resolveAddRequestDetailsEffect(args, context).pipe(Effect.provide(addResolutionLive), Effect.provide(projectDiscoveryLive), Effect.provide(generatorPromptLayer(context.promptDriver ?? createClackPromptDriver()))), context.signal);
|
|
40
79
|
}
|
|
41
80
|
//# sourceMappingURL=add-resolver.js.map
|
package/dist/add-resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-resolver.js","sourceRoot":"","sources":["../src/add-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"add-resolver.js","sourceRoot":"","sources":["../src/add-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Effect } from "effect";
|
|
2
|
+
import type { AddRequest } from "./add-types.js";
|
|
3
|
+
import type { PromptDriver } from "./prompt-driver.types.js";
|
|
4
|
+
import type { GeneratorDomainError, GeneratorIoError, GeneratorPromptError } from "./generator-errors.js";
|
|
5
|
+
/** Existing interactive-add resolution context. */
|
|
6
|
+
export interface ResolveAddContext {
|
|
7
|
+
readonly cwd?: string;
|
|
8
|
+
readonly interactive?: boolean;
|
|
9
|
+
readonly promptDriver?: PromptDriver;
|
|
10
|
+
readonly signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
/** Existing resolved add request and consent-relevant prompted flag. */
|
|
13
|
+
export interface ResolvedAddRequest {
|
|
14
|
+
readonly request: AddRequest;
|
|
15
|
+
readonly prompted: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Finite add-resolution owner with explicit discovery, prompt and source authority. */
|
|
18
|
+
export interface AddResolutionService {
|
|
19
|
+
/**
|
|
20
|
+
* Resolves missing interactive add choices against source-discovered facts.
|
|
21
|
+
* @param args - Literal flag and positional arguments.
|
|
22
|
+
* @param context - Caller-owned settings and cancellation.
|
|
23
|
+
* @returns An Effect returning a validated request and whether resolution prompted.
|
|
24
|
+
*/
|
|
25
|
+
readonly resolve: (args: readonly string[], context: ResolveAddContext) => Effect.Effect<ResolvedAddRequest, GeneratorDomainError | GeneratorIoError | GeneratorPromptError>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=add-resolver.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-resolver.types.d.ts","sourceRoot":"","sources":["../src/add-resolver.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wFAAwF;AACxF,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,CAChB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,iBAAiB,KACvB,MAAM,CAAC,MAAM,CAChB,kBAAkB,EAClB,oBAAoB,GAAG,gBAAgB,GAAG,oBAAoB,CAC/D,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-resolver.types.js","sourceRoot":"","sources":["../src/add-resolver.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ScaffoldFileOperation } from "./add-types.js";
|
|
2
|
+
import type { FileSnapshot } from "./add-transaction-files.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Preserves the existing snapshot Promise API.
|
|
5
|
+
* @param root - Absolute project or owned resource root.
|
|
6
|
+
* @param operations - Ordered planned create/update file operations.
|
|
7
|
+
* @param includeLock - Whether install may mutate either Bun lock format.
|
|
8
|
+
* @returns Snapshots of original bytes/modes for touched files and required Bun lockfiles.
|
|
9
|
+
*/
|
|
10
|
+
export declare function snapshotFiles(root: string, operations: readonly ScaffoldFileOperation[], includeLock: boolean): Promise<readonly FileSnapshot[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Preserves the existing preflight Promise API.
|
|
13
|
+
* @param root - Absolute project or owned resource root.
|
|
14
|
+
* @param operations - Ordered planned create/update file operations.
|
|
15
|
+
* @returns Completion after the existing contract has been applied.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateOperationActions(root: string, operations: readonly ScaffoldFileOperation[]): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Preserves the existing ordered file-write Promise API.
|
|
20
|
+
* @param root - Absolute project or owned resource root.
|
|
21
|
+
* @param operations - Ordered planned create/update file operations.
|
|
22
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
23
|
+
* @returns Completion after the existing contract has been applied.
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyFileOperations(root: string, operations: readonly ScaffoldFileOperation[], createdDirectories: Set<string>): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Preserves the existing byte-and-mode restoration Promise API.
|
|
28
|
+
* @param snapshots - Pre-mutation bytes and permission snapshots.
|
|
29
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
30
|
+
* @returns Completion after the existing contract has been applied.
|
|
31
|
+
*/
|
|
32
|
+
export declare function restoreFiles(snapshots: readonly FileSnapshot[], createdDirectories: ReadonlySet<string>): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=add-transaction-files-compat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction-files-compat.d.ts","sourceRoot":"","sources":["../src/add-transaction-files-compat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {} from "./add-types.js";
|
|
2
|
+
import { runGeneratorPromise } from "./generator-runtime.js";
|
|
3
|
+
/**
|
|
4
|
+
* Preserves the existing snapshot Promise API.
|
|
5
|
+
* @param root - Absolute project or owned resource root.
|
|
6
|
+
* @param operations - Ordered planned create/update file operations.
|
|
7
|
+
* @param includeLock - Whether install may mutate either Bun lock format.
|
|
8
|
+
* @returns Snapshots of original bytes/modes for touched files and required Bun lockfiles.
|
|
9
|
+
*/
|
|
10
|
+
export function snapshotFiles(root, operations, includeLock) {
|
|
11
|
+
return runGeneratorPromise(snapshotFilesEffect(root, operations, includeLock));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Preserves the existing preflight Promise API.
|
|
15
|
+
* @param root - Absolute project or owned resource root.
|
|
16
|
+
* @param operations - Ordered planned create/update file operations.
|
|
17
|
+
* @returns Completion after the existing contract has been applied.
|
|
18
|
+
*/
|
|
19
|
+
export function validateOperationActions(root, operations) {
|
|
20
|
+
return runGeneratorPromise(validateOperationActionsEffect(root, operations));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Preserves the existing ordered file-write Promise API.
|
|
24
|
+
* @param root - Absolute project or owned resource root.
|
|
25
|
+
* @param operations - Ordered planned create/update file operations.
|
|
26
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
27
|
+
* @returns Completion after the existing contract has been applied.
|
|
28
|
+
*/
|
|
29
|
+
export function applyFileOperations(root, operations, createdDirectories) {
|
|
30
|
+
return runGeneratorPromise(applyFileOperationsEffect(root, operations, createdDirectories));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Preserves the existing byte-and-mode restoration Promise API.
|
|
34
|
+
* @param snapshots - Pre-mutation bytes and permission snapshots.
|
|
35
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
36
|
+
* @returns Completion after the existing contract has been applied.
|
|
37
|
+
*/
|
|
38
|
+
export function restoreFiles(snapshots, createdDirectories) {
|
|
39
|
+
return runGeneratorPromise(restoreFilesEffect(snapshots, createdDirectories));
|
|
40
|
+
}
|
|
41
|
+
import { snapshotFilesEffect, validateOperationActionsEffect, applyFileOperationsEffect, restoreFilesEffect, } from "./add-transaction-files.js";
|
|
42
|
+
//# sourceMappingURL=add-transaction-files-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction-files-compat.js","sourceRoot":"","sources":["../src/add-transaction-files-compat.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,UAA4C,EAC5C,WAAoB;IAEpB,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,UAA4C;IAE5C,OAAO,mBAAmB,CAAC,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,UAA4C,EAC5C,kBAA+B;IAE/B,OAAO,mBAAmB,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAkC,EAClC,kBAAuC;IAEvC,OAAO,mBAAmB,CAAC,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,12 +1,52 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
1
2
|
import { type ScaffoldFileOperation } from "./add-types.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
4
|
+
import type { FileSnapshot } from "./add-transaction-files.types.js";
|
|
5
|
+
export type { FileSnapshot } from "./add-transaction-files.types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Resolves one relative operation while rejecting broad and escaping paths.
|
|
8
|
+
* @param root - Absolute project root.
|
|
9
|
+
* @param path - Planned source-relative path.
|
|
10
|
+
* @returns Safe absolute destination.
|
|
11
|
+
*/
|
|
7
12
|
export declare function operationPath(root: string, path: string): string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Snapshots bytes and modes, including both Bun lock formats when installation is required.
|
|
15
|
+
* @param root - Absolute project or owned resource root.
|
|
16
|
+
* @param operations - Ordered planned create/update file operations.
|
|
17
|
+
* @param includeLock - Whether install may mutate either Bun lock format.
|
|
18
|
+
* @returns Original bytes/modes for touched files and required Bun lockfiles, read with bounded concurrency.
|
|
19
|
+
*/
|
|
20
|
+
export declare const snapshotFilesEffect: (root: string, operations: readonly ScaffoldFileOperation[], includeLock: boolean) => Effect.Effect<({
|
|
21
|
+
path: string;
|
|
22
|
+
content?: never;
|
|
23
|
+
mode?: never;
|
|
24
|
+
} | {
|
|
25
|
+
path: string;
|
|
26
|
+
content: Uint8Array<ArrayBufferLike>;
|
|
27
|
+
mode: number;
|
|
28
|
+
})[], import("./generator-errors.js").GeneratorIoError | import("./generator-errors.js").GeneratorDomainError, GeneratorFileSystem>;
|
|
29
|
+
/**
|
|
30
|
+
* Validates every destination before any transaction write, retaining deterministic error order.
|
|
31
|
+
* @param root - Absolute project or owned resource root.
|
|
32
|
+
* @param operations - Ordered planned create/update file operations.
|
|
33
|
+
* @returns Completion when every ordered operation passes path/action/collision preflight.
|
|
34
|
+
*/
|
|
35
|
+
export declare const validateOperationActionsEffect: (root: string, operations: readonly ScaffoldFileOperation[]) => Effect.Effect<void, import("./generator-errors.js").GeneratorIoError | import("./generator-errors.js").GeneratorDomainError, GeneratorFileSystem>;
|
|
36
|
+
/**
|
|
37
|
+
* Applies planned files in order; each temporary atomic-write asset has its own scope.
|
|
38
|
+
* @param root - Absolute project or owned resource root.
|
|
39
|
+
* @param operations - Ordered planned create/update file operations.
|
|
40
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
41
|
+
* @returns Completion after all ordered atomic writes and owned temporary-file cleanup settle.
|
|
42
|
+
*/
|
|
43
|
+
export declare const applyFileOperationsEffect: (root: string, operations: readonly ScaffoldFileOperation[], createdDirectories: Set<string>) => Effect.Effect<void, import("./generator-errors.js").GeneratorIoError | import("./generator-errors.js").GeneratorDomainError, GeneratorFileSystem>;
|
|
44
|
+
/**
|
|
45
|
+
* Restores all touched files even when one restoration fails, then removes only owned empty directories.
|
|
46
|
+
* @param snapshots - Pre-mutation bytes and permission snapshots.
|
|
47
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
48
|
+
* @returns Completion after every restoration and owned directory cleanup attempt; failures retain secondary evidence.
|
|
49
|
+
*/
|
|
50
|
+
export declare const restoreFilesEffect: (snapshots: readonly FileSnapshot[], createdDirectories: ReadonlySet<string>) => Effect.Effect<undefined, import("./generator-errors.js").GeneratorIoError, GeneratorFileSystem>;
|
|
51
|
+
export { snapshotFiles, validateOperationActions, applyFileOperations, restoreFiles, } from "./add-transaction-files-compat.js";
|
|
12
52
|
//# sourceMappingURL=add-transaction-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-transaction-files.d.ts","sourceRoot":"","sources":["../src/add-transaction-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add-transaction-files.d.ts","sourceRoot":"","sources":["../src/add-transaction-files.ts"],"names":[],"mappings":"AAMA,OAAO,EAAS,MAAM,EAAQ,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAuC,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIrE,YAAY,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAShE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;mIAqB/B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,mNAmB1C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,oPAerC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,kLA+B9B,CAAC;AAwEF,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,GACb,MAAM,mCAAmC,CAAC"}
|
|
@@ -1,103 +1,151 @@
|
|
|
1
|
+
import { observeExecution } from "@relkit/contracts/operation";
|
|
1
2
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { lstat, mkdir, readFile, rename, rm, rmdir, writeFile, chmod } from "node:fs/promises";
|
|
3
3
|
import { dirname, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { Cause, Effect, Exit } from "effect";
|
|
4
5
|
import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
|
|
6
|
+
import { GeneratorFileSystem } from "./generator-filesystem.js";
|
|
7
|
+
import { domainError, hasErrno } from "./generator-errors.js";
|
|
8
|
+
import { recordCleanupFailure } from "./generator-cleanup.js";
|
|
9
|
+
/**
|
|
10
|
+
* Resolves one relative operation while rejecting broad and escaping paths.
|
|
11
|
+
* @param root - Absolute project root.
|
|
12
|
+
* @param path - Planned source-relative path.
|
|
13
|
+
* @returns Safe absolute destination.
|
|
14
|
+
*/
|
|
5
15
|
export function operationPath(root, path) {
|
|
6
16
|
const absolute = resolve(root, path);
|
|
7
17
|
const local = relative(root, absolute);
|
|
8
|
-
if (local === "" || local === ".." || local.startsWith(`..${sep}`))
|
|
18
|
+
if (local === "" || local === ".." || local.startsWith(`..${sep}`))
|
|
9
19
|
throw new AddScaffoldError(ADD_FAILURE_CODES.collision, `Scaffold path escapes the project: ${path}`);
|
|
10
|
-
}
|
|
11
20
|
return absolute;
|
|
12
21
|
}
|
|
13
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Snapshots bytes and modes, including both Bun lock formats when installation is required.
|
|
24
|
+
* @param root - Absolute project or owned resource root.
|
|
25
|
+
* @param operations - Ordered planned create/update file operations.
|
|
26
|
+
* @param includeLock - Whether install may mutate either Bun lock format.
|
|
27
|
+
* @returns Original bytes/modes for touched files and required Bun lockfiles, read with bounded concurrency.
|
|
28
|
+
*/
|
|
29
|
+
export const snapshotFilesEffect = Effect.fn("ScaffoldFiles.snapshot")(function* (root, operations, includeLock) {
|
|
30
|
+
const fs = yield* GeneratorFileSystem;
|
|
14
31
|
const paths = new Set(operations.map((operation) => operationPath(root, operation.path)));
|
|
15
|
-
if (includeLock)
|
|
32
|
+
if (includeLock) {
|
|
16
33
|
paths.add(resolve(root, "bun.lock"));
|
|
17
|
-
|
|
18
|
-
for (const path of paths) {
|
|
19
|
-
const metadata = await metadataFor(path);
|
|
20
|
-
if (metadata === undefined)
|
|
21
|
-
snapshots.push({ path });
|
|
22
|
-
else {
|
|
23
|
-
if (!metadata.isFile())
|
|
24
|
-
collision(`${path} is not a regular file.`);
|
|
25
|
-
snapshots.push({ path, content: await readFile(path), mode: metadata.mode & 0o777 });
|
|
26
|
-
}
|
|
34
|
+
paths.add(resolve(root, "bun.lockb"));
|
|
27
35
|
}
|
|
28
|
-
return
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
return yield* Effect.forEach([...paths], (path) => Effect.gen(function* () {
|
|
37
|
+
const metadata = yield* fs.metadata(path);
|
|
38
|
+
if (metadata === undefined)
|
|
39
|
+
return { path };
|
|
40
|
+
if (metadata.kind !== "file")
|
|
41
|
+
return yield* collision(`${path} is not a regular file.`);
|
|
42
|
+
return { path, content: yield* fs.readBytes(path), mode: metadata.mode };
|
|
43
|
+
}), { concurrency: 4 });
|
|
44
|
+
}, (effect) => observeExecution("generator", "transaction.files.snapshot", effect));
|
|
45
|
+
/**
|
|
46
|
+
* Validates every destination before any transaction write, retaining deterministic error order.
|
|
47
|
+
* @param root - Absolute project or owned resource root.
|
|
48
|
+
* @param operations - Ordered planned create/update file operations.
|
|
49
|
+
* @returns Completion when every ordered operation passes path/action/collision preflight.
|
|
50
|
+
*/
|
|
51
|
+
export const validateOperationActionsEffect = Effect.fn("ScaffoldFiles.validate")(function* (root, operations) {
|
|
52
|
+
const fs = yield* GeneratorFileSystem;
|
|
31
53
|
const seen = new Set();
|
|
32
|
-
|
|
54
|
+
yield* Effect.forEach(operations, (operation) => Effect.gen(function* () {
|
|
33
55
|
const path = operationPath(root, operation.path);
|
|
34
56
|
if (seen.has(path))
|
|
35
|
-
collision(`Scaffold plan contains duplicate path ${operation.path}.`);
|
|
57
|
+
return yield* collision(`Scaffold plan contains duplicate path ${operation.path}.`);
|
|
36
58
|
seen.add(path);
|
|
37
|
-
const exists = (
|
|
59
|
+
const exists = (yield* fs.metadata(path)) !== undefined;
|
|
38
60
|
if (operation.action === "create" && exists)
|
|
39
|
-
collision(`${operation.path} already exists.`);
|
|
61
|
+
return yield* collision(`${operation.path} already exists.`);
|
|
40
62
|
if (operation.action === "update" && !exists)
|
|
41
|
-
collision(`${operation.path} does not exist.`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
63
|
+
return yield* collision(`${operation.path} does not exist.`);
|
|
64
|
+
}));
|
|
65
|
+
}, (effect) => observeExecution("generator", "transaction.files.validate", effect));
|
|
66
|
+
/**
|
|
67
|
+
* Applies planned files in order; each temporary atomic-write asset has its own scope.
|
|
68
|
+
* @param root - Absolute project or owned resource root.
|
|
69
|
+
* @param operations - Ordered planned create/update file operations.
|
|
70
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
71
|
+
* @returns Completion after all ordered atomic writes and owned temporary-file cleanup settle.
|
|
72
|
+
*/
|
|
73
|
+
export const applyFileOperationsEffect = Effect.fn("ScaffoldFiles.apply")(function* (root, operations, createdDirectories) {
|
|
74
|
+
yield* Effect.forEach(operations, (operation) => Effect.gen(function* () {
|
|
46
75
|
const path = operationPath(root, operation.path);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
76
|
+
yield* ensureParentEffect(root, dirname(path), createdDirectories);
|
|
77
|
+
yield* atomicWriteEffect(path, operation.content, operation.mode);
|
|
78
|
+
}));
|
|
79
|
+
}, (effect) => observeExecution("generator", "transaction.files.apply", effect));
|
|
80
|
+
/**
|
|
81
|
+
* Restores all touched files even when one restoration fails, then removes only owned empty directories.
|
|
82
|
+
* @param snapshots - Pre-mutation bytes and permission snapshots.
|
|
83
|
+
* @param createdDirectories - Directories owned by this transaction.
|
|
84
|
+
* @returns Completion after every restoration and owned directory cleanup attempt; failures retain secondary evidence.
|
|
85
|
+
*/
|
|
86
|
+
export const restoreFilesEffect = Effect.fn("ScaffoldFiles.restore")(function* (snapshots, createdDirectories) {
|
|
87
|
+
const fs = yield* GeneratorFileSystem;
|
|
88
|
+
const exits = yield* Effect.forEach([...snapshots].reverse(), (snapshot) => Effect.exit(snapshot.content === undefined
|
|
89
|
+
? fs.remove(snapshot.path, { force: true })
|
|
90
|
+
: atomicWriteEffect(snapshot.path, snapshot.content, snapshot.mode)));
|
|
91
|
+
const directoryExits = yield* Effect.forEach([...createdDirectories].sort((a, b) => b.length - a.length), (path) => Effect.exit(fs.removeDirectory(path).pipe(Effect.catchIf((cause) => hasErrno(cause, "ENOENT") || hasErrno(cause, "ENOTEMPTY"), () => Effect.void))));
|
|
92
|
+
const failures = [...exits, ...directoryExits].filter(Exit.isFailure);
|
|
93
|
+
const first = failures[0];
|
|
94
|
+
if (first !== undefined) {
|
|
95
|
+
for (const failure of failures.slice(1))
|
|
96
|
+
yield* recordCleanupFailure(first, "rollback", Cause.squash(failure.cause));
|
|
97
|
+
return yield* Effect.failCause(first.cause);
|
|
57
98
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
99
|
+
}, (effect) => observeExecution("generator", "transaction.files.restore", effect));
|
|
100
|
+
/**
|
|
101
|
+
* Writes a sibling temporary file, atomically renames it and cleans only its owned temporary path.
|
|
102
|
+
* @param path - Path inside the current project or owned resource.
|
|
103
|
+
* @param content - Complete bytes or text planned for the destination.
|
|
104
|
+
* @param mode - Optional restored or generated permission mode.
|
|
105
|
+
* @returns Completion after bytes/mode are published by atomic rename and owned temporary cleanup settles.
|
|
106
|
+
*/
|
|
107
|
+
const atomicWriteEffect = Effect.fn("ScaffoldFiles.atomicWrite")((path, content, mode) => Effect.scoped(Effect.gen(function* () {
|
|
108
|
+
const fs = yield* GeneratorFileSystem;
|
|
109
|
+
const temporary = yield* Effect.acquireRelease(Effect.succeed(`${path}.relkit-${randomUUID()}.tmp`), (temporary, exit) => fs
|
|
110
|
+
.remove(temporary, { force: true })
|
|
111
|
+
.pipe(Effect.catchCause((cause) => recordCleanupFailure(exit, "temporary-file", Cause.squash(cause)))));
|
|
112
|
+
yield* fs.write(temporary, content, mode === undefined ? {} : { mode });
|
|
113
|
+
if (mode !== undefined)
|
|
114
|
+
yield* fs.chmod(temporary, mode);
|
|
115
|
+
yield* fs.rename(temporary, path);
|
|
116
|
+
})), (effect) => observeExecution("generator", "transaction.files.atomicWrite", effect));
|
|
117
|
+
/**
|
|
118
|
+
* Records missing parents before ordered writes so rollback removes only directories it created.
|
|
119
|
+
* @param root - Absolute project or owned resource root.
|
|
120
|
+
* @param path - Path inside the current project or owned resource.
|
|
121
|
+
* @param created - Directories created and owned by this transaction.
|
|
122
|
+
* @returns Completion after missing parents are created and atomically registered as transaction-owned.
|
|
123
|
+
*/
|
|
124
|
+
const ensureParentEffect = Effect.fn("ScaffoldFiles.ensureParent")(function* (root, path, created) {
|
|
125
|
+
const fs = yield* GeneratorFileSystem;
|
|
75
126
|
const missing = [];
|
|
76
127
|
for (let current = path; current !== root; current = dirname(current)) {
|
|
77
|
-
const metadata =
|
|
78
|
-
if (metadata) {
|
|
79
|
-
if (
|
|
80
|
-
collision(`${relative(root, current)} is not a project directory.`);
|
|
81
|
-
}
|
|
128
|
+
const metadata = yield* fs.metadata(current);
|
|
129
|
+
if (metadata !== undefined) {
|
|
130
|
+
if (metadata.kind !== "directory")
|
|
131
|
+
return yield* collision(`${relative(root, current)} is not a project directory.`);
|
|
82
132
|
break;
|
|
83
133
|
}
|
|
84
134
|
missing.push(current);
|
|
85
135
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
throw error;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
136
|
+
yield* Effect.uninterruptible(Effect.gen(function* () {
|
|
137
|
+
yield* fs.mkdir(path, { recursive: true });
|
|
138
|
+
for (const directory of missing)
|
|
139
|
+
created.add(directory);
|
|
140
|
+
}));
|
|
141
|
+
}, (effect) => observeExecution("generator", "transaction.files.ensureParent", effect));
|
|
142
|
+
/**
|
|
143
|
+
* Constructs a typed collision failure preserving its public constructor.
|
|
144
|
+
* @param message - Diagnostic explaining the conflicting declaration.
|
|
145
|
+
* @returns An Effect failing with the original RELKIT_ADD_COLLISION AddScaffoldError.
|
|
146
|
+
*/
|
|
100
147
|
function collision(message) {
|
|
101
|
-
|
|
148
|
+
return Effect.fail(domainError(new AddScaffoldError(ADD_FAILURE_CODES.collision, message)));
|
|
102
149
|
}
|
|
150
|
+
export { snapshotFiles, validateOperationActions, applyFileOperations, restoreFiles, } from "./add-transaction-files-compat.js";
|
|
103
151
|
//# sourceMappingURL=add-transaction-files.js.map
|