@panneau/protocol 5.0.0-alpha.4 → 5.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/conformance/index.d.ts.map +1 -1
- package/dist/conformance/index.js +121 -1
- package/dist/conformance/index.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +5 -2
- package/dist/libraries.d.ts +16 -0
- package/dist/libraries.d.ts.map +1 -0
- package/dist/libraries.js +15 -0
- package/dist/libraries.js.map +1 -0
- package/dist/lint.d.ts +2 -2
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +15 -9
- package/dist/lint.js.map +1 -1
- package/dist/mock/example.d.ts.map +1 -1
- package/dist/mock/example.js +8 -0
- package/dist/mock/example.js.map +1 -1
- package/dist/mock/index.d.ts +15 -2
- package/dist/mock/index.d.ts.map +1 -1
- package/dist/mock/index.js +164 -13
- package/dist/mock/index.js.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +45 -4
- package/dist/openapi.js.map +1 -1
- package/dist/rules.d.ts.map +1 -1
- package/dist/rules.js +26 -1
- package/dist/rules.js.map +1 -1
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +4 -1
- package/dist/schemas/action.d.ts +18 -1
- package/dist/schemas/action.d.ts.map +1 -1
- package/dist/schemas/api.d.ts +141 -0
- package/dist/schemas/api.d.ts.map +1 -1
- package/dist/schemas/api.js +54 -9
- package/dist/schemas/api.js.map +1 -1
- package/dist/schemas/definition.d.ts +40 -2
- package/dist/schemas/definition.d.ts.map +1 -1
- package/dist/schemas/definition.js +2 -1
- package/dist/schemas/definition.js.map +1 -1
- package/dist/schemas/field.d.ts +26 -1
- package/dist/schemas/field.d.ts.map +1 -1
- package/dist/schemas/field.js +27 -5
- package/dist/schemas/field.js.map +1 -1
- package/dist/schemas/index.d.ts +259 -6
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +8 -3
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/resource.d.ts +38 -2
- package/dist/schemas/resource.d.ts.map +1 -1
- package/dist/schemas/resource.js +3 -1
- package/dist/schemas/resource.js.map +1 -1
- package/dist/search.d.ts +51 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +53 -0
- package/dist/search.js.map +1 -0
- package/dist/transforms.d.ts +17 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +34 -0
- package/dist/transforms.js.map +1 -0
- package/package.json +1 -1
- package/schema/boot.schema.json +82 -2
- package/schema/definition.schema.json +82 -2
- package/schema/openapi.json +507 -14
package/dist/schemas/field.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export declare const Rule: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
19
19
|
rule: z.ZodEnum<{
|
|
20
20
|
email: "email";
|
|
21
21
|
url: "url";
|
|
22
|
+
json: "json";
|
|
22
23
|
}>;
|
|
23
24
|
message: z.ZodOptional<z.ZodString>;
|
|
24
25
|
}, z.core.$loose>, z.ZodObject<{
|
|
@@ -42,6 +43,13 @@ export declare const Rule: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
42
43
|
field: z.ZodString;
|
|
43
44
|
}, z.core.$loose>]>;
|
|
44
45
|
message: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$loose>, z.ZodObject<{
|
|
47
|
+
rule: z.ZodLiteral<"crop">;
|
|
48
|
+
value: z.ZodObject<{
|
|
49
|
+
ratios: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
50
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
}, z.core.$loose>;
|
|
52
|
+
message: z.ZodOptional<z.ZodString>;
|
|
45
53
|
}, z.core.$loose>, z.ZodObject<{
|
|
46
54
|
rule: z.ZodString;
|
|
47
55
|
message: z.ZodOptional<z.ZodString>;
|
|
@@ -82,6 +90,7 @@ export declare const Field: z.ZodObject<{
|
|
|
82
90
|
rule: z.ZodEnum<{
|
|
83
91
|
email: "email";
|
|
84
92
|
url: "url";
|
|
93
|
+
json: "json";
|
|
85
94
|
}>;
|
|
86
95
|
message: z.ZodOptional<z.ZodString>;
|
|
87
96
|
}, z.core.$loose>, z.ZodObject<{
|
|
@@ -105,6 +114,13 @@ export declare const Field: z.ZodObject<{
|
|
|
105
114
|
field: z.ZodString;
|
|
106
115
|
}, z.core.$loose>]>;
|
|
107
116
|
message: z.ZodOptional<z.ZodString>;
|
|
117
|
+
}, z.core.$loose>, z.ZodObject<{
|
|
118
|
+
rule: z.ZodLiteral<"crop">;
|
|
119
|
+
value: z.ZodObject<{
|
|
120
|
+
ratios: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
121
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
}, z.core.$loose>;
|
|
123
|
+
message: z.ZodOptional<z.ZodString>;
|
|
108
124
|
}, z.core.$loose>, z.ZodObject<{
|
|
109
125
|
rule: z.ZodString;
|
|
110
126
|
message: z.ZodOptional<z.ZodString>;
|
|
@@ -125,9 +141,18 @@ export declare const Field: z.ZodObject<{
|
|
|
125
141
|
disabled: z.ZodOptional<z.ZodBoolean>;
|
|
126
142
|
}, z.core.$loose>>>;
|
|
127
143
|
multiple: z.ZodOptional<z.ZodBoolean>;
|
|
128
|
-
resource: z.ZodOptional<z.ZodString
|
|
144
|
+
resource: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
129
145
|
accept: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
146
|
+
ratios: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
147
|
+
rotate: z.ZodOptional<z.ZodBoolean>;
|
|
148
|
+
focalPoint: z.ZodOptional<z.ZodBoolean>;
|
|
149
|
+
transformBase: z.ZodOptional<z.ZodEnum<{
|
|
150
|
+
media: "media";
|
|
151
|
+
original: "original";
|
|
152
|
+
choose: "choose";
|
|
153
|
+
}>>;
|
|
130
154
|
from: z.ZodOptional<z.ZodString>;
|
|
155
|
+
check: z.ZodOptional<z.ZodBoolean>;
|
|
131
156
|
display: z.ZodOptional<z.ZodString>;
|
|
132
157
|
fields: z.ZodOptional<z.ZodArray<typeof Field>>;
|
|
133
158
|
types: z.ZodOptional<z.ZodArray<typeof BlockType>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/schemas/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAU,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/schemas/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAU,MAAM,UAAU,CAAC;AAiB7C,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAgDX,CAAC;AAEP,eAAO,MAAM,SAAS;;;;YAKJ,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;iBAGxC,CAAC;AAEH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4DI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC;WAMxC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,SAAS,CAAC,CAAC;;iBAQhB,CAAC;AAEjD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC"}
|
package/dist/schemas/field.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Condition, Option } from "./common.js";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
//#region src/schemas/field.ts
|
|
5
5
|
var message = z.string().optional().meta({ description: "Message shown when the rule fails, instead of the default one." });
|
|
6
|
+
var Ratio = z.string().regex(/^[1-9][0-9]*:[1-9][0-9]*$/).meta({ description: "An aspect ratio, as `width:height`: `16:9`." });
|
|
6
7
|
var DateBound = z.union([z.string().meta({ description: "An ISO 8601 date or date-time." }), z.looseObject({ field: z.string().min(1) }).meta({ description: "Another field of the form." })]);
|
|
7
8
|
var Rule = z.union([
|
|
8
9
|
z.looseObject({
|
|
@@ -21,7 +22,11 @@ var Rule = z.union([
|
|
|
21
22
|
message
|
|
22
23
|
}),
|
|
23
24
|
z.looseObject({
|
|
24
|
-
rule: z.enum([
|
|
25
|
+
rule: z.enum([
|
|
26
|
+
"email",
|
|
27
|
+
"url",
|
|
28
|
+
"json"
|
|
29
|
+
]),
|
|
25
30
|
message
|
|
26
31
|
}),
|
|
27
32
|
z.looseObject({
|
|
@@ -48,11 +53,19 @@ var Rule = z.union([
|
|
|
48
53
|
value: DateBound,
|
|
49
54
|
message
|
|
50
55
|
}),
|
|
56
|
+
z.looseObject({
|
|
57
|
+
rule: z.literal("crop"),
|
|
58
|
+
value: z.looseObject({
|
|
59
|
+
ratios: z.array(Ratio).optional().meta({ description: "A crop must have one of them: its height is within one pixel of its width divided by the ratio, after its rotation." }),
|
|
60
|
+
required: z.boolean().optional().meta({ description: "Each image needs a crop for this use." })
|
|
61
|
+
}),
|
|
62
|
+
message
|
|
63
|
+
}),
|
|
51
64
|
z.looseObject({
|
|
52
65
|
rule: z.string().refine((rule) => !PORTABLE_RULES.includes(rule)),
|
|
53
66
|
message
|
|
54
67
|
}).meta({ description: "A rule added in a later version of the protocol. Clients that don't know it ignore it; the server still enforces it." })
|
|
55
|
-
]).meta({ description: "A portable validation rule. `min` and `max` apply to numbers, and to the length of text and arrays. `accept` lists MIME types (`image/*`). `maxSize` is in bytes." });
|
|
68
|
+
]).meta({ description: "A portable validation rule. `min` and `max` apply to numbers, and to the length of text and arrays. `accept` lists MIME types (`image/*`). `maxSize` is in bytes. `crop` checks the transform of each image of an `image` or `media` value (decision 0031)." });
|
|
56
69
|
var BlockType = z.looseObject({
|
|
57
70
|
id: z.string().min(1),
|
|
58
71
|
label: z.string(),
|
|
@@ -75,10 +88,19 @@ var Field = z.looseObject({
|
|
|
75
88
|
rules: z.array(Rule).optional(),
|
|
76
89
|
visibleWhen: Condition.optional(),
|
|
77
90
|
options: z.array(Option).optional().meta({ description: "`select`: the choices." }),
|
|
78
|
-
multiple: z.boolean().optional().meta({ description: "`select`, `relation`, `media`, `file`: the value is an array." }),
|
|
79
|
-
resource: z.string().optional().meta({ description: "`relation`: id of the related resource. `media`: id of a resource of kind `media`,
|
|
80
|
-
accept: z.array(z.string()).optional().meta({ description: "`media`, `file`: accepted MIME types." }),
|
|
91
|
+
multiple: z.boolean().optional().meta({ description: "`select`, `relation`, `media`, `image`, `file`: the value is an array." }),
|
|
92
|
+
resource: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]).optional().meta({ description: "`relation`: id of the related resource. `media`, `image`: id of a resource of kind `media`, or a list of them; without it, every library of the definition (decision 0027)." }),
|
|
93
|
+
accept: z.array(z.string()).optional().meta({ description: "`media`, `image`, `file`: accepted MIME types. `image` defaults to `image/*`." }),
|
|
94
|
+
ratios: z.array(Ratio).optional().meta({ description: "`image`: ratios the editor suggests. The `crop` rule enforces ratios (decision 0031)." }),
|
|
95
|
+
rotate: z.boolean().optional().meta({ description: "`image`: whether the editor offers rotation and flips. Defaults to true." }),
|
|
96
|
+
focalPoint: z.boolean().optional().meta({ description: "`image`: whether the editor offers the focal point. Defaults to true." }),
|
|
97
|
+
transformBase: z.enum([
|
|
98
|
+
"media",
|
|
99
|
+
"original",
|
|
100
|
+
"choose"
|
|
101
|
+
]).optional().meta({ description: "`image`: what a transform for one use starts from: the media's own transform (`media`, the default), the original file, or the user's choice in the editor (decision 0031)." }),
|
|
81
102
|
from: z.string().optional().meta({ description: "`slug`: the field the slug is generated from." }),
|
|
103
|
+
check: z.boolean().optional().meta({ description: "The client checks the value with the backend as it is typed, with `POST /resources/{resource}/fields/{field}/check`: whether a `slug` is available, and its URL. A field at the top of the resource only." }),
|
|
82
104
|
display: z.string().optional().meta({ description: "Display used in lists, when it differs from the default one of the type." }),
|
|
83
105
|
get fields() {
|
|
84
106
|
return z.array(Field).optional().meta({ description: "`group` and `repeater`: the nested fields." });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","names":[],"sources":["../../src/schemas/field.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { PORTABLE_RULES } from '../constants';\nimport { Condition, Option } from './common';\n\nconst message = z\n .string()\n .optional()\n .meta({ description: 'Message shown when the rule fails, instead of the default one.' });\n\nconst DateBound = z.union([\n z.string().meta({ description: 'An ISO 8601 date or date-time.' }),\n z.looseObject({ field: z.string().min(1) }).meta({ description: 'Another field of the form.' }),\n]);\n\nexport const Rule = z\n .union([\n z.looseObject({ rule: z.literal('required'), message }),\n z.looseObject({ rule: z.enum(['min', 'max']), value: z.number(), message }),\n z.looseObject({\n rule: z.literal('pattern'),\n value: z.string(),\n flags: z.string().optional(),\n message,\n }),\n z.looseObject({ rule: z.enum(['email', 'url']), message }),\n z.looseObject({\n rule: z.literal('in'),\n value: z.array(z.union([z.string(), z.number(), z.boolean()])),\n message,\n }),\n z.looseObject({ rule: z.literal('accept'), value: z.array(z.string().min(1)), message }),\n z.looseObject({ rule: z.literal('maxSize'), value: z.number().int().positive(), message }),\n z.looseObject({ rule: z.enum(['before', 'after']), value: DateBound, message }),\n z\n .looseObject({\n rule: z\n .string()\n .refine((rule) => !(PORTABLE_RULES as readonly string[]).includes(rule)),\n message,\n })\n .meta({\n description:\n \"A rule added in a later version of the protocol. Clients that don't know it ignore it; the server still enforces it.\",\n }),\n ])\n .meta({\n description:\n 'A portable validation rule. `min` and `max` apply to numbers, and to the length of text and arrays. `accept` lists MIME types (`image/*`). `maxSize` is in bytes.',\n });\n\nexport const BlockType = z.looseObject({\n id: z.string().min(1),\n label: z.string(),\n icon: z.string().optional(),\n // Return types are written out so that declaration files keep the recursion.\n get fields(): z.ZodArray<typeof Field> {\n return z.array(Field);\n },\n});\n\nexport const Field = z\n .looseObject({\n name: z.string().min(1),\n type: z\n .string()\n .min(1)\n .meta({ description: 'A built-in field type, or a type provided by a plugin.' }),\n label: z.string().optional(),\n help: z.string().optional(),\n placeholder: z.string().optional(),\n default: z.unknown().optional(),\n localized: z\n .boolean()\n .optional()\n .meta({ description: 'The value is an object keyed by locale.' }),\n readOnly: z.boolean().optional(),\n createOnly: z.boolean().optional(),\n updateOnly: z.boolean().optional(),\n rules: z.array(Rule).optional(),\n visibleWhen: Condition.optional(),\n options: z.array(Option).optional().meta({ description: '`select`: the choices.' }),\n multiple: z\n .boolean()\n .optional()\n .meta({ description: '`select`, `relation`, `media`, `file`: the value is an array.' }),\n resource: z.string().optional().meta({\n description:\n '`relation`: id of the related resource. `media`: id of a resource of kind `media`, optional when the definition has only one.',\n }),\n accept: z\n .array(z.string())\n .optional()\n .meta({ description: '`media`, `file`: accepted MIME types.' }),\n from: z\n .string()\n .optional()\n .meta({ description: '`slug`: the field the slug is generated from.' }),\n display: z.string().optional().meta({\n description: 'Display used in lists, when it differs from the default one of the type.',\n }),\n get fields(): z.ZodOptional<z.ZodArray<typeof Field>> {\n return z\n .array(Field)\n .optional()\n .meta({ description: '`group` and `repeater`: the nested fields.' });\n },\n get types(): z.ZodOptional<z.ZodArray<typeof BlockType>> {\n return z\n .array(BlockType)\n .optional()\n .meta({ description: '`repeater`: typed blocks, each with its own fields.' });\n },\n settings: z.record(z.string(), z.unknown()).optional(),\n })\n .meta({ description: 'A field of a form.' });\n\nexport type Rule = z.infer<typeof Rule>;\nexport type BlockType = z.infer<typeof BlockType>;\nexport type Field = z.infer<typeof Field>;\n"],"mappings":";;;;AAKA,IAAM,UAAU,EACX,OAAO,CAAC,CACR,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,iEAAiE,CAAC;AAE3F,IAAM,YAAY,EAAE,MAAM,CACtB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,aAAa,iCAAiC,CAAC,GACjE,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,6BAA6B,CAAC,CAClG,CAAC;AAED,IAAa,OAAO,EACf,MAAM;CACH,EAAE,YAAY;EAAE,MAAM,EAAE,QAAQ,UAAU;EAAG;CAAQ,CAAC;CACtD,EAAE,YAAY;EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,KAAK,CAAC;EAAG,OAAO,EAAE,OAAO;EAAG;CAAQ,CAAC;CAC1E,EAAE,YAAY;EACV,MAAM,EAAE,QAAQ,SAAS;EACzB,OAAO,EAAE,OAAO;EAChB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;EAC3B;CACJ,CAAC;CACD,EAAE,YAAY;EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,KAAK,CAAC;EAAG;CAAQ,CAAC;CACzD,EAAE,YAAY;EACV,MAAM,EAAE,QAAQ,IAAI;EACpB,OAAO,EAAE,MAAM,EAAE,MAAM;GAAC,EAAE,OAAO;GAAG,EAAE,OAAO;GAAG,EAAE,QAAQ;EAAC,CAAC,CAAC;EAC7D;CACJ,CAAC;CACD,EAAE,YAAY;EAAE,MAAM,EAAE,QAAQ,QAAQ;EAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;EAAG;CAAQ,CAAC;CACvF,EAAE,YAAY;EAAE,MAAM,EAAE,QAAQ,SAAS;EAAG,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;EAAG;CAAQ,CAAC;CACzF,EAAE,YAAY;EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,OAAO,CAAC;EAAG,OAAO;EAAW;CAAQ,CAAC;CAC9E,EACK,YAAY;EACT,MAAM,EACD,OAAO,CAAC,CACR,QAAQ,SAAS,CAAE,eAAqC,SAAS,IAAI,CAAC;EAC3E;CACJ,CAAC,CAAC,CACD,KAAK,EACF,aACI,uHACR,CAAC;AACT,CAAC,CAAC,CACD,KAAK,EACF,aACI,oKACR,CAAC;AAEL,IAAa,YAAY,EAAE,YAAY;CACnC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACpB,OAAO,EAAE,OAAO;CAChB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAE1B,IAAI,SAAmC;EACnC,OAAO,EAAE,MAAM,KAAK;CACxB;AACJ,CAAC;AAED,IAAa,QAAQ,EAChB,YAAY;CACT,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACtB,MAAM,EACD,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,KAAK,EAAE,aAAa,yDAAyD,CAAC;CACnF,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;CAC1B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC9B,WAAW,EACN,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,0CAA0C,CAAC;CACpE,UAAU,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC/B,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACjC,YAAY,EAAE,QAAQ,CAAC,CAAC,SAAS;CACjC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,SAAS;CAC9B,aAAa,UAAU,SAAS;CAChC,SAAS,EAAE,MAAM,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,aAAa,yBAAyB,CAAC;CAClF,UAAU,EACL,QAAQ,CAAC,CACT,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,gEAAgE,CAAC;CAC1F,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EACjC,aACI,gIACR,CAAC;CACD,QAAQ,EACH,MAAM,EAAE,OAAO,CAAC,CAAC,CACjB,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,wCAAwC,CAAC;CAClE,MAAM,EACD,OAAO,CAAC,CACR,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,gDAAgD,CAAC;CAC1E,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAChC,aAAa,2EACjB,CAAC;CACD,IAAI,SAAkD;EAClD,OAAO,EACF,MAAM,KAAK,CAAC,CACZ,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,6CAA6C,CAAC;CAC3E;CACA,IAAI,QAAqD;EACrD,OAAO,EACF,MAAM,SAAS,CAAC,CAChB,SAAS,CAAC,CACV,KAAK,EAAE,aAAa,sDAAsD,CAAC;CACpF;CACA,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACzD,CAAC,CAAC,CACD,KAAK,EAAE,aAAa,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"field.js","names":[],"sources":["../../src/schemas/field.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { PORTABLE_RULES } from '../constants';\nimport { Condition, Option } from './common';\n\nconst message = z\n .string()\n .optional()\n .meta({ description: 'Message shown when the rule fails, instead of the default one.' });\n\nconst Ratio = z\n .string()\n .regex(/^[1-9][0-9]*:[1-9][0-9]*$/)\n .meta({ description: 'An aspect ratio, as `width:height`: `16:9`.' });\n\nconst DateBound = z.union([\n z.string().meta({ description: 'An ISO 8601 date or date-time.' }),\n z.looseObject({ field: z.string().min(1) }).meta({ description: 'Another field of the form.' }),\n]);\n\nexport const Rule = z\n .union([\n z.looseObject({ rule: z.literal('required'), message }),\n z.looseObject({ rule: z.enum(['min', 'max']), value: z.number(), message }),\n z.looseObject({\n rule: z.literal('pattern'),\n value: z.string(),\n flags: z.string().optional(),\n message,\n }),\n z.looseObject({ rule: z.enum(['email', 'url', 'json']), message }),\n z.looseObject({\n rule: z.literal('in'),\n value: z.array(z.union([z.string(), z.number(), z.boolean()])),\n message,\n }),\n z.looseObject({ rule: z.literal('accept'), value: z.array(z.string().min(1)), message }),\n z.looseObject({ rule: z.literal('maxSize'), value: z.number().int().positive(), message }),\n z.looseObject({ rule: z.enum(['before', 'after']), value: DateBound, message }),\n z.looseObject({\n rule: z.literal('crop'),\n value: z.looseObject({\n ratios: z.array(Ratio).optional().meta({\n description:\n 'A crop must have one of them: its height is within one pixel of its width divided by the ratio, after its rotation.',\n }),\n required: z\n .boolean()\n .optional()\n .meta({ description: 'Each image needs a crop for this use.' }),\n }),\n message,\n }),\n z\n .looseObject({\n rule: z\n .string()\n .refine((rule) => !(PORTABLE_RULES as readonly string[]).includes(rule)),\n message,\n })\n .meta({\n description:\n \"A rule added in a later version of the protocol. Clients that don't know it ignore it; the server still enforces it.\",\n }),\n ])\n .meta({\n description:\n 'A portable validation rule. `min` and `max` apply to numbers, and to the length of text and arrays. `accept` lists MIME types (`image/*`). `maxSize` is in bytes. `crop` checks the transform of each image of an `image` or `media` value (decision 0031).',\n });\n\nexport const BlockType = z.looseObject({\n id: z.string().min(1),\n label: z.string(),\n icon: z.string().optional(),\n // Return types are written out so that declaration files keep the recursion.\n get fields(): z.ZodArray<typeof Field> {\n return z.array(Field);\n },\n});\n\nexport const Field = z\n .looseObject({\n name: z.string().min(1),\n type: z\n .string()\n .min(1)\n .meta({ description: 'A built-in field type, or a type provided by a plugin.' }),\n label: z.string().optional(),\n help: z.string().optional(),\n placeholder: z.string().optional(),\n default: z.unknown().optional(),\n localized: z\n .boolean()\n .optional()\n .meta({ description: 'The value is an object keyed by locale.' }),\n readOnly: z.boolean().optional(),\n createOnly: z.boolean().optional(),\n updateOnly: z.boolean().optional(),\n rules: z.array(Rule).optional(),\n visibleWhen: Condition.optional(),\n options: z.array(Option).optional().meta({ description: '`select`: the choices.' }),\n multiple: z.boolean().optional().meta({\n description: '`select`, `relation`, `media`, `image`, `file`: the value is an array.',\n }),\n resource: z\n .union([z.string().min(1), z.array(z.string().min(1)).min(1)])\n .optional()\n .meta({\n description:\n '`relation`: id of the related resource. `media`, `image`: id of a resource of kind `media`, or a list of them; without it, every library of the definition (decision 0027).',\n }),\n accept: z.array(z.string()).optional().meta({\n description:\n '`media`, `image`, `file`: accepted MIME types. `image` defaults to `image/*`.',\n }),\n ratios: z.array(Ratio).optional().meta({\n description:\n '`image`: ratios the editor suggests. The `crop` rule enforces ratios (decision 0031).',\n }),\n rotate: z.boolean().optional().meta({\n description: '`image`: whether the editor offers rotation and flips. Defaults to true.',\n }),\n focalPoint: z.boolean().optional().meta({\n description: '`image`: whether the editor offers the focal point. Defaults to true.',\n }),\n transformBase: z.enum(['media', 'original', 'choose']).optional().meta({\n description:\n \"`image`: what a transform for one use starts from: the media's own transform (`media`, the default), the original file, or the user's choice in the editor (decision 0031).\",\n }),\n from: z\n .string()\n .optional()\n .meta({ description: '`slug`: the field the slug is generated from.' }),\n check: z.boolean().optional().meta({\n description:\n 'The client checks the value with the backend as it is typed, with `POST /resources/{resource}/fields/{field}/check`: whether a `slug` is available, and its URL. A field at the top of the resource only.',\n }),\n display: z.string().optional().meta({\n description: 'Display used in lists, when it differs from the default one of the type.',\n }),\n get fields(): z.ZodOptional<z.ZodArray<typeof Field>> {\n return z\n .array(Field)\n .optional()\n .meta({ description: '`group` and `repeater`: the nested fields.' });\n },\n get types(): z.ZodOptional<z.ZodArray<typeof BlockType>> {\n return z\n .array(BlockType)\n .optional()\n .meta({ description: '`repeater`: typed blocks, each with its own fields.' });\n },\n settings: z.record(z.string(), z.unknown()).optional(),\n })\n .meta({ description: 'A field of a form.' });\n\nexport type Rule = z.infer<typeof Rule>;\nexport type BlockType = z.infer<typeof BlockType>;\nexport type Field = z.infer<typeof Field>;\n"],"mappings":"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"}
|