@builder-builder/builder 0.0.14 → 0.0.16

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 (85) hide show
  1. package/dist/bb.d.ts +9 -5
  2. package/dist/bb.js +12 -5
  3. package/dist/check.d.ts +2 -2
  4. package/dist/entities/builder/builder.d.ts +19 -5
  5. package/dist/entities/builder/builder.js +24 -5
  6. package/dist/entities/builder/index.d.ts +1 -2
  7. package/dist/entities/builder/index.js +1 -2
  8. package/dist/entities/collection/collection.d.ts +7 -1
  9. package/dist/entities/collection/collection.js +9 -2
  10. package/dist/entities/collection/config.d.ts +6 -1
  11. package/dist/entities/collection/config.js +9 -2
  12. package/dist/entities/component/component.d.ts +41 -1
  13. package/dist/entities/component/component.js +9 -2
  14. package/dist/entities/component/details.d.ts +11 -2
  15. package/dist/entities/component/details.js +9 -2
  16. package/dist/entities/component/field.d.ts +10 -1
  17. package/dist/entities/component/field.js +13 -3
  18. package/dist/entities/index.d.ts +5 -1
  19. package/dist/entities/index.js +2 -0
  20. package/dist/entities/kind.d.ts +1 -1
  21. package/dist/entities/model/methods.d.ts +3 -3
  22. package/dist/entities/model/model.d.ts +5 -1
  23. package/dist/entities/model/model.js +10 -3
  24. package/dist/entities/model/models.js +9 -5
  25. package/dist/entities/option/option.d.ts +41 -1
  26. package/dist/entities/option/option.js +9 -2
  27. package/dist/entities/option/select.d.ts +7 -1
  28. package/dist/entities/option/select.js +17 -6
  29. package/dist/entities/option/toggle.d.ts +7 -1
  30. package/dist/entities/option/toggle.js +16 -4
  31. package/dist/entities/option/values.d.ts +6 -0
  32. package/dist/entities/pricing/expression.d.ts +70 -0
  33. package/dist/entities/pricing/expression.js +43 -0
  34. package/dist/entities/pricing/index.d.ts +6 -0
  35. package/dist/entities/pricing/index.js +3 -0
  36. package/dist/entities/pricing/pricing.d.ts +17 -0
  37. package/dist/entities/pricing/pricing.js +21 -0
  38. package/dist/entities/pricing/rates.d.ts +3 -0
  39. package/dist/entities/pricing/rates.js +3 -0
  40. package/dist/entities/serialise.d.ts +549 -495
  41. package/dist/entities/serialise.js +65 -41
  42. package/dist/entities/tags.d.ts +3 -0
  43. package/dist/entities/tags.js +2 -0
  44. package/dist/entities/ui/describe.d.ts +10 -1
  45. package/dist/entities/ui/describe.js +9 -2
  46. package/dist/entities/ui/input.d.ts +10 -1
  47. package/dist/entities/ui/input.js +17 -5
  48. package/dist/entities/ui/page.d.ts +10 -1
  49. package/dist/entities/ui/page.js +9 -2
  50. package/dist/entities/ui/pages.d.ts +5 -1
  51. package/dist/entities/ui/pages.js +9 -2
  52. package/dist/entities/ui/ui.d.ts +6 -1
  53. package/dist/entities/ui/ui.js +27 -12
  54. package/dist/entities/validated.d.ts +3 -1
  55. package/dist/environment.d.ts +1 -1
  56. package/dist/exception.d.ts +2 -2
  57. package/dist/index.d.ts +3 -3
  58. package/dist/index.js +1 -1
  59. package/dist/instance.d.ts +9 -0
  60. package/dist/instance.js +3 -1
  61. package/dist/mappers/index.d.ts +3 -2
  62. package/dist/mappers/index.js +2 -1
  63. package/dist/mappers/price.d.ts +3 -0
  64. package/dist/mappers/price.js +111 -0
  65. package/dist/validate/builder.js +16 -7
  66. package/dist/validate/errors.d.ts +19 -1
  67. package/dist/validate/errors.js +15 -0
  68. package/dist/validate/index.d.ts +3 -1
  69. package/dist/validate/index.js +1 -0
  70. package/dist/validate/model.js +5 -62
  71. package/dist/validate/paths.d.ts +5 -0
  72. package/dist/validate/paths.js +68 -0
  73. package/dist/validate/pricing.d.ts +8 -0
  74. package/dist/validate/pricing.js +127 -0
  75. package/dist/validate/ui.js +60 -1
  76. package/dist/validate/variants.js +4 -0
  77. package/package.json +1 -10
  78. package/dist/cli.d.ts +0 -2
  79. package/dist/cli.js +0 -53
  80. package/dist/codegen/index.d.ts +0 -7
  81. package/dist/codegen/index.js +0 -212
  82. package/dist/codegen/template.d.ts +0 -5
  83. package/dist/codegen/template.js +0 -17
  84. package/dist/entities/builder/factory.d.ts +0 -7
  85. package/dist/entities/builder/factory.js +0 -4
@@ -1,61 +1,64 @@
1
1
  import * as v from 'valibot';
2
+ import { check } from '../check.js';
2
3
  import { BuilderPathSchema, BuilderPathsSchema } from '../paths.js';
3
4
  import { BuilderParameterSchema, BuilderRefSchema, isParamable } from '../references.js';
