formspec 0.1.0-alpha.52 → 0.1.0-alpha.53

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.
@@ -132,6 +132,11 @@ export declare function buildFormSchemas<E extends readonly FormElement[]>(form:
132
132
  * @public
133
133
  */
134
134
  export declare interface BuildFormSchemasOptions extends GenerateJsonSchemaOptions, GenerateUiSchemaOptions {
135
+ /**
136
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
137
+ * existing callers produce no output.
138
+ */
139
+ readonly logger?: LoggerLike | undefined;
135
140
  }
136
141
 
137
142
  /**
@@ -723,6 +728,11 @@ export declare interface GenerateJsonSchemaOptions {
723
728
  readonly enumSerialization?: "enum" | "oneOf";
724
729
  /** Metadata resolution policy for chain DSL generation. */
725
730
  readonly metadata?: MetadataPolicyInput | undefined;
731
+ /**
732
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
733
+ * existing callers produce no output.
734
+ */
735
+ readonly logger?: LoggerLike | undefined;
726
736
  }
727
737
 
728
738
  /**
@@ -740,6 +750,11 @@ export declare function generateUiSchema<E extends readonly FormElement[]>(form:
740
750
  export declare interface GenerateUiSchemaOptions {
741
751
  /** Metadata resolution policy for chain DSL UI generation. */
742
752
  readonly metadata?: MetadataPolicyInput | undefined;
753
+ /**
754
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
755
+ * existing callers produce no output.
756
+ */
757
+ readonly logger?: LoggerLike | undefined;
743
758
  }
744
759
 
745
760
  /**
@@ -999,6 +1014,37 @@ export declare interface LabelElement {
999
1014
  readonly [k: string]: unknown;
1000
1015
  }
1001
1016
 
1017
+ /**
1018
+ * Minimal structured-logger contract used across FormSpec.
1019
+ *
1020
+ * Libraries accept a `LoggerLike` so callers can route diagnostics through
1021
+ * their own logger (e.g. pino in apps, the tsserver logger inside a TypeScript
1022
+ * language service plugin) without pulling a specific logger implementation
1023
+ * into published packages.
1024
+ *
1025
+ * The shape is a subset of pino's `Logger` and is trivially satisfiable by
1026
+ * most structured loggers.
1027
+ *
1028
+ * @public
1029
+ */
1030
+ export declare interface LoggerLike {
1031
+ /** Writes a record at the finest-grained verbosity. */
1032
+ trace(msg: string, ...args: unknown[]): void;
1033
+ /** Writes a diagnostic record used when investigating behaviour. */
1034
+ debug(msg: string, ...args: unknown[]): void;
1035
+ /** Writes an informational record about normal operation. */
1036
+ info(msg: string, ...args: unknown[]): void;
1037
+ /** Writes a record about a recoverable or unexpected condition. */
1038
+ warn(msg: string, ...args: unknown[]): void;
1039
+ /** Writes a record about a failure that prevented the requested work. */
1040
+ error(msg: string, ...args: unknown[]): void;
1041
+ /**
1042
+ * Returns a child logger that tags every subsequent record with the given
1043
+ * bindings (e.g. `{ stage: "ir" }`).
1044
+ */
1045
+ child(bindings: Record<string, unknown>): LoggerLike;
1046
+ }
1047
+
1002
1048
  /**
1003
1049
  * Logs validation issues to the console.
1004
1050
  *
@@ -1185,6 +1231,19 @@ export declare interface MetadataValueRequireExplicitPolicyInput {
1185
1231
  readonly pluralization?: MetadataPluralizationPolicyInput | undefined;
1186
1232
  }
1187
1233
 
1234
+ /**
1235
+ * A silent logger used as the default when no logger is injected.
1236
+ *
1237
+ * @remarks
1238
+ * All methods are no-ops, but **arguments are still evaluated** by the caller
1239
+ * before being passed in. Gate expensive argument construction yourself
1240
+ * (e.g. `if (log !== noopLogger) log.debug(expensiveFormat(x))`) when the
1241
+ * work would be significant.
1242
+ *
1243
+ * @public
1244
+ */
1245
+ export declare const noopLogger: LoggerLike;
1246
+
1188
1247
  /**
1189
1248
  * A numeric input field.
1190
1249
  *
@@ -1578,6 +1637,11 @@ export declare interface WriteSchemasOptions extends GenerateJsonSchemaOptions {
1578
1637
  readonly name?: string;
1579
1638
  /** Number of spaces for JSON indentation. Defaults to 2 */
1580
1639
  readonly indent?: number;
1640
+ /**
1641
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
1642
+ * existing callers produce no output.
1643
+ */
1644
+ readonly logger?: LoggerLike | undefined;
1581
1645
  }
1582
1646
 
1583
1647
  /**
@@ -132,6 +132,11 @@ export declare function buildFormSchemas<E extends readonly FormElement[]>(form:
132
132
  * @public
133
133
  */
134
134
  export declare interface BuildFormSchemasOptions extends GenerateJsonSchemaOptions, GenerateUiSchemaOptions {
135
+ /**
136
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
137
+ * existing callers produce no output.
138
+ */
139
+ readonly logger?: LoggerLike | undefined;
135
140
  }
136
141
 
137
142
  /**
@@ -723,6 +728,11 @@ export declare interface GenerateJsonSchemaOptions {
723
728
  readonly enumSerialization?: "enum" | "oneOf";
724
729
  /** Metadata resolution policy for chain DSL generation. */
725
730
  readonly metadata?: MetadataPolicyInput | undefined;
731
+ /**
732
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
733
+ * existing callers produce no output.
734
+ */
735
+ readonly logger?: LoggerLike | undefined;
726
736
  }
727
737
 
728
738
  /**
@@ -740,6 +750,11 @@ export declare function generateUiSchema<E extends readonly FormElement[]>(form:
740
750
  export declare interface GenerateUiSchemaOptions {
741
751
  /** Metadata resolution policy for chain DSL UI generation. */
742
752
  readonly metadata?: MetadataPolicyInput | undefined;
753
+ /**
754
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
755
+ * existing callers produce no output.
756
+ */
757
+ readonly logger?: LoggerLike | undefined;
743
758
  }
744
759
 
745
760
  /**
@@ -999,6 +1014,37 @@ export declare interface LabelElement {
999
1014
  readonly [k: string]: unknown;
1000
1015
  }
1001
1016
 
1017
+ /**
1018
+ * Minimal structured-logger contract used across FormSpec.
1019
+ *
1020
+ * Libraries accept a `LoggerLike` so callers can route diagnostics through
1021
+ * their own logger (e.g. pino in apps, the tsserver logger inside a TypeScript
1022
+ * language service plugin) without pulling a specific logger implementation
1023
+ * into published packages.
1024
+ *
1025
+ * The shape is a subset of pino's `Logger` and is trivially satisfiable by
1026
+ * most structured loggers.
1027
+ *
1028
+ * @public
1029
+ */
1030
+ export declare interface LoggerLike {
1031
+ /** Writes a record at the finest-grained verbosity. */
1032
+ trace(msg: string, ...args: unknown[]): void;
1033
+ /** Writes a diagnostic record used when investigating behaviour. */
1034
+ debug(msg: string, ...args: unknown[]): void;
1035
+ /** Writes an informational record about normal operation. */
1036
+ info(msg: string, ...args: unknown[]): void;
1037
+ /** Writes a record about a recoverable or unexpected condition. */
1038
+ warn(msg: string, ...args: unknown[]): void;
1039
+ /** Writes a record about a failure that prevented the requested work. */
1040
+ error(msg: string, ...args: unknown[]): void;
1041
+ /**
1042
+ * Returns a child logger that tags every subsequent record with the given
1043
+ * bindings (e.g. `{ stage: "ir" }`).
1044
+ */
1045
+ child(bindings: Record<string, unknown>): LoggerLike;
1046
+ }
1047
+
1002
1048
  /**
1003
1049
  * Logs validation issues to the console.
1004
1050
  *
@@ -1185,6 +1231,19 @@ export declare interface MetadataValueRequireExplicitPolicyInput {
1185
1231
  readonly pluralization?: MetadataPluralizationPolicyInput | undefined;
1186
1232
  }
1187
1233
 
1234
+ /**
1235
+ * A silent logger used as the default when no logger is injected.
1236
+ *
1237
+ * @remarks
1238
+ * All methods are no-ops, but **arguments are still evaluated** by the caller
1239
+ * before being passed in. Gate expensive argument construction yourself
1240
+ * (e.g. `if (log !== noopLogger) log.debug(expensiveFormat(x))`) when the
1241
+ * work would be significant.
1242
+ *
1243
+ * @public
1244
+ */
1245
+ export declare const noopLogger: LoggerLike;
1246
+
1188
1247
  /**
1189
1248
  * A numeric input field.
1190
1249
  *
@@ -1578,6 +1637,11 @@ export declare interface WriteSchemasOptions extends GenerateJsonSchemaOptions {
1578
1637
  readonly name?: string;
1579
1638
  /** Number of spaces for JSON indentation. Defaults to 2 */
1580
1639
  readonly indent?: number;
1640
+ /**
1641
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
1642
+ * existing callers produce no output.
1643
+ */
1644
+ readonly logger?: LoggerLike | undefined;
1581
1645
  }
1582
1646
 
1583
1647
  /**
@@ -132,6 +132,11 @@ export declare function buildFormSchemas<E extends readonly FormElement[]>(form:
132
132
  * @public
133
133
  */
134
134
  export declare interface BuildFormSchemasOptions extends GenerateJsonSchemaOptions, GenerateUiSchemaOptions {
135
+ /**
136
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
137
+ * existing callers produce no output.
138
+ */
139
+ readonly logger?: LoggerLike | undefined;
135
140
  }
136
141
 
137
142
  /**
@@ -723,6 +728,11 @@ export declare interface GenerateJsonSchemaOptions {
723
728
  readonly enumSerialization?: "enum" | "oneOf";
724
729
  /** Metadata resolution policy for chain DSL generation. */
725
730
  readonly metadata?: MetadataPolicyInput | undefined;
731
+ /**
732
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
733
+ * existing callers produce no output.
734
+ */
735
+ readonly logger?: LoggerLike | undefined;
726
736
  }
727
737
 
728
738
  /**
@@ -740,6 +750,11 @@ export declare function generateUiSchema<E extends readonly FormElement[]>(form:
740
750
  export declare interface GenerateUiSchemaOptions {
741
751
  /** Metadata resolution policy for chain DSL UI generation. */
742
752
  readonly metadata?: MetadataPolicyInput | undefined;
753
+ /**
754
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
755
+ * existing callers produce no output.
756
+ */
757
+ readonly logger?: LoggerLike | undefined;
743
758
  }
744
759
 
