@maroonedog/luq 2.4.3 → 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.
- package/README.md +158 -6
- package/dist/chain/field-chain.types.d.ts +11 -1
- package/dist/chain/index.d.ts +2 -0
- package/dist/chain/plugin-not-imported.types.d.ts +40 -0
- package/dist/chain/plugin-not-imported.types.js +2 -0
- package/dist/chain/plugin-not-imported.types.mjs +1 -0
- package/dist/chain/slot-catalog.generated.d.ts +265 -0
- package/dist/chain/slot-catalog.generated.js +4 -0
- package/dist/chain/slot-catalog.generated.mjs +3 -0
- package/dist/core/type-erasure.d.ts +20 -0
- package/dist/core/type-erasure.js +23 -0
- package/dist/core/type-erasure.mjs +22 -0
- package/dist/field-rule/use-field.d.ts +2 -1
- package/dist/field-rule/use-field.js +9 -2
- package/dist/field-rule/use-field.mjs +9 -2
- package/dist/plugins/manifest.generated.d.ts +18 -0
- package/dist/plugins/manifest.generated.js +77 -77
- package/dist/plugins/manifest.generated.mjs +77 -77
- package/dist/schema-tooling/index.d.ts +11 -0
- package/dist/schema-tooling/index.js +12 -1
- package/dist/schema-tooling/index.mjs +10 -0
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
-
<img src="
|
|
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
|
|
115
|
-
|
|
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 {};
|
package/dist/chain/index.d.ts
CHANGED
|
@@ -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 @@
|
|
|
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
|
+
}
|
|
@@ -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;
|