@builder-builder/builder 0.0.3 → 0.0.5

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.
Files changed (71) hide show
  1. package/dist/check.d.ts +8 -0
  2. package/dist/check.js +18 -0
  3. package/dist/core/builder.d.ts +31 -22
  4. package/dist/core/builder.js +73 -27
  5. package/dist/core/collection/collection.d.ts +9 -12
  6. package/dist/core/collection/collection.js +9 -27
  7. package/dist/core/collection/index.d.ts +1 -1
  8. package/dist/core/collection/method.d.ts +22 -43
  9. package/dist/core/component/component.d.ts +1 -4
  10. package/dist/core/component/graph.d.ts +0 -3
  11. package/dist/core/component/graph.js +7 -9
  12. package/dist/core/component/method.d.ts +7 -9
  13. package/dist/core/expectation.d.ts +39 -0
  14. package/dist/{assert → core}/expectation.js +3 -2
  15. package/dist/core/graph.d.ts +2 -1
  16. package/dist/core/graph.js +3 -1
  17. package/dist/core/index.d.ts +8 -4
  18. package/dist/core/index.js +3 -1
  19. package/dist/core/option/graph.js +7 -5
  20. package/dist/core/option/method.d.ts +60 -42
  21. package/dist/core/option/method.js +7 -3
  22. package/dist/core/option/option.d.ts +14 -7
  23. package/dist/core/option/option.js +15 -23
  24. package/dist/core/option/select.d.ts +6 -1
  25. package/dist/core/option/select.js +5 -1
  26. package/dist/core/parameter.d.ts +48 -0
  27. package/dist/core/parameter.js +31 -0
  28. package/dist/core/when/config.d.ts +20 -0
  29. package/dist/core/when/config.js +4 -0
  30. package/dist/core/when/constrain.d.ts +14 -0
  31. package/dist/core/when/index.d.ts +5 -0
  32. package/dist/core/when/index.js +2 -0
  33. package/dist/core/when/nullability.d.ts +18 -0
  34. package/dist/core/when/nullability.js +1 -0
  35. package/dist/core/when/resolve.d.ts +18 -0
  36. package/dist/core/when/resolve.js +22 -0
  37. package/dist/index.d.ts +7 -10
  38. package/dist/index.js +2 -3
  39. package/dist/{config.d.ts → model.d.ts} +1 -1
  40. package/dist/model.js +1 -0
  41. package/dist/paths.d.ts +4 -3
  42. package/dist/resolve/index.d.ts +2 -2
  43. package/dist/resolve/instance.d.ts +2 -2
  44. package/dist/resolve/models.d.ts +1 -1
  45. package/dist/resolve/order.d.ts +7 -6
  46. package/dist/resolve/render.d.ts +4 -4
  47. package/dist/resolve/render.js +49 -60
  48. package/dist/resolve/validate.d.ts +6 -5
  49. package/dist/resolve/validate.js +5 -4
  50. package/dist/schemas/index.d.ts +2 -6
  51. package/dist/schemas/index.js +1 -3
  52. package/dist/serialise/deserialise.js +11 -6
  53. package/dist/serialise/index.d.ts +2 -2
  54. package/dist/serialise/index.js +1 -1
  55. package/dist/{schemas/serialise.d.ts → serialise/schemas.d.ts} +1050 -242
  56. package/dist/{schemas/serialise.js → serialise/schemas.js} +47 -47
  57. package/dist/serialise/serialise.d.ts +1 -1
  58. package/dist/serialise/serialise.js +19 -2
  59. package/dist/ui.d.ts +12 -12
  60. package/dist/ui.js +23 -16
  61. package/package.json +1 -1
  62. package/dist/assert/assert.d.ts +0 -28
  63. package/dist/assert/assert.js +0 -28
  64. package/dist/assert/expectation.d.ts +0 -20
  65. package/dist/assert/index.d.ts +0 -3
  66. package/dist/assert/index.js +0 -2
  67. package/dist/invariant.d.ts +0 -1
  68. package/dist/invariant.js +0 -6
  69. package/dist/schemas/layout.d.ts +0 -52
  70. package/dist/schemas/layout.js +0 -6
  71. /package/dist/{config.js → core/when/constrain.js} +0 -0