745
760
  /**
@@ -999,6 +1014,37 @@ export declare interface LabelElement {
999
1014
  readonly [k: string]: unknown;
1000
1015
  }
1001
1016
 
1017
+ /**
1018
+ * Minimal structured-logger contract used across FormSpec.
1019
+ *
1020
+ * Libraries accept a `LoggerLike` so callers can route diagnostics through
1021
+ * their own logger (e.g. pino in apps, the tsserver logger inside a TypeScript
1022
+ * language service plugin) without pulling a specific logger implementation
1023
+ * into published packages.
1024
+ *
1025
+ * The shape is a subset of pino's `Logger` and is trivially satisfiable by
1026
+ * most structured loggers.
1027
+ *
1028
+ * @public
1029
+ */
1030
+ export declare interface LoggerLike {
1031
+ /** Writes a record at the finest-grained verbosity. */
1032
+ trace(msg: string, ...args: unknown[]): void;
1033
+ /** Writes a diagnostic record used when investigating behaviour. */
1034
+ debug(msg: string, ...args: unknown[]): void;
1035
+ /** Writes an informational record about normal operation. */
1036
+ info(msg: string, ...args: unknown[]): void;
1037
+ /** Writes a record about a recoverable or unexpected condition. */
1038
+ warn(msg: string, ...args: unknown[]): void;
1039
+ /** Writes a record about a failure that prevented the requested work. */
1040
+ error(msg: string, ...args: unknown[]): void;
1041
+ /**
1042
+ * Returns a child logger that tags every subsequent record with the given
1043
+ * bindings (e.g. `{ stage: "ir" }`).
1044
+ */
1045
+ child(bindings: Record<string, unknown>): LoggerLike;
1046
+ }
1047
+
1002
1048
  /**
1003
1049
  * Logs validation issues to the console.
1004
1050
  *
@@ -1185,6 +1231,19 @@ export declare interface MetadataValueRequireExplicitPolicyInput {
1185
1231
  readonly pluralization?: MetadataPluralizationPolicyInput | undefined;
1186
1232
  }
1187
1233
 
1234
+ /**
1235
+ * A silent logger used as the default when no logger is injected.
1236
+ *
1237
+ * @remarks
1238
+ * All methods are no-ops, but **arguments are still evaluated** by the caller
1239
+ * before being passed in. Gate expensive argument construction yourself
1240
+ * (e.g. `if (log !== noopLogger) log.debug(expensiveFormat(x))`) when the
1241
+ * work would be significant.
1242
+ *
1243
+ * @public
1244
+ */
1245
+ export declare const noopLogger: LoggerLike;
1246
+
1188
1247
  /**
1189
1248
  * A numeric input field.
1190
1249
  *
@@ -1578,6 +1637,11 @@ export declare interface WriteSchemasOptions extends GenerateJsonSchemaOptions {
1578
1637
  readonly name?: string;
1579
1638
  /** Number of spaces for JSON indentation. Defaults to 2 */
1580
1639
  readonly indent?: number;
1640
+ /**
1641
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
1642
+ * existing callers produce no output.
1643
+ */
1644
+ readonly logger?: LoggerLike | undefined;
1581
1645
  }
1582
1646
 
1583
1647
  /**
@@ -132,6 +132,11 @@ export declare function buildFormSchemas<E extends readonly FormElement[]>(form:
132
132
  * @public
133
133
  */
134
134
  export declare interface BuildFormSchemasOptions extends GenerateJsonSchemaOptions, GenerateUiSchemaOptions {
135
+ /**
136
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
137
+ * existing callers produce no output.
138
+ */
139
+ readonly logger?: LoggerLike | undefined;
135
140
  }
136
141
 
137
142
  /**
@@ -723,6 +728,11 @@ export declare interface GenerateJsonSchemaOptions {
723
728
  readonly enumSerialization?: "enum" | "oneOf";
724
729
  /** Metadata resolution policy for chain DSL generation. */
725
730
  readonly metadata?: MetadataPolicyInput | undefined;
731
+ /**
732
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
733
+ * existing callers produce no output.
734
+ */
735
+ readonly logger?: LoggerLike | undefined;
726
736
  }
727
737
 
728
738
  /**
@@ -740,6 +750,11 @@ export declare function generateUiSchema<E extends readonly FormElement[]>(form:
740
750
  export declare interface GenerateUiSchemaOptions {
741
751
  /** Metadata resolution policy for chain DSL UI generation. */
742
752
  readonly metadata?: MetadataPolicyInput | undefined;
753
+ /**
754
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
755
+ * existing callers produce no output.
756
+ */
757
+ readonly logger?: LoggerLike | undefined;
743
758
  }
744
759
 
745
760
  /**
@@ -999,6 +1014,37 @@ export declare interface LabelElement {
999
1014
  readonly [k: string]: unknown;
1000
1015
  }
1001
1016
 
1017
+ /**
1018
+ * Minimal structured-logger contract used across FormSpec.
1019
+ *
1020
+ * Libraries accept a `LoggerLike` so callers can route diagnostics through
1021
+ * their own logger (e.g. pino in apps, the tsserver logger inside a TypeScript
1022
+ * language service plugin) without pulling a specific logger implementation
1023
+ * into published packages.
1024
+ *
1025
+ * The shape is a subset of pino's `Logger` and is trivially satisfiable by
1026
+ * most structured loggers.
1027
+ *
1028
+ * @public
1029
+ */
1030
+ export declare interface LoggerLike {
1031
+ /** Writes a record at the finest-grained verbosity. */
1032
+ trace(msg: string, ...args: unknown[]): void;
1033
+ /** Writes a diagnostic record used when investigating behaviour. */
1034
+ debug(msg: string, ...args: unknown[]): void;
1035
+ /** Writes an informational record about normal operation. */
1036
+ info(msg: string, ...args: unknown[]): void;
1037
+ /** Writes a record about a recoverable or unexpected condition. */
1038
+ warn(msg: string, ...args: unknown[]): void;
1039
+ /** Writes a record about a failure that prevented the requested work. */
1040
+ error(msg: string, ...args: unknown[]): void;
1041
+ /**
1042
+ * Returns a child logger that tags every subsequent record with the given
1043
+ * bindings (e.g. `{ stage: "ir" }`).
1044
+ */
1045
+ child(bindings: Record<string, unknown>): LoggerLike;
1046
+ }
1047
+
1002
1048
  /**
1003
1049
  * Logs validation issues to the console.
1004
1050
  *
@@ -1185,6 +1231,19 @@ export declare interface MetadataValueRequireExplicitPolicyInput {
1185
1231
  readonly pluralization?: MetadataPluralizationPolicyInput | undefined;
1186
1232
  }
1187
1233
 
1234
+ /**
1235
+ * A silent logger used as the default when no logger is injected.
1236
+ *
1237
+ * @remarks
1238
+ * All methods are no-ops, but **arguments are still evaluated** by the caller
1239
+ * before being passed in. Gate expensive argument construction yourself
1240
+ * (e.g. `if (log !== noopLogger) log.debug(expensiveFormat(x))`) when the
1241
+ * work would be significant.
1242
+ *
1243
+ * @public
1244
+ */
1245
+ export declare const noopLogger: LoggerLike;
1246
+
1188
1247
  /**
1189
1248
  * A numeric input field.
1190
1249
  *
@@ -1578,6 +1637,11 @@ export declare interface WriteSchemasOptions extends GenerateJsonSchemaOptions {
1578
1637
  readonly name?: string;
1579
1638
  /** Number of spaces for JSON indentation. Defaults to 2 */
1580
1639
  readonly indent?: number;
1640
+ /**
1641
+ * Optional logger for diagnostic output. Defaults to a no-op logger so
1642
+ * existing callers produce no output.
1643
+ */
1644
+ readonly logger?: LoggerLike | undefined;
1581
1645
  }
1582
1646
 
