@maroonedog/luq 2.4.2 → 2.4.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.
Files changed (35) hide show
  1. package/README.md +158 -6
  2. package/dist/chain/field-chain.types.d.ts +11 -1
  3. package/dist/chain/index.d.ts +2 -0
  4. package/dist/chain/plugin-not-imported.types.d.ts +40 -0
  5. package/dist/chain/plugin-not-imported.types.js +2 -0
  6. package/dist/chain/plugin-not-imported.types.mjs +1 -0
  7. package/dist/chain/slot-catalog.generated.d.ts +265 -0
  8. package/dist/chain/slot-catalog.generated.js +4 -0
  9. package/dist/chain/slot-catalog.generated.mjs +3 -0
  10. package/dist/core/type-erasure.d.ts +20 -0
  11. package/dist/core/type-erasure.js +23 -0
  12. package/dist/core/type-erasure.mjs +22 -0
  13. package/dist/field-rule/use-field.d.ts +2 -1
  14. package/dist/field-rule/use-field.js +9 -2
  15. package/dist/field-rule/use-field.mjs +9 -2
  16. package/dist/plugins/manifest.generated.d.ts +18 -0
  17. package/dist/plugins/manifest.generated.js +77 -77
  18. package/dist/plugins/manifest.generated.mjs +77 -77
  19. package/dist/runtime/index-stack.d.ts +10 -1
  20. package/dist/runtime/index-stack.js +19 -3
  21. package/dist/runtime/index-stack.mjs +19 -3
  22. package/dist/runtime/index.d.ts +1 -1
  23. package/dist/runtime/index.js +1 -2
  24. package/dist/runtime/index.mjs +1 -1
  25. package/dist/runtime/run-branch.js +8 -3
  26. package/dist/runtime/run-branch.mjs +9 -4
  27. package/dist/runtime/run-plan.d.ts +5 -11
  28. package/dist/runtime/run-plan.js +5 -21
  29. package/dist/runtime/run-plan.mjs +5 -20
  30. package/dist/runtime/run-recursion.js +9 -7
  31. package/dist/runtime/run-recursion.mjs +10 -8
  32. package/dist/schema-tooling/index.d.ts +11 -0
  33. package/dist/schema-tooling/index.js +12 -1
  34. package/dist/schema-tooling/index.mjs +10 -0
  35. package/package.json +6 -4
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <img src="./public/img/library_image.png" alt="Luq Logo" width="300" />
2
+ <img src="https://raw.githubusercontent.com/maroonedog/luq/master/public/img/library_image.png" alt="Luq Logo" width="300" />
3
3
 
4
4
  # Luq
5
5
 
@@ -97,6 +97,157 @@ npm install @maroonedog/luq
97
97
 
98
98
  Zero runtime dependencies. TypeScript 5.0 or later.
99
99
 