4
- import { check } from '../check.js';
5
+ import { BuilderSchema, BuilderSerialisedSchema } from './builder/index.js';
5
6
  import { BuilderCollectionConfigSchema, BuilderCollectionConfigSerialisedSchema, BuilderCollectionSchema, BuilderCollectionSelectMapSerialisedSchema, BuilderCollectionWhenSerialisedSchema } from './collection/index.js';
6
7
  import { BuilderComponentDetailsSchema, BuilderComponentDetailsSerialisedSchema, BuilderComponentFieldSchema, BuilderComponentSchema, BuilderComponentSelectMapSerialisedSchema, BuilderComponentWhenSerialisedSchema } from './component/index.js';
7
8
  import { BuilderExpectationSchema, BuilderExpectationsSchema, BuilderExpectationsSerialisedSchema } from './expectation.js';
8
9
  import { BuilderModelSchema, BuilderModelSerialisedSchema } from './model/index.js';
9
10
  import { BuilderOptionSchema, BuilderOptionSelectMapSerialisedSchema, BuilderOptionWhenSerialisedSchema, BuilderSelectTypeSchema, BuilderSelectTypeSerialisedSchema, BuilderToggleTypeSchema, BuilderToggleTypeSerialisedSchema } from './option/index.js';
11
+ import { BuilderPricingSchema, BuilderPricingSerialisedSchema, BuilderRatesSchema } from './pricing/index.js';
10
12
  import { BuilderUIDescribeSchema, BuilderUIDescribeSerialisedSchema, BuilderUIInputSchema, BuilderUIInputSerialisedSchema, BuilderUIItemsSerialisedSchema, BuilderUIPageSchema, BuilderUIPageSerialisedSchema, BuilderUIPagesSchema, BuilderUIPagesSerialisedSchema, BuilderUISchema, BuilderUISerialisedSchema } from './ui/index.js';
