@vibesdotdev/config 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -0
- package/SPEC.md +71 -0
- package/dist/adapters/cli/flags.d.ts +75 -0
- package/dist/adapters/cli/flags.d.ts.map +1 -0
- package/dist/adapters/cli/flags.js +221 -0
- package/dist/adapters/cli/flags.js.map +1 -0
- package/dist/adapters/cli/index.d.ts +12 -0
- package/dist/adapters/cli/index.d.ts.map +1 -0
- package/dist/adapters/cli/index.js +9 -0
- package/dist/adapters/cli/index.js.map +1 -0
- package/dist/adapters/cli/mappings.d.ts +17 -0
- package/dist/adapters/cli/mappings.d.ts.map +1 -0
- package/dist/adapters/cli/mappings.js +32 -0
- package/dist/adapters/cli/mappings.js.map +1 -0
- package/dist/adapters/cli/prompts.d.ts +28 -0
- package/dist/adapters/cli/prompts.d.ts.map +1 -0
- package/dist/adapters/cli/prompts.js +55 -0
- package/dist/adapters/cli/prompts.js.map +1 -0
- package/dist/adapters/cli/schemas/flags.schema.d.ts +8 -0
- package/dist/adapters/cli/schemas/flags.schema.d.ts.map +1 -0
- package/dist/adapters/cli/schemas/flags.schema.js +2 -0
- package/dist/adapters/cli/schemas/flags.schema.js.map +1 -0
- package/dist/adapters/cli/schemas/mappings.schema.d.ts +2 -0
- package/dist/adapters/cli/schemas/mappings.schema.d.ts.map +1 -0
- package/dist/adapters/cli/schemas/mappings.schema.js +2 -0
- package/dist/adapters/cli/schemas/mappings.schema.js.map +1 -0
- package/dist/adapters/cli/schemas/prompts.schema.d.ts +5 -0
- package/dist/adapters/cli/schemas/prompts.schema.d.ts.map +1 -0
- package/dist/adapters/cli/schemas/prompts.schema.js +2 -0
- package/dist/adapters/cli/schemas/prompts.schema.js.map +1 -0
- package/dist/adapters/cli/schemas/wizard.schema.d.ts +19 -0
- package/dist/adapters/cli/schemas/wizard.schema.d.ts.map +1 -0
- package/dist/adapters/cli/schemas/wizard.schema.js +2 -0
- package/dist/adapters/cli/schemas/wizard.schema.js.map +1 -0
- package/dist/adapters/cli/wizard.d.ts +33 -0
- package/dist/adapters/cli/wizard.d.ts.map +1 -0
- package/dist/adapters/cli/wizard.js +77 -0
- package/dist/adapters/cli/wizard.js.map +1 -0
- package/dist/browser/index.d.ts +7 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +4 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/cli/settings.descriptor.d.ts +9 -0
- package/dist/cli/settings.descriptor.d.ts.map +1 -0
- package/dist/cli/settings.descriptor.js +18 -0
- package/dist/cli/settings.descriptor.js.map +1 -0
- package/dist/cli/types.d.ts +57 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +9 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +145 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/storage.d.ts +48 -0
- package/dist/client/storage.d.ts.map +1 -0
- package/dist/client/storage.js +46 -0
- package/dist/client/storage.js.map +1 -0
- package/dist/collection/collection.d.ts +46 -0
- package/dist/collection/collection.d.ts.map +1 -0
- package/dist/collection/collection.js +93 -0
- package/dist/collection/collection.js.map +1 -0
- package/dist/collection/index.d.ts +6 -0
- package/dist/collection/index.d.ts.map +1 -0
- package/dist/collection/index.js +5 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/common/index.d.ts +7 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +4 -0
- package/dist/common/index.js.map +1 -0
- package/dist/config.context.descriptor.d.ts +21 -0
- package/dist/config.context.descriptor.d.ts.map +1 -0
- package/dist/config.context.descriptor.js +11 -0
- package/dist/config.context.descriptor.js.map +1 -0
- package/dist/config.plugin.d.ts +15 -0
- package/dist/config.plugin.d.ts.map +1 -0
- package/dist/config.plugin.js +166 -0
- package/dist/config.plugin.js.map +1 -0
- package/dist/crud/base-types.d.ts +10 -0
- package/dist/crud/base-types.d.ts.map +1 -0
- package/dist/crud/base-types.js +10 -0
- package/dist/crud/base-types.js.map +1 -0
- package/dist/crud/index.d.ts +4 -0
- package/dist/crud/index.d.ts.map +1 -0
- package/dist/crud/index.js +2 -0
- package/dist/crud/index.js.map +1 -0
- package/dist/crud/schemas/base-types.schema.d.ts +19 -0
- package/dist/crud/schemas/base-types.schema.d.ts.map +1 -0
- package/dist/crud/schemas/base-types.schema.js +2 -0
- package/dist/crud/schemas/base-types.schema.js.map +1 -0
- package/dist/crud/schemas/shared.schema.d.ts +13 -0
- package/dist/crud/schemas/shared.schema.d.ts.map +1 -0
- package/dist/crud/schemas/shared.schema.js +2 -0
- package/dist/crud/schemas/shared.schema.js.map +1 -0
- package/dist/crud/shared.d.ts +8 -0
- package/dist/crud/shared.d.ts.map +1 -0
- package/dist/crud/shared.js +8 -0
- package/dist/crud/shared.js.map +1 -0
- package/dist/crud/types.d.ts +250 -0
- package/dist/crud/types.d.ts.map +1 -0
- package/dist/crud/types.js +22 -0
- package/dist/crud/types.js.map +1 -0
- package/dist/docs/environment.docs.descriptor.d.ts +4 -0
- package/dist/docs/environment.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/environment.docs.descriptor.js +383 -0
- package/dist/docs/environment.docs.descriptor.js.map +1 -0
- package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
- package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/manifests.docs.descriptor.js +503 -0
- package/dist/docs/manifests.docs.descriptor.js.map +1 -0
- package/dist/docs/validation.docs.descriptor.d.ts +4 -0
- package/dist/docs/validation.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/validation.docs.descriptor.js +441 -0
- package/dist/docs/validation.docs.descriptor.js.map +1 -0
- package/dist/doctor.d.ts +42 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +119 -0
- package/dist/doctor.js.map +1 -0
- package/dist/env.d.ts +28 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +75 -0
- package/dist/env.js.map +1 -0
- package/dist/env.runtime.d.ts +19 -0
- package/dist/env.runtime.d.ts.map +1 -0
- package/dist/env.runtime.js +37 -0
- package/dist/env.runtime.js.map +1 -0
- package/dist/environment/current.d.ts +32 -0
- package/dist/environment/current.d.ts.map +1 -0
- package/dist/environment/current.js +91 -0
- package/dist/environment/current.js.map +1 -0
- package/dist/environment/environment.config.descriptor.d.ts +11 -0
- package/dist/environment/environment.config.descriptor.d.ts.map +1 -0
- package/dist/environment/environment.config.descriptor.js +51 -0
- package/dist/environment/environment.config.descriptor.js.map +1 -0
- package/dist/environment/environment.config.schema.d.ts +47 -0
- package/dist/environment/environment.config.schema.d.ts.map +1 -0
- package/dist/environment/environment.config.schema.js +19 -0
- package/dist/environment/environment.config.schema.js.map +1 -0
- package/dist/environment/environment.local.descriptor.d.ts +11 -0
- package/dist/environment/environment.local.descriptor.d.ts.map +1 -0
- package/dist/environment/environment.local.descriptor.js +42 -0
- package/dist/environment/environment.local.descriptor.js.map +1 -0
- package/dist/environment/environment.plugin.d.ts +9 -0
- package/dist/environment/environment.plugin.d.ts.map +1 -0
- package/dist/environment/environment.plugin.js +27 -0
- package/dist/environment/environment.plugin.js.map +1 -0
- package/dist/environment/environment.production.descriptor.d.ts +10 -0
- package/dist/environment/environment.production.descriptor.d.ts.map +1 -0
- package/dist/environment/environment.production.descriptor.js +37 -0
- package/dist/environment/environment.production.descriptor.js.map +1 -0
- package/dist/environment/environment.staging.descriptor.d.ts +11 -0
- package/dist/environment/environment.staging.descriptor.d.ts.map +1 -0
- package/dist/environment/environment.staging.descriptor.js +22 -0
- package/dist/environment/environment.staging.descriptor.js.map +1 -0
- package/dist/environment/index.d.ts +8 -0
- package/dist/environment/index.d.ts.map +1 -0
- package/dist/environment/index.js +9 -0
- package/dist/environment/index.js.map +1 -0
- package/dist/environment/kinds/environment.default.d.ts +23 -0
- package/dist/environment/kinds/environment.default.d.ts.map +1 -0
- package/dist/environment/kinds/environment.default.js +49 -0
- package/dist/environment/kinds/environment.default.js.map +1 -0
- package/dist/environment/kinds/environment.interface.d.ts +7 -0
- package/dist/environment/kinds/environment.interface.d.ts.map +1 -0
- package/dist/environment/kinds/environment.interface.js +7 -0
- package/dist/environment/kinds/environment.interface.js.map +1 -0
- package/dist/environment/kinds/environment.kind.d.ts +10 -0
- package/dist/environment/kinds/environment.kind.d.ts.map +1 -0
- package/dist/environment/kinds/environment.kind.js +57 -0
- package/dist/environment/kinds/environment.kind.js.map +1 -0
- package/dist/environment/kinds/environment.schema.d.ts +34 -0
- package/dist/environment/kinds/environment.schema.d.ts.map +1 -0
- package/dist/environment/kinds/environment.schema.js +46 -0
- package/dist/environment/kinds/environment.schema.js.map +1 -0
- package/dist/environment/kinds/index.d.ts +8 -0
- package/dist/environment/kinds/index.d.ts.map +1 -0
- package/dist/environment/kinds/index.js +7 -0
- package/dist/environment/kinds/index.js.map +1 -0
- package/dist/environment/kinds/schemas/environment.interface.schema.d.ts +11 -0
- package/dist/environment/kinds/schemas/environment.interface.schema.d.ts.map +1 -0
- package/dist/environment/kinds/schemas/environment.interface.schema.js +2 -0
- package/dist/environment/kinds/schemas/environment.interface.schema.js.map +1 -0
- package/dist/environment/kinds/schemas/environment.schema.d.ts +30 -0
- package/dist/environment/kinds/schemas/environment.schema.d.ts.map +1 -0
- package/dist/environment/kinds/schemas/environment.schema.js +2 -0
- package/dist/environment/kinds/schemas/environment.schema.js.map +1 -0
- package/dist/environment/schemas/current.schema.d.ts +20 -0
- package/dist/environment/schemas/current.schema.d.ts.map +1 -0
- package/dist/environment/schemas/current.schema.js +2 -0
- package/dist/environment/schemas/current.schema.js.map +1 -0
- package/dist/environment/schemas/environment.config.schema.d.ts +4 -0
- package/dist/environment/schemas/environment.config.schema.d.ts.map +1 -0
- package/dist/environment/schemas/environment.config.schema.js +2 -0
- package/dist/environment/schemas/environment.config.schema.js.map +1 -0
- package/dist/extensions/index.d.ts +8 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +8 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/registry.d.ts +41 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +142 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/types.d.ts +101 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +8 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/form/core/field-resolver.d.ts +42 -0
- package/dist/form/core/field-resolver.d.ts.map +1 -0
- package/dist/form/core/field-resolver.js +293 -0
- package/dist/form/core/field-resolver.js.map +1 -0
- package/dist/form/core/groups.d.ts +20 -0
- package/dist/form/core/groups.d.ts.map +1 -0
- package/dist/form/core/groups.js +69 -0
- package/dist/form/core/groups.js.map +1 -0
- package/dist/form/core/index.d.ts +8 -0
- package/dist/form/core/index.d.ts.map +1 -0
- package/dist/form/core/index.js +6 -0
- package/dist/form/core/index.js.map +1 -0
- package/dist/form/core/nested-utils.d.ts +40 -0
- package/dist/form/core/nested-utils.d.ts.map +1 -0
- package/dist/form/core/nested-utils.js +98 -0
- package/dist/form/core/nested-utils.js.map +1 -0
- package/dist/form/core/schemas/validation.schema.d.ts +9 -0
- package/dist/form/core/schemas/validation.schema.d.ts.map +1 -0
- package/dist/form/core/schemas/validation.schema.js +2 -0
- package/dist/form/core/schemas/validation.schema.js.map +1 -0
- package/dist/form/core/types.d.ts +103 -0
- package/dist/form/core/types.d.ts.map +1 -0
- package/dist/form/core/types.js +2 -0
- package/dist/form/core/types.js.map +1 -0
- package/dist/form/core/validation.d.ts +23 -0
- package/dist/form/core/validation.d.ts.map +1 -0
- package/dist/form/core/validation.js +103 -0
- package/dist/form/core/validation.js.map +1 -0
- package/dist/form/core/visibility.d.ts +37 -0
- package/dist/form/core/visibility.d.ts.map +1 -0
- package/dist/form/core/visibility.js +128 -0
- package/dist/form/core/visibility.js.map +1 -0
- package/dist/form/index.d.ts +8 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +2 -0
- package/dist/form/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/cli/index.d.ts +61 -0
- package/dist/loader/cli/index.d.ts.map +1 -0
- package/dist/loader/cli/index.js +263 -0
- package/dist/loader/cli/index.js.map +1 -0
- package/dist/loader/cli/loaders.d.ts +13 -0
- package/dist/loader/cli/loaders.d.ts.map +1 -0
- package/dist/loader/cli/loaders.js +132 -0
- package/dist/loader/cli/loaders.js.map +1 -0
- package/dist/loader/cli/types.d.ts +152 -0
- package/dist/loader/cli/types.d.ts.map +1 -0
- package/dist/loader/cli/types.js +5 -0
- package/dist/loader/cli/types.js.map +1 -0
- package/dist/loader/cli/utils.d.ts +53 -0
- package/dist/loader/cli/utils.d.ts.map +1 -0
- package/dist/loader/cli/utils.js +198 -0
- package/dist/loader/cli/utils.js.map +1 -0
- package/dist/loader/client.d.ts +18 -0
- package/dist/loader/client.d.ts.map +1 -0
- package/dist/loader/client.js +109 -0
- package/dist/loader/client.js.map +1 -0
- package/dist/loader/discovery.d.ts +48 -0
- package/dist/loader/discovery.d.ts.map +1 -0
- package/dist/loader/discovery.js +253 -0
- package/dist/loader/discovery.js.map +1 -0
- package/dist/loader/file-loader.d.ts +17 -0
- package/dist/loader/file-loader.d.ts.map +1 -0
- package/dist/loader/file-loader.js +237 -0
- package/dist/loader/file-loader.js.map +1 -0
- package/dist/loader/index.d.ts +9 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +8 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.server.d.ts +66 -0
- package/dist/loader/index.server.d.ts.map +1 -0
- package/dist/loader/index.server.js +256 -0
- package/dist/loader/index.server.js.map +1 -0
- package/dist/loader/merge.d.ts +88 -0
- package/dist/loader/merge.d.ts.map +1 -0
- package/dist/loader/merge.js +301 -0
- package/dist/loader/merge.js.map +1 -0
- package/dist/loader/schemas/merge.schema.d.ts +8 -0
- package/dist/loader/schemas/merge.schema.d.ts.map +1 -0
- package/dist/loader/schemas/merge.schema.js +2 -0
- package/dist/loader/schemas/merge.schema.js.map +1 -0
- package/dist/loader/schemas/validation.schema.d.ts +17 -0
- package/dist/loader/schemas/validation.schema.d.ts.map +1 -0
- package/dist/loader/schemas/validation.schema.js +2 -0
- package/dist/loader/schemas/validation.schema.js.map +1 -0
- package/dist/loader/server.d.ts +3 -0
- package/dist/loader/server.d.ts.map +1 -0
- package/dist/loader/server.js +2 -0
- package/dist/loader/server.js.map +1 -0
- package/dist/loader/types.d.ts +136 -0
- package/dist/loader/types.d.ts.map +1 -0
- package/dist/loader/types.js +24 -0
- package/dist/loader/types.js.map +1 -0
- package/dist/loader/validation.d.ts +59 -0
- package/dist/loader/validation.d.ts.map +1 -0
- package/dist/loader/validation.js +218 -0
- package/dist/loader/validation.js.map +1 -0
- package/dist/manifest/builder.d.ts +172 -0
- package/dist/manifest/builder.d.ts.map +1 -0
- package/dist/manifest/builder.js +336 -0
- package/dist/manifest/builder.js.map +1 -0
- package/dist/manifest/config-manifest.d.ts +199 -0
- package/dist/manifest/config-manifest.d.ts.map +1 -0
- package/dist/manifest/config-manifest.js +388 -0
- package/dist/manifest/config-manifest.js.map +1 -0
- package/dist/manifest/index.d.ts +10 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +20 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/schema.d.ts +460 -0
- package/dist/manifest/schema.d.ts.map +1 -0
- package/dist/manifest/schema.js +187 -0
- package/dist/manifest/schema.js.map +1 -0
- package/dist/manifest/schemas/builder.schema.d.ts +20 -0
- package/dist/manifest/schemas/builder.schema.d.ts.map +1 -0
- package/dist/manifest/schemas/builder.schema.js +2 -0
- package/dist/manifest/schemas/builder.schema.js.map +1 -0
- package/dist/manifest/schemas/config-manifest.schema.d.ts +2 -0
- package/dist/manifest/schemas/config-manifest.schema.d.ts.map +1 -0
- package/dist/manifest/schemas/config-manifest.schema.js +2 -0
- package/dist/manifest/schemas/config-manifest.schema.js.map +1 -0
- package/dist/manifest/schemas/schema.schema.d.ts +83 -0
- package/dist/manifest/schemas/schema.schema.d.ts.map +1 -0
- package/dist/manifest/schemas/schema.schema.js +2 -0
- package/dist/manifest/schemas/schema.schema.js.map +1 -0
- package/dist/manifest/types.d.ts +563 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +9 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/routing/index.d.ts +29 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +35 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/merge.d.ts +164 -0
- package/dist/routing/merge.d.ts.map +1 -0
- package/dist/routing/merge.js +460 -0
- package/dist/routing/merge.js.map +1 -0
- package/dist/routing/registry.d.ts +145 -0
- package/dist/routing/registry.d.ts.map +1 -0
- package/dist/routing/registry.js +459 -0
- package/dist/routing/registry.js.map +1 -0
- package/dist/routing/schemas/merge.schema.d.ts +5 -0
- package/dist/routing/schemas/merge.schema.d.ts.map +1 -0
- package/dist/routing/schemas/merge.schema.js +2 -0
- package/dist/routing/schemas/merge.schema.js.map +1 -0
- package/dist/routing/types.d.ts +358 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +89 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/schema/extend-zod.d.ts +137 -0
- package/dist/schema/extend-zod.d.ts.map +1 -0
- package/dist/schema/extend-zod.js +243 -0
- package/dist/schema/extend-zod.js.map +1 -0
- package/dist/schema/index.d.ts +9 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +10 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/references.d.ts +9 -0
- package/dist/schema/references.d.ts.map +1 -0
- package/dist/schema/references.js +9 -0
- package/dist/schema/references.js.map +1 -0
- package/dist/schema/resolver.d.ts +45 -0
- package/dist/schema/resolver.d.ts.map +1 -0
- package/dist/schema/resolver.js +267 -0
- package/dist/schema/resolver.js.map +1 -0
- package/dist/schema/schemas/extend-zod.schema.d.ts +16 -0
- package/dist/schema/schemas/extend-zod.schema.d.ts.map +1 -0
- package/dist/schema/schemas/extend-zod.schema.js +2 -0
- package/dist/schema/schemas/extend-zod.schema.js.map +1 -0
- package/dist/schema/schemas/references.schema.d.ts +70 -0
- package/dist/schema/schemas/references.schema.d.ts.map +1 -0
- package/dist/schema/schemas/references.schema.js +2 -0
- package/dist/schema/schemas/references.schema.js.map +1 -0
- package/dist/schemas/collection.d.ts +31 -0
- package/dist/schemas/collection.d.ts.map +1 -0
- package/dist/schemas/collection.js +22 -0
- package/dist/schemas/collection.js.map +1 -0
- package/dist/schemas/config-manifest-descriptor.d.ts +495 -0
- package/dist/schemas/config-manifest-descriptor.d.ts.map +1 -0
- package/dist/schemas/config-manifest-descriptor.js +210 -0
- package/dist/schemas/config-manifest-descriptor.js.map +1 -0
- package/dist/schemas/config-registry-state.d.ts +8 -0
- package/dist/schemas/config-registry-state.d.ts.map +1 -0
- package/dist/schemas/config-registry-state.js +6 -0
- package/dist/schemas/config-registry-state.js.map +1 -0
- package/dist/schemas/doctor.schema.d.ts +25 -0
- package/dist/schemas/doctor.schema.d.ts.map +1 -0
- package/dist/schemas/doctor.schema.js +2 -0
- package/dist/schemas/doctor.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +21 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/server/index.d.ts +5 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +4 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/config-accessor.d.ts +40 -0
- package/dist/services/config-accessor.d.ts.map +1 -0
- package/dist/services/config-accessor.js +180 -0
- package/dist/services/config-accessor.js.map +1 -0
- package/dist/services/config-storage/index.d.ts +8 -0
- package/dist/services/config-storage/index.d.ts.map +1 -0
- package/dist/services/config-storage/index.js +7 -0
- package/dist/services/config-storage/index.js.map +1 -0
- package/dist/services/config-storage/service.d.ts +63 -0
- package/dist/services/config-storage/service.d.ts.map +1 -0
- package/dist/services/config-storage/service.js +234 -0
- package/dist/services/config-storage/service.js.map +1 -0
- package/dist/services/config.d.ts +3 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +30 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/encryption.d.ts +114 -0
- package/dist/services/encryption.d.ts.map +1 -0
- package/dist/services/encryption.js +232 -0
- package/dist/services/encryption.js.map +1 -0
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +16 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/loader/loader.descriptor.d.ts +103 -0
- package/dist/services/loader/loader.descriptor.d.ts.map +1 -0
- package/dist/services/loader/loader.descriptor.js +60 -0
- package/dist/services/loader/loader.descriptor.js.map +1 -0
- package/dist/services/loader/loader.impl.cloud.d.ts +55 -0
- package/dist/services/loader/loader.impl.cloud.d.ts.map +1 -0
- package/dist/services/loader/loader.impl.cloud.js +182 -0
- package/dist/services/loader/loader.impl.cloud.js.map +1 -0
- package/dist/services/loader/loader.impl.consumer.d.ts +48 -0
- package/dist/services/loader/loader.impl.consumer.d.ts.map +1 -0
- package/dist/services/loader/loader.impl.consumer.js +175 -0
- package/dist/services/loader/loader.impl.consumer.js.map +1 -0
- package/dist/services/loader/loader.impl.consumer.local-first.d.ts +59 -0
- package/dist/services/loader/loader.impl.consumer.local-first.d.ts.map +1 -0
- package/dist/services/loader/loader.impl.consumer.local-first.js +347 -0
- package/dist/services/loader/loader.impl.consumer.local-first.js.map +1 -0
- package/dist/services/manifest-utils.d.ts +47 -0
- package/dist/services/manifest-utils.d.ts.map +1 -0
- package/dist/services/manifest-utils.js +105 -0
- package/dist/services/manifest-utils.js.map +1 -0
- package/dist/services/schemas/config-accessor.schema.d.ts +10 -0
- package/dist/services/schemas/config-accessor.schema.d.ts.map +1 -0
- package/dist/services/schemas/config-accessor.schema.js +2 -0
- package/dist/services/schemas/config-accessor.schema.js.map +1 -0
- package/dist/services/schemas/encryption.schema.d.ts +22 -0
- package/dist/services/schemas/encryption.schema.d.ts.map +1 -0
- package/dist/services/schemas/encryption.schema.js +2 -0
- package/dist/services/schemas/encryption.schema.js.map +1 -0
- package/dist/services/schemas/manifest-utils.schema.d.ts +4 -0
- package/dist/services/schemas/manifest-utils.schema.d.ts.map +1 -0
- package/dist/services/schemas/manifest-utils.schema.js +2 -0
- package/dist/services/schemas/manifest-utils.schema.js.map +1 -0
- package/dist/settings/assemble.d.ts +28 -0
- package/dist/settings/assemble.d.ts.map +1 -0
- package/dist/settings/assemble.js +30 -0
- package/dist/settings/assemble.js.map +1 -0
- package/dist/settings/index.d.ts +10 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +10 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/settings-section.schema.d.ts +49 -0
- package/dist/settings/settings-section.schema.d.ts.map +1 -0
- package/dist/settings/settings-section.schema.js +70 -0
- package/dist/settings/settings-section.schema.js.map +1 -0
- package/dist/storage/adapter.d.ts +11 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/index.d.ts +8 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +8 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/schemas.d.ts +257 -0
- package/dist/storage/schemas.d.ts.map +1 -0
- package/dist/storage/schemas.js +179 -0
- package/dist/storage/schemas.js.map +1 -0
- package/dist/storage/types.d.ts +74 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +7 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/system-constants.d.ts +95 -0
- package/dist/system-constants.d.ts.map +1 -0
- package/dist/system-constants.js +110 -0
- package/dist/system-constants.js.map +1 -0
- package/package.json +417 -0
- package/src/adapters/cli/flags.ts +260 -0
- package/src/adapters/cli/index.ts +24 -0
- package/src/adapters/cli/mappings.ts +43 -0
- package/src/adapters/cli/prompts.ts +70 -0
- package/src/adapters/cli/schemas/flags.schema.ts +8 -0
- package/src/adapters/cli/schemas/mappings.schema.ts +3 -0
- package/src/adapters/cli/schemas/prompts.schema.ts +4 -0
- package/src/adapters/cli/schemas/wizard.schema.ts +21 -0
- package/src/adapters/cli/wizard.ts +106 -0
- package/src/adapters/web/components/ManifestForm.svelte +817 -0
- package/src/browser/index.ts +86 -0
- package/src/cli/settings.descriptor.ts +23 -0
- package/src/cli/types.ts +59 -0
- package/src/client/index.ts +169 -0
- package/src/client/storage.ts +76 -0
- package/src/collection/collection.ts +121 -0
- package/src/collection/index.ts +6 -0
- package/src/common/index.ts +86 -0
- package/src/config.context.descriptor.ts +12 -0
- package/src/config.plugin.ts +214 -0
- package/src/crud/base-types.ts +10 -0
- package/src/crud/index.ts +15 -0
- package/src/crud/schemas/base-types.schema.ts +20 -0
- package/src/crud/schemas/shared.schema.ts +14 -0
- package/src/crud/shared.ts +8 -0
- package/src/crud/types.ts +299 -0
- package/src/docs/environment.docs.descriptor.ts +385 -0
- package/src/docs/manifests.docs.descriptor.ts +505 -0
- package/src/docs/validation.docs.descriptor.ts +443 -0
- package/src/doctor.ts +143 -0
- package/src/env.runtime.ts +49 -0
- package/src/env.ts +91 -0
- package/src/environment/current.ts +108 -0
- package/src/environment/environment.config.descriptor.ts +60 -0
- package/src/environment/environment.config.schema.ts +24 -0
- package/src/environment/environment.local.descriptor.ts +45 -0
- package/src/environment/environment.plugin.ts +31 -0
- package/src/environment/environment.production.descriptor.ts +40 -0
- package/src/environment/environment.staging.descriptor.ts +25 -0
- package/src/environment/index.ts +22 -0
- package/src/environment/kinds/environment.default.ts +57 -0
- package/src/environment/kinds/environment.interface.ts +10 -0
- package/src/environment/kinds/environment.kind.ts +69 -0
- package/src/environment/kinds/environment.schema.ts +57 -0
- package/src/environment/kinds/index.ts +8 -0
- package/src/environment/kinds/schemas/environment.interface.schema.ts +11 -0
- package/src/environment/kinds/schemas/environment.schema.ts +24 -0
- package/src/environment/schemas/current.schema.ts +21 -0
- package/src/environment/schemas/environment.config.schema.ts +3 -0
- package/src/extensions/index.ts +26 -0
- package/src/extensions/registry.ts +179 -0
- package/src/extensions/types.ts +123 -0
- package/src/form/core/field-resolver.ts +380 -0
- package/src/form/core/groups.ts +96 -0
- package/src/form/core/index.ts +41 -0
- package/src/form/core/nested-utils.ts +115 -0
- package/src/form/core/schemas/validation.schema.ts +9 -0
- package/src/form/core/types.ts +115 -0
- package/src/form/core/validation.ts +137 -0
- package/src/form/core/visibility.ts +172 -0
- package/src/form/index.ts +36 -0
- package/src/index.ts +69 -0
- package/src/js-yaml.d.ts +4 -0
- package/src/loader/cli/index.ts +386 -0
- package/src/loader/cli/loaders.ts +153 -0
- package/src/loader/cli/types.ts +181 -0
- package/src/loader/cli/utils.ts +236 -0
- package/src/loader/client.ts +140 -0
- package/src/loader/discovery.ts +291 -0
- package/src/loader/file-loader.ts +262 -0
- package/src/loader/index.server.ts +389 -0
- package/src/loader/index.ts +18 -0
- package/src/loader/merge.ts +366 -0
- package/src/loader/schemas/merge.schema.ts +8 -0
- package/src/loader/schemas/validation.schema.ts +18 -0
- package/src/loader/server.ts +15 -0
- package/src/loader/types.ts +142 -0
- package/src/loader/validation.ts +261 -0
- package/src/manifest/builder.ts +452 -0
- package/src/manifest/config-manifest.ts +482 -0
- package/src/manifest/index.ts +92 -0
- package/src/manifest/schema.ts +249 -0
- package/src/manifest/schemas/builder.schema.ts +33 -0
- package/src/manifest/schemas/config-manifest.schema.ts +1 -0
- package/src/manifest/schemas/schema.schema.ts +99 -0
- package/src/manifest/types.ts +726 -0
- package/src/routing/index.ts +105 -0
- package/src/routing/merge.ts +589 -0
- package/src/routing/registry.ts +595 -0
- package/src/routing/schemas/merge.schema.ts +6 -0
- package/src/routing/types.ts +470 -0
- package/src/schema/extend-zod.ts +289 -0
- package/src/schema/index.ts +44 -0
- package/src/schema/references.ts +21 -0
- package/src/schema/resolver.ts +343 -0
- package/src/schema/schemas/extend-zod.schema.ts +16 -0
- package/src/schema/schemas/references.schema.ts +86 -0
- package/src/schemas/collection.ts +38 -0
- package/src/schemas/config-manifest-descriptor.ts +259 -0
- package/src/schemas/config-registry-state.ts +13 -0
- package/src/schemas/doctor.schema.ts +27 -0
- package/src/schemas/index.ts +53 -0
- package/src/server/index.ts +4 -0
- package/src/services/config-accessor.ts +218 -0
- package/src/services/config-storage/index.ts +8 -0
- package/src/services/config-storage/service.ts +355 -0
- package/src/services/config.ts +37 -0
- package/src/services/encryption.ts +260 -0
- package/src/services/index.ts +34 -0
- package/src/services/loader/loader.descriptor.ts +96 -0
- package/src/services/loader/loader.impl.cloud.ts +214 -0
- package/src/services/loader/loader.impl.consumer.local-first.ts +417 -0
- package/src/services/loader/loader.impl.consumer.ts +213 -0
- package/src/services/manifest-utils.ts +119 -0
- package/src/services/schemas/config-accessor.schema.ts +11 -0
- package/src/services/schemas/encryption.schema.ts +23 -0
- package/src/services/schemas/manifest-utils.schema.ts +4 -0
- package/src/settings/assemble.ts +46 -0
- package/src/settings/index.ts +19 -0
- package/src/settings/settings-section.schema.ts +84 -0
- package/src/storage/adapter.ts +12 -0
- package/src/storage/index.ts +48 -0
- package/src/storage/schemas.ts +215 -0
- package/src/storage/types.ts +88 -0
- package/src/system-constants.ts +121 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config File Discovery
|
|
3
|
+
*
|
|
4
|
+
* Discovers config files across all scopes and formats.
|
|
5
|
+
* Searches:
|
|
6
|
+
* - Global: ~/.vibes/{namespace}.{ts,js,json,jsonc,yaml}
|
|
7
|
+
* - Local: ./.vibes/{namespace}.{ts,js,json,jsonc,yaml}
|
|
8
|
+
* - Project: ./vibes.{namespace}.{ts,js,json,jsonc,yaml}
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This file uses lazy-loaded Node.js modules to avoid
|
|
11
|
+
* Vite/Rollup bundler issues when the file is analyzed for client builds.
|
|
12
|
+
* The actual imports happen at runtime when functions are called.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { getRuntimeEnv } from '@vibesdotdev/runtime';
|
|
16
|
+
|
|
17
|
+
// Lazy-loaded Node.js modules to avoid bundler issues
|
|
18
|
+
let _join: typeof import('path').join | null = null;
|
|
19
|
+
let _homedir: typeof import('os').homedir | null = null;
|
|
20
|
+
|
|
21
|
+
async function getJoin(): Promise<typeof import('path').join> {
|
|
22
|
+
if (!_join) {
|
|
23
|
+
const path = await import('path');
|
|
24
|
+
_join = path.join;
|
|
25
|
+
}
|
|
26
|
+
return _join;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function getHomedir(): Promise<typeof import('os').homedir> {
|
|
30
|
+
if (!_homedir) {
|
|
31
|
+
const os = await import('os');
|
|
32
|
+
_homedir = os.homedir;
|
|
33
|
+
}
|
|
34
|
+
return _homedir;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
import {
|
|
38
|
+
type ConfigFileFormat,
|
|
39
|
+
type ConfigFileScope,
|
|
40
|
+
type ConfigPriority,
|
|
41
|
+
type DiscoveredConfigFile,
|
|
42
|
+
type DiscoveryOptions,
|
|
43
|
+
CONFIG_PRIORITIES
|
|
44
|
+
} from './types.ts';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* All supported file extensions in priority order
|
|
48
|
+
* (TypeScript highest priority as it's most expressive)
|
|
49
|
+
*/
|
|
50
|
+
const FORMAT_EXTENSIONS: ConfigFileFormat[] = ['ts', 'js', 'json', 'jsonc', 'yaml'];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* YAML file extensions
|
|
54
|
+
*/
|
|
55
|
+
const YAML_EXTENSIONS = ['yaml', 'yml'];
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get the global vibes directory. Profile-aware: when VIBES_PROFILE is set,
|
|
59
|
+
* resolves to ~/.vibes/profile/{profile}/.
|
|
60
|
+
*/
|
|
61
|
+
export async function getVibesDir(): Promise<string> {
|
|
62
|
+
const join = await getJoin();
|
|
63
|
+
const homedir = await getHomedir();
|
|
64
|
+
const profile = getRuntimeEnv('VIBES_PROFILE') || getRuntimeEnv('VIBES_PROFILE_NAME');
|
|
65
|
+
if (profile) {
|
|
66
|
+
return join(homedir(), '.vibes', 'profile', profile);
|
|
67
|
+
}
|
|
68
|
+
return join(homedir(), '.vibes');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Generate all possible file paths for a namespace and scope
|
|
73
|
+
*/
|
|
74
|
+
async function getPathsForScope(
|
|
75
|
+
namespace: string,
|
|
76
|
+
scope: ConfigFileScope,
|
|
77
|
+
cwd: string
|
|
78
|
+
): Promise<{ path: string; format: ConfigFileFormat }[]> {
|
|
79
|
+
const join = await getJoin();
|
|
80
|
+
const paths: { path: string; format: ConfigFileFormat }[] = [];
|
|
81
|
+
|
|
82
|
+
switch (scope) {
|
|
83
|
+
case 'global': {
|
|
84
|
+
// ~/.vibes/{namespace}.{ext}
|
|
85
|
+
const dir = await getVibesDir();
|
|
86
|
+
for (const format of FORMAT_EXTENSIONS) {
|
|
87
|
+
if (format === 'yaml') {
|
|
88
|
+
// Support both .yaml and .yml
|
|
89
|
+
for (const ext of YAML_EXTENSIONS) {
|
|
90
|
+
paths.push({ path: join(dir, `${namespace}.${ext}`), format: 'yaml' });
|
|
91
|
+
}
|
|
92
|
+
} else {
|
|
93
|
+
paths.push({ path: join(dir, `${namespace}.${format}`), format });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
case 'local': {
|
|
100
|
+
// ./.vibes/{namespace}.{ext}
|
|
101
|
+
const dir = join(cwd, '.vibes');
|
|
102
|
+
for (const format of FORMAT_EXTENSIONS) {
|
|
103
|
+
if (format === 'yaml') {
|
|
104
|
+
for (const ext of YAML_EXTENSIONS) {
|
|
105
|
+
paths.push({ path: join(dir, `${namespace}.${ext}`), format: 'yaml' });
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
paths.push({ path: join(dir, `${namespace}.${format}`), format });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
case 'project': {
|
|
115
|
+
// ./vibes.{namespace}.{ext}
|
|
116
|
+
for (const format of FORMAT_EXTENSIONS) {
|
|
117
|
+
if (format === 'yaml') {
|
|
118
|
+
for (const ext of YAML_EXTENSIONS) {
|
|
119
|
+
paths.push({ path: join(cwd, `vibes.${namespace}.${ext}`), format: 'yaml' });
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
paths.push({ path: join(cwd, `vibes.${namespace}.${format}`), format });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return paths;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Get priority for a scope
|
|
134
|
+
*/
|
|
135
|
+
function getPriorityForScope(scope: ConfigFileScope): ConfigPriority {
|
|
136
|
+
switch (scope) {
|
|
137
|
+
case 'global':
|
|
138
|
+
return CONFIG_PRIORITIES.GLOBAL;
|
|
139
|
+
case 'local':
|
|
140
|
+
return CONFIG_PRIORITIES.LOCAL;
|
|
141
|
+
case 'project':
|
|
142
|
+
return CONFIG_PRIORITIES.PROJECT;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Check if a file exists
|
|
148
|
+
*/
|
|
149
|
+
async function fileExists(path: string): Promise<boolean> {
|
|
150
|
+
try {
|
|
151
|
+
const file = Bun.file(path);
|
|
152
|
+
return await file.exists();
|
|
153
|
+
} catch {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Discover all config files for a namespace
|
|
160
|
+
*
|
|
161
|
+
* Returns files in priority order (lowest to highest).
|
|
162
|
+
* Only returns files that exist.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* const files = await discoverConfigFiles({
|
|
167
|
+
* namespace: 'autoloop',
|
|
168
|
+
* scopes: ['global', 'local', 'project'],
|
|
169
|
+
* });
|
|
170
|
+
* // Returns existing files like:
|
|
171
|
+
* // - ~/.vibes/autoloop.json (priority 1)
|
|
172
|
+
* // - ./.vibes/autoloop.ts (priority 2)
|
|
173
|
+
* // - ./vibes.autoloop.ts (priority 3)
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
export async function discoverConfigFiles(
|
|
177
|
+
options: DiscoveryOptions
|
|
178
|
+
): Promise<DiscoveredConfigFile[]> {
|
|
179
|
+
const {
|
|
180
|
+
namespace,
|
|
181
|
+
scopes = ['global', 'local', 'project'],
|
|
182
|
+
patterns = [],
|
|
183
|
+
fallbackPatterns = [],
|
|
184
|
+
cwd = process.cwd()
|
|
185
|
+
} = options;
|
|
186
|
+
|
|
187
|
+
const discovered: DiscoveredConfigFile[] = [];
|
|
188
|
+
const checkedPaths = new Set<string>();
|
|
189
|
+
|
|
190
|
+
// Check standard paths for each scope
|
|
191
|
+
for (const scope of scopes) {
|
|
192
|
+
const scopePaths = await getPathsForScope(namespace, scope, cwd);
|
|
193
|
+
const priority = getPriorityForScope(scope);
|
|
194
|
+
|
|
195
|
+
// Find first existing file for this scope (highest format priority)
|
|
196
|
+
for (const { path, format } of scopePaths) {
|
|
197
|
+
if (checkedPaths.has(path)) continue;
|
|
198
|
+
checkedPaths.add(path);
|
|
199
|
+
|
|
200
|
+
const exists = await fileExists(path);
|
|
201
|
+
if (exists) {
|
|
202
|
+
discovered.push({
|
|
203
|
+
path,
|
|
204
|
+
format,
|
|
205
|
+
scope,
|
|
206
|
+
priority,
|
|
207
|
+
exists: true
|
|
208
|
+
});
|
|
209
|
+
// Only take first existing file per scope (highest format priority)
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Check custom patterns (project-level priority)
|
|
216
|
+
const join = await getJoin();
|
|
217
|
+
for (const pattern of patterns) {
|
|
218
|
+
const path = pattern.startsWith('/') ? pattern : join(cwd, pattern);
|
|
219
|
+
if (checkedPaths.has(path)) continue;
|
|
220
|
+
checkedPaths.add(path);
|
|
221
|
+
|
|
222
|
+
const exists = await fileExists(path);
|
|
223
|
+
if (exists) {
|
|
224
|
+
const format = detectFormat(path);
|
|
225
|
+
discovered.push({
|
|
226
|
+
path,
|
|
227
|
+
format,
|
|
228
|
+
scope: 'project',
|
|
229
|
+
priority: CONFIG_PRIORITIES.PROJECT,
|
|
230
|
+
exists: true
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Check fallback patterns if no files found yet
|
|
236
|
+
if (discovered.length === 0) {
|
|
237
|
+
for (const pattern of fallbackPatterns) {
|
|
238
|
+
const path = pattern.startsWith('/') ? pattern : join(cwd, pattern);
|
|
239
|
+
if (checkedPaths.has(path)) continue;
|
|
240
|
+
checkedPaths.add(path);
|
|
241
|
+
|
|
242
|
+
const exists = await fileExists(path);
|
|
243
|
+
if (exists) {
|
|
244
|
+
const format = detectFormat(path);
|
|
245
|
+
discovered.push({
|
|
246
|
+
path,
|
|
247
|
+
format,
|
|
248
|
+
scope: 'project',
|
|
249
|
+
priority: CONFIG_PRIORITIES.PROJECT,
|
|
250
|
+
exists: true
|
|
251
|
+
});
|
|
252
|
+
break; // Only use first fallback found
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Sort by priority (lowest to highest for merge order)
|
|
258
|
+
discovered.sort((a, b) => a.priority - b.priority);
|
|
259
|
+
|
|
260
|
+
return discovered;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Detect file format from path
|
|
265
|
+
*/
|
|
266
|
+
export function detectFormat(path: string): ConfigFileFormat {
|
|
267
|
+
const lower = path.toLowerCase();
|
|
268
|
+
if (lower.endsWith('.ts')) return 'ts';
|
|
269
|
+
if (lower.endsWith('.js') || lower.endsWith('.mjs') || lower.endsWith('.cjs')) return 'js';
|
|
270
|
+
if (lower.endsWith('.jsonc')) return 'jsonc';
|
|
271
|
+
if (lower.endsWith('.json')) return 'json';
|
|
272
|
+
if (lower.endsWith('.yaml') || lower.endsWith('.yml')) return 'yaml';
|
|
273
|
+
return 'json'; // Default
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Get all search paths that would be checked for a namespace
|
|
278
|
+
* (useful for error messages and debugging)
|
|
279
|
+
*/
|
|
280
|
+
export async function getAllSearchPaths(
|
|
281
|
+
namespace: string,
|
|
282
|
+
scopes: ConfigFileScope[] = ['global', 'local', 'project'],
|
|
283
|
+
cwd: string = process.cwd()
|
|
284
|
+
): Promise<string[]> {
|
|
285
|
+
const paths: string[] = [];
|
|
286
|
+
for (const scope of scopes) {
|
|
287
|
+
const scopePaths = await getPathsForScope(namespace, scope, cwd);
|
|
288
|
+
paths.push(...scopePaths.map((p) => p.path));
|
|
289
|
+
}
|
|
290
|
+
return paths;
|
|
291
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/// <reference path="../js-yaml.d.ts" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Config File Loader
|
|
5
|
+
*
|
|
6
|
+
* Loads config files in various formats (ts/js/json/jsonc/yaml).
|
|
7
|
+
* Handles dynamic imports for TypeScript/JavaScript files.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { DiscoveredConfigFile, LoadedConfigSource } from './types.ts';
|
|
11
|
+
import type { ConfigFileLocation } from '../manifest/types.ts';
|
|
12
|
+
import { detectFormat } from './discovery.ts';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Load a config file and return its contents
|
|
16
|
+
*/
|
|
17
|
+
export async function loadConfigFile<T = unknown>(
|
|
18
|
+
file: DiscoveredConfigFile,
|
|
19
|
+
configFileLocation?: ConfigFileLocation
|
|
20
|
+
): Promise<LoadedConfigSource<T>> {
|
|
21
|
+
const { path, format, scope, priority } = file;
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
let data: T;
|
|
25
|
+
|
|
26
|
+
switch (format) {
|
|
27
|
+
case 'ts':
|
|
28
|
+
case 'js':
|
|
29
|
+
data = await loadTsJsFile<T>(path, configFileLocation);
|
|
30
|
+
break;
|
|
31
|
+
|
|
32
|
+
case 'json':
|
|
33
|
+
data = await loadJsonFile<T>(path);
|
|
34
|
+
break;
|
|
35
|
+
|
|
36
|
+
case 'jsonc':
|
|
37
|
+
data = await loadJsoncFile<T>(path);
|
|
38
|
+
break;
|
|
39
|
+
|
|
40
|
+
case 'yaml':
|
|
41
|
+
data = await loadYamlFile<T>(path);
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
default:
|
|
45
|
+
throw new Error(`Unsupported format: ${format}`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
source: path,
|
|
50
|
+
scope,
|
|
51
|
+
priority,
|
|
52
|
+
data,
|
|
53
|
+
format,
|
|
54
|
+
loaded: true
|
|
55
|
+
};
|
|
56
|
+
} catch (error) {
|
|
57
|
+
return {
|
|
58
|
+
source: path,
|
|
59
|
+
scope,
|
|
60
|
+
priority,
|
|
61
|
+
data: {} as T,
|
|
62
|
+
format,
|
|
63
|
+
loaded: false,
|
|
64
|
+
error: error instanceof Error ? error.message : String(error)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Load a TypeScript or JavaScript config file
|
|
71
|
+
*/
|
|
72
|
+
async function loadTsJsFile<T>(path: string, configFileLocation?: ConfigFileLocation): Promise<T> {
|
|
73
|
+
// Dynamic import the module
|
|
74
|
+
let module: Record<string, unknown>;
|
|
75
|
+
try {
|
|
76
|
+
// Add timestamp to bust cache for development
|
|
77
|
+
const importPath = `${path}?t=${Date.now()}`;
|
|
78
|
+
module = await import(importPath);
|
|
79
|
+
} catch (importError) {
|
|
80
|
+
const msg = importError instanceof Error ? importError.message : String(importError);
|
|
81
|
+
throw new Error(`Failed to import ${path}: ${msg}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Determine which export to use
|
|
85
|
+
const exportName = configFileLocation?.exportName;
|
|
86
|
+
let result: unknown;
|
|
87
|
+
|
|
88
|
+
// Try explicit export name
|
|
89
|
+
if (exportName && exportName !== 'default') {
|
|
90
|
+
result = module[exportName];
|
|
91
|
+
if (result === undefined) {
|
|
92
|
+
throw new Error(`Export '${exportName}' not found in ${path}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Try default export
|
|
96
|
+
else if (module.default !== undefined) {
|
|
97
|
+
result = module.default;
|
|
98
|
+
}
|
|
99
|
+
// Try configs export (for record-type manifests)
|
|
100
|
+
else if (configFileLocation?.configsExport && module[configFileLocation.configsExport]) {
|
|
101
|
+
result = module[configFileLocation.configsExport];
|
|
102
|
+
}
|
|
103
|
+
// Try common export names
|
|
104
|
+
else if (module.config !== undefined) {
|
|
105
|
+
result = module.config;
|
|
106
|
+
} else if (module.configs !== undefined) {
|
|
107
|
+
result = module.configs;
|
|
108
|
+
}
|
|
109
|
+
// Use entire module if it looks like a config object
|
|
110
|
+
else {
|
|
111
|
+
// Filter out module metadata
|
|
112
|
+
const { __esModule, ...rest } = module as Record<string, unknown>;
|
|
113
|
+
if (Object.keys(rest).length > 0) {
|
|
114
|
+
result = rest;
|
|
115
|
+
} else {
|
|
116
|
+
throw new Error(`No valid export found in ${path}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// If result is a function, call it (supports factory configs)
|
|
121
|
+
if (typeof result === 'function') {
|
|
122
|
+
try {
|
|
123
|
+
result = await result();
|
|
124
|
+
} catch (execError) {
|
|
125
|
+
const msg = execError instanceof Error ? execError.message : String(execError);
|
|
126
|
+
throw new Error(`Failed to execute config factory in ${path}: ${msg}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return result as T;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Load a JSON config file
|
|
135
|
+
*/
|
|
136
|
+
async function loadJsonFile<T>(path: string): Promise<T> {
|
|
137
|
+
const file = Bun.file(path);
|
|
138
|
+
const content = await file.text();
|
|
139
|
+
return JSON.parse(content) as T;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Load a JSONC (JSON with comments) config file
|
|
144
|
+
*/
|
|
145
|
+
async function loadJsoncFile<T>(path: string): Promise<T> {
|
|
146
|
+
const file = Bun.file(path);
|
|
147
|
+
const content = await file.text();
|
|
148
|
+
// Strip comments (single-line // and multi-line /* */)
|
|
149
|
+
const stripped = content
|
|
150
|
+
.replace(/\/\/.*$/gm, '') // Single-line comments
|
|
151
|
+
.replace(/\/\*[\s\S]*?\*\//g, ''); // Multi-line comments
|
|
152
|
+
return JSON.parse(stripped) as T;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Load a YAML config file
|
|
157
|
+
*/
|
|
158
|
+
async function loadYamlFile<T>(path: string): Promise<T> {
|
|
159
|
+
const file = Bun.file(path);
|
|
160
|
+
const content = await file.text();
|
|
161
|
+
|
|
162
|
+
// Use js-yaml for parsing (bundled with Bun)
|
|
163
|
+
try {
|
|
164
|
+
const yaml = await import('js-yaml');
|
|
165
|
+
return yaml.load(content) as T;
|
|
166
|
+
} catch (_yamlError) {
|
|
167
|
+
// Fallback: try simple YAML parsing for basic configs
|
|
168
|
+
return parseSimpleYaml<T>(content);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Simple YAML parser for basic key-value configs
|
|
174
|
+
* Falls back to this if js-yaml isn't available
|
|
175
|
+
*/
|
|
176
|
+
function parseSimpleYaml<T>(content: string): T {
|
|
177
|
+
const result: Record<string, unknown> = {};
|
|
178
|
+
const lines = content.split('\n');
|
|
179
|
+
const _currentIndent = 0;
|
|
180
|
+
let currentObj = result;
|
|
181
|
+
const stack: { obj: Record<string, unknown>; indent: number }[] = [{ obj: result, indent: 0 }];
|
|
182
|
+
|
|
183
|
+
for (const line of lines) {
|
|
184
|
+
// Skip empty lines and comments
|
|
185
|
+
const trimmed = line.trim();
|
|
186
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
187
|
+
|
|
188
|
+
// Calculate indent
|
|
189
|
+
const indent = line.search(/\S/);
|
|
190
|
+
|
|
191
|
+
// Pop stack if we're at a lower indent level
|
|
192
|
+
while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
|
|
193
|
+
stack.pop();
|
|
194
|
+
}
|
|
195
|
+
currentObj = stack[stack.length - 1].obj;
|
|
196
|
+
|
|
197
|
+
// Parse key: value
|
|
198
|
+
const colonIndex = trimmed.indexOf(':');
|
|
199
|
+
if (colonIndex === -1) continue;
|
|
200
|
+
|
|
201
|
+
const key = trimmed.slice(0, colonIndex).trim();
|
|
202
|
+
const value = trimmed.slice(colonIndex + 1).trim();
|
|
203
|
+
|
|
204
|
+
if (value === '' || value === '|' || value === '>') {
|
|
205
|
+
// Nested object or multiline string
|
|
206
|
+
currentObj[key] = {};
|
|
207
|
+
stack.push({ obj: currentObj[key] as Record<string, unknown>, indent });
|
|
208
|
+
} else {
|
|
209
|
+
// Parse value
|
|
210
|
+
currentObj[key] = parseYamlValue(value);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return result as T;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Parse a YAML value
|
|
219
|
+
*/
|
|
220
|
+
function parseYamlValue(value: string): unknown {
|
|
221
|
+
// Remove quotes
|
|
222
|
+
if (
|
|
223
|
+
(value.startsWith('"') && value.endsWith('"')) ||
|
|
224
|
+
(value.startsWith("'") && value.endsWith("'"))
|
|
225
|
+
) {
|
|
226
|
+
return value.slice(1, -1);
|
|
227
|
+
}
|
|
228
|
+
// Boolean
|
|
229
|
+
if (value === 'true') return true;
|
|
230
|
+
if (value === 'false') return false;
|
|
231
|
+
// Null
|
|
232
|
+
if (value === 'null' || value === '~') return null;
|
|
233
|
+
// Number
|
|
234
|
+
const num = Number(value);
|
|
235
|
+
if (!isNaN(num) && value !== '') return num;
|
|
236
|
+
// String
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Load a config file from a path (auto-detect format)
|
|
242
|
+
*/
|
|
243
|
+
export async function loadConfigFromPath<T = unknown>(
|
|
244
|
+
path: string,
|
|
245
|
+
configFileLocation?: ConfigFileLocation
|
|
246
|
+
): Promise<T> {
|
|
247
|
+
const format = detectFormat(path);
|
|
248
|
+
const file: DiscoveredConfigFile = {
|
|
249
|
+
path,
|
|
250
|
+
format,
|
|
251
|
+
scope: 'project',
|
|
252
|
+
priority: 3,
|
|
253
|
+
exists: true
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
const result = await loadConfigFile<T>(file, configFileLocation);
|
|
257
|
+
if (!result.loaded) {
|
|
258
|
+
throw new Error(result.error || `Failed to load ${path}`);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return result.data;
|
|
262
|
+
}
|