@@ -1,56 +1,51 @@
1
1
  import * as v from 'valibot';
2
- import { BuilderPathSchema, BuilderPathsSchema, BuilderPrimitiveSchema } from './primitives.js';
3
- const BuilderSerialisedSelectTypeObject = v.object({
2
+ import { BuilderParameterSchema } from '../core/parameter.js';
3
+ import { BuilderOptionValuesMapSchema, BuilderOptionValuesSchema } from '../core/option/option.js';
4
+ import { BuilderPathSchema, BuilderPathsSchema, BuilderPrimitiveSchema } from '../schemas/primitives.js';
5
+ export { BuilderOptionValuesMapSchema, BuilderOptionValuesSchema, BuilderParameterSchema };
6
+ export const BuilderSelectTypeSerialisedSchema = v.pipe(v.object({
4
7
  type: v.literal('select'),
5
8
  options: v.pipe(v.tupleWithRest([v.string()], v.string()), v.readonly()),
6
9
  defaultValue: v.nullable(v.string()),
7
10
  optional: v.boolean(),
8
11
  labels: v.record(v.string(), v.string())
9
- });
10
- const BuilderSerialisedToggleTypeObject = v.object({
12
+ }), v.readonly());
13
+ export const BuilderToggleTypeSerialisedSchema = v.pipe(v.object({
11
14
  type: v.literal('toggle'),
12
15
  valueType: v.string(),
13
16
  defaultValue: v.nullable(v.union([v.boolean(), v.string(), v.number()])),
14
17
  optional: v.boolean()
15
- });
16
- export const BuilderSelectTypeSerialisedSchema = v.pipe(BuilderSerialisedSelectTypeObject, v.readonly());
17
- export const BuilderToggleTypeSerialisedSchema = v.pipe(BuilderSerialisedToggleTypeObject, v.readonly());
18
- export const BuilderValuesSerialisedSchema = v.pipe(v.variant('type', [BuilderSerialisedSelectTypeObject, BuilderSerialisedToggleTypeObject]), v.readonly());
19
- const BuilderSerialisedOptionEnableConfigObject = v.object({
18
+ }), v.readonly());
19
+ export const BuilderParameterSerialisedSchema = v.pipe(v.object({ type: v.literal('parameter') }), v.readonly());
20
+ export const BuilderValuesSerialisedSchema = v.pipe(v.variant('type', [BuilderSelectTypeSerialisedSchema, BuilderToggleTypeSerialisedSchema]), v.readonly());
21
+ export const BuilderOptionEnableConfigSerialisedSchema = v.pipe(v.object({
20
22
  type: v.literal('enable'),
21
- values: v.variant('type', [BuilderSerialisedSelectTypeObject, BuilderSerialisedToggleTypeObject])
22
- });
23
- const BuilderSerialisedOptionMatchConfigObject = v.object({
23
+ values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema])
24
+ }), v.readonly());
25
+ export const BuilderOptionMatchConfigSerialisedSchema = v.pipe(v.object({
24
26
  type: v.literal('match'),
25
27
  matchPath: BuilderPathSchema,
26
- selectMap: v.record(v.string(), v.nullable(v.variant('type', [BuilderSerialisedSelectTypeObject, BuilderSerialisedToggleTypeObject])))
27
- });
28
- const BuilderSerialisedOptionUnlessConfigObject = v.object({
28
+ selectMap: v.union([
29
+ v.record(v.string(), v.nullable(BuilderValuesSerialisedSchema)),
30
+ BuilderParameterSerialisedSchema
31
+ ])
32
+ }), v.readonly());
33
+ export const BuilderOptionUnlessConfigSerialisedSchema = v.pipe(v.object({
29
34
  type: v.literal('unless'),
30
35
  unlessPath: BuilderPathSchema,
31
36
  disabledValues: v.pipe(v.array(BuilderPrimitiveSchema), v.readonly()),
32
- values: v.variant('type', [BuilderSerialisedSelectTypeObject, BuilderSerialisedToggleTypeObject])
33
- });
34
- export const BuilderOptionEnableConfigSerialisedSchema = v.pipe(BuilderSerialisedOptionEnableConfigObject, v.readonly());
35
- export const BuilderOptionMatchConfigSerialisedSchema = v.pipe(BuilderSerialisedOptionMatchConfigObject, v.readonly());
36
- export const BuilderOptionUnlessConfigSerialisedSchema = v.pipe(BuilderSerialisedOptionUnlessConfigObject, v.readonly());
37
+ values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema])
38
+ }), v.readonly());
37
39
  export const BuilderOptionWhenConfigSerialisedSchema = v.pipe(v.variant('type', [
38
- BuilderSerialisedOptionEnableConfigObject,
39
- BuilderSerialisedOptionMatchConfigObject,
40
- BuilderSerialisedOptionUnlessConfigObject
40
+ BuilderOptionEnableConfigSerialisedSchema,
41
+ BuilderOptionMatchConfigSerialisedSchema,
42
+ BuilderOptionUnlessConfigSerialisedSchema
41
43
  ]), v.readonly());