11
- import { BuilderSchema, BuilderSerialisedSchema } from './builder/index.js';
12
13
  export const entitiesMap = {
13
14
  builder: { runtime: BuilderSchema, serialised: BuilderSerialisedSchema },
14
15
  model: { runtime: BuilderModelSchema, serialised: BuilderModelSerialisedSchema },
15
- ui: { runtime: BuilderUISchema, serialised: BuilderUISerialisedSchema },
16
16
  select: { runtime: BuilderSelectTypeSchema, serialised: BuilderSelectTypeSerialisedSchema },
17
17
  toggle: { runtime: BuilderToggleTypeSchema, serialised: BuilderToggleTypeSerialisedSchema },
18
- uiPage: { runtime: BuilderUIPageSchema, serialised: BuilderUIPageSerialisedSchema },
19
- uiDescribe: { runtime: BuilderUIDescribeSchema, serialised: BuilderUIDescribeSerialisedSchema },
20
- uiPages: { runtime: BuilderUIPagesSchema, serialised: BuilderUIPagesSerialisedSchema },
21
- uiInput: { runtime: BuilderUIInputSchema, serialised: BuilderUIInputSerialisedSchema },
22
- componentDetails: {
23
- runtime: BuilderComponentDetailsSchema,
24
- serialised: BuilderComponentDetailsSerialisedSchema
25
- },
26
- collectionConfig: {
27
- runtime: BuilderCollectionConfigSchema,
28
- serialised: BuilderCollectionConfigSerialisedSchema
29
- },
30
- expectations: {
31
- runtime: BuilderExpectationsSchema,
32
- serialised: BuilderExpectationsSerialisedSchema
18
+ optionSelectMap: {
19
+ runtime: BuilderOptionSelectMapSerialisedSchema,
20
+ serialised: BuilderOptionSelectMapSerialisedSchema
33
21
  },
34
- uiItems: { runtime: BuilderUIItemsSerialisedSchema, serialised: BuilderUIItemsSerialisedSchema },
35
22
  optionWhen: {
36
23
  runtime: BuilderOptionWhenSerialisedSchema,
37
24
  serialised: BuilderOptionWhenSerialisedSchema
38
25
  },
39
- componentWhen: {
40
- runtime: BuilderComponentWhenSerialisedSchema,
41
- serialised: BuilderComponentWhenSerialisedSchema
42
- },
43
- collectionWhen: {
44
- runtime: BuilderCollectionWhenSerialisedSchema,
45
- serialised: BuilderCollectionWhenSerialisedSchema
46
- },
47
- optionSelectMap: {
48
- runtime: BuilderOptionSelectMapSerialisedSchema,
49
- serialised: BuilderOptionSelectMapSerialisedSchema
26
+ componentDetails: {
27
+ runtime: BuilderComponentDetailsSchema,
28
+ serialised: BuilderComponentDetailsSerialisedSchema
50
29
  },
51
30
  componentSelectMap: {
52
31
  runtime: BuilderComponentSelectMapSerialisedSchema,
53
32
  serialised: BuilderComponentSelectMapSerialisedSchema
54
33
  },
34
+ componentWhen: {
35
+ runtime: BuilderComponentWhenSerialisedSchema,
36
+ serialised: BuilderComponentWhenSerialisedSchema
37
+ },
38
+ collectionConfig: {
39
+ runtime: BuilderCollectionConfigSchema,
40
+ serialised: BuilderCollectionConfigSerialisedSchema
41
+ },
55
42
  collectionSelectMap: {
56
43
  runtime: BuilderCollectionSelectMapSerialisedSchema,
57
44
  serialised: BuilderCollectionSelectMapSerialisedSchema
58
45
  },
46
+ collectionWhen: {
47
+ runtime: BuilderCollectionWhenSerialisedSchema,
48
+ serialised: BuilderCollectionWhenSerialisedSchema
49
+ },
50
+ ui: { runtime: BuilderUISchema, serialised: BuilderUISerialisedSchema },
51
+ uiDescribe: { runtime: BuilderUIDescribeSchema, serialised: BuilderUIDescribeSerialisedSchema },
52
+ uiItems: { runtime: BuilderUIItemsSerialisedSchema, serialised: BuilderUIItemsSerialisedSchema },
53
+ uiPage: { runtime: BuilderUIPageSchema, serialised: BuilderUIPageSerialisedSchema },
54
+ uiPages: { runtime: BuilderUIPagesSchema, serialised: BuilderUIPagesSerialisedSchema },
55
+ uiInput: { runtime: BuilderUIInputSchema, serialised: BuilderUIInputSerialisedSchema },
56
+ pricing: { runtime: BuilderPricingSchema, serialised: BuilderPricingSerialisedSchema },
57
+ pricingRates: { runtime: BuilderRatesSchema, serialised: BuilderRatesSchema },
58
+ expectations: {
59
+ runtime: BuilderExpectationsSchema,
60
+ serialised: BuilderExpectationsSerialisedSchema
61
+ },
59
62
  paths: { runtime: BuilderPathsSchema, serialised: BuilderPathsSchema },
60
63
  path: { runtime: BuilderPathSchema, serialised: BuilderPathSchema },
61
64
  number: { runtime: v.number(), serialised: v.number() },
@@ -93,64 +96,82 @@ const serialiserMap = [
93
96
  serialiser(BuilderSchema, (value) => ({
94
97
  model: serialiseValue(value.model),
95
98
  ui: serialiseValue(value.ui),
96
- bindings: serialiseRecord(value.bindings)
99
+ bindings: serialiseRecord(value.bindings),
100
+ tags: value.tags,
101
+ pricing: value.pricing == null ? value.pricing : serialiseValue(value.pricing)
97
102
  })),
98
103
  serialiser(BuilderModelSchema, (value) => ({
99
104
  models: value.models.map(serialiseValue),
100
105
  options: value.options.map(serialiseValue),
101
106
  components: value.components.map(serialiseValue),
102
107
  collections: value.collections.map(serialiseValue),
103
- expectations: value.expectations.map(serialiseValue)
108
+ expectations: value.expectations.map(serialiseValue),
109
+ tags: value.tags
104
110
  })),
105
111
  serialiser(BuilderUISchema, (value) => ({
106
112
  uis: value.uis.map(serialiseValue),
107
113
  items: value.items.map(serialiseValue),
108
- expectations: value.expectations.map(serialiseValue)
114
+ expectations: value.expectations.map(serialiseValue),
115
+ tags: value.tags
109
116
  })),
110
117
  serialiser(BuilderUIPageSchema, (value) => ({
111
118
  type: 'page',
112
119
  label: serialiseValue(value.label),
113
- inputs: serialiseValue(value.inputs)
120
+ inputs: serialiseValue(value.inputs),
121
+ tags: value.tags
114
122
  })),
115
123
  serialiser(BuilderUIDescribeSchema, (value) => ({
116
124
  type: 'describe',
117
125
  label: serialiseValue(value.label),
118
- inputs: serialiseValue(value.inputs)
126
+ inputs: serialiseValue(value.inputs),
127
+ tags: value.tags
119
128
  })),
120
129
  serialiser(BuilderUIPagesSchema, (value) => ({
121
130
  type: 'pages',
122
131
  name: value.name,
123
132
  label: serialiseValue(value.label),
124
- items: serialiseValue(value.items)
133
+ items: serialiseValue(value.items),
134
+ tags: value.tags
135
+ })),
136
+ serialiser(BuilderPricingSchema, (value) => ({
137
+ rates: value.rates.map(serialiseValue),
138
+ formula: serialiseValue(value.formula)
125
139
  })),
126
140
  serialiser(BuilderUIInputSchema, (value) => serialiseRecord({ ...value })),
127
141
  serialiser(BuilderOptionSchema, serialiseNamedEntry),
128
142
  serialiser(BuilderComponentSchema, serialiseNamedEntry),
129
143
  serialiser(BuilderCollectionSchema, serialiseNamedEntry),
130
- serialiser(BuilderComponentDetailsSchema, (value) => ({ fields: serialiseValue(value.fields) })),
144
+ serialiser(BuilderComponentDetailsSchema, (value) => ({
145
+ fields: serialiseValue(value.fields),
146
+ tags: value.tags
147
+ })),
131
148
  serialiser(BuilderComponentFieldSchema, (value) => ({
132
149
  type: 'component-field',
133
150
  name: value.name,
134
151
  valueType: value.valueType,
135
- isOptional: value.isOptional
152
+ isOptional: value.isOptional,
153
+ tags: value.tags
136
154
  })),
137
155
  serialiser(BuilderCollectionConfigSchema, (value) => ({
138
156
  model: serialiseValue(value.model),
139
157
  min: serialiseValue(value.min),
140
- max: serialiseValue(value.max)
158
+ max: serialiseValue(value.max),
159
+ tags: value.tags
141
160
  })),
142
161
  serialiser(BuilderSelectTypeSchema, (value) => ({
143
162
  type: 'select',
144
163
  options: value.options,
145
164
  defaultValue: value.defaultValue,
146
165
  isOptional: value.isOptional,
147
- optionLabels: value.optionLabels
166
+ optionLabels: value.optionLabels,
167
+ tags: value.tags
148
168
  })),
149
169
  serialiser(BuilderToggleTypeSchema, (value) => ({
150
170
  type: 'toggle',
151
171
  valueType: value.valueType,
152
172
  defaultValue: value.defaultValue,
153
- isOptional: value.isOptional
173
+ isOptional: value.isOptional,
174
+ tags: value.tags
154
175
  })),
155
176
  serialiser(BuilderExpectationSchema, (value) => ({ name: value.name, kind: value.kind }))
156
177
  ];
@@ -162,6 +183,9 @@ function serialiseNamedEntry(value) {
162
183
  if (value.paths != null) {
163
184
  entry.paths = serialiseValue(value.paths);
164
185
  }
186
+ if (value.tags != null) {
187
+ entry.tags = serialiseValue(value.tags);
188
+ }
165
189
  return entry;
166
190
  }
167
191
  function serialiseRecord(record) {
@@ -0,0 +1,3 @@
1
+ import * as v from 'valibot';
2
+ export declare const BuilderTagsSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>;
3
+ export type BuilderTags = v.InferOutput<typeof BuilderTagsSchema>;
@@ -0,0 +1,2 @@
1
+ import * as v from 'valibot';
2
+ export const BuilderTagsSchema = v.pipe(v.array(v.string()), v.readonly());
@@ -1,4 +1,5 @@
1
1
  import type { Paramable } from '../../references';
2
+ import type { BuilderTags } from '../tags';
2
3
  import type { BuilderUIInputs } from './input';
3
4
  import * as v from 'valibot';
4
5
  export declare const BuilderDescriptionItemSchema: v.SchemaWithPipe<readonly [v.TupleSchema<[v.StringSchema<undefined>, v.StringSchema<undefined>], undefined>, v.ReadonlyAction<[string, string]>]>;
@@ -9,7 +10,9 @@ export declare class BuilderUIDescribe<const Label extends Paramable<string> = P
9
10
  readonly type: "describe";
10
11
  readonly label: Label;
11
12
  readonly inputs: Inputs;
12
- constructor(label: Label, inputs: Inputs);
13
+ readonly tags?: BuilderTags;
14
+ constructor(label: Label, inputs: Inputs, tags?: BuilderTags);
15
+ tag(...tags: Array<string>): BuilderUIDescribe<Label, Inputs>;
13
16
  }
14
17
  export declare const BuilderUIDescribeSchema: v.InstanceSchema<typeof BuilderUIDescribe, undefined>;
15
18
  export declare const BuilderUIDescribeSerialisedSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
@@ -135,6 +138,7 @@ export declare const BuilderUIDescribeSerialisedSchema: v.SchemaWithPipe<readonl
135
138
  }>]>, v.UnknownSchema], undefined>, undefined>, v.ReadonlyAction<{
136
139
  [x: string]: unknown;
137
140
  }>]>], undefined>, undefined>;