100
+ ## The whole API
101
+
102
+ Four calls, in this order. There is no registry, no global setup and no config
103
+ file; a builder is built where it is used and carries its own settings.
104
+
105
+ ```ts
106
+ import { Builder } from "@maroonedog/luq";
107
+ import { requiredPlugin } from "@maroonedog/luq/plugins/required";
108
+ import { stringMinPlugin } from "@maroonedog/luq/plugins/stringMin";
109
+ import { numberMinPlugin } from "@maroonedog/luq/plugins/numberMin";
110
+
111
+ // The type is yours, already written, wherever it already lives.
112
+ interface Order {
113
+ readonly reference: string;
114
+ readonly quantity: number;
115
+ readonly note?: string;
116
+ }
117
+
118
+ const orderValidator = Builder()
119
+ .use(requiredPlugin) // every rule you can call is a plugin you imported
120
+ .use(stringMinPlugin)
121
+ .use(numberMinPlugin)
122
+ .for<Order>() // bind to the type; field paths are checked against it
123
+ .v("reference", (b) => b.string.required().min(3))
124
+ .v("quantity", (b) => b.number.required().min(1))
125
+ .build(); // returns Validator<Order>
126
+
127
+ const result = orderValidator.validate({ reference: "ab", quantity: 0 });
128
+ if (!result.valid) {
129
+ for (const issue of result.issues) {
130
+ // issue.path "reference" — where, with array indices filled in
131
+ // issue.code "stringMin" — which rule, stable across messages
132
+ // issue.message — the text, overridable per call
133
+ // issue.severity "error" — only "error" makes the value invalid
134
+ }
135
+ }
136
+ ```
137
+
138
+ `.v(path, chain)` declares rules for one field. A path you do not declare is
139
+ not validated, not required and not read, so covering a type partly is a normal
140
+ state rather than a half-finished one.
141
+
142
+ ### What a built validator gives you
143
+
144
+ ```ts
145
+ import { Builder } from "@maroonedog/luq";
146
+ import { requiredPlugin } from "@maroonedog/luq/plugins/required";
147
+ import { transformPlugin } from "@maroonedog/luq/plugins/transform";
148
+
149
+ interface Account {
150
+ readonly email: string;
151
+ }
152
+
153
+ const accounts = Builder()
154
+ .use(requiredPlugin)
155
+ .use(transformPlugin)
156
+ .for<Account>()
157
+ .v("email", (b) => b.string.required().transform((v) => v.toLowerCase()))
158
+ .build();
159
+
160
+ accounts.validate({ email: "A@B.COM" }); // judges; never applies a transform
161
+ accounts.parse({ email: "A@B.COM" }); // judges, then applies transforms
162
+ accounts.pick("email"); // one field, pre-resolved to its path
163
+ accounts.pickAll(["email"]); // several fields, same plan
164
+ ```
165
+
166
+ `validate` and `parse` return the same discriminated union: `{ valid: true,
167
+ data, issues }` or `{ valid: false, issues }`. `validate` hands back the object
168
+ you passed, by identity, when nothing was written.
169
+
170
+ ### Slots
171
+
172
+ `b` offers one slot per kind: `b.string`, `b.number`, `b.boolean`, `b.date`,
173
+ `b.array`, `b.tuple`, `b.object`, `b.union`, `b.any`. The slot must match the
174
+ field's declared type, and `[*]` descends into array elements:
175
+
176
+ ```ts
177
+ import { Builder } from "@maroonedog/luq";
178
+ import { requiredPlugin } from "@maroonedog/luq/plugins/required";
179
+ import { arrayMinLengthPlugin } from "@maroonedog/luq/plugins/arrayMinLength";
180
+
181
+ interface Basket {
182
+ readonly items: readonly { readonly sku: string }[];
183
+ }
184
+
185
+ const baskets = Builder()
186
+ .use(requiredPlugin)
187
+ .use(arrayMinLengthPlugin)
188
+ .for<Basket>()
189
+ .v("items", (b) => b.array.required().minLength(1))
190
+ .v("items[*].sku", (b) => b.string.required())
191
+ .build();
192
+ ```
193
+
194
+ ### Settings
195
+
196
+ `.withConfig({ ... })` before `.use()`, resolved once at `build()`. Two
197
+ validators built under different settings keep their own.
198
+
199
+ ```ts
200
+ import { Builder } from "@maroonedog/luq";
201
+ import { requiredPlugin } from "@maroonedog/luq/plugins/required";
202
+
203
+ interface Payload {
204
+ readonly id: string;
205
+ }
206
+
207
+ const strict = Builder()
208
+ .withConfig({ rootMissingMessage: "Request body is missing" })
209
+ .use(requiredPlugin)
210
+ .for<Payload>()
211
+ .v("id", (b) => b.string.required())
212
+ .build();
213
+
214
+ strict.validate(null).valid; // false, with that message at the root path
215
+ ```
216
+
217
+ ## Finding the plugin for a rule
218
+
219
+ Every rule is a named import, so the bundle contains what you used and nothing
220
+ else. Two ways to get from a method to its import, both inside this package:
221
+
222
+ **The compiler tells you.** Calling a method whose plugin is not in the bag is
223
+ an error that names the symbol and the subpath:
224
+
225
+ > `This expression is not callable. Type 'PluginNotImported<"min",
226
+ > "stringMinPlugin", "@maroonedog/luq/plugins/stringMin">' has no call
227
+ > signatures.`
228
+
229
+ A misspelled method is a different error — `Property 'mim' does not exist` —
230
+ so the two mistakes stay apart.
231
+
232
+ **The manifest lists them all.** `PLUGIN_MANIFEST` ships with the package and
233
+ maps every plugin to the method it adds, the slots it adds it to, and the
234
+ specifier to import:
235
+
236
+ ```ts
237
+ import { PLUGIN_MANIFEST } from "@maroonedog/luq/schema-tooling";
238
+
239
+ const forStringMin = PLUGIN_MANIFEST.filter((entry) =>
240
+ entry.surfaces.some(
241
+ (surface) => surface.method === "min" && surface.slots.includes("string")
242
+ )
243
+ );
244
+ // [{ subpathName: "stringMin",
245
+ // entryPoint: "@maroonedog/luq/plugins/stringMin",
246
+ // exportedSymbols: ["stringMinPlugin"],
247
+ // surfaces: [{ symbol: "stringMinPlugin", method: "min", slots: ["string"] }],
248
+ // ... }]
249
+ ```
250
+
100
251
  ## Documentation