42
44
  export const BuilderOptionSerialisedSchema = v.pipe(v.object({
43
45
  name: v.string(),
44
- values: v.variant('type', [
45
- BuilderSerialisedSelectTypeObject,
46
- BuilderSerialisedToggleTypeObject
47
- ]),
46
+ values: v.union([BuilderValuesSerialisedSchema, BuilderParameterSerialisedSchema]),
48
47
  gatePaths: BuilderPathsSchema,
49
- config: v.nullable(v.variant('type', [
50
- BuilderSerialisedOptionEnableConfigObject,
51
- BuilderSerialisedOptionMatchConfigObject,
52
- BuilderSerialisedOptionUnlessConfigObject
53
- ]))
48
+ config: v.nullable(BuilderOptionWhenConfigSerialisedSchema)
54
49
  }), v.readonly());
55
50
  export const BuilderComponentSerialisedSchema = v.pipe(v.object({
56
51
  name: v.string(),
@@ -82,15 +77,6 @@ const BuilderSerialisedCollectionUnlessConfigObject = v.object({
82
77
  min: v.number(),
83
78
  max: v.number()
84
79
  });
85
- export const BuilderCollectionConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionConfigObject, v.readonly());
86
- export const BuilderCollectionEnableConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionEnableConfigObject, v.readonly());
87
- export const BuilderCollectionMatchConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionMatchConfigObject, v.readonly());
88
- export const BuilderCollectionUnlessConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionUnlessConfigObject, v.readonly());
89
- export const BuilderCollectionWhenConfigSerialisedSchema = v.pipe(v.variant('type', [
90
- BuilderSerialisedCollectionEnableConfigObject,
91
- BuilderSerialisedCollectionMatchConfigObject,
92
- BuilderSerialisedCollectionUnlessConfigObject
93
- ]), v.readonly());
94
80
  const BuilderSerialisedCollectionObject = v.object({
95
81
  name: v.string(),
96
82
  builder: lazyBuilder(),
@@ -103,12 +89,6 @@ const BuilderSerialisedCollectionObject = v.object({
103
89
  BuilderSerialisedCollectionUnlessConfigObject
104
90
  ]))
105
91
  });