141
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
138
142
  }, undefined>, v.ReadonlyAction<{
139
143
  type: "input";
140
144
  path: readonly (string | number)[] | Readonly<{
@@ -171,6 +175,7 @@ export declare const BuilderUIDescribeSerialisedSchema: v.SchemaWithPipe<readonl
171
175
  }> | Readonly<{
172
176
  [x: string]: unknown;
173
177
  }> | undefined;
178
+ tags?: readonly string[] | undefined;
174
179
  }>]>], undefined>, undefined>, v.ReadonlyAction<(Readonly<{
175
180
  type: "parameter";
176
181
  id: string;
@@ -214,7 +219,9 @@ export declare const BuilderUIDescribeSerialisedSchema: v.SchemaWithPipe<readonl
214
219
  }> | Readonly<{
215
220
  [x: string]: unknown;
216
221
  }> | undefined;
222
+ tags?: readonly string[] | undefined;
217
223
  }>)[]>]>], undefined>;
224
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
218
225
  }, undefined>, v.ReadonlyAction<{
219
226
  type: "describe";
220
227
  label: string | Readonly<{
@@ -275,6 +282,8 @@ export declare const BuilderUIDescribeSerialisedSchema: v.SchemaWithPipe<readonl
275
282
  }> | Readonly<{
276
283
  [x: string]: unknown;
277
284
  }> | undefined;
285
+ tags?: readonly string[] | undefined;
278
286
  }>)[];
287
+ tags?: readonly string[] | undefined;
279
288
  }>]>;
280
289
  export type BuilderUIDescribeSerialised = v.InferOutput<typeof BuilderUIDescribeSerialisedSchema>;
@@ -1,6 +1,7 @@
1
1
  import * as v from 'valibot';
2
2
  import { paramable } from '../../references.js';
3
3
  import { serialisable } from '../../serialisable.js';
4
+ import { BuilderTagsSchema } from '../tags.js';
4
5
  import { BuilderUIInputsSerialisedSchema } from './input.js';
5
6
  export const BuilderDescriptionItemSchema = v.pipe(v.tuple([v.string(), v.string()]), v.readonly());
6
7
  export const BuilderDescriptionSchema = v.pipe(v.array(BuilderDescriptionItemSchema), v.readonly());
