@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,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension Registry
|
|
3
|
+
*
|
|
4
|
+
* Global registry for surface-specific manifest extensions.
|
|
5
|
+
* Extensions self-register on import from surface entry points.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { BaseRecord } from '../crud/types.ts';
|
|
9
|
+
import type { ExtensionSurface, ManifestSurfaceExtension, LoadedExtension } from './types.ts';
|
|
10
|
+
|
|
11
|
+
// Registry Storage
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Global registry - maps "manifestId:surface" to extension
|
|
15
|
+
* Uses BaseRecord as the common type for storage
|
|
16
|
+
*/
|
|
17
|
+
const extensions = new Map<string, ManifestSurfaceExtension<BaseRecord>>();
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Cache for loaded extensions (with components resolved)
|
|
21
|
+
*/
|
|
22
|
+
const loadedCache = new Map<string, LoadedExtension<BaseRecord>>();
|
|
23
|
+
|
|
24
|
+
// Registration
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Build registry key from manifest ID and surface
|
|
28
|
+
*/
|
|
29
|
+
function buildKey(manifestId: string, surface: ExtensionSurface): string {
|
|
30
|
+
return `${manifestId}:${surface}`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Register a surface extension for a manifest
|
|
35
|
+
*/
|
|
36
|
+
export function registerExtension<T extends BaseRecord = BaseRecord>(
|
|
37
|
+
extension: ManifestSurfaceExtension<T>
|
|
38
|
+
): void {
|
|
39
|
+
const key = buildKey(extension.manifestId, extension.surface);
|
|
40
|
+
|
|
41
|
+
if (extensions.has(key)) {
|
|
42
|
+
console.warn(
|
|
43
|
+
`[ExtensionRegistry] Extension for "${extension.manifestId}" on "${extension.surface}" already registered. Skipping.`
|
|
44
|
+
);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Registry stores base type; callers retrieve with their specific generic
|
|
49
|
+
extensions.set(key, extension as unknown as ManifestSurfaceExtension<BaseRecord>);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Retrieval
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Get a registered extension (not yet loaded)
|
|
56
|
+
*/
|
|
57
|
+
export function getExtension(
|
|
58
|
+
manifestId: string,
|
|
59
|
+
surface: ExtensionSurface
|
|
60
|
+
): ManifestSurfaceExtension | null {
|
|
61
|
+
return extensions.get(buildKey(manifestId, surface)) ?? null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Check if an extension exists
|
|
66
|
+
*/
|
|
67
|
+
export function hasExtension(manifestId: string, surface: ExtensionSurface): boolean {
|
|
68
|
+
return extensions.has(buildKey(manifestId, surface));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get all registered extension keys
|
|
73
|
+
*/
|
|
74
|
+
export function getAllExtensionKeys(): string[] {
|
|
75
|
+
return Array.from(extensions.keys());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get all extensions for a specific surface
|
|
80
|
+
*/
|
|
81
|
+
export function getExtensionsForSurface(surface: ExtensionSurface): ManifestSurfaceExtension[] {
|
|
82
|
+
return Array.from(extensions.values()).filter((ext) => ext.surface === surface);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Loading (Lazy Component Resolution)
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Load an extension, resolving all lazy loaders
|
|
89
|
+
*/
|
|
90
|
+
export async function loadExtension<T extends BaseRecord = BaseRecord>(
|
|
91
|
+
manifestId: string,
|
|
92
|
+
surface: ExtensionSurface
|
|
93
|
+
): Promise<LoadedExtension<T> | null> {
|
|
94
|
+
const key = buildKey(manifestId, surface);
|
|
95
|
+
|
|
96
|
+
// Check cache first
|
|
97
|
+
const cached = loadedCache.get(key);
|
|
98
|
+
if (cached) {
|
|
99
|
+
// Cache stores base type; caller retrieves with their specific generic
|
|
100
|
+
return cached as unknown as LoadedExtension<T>;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Get the raw extension
|
|
104
|
+
const extension = getExtension(manifestId, surface);
|
|
105
|
+
if (!extension) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Resolve all field override loaders in parallel
|
|
110
|
+
const loadedOverrides: LoadedExtension['fieldOverrides'] = {};
|
|
111
|
+
|
|
112
|
+
if (extension.fieldOverrides) {
|
|
113
|
+
const entries = Object.entries(extension.fieldOverrides);
|
|
114
|
+
const loadPromises = entries.map(async ([fieldKey, override]) => {
|
|
115
|
+
if (override.loader) {
|
|
116
|
+
const loaded = await override.loader();
|
|
117
|
+
return [
|
|
118
|
+
fieldKey,
|
|
119
|
+
{
|
|
120
|
+
component: loaded.component,
|
|
121
|
+
props: { ...override.props, ...loaded.props },
|
|
122
|
+
propsFactory: override.propsFactory,
|
|
123
|
+
hidden: override.hidden,
|
|
124
|
+
render: override.render
|
|
125
|
+
}
|
|
126
|
+
] as const;
|
|
127
|
+
}
|
|
128
|
+
return [
|
|
129
|
+
fieldKey,
|
|
130
|
+
{
|
|
131
|
+
component: override.component,
|
|
132
|
+
props: override.props,
|
|
133
|
+
propsFactory: override.propsFactory,
|
|
134
|
+
hidden: override.hidden,
|
|
135
|
+
render: override.render
|
|
136
|
+
}
|
|
137
|
+
] as const;
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const results = await Promise.all(loadPromises);
|
|
141
|
+
for (const [fieldKey, override] of results) {
|
|
142
|
+
loadedOverrides[fieldKey] = override;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Build loaded extension
|
|
147
|
+
const loaded: LoadedExtension<T> = {
|
|
148
|
+
manifestId: extension.manifestId,
|
|
149
|
+
surface: extension.surface,
|
|
150
|
+
fieldOverrides: loadedOverrides,
|
|
151
|
+
renderHeader: extension.renderHeader as LoadedExtension<T>['renderHeader'],
|
|
152
|
+
renderFooter: extension.renderFooter as LoadedExtension<T>['renderFooter'],
|
|
153
|
+
renderListRow: extension.renderListRow as LoadedExtension<T>['renderListRow'],
|
|
154
|
+
renderEmpty: extension.renderEmpty,
|
|
155
|
+
renderCreate: extension.renderCreate as LoadedExtension<T>['renderCreate'],
|
|
156
|
+
renderEdit: extension.renderEdit as LoadedExtension<T>['renderEdit']
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// Cache and return
|
|
160
|
+
loadedCache.set(key, loaded as unknown as LoadedExtension<BaseRecord>);
|
|
161
|
+
return loaded;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Cache Management
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Clear the loaded extension cache
|
|
168
|
+
*/
|
|
169
|
+
export function clearExtensionCache(): void {
|
|
170
|
+
loadedCache.clear();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Clear all registered extensions (for testing)
|
|
175
|
+
*/
|
|
176
|
+
export function clearAllExtensions(): void {
|
|
177
|
+
extensions.clear();
|
|
178
|
+
loadedCache.clear();
|
|
179
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface-Specific Manifest Extensions
|
|
3
|
+
*
|
|
4
|
+
* Enables surface-specific (TUI/Web/CLI) component overrides for manifests.
|
|
5
|
+
* Extensions are loaded on-demand like the tools/manifests.ts pattern.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ConfigFieldMeta } from '../manifest/types.ts';
|
|
9
|
+
import type { CRUDViewMode, BaseRecord } from '../crud/shared.ts';
|
|
10
|
+
|
|
11
|
+
// Re-export BaseRecord for convenience
|
|
12
|
+
export type { BaseRecord } from '../crud/shared.ts';
|
|
13
|
+
|
|
14
|
+
// Surface Types
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Supported surface types
|
|
18
|
+
*/
|
|
19
|
+
export type ExtensionSurface = 'tui' | 'web' | 'cli';
|
|
20
|
+
|
|
21
|
+
// Lazy Loading
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Lazy component loader - returns component and optional props
|
|
25
|
+
*/
|
|
26
|
+
export type LazyComponentLoader<T = unknown> = () => Promise<{
|
|
27
|
+
component: T;
|
|
28
|
+
props?: Record<string, unknown>;
|
|
29
|
+
}>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Component override with lazy loading support
|
|
33
|
+
*/
|
|
34
|
+
export interface LazyComponentOverride {
|
|
35
|
+
/** Lazy loader for the component */
|
|
36
|
+
loader?: LazyComponentLoader;
|
|
37
|
+
/** Pre-loaded component (alternative to loader) */
|
|
38
|
+
component?: unknown;
|
|
39
|
+
/** Factory to generate props from field and context */
|
|
40
|
+
propsFactory?: (
|
|
41
|
+
field: ConfigFieldMeta,
|
|
42
|
+
context: { values: Record<string, unknown>; mode: 'create' | 'edit' }
|
|
43
|
+
) => Record<string, unknown>;
|
|
44
|
+
/** Additional static props */
|
|
45
|
+
props?: Record<string, unknown>;
|
|
46
|
+
/** Hide this field entirely */
|
|
47
|
+
hidden?: boolean;
|
|
48
|
+
/** Custom render function */
|
|
49
|
+
render?: (field: ConfigFieldMeta, defaultRender: () => unknown) => unknown;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Extension Definition
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* View render context for custom create/edit views
|
|
56
|
+
*/
|
|
57
|
+
export interface ViewRenderContext<T extends BaseRecord = BaseRecord> {
|
|
58
|
+
/** Current record (undefined for create mode) */
|
|
59
|
+
record?: T;
|
|
60
|
+
/** Submit handler */
|
|
61
|
+
onSubmit: (values: T) => void;
|
|
62
|
+
/** Cancel/back handler */
|
|
63
|
+
onCancel: () => void;
|
|
64
|
+
/** Whether a save operation is in progress */
|
|
65
|
+
isSubmitting?: boolean;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Surface-specific extension for a manifest
|
|
70
|
+
*/
|
|
71
|
+
export interface ManifestSurfaceExtension<T extends BaseRecord = BaseRecord> {
|
|
72
|
+
/** Manifest ID this extension applies to */
|
|
73
|
+
manifestId: string;
|
|
74
|
+
/** Surface this extension is for */
|
|
75
|
+
surface: ExtensionSurface;
|
|
76
|
+
/** Field-level component overrides */
|
|
77
|
+
fieldOverrides?: Record<string, LazyComponentOverride>;
|
|
78
|
+
/** Custom header renderer */
|
|
79
|
+
renderHeader?: (mode: CRUDViewMode, record?: T) => unknown;
|
|
80
|
+
/** Custom footer renderer */
|
|
81
|
+
renderFooter?: (mode: CRUDViewMode, record?: T) => unknown;
|
|
82
|
+
/** Custom list row renderer */
|
|
83
|
+
renderListRow?: (record: T, defaultRender: () => unknown) => unknown;
|
|
84
|
+
/** Custom empty state renderer */
|
|
85
|
+
renderEmpty?: () => unknown;
|
|
86
|
+
/**
|
|
87
|
+
* Custom create view renderer.
|
|
88
|
+
* When provided, replaces the entire create form with a custom component.
|
|
89
|
+
* Use for wizard-style flows or complex template-based creation.
|
|
90
|
+
*/
|
|
91
|
+
renderCreate?: (context: ViewRenderContext<T>) => unknown;
|
|
92
|
+
/**
|
|
93
|
+
* Custom edit view renderer.
|
|
94
|
+
* When provided, replaces the entire edit form with a custom component.
|
|
95
|
+
*/
|
|
96
|
+
renderEdit?: (context: ViewRenderContext<T>) => unknown;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Loaded Extension State
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* An extension with components already loaded
|
|
103
|
+
*/
|
|
104
|
+
export interface LoadedExtension<T extends BaseRecord = BaseRecord> extends Omit<
|
|
105
|
+
ManifestSurfaceExtension<T>,
|
|
106
|
+
'fieldOverrides'
|
|
107
|
+
> {
|
|
108
|
+
/** Loaded component overrides (loaders resolved) */
|
|
109
|
+
fieldOverrides: Record<
|
|
110
|
+
string,
|
|
111
|
+
{
|
|
112
|
+
component?: unknown;
|
|
113
|
+
props?: Record<string, unknown>;
|
|
114
|
+
propsFactory?: LazyComponentOverride['propsFactory'];
|
|
115
|
+
hidden?: boolean;
|
|
116
|
+
render?: LazyComponentOverride['render'];
|
|
117
|
+
}
|
|
118
|
+
>;
|
|
119
|
+
/** Custom create view renderer */
|
|
120
|
+
renderCreate?: ManifestSurfaceExtension<T>['renderCreate'];
|
|
121
|
+
/** Custom edit view renderer */
|
|
122
|
+
renderEdit?: ManifestSurfaceExtension<T>['renderEdit'];
|
|
123
|
+
}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Resolver
|
|
3
|
+
*
|
|
4
|
+
* Maps manifest field definitions to component types and resolves field state.
|
|
5
|
+
* Also provides default resolution based on context.
|
|
6
|
+
*/
|
|
7
|
+
import type { z, ZodTypeAny, ZodObject } from 'zod/v4';
|
|
8
|
+
import type {
|
|
9
|
+
ConfigManifest,
|
|
10
|
+
ConfigFieldMeta,
|
|
11
|
+
FieldComponent,
|
|
12
|
+
ConfigContext
|
|
13
|
+
} from '../../manifest/types.ts';
|
|
14
|
+
import type { ResolvedField, ComponentOverride } from './types.ts';
|
|
15
|
+
import { getUIMeta } from '../../schema/extend-zod.ts';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Infer component type from field metadata
|
|
19
|
+
*/
|
|
20
|
+
export function inferFieldComponent(fieldMeta: ConfigFieldMeta): FieldComponent {
|
|
21
|
+
// Explicit component takes precedence
|
|
22
|
+
if (fieldMeta.ui.component) {
|
|
23
|
+
return fieldMeta.ui.component;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Infer from options presence
|
|
27
|
+
if (fieldMeta.options && fieldMeta.options.length > 0) {
|
|
28
|
+
// Few options = radio, many = select
|
|
29
|
+
return fieldMeta.options.length <= 4 ? 'radio-group' : 'select';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Default to input
|
|
33
|
+
return 'input';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get default value for a field considering context
|
|
38
|
+
*/
|
|
39
|
+
export function getFieldDefault(
|
|
40
|
+
fieldMeta: ConfigFieldMeta,
|
|
41
|
+
context: { hardware?: string; environment?: string; surface?: string }
|
|
42
|
+
): unknown {
|
|
43
|
+
const defaults = fieldMeta.defaults;
|
|
44
|
+
if (!defaults) return undefined;
|
|
45
|
+
|
|
46
|
+
// Check surface-specific default
|
|
47
|
+
if (context.surface && defaults.bySurface?.[context.surface as keyof typeof defaults.bySurface]) {
|
|
48
|
+
return defaults.bySurface[context.surface as keyof typeof defaults.bySurface];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Check hardware-specific default
|
|
52
|
+
if (
|
|
53
|
+
context.hardware &&
|
|
54
|
+
defaults.byHardware?.[context.hardware as keyof typeof defaults.byHardware]
|
|
55
|
+
) {
|
|
56
|
+
return defaults.byHardware[context.hardware as keyof typeof defaults.byHardware];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check environment-specific default
|
|
60
|
+
if (
|
|
61
|
+
context.environment &&
|
|
62
|
+
defaults.byEnvironment?.[context.environment as keyof typeof defaults.byEnvironment]
|
|
63
|
+
) {
|
|
64
|
+
return defaults.byEnvironment[context.environment as keyof typeof defaults.byEnvironment];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Return base default
|
|
68
|
+
return defaults.base;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get a value at a dot-notation path from an object
|
|
73
|
+
* Supports both flat keys (e.g., obj['configuration.apiKey'])
|
|
74
|
+
* and nested objects (e.g., obj.configuration.apiKey)
|
|
75
|
+
*/
|
|
76
|
+
function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
|
|
77
|
+
// First try direct key lookup (for flat form values)
|
|
78
|
+
if (path in obj) {
|
|
79
|
+
return obj[path];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Then try dot-notation path lookup (for nested objects)
|
|
83
|
+
const parts = path.split('.');
|
|
84
|
+
let current: unknown = obj;
|
|
85
|
+
for (const part of parts) {
|
|
86
|
+
if (current == null || typeof current !== 'object') {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
current = (current as Record<string, unknown>)[part];
|
|
90
|
+
}
|
|
91
|
+
return current;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Get a schema at a dot-notation path
|
|
96
|
+
* Drills down through nested ZodObject shapes
|
|
97
|
+
*/
|
|
98
|
+
function getSchemaAtPath(rootSchema: ZodTypeAny, path: string): ZodTypeAny | undefined {
|
|
99
|
+
const parts = path.split('.');
|
|
100
|
+
let current: ZodTypeAny | undefined = rootSchema;
|
|
101
|
+
|
|
102
|
+
for (const part of parts) {
|
|
103
|
+
if (!current) return undefined;
|
|
104
|
+
|
|
105
|
+
// Try to get shape from current schema
|
|
106
|
+
const zodObj = current as ZodObject<Record<string, ZodTypeAny>>;
|
|
107
|
+
if (zodObj.shape && typeof zodObj.shape === 'object') {
|
|
108
|
+
current = zodObj.shape[part] as ZodTypeAny | undefined;
|
|
109
|
+
} else {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return current;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Type guard to check if a manifest has a recordSchema property
|
|
119
|
+
*/
|
|
120
|
+
function hasRecordSchema(
|
|
121
|
+
manifest: ConfigManifest
|
|
122
|
+
): manifest is ConfigManifest & { recordSchema: ZodTypeAny } {
|
|
123
|
+
return 'recordSchema' in manifest && manifest.recordSchema != null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Extract field schemas from a manifest's Zod schema
|
|
128
|
+
* Handles dot-notation field keys for nested fields
|
|
129
|
+
*/
|
|
130
|
+
function extractFieldSchemas(manifest: ConfigManifest): Record<string, ZodTypeAny> {
|
|
131
|
+
const schemas: Record<string, ZodTypeAny> = {};
|
|
132
|
+
|
|
133
|
+
// Use recordSchema if available (for RecordManifests), otherwise use schema
|
|
134
|
+
const baseSchema = hasRecordSchema(manifest) ? manifest.recordSchema : manifest.schema;
|
|
135
|
+
if (!baseSchema || typeof baseSchema !== 'object' || !('_zod' in baseSchema)) {
|
|
136
|
+
return schemas;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// For each field key in the manifest, try to find its schema
|
|
140
|
+
for (const key of Object.keys(manifest.fields)) {
|
|
141
|
+
if (key.includes('.')) {
|
|
142
|
+
// Dot-notation path - drill down into nested schemas
|
|
143
|
+
const fieldSchema = getSchemaAtPath(baseSchema, key);
|
|
144
|
+
if (fieldSchema) {
|
|
145
|
+
schemas[key] = fieldSchema;
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
// Top-level field - get directly from shape
|
|
149
|
+
const zodSchema = baseSchema as ZodObject<Record<string, ZodTypeAny>>;
|
|
150
|
+
if (zodSchema.shape && zodSchema.shape[key]) {
|
|
151
|
+
schemas[key] = zodSchema.shape[key] as ZodTypeAny;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return schemas;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Resolve all fields from a manifest
|
|
161
|
+
*/
|
|
162
|
+
export function resolveFields(
|
|
163
|
+
manifest: ConfigManifest,
|
|
164
|
+
values: Record<string, unknown>,
|
|
165
|
+
overrides: Record<string, ComponentOverride> = {},
|
|
166
|
+
context: { hardware?: string; environment?: string; surface?: string } = {}
|
|
167
|
+
): ResolvedField[] {
|
|
168
|
+
const fields: ResolvedField[] = [];
|
|
169
|
+
const fieldSchemas = extractFieldSchemas(manifest);
|
|
170
|
+
|
|
171
|
+
for (const [key, meta] of Object.entries(manifest.fields)) {
|
|
172
|
+
const override = overrides[key];
|
|
173
|
+
const fieldSchema = fieldSchemas[key];
|
|
174
|
+
|
|
175
|
+
// Skip if override says hidden
|
|
176
|
+
if (override?.hidden) continue;
|
|
177
|
+
|
|
178
|
+
// Check if schema has UI metadata that should override manifest meta
|
|
179
|
+
const schemaUIMeta = fieldSchema ? getUIMeta(fieldSchema) : undefined;
|
|
180
|
+
const enhancedMeta = schemaUIMeta ? mergeUIMeta(meta, schemaUIMeta) : meta;
|
|
181
|
+
|
|
182
|
+
const resolved: ResolvedField = {
|
|
183
|
+
key,
|
|
184
|
+
meta: enhancedMeta,
|
|
185
|
+
component: inferFieldComponent(enhancedMeta),
|
|
186
|
+
// Use path-based access for nested fields (e.g., configuration.apiKey)
|
|
187
|
+
value: getValueAtPath(values, key) ?? getFieldDefault(enhancedMeta, context),
|
|
188
|
+
visible: true, // Will be evaluated by visibility module
|
|
189
|
+
disabled: false, // Will be evaluated by visibility module
|
|
190
|
+
required: false, // Will be evaluated by visibility module
|
|
191
|
+
override,
|
|
192
|
+
fieldSchema
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
fields.push(resolved);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Sort by order
|
|
199
|
+
fields.sort((a, b) => (a.meta.ui.order ?? 999) - (b.meta.ui.order ?? 999));
|
|
200
|
+
|
|
201
|
+
return fields;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Merge schema UI metadata into field meta
|
|
206
|
+
*/
|
|
207
|
+
function mergeUIMeta(
|
|
208
|
+
meta: ConfigFieldMeta,
|
|
209
|
+
schemaUI: ReturnType<typeof getUIMeta>
|
|
210
|
+
): ConfigFieldMeta {
|
|
211
|
+
if (!schemaUI) return meta;
|
|
212
|
+
|
|
213
|
+
return {
|
|
214
|
+
...meta,
|
|
215
|
+
ui: {
|
|
216
|
+
...meta.ui,
|
|
217
|
+
// Schema UI overrides manifest UI where defined
|
|
218
|
+
...(schemaUI.label && { label: schemaUI.label }),
|
|
219
|
+
...(schemaUI.description && { description: schemaUI.description }),
|
|
220
|
+
...(schemaUI.helpText && { helpText: schemaUI.helpText }),
|
|
221
|
+
...(schemaUI.placeholder && { placeholder: schemaUI.placeholder }),
|
|
222
|
+
...(schemaUI.order !== undefined && { order: schemaUI.order }),
|
|
223
|
+
...(schemaUI.group && { group: schemaUI.group }),
|
|
224
|
+
...(schemaUI.component && { component: schemaUI.component as FieldComponent }),
|
|
225
|
+
...(schemaUI.hidden !== undefined && { hidden: schemaUI.hidden })
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Group resolved fields by their group ID
|
|
232
|
+
*/
|
|
233
|
+
export function groupFields(
|
|
234
|
+
fields: ResolvedField[],
|
|
235
|
+
_groups: ConfigManifest['groups'] = []
|
|
236
|
+
): Map<string | undefined, ResolvedField[]> {
|
|
237
|
+
const grouped = new Map<string | undefined, ResolvedField[]>();
|
|
238
|
+
|
|
239
|
+
for (const field of fields) {
|
|
240
|
+
const groupId = field.meta.ui.group;
|
|
241
|
+
if (!grouped.has(groupId)) {
|
|
242
|
+
grouped.set(groupId, []);
|
|
243
|
+
}
|
|
244
|
+
grouped.get(groupId)!.push(field);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return grouped;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Default Resolution (formerly in registry/resolution.ts)
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Get defaults from a Zod schema
|
|
254
|
+
*/
|
|
255
|
+
function getSchemaDefaults(schema: ZodTypeAny): Record<string, unknown> {
|
|
256
|
+
const result: Record<string, unknown> = {};
|
|
257
|
+
|
|
258
|
+
// Handle ZodObject
|
|
259
|
+
const zodObj = schema as ZodObject<Record<string, ZodTypeAny>>;
|
|
260
|
+
if (zodObj.shape && typeof zodObj.shape === 'object') {
|
|
261
|
+
for (const [key, fieldSchema] of Object.entries(zodObj.shape)) {
|
|
262
|
+
const def = (fieldSchema as { _def?: { defaultValue?: unknown } })._def;
|
|
263
|
+
if (def?.defaultValue !== undefined) {
|
|
264
|
+
result[key] =
|
|
265
|
+
typeof def.defaultValue === 'function'
|
|
266
|
+
? (def.defaultValue as () => unknown)()
|
|
267
|
+
: def.defaultValue;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Get nested value from object using dot notation
|
|
277
|
+
*/
|
|
278
|
+
function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
|
|
279
|
+
const parts = path.split('.');
|
|
280
|
+
let current: unknown = obj;
|
|
281
|
+
for (const part of parts) {
|
|
282
|
+
if (current == null || typeof current !== 'object') {
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
current = (current as Record<string, unknown>)[part];
|
|
286
|
+
}
|
|
287
|
+
return current;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Set nested value in object using dot notation
|
|
292
|
+
*/
|
|
293
|
+
function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {
|
|
294
|
+
const parts = path.split('.');
|
|
295
|
+
let current = obj;
|
|
296
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
297
|
+
const part = parts[i];
|
|
298
|
+
if (!(part in current) || typeof current[part] !== 'object') {
|
|
299
|
+
current[part] = {};
|
|
300
|
+
}
|
|
301
|
+
current = current[part] as Record<string, unknown>;
|
|
302
|
+
}
|
|
303
|
+
current[parts[parts.length - 1]] = value;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Resolve default value for a single field with full context
|
|
308
|
+
*/
|
|
309
|
+
export function resolveFieldDefault(
|
|
310
|
+
_fieldPath: string,
|
|
311
|
+
fieldMeta: ConfigFieldMeta,
|
|
312
|
+
schemaDefault: unknown,
|
|
313
|
+
ctx: ConfigContext
|
|
314
|
+
): unknown {
|
|
315
|
+
const defaults = fieldMeta.defaults;
|
|
316
|
+
|
|
317
|
+
if (!defaults) {
|
|
318
|
+
return schemaDefault;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Check for custom resolver
|
|
322
|
+
if (defaults.resolver) {
|
|
323
|
+
return defaults.resolver(ctx);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Check hardware-specific default
|
|
327
|
+
if (defaults.byHardware?.[ctx.hardware] !== undefined) {
|
|
328
|
+
return defaults.byHardware[ctx.hardware];
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Check environment-specific default
|
|
332
|
+
if (defaults.byEnvironment?.[ctx.environment] !== undefined) {
|
|
333
|
+
return defaults.byEnvironment[ctx.environment];
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Check surface-specific default
|
|
337
|
+
if (defaults.bySurface?.[ctx.surface] !== undefined) {
|
|
338
|
+
return defaults.bySurface[ctx.surface];
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Use base default
|
|
342
|
+
if (defaults.base !== undefined) {
|
|
343
|
+
return defaults.base;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Fall back to schema default
|
|
347
|
+
return schemaDefault;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Resolve default values for a manifest based on context
|
|
352
|
+
*/
|
|
353
|
+
export function resolveDefaults<T extends z.ZodTypeAny>(
|
|
354
|
+
manifest: ConfigManifest<T>,
|
|
355
|
+
ctx: ConfigContext
|
|
356
|
+
): z.infer<T> {
|
|
357
|
+
const result: Record<string, unknown> = {};
|
|
358
|
+
|
|
359
|
+
// Get defaults from schema
|
|
360
|
+
const schemaDefaults = getSchemaDefaults(manifest.schema);
|
|
361
|
+
|
|
362
|
+
// Merge with field-specific defaults
|
|
363
|
+
for (const [fieldPath, fieldMeta] of Object.entries(manifest.fields)) {
|
|
364
|
+
const schemaDefault = getNestedValue(schemaDefaults, fieldPath);
|
|
365
|
+
const resolvedDefault = resolveFieldDefault(fieldPath, fieldMeta, schemaDefault, ctx);
|
|
366
|
+
|
|
367
|
+
if (resolvedDefault !== undefined) {
|
|
368
|
+
setNestedValue(result, fieldPath, resolvedDefault);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Merge schema defaults for fields without explicit metadata
|
|
373
|
+
for (const [key, value] of Object.entries(schemaDefaults)) {
|
|
374
|
+
if (!(key in result) && value !== undefined) {
|
|
375
|
+
result[key] = value;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return result as z.infer<T>;
|
|
380
|
+
}
|