106
- export const BuilderCollectionSerialisedSchema = v.pipe(BuilderSerialisedCollectionObject, v.readonly());
107
- export const BuilderSerialisedSchema = v.pipe(v.object({
108
- options: v.pipe(v.array(BuilderOptionSerialisedSchema), v.readonly()),
109
- components: v.pipe(v.array(BuilderComponentSerialisedSchema), v.readonly()),
110
- collections: v.pipe(v.array(BuilderSerialisedCollectionObject), v.readonly())
111
- }), v.readonly());
112
92
  const BuilderSerialisedUIPageObject = v.object({
113
93
  type: v.literal('page'),
114
94
  label: v.nullable(v.string()),
@@ -126,6 +106,26 @@ const BuilderSerialisedUICollectionObject = v.object({
126
106
  label: v.string(),
127
107
  items: lazySerialisedUIItems()
128
108
  });
109
+ export const BuilderCollectionConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionConfigObject, v.readonly());
110
+ export const BuilderCollectionEnableConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionEnableConfigObject, v.readonly());
111
+ export const BuilderCollectionMatchConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionMatchConfigObject, v.readonly());
112
+ export const BuilderCollectionUnlessConfigSerialisedSchema = v.pipe(BuilderSerialisedCollectionUnlessConfigObject, v.readonly());
113
+ export const BuilderCollectionWhenConfigSerialisedSchema = v.pipe(v.variant('type', [
114
+ BuilderSerialisedCollectionEnableConfigObject,
115
+ BuilderSerialisedCollectionMatchConfigObject,
116
+ BuilderSerialisedCollectionUnlessConfigObject
117
+ ]), v.readonly());
118
+ export const BuilderCollectionSerialisedSchema = v.pipe(BuilderSerialisedCollectionObject, v.readonly());
119
+ export const BuilderExpectationSerialisedSchema = v.pipe(v.object({
120
+ name: v.string(),
121
+ kind: v.picklist(['option', 'component'])
122
+ }), v.readonly());
123
+ export const BuilderSerialisedSchema = v.pipe(v.object({
124
+ options: v.pipe(v.array(BuilderOptionSerialisedSchema), v.readonly()),
125
+ components: v.pipe(v.array(BuilderComponentSerialisedSchema), v.readonly()),
126
+ collections: v.pipe(v.array(BuilderSerialisedCollectionObject), v.readonly()),
127
+ expectations: v.pipe(v.array(BuilderExpectationSerialisedSchema), v.readonly())
128
+ }), v.readonly());
129
129
  export const BuilderUIPageSerialisedSchema = v.pipe(BuilderSerialisedUIPageObject, v.readonly());
130
130
  export const BuilderUIDescribeSerialisedSchema = v.pipe(BuilderSerialisedUIDescribeObject, v.readonly());
131
131
  export const BuilderUICollectionSerialisedSchema = v.pipe(BuilderSerialisedUICollectionObject, v.readonly());
@@ -1,6 +1,6 @@
1
1
  import type { BuilderGeneric } from '../core/index';
2
+ import type { BuilderSerialised, BuilderUISerialised } from './schemas';
2
3
  import type { BuilderUIGeneric } from '../ui';