@@ -8,14 +9,20 @@ export class BuilderUIDescribe {
8
9
  type = 'describe';
9
10
  label;
10
11
  inputs;
11
- constructor(label, inputs) {
12
+ tags;
13
+ constructor(label, inputs, tags) {
12
14
  this.label = label;
13
15
  this.inputs = inputs;
16
+ this.tags = tags;
17
+ }
18
+ tag(...tags) {
19
+ return new BuilderUIDescribe(this.label, this.inputs, tags);
14
20
  }
15
21
  }
16
22
  export const BuilderUIDescribeSchema = v.instance(BuilderUIDescribe);
17
23
  export const BuilderUIDescribeSerialisedSchema = serialisable(v.object({
18
24
  type: v.literal('describe'),
19
25
  label: paramable(v.string()),
20
- inputs: paramable(BuilderUIInputsSerialisedSchema)
26
+ inputs: paramable(BuilderUIInputsSerialisedSchema),
27
+ tags: v.optional(BuilderTagsSchema)
21
28
  }));
@@ -2,20 +2,24 @@ import type { BuilderPath } from '../../paths';
2
2
  import type { Paramable, ParamableSerialised } from '../../references';
3
3
  import type { BuilderModelGeneric, BuilderModelStateOf } from '../model/model';
4
4
  import type { BuilderModelState } from '../model/state';
5
+ import type { BuilderTags } from '../tags';
5
6
  import type { BuilderValidPath } from '../when';
6
7
  import * as v from 'valibot';
7
8
  export type BuilderUIInputMetadata = Paramable<Record<string, Paramable<unknown>>>;
8
9
  export type BuilderUIInputMetadataSerialised = ParamableSerialised<Record<string, ParamableSerialised<unknown>>>;
9
10
  export declare class BuilderUIInput<const Path extends Paramable<BuilderPath> = Paramable<BuilderPath>, const DisplayName extends Paramable<string> = Paramable<string>, const Kind extends Paramable<string> = Paramable<string>, const Metadata extends BuilderUIInputMetadata = BuilderUIInputMetadata> {
11
+ #private;
10
12
  readonly type: "input";
11
13
  readonly path: Path;
12
14
  readonly displayName?: DisplayName;
13
15
  readonly kind?: Kind;
14
16
  readonly metadata?: Metadata;
15
- constructor(path: Path, displayName?: DisplayName, kind?: Kind, metadata?: Metadata);
17
+ readonly tags?: BuilderTags;
18
+ constructor(path: Path, displayName?: DisplayName, kind?: Kind, metadata?: Metadata, tags?: BuilderTags);
16
19
  display<const NewDisplayName extends Paramable<string>>(displayName: NewDisplayName): BuilderUIInput<Path, NewDisplayName, Kind, Metadata>;
17
20
  as<const NewKind extends Paramable<string>>(kind: NewKind): BuilderUIInput<Path, DisplayName, NewKind, Metadata>;
18
21
  meta<const NewMetadata extends BuilderUIInputMetadata>(metadata: NewMetadata): BuilderUIInput<Path, DisplayName, Kind, NewMetadata>;
22
+ tag(...tags: Array<string>): BuilderUIInput<Path, DisplayName, Kind, Metadata>;
19
23
  }
20
24
  export declare function input<const Path extends Paramable<BuilderPath>>(path: Path): BuilderUIInput<Path>;
21
25
  export declare const BuilderUIInputSchema: v.InstanceSchema<typeof BuilderUIInput, undefined>;
@@ -114,6 +118,7 @@ export declare const BuilderUIInputSerialisedSchema: v.SchemaWithPipe<readonly [
114
118
  }>]>, v.UnknownSchema], undefined>, undefined>, v.ReadonlyAction<{
115
119
  [x: string]: unknown;
116
120
  }>]>], undefined>, undefined>;
121
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
117
122
  }, undefined>, v.ReadonlyAction<{
118
123
  type: "input";
119
124
  path: readonly (string | number)[] | Readonly<{
@@ -150,6 +155,7 @@ export declare const BuilderUIInputSerialisedSchema: v.SchemaWithPipe<readonly [
150
155
  }> | Readonly<{
151
156
  [x: string]: unknown;
152
157
  }> | undefined;
158
+ tags?: readonly string[] | undefined;
153
159
  }>]>;
154
160
  export type BuilderUIInputSerialised = v.InferOutput<typeof BuilderUIInputSerialisedSchema>;
155
161
  export declare const BuilderUIInputsSerialisedSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.UnionSchema<[v.SchemaWithPipe<readonly [v.ObjectSchema<{
@@ -244,6 +250,7 @@ export declare const BuilderUIInputsSerialisedSchema: v.SchemaWithPipe<readonly
244
250
  }>]>, v.UnknownSchema], undefined>, undefined>, v.ReadonlyAction<{
245
251
  [x: string]: unknown;
246
252
  }>]>], undefined>, undefined>;
253
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
247
254
  }, undefined>, v.ReadonlyAction<{
248
255
  type: "input";
249
256
  path: readonly (string | number)[] | Readonly<{
@@ -280,6 +287,7 @@ export declare const BuilderUIInputsSerialisedSchema: v.SchemaWithPipe<readonly
280
287
  }> | Readonly<{
281
288
  [x: string]: unknown;
282
289
  }> | undefined;
290
+ tags?: readonly string[] | undefined;
283
291
  }>]>], undefined>, undefined>, v.ReadonlyAction<(Readonly<{
284
292
  type: "parameter";
285
293
  id: string;
@@ -323,6 +331,7 @@ export declare const BuilderUIInputsSerialisedSchema: v.SchemaWithPipe<readonly
323
331
  }> | Readonly<{
324
332
  [x: string]: unknown;
325
333
  }> | undefined;
334
+ tags?: readonly string[] | undefined;
326
335
  }>)[]>]>;
327
336
  export type BuilderUIInputsSerialised = v.InferOutput<typeof BuilderUIInputsSerialisedSchema>;
328
337
  export type BuilderUIInputs = ReadonlyArray<Paramable<BuilderUIInput>>;