1583
1647
  /**
package/dist/index.cjs CHANGED
@@ -42,6 +42,7 @@ __export(index_exports, {
42
42
  isStaticEnumField: () => import_core2.isStaticEnumField,
43
43
  isTextField: () => import_core2.isTextField,
44
44
  logValidationIssues: () => import_dsl.logValidationIssues,
45
+ noopLogger: () => import_core.noopLogger,
45
46
  validateForm: () => validateForm,
46
47
  when: () => when,
47
48
  writeSchemas: () => writeSchemas
@@ -111,6 +112,7 @@ function validateForm(elements) {
111
112
  isStaticEnumField,
112
113
  isTextField,
113
114
  logValidationIssues,
115
+ noopLogger,
114
116
  validateForm,
115
117
  when,
116
118
  writeSchemas
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * FormSpec - Type-safe form specifications\n *\n * This package re-exports everything from the FormSpec library for convenience.\n * You can import everything you need from a single package:\n *\n * @example\n * ```typescript\n * import {\n * // DSL functions\n * formspec, field, group, when, is,\n * // Type inference\n * type InferSchema,\n * // Schema generation\n * buildFormSchemas,\n * // Resolvers\n * defineResolvers,\n * // Core types\n * type FormSpec, type FormElement,\n * } from \"formspec\";\n *\n * // Define a form\n * const InvoiceForm = formspec(\n * group(\"Customer\",\n * field.text(\"name\", { label: \"Name\", required: true }),\n * field.dynamicEnum(\"country\", \"fetch_countries\", { label: \"Country\" }),\n * ),\n * group(\"Details\",\n * field.number(\"amount\", { label: \"Amount\", min: 0 }),\n * field.enum(\"status\", [\"draft\", \"sent\", \"paid\"]),\n * when(is(\"status\", \"draft\"),\n * field.text(\"notes\", { label: \"Internal Notes\" }),\n * ),\n * ),\n * );\n *\n * // Infer the schema type\n * type Schema = InferSchema<typeof InvoiceForm.elements>;\n *\n * // Generate JSON Schema and UI Schema\n * const { jsonSchema, uiSchema } = buildFormSchemas(InvoiceForm);\n *\n * // Define resolvers for dynamic data\n * const resolvers = defineResolvers(InvoiceForm, {\n * fetch_countries: async () => ({\n * options: [{ value: \"us\", label: \"United States\" }],\n * validity: \"valid\",\n * }),\n * });\n * ```\n *\n * @packageDocumentation\n */\n\n// =============================================================================\n// Core types\n// =============================================================================\n\nimport type {\n AnyField,\n ArrayField,\n BooleanField,\n Conditional,\n DataSourceValueType,\n DynamicEnumField,\n DynamicSchemaField,\n EnumOption,\n EnumOptionValue,\n EqualsPredicate,\n FormElement,\n FormSpec,\n Group,\n NumberField,\n ObjectField,\n Predicate,\n StaticEnumField,\n TextField,\n} from \"@formspec/core\";\n\nexport type {\n // Validity\n Validity,\n\n // Field state\n FieldState,\n\n // Form state\n FormState,\n\n // Data sources\n DataSourceRegistry,\n DataSourceOption,\n FetchOptionsResponse,\n DataSourceValueType,\n // Elements\n TextField,\n NumberField,\n BooleanField,\n EnumOption,\n EnumOptionValue,\n StaticEnumField,\n DynamicEnumField,\n DynamicSchemaField,\n MetadataPolicyInput,\n MetadataAuthoringSurface,\n MetadataDeclarationKind,\n MetadataInferenceContext,\n MetadataInferenceFn,\n EnumMemberMetadataInferenceContext,\n EnumMemberMetadataInferenceFn,\n MetadataPluralizationContext,\n MetadataPluralizationDisabledPolicyInput,\n MetadataPluralizationFn,\n MetadataPluralizationInferIfMissingPolicyInput,\n MetadataPluralizationPolicyInput,\n MetadataPluralizationRequireExplicitPolicyInput,\n MetadataResolutionMode,\n MetadataSource,\n MetadataValueDisabledPolicyInput,\n MetadataValueInferIfMissingPolicyInput,\n MetadataValuePolicyInput,\n MetadataValueRequireExplicitPolicyInput,\n EnumMemberDisplayNameDisabledPolicyInput,\n EnumMemberDisplayNameRequireExplicitPolicyInput,\n EnumMemberDisplayNameInferIfMissingPolicyInput,\n EnumMemberDisplayNamePolicyInput,\n EnumMemberMetadataPolicyInput,\n ResolvedMetadata,\n ResolvedScalarMetadata,\n ArrayField,\n ObjectField,\n AnyField,\n Group,\n Conditional,\n DeclarationMetadataPolicyInput,\n FormElement,\n FormSpec,\n // Predicates\n EqualsPredicate,\n Predicate,\n} from \"@formspec/core\";\n\nexport { createInitialFieldState } from \"@formspec/core\";\n\n// Type guards\nexport {\n isField,\n isTextField,\n isNumberField,\n isBooleanField,\n isStaticEnumField,\n isDynamicEnumField,\n isDynamicSchemaField,\n isArrayField,\n isObjectField,\n isGroup,\n isConditional,\n} from \"@formspec/core\";\n\n// =============================================================================\n// DSL functions\n// =============================================================================\n\nexport { logValidationIssues } from \"@formspec/dsl\";\nimport {\n field as dslField,\n group as dslGroup,\n when as dslWhen,\n is as dslIs,\n formspec as dslFormspec,\n formspecWithValidation as dslFormspecWithValidation,\n validateForm as dslValidateForm,\n type FormSpecOptions,\n} from \"@formspec/dsl\";\nexport type {\n // Validation\n FormSpecOptions,\n ValidationSeverity,\n ValidationIssue,\n ValidationResult,\n} from \"@formspec/dsl\";\nimport type { ValidationResult } from \"@formspec/dsl\";\n\n/**\n * Field builder helpers re-exported by the top-level `formspec` package.\n *\n * @public\n */\nexport interface FormSpecFieldBuilder {\n /** Creates a text field. */\n text<const N extends string>(\n name: N,\n config?: Omit<TextField<N>, \"_type\" | \"_field\" | \"name\">\n ): TextField<N>;\n /** Creates a number field. */\n number<const N extends string>(\n name: N,\n config?: Omit<NumberField<N>, \"_type\" | \"_field\" | \"name\">\n ): NumberField<N>;\n /** Creates a boolean field. */\n boolean<const N extends string>(\n name: N,\n config?: Omit<BooleanField<N>, \"_type\" | \"_field\" | \"name\">\n ): BooleanField<N>;\n /** Creates a static enum field from a fixed options list. */\n enum<const N extends string, const O extends readonly EnumOptionValue[]>(\n name: N,\n options: O,\n config?: Omit<StaticEnumField<N, O>, \"_type\" | \"_field\" | \"name\" | \"options\">\n ): StaticEnumField<N, O>;\n /** Creates a dynamic enum field backed by an external option source. */\n dynamicEnum<const N extends string, const Source extends string>(\n name: N,\n source: Source,\n config?: Omit<DynamicEnumField<N, Source>, \"_type\" | \"_field\" | \"name\" | \"source\">\n ): DynamicEnumField<N, Source>;\n /** Creates a field whose schema is resolved from an external source at runtime. */\n dynamicSchema<const N extends string>(\n name: N,\n schemaSource: string,\n config?: Omit<DynamicSchemaField<N>, \"_type\" | \"_field\" | \"name\" | \"schemaSource\">\n ): DynamicSchemaField<N>;\n /** Creates an array field from a list of item elements. */\n array<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an array field with explicit configuration and item elements. */\n arrayWithConfig<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n config: Omit<ArrayField<N, Items>, \"_type\" | \"_field\" | \"name\" | \"items\">,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an object field from a list of property elements. */\n object<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n /** Creates an object field with explicit configuration and property elements. */\n objectWithConfig<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n config: Omit<ObjectField<N, Properties>, \"_type\" | \"_field\" | \"name\" | \"properties\">,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n}\n\n/**\n * Field builder helpers that preserve this package's exported type identities.\n *\n * @public\n */\nexport const field = dslField as unknown as FormSpecFieldBuilder;\n\n// =============================================================================\n// Build tools\n// =============================================================================\n\nimport {\n buildFormSchemas as buildFormSchemasInternal,\n generateJsonSchema as generateJsonSchemaInternal,\n generateUiSchema as generateUiSchemaInternal,\n writeSchemas as writeSchemasInternal,\n type BuildFormSchemasOptions,\n type BuildResult,\n type GenerateJsonSchemaOptions,\n type GenerateUiSchemaOptions,\n type JsonSchema2020,\n type UISchema,\n type WriteSchemasOptions,\n type WriteSchemasResult,\n} from \"@formspec/build\";\n\nexport type {\n BuildFormSchemasOptions,\n GenerateJsonSchemaOptions,\n GenerateUiSchemaOptions,\n JsonSchema2020,\n UISchema,\n UISchemaElement,\n ControlElement,\n VerticalLayout,\n HorizontalLayout,\n GroupLayout,\n Categorization,\n Category,\n LabelElement,\n Rule,\n RuleEffect,\n RuleConditionSchema,\n SchemaBasedCondition,\n BuildResult,\n WriteSchemasOptions,\n WriteSchemasResult,\n} from \"@formspec/build\";\n\n// =============================================================================\n// Runtime helpers\n// =============================================================================\n\nimport {\n defineResolvers as defineResolversInternal,\n type ResolverMap,\n type ResolverRegistry,\n type ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\nexport type {\n ExtractDynamicSources,\n ExtractDynamicSourcesFromArray,\n Resolver,\n ResolverMap,\n ResolverRegistry,\n ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\n// =============================================================================\n// Local DSL wrappers and inference helpers\n// =============================================================================\n\n/**\n * Creates a visual group of form elements.\n *\n * @public\n */\nexport function group<const Elements extends readonly FormElement[]>(\n label: string,\n ...elements: Elements\n): Group<Elements> {\n return dslGroup(label, ...elements);\n}\n\n/**\n * Creates a conditional wrapper that shows elements based on a predicate.\n *\n * @public\n */\nexport function when<\n const K extends string,\n const V,\n const Elements extends readonly FormElement[],\n>(predicate: Predicate<K, V>, ...elements: Elements): Conditional<K, V, Elements> {\n return dslWhen(predicate, ...elements);\n}\n\n/**\n * Creates an equality predicate that checks if a field equals a specific value.\n *\n * @public\n */\nexport function is<const K extends string, const V>(field: K, value: V): EqualsPredicate<K, V> {\n return dslIs(field, value);\n}\n\n/**\n * Creates a complete form specification.\n *\n * @public\n */\nexport function formspec<const Elements extends readonly FormElement[]>(\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspec(...elements);\n}\n\n/**\n * Creates a complete form specification with validation options.\n *\n * @public\n */\nexport function formspecWithValidation<const Elements extends readonly FormElement[]>(\n options: FormSpecOptions,\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspecWithValidation(options, ...elements);\n}\n\n/**\n * Infers the value type from a single field.\n *\n * @public\n */\nexport type InferFieldValue<F> =\n F extends TextField<string>\n ? string\n : F extends NumberField<string>\n ? number\n : F extends BooleanField<string>\n ? boolean\n : F extends StaticEnumField<string, infer O extends readonly EnumOptionValue[]>\n ? O extends readonly EnumOption[]\n ? O[number][\"id\"]\n : O extends readonly string[]\n ? O[number]\n : never\n : F extends DynamicEnumField<string, infer Source>\n ? DataSourceValueType<Source>\n : F extends DynamicSchemaField<string>\n ? Record<string, unknown>\n : F extends ArrayField<string, infer Items extends readonly FormElement[]>\n ? InferSchema<Items>[]\n : F extends ObjectField<string, infer Properties extends readonly FormElement[]>\n ? InferSchema<Properties>\n : never;\n\n/**\n * Extracts all fields from a single element.\n *\n * @public\n */\nexport type ExtractFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts fields from an array of elements.\n *\n * @public\n */\nexport type ExtractFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractFields<First> | ExtractFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are not inside conditionals.\n *\n * @public\n */\nexport type ExtractNonConditionalFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractNonConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer _Elements>\n ? never\n : never;\n\n/**\n * Extracts non-conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractNonConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractNonConditionalFields<First> | ExtractNonConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are inside conditionals.\n *\n * @public\n */\nexport type ExtractConditionalFields<E> = E extends AnyField\n ? never\n : E extends Group<infer Elements>\n ? ExtractConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractConditionalFields<First> | ExtractConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Builds a schema type from extracted fields.\n *\n * @public\n */\nexport type BuildSchema<Fields> = {\n [N in Fields extends { name: infer K extends string } ? K : never]: InferFieldValue<\n Extract<Fields, { name: N } & AnyField>\n >;\n};\n\n/**\n * Utility type that flattens intersection types.\n *\n * @public\n */\nexport type FlattenIntersection<T> = {\n [K in keyof T]: T[K];\n} & {};\n\n/**\n * Infers the schema type from an array of form elements.\n *\n * @public\n */\nexport type InferSchema<Elements extends readonly FormElement[]> = FlattenIntersection<\n BuildSchema<ExtractNonConditionalFieldsFromArray<Elements>> &\n Partial<BuildSchema<ExtractConditionalFieldsFromArray<Elements>>>\n>;\n\n/**\n * Infers the schema type from a FormSpec.\n *\n * @public\n */\nexport type InferFormSchema<F extends FormSpec<readonly FormElement[]>> =\n F extends FormSpec<infer Elements> ? InferSchema<Elements> : never;\n\n/**\n * Generates a JSON Schema 2020-12 from a FormSpec.\n *\n * @public\n */\nexport function generateJsonSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateJsonSchemaOptions\n): JsonSchema2020 {\n return generateJsonSchemaInternal(form, options);\n}\n\n/**\n * Generates a UI schema from a FormSpec.\n *\n * @public\n */\nexport function generateUiSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateUiSchemaOptions\n): UISchema {\n return generateUiSchemaInternal(form, options);\n}\n\n/**\n * Builds both JSON Schema and UI Schema from a FormSpec.\n *\n * @public\n */\nexport function buildFormSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: BuildFormSchemasOptions\n): BuildResult {\n return buildFormSchemasInternal(form, options);\n}\n\n/**\n * Builds and writes both JSON Schema and UI Schema files to disk.\n *\n * @public\n */\nexport function writeSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options: WriteSchemasOptions\n): WriteSchemasResult {\n return writeSchemasInternal(form, options);\n}\n\n/**\n * Defines resolvers for a form's dynamic data sources.\n *\n * @public\n */\nexport function defineResolvers<\n E extends readonly FormElement[],\n Sources extends string = ResolverSourcesForForm<E>,\n>(form: FormSpec<E>, resolvers: ResolverMap<Sources>): ResolverRegistry<Sources> {\n return defineResolversInternal(form, resolvers);\n}\n\n/**\n * Validates a list of form elements for duplicate names and structural issues.\n *\n * @public\n */\nexport function validateForm(elements: readonly FormElement[]): ValidationResult {\n return dslValidateForm(elements);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8IA,kBAAwC;AAGxC,IAAAA,eAYO;AAMP,iBAAoC;AACpC,IAAAC,cASO;AAoFP,mBAaO;AA6BP,qBAKO;AArDA,IAAM,QAAQ,YAAAC;AAyEd,SAAS,MACd,UACG,UACc;AACjB,aAAO,YAAAC,OAAS,OAAO,GAAG,QAAQ;AACpC;AAOO,SAAS,KAId,cAA+B,UAAiD;AAChF,aAAO,YAAAC,MAAQ,WAAW,GAAG,QAAQ;AACvC;AAOO,SAAS,GAAoCC,QAAU,OAAiC;AAC7F,aAAO,YAAAC,IAAMD,QAAO,KAAK;AAC3B;AAOO,SAAS,YACX,UACiB;AACpB,aAAO,YAAAE,UAAY,GAAG,QAAQ;AAChC;AAOO,SAAS,uBACd,YACG,UACiB;AACpB,aAAO,YAAAC,wBAA0B,SAAS,GAAG,QAAQ;AACvD;AAoJO,SAAS,mBACd,MACA,SACgB;AAChB,aAAO,aAAAC,oBAA2B,MAAM,OAAO;AACjD;AAOO,SAAS,iBACd,MACA,SACU;AACV,aAAO,aAAAC,kBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,iBACd,MACA,SACa;AACb,aAAO,aAAAC,kBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,aACd,MACA,SACoB;AACpB,aAAO,aAAAC,cAAqB,MAAM,OAAO;AAC3C;AAOO,SAAS,gBAGd,MAAmB,WAA4D;AAC/E,aAAO,eAAAC,iBAAwB,MAAM,SAAS;AAChD;AAOO,SAAS,aAAa,UAAoD;AAC/E,aAAO,YAAAC,cAAgB,QAAQ;AACjC;","names":["import_core","import_dsl","dslField","dslGroup","dslWhen","field","dslIs","dslFormspec","dslFormspecWithValidation","generateJsonSchemaInternal","generateUiSchemaInternal","buildFormSchemasInternal","writeSchemasInternal","defineResolversInternal","dslValidateForm"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * FormSpec - Type-safe form specifications\n *\n * This package re-exports everything from the FormSpec library for convenience.\n * You can import everything you need from a single package:\n *\n * @example\n * ```typescript\n * import {\n * // DSL functions\n * formspec, field, group, when, is,\n * // Type inference\n * type InferSchema,\n * // Schema generation\n * buildFormSchemas,\n * // Resolvers\n * defineResolvers,\n * // Core types\n * type FormSpec, type FormElement,\n * } from \"formspec\";\n *\n * // Define a form\n * const InvoiceForm = formspec(\n * group(\"Customer\",\n * field.text(\"name\", { label: \"Name\", required: true }),\n * field.dynamicEnum(\"country\", \"fetch_countries\", { label: \"Country\" }),\n * ),\n * group(\"Details\",\n * field.number(\"amount\", { label: \"Amount\", min: 0 }),\n * field.enum(\"status\", [\"draft\", \"sent\", \"paid\"]),\n * when(is(\"status\", \"draft\"),\n * field.text(\"notes\", { label: \"Internal Notes\" }),\n * ),\n * ),\n * );\n *\n * // Infer the schema type\n * type Schema = InferSchema<typeof InvoiceForm.elements>;\n *\n * // Generate JSON Schema and UI Schema\n * const { jsonSchema, uiSchema } = buildFormSchemas(InvoiceForm);\n *\n * // Define resolvers for dynamic data\n * const resolvers = defineResolvers(InvoiceForm, {\n * fetch_countries: async () => ({\n * options: [{ value: \"us\", label: \"United States\" }],\n * validity: \"valid\",\n * }),\n * });\n * ```\n *\n * @packageDocumentation\n */\n\n// =============================================================================\n// Core types\n// =============================================================================\n\nimport type {\n AnyField,\n ArrayField,\n BooleanField,\n Conditional,\n DataSourceValueType,\n DynamicEnumField,\n DynamicSchemaField,\n EnumOption,\n EnumOptionValue,\n EqualsPredicate,\n FormElement,\n FormSpec,\n Group,\n NumberField,\n ObjectField,\n Predicate,\n StaticEnumField,\n TextField,\n} from \"@formspec/core\";\n\nexport type {\n // Validity\n Validity,\n\n // Field state\n FieldState,\n\n // Form state\n FormState,\n\n // Data sources\n DataSourceRegistry,\n DataSourceOption,\n FetchOptionsResponse,\n DataSourceValueType,\n // Elements\n TextField,\n NumberField,\n BooleanField,\n EnumOption,\n EnumOptionValue,\n StaticEnumField,\n DynamicEnumField,\n DynamicSchemaField,\n MetadataPolicyInput,\n MetadataAuthoringSurface,\n MetadataDeclarationKind,\n MetadataInferenceContext,\n MetadataInferenceFn,\n EnumMemberMetadataInferenceContext,\n EnumMemberMetadataInferenceFn,\n MetadataPluralizationContext,\n MetadataPluralizationDisabledPolicyInput,\n MetadataPluralizationFn,\n MetadataPluralizationInferIfMissingPolicyInput,\n MetadataPluralizationPolicyInput,\n MetadataPluralizationRequireExplicitPolicyInput,\n MetadataResolutionMode,\n MetadataSource,\n MetadataValueDisabledPolicyInput,\n MetadataValueInferIfMissingPolicyInput,\n MetadataValuePolicyInput,\n MetadataValueRequireExplicitPolicyInput,\n EnumMemberDisplayNameDisabledPolicyInput,\n EnumMemberDisplayNameRequireExplicitPolicyInput,\n EnumMemberDisplayNameInferIfMissingPolicyInput,\n EnumMemberDisplayNamePolicyInput,\n EnumMemberMetadataPolicyInput,\n ResolvedMetadata,\n ResolvedScalarMetadata,\n ArrayField,\n ObjectField,\n AnyField,\n Group,\n Conditional,\n DeclarationMetadataPolicyInput,\n FormElement,\n FormSpec,\n // Predicates\n EqualsPredicate,\n Predicate,\n} from \"@formspec/core\";\n\nexport { createInitialFieldState, noopLogger } from \"@formspec/core\";\nexport type { LoggerLike } from \"@formspec/core\";\n\n// Type guards\nexport {\n isField,\n isTextField,\n isNumberField,\n isBooleanField,\n isStaticEnumField,\n isDynamicEnumField,\n isDynamicSchemaField,\n isArrayField,\n isObjectField,\n isGroup,\n isConditional,\n} from \"@formspec/core\";\n\n// =============================================================================\n// DSL functions\n// =============================================================================\n\nexport { logValidationIssues } from \"@formspec/dsl\";\nimport {\n field as dslField,\n group as dslGroup,\n when as dslWhen,\n is as dslIs,\n formspec as dslFormspec,\n formspecWithValidation as dslFormspecWithValidation,\n validateForm as dslValidateForm,\n type FormSpecOptions,\n} from \"@formspec/dsl\";\nexport type {\n // Validation\n FormSpecOptions,\n ValidationSeverity,\n ValidationIssue,\n ValidationResult,\n} from \"@formspec/dsl\";\nimport type { ValidationResult } from \"@formspec/dsl\";\n\n/**\n * Field builder helpers re-exported by the top-level `formspec` package.\n *\n * @public\n */\nexport interface FormSpecFieldBuilder {\n /** Creates a text field. */\n text<const N extends string>(\n name: N,\n config?: Omit<TextField<N>, \"_type\" | \"_field\" | \"name\">\n ): TextField<N>;\n /** Creates a number field. */\n number<const N extends string>(\n name: N,\n config?: Omit<NumberField<N>, \"_type\" | \"_field\" | \"name\">\n ): NumberField<N>;\n /** Creates a boolean field. */\n boolean<const N extends string>(\n name: N,\n config?: Omit<BooleanField<N>, \"_type\" | \"_field\" | \"name\">\n ): BooleanField<N>;\n /** Creates a static enum field from a fixed options list. */\n enum<const N extends string, const O extends readonly EnumOptionValue[]>(\n name: N,\n options: O,\n config?: Omit<StaticEnumField<N, O>, \"_type\" | \"_field\" | \"name\" | \"options\">\n ): StaticEnumField<N, O>;\n /** Creates a dynamic enum field backed by an external option source. */\n dynamicEnum<const N extends string, const Source extends string>(\n name: N,\n source: Source,\n config?: Omit<DynamicEnumField<N, Source>, \"_type\" | \"_field\" | \"name\" | \"source\">\n ): DynamicEnumField<N, Source>;\n /** Creates a field whose schema is resolved from an external source at runtime. */\n dynamicSchema<const N extends string>(\n name: N,\n schemaSource: string,\n config?: Omit<DynamicSchemaField<N>, \"_type\" | \"_field\" | \"name\" | \"schemaSource\">\n ): DynamicSchemaField<N>;\n /** Creates an array field from a list of item elements. */\n array<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an array field with explicit configuration and item elements. */\n arrayWithConfig<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n config: Omit<ArrayField<N, Items>, \"_type\" | \"_field\" | \"name\" | \"items\">,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an object field from a list of property elements. */\n object<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n /** Creates an object field with explicit configuration and property elements. */\n objectWithConfig<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n config: Omit<ObjectField<N, Properties>, \"_type\" | \"_field\" | \"name\" | \"properties\">,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n}\n\n/**\n * Field builder helpers that preserve this package's exported type identities.\n *\n * @public\n */\nexport const field = dslField as unknown as FormSpecFieldBuilder;\n\n// =============================================================================\n// Build tools\n// =============================================================================\n\nimport {\n buildFormSchemas as buildFormSchemasInternal,\n generateJsonSchema as generateJsonSchemaInternal,\n generateUiSchema as generateUiSchemaInternal,\n writeSchemas as writeSchemasInternal,\n type BuildFormSchemasOptions,\n type BuildResult,\n type GenerateJsonSchemaOptions,\n type GenerateUiSchemaOptions,\n type JsonSchema2020,\n type UISchema,\n type WriteSchemasOptions,\n type WriteSchemasResult,\n} from \"@formspec/build\";\n\nexport type {\n BuildFormSchemasOptions,\n GenerateJsonSchemaOptions,\n GenerateUiSchemaOptions,\n JsonSchema2020,\n UISchema,\n UISchemaElement,\n ControlElement,\n VerticalLayout,\n HorizontalLayout,\n GroupLayout,\n Categorization,\n Category,\n LabelElement,\n Rule,\n RuleEffect,\n RuleConditionSchema,\n SchemaBasedCondition,\n BuildResult,\n WriteSchemasOptions,\n WriteSchemasResult,\n} from \"@formspec/build\";\n\n// =============================================================================\n// Runtime helpers\n// =============================================================================\n\nimport {\n defineResolvers as defineResolversInternal,\n type ResolverMap,\n type ResolverRegistry,\n type ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\nexport type {\n ExtractDynamicSources,\n ExtractDynamicSourcesFromArray,\n Resolver,\n ResolverMap,\n ResolverRegistry,\n ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\n// =============================================================================\n// Local DSL wrappers and inference helpers\n// =============================================================================\n\n/**\n * Creates a visual group of form elements.\n *\n * @public\n */\nexport function group<const Elements extends readonly FormElement[]>(\n label: string,\n ...elements: Elements\n): Group<Elements> {\n return dslGroup(label, ...elements);\n}\n\n/**\n * Creates a conditional wrapper that shows elements based on a predicate.\n *\n * @public\n */\nexport function when<\n const K extends string,\n const V,\n const Elements extends readonly FormElement[],\n>(predicate: Predicate<K, V>, ...elements: Elements): Conditional<K, V, Elements> {\n return dslWhen(predicate, ...elements);\n}\n\n/**\n * Creates an equality predicate that checks if a field equals a specific value.\n *\n * @public\n */\nexport function is<const K extends string, const V>(field: K, value: V): EqualsPredicate<K, V> {\n return dslIs(field, value);\n}\n\n/**\n * Creates a complete form specification.\n *\n * @public\n */\nexport function formspec<const Elements extends readonly FormElement[]>(\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspec(...elements);\n}\n\n/**\n * Creates a complete form specification with validation options.\n *\n * @public\n */\nexport function formspecWithValidation<const Elements extends readonly FormElement[]>(\n options: FormSpecOptions,\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspecWithValidation(options, ...elements);\n}\n\n/**\n * Infers the value type from a single field.\n *\n * @public\n */\nexport type InferFieldValue<F> =\n F extends TextField<string>\n ? string\n : F extends NumberField<string>\n ? number\n : F extends BooleanField<string>\n ? boolean\n : F extends StaticEnumField<string, infer O extends readonly EnumOptionValue[]>\n ? O extends readonly EnumOption[]\n ? O[number][\"id\"]\n : O extends readonly string[]\n ? O[number]\n : never\n : F extends DynamicEnumField<string, infer Source>\n ? DataSourceValueType<Source>\n : F extends DynamicSchemaField<string>\n ? Record<string, unknown>\n : F extends ArrayField<string, infer Items extends readonly FormElement[]>\n ? InferSchema<Items>[]\n : F extends ObjectField<string, infer Properties extends readonly FormElement[]>\n ? InferSchema<Properties>\n : never;\n\n/**\n * Extracts all fields from a single element.\n *\n * @public\n */\nexport type ExtractFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts fields from an array of elements.\n *\n * @public\n */\nexport type ExtractFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractFields<First> | ExtractFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are not inside conditionals.\n *\n * @public\n */\nexport type ExtractNonConditionalFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractNonConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer _Elements>\n ? never\n : never;\n\n/**\n * Extracts non-conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractNonConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractNonConditionalFields<First> | ExtractNonConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are inside conditionals.\n *\n * @public\n */\nexport type ExtractConditionalFields<E> = E extends AnyField\n ? never\n : E extends Group<infer Elements>\n ? ExtractConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractConditionalFields<First> | ExtractConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Builds a schema type from extracted fields.\n *\n * @public\n */\nexport type BuildSchema<Fields> = {\n [N in Fields extends { name: infer K extends string } ? K : never]: InferFieldValue<\n Extract<Fields, { name: N } & AnyField>\n >;\n};\n\n/**\n * Utility type that flattens intersection types.\n *\n * @public\n */\nexport type FlattenIntersection<T> = {\n [K in keyof T]: T[K];\n} & {};\n\n/**\n * Infers the schema type from an array of form elements.\n *\n * @public\n */\nexport type InferSchema<Elements extends readonly FormElement[]> = FlattenIntersection<\n BuildSchema<ExtractNonConditionalFieldsFromArray<Elements>> &\n Partial<BuildSchema<ExtractConditionalFieldsFromArray<Elements>>>\n>;\n\n/**\n * Infers the schema type from a FormSpec.\n *\n * @public\n */\nexport type InferFormSchema<F extends FormSpec<readonly FormElement[]>> =\n F extends FormSpec<infer Elements> ? InferSchema<Elements> : never;\n\n/**\n * Generates a JSON Schema 2020-12 from a FormSpec.\n *\n * @public\n */\nexport function generateJsonSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateJsonSchemaOptions\n): JsonSchema2020 {\n return generateJsonSchemaInternal(form, options);\n}\n\n/**\n * Generates a UI schema from a FormSpec.\n *\n * @public\n */\nexport function generateUiSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateUiSchemaOptions\n): UISchema {\n return generateUiSchemaInternal(form, options);\n}\n\n/**\n * Builds both JSON Schema and UI Schema from a FormSpec.\n *\n * @public\n */\nexport function buildFormSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: BuildFormSchemasOptions\n): BuildResult {\n return buildFormSchemasInternal(form, options);\n}\n\n/**\n * Builds and writes both JSON Schema and UI Schema files to disk.\n *\n * @public\n */\nexport function writeSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options: WriteSchemasOptions\n): WriteSchemasResult {\n return writeSchemasInternal(form, options);\n}\n\n/**\n * Defines resolvers for a form's dynamic data sources.\n *\n * @public\n */\nexport function defineResolvers<\n E extends readonly FormElement[],\n Sources extends string = ResolverSourcesForForm<E>,\n>(form: FormSpec<E>, resolvers: ResolverMap<Sources>): ResolverRegistry<Sources> {\n return defineResolversInternal(form, resolvers);\n}\n\n/**\n * Validates a list of form elements for duplicate names and structural issues.\n *\n * @public\n */\nexport function validateForm(elements: readonly FormElement[]): ValidationResult {\n return dslValidateForm(elements);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8IA,kBAAoD;AAIpD,IAAAA,eAYO;AAMP,iBAAoC;AACpC,IAAAC,cASO;AAoFP,mBAaO;AA6BP,qBAKO;AArDA,IAAM,QAAQ,YAAAC;AAyEd,SAAS,MACd,UACG,UACc;AACjB,aAAO,YAAAC,OAAS,OAAO,GAAG,QAAQ;AACpC;AAOO,SAAS,KAId,cAA+B,UAAiD;AAChF,aAAO,YAAAC,MAAQ,WAAW,GAAG,QAAQ;AACvC;AAOO,SAAS,GAAoCC,QAAU,OAAiC;AAC7F,aAAO,YAAAC,IAAMD,QAAO,KAAK;AAC3B;AAOO,SAAS,YACX,UACiB;AACpB,aAAO,YAAAE,UAAY,GAAG,QAAQ;AAChC;AAOO,SAAS,uBACd,YACG,UACiB;AACpB,aAAO,YAAAC,wBAA0B,SAAS,GAAG,QAAQ;AACvD;AAoJO,SAAS,mBACd,MACA,SACgB;AAChB,aAAO,aAAAC,oBAA2B,MAAM,OAAO;AACjD;AAOO,SAAS,iBACd,MACA,SACU;AACV,aAAO,aAAAC,kBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,iBACd,MACA,SACa;AACb,aAAO,aAAAC,kBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,aACd,MACA,SACoB;AACpB,aAAO,aAAAC,cAAqB,MAAM,OAAO;AAC3C;AAOO,SAAS,gBAGd,MAAmB,WAA4D;AAC/E,aAAO,eAAAC,iBAAwB,MAAM,SAAS;AAChD;AAOO,SAAS,aAAa,UAAoD;AAC/E,aAAO,YAAAC,cAAgB,QAAQ;AACjC;","names":["import_core","import_dsl","dslField","dslGroup","dslWhen","field","dslIs","dslFormspec","dslFormspecWithValidation","generateJsonSchemaInternal","generateUiSchemaInternal","buildFormSchemasInternal","writeSchemasInternal","defineResolversInternal","dslValidateForm"]}
package/dist/index.d.ts CHANGED
@@ -53,7 +53,8 @@
53
53
  */
