@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,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field Grouping
|
|
3
|
+
*
|
|
4
|
+
* Organize fields into groups for UI rendering
|
|
5
|
+
*/
|
|
6
|
+
import type { ConfigManifest, ConfigFieldGroup, ConfigContext } from '../../manifest/types.ts';
|
|
7
|
+
import type { ResolvedField, ResolvedGroup } from './types.ts';
|
|
8
|
+
import { evaluateRule } from './visibility.ts';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Resolve groups with their fields and visibility
|
|
12
|
+
*/
|
|
13
|
+
export function resolveGroups(
|
|
14
|
+
manifest: ConfigManifest,
|
|
15
|
+
fields: ResolvedField[],
|
|
16
|
+
values: Record<string, unknown>,
|
|
17
|
+
context: ConfigContext
|
|
18
|
+
): ResolvedGroup[] {
|
|
19
|
+
const groups = manifest.groups || [];
|
|
20
|
+
const fieldsByGroup = new Map<string | undefined, ResolvedField[]>();
|
|
21
|
+
|
|
22
|
+
// Group fields by group ID
|
|
23
|
+
for (const field of fields) {
|
|
24
|
+
const groupId = field.meta.ui.group;
|
|
25
|
+
if (!fieldsByGroup.has(groupId)) {
|
|
26
|
+
fieldsByGroup.set(groupId, []);
|
|
27
|
+
}
|
|
28
|
+
fieldsByGroup.get(groupId)!.push(field);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const resolved: ResolvedGroup[] = [];
|
|
32
|
+
|
|
33
|
+
// Process defined groups first (in order)
|
|
34
|
+
const sortedGroups = [...groups].sort((a, b) => (a.order ?? 999) - (b.order ?? 999));
|
|
35
|
+
|
|
36
|
+
for (const group of sortedGroups) {
|
|
37
|
+
const groupFields = fieldsByGroup.get(group.id) || [];
|
|
38
|
+
|
|
39
|
+
// Only include groups that have visible fields
|
|
40
|
+
const visibleFields = groupFields.filter((f) => f.visible);
|
|
41
|
+
if (visibleFields.length === 0) continue;
|
|
42
|
+
|
|
43
|
+
const visible = evaluateRule(group.visibleWhen, values, context);
|
|
44
|
+
|
|
45
|
+
resolved.push({
|
|
46
|
+
group,
|
|
47
|
+
fields: visibleFields,
|
|
48
|
+
visible
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Remove processed fields
|
|
52
|
+
fieldsByGroup.delete(group.id);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Add ungrouped fields (no group ID)
|
|
56
|
+
const ungroupedFields = fieldsByGroup.get(undefined) || [];
|
|
57
|
+
if (ungroupedFields.length > 0) {
|
|
58
|
+
const visibleUngrouped = ungroupedFields.filter((f) => f.visible);
|
|
59
|
+
if (visibleUngrouped.length > 0) {
|
|
60
|
+
resolved.push({
|
|
61
|
+
group: {
|
|
62
|
+
id: '_ungrouped',
|
|
63
|
+
label: 'Other Settings',
|
|
64
|
+
order: 9999
|
|
65
|
+
},
|
|
66
|
+
fields: visibleUngrouped,
|
|
67
|
+
visible: true
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return resolved;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Get fields for a specific group
|
|
77
|
+
*/
|
|
78
|
+
export function getGroupFields(groupId: string, fields: ResolvedField[]): ResolvedField[] {
|
|
79
|
+
return fields.filter((f) => f.meta.ui.group === groupId);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Check if a group should be collapsed by default
|
|
84
|
+
*/
|
|
85
|
+
export function isGroupCollapsed(
|
|
86
|
+
group: ConfigFieldGroup,
|
|
87
|
+
userPreferences?: Record<string, boolean>
|
|
88
|
+
): boolean {
|
|
89
|
+
// Check user preference first
|
|
90
|
+
if (userPreferences && group.id in userPreferences) {
|
|
91
|
+
return userPreferences[group.id];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Fall back to group default
|
|
95
|
+
return group.defaultCollapsed ?? false;
|
|
96
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
export type {
|
|
3
|
+
RenderContext,
|
|
4
|
+
ComponentOverride,
|
|
5
|
+
FormRenderOptions,
|
|
6
|
+
ResolvedField,
|
|
7
|
+
ResolvedGroup,
|
|
8
|
+
FormState,
|
|
9
|
+
FormActions
|
|
10
|
+
} from './types.ts';
|
|
11
|
+
export {
|
|
12
|
+
inferFieldComponent,
|
|
13
|
+
getFieldDefault,
|
|
14
|
+
resolveFields,
|
|
15
|
+
groupFields,
|
|
16
|
+
resolveFieldDefault,
|
|
17
|
+
resolveDefaults
|
|
18
|
+
} from './field-resolver.ts';
|
|
19
|
+
export type { FieldValidationResult, FormValidationResult } from './validation.ts';
|
|
20
|
+
export {
|
|
21
|
+
validateField,
|
|
22
|
+
validateForm,
|
|
23
|
+
getFieldSchema
|
|
24
|
+
} from './validation.ts';
|
|
25
|
+
export {
|
|
26
|
+
evaluateRule,
|
|
27
|
+
isFieldVisible,
|
|
28
|
+
isFieldDisabled,
|
|
29
|
+
isFieldRequired
|
|
30
|
+
} from './visibility.ts';
|
|
31
|
+
export {
|
|
32
|
+
resolveGroups,
|
|
33
|
+
getGroupFields,
|
|
34
|
+
isGroupCollapsed
|
|
35
|
+
} from './groups.ts';
|
|
36
|
+
export {
|
|
37
|
+
getNestedValue,
|
|
38
|
+
setNestedValue,
|
|
39
|
+
buildNestedObject,
|
|
40
|
+
flattenNestedObject
|
|
41
|
+
} from './nested-utils.ts';
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nested Path Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helpers for working with dot-notation paths in nested objects
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get a value at a dot-notation path from an object
|
|
9
|
+
* Supports both flat keys (e.g., obj['configuration.apiKey'])
|
|
10
|
+
* and nested objects (e.g., obj.configuration.apiKey)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* getNestedValue({ a: { b: 1 } }, 'a.b') // => 1
|
|
14
|
+
* getNestedValue({ 'a.b': 1 }, 'a.b') // => 1
|
|
15
|
+
*/
|
|
16
|
+
export function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
|
|
17
|
+
// First try direct key lookup (for flat form values)
|
|
18
|
+
if (path in obj) {
|
|
19
|
+
return obj[path];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Then try dot-notation path lookup (for nested objects)
|
|
23
|
+
const parts = path.split('.');
|
|
24
|
+
let current: unknown = obj;
|
|
25
|
+
for (const part of parts) {
|
|
26
|
+
if (current == null || typeof current !== 'object') {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
current = (current as Record<string, unknown>)[part];
|
|
30
|
+
}
|
|
31
|
+
return current;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Set a value at a dot-notation path in an object
|
|
36
|
+
* Creates nested objects as needed
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* setNestedValue({}, 'a.b.c', 1) // => { a: { b: { c: 1 } } }
|
|
40
|
+
*/
|
|
41
|
+
export function setNestedValue(
|
|
42
|
+
obj: Record<string, unknown>,
|
|
43
|
+
path: string,
|
|
44
|
+
value: unknown
|
|
45
|
+
): Record<string, unknown> {
|
|
46
|
+
const parts = path.split('.');
|
|
47
|
+
|
|
48
|
+
if (parts.length === 1) {
|
|
49
|
+
// Simple key, just set it
|
|
50
|
+
obj[path] = value;
|
|
51
|
+
return obj;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Navigate/create nested structure
|
|
55
|
+
let current: Record<string, unknown> = obj;
|
|
56
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
57
|
+
const part = parts[i];
|
|
58
|
+
if (!(part in current) || typeof current[part] !== 'object' || current[part] === null) {
|
|
59
|
+
current[part] = {};
|
|
60
|
+
}
|
|
61
|
+
current = current[part] as Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Set the final value
|
|
65
|
+
current[parts[parts.length - 1]] = value;
|
|
66
|
+
return obj;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Build a nested object from flat dot-notation keys
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* buildNestedObject({ 'a.b': 1, 'a.c': 2, d: 3 })
|
|
74
|
+
* // => { a: { b: 1, c: 2 }, d: 3 }
|
|
75
|
+
*/
|
|
76
|
+
export function buildNestedObject(flat: Record<string, unknown>): Record<string, unknown> {
|
|
77
|
+
const result: Record<string, unknown> = {};
|
|
78
|
+
|
|
79
|
+
for (const [key, value] of Object.entries(flat)) {
|
|
80
|
+
if (key.includes('.')) {
|
|
81
|
+
setNestedValue(result, key, value);
|
|
82
|
+
} else {
|
|
83
|
+
result[key] = value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Flatten a nested object to dot-notation keys
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* flattenNestedObject({ a: { b: 1, c: 2 }, d: 3 })
|
|
95
|
+
* // => { 'a.b': 1, 'a.c': 2, d: 3 }
|
|
96
|
+
*/
|
|
97
|
+
export function flattenNestedObject(
|
|
98
|
+
nested: Record<string, unknown>,
|
|
99
|
+
prefix = ''
|
|
100
|
+
): Record<string, unknown> {
|
|
101
|
+
const result: Record<string, unknown> = {};
|
|
102
|
+
|
|
103
|
+
for (const [key, value] of Object.entries(nested)) {
|
|
104
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
105
|
+
|
|
106
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
107
|
+
// Recurse into nested objects
|
|
108
|
+
Object.assign(result, flattenNestedObject(value as Record<string, unknown>, fullKey));
|
|
109
|
+
} else {
|
|
110
|
+
result[fullKey] = value;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form Renderer Core Types
|
|
3
|
+
*/
|
|
4
|
+
import type { ZodTypeAny } from 'zod/v4';
|
|
5
|
+
import type {
|
|
6
|
+
ConfigManifest,
|
|
7
|
+
ConfigFieldMeta,
|
|
8
|
+
ConfigFieldGroup,
|
|
9
|
+
ConfigContext,
|
|
10
|
+
FieldComponent
|
|
11
|
+
} from '../../manifest/types.ts';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Context available during form rendering
|
|
15
|
+
*/
|
|
16
|
+
export interface RenderContext {
|
|
17
|
+
manifest: ConfigManifest;
|
|
18
|
+
values: Record<string, unknown>;
|
|
19
|
+
errors: Record<string, string | undefined>;
|
|
20
|
+
touched: Record<string, boolean>;
|
|
21
|
+
context: ConfigContext;
|
|
22
|
+
onChange: (field: string, value: unknown) => void;
|
|
23
|
+
onBlur: (field: string) => void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Override for a specific field's rendering
|
|
28
|
+
*/
|
|
29
|
+
export interface ComponentOverride {
|
|
30
|
+
/** Replace with custom component */
|
|
31
|
+
component?: unknown; // Component type varies by surface
|
|
32
|
+
/** Additional props to pass */
|
|
33
|
+
props?: Record<string, unknown>;
|
|
34
|
+
/** Custom render function */
|
|
35
|
+
render?: (field: ConfigFieldMeta, defaultRender: () => unknown) => unknown;
|
|
36
|
+
/** Hide this field entirely */
|
|
37
|
+
hidden?: boolean;
|
|
38
|
+
/** Render in a named slot instead of inline */
|
|
39
|
+
slot?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Options for form rendering
|
|
44
|
+
*/
|
|
45
|
+
export interface FormRenderOptions {
|
|
46
|
+
/** Current field values */
|
|
47
|
+
values: Record<string, unknown>;
|
|
48
|
+
/** Field change handler */
|
|
49
|
+
onChange: (field: string, value: unknown) => void;
|
|
50
|
+
/** Form submission handler */
|
|
51
|
+
onSubmit: () => void;
|
|
52
|
+
/** Field-level overrides */
|
|
53
|
+
overrides?: Record<string, ComponentOverride>;
|
|
54
|
+
/** Form layout */
|
|
55
|
+
layout?: 'vertical' | 'horizontal' | 'grid';
|
|
56
|
+
/** Runtime context */
|
|
57
|
+
context?: Partial<ConfigContext>;
|
|
58
|
+
/** Whether form is disabled */
|
|
59
|
+
disabled?: boolean;
|
|
60
|
+
/** Whether form is loading */
|
|
61
|
+
loading?: boolean;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Result of field resolution
|
|
66
|
+
*/
|
|
67
|
+
export interface ResolvedField {
|
|
68
|
+
key: string;
|
|
69
|
+
meta: ConfigFieldMeta;
|
|
70
|
+
component: FieldComponent;
|
|
71
|
+
value: unknown;
|
|
72
|
+
error?: string;
|
|
73
|
+
visible: boolean;
|
|
74
|
+
disabled: boolean;
|
|
75
|
+
required: boolean;
|
|
76
|
+
override?: ComponentOverride;
|
|
77
|
+
/** Field's Zod schema (if available) for reference metadata extraction */
|
|
78
|
+
fieldSchema?: ZodTypeAny;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Result of group resolution
|
|
83
|
+
*/
|
|
84
|
+
export interface ResolvedGroup {
|
|
85
|
+
group: ConfigFieldGroup;
|
|
86
|
+
fields: ResolvedField[];
|
|
87
|
+
visible: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Form state returned by form hooks/stores
|
|
92
|
+
*/
|
|
93
|
+
export interface FormState<T = Record<string, unknown>> {
|
|
94
|
+
values: T;
|
|
95
|
+
errors: Record<string, string | undefined>;
|
|
96
|
+
touched: Record<string, boolean>;
|
|
97
|
+
isDirty: boolean;
|
|
98
|
+
isValid: boolean;
|
|
99
|
+
isSubmitting: boolean;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Form actions returned by form hooks/stores
|
|
104
|
+
*/
|
|
105
|
+
export interface FormActions<T = Record<string, unknown>> {
|
|
106
|
+
setValue: (field: keyof T, value: unknown) => void;
|
|
107
|
+
setValues: (values: Partial<T>) => void;
|
|
108
|
+
/** Apply values and update dirty baseline — form stays clean after call */
|
|
109
|
+
resetTo: (values: Partial<T>) => void;
|
|
110
|
+
setError: (field: keyof T, error: string | undefined) => void;
|
|
111
|
+
setTouched: (field: keyof T, touched: boolean) => void;
|
|
112
|
+
reset: () => void;
|
|
113
|
+
submit: () => Promise<void>;
|
|
114
|
+
validate: () => Promise<boolean>;
|
|
115
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form Validation
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation using manifest schemas
|
|
5
|
+
*/
|
|
6
|
+
import type { z } from 'zod/v4';
|
|
7
|
+
import type { ConfigManifest } from '../../manifest/types.ts';
|
|
8
|
+
|
|
9
|
+
import type { FieldValidationResult, FormValidationResult } from './schemas/validation.schema.ts';
|
|
10
|
+
|
|
11
|
+
export type { FieldValidationResult, FormValidationResult } from './schemas/validation.schema.ts';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Type guard to check if a schema is a ZodObject with a shape property
|
|
15
|
+
*/
|
|
16
|
+
function isZodObjectWithShape(schema: z.ZodTypeAny): schema is z.ZodObject<z.ZodRawShape> {
|
|
17
|
+
return (
|
|
18
|
+
schema !== null &&
|
|
19
|
+
typeof schema === 'object' &&
|
|
20
|
+
'shape' in schema &&
|
|
21
|
+
typeof schema.shape === 'object' &&
|
|
22
|
+
schema.shape !== null
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Get the shape from a ZodObject schema
|
|
28
|
+
*/
|
|
29
|
+
function getObjectShape(schema: z.ZodTypeAny): Record<string, z.ZodTypeAny> | undefined {
|
|
30
|
+
if (isZodObjectWithShape(schema)) {
|
|
31
|
+
return schema.shape as Record<string, z.ZodTypeAny>;
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get schema at a dot-notation path
|
|
38
|
+
*/
|
|
39
|
+
function getSchemaAtPath(rootSchema: z.ZodTypeAny, path: string): z.ZodTypeAny | undefined {
|
|
40
|
+
const parts = path.split('.');
|
|
41
|
+
let current: z.ZodTypeAny | undefined = rootSchema;
|
|
42
|
+
|
|
43
|
+
for (const part of parts) {
|
|
44
|
+
if (!current) return undefined;
|
|
45
|
+
|
|
46
|
+
const shape = getObjectShape(current);
|
|
47
|
+
if (shape) {
|
|
48
|
+
current = shape[part];
|
|
49
|
+
} else {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return current;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Validate a single field value against its schema
|
|
59
|
+
* Supports dot-notation paths for nested fields
|
|
60
|
+
*/
|
|
61
|
+
export function validateField(
|
|
62
|
+
manifest: ConfigManifest,
|
|
63
|
+
fieldKey: string,
|
|
64
|
+
value: unknown
|
|
65
|
+
): FieldValidationResult {
|
|
66
|
+
try {
|
|
67
|
+
const schema = manifest.schema;
|
|
68
|
+
|
|
69
|
+
// Handle nested paths (e.g., 'configuration.apiKey')
|
|
70
|
+
const fieldSchema = fieldKey.includes('.')
|
|
71
|
+
? getSchemaAtPath(schema, fieldKey)
|
|
72
|
+
: getTopLevelFieldSchema(schema, fieldKey);
|
|
73
|
+
|
|
74
|
+
if (fieldSchema) {
|
|
75
|
+
const result = fieldSchema.safeParse(value);
|
|
76
|
+
if (!result.success) {
|
|
77
|
+
const firstError = result.error.issues[0];
|
|
78
|
+
return { valid: false, error: firstError?.message || 'Invalid value' };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return { valid: true };
|
|
83
|
+
} catch {
|
|
84
|
+
return { valid: true }; // If we can't validate, assume valid
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Get schema for a top-level field
|
|
90
|
+
*/
|
|
91
|
+
function getTopLevelFieldSchema(schema: z.ZodTypeAny, fieldKey: string): z.ZodTypeAny | undefined {
|
|
92
|
+
const shape = getObjectShape(schema);
|
|
93
|
+
if (shape) {
|
|
94
|
+
return shape[fieldKey];
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Validate all form values against manifest schema
|
|
101
|
+
*/
|
|
102
|
+
export function validateForm(
|
|
103
|
+
manifest: ConfigManifest,
|
|
104
|
+
values: Record<string, unknown>
|
|
105
|
+
): FormValidationResult {
|
|
106
|
+
const errors: Record<string, string | undefined> = {};
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
const result = manifest.schema.safeParse(values);
|
|
110
|
+
|
|
111
|
+
if (!result.success) {
|
|
112
|
+
for (const issue of result.error.issues) {
|
|
113
|
+
const path = issue.path.join('.');
|
|
114
|
+
errors[path] = issue.message;
|
|
115
|
+
}
|
|
116
|
+
return { valid: false, errors };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return { valid: true, errors };
|
|
120
|
+
} catch {
|
|
121
|
+
return { valid: true, errors };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Get validation schema for a field (for client-side use)
|
|
127
|
+
*/
|
|
128
|
+
export function getFieldSchema(
|
|
129
|
+
manifest: ConfigManifest,
|
|
130
|
+
fieldKey: string
|
|
131
|
+
): z.ZodTypeAny | undefined {
|
|
132
|
+
const shape = getObjectShape(manifest.schema);
|
|
133
|
+
if (shape) {
|
|
134
|
+
return shape[fieldKey];
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visibility and Rule Evaluation
|
|
3
|
+
*
|
|
4
|
+
* Evaluates ConfigRules to determine field visibility, disabled state, etc.
|
|
5
|
+
*/
|
|
6
|
+
import type {
|
|
7
|
+
ConfigRule,
|
|
8
|
+
ConfigFieldRule,
|
|
9
|
+
ConfigContextRule,
|
|
10
|
+
ConfigAndRule,
|
|
11
|
+
ConfigOrRule,
|
|
12
|
+
ConfigNotRule,
|
|
13
|
+
ConfigFunctionRule,
|
|
14
|
+
ConfigContext
|
|
15
|
+
} from '../../manifest/types.ts';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Evaluate a configuration rule
|
|
19
|
+
*/
|
|
20
|
+
export function evaluateRule(
|
|
21
|
+
rule: ConfigRule | undefined,
|
|
22
|
+
values: Record<string, unknown>,
|
|
23
|
+
context: ConfigContext
|
|
24
|
+
): boolean {
|
|
25
|
+
if (!rule) return true;
|
|
26
|
+
|
|
27
|
+
// Field-based rule
|
|
28
|
+
if ('field' in rule) {
|
|
29
|
+
return evaluateFieldRule(rule as ConfigFieldRule, values);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Context-based rule
|
|
33
|
+
if ('context' in rule) {
|
|
34
|
+
return evaluateContextRule(rule as ConfigContextRule, context);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// AND rule
|
|
38
|
+
if ('and' in rule) {
|
|
39
|
+
return (rule as ConfigAndRule).and.every((r) => evaluateRule(r, values, context));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// OR rule
|
|
43
|
+
if ('or' in rule) {
|
|
44
|
+
return (rule as ConfigOrRule).or.some((r) => evaluateRule(r, values, context));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// NOT rule
|
|
48
|
+
if ('not' in rule) {
|
|
49
|
+
return !evaluateRule((rule as ConfigNotRule).not, values, context);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Function rule
|
|
53
|
+
if ('fn' in rule) {
|
|
54
|
+
return (rule as ConfigFunctionRule).fn(context, values);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get a value at a dot-notation path from an object
|
|
62
|
+
*/
|
|
63
|
+
function getValueAtPath(obj: Record<string, unknown>, path: string): unknown {
|
|
64
|
+
// First try direct key lookup (for flat form values)
|
|
65
|
+
if (path in obj) {
|
|
66
|
+
return obj[path];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Then try dot-notation path lookup (for nested objects)
|
|
70
|
+
const parts = path.split('.');
|
|
71
|
+
let current: unknown = obj;
|
|
72
|
+
for (const part of parts) {
|
|
73
|
+
if (current == null || typeof current !== 'object') {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
current = (current as Record<string, unknown>)[part];
|
|
77
|
+
}
|
|
78
|
+
return current;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Evaluate a field-based rule
|
|
83
|
+
*/
|
|
84
|
+
function evaluateFieldRule(rule: ConfigFieldRule, values: Record<string, unknown>): boolean {
|
|
85
|
+
const fieldValue = getValueAtPath(values, rule.field);
|
|
86
|
+
|
|
87
|
+
switch (rule.operator) {
|
|
88
|
+
case 'equals':
|
|
89
|
+
return fieldValue === rule.value;
|
|
90
|
+
case 'notEquals':
|
|
91
|
+
return fieldValue !== rule.value;
|
|
92
|
+
case 'in':
|
|
93
|
+
return Array.isArray(rule.value) && rule.value.includes(fieldValue);
|
|
94
|
+
case 'notIn':
|
|
95
|
+
return Array.isArray(rule.value) && !rule.value.includes(fieldValue);
|
|
96
|
+
case 'exists':
|
|
97
|
+
return fieldValue !== undefined && fieldValue !== null;
|
|
98
|
+
case 'isEmpty':
|
|
99
|
+
return fieldValue === undefined || fieldValue === null || fieldValue === '';
|
|
100
|
+
default:
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Evaluate a context-based rule
|
|
107
|
+
*/
|
|
108
|
+
function evaluateContextRule(rule: ConfigContextRule, context: ConfigContext): boolean {
|
|
109
|
+
let contextValue: unknown;
|
|
110
|
+
|
|
111
|
+
// Handle custom context paths
|
|
112
|
+
if (rule.context.startsWith('custom.')) {
|
|
113
|
+
const customKey = rule.context.slice(7);
|
|
114
|
+
contextValue = context.custom[customKey];
|
|
115
|
+
} else {
|
|
116
|
+
contextValue = context[rule.context as keyof Omit<ConfigContext, 'get' | 'custom'>];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
switch (rule.operator) {
|
|
120
|
+
case 'equals':
|
|
121
|
+
return contextValue === rule.value;
|
|
122
|
+
case 'notEquals':
|
|
123
|
+
return contextValue !== rule.value;
|
|
124
|
+
case 'in':
|
|
125
|
+
return Array.isArray(rule.value) && rule.value.includes(contextValue);
|
|
126
|
+
case 'notIn':
|
|
127
|
+
return Array.isArray(rule.value) && !rule.value.includes(contextValue);
|
|
128
|
+
case 'exists':
|
|
129
|
+
return contextValue !== undefined && contextValue !== null;
|
|
130
|
+
default:
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Check if a field should be visible
|
|
137
|
+
*/
|
|
138
|
+
export function isFieldVisible(
|
|
139
|
+
fieldMeta: { rules?: { visibleWhen?: ConfigRule } },
|
|
140
|
+
values: Record<string, unknown>,
|
|
141
|
+
context: ConfigContext
|
|
142
|
+
): boolean {
|
|
143
|
+
return evaluateRule(fieldMeta.rules?.visibleWhen, values, context);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Check if a field should be disabled
|
|
148
|
+
* Returns false if no disabledWhen rule is defined (field is enabled by default)
|
|
149
|
+
*/
|
|
150
|
+
export function isFieldDisabled(
|
|
151
|
+
fieldMeta: { rules?: { disabledWhen?: ConfigRule } },
|
|
152
|
+
values: Record<string, unknown>,
|
|
153
|
+
context: ConfigContext
|
|
154
|
+
): boolean {
|
|
155
|
+
// No rule = not disabled (enabled by default)
|
|
156
|
+
if (!fieldMeta.rules?.disabledWhen) return false;
|
|
157
|
+
return evaluateRule(fieldMeta.rules.disabledWhen, values, context);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Check if a field is required (beyond schema)
|
|
162
|
+
* Returns false if no requiredWhen rule is defined (not required by default)
|
|
163
|
+
*/
|
|
164
|
+
export function isFieldRequired(
|
|
165
|
+
fieldMeta: { rules?: { requiredWhen?: ConfigRule } },
|
|
166
|
+
values: Record<string, unknown>,
|
|
167
|
+
context: ConfigContext
|
|
168
|
+
): boolean {
|
|
169
|
+
// No rule = not required (optional by default)
|
|
170
|
+
if (!fieldMeta.rules?.requiredWhen) return false;
|
|
171
|
+
return evaluateRule(fieldMeta.rules.requiredWhen, values, context);
|
|
172
|
+
}
|