@@ -2,26 +2,37 @@ import * as v from 'valibot';
2
2
  import { BuilderPathSchema } from '../../paths.js';
3
3
  import { paramable } from '../../references.js';
4
4
  import { serialisable } from '../../serialisable.js';
5
+ import { BuilderTagsSchema } from '../tags.js';
5
6
  export class BuilderUIInput {
6
7
  type = 'input';
7
8
  path;
8
9
  displayName;
9
10
  kind;
10
11
  metadata;
11
- constructor(path, displayName, kind, metadata) {
12
+ tags;
13
+ constructor(path, displayName, kind, metadata, tags) {
12
14
  this.path = path;
13
15
  this.displayName = displayName;
14
16
  this.kind = kind;
15
17
  this.metadata = metadata;
18
+ this.tags = tags;
19
+ }
20
+ #next(patch) {
21
+ return new BuilderUIInput(this.path, patch.displayName ?? this.displayName, patch.kind ?? this.kind, patch.metadata ?? this.metadata, patch.tags ?? this.tags);
16
22
  }
17
23
  display(displayName) {
18
- return new BuilderUIInput(this.path, displayName, this.kind, this.metadata);
24
+ return this.#next({
25
+ displayName: displayName
26
+ });
19
27
  }
20
28
  as(kind) {
21
- return new BuilderUIInput(this.path, this.displayName, kind, this.metadata);
29
+ return this.#next({ kind: kind });
22
30
  }
23
31
  meta(metadata) {
24
- return new BuilderUIInput(this.path, this.displayName, this.kind, metadata);
32
+ return this.#next({ metadata: metadata });
33
+ }
34
+ tag(...tags) {
35
+ return this.#next({ tags });
25
36
  }
26
37
  }
27
38
  export function input(path) {
@@ -34,6 +45,7 @@ export const BuilderUIInputSerialisedSchema = serialisable(v.object({
34
45
  path: paramable(BuilderPathSchema),
35
46
  displayName: v.optional(paramable(v.string())),
36
47
  kind: v.optional(paramable(v.string())),
37
- metadata: v.optional(paramable(BuilderUIInputMetadataSchema))
48
+ metadata: v.optional(paramable(BuilderUIInputMetadataSchema)),
49
+ tags: v.optional(BuilderTagsSchema)
38
50
  }));
39
51
  export const BuilderUIInputsSerialisedSchema = v.pipe(v.array(paramable(BuilderUIInputSerialisedSchema)), v.readonly());
@@ -1,11 +1,14 @@
1
1
  import type { Paramable } from '../../references';
2
+ import type { BuilderTags } from '../tags';
2
3
  import type { BuilderUIInputs } from './input';
3
4
  import * as v from 'valibot';
4
5
  export declare class BuilderUIPage<const Label extends Paramable<string> = Paramable<string>, const Inputs extends Paramable<BuilderUIInputs> = Paramable<BuilderUIInputs>> {
5
6
  readonly type: "page";
6
7
  readonly label: Label;
7
8
  readonly inputs: Inputs;
8
- constructor(label: Label, inputs: Inputs);
9
+ readonly tags?: BuilderTags;
10
+ constructor(label: Label, inputs: Inputs, tags?: BuilderTags);
11
+ tag(...tags: Array<string>): BuilderUIPage<Label, Inputs>;
9
12
  }
10
13
  export declare const BuilderUIPageSchema: v.InstanceSchema<typeof BuilderUIPage, undefined>;
11
14
  export declare const BuilderUIPageSerialisedSchema: v.SchemaWithPipe<readonly [v.ObjectSchema<{
@@ -131,6 +134,7 @@ export declare const BuilderUIPageSerialisedSchema: v.SchemaWithPipe<readonly [v
131
134
  }>]>, v.UnknownSchema], undefined>, undefined>, v.ReadonlyAction<{
132
135
  [x: string]: unknown;
133
136
  }>]>], undefined>, undefined>;
137
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
134
138
  }, undefined>, v.ReadonlyAction<{
135
139
  type: "input";
136
140
  path: readonly (string | number)[] | Readonly<{
@@ -167,6 +171,7 @@ export declare const BuilderUIPageSerialisedSchema: v.SchemaWithPipe<readonly [v
167
171
  }> | Readonly<{
168
172
  [x: string]: unknown;
169
173
  }> | undefined;
174
+ tags?: readonly string[] | undefined;
170
175
  }>]>], undefined>, undefined>, v.ReadonlyAction<(Readonly<{
171
176
  type: "parameter";
172
177
  id: string;
@@ -210,7 +215,9 @@ export declare const BuilderUIPageSerialisedSchema: v.SchemaWithPipe<readonly [v
210
215
  }> | Readonly<{
211
216
  [x: string]: unknown;
212
217
  }> | undefined;
218
+ tags?: readonly string[] | undefined;
213
219
  }>)[]>]>], undefined>;
220
+ readonly tags: v.OptionalSchema<v.SchemaWithPipe<readonly [v.ArraySchema<v.StringSchema<undefined>, undefined>, v.ReadonlyAction<string[]>]>, undefined>;
214
221
  }, undefined>, v.ReadonlyAction<{
215
222
  type: "page";
216
223
  label: string | Readonly<{
@@ -271,6 +278,8 @@ export declare const BuilderUIPageSerialisedSchema: v.SchemaWithPipe<readonly [v
271
278
  }> | Readonly<{
272
279
  [x: string]: unknown;
273
280
  }> | undefined;
281
+ tags?: readonly string[] | undefined;
274
282
  }>)[];