54
54
  import type { AnyField, ArrayField, BooleanField, Conditional, DataSourceValueType, DynamicEnumField, DynamicSchemaField, EnumOption, EnumOptionValue, EqualsPredicate, FormElement, FormSpec, Group, NumberField, ObjectField, Predicate, StaticEnumField, TextField } from "@formspec/core";
55
55
  export type { Validity, FieldState, FormState, DataSourceRegistry, DataSourceOption, FetchOptionsResponse, DataSourceValueType, TextField, NumberField, BooleanField, EnumOption, EnumOptionValue, StaticEnumField, DynamicEnumField, DynamicSchemaField, MetadataPolicyInput, MetadataAuthoringSurface, MetadataDeclarationKind, MetadataInferenceContext, MetadataInferenceFn, EnumMemberMetadataInferenceContext, EnumMemberMetadataInferenceFn, MetadataPluralizationContext, MetadataPluralizationDisabledPolicyInput, MetadataPluralizationFn, MetadataPluralizationInferIfMissingPolicyInput, MetadataPluralizationPolicyInput, MetadataPluralizationRequireExplicitPolicyInput, MetadataResolutionMode, MetadataSource, MetadataValueDisabledPolicyInput, MetadataValueInferIfMissingPolicyInput, MetadataValuePolicyInput, MetadataValueRequireExplicitPolicyInput, EnumMemberDisplayNameDisabledPolicyInput, EnumMemberDisplayNameRequireExplicitPolicyInput, EnumMemberDisplayNameInferIfMissingPolicyInput, EnumMemberDisplayNamePolicyInput, EnumMemberMetadataPolicyInput, ResolvedMetadata, ResolvedScalarMetadata, ArrayField, ObjectField, AnyField, Group, Conditional, DeclarationMetadataPolicyInput, FormElement, FormSpec, EqualsPredicate, Predicate, } from "@formspec/core";
