@builder-builder/builder 0.0.3 → 0.0.4

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.
@@ -1,4 +1,5 @@
1
1
  import * as v from 'valibot';
2
+ import { BuilderParameter } from '../parameter.js';
2
3
  export class BuilderSelectType {
3
4
  options;
4
5
  valueSchema;
@@ -23,8 +24,11 @@ export class BuilderSelectType {
23
24
  return new BuilderSelectType(this.options, this.valueSchema, this.defaultValue, this.isOptional, optionLabels);
24
25
  }
25
26
  }
26
- export function select(values) {
27
+ function createSelect(values) {
27
28
  const [defaultValue] = values;
28
29
  const valueSchema = v.union(values.map((value) => v.literal(value)));
29
30
  return new BuilderSelectType(values, valueSchema, defaultValue, false);
30
31
  }
32
+ export const select = Object.assign(createSelect, {
33
+ parameter: () => new BuilderParameter()
34
+ });
@@ -0,0 +1,35 @@
1
+ import type { BuilderState, BuilderStateMerge } from './builder';
2
+ import type { BuilderOption, BuilderOptionEntries, BuilderOptionValues, BuilderOptionWhenConfig } from './option/index';
3
+ export declare class BuilderParameter {
4
+ readonly parameter: true;
5
+ }
6
+ export declare function bindOptions<Bindings extends Record<string, unknown>>(options: BuilderOptionEntries, bindings: Bindings): BuilderOptionEntries;
7
+ export type ParameterisedOptions<Options extends BuilderOptionEntries> = {
8
+ [K in keyof Options]: Options[K] extends BuilderOption<infer Name, infer Values> ? Values extends BuilderParameter ? BuilderOption<Name, Values> : never : never;
9
+ }[number];
10
+ export type BuilderBindings<State extends BuilderState> = {
11
+ readonly [P in ParameterisedOptions<State['options']> as P['name']]?: BuilderOptionValues | BuilderOptionWhenConfig;
12
+ };
13
+ export type ReplaceOption<Options extends BuilderOptionEntries, BoundNames extends string> = Options extends readonly [
14
+ infer Head extends BuilderOption,
15
+ ...infer Tail extends BuilderOptionEntries
16
+ ] ? Head extends BuilderOption<infer Name, infer Values> ? Values extends BuilderParameter ? Name extends BoundNames ? [...ReplaceOption<Tail, BoundNames>] : [Head, ...ReplaceOption<Tail, BoundNames>] : [Head, ...ReplaceOption<Tail, BoundNames>] : [Head, ...ReplaceOption<Tail, BoundNames>] : [];
17
+ type BindingModelType<Binding> = Binding extends {
18
+ readonly type: 'match';
19
+ readonly selectMap: infer SelectMap extends Record<string, unknown>;
20
+ } ? NonNullable<SelectMap[keyof SelectMap]> extends {
21
+ readonly value: infer Value;
22
+ } ? Value | null : string | null : Binding extends {
23
+ readonly values: infer Values;
24
+ } ? Values extends {
25
+ readonly value: infer Value;
26
+ } ? Value | null : string | null : Binding extends {
27
+ readonly value: infer Value;
28
+ } ? Value : string;
29
+ export type BuilderBoundState<State extends BuilderState, Bindings extends Record<string, unknown>> = BuilderStateMerge<State, {
30
+ options: ReplaceOption<State['options'], Extract<keyof Bindings, string>>;
31
+ model: Omit<State['model'], keyof Bindings> & {
32
+ [K in Extract<keyof Bindings, string>]: BindingModelType<Bindings[K]>;
33
+ };
34
+ }>;
35
+ export {};
@@ -0,0 +1,25 @@
1
+ export class BuilderParameter {
2
+ parameter = true;
3
+ }
4
+ function createOption(option, values, config) {
5
+ const OptionConstructor = option.constructor;
6
+ return new OptionConstructor(option.name, values, option.gatePaths, config);
7
+ }
8
+ function isWhenConfig(binding) {
9
+ return typeof binding === 'object' && binding !== null && 'type' in binding;
10
+ }
11
+ function bindOption(option, binding) {
12
+ if (isWhenConfig(binding)) {
13
+ return createOption(option, binding.values, binding);
14
+ }
15
+ return createOption(option, binding, option.config);
16
+ }
17
+ export function bindOptions(options, bindings) {
18
+ return options.map((option) => {
19
+ const binding = bindings[option.name];
20
+ if (binding === undefined) {
21
+ return option;
22
+ }
23
+ return bindOption(option, binding);
24
+ });
25
+ }
package/dist/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export type { BuilderUI, BuilderUIFactory, BuilderUIPart, BuilderUIParts } from
10
10
  export type { BuilderCollectionSerialised, BuilderCollectionWhenConfigSerialised, BuilderComponentSerialised, BuilderOptionSerialised, BuilderOptionWhenConfigSerialised, BuilderSelectTypeSerialised, BuilderSerialised, BuilderToggleTypeSerialised, BuilderUISerialised, BuilderValuesSerialised } from './serialise/index';
11
11
  export { BuilderExpectation } from './assert/expectation.js';
12
12
  export { assert, component, option } from './assert/index.js';
13
- export { builder, BuilderCollection, BuilderComponent, BuilderOption, BuilderSelectType, BuilderToggleType, collection, enable, match, select, toggleBoolean, toggleNumber, toggleString, unless } from './core/index.js';
13
+ export { builder, BuilderCollection, BuilderComponent, BuilderOption, BuilderParameter, BuilderSelectType, BuilderToggleType, collection, enable, match, select, toggleBoolean, toggleNumber, toggleString, unless } from './core/index.js';
14
14
  export { instance, models, order, ordinal, render, validate } from './resolve/index.js';
15
15
  export { deserialise, serialise } from './serialise/index.js';
16
16
  export { ui } from './ui.js';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { BuilderExpectation } from './assert/expectation.js';
2
2
  export { assert, component, option } from './assert/index.js';
3
- export { builder, BuilderCollection, BuilderComponent, BuilderOption, BuilderSelectType, BuilderToggleType, collection, enable, match, select, toggleBoolean, toggleNumber, toggleString, unless } from './core/index.js';
3
+ export { builder, BuilderCollection, BuilderComponent, BuilderOption, BuilderParameter, BuilderSelectType, BuilderToggleType, collection, enable, match, select, toggleBoolean, toggleNumber, toggleString, unless } from './core/index.js';
4
4
  export { instance, models, order, ordinal, render, validate } from './resolve/index.js';
5
5
  export { deserialise, serialise } from './serialise/index.js';
6
6
  export { ui } from './ui.js';
package/dist/paths.d.ts CHANGED
@@ -2,9 +2,9 @@ export type { BuilderPath, BuilderPaths } from './schemas/index';
2
2
  import type { BuilderGeneric, BuilderModelOf } from './core/index';
3
3
  import type { BuilderPath, BuilderPrimitive } from './schemas/index';
4
4
  export type BuilderValidPath<Model, Depth extends ReadonlyArray<never> = []> = Depth['length'] extends 10 ? never : Model extends BuilderPrimitive | null ? never : Model extends ReadonlyArray<infer Item> ? [number] | [number, ...BuilderValidPath<Item, [...Depth, never]>] : {
5
- [K in keyof Model & string]: [K] | (Model[K] extends BuilderPrimitive | null ? never : [K, ...BuilderValidPath<Model[K], [...Depth, never]>]);
5
+ [Key in keyof Model & string]: [Key] | (Model[Key] extends BuilderPrimitive | null ? never : [Key, ...BuilderValidPath<Model[Key], [...Depth, never]>]);
6
6
  }[keyof Model & string];
7
- export type BuilderModelPaths<B extends BuilderGeneric> = ReadonlyArray<BuilderValidPath<BuilderModelOf<B>>>;
7
+ export type BuilderModelPaths<Builder extends BuilderGeneric> = ReadonlyArray<BuilderValidPath<BuilderModelOf<Builder>>>;
8
8
  export type BuilderResolvePath<Model, Path extends BuilderPath> = Path extends readonly [
9
9
  infer Head extends keyof Model & string
10
10
  ] ? Model[Head] : Path extends readonly [
@@ -1,3 +1,3 @@
1
1
  import type { BuilderGeneric, BuilderModelOf } from '../core/index';
2
2
  import type { BuilderModelMutable } from '../config';
3
- export declare function instance<const B extends BuilderGeneric>(builder: B, partial?: BuilderModelMutable): BuilderModelOf<B>;
3
+ export declare function instance<const Builder extends BuilderGeneric>(builder: Builder, partial?: BuilderModelMutable): BuilderModelOf<Builder>;
@@ -1,11 +1,11 @@
1
1
  import type { BuilderModel, BuilderVariant } from '../config';
2
2
  import type { BuilderCollection, BuilderCollectionEntries, BuilderComponentEntries, BuilderComponentNamesOf, BuilderGeneric, BuilderTupleOf } from '../core/index';
3
3
  import type { BuilderDataValidated } from './validate';
4
- export type BuilderOrder<B extends BuilderGeneric> = B extends {
4
+ export type BuilderOrder<Builder extends BuilderGeneric> = Builder extends {
5
5
  readonly _components: infer Components extends BuilderComponentEntries;
6
6
  readonly _collections: infer Collections extends BuilderCollectionEntries;
7
7
  } ? Prettify<ComponentsOrder<Components> & CollectionsOrder<Collections>> : Record<string, unknown>;
8
- export declare function order<const B extends BuilderGeneric>(builder: B, model: BuilderModel, componentModels: BuilderDataValidated): BuilderOrder<B>;
8
+ export declare function order<const Builder extends BuilderGeneric>(builder: Builder, model: BuilderModel, componentModels: BuilderDataValidated): BuilderOrder<Builder>;
9
9
  import type { Prettify } from '../prettify';
10
10
  type ComponentsOrder<Components extends BuilderComponentEntries> = {
11
11
  readonly [Name in BuilderComponentNamesOf<Components>]: BuilderVariant | null;
@@ -4,7 +4,7 @@ export type { BuilderLayout, BuilderLayoutOption, BuilderLayoutOptions, BuilderL
4
4
  export { BuilderLayoutOptionSchema, BuilderLayoutOptionsSchema, BuilderLayoutPageSchema, BuilderLayoutSchema } from './layout.js';
5
5
  export type { BuilderPath, BuilderPaths, BuilderPrimitive, BuilderPrimitives } from './primitives';
6
6
  export { BuilderPathSchema, BuilderPathsSchema, BuilderPrimitiveSchema, BuilderPrimitivesSchema } from './primitives.js';
7
- export type { BuilderCollectionSerialised, BuilderCollectionConfigSerialised, BuilderCollectionEnableConfigSerialised, BuilderCollectionMatchConfigSerialised, BuilderCollectionUnlessConfigSerialised, BuilderCollectionWhenConfigSerialised, BuilderComponentSerialised, BuilderValuesSerialised, BuilderOptionSerialised, BuilderOptionEnableConfigSerialised, BuilderOptionMatchConfigSerialised, BuilderOptionUnlessConfigSerialised, BuilderOptionWhenConfigSerialised, BuilderSerialised, BuilderSelectTypeSerialised, BuilderToggleTypeSerialised, BuilderUISerialised, BuilderUIDescribeSerialised, BuilderUICollectionSerialised, BuilderUIItemSerialised, BuilderUIItemsSerialised, BuilderUIPageSerialised } from './serialise';
8
- export { BuilderCollectionConfigSerialisedSchema, BuilderCollectionEnableConfigSerialisedSchema, BuilderCollectionMatchConfigSerialisedSchema, BuilderCollectionSerialisedSchema, BuilderCollectionUnlessConfigSerialisedSchema, BuilderCollectionWhenConfigSerialisedSchema, BuilderComponentSerialisedSchema, BuilderValuesSerialisedSchema, BuilderOptionEnableConfigSerialisedSchema, BuilderOptionMatchConfigSerialisedSchema, BuilderOptionSerialisedSchema, BuilderOptionUnlessConfigSerialisedSchema, BuilderOptionWhenConfigSerialisedSchema, BuilderSerialisedSchema, BuilderSelectTypeSerialisedSchema, BuilderToggleTypeSerialisedSchema, BuilderUIDescribeSerialisedSchema, BuilderUICollectionSerialisedSchema, BuilderUIItemSerialisedSchema, BuilderUIItemsSerialisedSchema, BuilderUIPageSerialisedSchema } from './serialise.js';
9
- export type { BuilderUIDescribe, BuilderUICollection, BuilderUIItem, BuilderUIItems, BuilderUIPage } from './ui';
10
- export { BuilderUIDescribeSchema, BuilderUICollectionSchema, BuilderUIItemSchema, BuilderUIItemsSchema, BuilderUIPageSchema } from './ui.js';
7
+ export type { BuilderCollectionConfigSerialised, BuilderCollectionEnableConfigSerialised, BuilderCollectionMatchConfigSerialised, BuilderCollectionSerialised, BuilderCollectionUnlessConfigSerialised, BuilderCollectionWhenConfigSerialised, BuilderComponentSerialised, BuilderOptionEnableConfigSerialised, BuilderOptionMatchConfigSerialised, BuilderOptionSerialised, BuilderOptionUnlessConfigSerialised, BuilderOptionValues, BuilderOptionValuesMap, BuilderOptionWhenConfigSerialised, BuilderSelectTypeSerialised, BuilderSerialised, BuilderToggleTypeSerialised, BuilderUICollectionSerialised, BuilderUIDescribeSerialised, BuilderUIItemSerialised, BuilderUIItemsSerialised, BuilderUIPageSerialised, BuilderUISerialised, BuilderParameterSerialised, BuilderValuesSerialised } from './serialise';
8
+ export { BuilderCollectionConfigSerialisedSchema, BuilderCollectionEnableConfigSerialisedSchema, BuilderCollectionMatchConfigSerialisedSchema, BuilderCollectionSerialisedSchema, BuilderCollectionUnlessConfigSerialisedSchema, BuilderCollectionWhenConfigSerialisedSchema, BuilderComponentSerialisedSchema, BuilderOptionEnableConfigSerialisedSchema, BuilderOptionMatchConfigSerialisedSchema, BuilderOptionSerialisedSchema, BuilderOptionUnlessConfigSerialisedSchema, BuilderOptionValuesMapSchema, BuilderOptionValuesSchema, BuilderOptionWhenConfigSerialisedSchema, BuilderParameterSchema, BuilderSelectTypeSerialisedSchema, BuilderSerialisedSchema, BuilderToggleTypeSerialisedSchema, BuilderUICollectionSerialisedSchema, BuilderUIDescribeSerialisedSchema, BuilderUIItemSerialisedSchema, BuilderUIItemsSerialisedSchema, BuilderUIPageSerialisedSchema, BuilderValuesSerialisedSchema } from './serialise.js';
9
+ export type { BuilderUICollection, BuilderUIDescribe, BuilderUIItem, BuilderUIItems, BuilderUIPage } from './ui';
10
+ export { BuilderUICollectionSchema, BuilderUIDescribeSchema, BuilderUIItemSchema, BuilderUIItemsSchema, BuilderUIPageSchema } from './ui.js';
@@ -1,5 +1,5 @@
1
1
  export { BuilderDescriptionItemSchema, BuilderDescriptionSchema } from './description.js';
2
2
  export { BuilderLayoutOptionSchema, BuilderLayoutOptionsSchema, BuilderLayoutPageSchema, BuilderLayoutSchema } from './layout.js';
3
3
  export { BuilderPathSchema, BuilderPathsSchema, BuilderPrimitiveSchema, BuilderPrimitivesSchema } from './primitives.js';
4
- export { BuilderCollectionConfigSerialisedSchema, BuilderCollectionEnableConfigSerialisedSchema, BuilderCollectionMatchConfigSerialisedSchema, BuilderCollectionSerialisedSchema, BuilderCollectionUnlessConfigSerialisedSchema, BuilderCollectionWhenConfigSerialisedSchema, BuilderComponentSerialisedSchema, BuilderValuesSerialisedSchema, BuilderOptionEnableConfigSerialisedSchema, BuilderOptionMatchConfigSerialisedSchema, BuilderOptionSerialisedSchema, BuilderOptionUnlessConfigSerialisedSchema, BuilderOptionWhenConfigSerialisedSchema, BuilderSerialisedSchema, BuilderSelectTypeSerialisedSchema, BuilderToggleTypeSerialisedSchema, BuilderUIDescribeSerialisedSchema, BuilderUICollectionSerialisedSchema, BuilderUIItemSerialisedSchema, BuilderUIItemsSerialisedSchema, BuilderUIPageSerialisedSchema } from './serialise.js';
5
- export { BuilderUIDescribeSchema, BuilderUICollectionSchema, BuilderUIItemSchema, BuilderUIItemsSchema, BuilderUIPageSchema } from './ui.js';
4
+ export { BuilderCollectionConfigSerialisedSchema, BuilderCollectionEnableConfigSerialisedSchema, BuilderCollectionMatchConfigSerialisedSchema, BuilderCollectionSerialisedSchema, BuilderCollectionUnlessConfigSerialisedSchema, BuilderCollectionWhenConfigSerialisedSchema, BuilderComponentSerialisedSchema, BuilderOptionEnableConfigSerialisedSchema, BuilderOptionMatchConfigSerialisedSchema, BuilderOptionSerialisedSchema, BuilderOptionUnlessConfigSerialisedSchema, BuilderOptionValuesMapSchema, BuilderOptionValuesSchema, BuilderOptionWhenConfigSerialisedSchema, BuilderParameterSchema, BuilderSelectTypeSerialisedSchema, BuilderSerialisedSchema, BuilderToggleTypeSerialisedSchema, BuilderUICollectionSerialisedSchema, BuilderUIDescribeSerialisedSchema, BuilderUIItemSerialisedSchema, BuilderUIItemsSerialisedSchema, BuilderUIPageSerialisedSchema, BuilderValuesSerialisedSchema } from './serialise.js';
5
+ export { BuilderUICollectionSchema, BuilderUIDescribeSchema, BuilderUIItemSchema, BuilderUIItemsSchema, BuilderUIPageSchema } from './ui.js';