283
+ tags?: readonly string[] | undefined;
275
284
  }>]>;
276
285
  export type BuilderUIPageSerialised = v.InferOutput<typeof BuilderUIPageSerialisedSchema>;
@@ -1,19 +1,26 @@
1
1
  import * as v from 'valibot';
2
2
  import { paramable } from '../../references.js';
3
3
  import { serialisable } from '../../serialisable.js';
4
+ import { BuilderTagsSchema } from '../tags.js';
4
5
  import { BuilderUIInputsSerialisedSchema } from './input.js';
5
6
  export class BuilderUIPage {
6
7
  type = 'page';
7
8
  label;
8
9
  inputs;
9
- constructor(label, inputs) {
10
+ tags;
11
+ constructor(label, inputs, tags) {
10
12
  this.label = label;
11
13
  this.inputs = inputs;
14
+ this.tags = tags;
15
+ }
16
+ tag(...tags) {
17
+ return new BuilderUIPage(this.label, this.inputs, tags);
12
18
  }
13
19
  }
14
20
  export const BuilderUIPageSchema = v.instance(BuilderUIPage);
15
21
  export const BuilderUIPageSerialisedSchema = serialisable(v.object({
16
22
  type: v.literal('page'),
17
23
  label: paramable(v.string()),
18
- inputs: paramable(BuilderUIInputsSerialisedSchema)
24
+ inputs: paramable(BuilderUIInputsSerialisedSchema),
25
+ tags: v.optional(BuilderTagsSchema)
19
26
  }));
@@ -1,4 +1,5 @@
1
1
  import type { Paramable, ParamableSerialised } from '../../references';
2
+ import type { BuilderTags } from '../tags';
2
3
  import type { BuilderUIDescribe, BuilderUIDescribeSerialised } from './describe';
3
4
  import type { BuilderUIPage, BuilderUIPageSerialised } from './page';
4
5
  import * as v from 'valibot';
@@ -9,7 +10,9 @@ export declare class BuilderUIPages<const Name extends string = string, const La
9
10
  readonly name: Name;
10
11
  readonly label: Label;
11
12
  readonly items: Items;
12
- constructor(name: Name, label: Label, items: Items);
13
+ readonly tags?: BuilderTags;
14
+ constructor(name: Name, label: Label, items: Items, tags?: BuilderTags);
15
+ tag(...tags: Array<string>): BuilderUIPages<Name, Label, Items>;
13
16
  }
14
17
  export declare const BuilderUIPagesSchema: v.InstanceSchema<typeof BuilderUIPages, undefined>;