3
- import type { BuilderSerialised, BuilderUISerialised } from '../schemas/index';
4
4
  export declare const serialise: {
5
5
  builder: typeof serialiseBuilder;
6
6
  ui: typeof serialiseUI;
@@ -1,5 +1,5 @@
1
1
  import * as v from 'valibot';
2
- import { BuilderCollection, BuilderComponent, BuilderOption, BuilderSelectType } from '../core/index.js';
2
+ import { BuilderCollection, BuilderComponent, BuilderOption, BuilderParameter, BuilderParameterSchema, BuilderSelectType } from '../core/index.js';
3
3
  export const serialise = {
4
4
  builder: serialiseBuilder,
5
5
  ui: serialiseUI
@@ -8,7 +8,8 @@ function serialiseBuilder(builder) {
8
8
  return {
9
9
  options: builder.options.map(serialiseOption),
10
10
  components: builder.components.map(serialiseComponent),
11
- collections: builder.collections.map(serialiseCollection)
11
+ collections: builder.collections.map(serialiseCollection),
12
+ expectations: builder.expectations.map(serialiseExpectation)
12
13
  };
13
14
  }
14
15
  function serialiseUI(input) {
@@ -29,6 +30,12 @@ function serialiseComponent(component) {
29
30
  dependencies: component.dependencies
30
31
  };
31
32
  }
33
+ function serialiseExpectation(expectation) {
34
+ return {
35
+ name: expectation.name,
36
+ kind: expectation.kind
37
+ };
38
+ }
32
39
  function serialiseCollection(collection) {
33
40
  return {
34
41
  name: collection.name,
@@ -40,6 +47,9 @@ function serialiseCollection(collection) {
40
47
  };
41
48
  }
42
49
  function serialiseValues(optionValues) {
50
+ if (v.is(BuilderParameterSchema, optionValues)) {
51
+ return { type: 'parameter' };
52
+ }
43
53
  if (v.is(v.instance(BuilderSelectType), optionValues)) {
44
54
  return {
45
55
  type: 'select',
@@ -65,6 +75,13 @@ function serialiseOptionWhenConfig(config) {
65
75
  return { type: 'enable', values: serialiseValues(config.values) };
66
76
  }
67
77
  case 'match': {
78
+ if (v.is(BuilderParameterSchema, config.selectMap)) {
79
+ return {
80
+ type: 'match',
81
+ matchPath: config.matchPath,
82
+ selectMap: { type: 'parameter' }
83
+ };
84
+ }
68
85
  return {
69
86
  type: 'match',
70
87
  matchPath: config.matchPath,
package/dist/ui.d.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  import type { BuilderModelPaths } from './paths';
2
2
  import type { BuilderCollectionNamesOf, BuilderCollectionOf, BuilderGeneric } from './core/index';
3
+ import type { BuilderExpectationEntries, BuilderExpectations, BuilderModelAsserted } from './core/expectation';
3
4
  import type { BuilderUIItems } from './schemas/index';
4
5
  export type BuilderUIGeneric = BuilderUI<BuilderGeneric>;
5
- export type BuilderUIFactory<B extends BuilderGeneric = BuilderGeneric> = (ui: BuilderUI<B>) => BuilderUIGeneric;
6
- export type BuilderUIPart<B extends BuilderGeneric = BuilderGeneric> = BuilderUIGeneric | BuilderUIFactory<B>;
7
- export type BuilderUIParts<B extends BuilderGeneric = BuilderGeneric> = ReadonlyArray<BuilderUIPart<B>>;
8
- export declare class BuilderUI<B extends BuilderGeneric = BuilderGeneric> {
9
- readonly builder: B;
6
+ export type BuilderUIFactory<Builder extends BuilderGeneric = BuilderGeneric> = (ui: BuilderUI<Builder>) => BuilderUIGeneric;
7
+ export type BuilderUIs = ReadonlyArray<BuilderUIGeneric>;
8
+ export declare class BuilderUI<Builder extends BuilderGeneric = BuilderGeneric> {
9
+ readonly builder: Builder;
10
10
  readonly items: BuilderUIItems;
11
- constructor(builder: B, items?: BuilderUIItems);
12
- page(label: string | null, paths: BuilderModelPaths<B>): BuilderUI<B>;
13
- describe(label: string | null, paths: BuilderModelPaths<B>): BuilderUI<B>;
14
- collection<const Name extends BuilderCollectionNamesOf<B>>(name: Name, label: string, factory: BuilderUIFactory<CollectionItemBuilder<B, Name>>): BuilderUI<B>;
11
+ readonly expectations: BuilderExpectationEntries;
12
+ constructor(builder: Builder, items?: BuilderUIItems, expectations?: BuilderExpectationEntries);
13
+ expect<const Expectations extends BuilderExpectations>(...expectations: Expectations): BuilderUI<BuilderModelAsserted<Builder, Expectations>>;
14
+ page(label: string | null, paths: BuilderModelPaths<Builder>): BuilderUI<Builder>;
15
+ describe(label: string | null, paths: BuilderModelPaths<Builder>): BuilderUI<Builder>;
16
+ collection<const Name extends BuilderCollectionNamesOf<Builder>>(name: Name, label: string, factory: BuilderUIFactory<BuilderCollectionOf<Builder, Name>['builder']>): BuilderUI<Builder>;
15
17
  }
16
- export declare function ui<const B extends BuilderGeneric>(builder: B, ...parts: BuilderUIParts<B>): BuilderUI<B>;
17
- type CollectionItemBuilder<BuilderInput extends BuilderGeneric, Name extends string> = BuilderCollectionOf<BuilderInput, Name>['builder'] extends BuilderGeneric ? BuilderCollectionOf<BuilderInput, Name>['builder'] : BuilderGeneric;
18
- export {};
18
+ export declare function ui<const Builder extends BuilderGeneric>(builder: Builder, ...uis: BuilderUIs): BuilderUI<Builder>;
package/dist/ui.js CHANGED
@@ -1,35 +1,42 @@
1
1
  import * as v from 'valibot';
2
- import { invariant } from './invariant.js';
2
+ import { BuilderExpectation } from './core/expectation.js';
3
+ import { check } from './check.js';
3
4
  export class BuilderUI {
4
5
  builder;
5
6
  items;
6
- constructor(builder, items = []) {
7
+ expectations;
8
+ constructor(builder, items = [], expectations = []) {
7
9
  this.builder = builder;
8
10
  this.items = items;
11
+ this.expectations = expectations;
12
+ }
13
+ expect(...expectations) {
14
+ return new BuilderUI(
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- type narrowing cast, validated at merge time
16
+ this.builder, this.items, [...this.expectations, ...expectations]);
9
17
  }
10
18
  page(label, paths) {
11
- return new BuilderUI(this.builder, [...this.items, { type: 'page', label, paths }]);
19
+ return new BuilderUI(this.builder, [...this.items, { type: 'page', label, paths }], this.expectations);
12
20
  }
13
21
  describe(label, paths) {
14
- return new BuilderUI(this.builder, [...this.items, { type: 'describe', label, paths }]);
22
+ return new BuilderUI(this.builder, [...this.items, { type: 'describe', label, paths }], this.expectations);
15
23
  }
16
24
  collection(name, label, factory) {
17
25
  const foundCollection = this.builder.collections.find((entry) => entry.name === name);
18
- invariant(foundCollection, `Collection '${String(name)}' not found! ❌`);
26
+ check.truthy(foundCollection, `Collection '${name}' not found! ❌`);
19
27
  const templateUI = new BuilderUI(foundCollection.builder);
20
28
  const result = factory(templateUI);
21
- return new BuilderUI(this.builder, [
22
- ...this.items,
23
- { type: 'collection', name, label, items: result.items }
24
- ]);
29
+ return new BuilderUI(this.builder, [...this.items, { type: 'collection', name, label, items: result.items }], this.expectations);
25
30
  }
26
31
  }
27
- export function ui(builder, ...parts) {
28
- const base = new BuilderUI(builder);
29
- return parts.reduce((accumulated, part) => {
30
- if (v.is(v.instance(BuilderUI), part)) {
31
- return new BuilderUI(accumulated.builder, [...accumulated.items, ...part.items]);
32
+ export function ui(builder, ...uis) {
33
+ const merged = uis.reduce((accumulated, ui) => {
34
+ return new BuilderUI(accumulated.builder, [...accumulated.items, ...ui.items], [...accumulated.expectations, ...ui.expectations]);
35
+ }, new BuilderUI(builder));
36
+ merged.expectations.forEach((expectation) => {
37
+ if (v.is(v.instance(BuilderExpectation), expectation) && expectation.kind === 'option') {
38
+ expectation.validate(merged.builder.options);
32
39
  }
33
- return new BuilderUI(accumulated.builder, part(accumulated).items);
34
- }, base);
40
+ });
41
+ return merged;
35
42
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder-builder/builder",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,28 +0,0 @@
1
- import type { BuilderStateMerge, BuilderGeneric, BuilderStateOf } from '../core/index';
2
- import type { Prettify } from '../prettify';
3
- import type { BuilderUI } from '../ui';
4
- import type { BuilderExpectations } from './expectation';
5
- import { BuilderComponent, Builder } from '../core/index.js';
6
- import { BuilderExpectation } from './expectation.js';
7
- export type BuilderModelAsserted<BuilderInput extends BuilderGeneric, Items extends BuilderExpectations> = Builder<BuilderStateMerge<BuilderStateOf<BuilderInput>, {
8
- model: ModelAssert<BuilderInput, Items>;
9
- components: ComponentAssert<BuilderInput, Items>;
10
- }>>;
11
- export type BuilderUIModelAsserted<BuilderInput extends BuilderGeneric, Items extends BuilderExpectations> = BuilderUI<BuilderModelAsserted<BuilderInput, Items>>;
12
- declare function assertBuilder<const R extends BuilderGeneric, const Items extends BuilderExpectations>(builder: R, ...items: Items): BuilderModelAsserted<R, Items>;
13
- declare function assertUI<const R extends BuilderGeneric, const Items extends BuilderExpectations>(ui: BuilderUI<R>, ...items: Items): BuilderUIModelAsserted<R, Items>;
14
- export declare const assert: {
15
- builder: typeof assertBuilder;
16
- ui: typeof assertUI;
17
- };
18
- type ModelAssert<BuilderInput extends BuilderGeneric, Items extends BuilderExpectations, Current extends BuilderStateOf<BuilderInput> = BuilderStateOf<BuilderInput>, Asserted extends ExpectedModel<Items> = ExpectedModel<Items>> = unknown extends Current['model'] ? Prettify<Asserted> : Prettify<Current['model'] & Asserted>;
19
- type ComponentAssert<BuilderInput extends BuilderGeneric, Items extends BuilderExpectations, Current extends BuilderStateOf<BuilderInput> = BuilderStateOf<BuilderInput>, Asserted extends ExpectedComponents<Items> = ExpectedComponents<Items>> = Current['components'] extends [] ? ExpectedComponents<Items> : number extends Asserted['length'] ? Asserted : [...Current['components'], ...Asserted];
20
- type ExpectedModel<Items extends ReadonlyArray<BuilderExpectation>> = Items extends readonly [
21
- infer Head,
22
- ...infer Tail extends ReadonlyArray<BuilderExpectation>
23
- ] ? (Head extends BuilderExpectation<infer Name, infer Value> ? [Value] extends [never] ? unknown : Record<Name, Value> : unknown) & ExpectedModel<Tail> : unknown;
24
- type ExpectedComponents<Items extends ReadonlyArray<BuilderExpectation>> = Items extends readonly [
25
- infer Head,
26
- ...infer Tail extends ReadonlyArray<BuilderExpectation>
27
- ] ? Head extends BuilderExpectation<infer Name, Array<any>> ? [BuilderComponent<Name>, ...ExpectedComponents<Tail>] : ExpectedComponents<Tail> : [];
28
- export {};
@@ -1,28 +0,0 @@
1
- import * as v from 'valibot';
2
- import { BuilderComponent, Builder } from '../core/index.js';
3
- import { BuilderExpectation } from './expectation.js';
4
- function assertBuilder(builder, ...items) {
5
- items.forEach((item) => {
6
- if (v.is(v.instance(BuilderExpectation), item)) {
7
- if (item.kind === 'option') {
8
- item.validate(builder.options);
9
- }
10
- else if (item.kind === 'component') {
11
- item.validate(builder.components);
12
- }
13
- }
14
- });
15
- return builder;
16
- }
17
- function assertUI(ui, ...items) {
18
- items.forEach((item) => {
19
- if (v.is(v.instance(BuilderExpectation), item) && item.kind === 'option') {
20
- item.validate(ui.builder.options);
21
- }
22
- });
23
- return ui;
24
- }
25
- export const assert = {
26
- builder: assertBuilder,
27
- ui: assertUI
28
- };
@@ -1,20 +0,0 @@
1
- import type { BuilderComponentEntries, BuilderOptionEntries } from '../core/index';
2
- export type BuilderExpectationKind = 'option' | 'component';
3
- export type BuilderExpectationEntries = BuilderOptionEntries | BuilderComponentEntries;
4
- export declare class BuilderExpectation<Name extends string = string, Value = unknown> {
5
- readonly name: Name;
6
- readonly kind: BuilderExpectationKind;
7
- constructor(name: Name, kind: BuilderExpectationKind);
8
- optional(): BuilderExpectation<Name, Value | null>;
9
- validate(entries: BuilderExpectationEntries): void;
10
- }
11
- export type BuilderExpectations = readonly [
12
- BuilderExpectation,
13
- ...ReadonlyArray<BuilderExpectation>
14
- ];
15
- export declare const option: {
16
- expect: <const Name extends string>(name: Name) => BuilderExpectation<Name, string>;
17
- };
18
- export declare const component: {
19
- expect: <const Name extends string>(name: Name) => BuilderExpectation<Name, never>;
20
- };
@@ -1,3 +0,0 @@
1
- export type { BuilderExpectations } from './expectation';
2
- export { assert } from './assert.js';
3
- export { BuilderExpectation, component, option } from './expectation.js';
@@ -1,2 +0,0 @@
1
- export { assert } from './assert.js';
2
- export { BuilderExpectation, component, option } from './expectation.js';
@@ -1 +0,0 @@
1
- export declare function invariant<Input>(input: Input, message?: `${string}! ❌`): asserts input is Exclude<Input, null | undefined | '' | 0 | false>;
package/dist/invariant.js DELETED
@@ -1,6 +0,0 @@
1
- const DEFAULT_INVARIANT_MESSAGE = 'Unexpected falsy value! ❌';
2
- export function invariant(input, message = DEFAULT_INVARIANT_MESSAGE) {
3
- if (!input) {
4
- throw new Error(message);
5
- }
6
- }
@@ -1,52 +0,0 @@
1
- import * as v from 'valibot';
2
- export declare const BuilderLayoutOptionSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
3
- readonly path: v.SchemaWithPipe<readonly [v.ArraySchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, undefined>, v.ReadonlyAction<(string | number)[]>]>;
4
- }, undefined>, v.ReadonlyAction<{
5
- readonly path: readonly (string | number)[];
6
- }>]>;
7
- export type BuilderLayoutOption = v.InferOutput<typeof BuilderLayoutOptionSchema>;
8
- export declare const BuilderLayoutOptionsSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
9
- readonly path: v.SchemaWithPipe<readonly [v.ArraySchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, undefined>, v.ReadonlyAction<(string | number)[]>]>;
10
- }, undefined>, v.ReadonlyAction<{
11
- readonly path: readonly (string | number)[];
12
- }>]>, undefined>, v.ReadonlyAction<Readonly<{
13
- readonly path: readonly (string | number)[];
14
- }>[]>]>;
15
- export type BuilderLayoutOptions = v.InferOutput<typeof BuilderLayoutOptionsSchema>;
16
- export declare const BuilderLayoutPageSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
17
- readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
18
- readonly options: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
19
- readonly path: v.SchemaWithPipe<readonly [v.ArraySchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, undefined>, v.ReadonlyAction<(string | number)[]>]>;
20
- }, undefined>, v.ReadonlyAction<{
21
- readonly path: readonly (string | number)[];
22
- }>]>, undefined>, v.ReadonlyAction<Readonly<{
23
- readonly path: readonly (string | number)[];
24
- }>[]>]>;
25
- }, undefined>, v.ReadonlyAction<{
26
- label: string | null;
27
- readonly options: readonly Readonly<{
28
- readonly path: readonly (string | number)[];
29
- }>[];
30
- }>]>;
31
- export type BuilderLayoutPage = v.InferOutput<typeof BuilderLayoutPageSchema>;
32
- export declare const BuilderLayoutSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
33
- readonly label: v.NullableSchema<v.StringSchema<undefined>, undefined>;
34
- readonly options: v.SchemaWithPipe<readonly [v.ArraySchema<v.SchemaWithPipe<readonly [v.ObjectSchema<{
35
- readonly path: v.SchemaWithPipe<readonly [v.ArraySchema<v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, undefined>, v.ReadonlyAction<(string | number)[]>]>;
36
- }, undefined>, v.ReadonlyAction<{
37
- readonly path: readonly (string | number)[];
38
- }>]>, undefined>, v.ReadonlyAction<Readonly<{
39
- readonly path: readonly (string | number)[];
40
- }>[]>]>;
41
- }, undefined>, v.ReadonlyAction<{
42
- label: string | null;
43
- readonly options: readonly Readonly<{
44
- readonly path: readonly (string | number)[];
45
- }>[];
46
- }>]>, undefined>, v.ReadonlyAction<Readonly<{
47
- label: string | null;
48
- readonly options: readonly Readonly<{
49
- readonly path: readonly (string | number)[];
50
- }>[];
51
- }>[]>]>;
52
- export type BuilderLayout = v.InferOutput<typeof BuilderLayoutSchema>;
@@ -1,6 +0,0 @@
1
- import * as v from 'valibot';
2
- import { BuilderPathSchema } from './primitives.js';
3
- export const BuilderLayoutOptionSchema = v.pipe(v.object({ path: BuilderPathSchema }), v.readonly());
4
- export const BuilderLayoutOptionsSchema = v.pipe(v.array(BuilderLayoutOptionSchema), v.readonly());
5
- export const BuilderLayoutPageSchema = v.pipe(v.object({ label: v.nullable(v.string()), options: BuilderLayoutOptionsSchema }), v.readonly());
6
- export const BuilderLayoutSchema = v.pipe(v.array(BuilderLayoutPageSchema), v.readonly());
File without changes