56
- export { createInitialFieldState } from "@formspec/core";
56
+ export { createInitialFieldState, noopLogger } from "@formspec/core";
57
+ export type { LoggerLike } from "@formspec/core";
57
58
  export { isField, isTextField, isNumberField, isBooleanField, isStaticEnumField, isDynamicEnumField, isDynamicSchemaField, isArrayField, isObjectField, isGroup, isConditional, } from "@formspec/core";
58
59
  export { logValidationIssues } from "@formspec/dsl";
59
60
  import { type FormSpecOptions } from "@formspec/dsl";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/index.ts
2
- import { createInitialFieldState } from "@formspec/core";
2
+ import { createInitialFieldState, noopLogger } from "@formspec/core";
3
3
  import {
4
4
  isField,
5
5
  isTextField,
@@ -89,6 +89,7 @@ export {
89
89
  isStaticEnumField,
90
90
  isTextField,
91
91
  logValidationIssues,
92
+ noopLogger,
92
93
  validateForm,
93
94
  when,
94
95
  writeSchemas
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * FormSpec - Type-safe form specifications\n *\n * This package re-exports everything from the FormSpec library for convenience.\n * You can import everything you need from a single package:\n *\n * @example\n * ```typescript\n * import {\n * // DSL functions\n * formspec, field, group, when, is,\n * // Type inference\n * type InferSchema,\n * // Schema generation\n * buildFormSchemas,\n * // Resolvers\n * defineResolvers,\n * // Core types\n * type FormSpec, type FormElement,\n * } from \"formspec\";\n *\n * // Define a form\n * const InvoiceForm = formspec(\n * group(\"Customer\",\n * field.text(\"name\", { label: \"Name\", required: true }),\n * field.dynamicEnum(\"country\", \"fetch_countries\", { label: \"Country\" }),\n * ),\n * group(\"Details\",\n * field.number(\"amount\", { label: \"Amount\", min: 0 }),\n * field.enum(\"status\", [\"draft\", \"sent\", \"paid\"]),\n * when(is(\"status\", \"draft\"),\n * field.text(\"notes\", { label: \"Internal Notes\" }),\n * ),\n * ),\n * );\n *\n * // Infer the schema type\n * type Schema = InferSchema<typeof InvoiceForm.elements>;\n *\n * // Generate JSON Schema and UI Schema\n * const { jsonSchema, uiSchema } = buildFormSchemas(InvoiceForm);\n *\n * // Define resolvers for dynamic data\n * const resolvers = defineResolvers(InvoiceForm, {\n * fetch_countries: async () => ({\n * options: [{ value: \"us\", label: \"United States\" }],\n * validity: \"valid\",\n * }),\n * });\n * ```\n *\n * @packageDocumentation\n */\n\n// =============================================================================\n// Core types\n// =============================================================================\n\nimport type {\n AnyField,\n ArrayField,\n BooleanField,\n Conditional,\n DataSourceValueType,\n DynamicEnumField,\n DynamicSchemaField,\n EnumOption,\n EnumOptionValue,\n EqualsPredicate,\n FormElement,\n FormSpec,\n Group,\n NumberField,\n ObjectField,\n Predicate,\n StaticEnumField,\n TextField,\n} from \"@formspec/core\";\n\nexport type {\n // Validity\n Validity,\n\n // Field state\n FieldState,\n\n // Form state\n FormState,\n\n // Data sources\n DataSourceRegistry,\n DataSourceOption,\n FetchOptionsResponse,\n DataSourceValueType,\n // Elements\n TextField,\n NumberField,\n BooleanField,\n EnumOption,\n EnumOptionValue,\n StaticEnumField,\n DynamicEnumField,\n DynamicSchemaField,\n MetadataPolicyInput,\n MetadataAuthoringSurface,\n MetadataDeclarationKind,\n MetadataInferenceContext,\n MetadataInferenceFn,\n EnumMemberMetadataInferenceContext,\n EnumMemberMetadataInferenceFn,\n MetadataPluralizationContext,\n MetadataPluralizationDisabledPolicyInput,\n MetadataPluralizationFn,\n MetadataPluralizationInferIfMissingPolicyInput,\n MetadataPluralizationPolicyInput,\n MetadataPluralizationRequireExplicitPolicyInput,\n MetadataResolutionMode,\n MetadataSource,\n MetadataValueDisabledPolicyInput,\n MetadataValueInferIfMissingPolicyInput,\n MetadataValuePolicyInput,\n MetadataValueRequireExplicitPolicyInput,\n EnumMemberDisplayNameDisabledPolicyInput,\n EnumMemberDisplayNameRequireExplicitPolicyInput,\n EnumMemberDisplayNameInferIfMissingPolicyInput,\n EnumMemberDisplayNamePolicyInput,\n EnumMemberMetadataPolicyInput,\n ResolvedMetadata,\n ResolvedScalarMetadata,\n ArrayField,\n ObjectField,\n AnyField,\n Group,\n Conditional,\n DeclarationMetadataPolicyInput,\n FormElement,\n FormSpec,\n // Predicates\n EqualsPredicate,\n Predicate,\n} from \"@formspec/core\";\n\nexport { createInitialFieldState } from \"@formspec/core\";\n\n// Type guards\nexport {\n isField,\n isTextField,\n isNumberField,\n isBooleanField,\n isStaticEnumField,\n isDynamicEnumField,\n isDynamicSchemaField,\n isArrayField,\n isObjectField,\n isGroup,\n isConditional,\n} from \"@formspec/core\";\n\n// =============================================================================\n// DSL functions\n// =============================================================================\n\nexport { logValidationIssues } from \"@formspec/dsl\";\nimport {\n field as dslField,\n group as dslGroup,\n when as dslWhen,\n is as dslIs,\n formspec as dslFormspec,\n formspecWithValidation as dslFormspecWithValidation,\n validateForm as dslValidateForm,\n type FormSpecOptions,\n} from \"@formspec/dsl\";\nexport type {\n // Validation\n FormSpecOptions,\n ValidationSeverity,\n ValidationIssue,\n ValidationResult,\n} from \"@formspec/dsl\";\nimport type { ValidationResult } from \"@formspec/dsl\";\n\n/**\n * Field builder helpers re-exported by the top-level `formspec` package.\n *\n * @public\n */\nexport interface FormSpecFieldBuilder {\n /** Creates a text field. */\n text<const N extends string>(\n name: N,\n config?: Omit<TextField<N>, \"_type\" | \"_field\" | \"name\">\n ): TextField<N>;\n /** Creates a number field. */\n number<const N extends string>(\n name: N,\n config?: Omit<NumberField<N>, \"_type\" | \"_field\" | \"name\">\n ): NumberField<N>;\n /** Creates a boolean field. */\n boolean<const N extends string>(\n name: N,\n config?: Omit<BooleanField<N>, \"_type\" | \"_field\" | \"name\">\n ): BooleanField<N>;\n /** Creates a static enum field from a fixed options list. */\n enum<const N extends string, const O extends readonly EnumOptionValue[]>(\n name: N,\n options: O,\n config?: Omit<StaticEnumField<N, O>, \"_type\" | \"_field\" | \"name\" | \"options\">\n ): StaticEnumField<N, O>;\n /** Creates a dynamic enum field backed by an external option source. */\n dynamicEnum<const N extends string, const Source extends string>(\n name: N,\n source: Source,\n config?: Omit<DynamicEnumField<N, Source>, \"_type\" | \"_field\" | \"name\" | \"source\">\n ): DynamicEnumField<N, Source>;\n /** Creates a field whose schema is resolved from an external source at runtime. */\n dynamicSchema<const N extends string>(\n name: N,\n schemaSource: string,\n config?: Omit<DynamicSchemaField<N>, \"_type\" | \"_field\" | \"name\" | \"schemaSource\">\n ): DynamicSchemaField<N>;\n /** Creates an array field from a list of item elements. */\n array<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an array field with explicit configuration and item elements. */\n arrayWithConfig<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n config: Omit<ArrayField<N, Items>, \"_type\" | \"_field\" | \"name\" | \"items\">,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an object field from a list of property elements. */\n object<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n /** Creates an object field with explicit configuration and property elements. */\n objectWithConfig<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n config: Omit<ObjectField<N, Properties>, \"_type\" | \"_field\" | \"name\" | \"properties\">,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n}\n\n/**\n * Field builder helpers that preserve this package's exported type identities.\n *\n * @public\n */\nexport const field = dslField as unknown as FormSpecFieldBuilder;\n\n// =============================================================================\n// Build tools\n// =============================================================================\n\nimport {\n buildFormSchemas as buildFormSchemasInternal,\n generateJsonSchema as generateJsonSchemaInternal,\n generateUiSchema as generateUiSchemaInternal,\n writeSchemas as writeSchemasInternal,\n type BuildFormSchemasOptions,\n type BuildResult,\n type GenerateJsonSchemaOptions,\n type GenerateUiSchemaOptions,\n type JsonSchema2020,\n type UISchema,\n type WriteSchemasOptions,\n type WriteSchemasResult,\n} from \"@formspec/build\";\n\nexport type {\n BuildFormSchemasOptions,\n GenerateJsonSchemaOptions,\n GenerateUiSchemaOptions,\n JsonSchema2020,\n UISchema,\n UISchemaElement,\n ControlElement,\n VerticalLayout,\n HorizontalLayout,\n GroupLayout,\n Categorization,\n Category,\n LabelElement,\n Rule,\n RuleEffect,\n RuleConditionSchema,\n SchemaBasedCondition,\n BuildResult,\n WriteSchemasOptions,\n WriteSchemasResult,\n} from \"@formspec/build\";\n\n// =============================================================================\n// Runtime helpers\n// =============================================================================\n\nimport {\n defineResolvers as defineResolversInternal,\n type ResolverMap,\n type ResolverRegistry,\n type ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\nexport type {\n ExtractDynamicSources,\n ExtractDynamicSourcesFromArray,\n Resolver,\n ResolverMap,\n ResolverRegistry,\n ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\n// =============================================================================\n// Local DSL wrappers and inference helpers\n// =============================================================================\n\n/**\n * Creates a visual group of form elements.\n *\n * @public\n */\nexport function group<const Elements extends readonly FormElement[]>(\n label: string,\n ...elements: Elements\n): Group<Elements> {\n return dslGroup(label, ...elements);\n}\n\n/**\n * Creates a conditional wrapper that shows elements based on a predicate.\n *\n * @public\n */\nexport function when<\n const K extends string,\n const V,\n const Elements extends readonly FormElement[],\n>(predicate: Predicate<K, V>, ...elements: Elements): Conditional<K, V, Elements> {\n return dslWhen(predicate, ...elements);\n}\n\n/**\n * Creates an equality predicate that checks if a field equals a specific value.\n *\n * @public\n */\nexport function is<const K extends string, const V>(field: K, value: V): EqualsPredicate<K, V> {\n return dslIs(field, value);\n}\n\n/**\n * Creates a complete form specification.\n *\n * @public\n */\nexport function formspec<const Elements extends readonly FormElement[]>(\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspec(...elements);\n}\n\n/**\n * Creates a complete form specification with validation options.\n *\n * @public\n */\nexport function formspecWithValidation<const Elements extends readonly FormElement[]>(\n options: FormSpecOptions,\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspecWithValidation(options, ...elements);\n}\n\n/**\n * Infers the value type from a single field.\n *\n * @public\n */\nexport type InferFieldValue<F> =\n F extends TextField<string>\n ? string\n : F extends NumberField<string>\n ? number\n : F extends BooleanField<string>\n ? boolean\n : F extends StaticEnumField<string, infer O extends readonly EnumOptionValue[]>\n ? O extends readonly EnumOption[]\n ? O[number][\"id\"]\n : O extends readonly string[]\n ? O[number]\n : never\n : F extends DynamicEnumField<string, infer Source>\n ? DataSourceValueType<Source>\n : F extends DynamicSchemaField<string>\n ? Record<string, unknown>\n : F extends ArrayField<string, infer Items extends readonly FormElement[]>\n ? InferSchema<Items>[]\n : F extends ObjectField<string, infer Properties extends readonly FormElement[]>\n ? InferSchema<Properties>\n : never;\n\n/**\n * Extracts all fields from a single element.\n *\n * @public\n */\nexport type ExtractFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts fields from an array of elements.\n *\n * @public\n */\nexport type ExtractFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractFields<First> | ExtractFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are not inside conditionals.\n *\n * @public\n */\nexport type ExtractNonConditionalFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractNonConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer _Elements>\n ? never\n : never;\n\n/**\n * Extracts non-conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractNonConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractNonConditionalFields<First> | ExtractNonConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are inside conditionals.\n *\n * @public\n */\nexport type ExtractConditionalFields<E> = E extends AnyField\n ? never\n : E extends Group<infer Elements>\n ? ExtractConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractConditionalFields<First> | ExtractConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Builds a schema type from extracted fields.\n *\n * @public\n */\nexport type BuildSchema<Fields> = {\n [N in Fields extends { name: infer K extends string } ? K : never]: InferFieldValue<\n Extract<Fields, { name: N } & AnyField>\n >;\n};\n\n/**\n * Utility type that flattens intersection types.\n *\n * @public\n */\nexport type FlattenIntersection<T> = {\n [K in keyof T]: T[K];\n} & {};\n\n/**\n * Infers the schema type from an array of form elements.\n *\n * @public\n */\nexport type InferSchema<Elements extends readonly FormElement[]> = FlattenIntersection<\n BuildSchema<ExtractNonConditionalFieldsFromArray<Elements>> &\n Partial<BuildSchema<ExtractConditionalFieldsFromArray<Elements>>>\n>;\n\n/**\n * Infers the schema type from a FormSpec.\n *\n * @public\n */\nexport type InferFormSchema<F extends FormSpec<readonly FormElement[]>> =\n F extends FormSpec<infer Elements> ? InferSchema<Elements> : never;\n\n/**\n * Generates a JSON Schema 2020-12 from a FormSpec.\n *\n * @public\n */\nexport function generateJsonSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateJsonSchemaOptions\n): JsonSchema2020 {\n return generateJsonSchemaInternal(form, options);\n}\n\n/**\n * Generates a UI schema from a FormSpec.\n *\n * @public\n */\nexport function generateUiSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateUiSchemaOptions\n): UISchema {\n return generateUiSchemaInternal(form, options);\n}\n\n/**\n * Builds both JSON Schema and UI Schema from a FormSpec.\n *\n * @public\n */\nexport function buildFormSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: BuildFormSchemasOptions\n): BuildResult {\n return buildFormSchemasInternal(form, options);\n}\n\n/**\n * Builds and writes both JSON Schema and UI Schema files to disk.\n *\n * @public\n */\nexport function writeSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options: WriteSchemasOptions\n): WriteSchemasResult {\n return writeSchemasInternal(form, options);\n}\n\n/**\n * Defines resolvers for a form's dynamic data sources.\n *\n * @public\n */\nexport function defineResolvers<\n E extends readonly FormElement[],\n Sources extends string = ResolverSourcesForForm<E>,\n>(form: FormSpec<E>, resolvers: ResolverMap<Sources>): ResolverRegistry<Sources> {\n return defineResolversInternal(form, resolvers);\n}\n\n/**\n * Validates a list of form elements for duplicate names and structural issues.\n *\n * @public\n */\nexport function validateForm(elements: readonly FormElement[]): ValidationResult {\n return dslValidateForm(elements);\n}\n"],"mappings":";AA8IA,SAAS,+BAA+B;AAGxC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,SAAS,2BAA2B;AACpC;AAAA,EACE,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,OAEX;AAoFP;AAAA,EACE,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,OASX;AA6BP;AAAA,EACE,mBAAmB;AAAA,OAId;AArDA,IAAM,QAAQ;AAyEd,SAAS,MACd,UACG,UACc;AACjB,SAAO,SAAS,OAAO,GAAG,QAAQ;AACpC;AAOO,SAAS,KAId,cAA+B,UAAiD;AAChF,SAAO,QAAQ,WAAW,GAAG,QAAQ;AACvC;AAOO,SAAS,GAAoCA,QAAU,OAAiC;AAC7F,SAAO,MAAMA,QAAO,KAAK;AAC3B;AAOO,SAAS,YACX,UACiB;AACpB,SAAO,YAAY,GAAG,QAAQ;AAChC;AAOO,SAAS,uBACd,YACG,UACiB;AACpB,SAAO,0BAA0B,SAAS,GAAG,QAAQ;AACvD;AAoJO,SAAS,mBACd,MACA,SACgB;AAChB,SAAO,2BAA2B,MAAM,OAAO;AACjD;AAOO,SAAS,iBACd,MACA,SACU;AACV,SAAO,yBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,iBACd,MACA,SACa;AACb,SAAO,yBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,aACd,MACA,SACoB;AACpB,SAAO,qBAAqB,MAAM,OAAO;AAC3C;AAOO,SAAS,gBAGd,MAAmB,WAA4D;AAC/E,SAAO,wBAAwB,MAAM,SAAS;AAChD;AAOO,SAAS,aAAa,UAAoD;AAC/E,SAAO,gBAAgB,QAAQ;AACjC;","names":["field"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * FormSpec - Type-safe form specifications\n *\n * This package re-exports everything from the FormSpec library for convenience.\n * You can import everything you need from a single package:\n *\n * @example\n * ```typescript\n * import {\n * // DSL functions\n * formspec, field, group, when, is,\n * // Type inference\n * type InferSchema,\n * // Schema generation\n * buildFormSchemas,\n * // Resolvers\n * defineResolvers,\n * // Core types\n * type FormSpec, type FormElement,\n * } from \"formspec\";\n *\n * // Define a form\n * const InvoiceForm = formspec(\n * group(\"Customer\",\n * field.text(\"name\", { label: \"Name\", required: true }),\n * field.dynamicEnum(\"country\", \"fetch_countries\", { label: \"Country\" }),\n * ),\n * group(\"Details\",\n * field.number(\"amount\", { label: \"Amount\", min: 0 }),\n * field.enum(\"status\", [\"draft\", \"sent\", \"paid\"]),\n * when(is(\"status\", \"draft\"),\n * field.text(\"notes\", { label: \"Internal Notes\" }),\n * ),\n * ),\n * );\n *\n * // Infer the schema type\n * type Schema = InferSchema<typeof InvoiceForm.elements>;\n *\n * // Generate JSON Schema and UI Schema\n * const { jsonSchema, uiSchema } = buildFormSchemas(InvoiceForm);\n *\n * // Define resolvers for dynamic data\n * const resolvers = defineResolvers(InvoiceForm, {\n * fetch_countries: async () => ({\n * options: [{ value: \"us\", label: \"United States\" }],\n * validity: \"valid\",\n * }),\n * });\n * ```\n *\n * @packageDocumentation\n */\n\n// =============================================================================\n// Core types\n// =============================================================================\n\nimport type {\n AnyField,\n ArrayField,\n BooleanField,\n Conditional,\n DataSourceValueType,\n DynamicEnumField,\n DynamicSchemaField,\n EnumOption,\n EnumOptionValue,\n EqualsPredicate,\n FormElement,\n FormSpec,\n Group,\n NumberField,\n ObjectField,\n Predicate,\n StaticEnumField,\n TextField,\n} from \"@formspec/core\";\n\nexport type {\n // Validity\n Validity,\n\n // Field state\n FieldState,\n\n // Form state\n FormState,\n\n // Data sources\n DataSourceRegistry,\n DataSourceOption,\n FetchOptionsResponse,\n DataSourceValueType,\n // Elements\n TextField,\n NumberField,\n BooleanField,\n EnumOption,\n EnumOptionValue,\n StaticEnumField,\n DynamicEnumField,\n DynamicSchemaField,\n MetadataPolicyInput,\n MetadataAuthoringSurface,\n MetadataDeclarationKind,\n MetadataInferenceContext,\n MetadataInferenceFn,\n EnumMemberMetadataInferenceContext,\n EnumMemberMetadataInferenceFn,\n MetadataPluralizationContext,\n MetadataPluralizationDisabledPolicyInput,\n MetadataPluralizationFn,\n MetadataPluralizationInferIfMissingPolicyInput,\n MetadataPluralizationPolicyInput,\n MetadataPluralizationRequireExplicitPolicyInput,\n MetadataResolutionMode,\n MetadataSource,\n MetadataValueDisabledPolicyInput,\n MetadataValueInferIfMissingPolicyInput,\n MetadataValuePolicyInput,\n MetadataValueRequireExplicitPolicyInput,\n EnumMemberDisplayNameDisabledPolicyInput,\n EnumMemberDisplayNameRequireExplicitPolicyInput,\n EnumMemberDisplayNameInferIfMissingPolicyInput,\n EnumMemberDisplayNamePolicyInput,\n EnumMemberMetadataPolicyInput,\n ResolvedMetadata,\n ResolvedScalarMetadata,\n ArrayField,\n ObjectField,\n AnyField,\n Group,\n Conditional,\n DeclarationMetadataPolicyInput,\n FormElement,\n FormSpec,\n // Predicates\n EqualsPredicate,\n Predicate,\n} from \"@formspec/core\";\n\nexport { createInitialFieldState, noopLogger } from \"@formspec/core\";\nexport type { LoggerLike } from \"@formspec/core\";\n\n// Type guards\nexport {\n isField,\n isTextField,\n isNumberField,\n isBooleanField,\n isStaticEnumField,\n isDynamicEnumField,\n isDynamicSchemaField,\n isArrayField,\n isObjectField,\n isGroup,\n isConditional,\n} from \"@formspec/core\";\n\n// =============================================================================\n// DSL functions\n// =============================================================================\n\nexport { logValidationIssues } from \"@formspec/dsl\";\nimport {\n field as dslField,\n group as dslGroup,\n when as dslWhen,\n is as dslIs,\n formspec as dslFormspec,\n formspecWithValidation as dslFormspecWithValidation,\n validateForm as dslValidateForm,\n type FormSpecOptions,\n} from \"@formspec/dsl\";\nexport type {\n // Validation\n FormSpecOptions,\n ValidationSeverity,\n ValidationIssue,\n ValidationResult,\n} from \"@formspec/dsl\";\nimport type { ValidationResult } from \"@formspec/dsl\";\n\n/**\n * Field builder helpers re-exported by the top-level `formspec` package.\n *\n * @public\n */\nexport interface FormSpecFieldBuilder {\n /** Creates a text field. */\n text<const N extends string>(\n name: N,\n config?: Omit<TextField<N>, \"_type\" | \"_field\" | \"name\">\n ): TextField<N>;\n /** Creates a number field. */\n number<const N extends string>(\n name: N,\n config?: Omit<NumberField<N>, \"_type\" | \"_field\" | \"name\">\n ): NumberField<N>;\n /** Creates a boolean field. */\n boolean<const N extends string>(\n name: N,\n config?: Omit<BooleanField<N>, \"_type\" | \"_field\" | \"name\">\n ): BooleanField<N>;\n /** Creates a static enum field from a fixed options list. */\n enum<const N extends string, const O extends readonly EnumOptionValue[]>(\n name: N,\n options: O,\n config?: Omit<StaticEnumField<N, O>, \"_type\" | \"_field\" | \"name\" | \"options\">\n ): StaticEnumField<N, O>;\n /** Creates a dynamic enum field backed by an external option source. */\n dynamicEnum<const N extends string, const Source extends string>(\n name: N,\n source: Source,\n config?: Omit<DynamicEnumField<N, Source>, \"_type\" | \"_field\" | \"name\" | \"source\">\n ): DynamicEnumField<N, Source>;\n /** Creates a field whose schema is resolved from an external source at runtime. */\n dynamicSchema<const N extends string>(\n name: N,\n schemaSource: string,\n config?: Omit<DynamicSchemaField<N>, \"_type\" | \"_field\" | \"name\" | \"schemaSource\">\n ): DynamicSchemaField<N>;\n /** Creates an array field from a list of item elements. */\n array<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an array field with explicit configuration and item elements. */\n arrayWithConfig<const N extends string, const Items extends readonly FormElement[]>(\n name: N,\n config: Omit<ArrayField<N, Items>, \"_type\" | \"_field\" | \"name\" | \"items\">,\n ...items: Items\n ): ArrayField<N, Items>;\n /** Creates an object field from a list of property elements. */\n object<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n /** Creates an object field with explicit configuration and property elements. */\n objectWithConfig<const N extends string, const Properties extends readonly FormElement[]>(\n name: N,\n config: Omit<ObjectField<N, Properties>, \"_type\" | \"_field\" | \"name\" | \"properties\">,\n ...properties: Properties\n ): ObjectField<N, Properties>;\n}\n\n/**\n * Field builder helpers that preserve this package's exported type identities.\n *\n * @public\n */\nexport const field = dslField as unknown as FormSpecFieldBuilder;\n\n// =============================================================================\n// Build tools\n// =============================================================================\n\nimport {\n buildFormSchemas as buildFormSchemasInternal,\n generateJsonSchema as generateJsonSchemaInternal,\n generateUiSchema as generateUiSchemaInternal,\n writeSchemas as writeSchemasInternal,\n type BuildFormSchemasOptions,\n type BuildResult,\n type GenerateJsonSchemaOptions,\n type GenerateUiSchemaOptions,\n type JsonSchema2020,\n type UISchema,\n type WriteSchemasOptions,\n type WriteSchemasResult,\n} from \"@formspec/build\";\n\nexport type {\n BuildFormSchemasOptions,\n GenerateJsonSchemaOptions,\n GenerateUiSchemaOptions,\n JsonSchema2020,\n UISchema,\n UISchemaElement,\n ControlElement,\n VerticalLayout,\n HorizontalLayout,\n GroupLayout,\n Categorization,\n Category,\n LabelElement,\n Rule,\n RuleEffect,\n RuleConditionSchema,\n SchemaBasedCondition,\n BuildResult,\n WriteSchemasOptions,\n WriteSchemasResult,\n} from \"@formspec/build\";\n\n// =============================================================================\n// Runtime helpers\n// =============================================================================\n\nimport {\n defineResolvers as defineResolversInternal,\n type ResolverMap,\n type ResolverRegistry,\n type ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\nexport type {\n ExtractDynamicSources,\n ExtractDynamicSourcesFromArray,\n Resolver,\n ResolverMap,\n ResolverRegistry,\n ResolverSourcesForForm,\n} from \"@formspec/runtime\";\n\n// =============================================================================\n// Local DSL wrappers and inference helpers\n// =============================================================================\n\n/**\n * Creates a visual group of form elements.\n *\n * @public\n */\nexport function group<const Elements extends readonly FormElement[]>(\n label: string,\n ...elements: Elements\n): Group<Elements> {\n return dslGroup(label, ...elements);\n}\n\n/**\n * Creates a conditional wrapper that shows elements based on a predicate.\n *\n * @public\n */\nexport function when<\n const K extends string,\n const V,\n const Elements extends readonly FormElement[],\n>(predicate: Predicate<K, V>, ...elements: Elements): Conditional<K, V, Elements> {\n return dslWhen(predicate, ...elements);\n}\n\n/**\n * Creates an equality predicate that checks if a field equals a specific value.\n *\n * @public\n */\nexport function is<const K extends string, const V>(field: K, value: V): EqualsPredicate<K, V> {\n return dslIs(field, value);\n}\n\n/**\n * Creates a complete form specification.\n *\n * @public\n */\nexport function formspec<const Elements extends readonly FormElement[]>(\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspec(...elements);\n}\n\n/**\n * Creates a complete form specification with validation options.\n *\n * @public\n */\nexport function formspecWithValidation<const Elements extends readonly FormElement[]>(\n options: FormSpecOptions,\n ...elements: Elements\n): FormSpec<Elements> {\n return dslFormspecWithValidation(options, ...elements);\n}\n\n/**\n * Infers the value type from a single field.\n *\n * @public\n */\nexport type InferFieldValue<F> =\n F extends TextField<string>\n ? string\n : F extends NumberField<string>\n ? number\n : F extends BooleanField<string>\n ? boolean\n : F extends StaticEnumField<string, infer O extends readonly EnumOptionValue[]>\n ? O extends readonly EnumOption[]\n ? O[number][\"id\"]\n : O extends readonly string[]\n ? O[number]\n : never\n : F extends DynamicEnumField<string, infer Source>\n ? DataSourceValueType<Source>\n : F extends DynamicSchemaField<string>\n ? Record<string, unknown>\n : F extends ArrayField<string, infer Items extends readonly FormElement[]>\n ? InferSchema<Items>[]\n : F extends ObjectField<string, infer Properties extends readonly FormElement[]>\n ? InferSchema<Properties>\n : never;\n\n/**\n * Extracts all fields from a single element.\n *\n * @public\n */\nexport type ExtractFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts fields from an array of elements.\n *\n * @public\n */\nexport type ExtractFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractFields<First> | ExtractFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are not inside conditionals.\n *\n * @public\n */\nexport type ExtractNonConditionalFields<E> = E extends AnyField\n ? E\n : E extends Group<infer Elements>\n ? ExtractNonConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer _Elements>\n ? never\n : never;\n\n/**\n * Extracts non-conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractNonConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractNonConditionalFields<First> | ExtractNonConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Extracts fields that are inside conditionals.\n *\n * @public\n */\nexport type ExtractConditionalFields<E> = E extends AnyField\n ? never\n : E extends Group<infer Elements>\n ? ExtractConditionalFieldsFromArray<Elements>\n : E extends Conditional<string, unknown, infer Elements>\n ? ExtractFieldsFromArray<Elements>\n : never;\n\n/**\n * Extracts conditional fields from an array of elements.\n *\n * @public\n */\nexport type ExtractConditionalFieldsFromArray<Elements> = Elements extends readonly [\n infer First,\n ...infer Rest,\n]\n ? ExtractConditionalFields<First> | ExtractConditionalFieldsFromArray<Rest>\n : never;\n\n/**\n * Builds a schema type from extracted fields.\n *\n * @public\n */\nexport type BuildSchema<Fields> = {\n [N in Fields extends { name: infer K extends string } ? K : never]: InferFieldValue<\n Extract<Fields, { name: N } & AnyField>\n >;\n};\n\n/**\n * Utility type that flattens intersection types.\n *\n * @public\n */\nexport type FlattenIntersection<T> = {\n [K in keyof T]: T[K];\n} & {};\n\n/**\n * Infers the schema type from an array of form elements.\n *\n * @public\n */\nexport type InferSchema<Elements extends readonly FormElement[]> = FlattenIntersection<\n BuildSchema<ExtractNonConditionalFieldsFromArray<Elements>> &\n Partial<BuildSchema<ExtractConditionalFieldsFromArray<Elements>>>\n>;\n\n/**\n * Infers the schema type from a FormSpec.\n *\n * @public\n */\nexport type InferFormSchema<F extends FormSpec<readonly FormElement[]>> =\n F extends FormSpec<infer Elements> ? InferSchema<Elements> : never;\n\n/**\n * Generates a JSON Schema 2020-12 from a FormSpec.\n *\n * @public\n */\nexport function generateJsonSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateJsonSchemaOptions\n): JsonSchema2020 {\n return generateJsonSchemaInternal(form, options);\n}\n\n/**\n * Generates a UI schema from a FormSpec.\n *\n * @public\n */\nexport function generateUiSchema<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: GenerateUiSchemaOptions\n): UISchema {\n return generateUiSchemaInternal(form, options);\n}\n\n/**\n * Builds both JSON Schema and UI Schema from a FormSpec.\n *\n * @public\n */\nexport function buildFormSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options?: BuildFormSchemasOptions\n): BuildResult {\n return buildFormSchemasInternal(form, options);\n}\n\n/**\n * Builds and writes both JSON Schema and UI Schema files to disk.\n *\n * @public\n */\nexport function writeSchemas<E extends readonly FormElement[]>(\n form: FormSpec<E>,\n options: WriteSchemasOptions\n): WriteSchemasResult {\n return writeSchemasInternal(form, options);\n}\n\n/**\n * Defines resolvers for a form's dynamic data sources.\n *\n * @public\n */\nexport function defineResolvers<\n E extends readonly FormElement[],\n Sources extends string = ResolverSourcesForForm<E>,\n>(form: FormSpec<E>, resolvers: ResolverMap<Sources>): ResolverRegistry<Sources> {\n return defineResolversInternal(form, resolvers);\n}\n\n/**\n * Validates a list of form elements for duplicate names and structural issues.\n *\n * @public\n */\nexport function validateForm(elements: readonly FormElement[]): ValidationResult {\n return dslValidateForm(elements);\n}\n"],"mappings":";AA8IA,SAAS,yBAAyB,kBAAkB;AAIpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,SAAS,2BAA2B;AACpC;AAAA,EACE,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,gBAAgB;AAAA,OAEX;AAoFP;AAAA,EACE,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,OASX;AA6BP;AAAA,EACE,mBAAmB;AAAA,OAId;AArDA,IAAM,QAAQ;AAyEd,SAAS,MACd,UACG,UACc;AACjB,SAAO,SAAS,OAAO,GAAG,QAAQ;AACpC;AAOO,SAAS,KAId,cAA+B,UAAiD;AAChF,SAAO,QAAQ,WAAW,GAAG,QAAQ;AACvC;AAOO,SAAS,GAAoCA,QAAU,OAAiC;AAC7F,SAAO,MAAMA,QAAO,KAAK;AAC3B;AAOO,SAAS,YACX,UACiB;AACpB,SAAO,YAAY,GAAG,QAAQ;AAChC;AAOO,SAAS,uBACd,YACG,UACiB;AACpB,SAAO,0BAA0B,SAAS,GAAG,QAAQ;AACvD;AAoJO,SAAS,mBACd,MACA,SACgB;AAChB,SAAO,2BAA2B,MAAM,OAAO;AACjD;AAOO,SAAS,iBACd,MACA,SACU;AACV,SAAO,yBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,iBACd,MACA,SACa;AACb,SAAO,yBAAyB,MAAM,OAAO;AAC/C;AAOO,SAAS,aACd,MACA,SACoB;AACpB,SAAO,qBAAqB,MAAM,OAAO;AAC3C;AAOO,SAAS,gBAGd,MAAmB,WAA4D;AAC/E,SAAO,wBAAwB,MAAM,SAAS;AAChD;AAOO,SAAS,aAAa,UAAoD;AAC/E,SAAO,gBAAgB,QAAQ;AACjC;","names":["field"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formspec",
3
- "version": "0.1.0-alpha.52",
3
+ "version": "0.1.0-alpha.53",
4
4
  "description": "Type-safe form specifications that compile to JSON Schema and JSON Forms UI Schema",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -19,10 +19,10 @@
19
19
  "LICENSE"
20
20
  ],
21
21
  "dependencies": {
22
- "@formspec/dsl": "0.1.0-alpha.45",
23
- "@formspec/build": "0.1.0-alpha.52",
24
- "@formspec/core": "0.1.0-alpha.45",
25
- "@formspec/runtime": "0.1.0-alpha.45"
22
+ "@formspec/core": "0.1.0-alpha.53",
23
+ "@formspec/dsl": "0.1.0-alpha.53",
24
+ "@formspec/build": "0.1.0-alpha.53",
25
+ "@formspec/runtime": "0.1.0-alpha.53"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"