15
18
  export type BuilderUIPagesSerialised = {
@@ -17,6 +20,7 @@ export type BuilderUIPagesSerialised = {
17
20
  readonly name: string;
18
21
  readonly label: ParamableSerialised<string>;
19
22
  readonly items: ParamableSerialised<BuilderUIItemsSerialised>;
23
+ readonly tags?: BuilderTags;
20
24
  };
21
25
  export type BuilderUIItemSerialised = BuilderUIPageSerialised | BuilderUIDescribeSerialised | BuilderUIPagesSerialised;
22
26
  export type BuilderUIItemsSerialised = ReadonlyArray<ParamableSerialised<BuilderUIItemSerialised>>;
@@ -1,6 +1,7 @@
1
1
  import * as v from 'valibot';
2
2
  import { paramable } from '../../references.js';
3
3
  import { serialisable } from '../../serialisable.js';
4
+ import { BuilderTagsSchema } from '../tags.js';
4
5
  import { BuilderUIDescribeSerialisedSchema } from './describe.js';
5
6
  import { BuilderUIPageSerialisedSchema } from './page.js';
6
7
  export class BuilderUIPages {
@@ -8,10 +9,15 @@ export class BuilderUIPages {
8
9
  name;
9
10
  label;
10
11
  items;
11
- constructor(name, label, items) {
12
+ tags;
13
+ constructor(name, label, items, tags) {
12
14
  this.name = name;
13
15
  this.label = label;
14
16
  this.items = items;
17
+ this.tags = tags;
18
+ }
19
+ tag(...tags) {
20
+ return new BuilderUIPages(this.name, this.label, this.items, tags);
15
21
  }
16
22
  }
17
23
  export const BuilderUIPagesSchema = v.instance(BuilderUIPages);
@@ -19,7 +25,8 @@ export const BuilderUIPagesSerialisedSchema = serialisable(v.object({
19
25
  type: v.literal('pages'),
20
26
  name: v.string(),
21
27
  label: paramable(v.string()),
22
- items: paramable(v.lazy(() => BuilderUIItemsSerialisedSchema))
28
+ items: paramable(v.lazy(() => BuilderUIItemsSerialisedSchema)),
29
+ tags: v.optional(BuilderTagsSchema)
23
30
  }));
24
31
  export const BuilderUIItemSerialisedSchema = v.union([
25
32
  BuilderUIPageSerialisedSchema,
@@ -3,27 +3,32 @@ import type { BuilderExpectation, BuilderExpectations, BuilderExpectationsSerial
3
3
  import type { CollectionNamesOf } from '../collection/index';
4
4
  import type { BuilderModel, BuilderModelGeneric, BuilderModelStateOf } from '../model/model';
5
5
  import type { BuilderModelStateAsserted } from '../model/expectation';
6
+ import type { BuilderTags } from '../tags';
6
7
  import type { BuilderUIValidInputsOf } from './input';
7
8
  import type { BuilderUIItems, BuilderUIItemsSerialised } from './pages';
8
9
  import * as v from 'valibot';
9
10
  export type BuilderUIs = ReadonlyArray<Paramable<BuilderUI>>;
10
11
  export type BuilderUIsSerialised = ReadonlyArray<ParamableSerialised<BuilderUISerialised>>;
11
12
  export declare class BuilderUI<Model extends BuilderModelGeneric = BuilderModelGeneric> {
13
+ #private;
12
14
  readonly type: 'ui';
13
15
  readonly model: Model;
14
16
  readonly uis: BuilderUIs;
15
17
  readonly items: BuilderUIItems;
16
18
  readonly expectations: BuilderExpectations;
17
- constructor(uis: BuilderUIs, items: BuilderUIItems, expectations: BuilderExpectations);
19
+ readonly tags?: BuilderTags;
20
+ constructor(uis: BuilderUIs, items: BuilderUIItems, expectations: BuilderExpectations, tags?: BuilderTags);
18
21
  expect<const Exps extends readonly [BuilderExpectation, ...ReadonlyArray<BuilderExpectation>]>(...expectations: Exps): BuilderUI<BuilderModel<BuilderModelStateAsserted<BuilderModelStateOf<Model>, Exps>>>;
19
22
  page(label: Paramable<string>, inputs: Paramable<BuilderUIValidInputsOf<Model>>): BuilderUI<Model>;
20
23
  describe(label: Paramable<string>, inputs: Paramable<BuilderUIValidInputsOf<Model>>): BuilderUI<Model>;
21
24
  pages<const Name extends CollectionNamesOf<BuilderModelStateOf<Model>>>(name: Name, label: Paramable<string>, itemUI: Paramable<BuilderUI<BuilderModelGeneric>>): BuilderUI<Model>;
25
+ tag(...tags: Array<string>): BuilderUI<Model>;
22
26
  }
23
27
  export declare const BuilderUISchema: v.InstanceSchema<typeof BuilderUI, undefined>;
24
28
  export interface BuilderUISerialised {
25
29
  readonly uis: BuilderUIsSerialised;
26
30
  readonly items: BuilderUIItemsSerialised;
27
31
  readonly expectations: BuilderExpectationsSerialised;
32
+ readonly tags?: BuilderTags;
28
33
  }
29
34
  export declare const BuilderUISerialisedSchema: v.GenericSchema<BuilderUISerialised>;
@@ -3,6 +3,7 @@ import { check } from '../../check.js';
3
3
  import { paramable } from '../../references.js';
4
4
  import { serialisable } from '../../serialisable.js';
5
5
  import { BuilderExpectationsSerialisedSchema } from '../expectation.js';
6
+ import { BuilderTagsSchema } from '../tags.js';
6
7
  import { BuilderUIDescribe } from './describe.js';
7
8
  import { BuilderUIPage } from './page.js';
8
9
  import { BuilderUIItemsSerialisedSchema, BuilderUIPages } from './pages.js';
@@ -10,34 +11,48 @@ export class BuilderUI {
10
11
  uis;
11
12
  items;
12
13
  expectations;
13
- constructor(uis, items, expectations) {
14
+ tags;
15
+ constructor(uis, items, expectations, tags) {
14
16
  this.uis = uis;
15
17
  this.items = items;
16
18
  this.expectations = expectations;
19
+ this.tags = tags;
20
+ }
21
+ #next(patch) {
22
+ return new BuilderUI(this.uis, patch.items ?? this.items, patch.expectations ?? this.expectations, patch.tags ?? this.tags);
17
23
  }
18
24
  expect(...expectations) {
19
- return new BuilderUI(this.uis, this.items, [
20
- ...this.expectations,
21
- ...expectations
22
- ]);
25
+ return this.#next({
26
+ expectations: [...this.expectations, ...expectations]
27
+ });
23
28
  }
24
29
  page(label, inputs) {
25
- return new BuilderUI(this.uis, [...this.items, new BuilderUIPage(label, inputs)], this.expectations);
30
+ return this.#next({
31
+ items: [...this.items, new BuilderUIPage(label, inputs)]
32
+ });
26
33
  }
27
34
  describe(label, inputs) {
28
- return new BuilderUI(this.uis, [
29
- ...this.items,
30
- new BuilderUIDescribe(label, inputs)
31
- ], this.expectations);
35
+ return this.#next({
36
+ items: [
37
+ ...this.items,
38
+ new BuilderUIDescribe(label, inputs)
39
+ ]
40
+ });
32
41
  }
33
42
  pages(name, label, itemUI) {
34
43
  const items = check.is(BuilderUISchema, itemUI) ? itemUI.items : itemUI;
35
- return new BuilderUI(this.uis, [...this.items, new BuilderUIPages(name, label, items)], this.expectations);
44
+ return this.#next({
45
+ items: [...this.items, new BuilderUIPages(name, label, items)]
46
+ });
47
+ }
48
+ tag(...tags) {
49
+ return this.#next({ tags });
36
50
  }
37
51
  }
38
52
  export const BuilderUISchema = v.instance(BuilderUI);
39
53
  export const BuilderUISerialisedSchema = serialisable(v.object({
40
54
  uis: v.pipe(v.array(paramable(v.lazy(() => BuilderUISerialisedSchema))), v.readonly()),
41
55
  items: BuilderUIItemsSerialisedSchema,
42
- expectations: BuilderExpectationsSerialisedSchema
56
+ expectations: BuilderExpectationsSerialisedSchema,
57
+ tags: v.optional(BuilderTagsSchema)
43
58
  }));