@builder-builder/builder 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bb.d.ts +28 -0
- package/dist/bb.js +49 -0
- package/dist/check.d.ts +1 -1
- package/dist/check.js +4 -2
- package/dist/entities/builder/bind.d.ts +4 -0
- package/dist/entities/builder/builder.d.ts +17 -490
- package/dist/entities/builder/builder.js +19 -76
- package/dist/entities/builder/factory.d.ts +7 -0
- package/dist/entities/builder/factory.js +4 -0
- package/dist/entities/builder/index.d.ts +3 -6
- package/dist/entities/builder/index.js +1 -2
- package/dist/entities/collection/collection.d.ts +71 -20
- package/dist/entities/collection/collection.js +10 -27
- package/dist/entities/collection/config.d.ts +40 -1049
- package/dist/entities/collection/config.js +11 -11
- package/dist/entities/collection/expectation.d.ts +8 -4
- package/dist/entities/collection/index.d.ts +3 -3
- package/dist/entities/collection/index.js +1 -1
- package/dist/entities/collection/when.d.ts +6 -5
- package/dist/entities/component/component.d.ts +272 -300
- package/dist/entities/component/component.js +9 -8
- package/dist/entities/component/details.d.ts +35 -60
- package/dist/entities/component/details.js +9 -9
- package/dist/entities/component/expectation.d.ts +7 -4
- package/dist/entities/component/expectation.js +0 -3
- package/dist/entities/component/field.d.ts +50 -0
- package/dist/entities/component/field.js +41 -0
- package/dist/entities/component/index.d.ts +5 -3
- package/dist/entities/component/index.js +3 -2
- package/dist/entities/component/when.d.ts +5 -5
- package/dist/entities/component/when.js +2 -2
- package/dist/entities/entry.d.ts +4 -0
- package/dist/entities/expectation.d.ts +10 -22
- package/dist/entities/expectation.js +2 -7
- package/dist/entities/index.d.ts +21 -16
- package/dist/entities/index.js +10 -8
- package/dist/entities/kind.d.ts +9 -0
- package/dist/entities/kind.js +5 -0
- package/dist/entities/model/bind.d.ts +83 -0
- package/dist/entities/model/expectation.d.ts +16 -0
- package/dist/entities/model/index.d.ts +7 -0
- package/dist/entities/model/index.js +2 -0
- package/dist/entities/model/methods.d.ts +57 -0
- package/dist/entities/{builder → model}/methods.js +8 -8
- package/dist/entities/model/model.d.ts +39 -0
- package/dist/entities/model/model.js +73 -0
- package/dist/entities/model/models.d.ts +39 -0
- package/dist/entities/model/models.js +14 -0
- package/dist/entities/{builder → model}/state.d.ts +10 -10
- package/dist/entities/option/index.d.ts +2 -2
- package/dist/entities/option/index.js +2 -2
- package/dist/entities/option/option.d.ts +216 -214
- package/dist/entities/option/option.js +9 -8
- package/dist/entities/option/select.d.ts +2 -12
- package/dist/entities/option/select.js +6 -3
- package/dist/entities/option/toggle.d.ts +2 -9
- package/dist/entities/option/toggle.js +3 -3
- package/dist/entities/option/values.d.ts +4 -24
- package/dist/entities/option/values.js +10 -4
- package/dist/entities/option/when.d.ts +6 -5
- package/dist/entities/refs.d.ts +6 -0
- package/dist/entities/refs.js +1 -0
- package/dist/entities/serialise.d.ts +393 -3568
- package/dist/entities/serialise.js +160 -31
- package/dist/entities/ui/describe.d.ts +23 -57
- package/dist/entities/ui/describe.js +4 -5
- package/dist/entities/ui/index.d.ts +4 -9
- package/dist/entities/ui/index.js +2 -4
- package/dist/entities/ui/page.d.ts +23 -57
- package/dist/entities/ui/page.js +4 -5
- package/dist/entities/ui/pages.d.ts +18 -403
- package/dist/entities/ui/pages.js +7 -7
- package/dist/entities/ui/ui.d.ts +22 -1575
- package/dist/entities/ui/ui.js +15 -28
- package/dist/entities/ui/uis.d.ts +5 -9
- package/dist/entities/ui/uis.js +12 -19
- package/dist/entities/validated.d.ts +35 -0
- package/dist/entities/validated.js +1 -0
- package/dist/entities/when.d.ts +79 -70
- package/dist/entities/when.js +11 -7
- package/dist/environment.d.ts +5 -0
- package/dist/environment.js +2 -0
- package/dist/exception.d.ts +8 -3
- package/dist/exception.js +3 -0
- package/dist/index.d.ts +21 -24
- package/dist/index.js +5 -10
- package/dist/instance.d.ts +56 -0
- package/dist/instance.js +10 -0
- package/dist/mappers/index.d.ts +7 -5
- package/dist/mappers/index.js +5 -3
- package/dist/mappers/instance.d.ts +3 -0
- package/dist/mappers/instance.js +35 -0
- package/dist/mappers/order.d.ts +6 -0
- package/dist/mappers/order.js +22 -0
- package/dist/mappers/render/pages.d.ts +4 -4
- package/dist/mappers/render/render.d.ts +2 -3
- package/dist/mappers/render/render.js +83 -78
- package/dist/mappers/resolve.d.ts +5 -9
- package/dist/mappers/resolve.js +25 -33
- package/dist/mappers/variants/index.d.ts +1 -0
- package/dist/mappers/variants/index.js +1 -0
- package/dist/mappers/variants/option-graph.d.ts +19 -0
- package/dist/mappers/{models → variants}/option-graph.js +33 -22
- package/dist/mappers/variants/variants.d.ts +3 -0
- package/dist/mappers/variants/variants.js +57 -0
- package/dist/private.d.ts +4 -0
- package/dist/private.js +4 -0
- package/dist/references.d.ts +27 -36
- package/dist/references.js +19 -12
- package/dist/serialisable.d.ts +1 -9
- package/dist/serialisable.js +2 -3
- package/dist/validate/brand.d.ts +14 -0
- package/dist/validate/brand.js +17 -0
- package/dist/validate/builder.d.ts +4 -0
- package/dist/validate/builder.js +27 -0
- package/dist/validate/expectations.d.ts +10 -0
- package/dist/validate/expectations.js +12 -0
- package/dist/validate/index.d.ts +18 -0
- package/dist/validate/index.js +9 -0
- package/dist/validate/instance.d.ts +19 -0
- package/dist/validate/instance.js +46 -0
- package/dist/validate/model.d.ts +36 -0
- package/dist/validate/model.js +196 -0
- package/dist/validate/resolve.d.ts +16 -0
- package/dist/validate/resolve.js +91 -0
- package/dist/validate/result.d.ts +8 -0
- package/dist/validate/result.js +4 -0
- package/dist/validate/ui.d.ts +8 -0
- package/dist/validate/ui.js +77 -0
- package/dist/validate/variants.d.ts +59 -0
- package/dist/validate/variants.js +102 -0
- package/package.json +12 -9
- package/dist/entities/builder/builders.d.ts +0 -20
- package/dist/entities/builder/builders.js +0 -18
- package/dist/entities/builder/expectation.d.ts +0 -12
- package/dist/entities/builder/methods.d.ts +0 -58
- package/dist/entities/builder/parameter.d.ts +0 -62
- package/dist/entities/builder/parameter.js +0 -18
- package/dist/entities/builder/validate.d.ts +0 -3
- package/dist/entities/builder/validate.js +0 -108
- package/dist/entities/errors.d.ts +0 -21
- package/dist/entities/ui/label.d.ts +0 -18
- package/dist/entities/ui/label.js +0 -12
- package/dist/entities/ui/parameter.d.ts +0 -7
- package/dist/entities/ui/parameter.js +0 -29
- package/dist/entities/ui/validate.d.ts +0 -8
- package/dist/entities/ui/validate.js +0 -21
- package/dist/entities/validate.d.ts +0 -28
- package/dist/mappers/assert/builder.d.ts +0 -2
- package/dist/mappers/assert/builder.js +0 -46
- package/dist/mappers/assert/expectation.d.ts +0 -2
- package/dist/mappers/assert/expectation.js +0 -23
- package/dist/mappers/assert/index.d.ts +0 -6
- package/dist/mappers/assert/index.js +0 -4
- package/dist/mappers/assert/model.d.ts +0 -13
- package/dist/mappers/assert/model.js +0 -47
- package/dist/mappers/assert/models.d.ts +0 -33
- package/dist/mappers/assert/models.js +0 -74
- package/dist/mappers/assert/ui.d.ts +0 -2
- package/dist/mappers/assert/ui.js +0 -22
- package/dist/mappers/instance/index.d.ts +0 -1
- package/dist/mappers/instance/index.js +0 -1
- package/dist/mappers/instance/instance.d.ts +0 -4
- package/dist/mappers/instance/instance.js +0 -33
- package/dist/mappers/models/component-graph.d.ts +0 -9
- package/dist/mappers/models/component-graph.js +0 -51
- package/dist/mappers/models/graph.d.ts +0 -12
- package/dist/mappers/models/graph.js +0 -17
- package/dist/mappers/models/index.d.ts +0 -1
- package/dist/mappers/models/index.js +0 -1
- package/dist/mappers/models/models.d.ts +0 -3
- package/dist/mappers/models/models.js +0 -37
- package/dist/mappers/models/option-graph.d.ts +0 -9
- package/dist/mappers/order/index.d.ts +0 -2
- package/dist/mappers/order/index.js +0 -1
- package/dist/mappers/order/order.d.ts +0 -14
- package/dist/mappers/order/order.js +0 -31
- package/dist/model.d.ts +0 -14
- package/dist/walker/index.d.ts +0 -2
- package/dist/walker/index.js +0 -1
- package/dist/walker/walkable.d.ts +0 -4
- package/dist/walker/walkable.js +0 -4
- package/dist/walker/walker.d.ts +0 -18
- package/dist/walker/walker.js +0 -103
- package/dist/walker/walkers.d.ts +0 -8
- package/dist/walker/walkers.js +0 -51
- /package/dist/entities/builder/{expectation.js → bind.js} +0 -0
- /package/dist/entities/{builder/state.js → entry.js} +0 -0
- /package/dist/entities/{errors.js → model/bind.js} +0 -0
- /package/dist/entities/{validate.js → model/expectation.js} +0 -0
- /package/dist/{model.js → entities/model/state.js} +0 -0
|
@@ -1,84 +1,27 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
3
|
-
import { BuilderRefsSerialisedSchema } from '../../references.js';
|
|
2
|
+
import { BuilderRefSerialisedSchema } from '../../references.js';
|
|
4
3
|
import { serialisable } from '../../serialisable.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { BuilderExpectationsSerialisedSchema } from '../expectation.js';
|
|
8
|
-
import { BuilderOptionsSerialisedSchema } from '../option/index.js';
|
|
9
|
-
import { builderCollectionMethod, builderComponentMethod, builderOptionMethod } from './methods.js';
|
|
10
|
-
import { bindBuilder } from './parameter.js';
|
|
11
|
-
import { validateDuplicates, validatePaths } from './validate.js';
|
|
4
|
+
import { BuilderModel, BuilderModelSerialisedSchema } from '../model/index.js';
|
|
5
|
+
import { BuilderUI, BuilderUISerialisedSchema } from '../ui/index.js';
|
|
12
6
|
export class Builder {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.references = references;
|
|
21
|
-
this.options = options;
|
|
22
|
-
this.components = components;
|
|
23
|
-
this.collections = collections;
|
|
24
|
-
this.expectations = expectations;
|
|
25
|
-
validateDuplicates(this);
|
|
26
|
-
validatePaths(this);
|
|
7
|
+
model;
|
|
8
|
+
ui;
|
|
9
|
+
bindings;
|
|
10
|
+
constructor(model = new BuilderModel(), ui = new BuilderUI([], [], []), bindings = {}) {
|
|
11
|
+
this.model = model;
|
|
12
|
+
this.ui = ui;
|
|
13
|
+
this.bindings = bindings;
|
|
27
14
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
const when = (gatePaths, name, config) => {
|
|
34
|
-
return this.#next({ options: [...this.options, method.when(gatePaths, name, config)] });
|
|
35
|
-
};
|
|
36
|
-
return Object.assign(add, { when });
|
|
37
|
-
}
|
|
38
|
-
get component() {
|
|
39
|
-
const method = builderComponentMethod();
|
|
40
|
-
const add = (name, details) => {
|
|
41
|
-
const wrappedDetails = check.is(BuilderComponentDetailsSchema, details)
|
|
42
|
-
? details
|
|
43
|
-
: details != null
|
|
44
|
-
? componentDetails(details)
|
|
45
|
-
: details;
|
|
46
|
-
return this.#next({ components: [...this.components, method(name, wrappedDetails)] });
|
|
47
|
-
};
|
|
48
|
-
const when = (gatePaths, name, config) => {
|
|
49
|
-
return this.#next({
|
|
50
|
-
components: [...this.components, method.when(gatePaths, name, config)]
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
return Object.assign(add, { when });
|
|
54
|
-
}
|
|
55
|
-
get collection() {
|
|
56
|
-
const method = builderCollectionMethod();
|
|
57
|
-
const add = (name, payload) => {
|
|
58
|
-
return this.#next({ collections: [...this.collections, method(name, payload)] });
|
|
59
|
-
};
|
|
60
|
-
const when = (gatePaths, name, config) => {
|
|
61
|
-
return this.#next({
|
|
62
|
-
collections: [...this.collections, method.when(gatePaths, name, config)]
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
return Object.assign(add, { when });
|
|
66
|
-
}
|
|
67
|
-
expect(...expectations) {
|
|
68
|
-
return this.#next({ expectations: [...this.expectations, ...expectations] });
|
|
69
|
-
}
|
|
70
|
-
bind(bindings) {
|
|
71
|
-
return bindBuilder(this, bindings);
|
|
72
|
-
}
|
|
73
|
-
#next(patch) {
|
|
74
|
-
return new Builder(this.references, patch.options ?? this.options, patch.components ?? this.components, patch.collections ?? this.collections, patch.expectations ?? this.expectations);
|
|
15
|
+
bind(extra) {
|
|
16
|
+
return new Builder(this.model, this.ui, {
|
|
17
|
+
...this.bindings,
|
|
18
|
+
...extra
|
|
19
|
+
});
|
|
75
20
|
}
|
|
76
21
|
}
|
|
77
22
|
export const BuilderSchema = v.instance(Builder);
|
|
78
|
-
export const BuilderSerialisedSchema = serialisable(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
collections: BuilderCollectionsSerialisedSchema,
|
|
83
|
-
expectations: BuilderExpectationsSerialisedSchema
|
|
23
|
+
export const BuilderSerialisedSchema = serialisable(v.object({
|
|
24
|
+
model: BuilderModelSerialisedSchema,
|
|
25
|
+
ui: BuilderUISerialisedSchema,
|
|
26
|
+
bindings: v.pipe(v.record(v.string(), v.union([BuilderRefSerialisedSchema, v.unknown()])), v.readonly())
|
|
84
27
|
}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BuilderModel } from '../model/model';
|
|
2
|
+
import type { BuilderModelState } from '../model/state';
|
|
3
|
+
import type { BuilderUI } from '../ui/ui';
|
|
4
|
+
import type { BuilderBindings } from './bind';
|
|
5
|
+
import { Builder } from './builder.js';
|
|
6
|
+
export declare function builder(): Builder<BuilderModelState>;
|
|
7
|
+
export declare function builder<const State extends BuilderModelState>(model: BuilderModel<State>, ui?: BuilderUI, bindings?: BuilderBindings): Builder<State>;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export type {
|
|
3
|
-
export type { BindingModelType, BuilderBindings, BuilderBoundState } from './parameter';
|
|
4
|
-
export type { BuilderState, BuilderStateAppend, BuilderStateEmpty } from './state';
|
|
1
|
+
export type { BuilderBindings, BuilderBindingsSerialised } from './bind';
|
|
2
|
+
export type { BuilderSerialised } from './builder';
|
|
5
3
|
export { Builder, BuilderSchema, BuilderSerialisedSchema } from './builder.js';
|
|
6
|
-
export {
|
|
7
|
-
export { bindBuilder } from './parameter.js';
|
|
4
|
+
export { builder } from './factory.js';
|
|
@@ -1,37 +1,88 @@
|
|
|
1
1
|
import type { BuilderPaths } from '../../paths';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type { BuilderCollectionConfigSerialised } from './config';
|
|
2
|
+
import type { Paramable, ParamableSerialised } from '../../references';
|
|
3
|
+
import type { BuilderModelState } from '../model/index';
|
|
4
|
+
import type { BuilderWhenSerialised } from '../when';
|
|
5
|
+
import type { BuilderCollectionConfig, BuilderCollectionConfigSerialised } from './config';
|
|
6
|
+
import type { BuilderCollectionWhen } from './when';
|
|
6
7
|
import * as v from 'valibot';
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
readonly kind: 'invalid-collection-bounds';
|
|
10
|
-
readonly name: string;
|
|
11
|
-
readonly min: number;
|
|
12
|
-
readonly max: number;
|
|
13
|
-
};
|
|
14
|
-
export type BuilderCollectionPayload = BuilderCollectionConfig | BuilderWhen<Refable<BuilderCollectionConfig>>;
|
|
15
|
-
export declare class BuilderCollection<const Name extends string = string, const Payload extends Refable<BuilderCollectionPayload> = Refable<BuilderCollectionPayload>, const GatePaths extends Refable<BuilderPaths> = Refable<BuilderPaths>> {
|
|
8
|
+
export type BuilderCollectionPayload = BuilderCollectionConfig | BuilderCollectionWhen;
|
|
9
|
+
export declare class BuilderCollection<const Name extends string = string, const Payload extends Paramable<BuilderCollectionPayload> = Paramable<BuilderCollectionPayload>, const Paths extends Paramable<BuilderPaths> = Paramable<BuilderPaths>> {
|
|
16
10
|
readonly type: 'collection';
|
|
17
11
|
readonly name: Name;
|
|
18
12
|
readonly payload: Payload;
|
|
19
|
-
readonly
|
|
20
|
-
constructor(name: Name, payload: Payload,
|
|
13
|
+
readonly paths?: Paths;
|
|
14
|
+
constructor(name: Name, payload: Payload, paths?: Paths);
|
|
21
15
|
}
|
|
22
16
|
export declare const BuilderCollectionSchema: v.InstanceSchema<typeof BuilderCollection, undefined>;
|
|
23
17
|
export type BuilderCollections = ReadonlyArray<BuilderCollection>;
|
|
24
|
-
export declare const BuilderCollectionWhenSerialisedSchema: v.GenericSchema
|
|
25
|
-
|
|
18
|
+
export declare const BuilderCollectionWhenSerialisedSchema: v.GenericSchema<BuilderWhenSerialised<Readonly<{
|
|
19
|
+
model: Readonly<{
|
|
20
|
+
type: "parameter";
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
}> | Readonly<{
|
|
24
|
+
type: "ref";
|
|
25
|
+
id: string;
|
|
26
|
+
}> | import("..").BuilderModelSerialised;
|
|
27
|
+
min: number | Readonly<{
|
|
28
|
+
type: "parameter";
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
}> | Readonly<{
|
|
32
|
+
type: "ref";
|
|
33
|
+
id: string;
|
|
34
|
+
}>;
|
|
35
|
+
max: number | Readonly<{
|
|
36
|
+
type: "parameter";
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
}> | Readonly<{
|
|
40
|
+
type: "ref";
|
|
41
|
+
id: string;
|
|
42
|
+
}>;
|
|
43
|
+
}>>>;
|
|
44
|
+
export type BuilderCollectionWhenSerialised = BuilderWhenSerialised<BuilderCollectionConfigSerialised>;
|
|
45
|
+
export declare const BuilderCollectionSelectMapSerialisedSchema: v.GenericSchema<import("..").BuilderMatchSelectMap<Readonly<{
|
|
46
|
+
type: "parameter";
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
}> | Readonly<{
|
|
50
|
+
model: Readonly<{
|
|
51
|
+
type: "parameter";
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
}> | Readonly<{
|
|
55
|
+
type: "ref";
|
|
56
|
+
id: string;
|
|
57
|
+
}> | import("..").BuilderModelSerialised;
|
|
58
|
+
min: number | Readonly<{
|
|
59
|
+
type: "parameter";
|
|
60
|
+
id: string;
|
|
61
|
+
name: string;
|
|
62
|
+
}> | Readonly<{
|
|
63
|
+
type: "ref";
|
|
64
|
+
id: string;
|
|
65
|
+
}>;
|
|
66
|
+
max: number | Readonly<{
|
|
67
|
+
type: "parameter";
|
|
68
|
+
id: string;
|
|
69
|
+
name: string;
|
|
70
|
+
}> | Readonly<{
|
|
71
|
+
type: "ref";
|
|
72
|
+
id: string;
|
|
73
|
+
}>;
|
|
74
|
+
}>>>;
|
|
26
75
|
export type BuilderCollectionSerialised = {
|
|
27
76
|
readonly name: string;
|
|
28
|
-
readonly
|
|
29
|
-
readonly payload:
|
|
77
|
+
readonly paths?: ParamableSerialised<BuilderPaths>;
|
|
78
|
+
readonly payload: ParamableSerialised<BuilderCollectionConfigSerialised | BuilderCollectionWhenSerialised>;
|
|
30
79
|
};
|
|
31
80
|
export declare const BuilderCollectionSerialisedSchema: v.GenericSchema<BuilderCollectionSerialised>;
|
|
32
81
|
export declare const BuilderCollectionsSerialisedSchema: v.SchemaWithPipe<readonly [v.ArraySchema<v.GenericSchema<BuilderCollectionSerialised>, undefined>, v.ReadonlyAction<BuilderCollectionSerialised[]>]>;
|
|
33
82
|
export type BuilderCollectionsSerialised = ReadonlyArray<BuilderCollectionSerialised>;
|
|
34
|
-
export type CollectionNamesOf<State extends
|
|
83
|
+
export type CollectionNamesOf<State extends BuilderModelState | null> = [State] extends [
|
|
84
|
+
BuilderModelState
|
|
85
|
+
] ? State['collections'][number]['name'] : never;
|
|
35
86
|
export type CollectionShape<Collection extends BuilderCollection, Item> = Collection['payload'] extends BuilderCollectionConfig ? Collection['payload']['min'] extends number ? Collection['payload']['max'] extends number ? number extends Collection['payload']['min'] ? ReadonlyArray<Item> : number extends Collection['payload']['max'] ? ReadonlyArray<Item> : Collection['payload']['min'] extends Collection['payload']['max'] ? CollectionTuple<Item, Collection['payload']['min']> : ReadonlyArray<Item> : ReadonlyArray<Item> : ReadonlyArray<Item> : ReadonlyArray<Item>;
|
|
36
87
|
type CollectionTuple<Item, Length extends number, Result extends ReadonlyArray<Item> = []> = Result['length'] extends Length ? Result : CollectionTuple<Item, Length, [...Result, Item]>;
|
|
37
88
|
export {};
|
|
@@ -1,42 +1,25 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import { BuilderException } from '../../exception.js';
|
|
3
2
|
import { BuilderPathsSchema } from '../../paths.js';
|
|
4
|
-
import {
|
|
3
|
+
import { paramable } from '../../references.js';
|
|
5
4
|
import { serialisable } from '../../serialisable.js';
|
|
6
|
-
import { createWhenSerialisedSchema } from '../when.js';
|
|
7
|
-
import {
|
|
5
|
+
import { createSelectMapSerialisedSchema, createWhenSerialisedSchema } from '../when.js';
|
|
6
|
+
import { BuilderCollectionConfigSerialisedSchema } from './config.js';
|
|
8
7
|
export class BuilderCollection {
|
|
9
8
|
name;
|
|
10
9
|
payload;
|
|
11
|
-
|
|
12
|
-
constructor(name, payload,
|
|
10
|
+
paths;
|
|
11
|
+
constructor(name, payload, paths) {
|
|
13
12
|
this.name = name;
|
|
14
13
|
this.payload = payload;
|
|
15
|
-
this.
|
|
16
|
-
validateCollectionBounds(name, payload);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
function validateCollectionBounds(name, payload) {
|
|
20
|
-
if (!(payload instanceof BuilderCollectionConfig)) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const { min, max } = payload;
|
|
24
|
-
if (isRef(min) || isRef(max)) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const minValue = min;
|
|
28
|
-
const maxValue = max;
|
|
29
|
-
if (minValue < 0 || maxValue <= 0 || maxValue < minValue) {
|
|
30
|
-
throw new BuilderException([
|
|
31
|
-
{ kind: 'invalid-collection-bounds', name, min: minValue, max: maxValue }
|
|
32
|
-
]);
|
|
14
|
+
this.paths = paths;
|
|
33
15
|
}
|
|
34
16
|
}
|
|
35
17
|
export const BuilderCollectionSchema = v.instance(BuilderCollection);
|
|
36
18
|
export const BuilderCollectionWhenSerialisedSchema = createWhenSerialisedSchema(BuilderCollectionConfigSerialisedSchema);
|
|
37
|
-
export const
|
|
19
|
+
export const BuilderCollectionSelectMapSerialisedSchema = createSelectMapSerialisedSchema(BuilderCollectionConfigSerialisedSchema);
|
|
20
|
+
export const BuilderCollectionSerialisedSchema = serialisable(v.object({
|
|
38
21
|
name: v.string(),
|
|
39
|
-
payload:
|
|
40
|
-
|
|
22
|
+
payload: paramable(v.union([BuilderCollectionConfigSerialisedSchema, BuilderCollectionWhenSerialisedSchema])),
|
|
23
|
+
paths: v.optional(paramable(BuilderPathsSchema))
|
|
41
24
|
}));
|
|
42
25
|
export const BuilderCollectionsSerialisedSchema = v.pipe(v.array(BuilderCollectionSerialisedSchema), v.readonly());
|