101
252
 
102
253
  ### **[luq.dev](https://luq.dev)**
@@ -111,8 +262,9 @@ Zero runtime dependencies. TypeScript 5.0 or later.
111
262
  | [Benchmarks](https://luq.dev/benchmarks) | bundle size and throughput, with the method |
112
263
  | [Luq or zod?](https://luq.dev/luq-or-zod) | when schema-first is the better answer |
113
264
 
114
- The same documentation ships in `docs/` inside this repository, so the copy at
115
- any tag describes that release.
265
+ The guide is versioned with the code: `docs/` in the repository at any tag
266
+ describes that release. It is not part of the npm tarball — what ships is this
267
+ file, the compiled `dist/`, and `PLUGIN_MANIFEST` above.
116
268
 
117
269
  ## Status, and how this gets changed
118
270
 
@@ -121,11 +273,11 @@ Breaking changes happen in a major and nowhere else, an API being removed is
121
273
  deprecated one major ahead, and each major ships with the codemod needed to
122
274
  cross it.
123
275
 
124
- - **[CONTRIBUTING.md](CONTRIBUTING.md)** — `npm run verify` is the whole
276
+ - **[CONTRIBUTING.md](https://github.com/maroonedog/luq/blob/master/CONTRIBUTING.md)** — `npm run verify` is the whole
125
277
  contract; the gates and what each one refuses
126
- - **[SECURITY.md](SECURITY.md)** — reporting, zero runtime dependencies, the
278
+ - **[SECURITY.md](https://github.com/maroonedog/luq/blob/master/SECURITY.md)** — reporting, zero runtime dependencies, the
127
279
  prototype-pollution and SSRF positions, and what is *not* protected against
128
- - **[docs/RELEASING.md](docs/RELEASING.md)** — the release steps, the versioning
280
+ - **[docs/RELEASING.md](https://github.com/maroonedog/luq/blob/master/docs/RELEASING.md)** — the release steps, the versioning
129
281
  policy, what each CI workflow watches, and what is still decided by hand
130
282
 
131
283
  ## About the "universal platform" goal
@@ -3,14 +3,23 @@ import type { PluginBag, SlotPlugins } from "./plugin-bag.types";
3
3
  import type { ChainState } from "./chain-state.types";
4
4
  import type { ChainMethod } from "./chain-method.types";
5
5
  import type { RefineMethods } from "./refine-methods.types";
6
+ import type { SlotCatalog } from "./slot-catalog.generated";
6
7
  /** The phantom is REQUIRED, not optional. */
7
8
  export interface ChainMarks<TValue, TState extends ChainState> {
8
9
  readonly value: TValue;
9
10
  readonly state: TState;
10
11
  }
12
+ /**
13
+ * Every method this slot offers that this builder did not import.
14
+ *
15
+ * An `Omit`, so a method the bag DOES carry keeps its real signature: the key
16
+ * is removed from this half before the intersection, and the two halves can
17
+ * never describe the same method.
18
+ */
19
+ type NotImported<B extends PluginBag, S extends TypeName> = Omit<SlotCatalog[S], keyof SlotPlugins<B, S>>;
11
20
  export type FieldChain<B extends PluginBag, S extends TypeName, TRoot, TValue, TState extends ChainState> = {
12
21
  readonly [M in keyof SlotPlugins<B, S>]: ChainMethod<SlotPlugins<B, S>[M], B, S, TRoot, TValue, TState>;
13
- } & RefineMethods<B, TRoot, TValue, TState> & {
22
+ } & NotImported<B, S> & RefineMethods<B, TRoot, TValue, TState> & {
14
23
  readonly __chain: ChainMarks<TValue, TState>;
15
24
  };
16
25
  /** `ChainMarks<unknown, ChainState>`, never `ChainMarks<never, ...>`. */
@@ -23,3 +32,4 @@ export type ChainOutput<C> = C extends {
23
32
  export type ChainStateOf<C> = C extends {
24
33
  readonly __chain: ChainMarks<unknown, infer St>;
25
34
  } ? St : never;
35
+ export {};
@@ -8,6 +8,8 @@ export { collectFieldRules, FieldChainResultError, type FieldChainOutcome, } fro
8
8
  export type { PluginBag, BagEntry, SlotPlugins } from "./plugin-bag.types";
9
9
  export type { AllowNull, ChainState, CoverWith, ExcludeMissing, ExcludeNull, ExcludeUndefined, OpenState, UncoveredMembers, UnionGuardCoverageError, } from "./chain-state.types";
10
10
  export type { ChainMethod } from "./chain-method.types";
11
+ export type { PluginNotImported } from "./plugin-not-imported.types";
12
+ export type { SlotCatalog } from "./slot-catalog.generated";
11
13
  export type { AnyChain, ChainMarks, ChainOutput, ChainStateOf, FieldChain, } from "./field-chain.types";
12
14
  export type { FieldSlots } from "./field-slots.types";
13
15
  export type { ResolveArg, ResolveArgs, ResolveOut } from "./resolve-args.types";
@@ -0,0 +1,40 @@
1
+ /**
2
+ * What a chain method resolves to when its plugin was never passed to `.use()`.
3
+ *
4
+ * The method is real and it belongs on this slot — it is simply not in this
5
+ * builder's bag. Without this the reader gets `Property 'min' does not exist on
6
+ * type 'FieldChain<...>'`, which is equally true of a typo, of a method meant
7
+ * for another type, and of a forgotten import, and those have three different
8
+ * fixes. This has no call signature, so calling it fails, and the type
9
+ * arguments printed in that failure name the symbol to import and the subpath
10
+ * to import it from.
11
+ *
12
+ * A typo still gets `Property ... does not exist`: only a method the slot
13
+ * really offers appears here, so the two messages stay distinguishable.
14
+ */
15
+ export interface PluginNotImported<TMethod extends string, TSymbol extends string, TSubpath extends string> {
16
+ readonly luqError: "pluginNotImported";
17
+ readonly message: "This method needs its plugin. Import the symbol below and pass it to .use().";
18
+ readonly method: TMethod;
19
+ readonly importSymbol: TSymbol;
20
+ readonly importFrom: TSubpath;
21
+ }
22
+ /**
23
+ * Returned instead of the rule when a builder is missing plugins the rule was
24
+ * minted from, naming the ones it lacks.
25
+ *
26
+ * `useField` used to state that requirement structurally: the rule's bag sat in
27
+ * a parameter position, so the builder's slots had to be assignable to the
28
+ * rule's, and a builder carrying MORE plugins was accepted because more members
29
+ * are assignable to fewer. That stopped being true once a slot began carrying a
30
+ * member for every method it does NOT have: a missing method is
31
+ * `PluginNotImported` on one side and a real function on the other, and those
32
+ * are not assignable either way. The requirement is written out directly now,
33
+ * which is also what it always meant — the builder must carry what the rule
34
+ * needs — rather than a consequence of how two object types compared.
35
+ */
36
+ export interface FieldRuleNeedsPlugins<TMissing> {
37
+ readonly luqError: "fieldRuleNeedsPlugins";
38
+ readonly message: "This builder is missing plugins the rule was minted from. Pass them to .use() as well.";
39
+ readonly missing: TMissing;
40
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,265 @@
1
+ import type { PluginNotImported } from "./plugin-not-imported.types";
2
+ /**
3
+ * Which plugin offers which chain method, on which slot.
4
+ *
5
+ * This exists so that calling a method whose plugin was never imported is a
6
+ * NAMED compile error instead of `Property 'min' does not exist on type
7
+ * 'FieldChain<...>'`. That message states a fact and leaves the reader to
8
+ * work out whether they mistyped, picked a method for the wrong type, or
9
+ * simply forgot the import — three different fixes.
10
+ *
11
+ * Literal strings only. Nothing here imports a plugin, so the chain layer
12
+ * gains no dependency on the plugin layer; what it gains is the plugin
13
+ * layer's NAMES, which is what an error message has to say out loud.
14
+ */
15
+ export interface SlotCatalog {
16
+ readonly any: {
17
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
18
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
19
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
20
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
21
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
22
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
23
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
24
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
25
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
26
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
27
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
28
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
29
+ };
30
+ readonly array: {
31
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
32
+ readonly conditionalSchema: PluginNotImported<"conditionalSchema", "conditionalSchemaPlugin", "@maroonedog/luq/plugins/conditionalSchema">;
33
+ readonly contains: PluginNotImported<"contains", "arrayContainsPlugin", "@maroonedog/luq/plugins/arrayContains">;
34
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
35
+ readonly each: PluginNotImported<"each", "arrayEachPlugin", "@maroonedog/luq/plugins/arrayEach">;
36
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
37
+ readonly includes: PluginNotImported<"includes", "arrayIncludesPlugin", "@maroonedog/luq/plugins/arrayIncludes">;
38
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
39
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
40
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
41
+ readonly maxLength: PluginNotImported<"maxLength", "arrayMaxLengthPlugin", "@maroonedog/luq/plugins/arrayMaxLength">;
42
+ readonly minLength: PluginNotImported<"minLength", "arrayMinLengthPlugin", "@maroonedog/luq/plugins/arrayMinLength">;
43
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
44
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
45
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
46
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
47
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
48
+ readonly recursively: PluginNotImported<"recursively", "objectRecursivelyPlugin", "@maroonedog/luq/plugins/objectRecursively">;
49
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
50
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
51
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
52
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
53
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
54
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
55
+ readonly unique: PluginNotImported<"unique", "arrayUniquePlugin", "@maroonedog/luq/plugins/arrayUnique">;
56
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
57
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
58
+ };
59
+ readonly boolean: {
60
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
61
+ readonly conditionalSchema: PluginNotImported<"conditionalSchema", "conditionalSchemaPlugin", "@maroonedog/luq/plugins/conditionalSchema">;
62
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
63
+ readonly falsy: PluginNotImported<"falsy", "booleanFalsyPlugin", "@maroonedog/luq/plugins/booleanFalsy">;
64
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
65
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
66
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
67
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
68
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
69
+ readonly oneOf: PluginNotImported<"oneOf", "oneOfPlugin", "@maroonedog/luq/plugins/oneOf">;
70
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
71
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
72
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
73
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
74
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
75
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
76
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
77
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
78
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
79
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
80
+ readonly truthy: PluginNotImported<"truthy", "booleanTruthyPlugin", "@maroonedog/luq/plugins/booleanTruthy">;
81
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
82
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
83
+ };
84
+ readonly date: {
85
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
86
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
87
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
88
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
89
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
90
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
91
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
92
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
93
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
94
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
95
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
96
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
97
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
98
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
99
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
100
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
101
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
102
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
103
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
104
+ };
105
+ readonly number: {
106
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
107
+ readonly conditionalSchema: PluginNotImported<"conditionalSchema", "conditionalSchemaPlugin", "@maroonedog/luq/plugins/conditionalSchema">;
108
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
109
+ readonly finite: PluginNotImported<"finite", "numberFinitePlugin", "@maroonedog/luq/plugins/numberFinite">;
110
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
111
+ readonly integer: PluginNotImported<"integer", "numberIntegerPlugin", "@maroonedog/luq/plugins/numberInteger">;
112
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
113
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
114
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
115
+ readonly max: PluginNotImported<"max", "numberMaxPlugin", "@maroonedog/luq/plugins/numberMax">;
116
+ readonly min: PluginNotImported<"min", "numberMinPlugin", "@maroonedog/luq/plugins/numberMin">;
117
+ readonly multipleOf: PluginNotImported<"multipleOf", "numberMultipleOfPlugin", "@maroonedog/luq/plugins/numberMultipleOf">;
118
+ readonly negative: PluginNotImported<"negative", "numberNegativePlugin", "@maroonedog/luq/plugins/numberNegative">;
119
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
120
+ readonly oneOf: PluginNotImported<"oneOf", "oneOfPlugin", "@maroonedog/luq/plugins/oneOf">;
121
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
122
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
123
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
124
+ readonly positive: PluginNotImported<"positive", "numberPositivePlugin", "@maroonedog/luq/plugins/numberPositive">;
125
+ readonly range: PluginNotImported<"range", "numberRangePlugin", "@maroonedog/luq/plugins/numberRange">;
126
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
127
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
128
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
129
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
130
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
131
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
132
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
133
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
134
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
135
+ };
136
+ readonly object: {
137
+ readonly additionalProperties: PluginNotImported<"additionalProperties", "objectAdditionalPropertiesPlugin", "@maroonedog/luq/plugins/objectAdditionalProperties">;
138
+ readonly additionalPropertiesSchema: PluginNotImported<"additionalPropertiesSchema", "objectAdditionalPropertiesSchemaPlugin", "@maroonedog/luq/plugins/objectAdditionalProperties">;
139
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
140
+ readonly conditionalSchema: PluginNotImported<"conditionalSchema", "conditionalSchemaPlugin", "@maroonedog/luq/plugins/conditionalSchema">;
141
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
142
+ readonly dependentRequired: PluginNotImported<"dependentRequired", "objectDependentRequiredPlugin", "@maroonedog/luq/plugins/objectDependentRequired">;
143
+ readonly dependentSchemas: PluginNotImported<"dependentSchemas", "objectDependentSchemasPlugin", "@maroonedog/luq/plugins/objectDependentSchemas">;
144
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
145
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
146
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
147
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
148
+ readonly maxProperties: PluginNotImported<"maxProperties", "objectMaxPropertiesPlugin", "@maroonedog/luq/plugins/objectMaxProperties">;
149
+ readonly minProperties: PluginNotImported<"minProperties", "objectMinPropertiesPlugin", "@maroonedog/luq/plugins/objectMinProperties">;
150
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
151
+ readonly object: PluginNotImported<"object", "objectPlugin", "@maroonedog/luq/plugins/object">;
152
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
153
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
154
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
155
+ readonly patternProperties: PluginNotImported<"patternProperties", "objectPatternPropertiesPlugin", "@maroonedog/luq/plugins/objectPatternProperties">;
156
+ readonly propertyNames: PluginNotImported<"propertyNames", "objectPropertyNamesPlugin", "@maroonedog/luq/plugins/objectPropertyNames">;
157
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
158
+ readonly recursively: PluginNotImported<"recursively", "objectRecursivelyPlugin", "@maroonedog/luq/plugins/objectRecursively">;
159
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
160
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
161
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
162
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
163
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
164
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
165
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
166
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
167
+ };
168
+ readonly string: {
169
+ readonly alphanumeric: PluginNotImported<"alphanumeric", "stringAlphanumericPlugin", "@maroonedog/luq/plugins/stringAlphanumeric">;
170
+ readonly base64: PluginNotImported<"base64", "stringBase64Plugin", "@maroonedog/luq/plugins/stringBase64">;
171
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
172
+ readonly conditionalSchema: PluginNotImported<"conditionalSchema", "conditionalSchemaPlugin", "@maroonedog/luq/plugins/conditionalSchema">;
173
+ readonly contentEncoding: PluginNotImported<"contentEncoding", "stringContentEncodingPlugin", "@maroonedog/luq/plugins/stringContentEncoding">;
174
+ readonly contentMediaType: PluginNotImported<"contentMediaType", "stringContentMediaTypePlugin", "@maroonedog/luq/plugins/stringContentMediaType">;
175
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
176
+ readonly date: PluginNotImported<"date", "stringDatePlugin", "@maroonedog/luq/plugins/stringDate">;
177
+ readonly datetime: PluginNotImported<"datetime", "stringDatetimePlugin", "@maroonedog/luq/plugins/stringDatetime">;
178
+ readonly duration: PluginNotImported<"duration", "stringDurationPlugin", "@maroonedog/luq/plugins/stringDuration">;
179
+ readonly email: PluginNotImported<"email", "stringEmailPlugin", "@maroonedog/luq/plugins/stringEmail">;
180
+ readonly endsWith: PluginNotImported<"endsWith", "stringEndsWithPlugin", "@maroonedog/luq/plugins/stringEndsWith">;
181
+ readonly exactLength: PluginNotImported<"exactLength", "stringExactLengthPlugin", "@maroonedog/luq/plugins/stringExactLength">;
182
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
183
+ readonly hostname: PluginNotImported<"hostname", "stringHostnamePlugin", "@maroonedog/luq/plugins/stringHostname">;
184
+ readonly idnEmail: PluginNotImported<"idnEmail", "stringIdnEmailPlugin", "@maroonedog/luq/plugins/stringIdnEmail">;
185
+ readonly idnHostname: PluginNotImported<"idnHostname", "stringIdnHostnamePlugin", "@maroonedog/luq/plugins/stringIdnHostname">;
186
+ readonly ipv4: PluginNotImported<"ipv4", "stringIpv4Plugin", "@maroonedog/luq/plugins/stringIpv4">;
187
+ readonly ipv6: PluginNotImported<"ipv6", "stringIpv6Plugin", "@maroonedog/luq/plugins/stringIpv6">;
188
+ readonly iri: PluginNotImported<"iri", "stringIriPlugin", "@maroonedog/luq/plugins/stringIri">;
189
+ readonly iriReference: PluginNotImported<"iriReference", "stringIriReferencePlugin", "@maroonedog/luq/plugins/stringIriReference">;
190
+ readonly jsonPointer: PluginNotImported<"jsonPointer", "stringJsonPointerPlugin", "@maroonedog/luq/plugins/stringJsonPointer">;
191
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
192
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
193
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
194
+ readonly max: PluginNotImported<"max", "stringMaxPlugin", "@maroonedog/luq/plugins/stringMax">;
195
+ readonly min: PluginNotImported<"min", "stringMinPlugin", "@maroonedog/luq/plugins/stringMin">;
196
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
197
+ readonly oneOf: PluginNotImported<"oneOf", "oneOfPlugin", "@maroonedog/luq/plugins/oneOf">;
198
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
199
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
200
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
201
+ readonly pattern: PluginNotImported<"pattern", "stringPatternPlugin", "@maroonedog/luq/plugins/stringPattern">;
202
+ readonly readOnly: PluginNotImported<"readOnly", "readOnlyPlugin", "@maroonedog/luq/plugins/readOnly">;
203
+ readonly regex: PluginNotImported<"regex", "stringRegexPlugin", "@maroonedog/luq/plugins/stringRegex">;
204
+ readonly relativeJsonPointer: PluginNotImported<"relativeJsonPointer", "stringRelativeJsonPointerPlugin", "@maroonedog/luq/plugins/stringRelativeJsonPointer">;
205
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
206
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
207
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
208
+ readonly startsWith: PluginNotImported<"startsWith", "stringStartsWithPlugin", "@maroonedog/luq/plugins/stringStartsWith">;
209
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
210
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
211
+ readonly time: PluginNotImported<"time", "stringTimePlugin", "@maroonedog/luq/plugins/stringTime">;
212
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
213
+ readonly uriReference: PluginNotImported<"uriReference", "stringUriReferencePlugin", "@maroonedog/luq/plugins/stringUriReference">;
214
+ readonly uriTemplate: PluginNotImported<"uriTemplate", "stringUriTemplatePlugin", "@maroonedog/luq/plugins/stringUriTemplate">;
215
+ readonly url: PluginNotImported<"url", "stringUrlPlugin", "@maroonedog/luq/plugins/stringUrl">;
216
+ readonly uuid: PluginNotImported<"uuid", "uuidPlugin", "@maroonedog/luq/plugins/uuid">;
217
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
218
+ readonly writeOnly: PluginNotImported<"writeOnly", "writeOnlyPlugin", "@maroonedog/luq/plugins/writeOnly">;
219
+ };
220
+ readonly tuple: {
221
+ readonly builder: PluginNotImported<"builder", "tupleBuilderPlugin", "@maroonedog/luq/plugins/tupleBuilder">;
222
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
223
+ readonly contains: PluginNotImported<"contains", "arrayContainsPlugin", "@maroonedog/luq/plugins/arrayContains">;
224
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
225
+ readonly each: PluginNotImported<"each", "arrayEachPlugin", "@maroonedog/luq/plugins/arrayEach">;
226
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
227
+ readonly includes: PluginNotImported<"includes", "arrayIncludesPlugin", "@maroonedog/luq/plugins/arrayIncludes">;
228
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
229
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
230
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
231
+ readonly maxLength: PluginNotImported<"maxLength", "arrayMaxLengthPlugin", "@maroonedog/luq/plugins/arrayMaxLength">;
232
+ readonly minLength: PluginNotImported<"minLength", "arrayMinLengthPlugin", "@maroonedog/luq/plugins/arrayMinLength">;
233
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
234
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
235
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
236
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
237
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
238
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
239
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
240
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
241
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
242
+ readonly unique: PluginNotImported<"unique", "arrayUniquePlugin", "@maroonedog/luq/plugins/arrayUnique">;
243
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
244
+ };
245
+ readonly union: {
246
+ readonly compareField: PluginNotImported<"compareField", "compareFieldPlugin", "@maroonedog/luq/plugins/compareField">;
247
+ readonly custom: PluginNotImported<"custom", "customPlugin", "@maroonedog/luq/plugins/custom">;
248
+ readonly fromContext: PluginNotImported<"fromContext", "fromContextPlugin", "@maroonedog/luq/plugins/fromContext">;
249
+ readonly guard: PluginNotImported<"guard", "unionGuardPlugin", "@maroonedog/luq/plugins/unionGuard">;
250
+ readonly jsonSchema: PluginNotImported<"jsonSchema", "jsonSchemaPlugin", "@maroonedog/luq/plugins/jsonSchema">;
251
+ readonly jsonSchemaFullFeature: PluginNotImported<"jsonSchemaFullFeature", "jsonSchemaFullFeaturePlugin", "@maroonedog/luq/plugins/jsonSchemaFullFeature">;
252
+ readonly literal: PluginNotImported<"literal", "literalPlugin", "@maroonedog/luq/plugins/literal">;
253
+ readonly nullable: PluginNotImported<"nullable", "nullablePlugin", "@maroonedog/luq/plugins/nullable">;
254
+ readonly optional: PluginNotImported<"optional", "optionalPlugin", "@maroonedog/luq/plugins/optional">;
255
+ readonly optionalIf: PluginNotImported<"optionalIf", "optionalIfPlugin", "@maroonedog/luq/plugins/optionalIf">;
256
+ readonly orFail: PluginNotImported<"orFail", "orFailPlugin", "@maroonedog/luq/plugins/orFail">;
257
+ readonly required: PluginNotImported<"required", "requiredPlugin", "@maroonedog/luq/plugins/required">;
258
+ readonly requiredIf: PluginNotImported<"requiredIf", "requiredIfPlugin", "@maroonedog/luq/plugins/requiredIf">;
259
+ readonly skip: PluginNotImported<"skip", "skipPlugin", "@maroonedog/luq/plugins/skip">;
260
+ readonly stitch: PluginNotImported<"stitch", "stitchPlugin", "@maroonedog/luq/plugins/stitch">;
261
+ readonly stitchWith: PluginNotImported<"stitchWith", "stitchWithPlugin", "@maroonedog/luq/plugins/stitchWith">;
262
+ readonly transform: PluginNotImported<"transform", "transformPlugin", "@maroonedog/luq/plugins/transform">;
263
+ readonly validateIf: PluginNotImported<"validateIf", "validateIfPlugin", "@maroonedog/luq/plugins/validateIf">;
264
+ };
265
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // GENERATED FILE - do not edit by hand.
3
+ // Generated by scripts/catalog/build-plugin-catalog.ts out of the plugin directory structure.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ // GENERATED FILE - do not edit by hand.
2
+ // Generated by scripts/catalog/build-plugin-catalog.ts out of the plugin directory structure.
3
+ export {};
@@ -46,3 +46,23 @@ export declare function eraseBuilderSurface<T extends object>(assembled: object)
46
46
  * result is still correct. Exactly one call site is allowed.
47
47
  */
48
48
  export declare function eraseSchemaValidator<T>(planBacked: object): T;
49
+ /**
50
+ * Why: useField runs a rule's callback against the BUILDER's slots, and the
51
+ * two are typed on different bags — the rule's, and the builder's. The
52
+ * signature proves the relation between them (`keyof BRule extends keyof B`,
53
+ * i.e. the builder carries at least what the rule was minted from), but that
54
+ * is a statement about two type parameters and there is no way to write the
55
+ * value side so the compiler carries it through.
56
+ *
57
+ * It used to need no erasure because both sides named one bag `B` and a richer
58
+ * slot object was simply assignable to a leaner one. That stopped holding when
59
+ * a slot began carrying a member for every method it does NOT have: where the
60
+ * rule's bag reports PluginNotImported the builder's may have the real method,
61
+ * and those two are not assignable in either direction.
62
+ *
63
+ * Soundness depends on the subset relation the signature states. The callback
64
+ * can only call methods its own bag declares, every one of those keys is in
65
+ * the builder's bag, and a key in the builder's bag is a real method rather
66
+ * than the not-imported marker.
67
+ */
68
+ export declare function eraseRuleDefineToBuilderSlots<T>(define: (slots: never) => T): (slots: unknown) => T;