@fieldia/core 0.1.0

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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/package.json +40 -0
  4. package/schema/page.schema.json +2142 -0
  5. package/src/index.d.mts +15 -0
  6. package/src/index.d.ts +15 -0
  7. package/src/index.js +46 -0
  8. package/src/index.js.map +1 -0
  9. package/src/index.mjs +14 -0
  10. package/src/index.mjs.map +1 -0
  11. package/src/lib/expression/evaluateModifier.d.mts +55 -0
  12. package/src/lib/expression/evaluateModifier.d.ts +55 -0
  13. package/src/lib/expression/evaluateModifier.js +121 -0
  14. package/src/lib/expression/evaluateModifier.js.map +1 -0
  15. package/src/lib/expression/evaluateModifier.mjs +117 -0
  16. package/src/lib/expression/evaluateModifier.mjs.map +1 -0
  17. package/src/lib/expression/evaluator.d.mts +23 -0
  18. package/src/lib/expression/evaluator.d.ts +23 -0
  19. package/src/lib/expression/evaluator.js +122 -0
  20. package/src/lib/expression/evaluator.js.map +1 -0
  21. package/src/lib/expression/evaluator.mjs +118 -0
  22. package/src/lib/expression/evaluator.mjs.map +1 -0
  23. package/src/lib/expression/extractFieldNames.d.mts +41 -0
  24. package/src/lib/expression/extractFieldNames.d.ts +41 -0
  25. package/src/lib/expression/extractFieldNames.js +97 -0
  26. package/src/lib/expression/extractFieldNames.js.map +1 -0
  27. package/src/lib/expression/extractFieldNames.mjs +93 -0
  28. package/src/lib/expression/extractFieldNames.mjs.map +1 -0
  29. package/src/lib/expression/modifier.d.mts +14 -0
  30. package/src/lib/expression/modifier.d.ts +14 -0
  31. package/src/lib/expression/modifier.js +55 -0
  32. package/src/lib/expression/modifier.js.map +1 -0
  33. package/src/lib/expression/modifier.mjs +52 -0
  34. package/src/lib/expression/modifier.mjs.map +1 -0
  35. package/src/lib/expression/parser.d.mts +109 -0
  36. package/src/lib/expression/parser.d.ts +109 -0
  37. package/src/lib/expression/parser.js +317 -0
  38. package/src/lib/expression/parser.js.map +1 -0
  39. package/src/lib/expression/parser.mjs +313 -0
  40. package/src/lib/expression/parser.mjs.map +1 -0
  41. package/src/lib/expression/tokenizer.d.mts +31 -0
  42. package/src/lib/expression/tokenizer.d.ts +31 -0
  43. package/src/lib/expression/tokenizer.js +100 -0
  44. package/src/lib/expression/tokenizer.js.map +1 -0
  45. package/src/lib/expression/tokenizer.mjs +96 -0
  46. package/src/lib/expression/tokenizer.mjs.map +1 -0
  47. package/src/lib/format/field.d.mts +967 -0
  48. package/src/lib/format/field.d.ts +967 -0
  49. package/src/lib/format/field.js +147 -0
  50. package/src/lib/format/field.js.map +1 -0
  51. package/src/lib/format/field.mjs +144 -0
  52. package/src/lib/format/field.mjs.map +1 -0
  53. package/src/lib/format/json-schema.d.mts +6 -0
  54. package/src/lib/format/json-schema.d.ts +6 -0
  55. package/src/lib/format/json-schema.js +14 -0
  56. package/src/lib/format/json-schema.js.map +1 -0
  57. package/src/lib/format/json-schema.mjs +11 -0
  58. package/src/lib/format/json-schema.mjs.map +1 -0
  59. package/src/lib/format/json.d.mts +7 -0
  60. package/src/lib/format/json.d.ts +7 -0
  61. package/src/lib/format/json.js +7 -0
  62. package/src/lib/format/json.js.map +1 -0
  63. package/src/lib/format/json.mjs +4 -0
  64. package/src/lib/format/json.mjs.map +1 -0
  65. package/src/lib/format/layout.d.mts +521 -0
  66. package/src/lib/format/layout.d.ts +521 -0
  67. package/src/lib/format/layout.js +150 -0
  68. package/src/lib/format/layout.js.map +1 -0
  69. package/src/lib/format/layout.mjs +147 -0
  70. package/src/lib/format/layout.mjs.map +1 -0
  71. package/src/lib/format/layout.types.d.mts +22 -0
  72. package/src/lib/format/layout.types.d.ts +22 -0
  73. package/src/lib/format/layout.types.js +3 -0
  74. package/src/lib/format/layout.types.js.map +1 -0
  75. package/src/lib/format/layout.types.mjs +2 -0
  76. package/src/lib/format/layout.types.mjs.map +1 -0
  77. package/src/lib/format/page.d.mts +511 -0
  78. package/src/lib/format/page.d.ts +511 -0
  79. package/src/lib/format/page.js +27 -0
  80. package/src/lib/format/page.js.map +1 -0
  81. package/src/lib/format/page.mjs +24 -0
  82. package/src/lib/format/page.mjs.map +1 -0
  83. package/src/lib/format/validate.d.mts +23 -0
  84. package/src/lib/format/validate.d.ts +23 -0
  85. package/src/lib/format/validate.js +210 -0
  86. package/src/lib/format/validate.js.map +1 -0
  87. package/src/lib/format/validate.mjs +207 -0
  88. package/src/lib/format/validate.mjs.map +1 -0
  89. package/src/lib/record/check.d.mts +14 -0
  90. package/src/lib/record/check.d.ts +14 -0
  91. package/src/lib/record/check.js +167 -0
  92. package/src/lib/record/check.js.map +1 -0
  93. package/src/lib/record/check.mjs +163 -0
  94. package/src/lib/record/check.mjs.map +1 -0
  95. package/src/lib/record/data-source.d.mts +109 -0
  96. package/src/lib/record/data-source.d.ts +109 -0
  97. package/src/lib/record/data-source.js +3 -0
  98. package/src/lib/record/data-source.js.map +1 -0
  99. package/src/lib/record/data-source.mjs +2 -0
  100. package/src/lib/record/data-source.mjs.map +1 -0
  101. package/src/lib/record/form.d.mts +106 -0
  102. package/src/lib/record/form.d.ts +106 -0
  103. package/src/lib/record/form.js +545 -0
  104. package/src/lib/record/form.js.map +1 -0
  105. package/src/lib/record/form.mjs +542 -0
  106. package/src/lib/record/form.mjs.map +1 -0
  107. package/src/lib/record/memory-data-source.d.mts +28 -0
  108. package/src/lib/record/memory-data-source.d.ts +28 -0
  109. package/src/lib/record/memory-data-source.js +132 -0
  110. package/src/lib/record/memory-data-source.js.map +1 -0
  111. package/src/lib/record/memory-data-source.mjs +129 -0
  112. package/src/lib/record/memory-data-source.mjs.map +1 -0
  113. package/src/lib/record/messages.d.mts +35 -0
  114. package/src/lib/record/messages.d.ts +35 -0
  115. package/src/lib/record/messages.js +111 -0
  116. package/src/lib/record/messages.js.map +1 -0
  117. package/src/lib/record/messages.mjs +107 -0
  118. package/src/lib/record/messages.mjs.map +1 -0
  119. package/src/lib/record/scheduler.d.mts +12 -0
  120. package/src/lib/record/scheduler.d.ts +12 -0
  121. package/src/lib/record/scheduler.js +16 -0
  122. package/src/lib/record/scheduler.js.map +1 -0
  123. package/src/lib/record/scheduler.mjs +12 -0
  124. package/src/lib/record/scheduler.mjs.map +1 -0
  125. package/src/lib/record/values.d.mts +54 -0
  126. package/src/lib/record/values.d.ts +54 -0
  127. package/src/lib/record/values.js +78 -0
  128. package/src/lib/record/values.js.map +1 -0
  129. package/src/lib/record/values.mjs +71 -0
  130. package/src/lib/record/values.mjs.map +1 -0
@@ -0,0 +1,511 @@
1
+ import * as z from 'zod';
2
+ import { type Fields } from './field';
3
+ import { type RootLayout } from './layout';
4
+ /** The page format version this build reads and writes. */
5
+ export declare const FORMAT_VERSION: "0.1";
6
+ /**
7
+ * Where a page's values go. A `record` page edits records of a model through
8
+ * the app's data source; a `responses` page collects one new response per
9
+ * submission, the way a survey does.
10
+ */
11
+ export type PageData = {
12
+ kind: 'record';
13
+ model: string;
14
+ } | {
15
+ kind: 'responses';
16
+ };
17
+ export interface Page {
18
+ /** The format version, so a reader can refuse what it does not understand. */
19
+ fieldia: typeof FORMAT_VERSION;
20
+ id: string;
21
+ title?: string;
22
+ description?: string;
23
+ data: PageData;
24
+ fields: Fields;
25
+ layout: RootLayout;
26
+ }
27
+ export declare const PageDataSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
28
+ kind: z.ZodLiteral<"record">;
29
+ model: z.ZodString;
30
+ }, z.z.core.$strict>, z.ZodObject<{
31
+ kind: z.ZodLiteral<"responses">;
32
+ }, z.z.core.$strict>], "kind">;
33
+ export declare const PageSchema: z.ZodObject<{
34
+ fieldia: z.ZodLiteral<"0.1">;
35
+ id: z.ZodString;
36
+ title: z.ZodOptional<z.ZodString>;
37
+ description: z.ZodOptional<z.ZodString>;
38
+ data: z.ZodDiscriminatedUnion<[z.ZodObject<{
39
+ kind: z.ZodLiteral<"record">;
40
+ model: z.ZodString;
41
+ }, z.z.core.$strict>, z.ZodObject<{
42
+ kind: z.ZodLiteral<"responses">;
43
+ }, z.z.core.$strict>], "kind">;
44
+ fields: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
45
+ size: z.ZodOptional<z.ZodInt>;
46
+ pattern: z.ZodOptional<z.ZodString>;
47
+ label: z.ZodString;
48
+ help: z.ZodOptional<z.ZodString>;
49
+ required: z.ZodOptional<z.ZodBoolean>;
50
+ readonly: z.ZodOptional<z.ZodBoolean>;
51
+ default: z.ZodOptional<z.ZodJSONSchema>;
52
+ type: z.ZodLiteral<"char">;
53
+ }, z.z.core.$strict>, z.ZodObject<{
54
+ size: z.ZodOptional<z.ZodInt>;
55
+ label: z.ZodString;
56
+ help: z.ZodOptional<z.ZodString>;
57
+ required: z.ZodOptional<z.ZodBoolean>;
58
+ readonly: z.ZodOptional<z.ZodBoolean>;
59
+ default: z.ZodOptional<z.ZodJSONSchema>;
60
+ type: z.ZodLiteral<"text">;
61
+ }, z.z.core.$strict>, z.ZodObject<{
62
+ label: z.ZodString;
63
+ help: z.ZodOptional<z.ZodString>;
64
+ required: z.ZodOptional<z.ZodBoolean>;
65
+ readonly: z.ZodOptional<z.ZodBoolean>;
66
+ default: z.ZodOptional<z.ZodJSONSchema>;
67
+ type: z.ZodLiteral<"html">;
68
+ }, z.z.core.$strict>, z.ZodObject<{
69
+ min: z.ZodOptional<z.ZodNumber>;
70
+ max: z.ZodOptional<z.ZodNumber>;
71
+ label: z.ZodString;
72
+ help: z.ZodOptional<z.ZodString>;
73
+ required: z.ZodOptional<z.ZodBoolean>;
74
+ readonly: z.ZodOptional<z.ZodBoolean>;
75
+ default: z.ZodOptional<z.ZodJSONSchema>;
76
+ type: z.ZodLiteral<"integer">;
77
+ }, z.z.core.$strict>, z.ZodObject<{
78
+ min: z.ZodOptional<z.ZodNumber>;
79
+ max: z.ZodOptional<z.ZodNumber>;
80
+ digits: z.ZodOptional<z.ZodTuple<[z.ZodInt, z.ZodInt], null>>;
81
+ label: z.ZodString;
82
+ help: z.ZodOptional<z.ZodString>;
83
+ required: z.ZodOptional<z.ZodBoolean>;
84
+ readonly: z.ZodOptional<z.ZodBoolean>;
85
+ default: z.ZodOptional<z.ZodJSONSchema>;
86
+ type: z.ZodLiteral<"float">;
87
+ }, z.z.core.$strict>, z.ZodObject<{
88
+ currencyField: z.ZodOptional<z.ZodString>;
89
+ currency: z.ZodOptional<z.ZodString>;
90
+ min: z.ZodOptional<z.ZodNumber>;
91
+ max: z.ZodOptional<z.ZodNumber>;
92
+ digits: z.ZodOptional<z.ZodTuple<[z.ZodInt, z.ZodInt], null>>;
93
+ label: z.ZodString;
94
+ help: z.ZodOptional<z.ZodString>;
95
+ required: z.ZodOptional<z.ZodBoolean>;
96
+ readonly: z.ZodOptional<z.ZodBoolean>;
97
+ default: z.ZodOptional<z.ZodJSONSchema>;
98
+ type: z.ZodLiteral<"monetary">;
99
+ }, z.z.core.$strict>, z.ZodObject<{
100
+ label: z.ZodString;
101
+ help: z.ZodOptional<z.ZodString>;
102
+ required: z.ZodOptional<z.ZodBoolean>;
103
+ readonly: z.ZodOptional<z.ZodBoolean>;
104
+ default: z.ZodOptional<z.ZodJSONSchema>;
105
+ type: z.ZodLiteral<"boolean">;
106
+ }, z.z.core.$strict>, z.ZodObject<{
107
+ label: z.ZodString;
108
+ help: z.ZodOptional<z.ZodString>;
109
+ required: z.ZodOptional<z.ZodBoolean>;
110
+ readonly: z.ZodOptional<z.ZodBoolean>;
111
+ default: z.ZodOptional<z.ZodJSONSchema>;
112
+ type: z.ZodLiteral<"date">;
113
+ }, z.z.core.$strict>, z.ZodObject<{
114
+ label: z.ZodString;
115
+ help: z.ZodOptional<z.ZodString>;
116
+ required: z.ZodOptional<z.ZodBoolean>;
117
+ readonly: z.ZodOptional<z.ZodBoolean>;
118
+ default: z.ZodOptional<z.ZodJSONSchema>;
119
+ type: z.ZodLiteral<"datetime">;
120
+ }, z.z.core.$strict>, z.ZodObject<{
121
+ options: z.ZodArray<z.ZodObject<{
122
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
123
+ label: z.ZodString;
124
+ }, z.z.core.$strict>>;
125
+ multiple: z.ZodOptional<z.ZodBoolean>;
126
+ label: z.ZodString;
127
+ help: z.ZodOptional<z.ZodString>;
128
+ required: z.ZodOptional<z.ZodBoolean>;
129
+ readonly: z.ZodOptional<z.ZodBoolean>;
130
+ default: z.ZodOptional<z.ZodJSONSchema>;
131
+ type: z.ZodLiteral<"selection">;
132
+ }, z.z.core.$strict>, z.ZodObject<{
133
+ accept: z.ZodOptional<z.ZodArray<z.ZodString>>;
134
+ maxSize: z.ZodOptional<z.ZodInt>;
135
+ label: z.ZodString;
136
+ help: z.ZodOptional<z.ZodString>;
137
+ required: z.ZodOptional<z.ZodBoolean>;
138
+ readonly: z.ZodOptional<z.ZodBoolean>;
139
+ default: z.ZodOptional<z.ZodJSONSchema>;
140
+ type: z.ZodLiteral<"binary">;
141
+ }, z.z.core.$strict>, z.ZodObject<{
142
+ maxSize: z.ZodOptional<z.ZodInt>;
143
+ label: z.ZodString;
144
+ help: z.ZodOptional<z.ZodString>;
145
+ required: z.ZodOptional<z.ZodBoolean>;
146
+ readonly: z.ZodOptional<z.ZodBoolean>;
147
+ default: z.ZodOptional<z.ZodJSONSchema>;
148
+ type: z.ZodLiteral<"image">;
149
+ }, z.z.core.$strict>, z.ZodObject<{
150
+ relation: z.ZodString;
151
+ filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
152
+ field: z.ZodString;
153
+ op: z.ZodEnum<{
154
+ "=": "=";
155
+ "!=": "!=";
156
+ "<": "<";
157
+ ">": ">";
158
+ "<=": "<=";
159
+ ">=": ">=";
160
+ in: "in";
161
+ "not in": "not in";
162
+ like: "like";
163
+ ilike: "ilike";
164
+ }>;
165
+ value: z.ZodOptional<z.ZodJSONSchema>;
166
+ valueFrom: z.ZodOptional<z.ZodString>;
167
+ }, z.z.core.$strict>>>;
168
+ label: z.ZodString;
169
+ help: z.ZodOptional<z.ZodString>;
170
+ required: z.ZodOptional<z.ZodBoolean>;
171
+ readonly: z.ZodOptional<z.ZodBoolean>;
172
+ default: z.ZodOptional<z.ZodJSONSchema>;
173
+ type: z.ZodLiteral<"many2one">;
174
+ }, z.z.core.$strict>, z.ZodObject<{
175
+ relation: z.ZodString;
176
+ filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
177
+ field: z.ZodString;
178
+ op: z.ZodEnum<{
179
+ "=": "=";
180
+ "!=": "!=";
181
+ "<": "<";
182
+ ">": ">";
183
+ "<=": "<=";
184
+ ">=": ">=";
185
+ in: "in";
186
+ "not in": "not in";
187
+ like: "like";
188
+ ilike: "ilike";
189
+ }>;
190
+ value: z.ZodOptional<z.ZodJSONSchema>;
191
+ valueFrom: z.ZodOptional<z.ZodString>;
192
+ }, z.z.core.$strict>>>;
193
+ label: z.ZodString;
194
+ help: z.ZodOptional<z.ZodString>;
195
+ required: z.ZodOptional<z.ZodBoolean>;
196
+ readonly: z.ZodOptional<z.ZodBoolean>;
197
+ default: z.ZodOptional<z.ZodJSONSchema>;
198
+ type: z.ZodLiteral<"many2many">;
199
+ }, z.z.core.$strict>, z.ZodObject<{
200
+ relation: z.ZodString;
201
+ fields: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
202
+ size: z.ZodOptional<z.ZodInt>;
203
+ pattern: z.ZodOptional<z.ZodString>;
204
+ label: z.ZodString;
205
+ help: z.ZodOptional<z.ZodString>;
206
+ required: z.ZodOptional<z.ZodBoolean>;
207
+ readonly: z.ZodOptional<z.ZodBoolean>;
208
+ default: z.ZodOptional<z.ZodJSONSchema>;
209
+ type: z.ZodLiteral<"char">;
210
+ }, z.z.core.$strict>, z.ZodObject<{
211
+ size: z.ZodOptional<z.ZodInt>;
212
+ label: z.ZodString;
213
+ help: z.ZodOptional<z.ZodString>;
214
+ required: z.ZodOptional<z.ZodBoolean>;
215
+ readonly: z.ZodOptional<z.ZodBoolean>;
216
+ default: z.ZodOptional<z.ZodJSONSchema>;
217
+ type: z.ZodLiteral<"text">;
218
+ }, z.z.core.$strict>, z.ZodObject<{
219
+ label: z.ZodString;
220
+ help: z.ZodOptional<z.ZodString>;
221
+ required: z.ZodOptional<z.ZodBoolean>;
222
+ readonly: z.ZodOptional<z.ZodBoolean>;
223
+ default: z.ZodOptional<z.ZodJSONSchema>;
224
+ type: z.ZodLiteral<"html">;
225
+ }, z.z.core.$strict>, z.ZodObject<{
226
+ min: z.ZodOptional<z.ZodNumber>;
227
+ max: z.ZodOptional<z.ZodNumber>;
228
+ label: z.ZodString;
229
+ help: z.ZodOptional<z.ZodString>;
230
+ required: z.ZodOptional<z.ZodBoolean>;
231
+ readonly: z.ZodOptional<z.ZodBoolean>;
232
+ default: z.ZodOptional<z.ZodJSONSchema>;
233
+ type: z.ZodLiteral<"integer">;
234
+ }, z.z.core.$strict>, z.ZodObject<{
235
+ min: z.ZodOptional<z.ZodNumber>;
236
+ max: z.ZodOptional<z.ZodNumber>;
237
+ digits: z.ZodOptional<z.ZodTuple<[z.ZodInt, z.ZodInt], null>>;
238
+ label: z.ZodString;
239
+ help: z.ZodOptional<z.ZodString>;
240
+ required: z.ZodOptional<z.ZodBoolean>;
241
+ readonly: z.ZodOptional<z.ZodBoolean>;
242
+ default: z.ZodOptional<z.ZodJSONSchema>;
243
+ type: z.ZodLiteral<"float">;
244
+ }, z.z.core.$strict>, z.ZodObject<{
245
+ currencyField: z.ZodOptional<z.ZodString>;
246
+ currency: z.ZodOptional<z.ZodString>;
247
+ min: z.ZodOptional<z.ZodNumber>;
248
+ max: z.ZodOptional<z.ZodNumber>;
249
+ digits: z.ZodOptional<z.ZodTuple<[z.ZodInt, z.ZodInt], null>>;
250
+ label: z.ZodString;
251
+ help: z.ZodOptional<z.ZodString>;
252
+ required: z.ZodOptional<z.ZodBoolean>;
253
+ readonly: z.ZodOptional<z.ZodBoolean>;
254
+ default: z.ZodOptional<z.ZodJSONSchema>;
255
+ type: z.ZodLiteral<"monetary">;
256
+ }, z.z.core.$strict>, z.ZodObject<{
257
+ label: z.ZodString;
258
+ help: z.ZodOptional<z.ZodString>;
259
+ required: z.ZodOptional<z.ZodBoolean>;
260
+ readonly: z.ZodOptional<z.ZodBoolean>;
261
+ default: z.ZodOptional<z.ZodJSONSchema>;
262
+ type: z.ZodLiteral<"boolean">;
263
+ }, z.z.core.$strict>, z.ZodObject<{
264
+ label: z.ZodString;
265
+ help: z.ZodOptional<z.ZodString>;
266
+ required: z.ZodOptional<z.ZodBoolean>;
267
+ readonly: z.ZodOptional<z.ZodBoolean>;
268
+ default: z.ZodOptional<z.ZodJSONSchema>;
269
+ type: z.ZodLiteral<"date">;
270
+ }, z.z.core.$strict>, z.ZodObject<{
271
+ label: z.ZodString;
272
+ help: z.ZodOptional<z.ZodString>;
273
+ required: z.ZodOptional<z.ZodBoolean>;
274
+ readonly: z.ZodOptional<z.ZodBoolean>;
275
+ default: z.ZodOptional<z.ZodJSONSchema>;
276
+ type: z.ZodLiteral<"datetime">;
277
+ }, z.z.core.$strict>, z.ZodObject<{
278
+ options: z.ZodArray<z.ZodObject<{
279
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
280
+ label: z.ZodString;
281
+ }, z.z.core.$strict>>;
282
+ multiple: z.ZodOptional<z.ZodBoolean>;
283
+ label: z.ZodString;
284
+ help: z.ZodOptional<z.ZodString>;
285
+ required: z.ZodOptional<z.ZodBoolean>;
286
+ readonly: z.ZodOptional<z.ZodBoolean>;
287
+ default: z.ZodOptional<z.ZodJSONSchema>;
288
+ type: z.ZodLiteral<"selection">;
289
+ }, z.z.core.$strict>, z.ZodObject<{
290
+ accept: z.ZodOptional<z.ZodArray<z.ZodString>>;
291
+ maxSize: z.ZodOptional<z.ZodInt>;
292
+ label: z.ZodString;
293
+ help: z.ZodOptional<z.ZodString>;
294
+ required: z.ZodOptional<z.ZodBoolean>;
295
+ readonly: z.ZodOptional<z.ZodBoolean>;
296
+ default: z.ZodOptional<z.ZodJSONSchema>;
297
+ type: z.ZodLiteral<"binary">;
298
+ }, z.z.core.$strict>, z.ZodObject<{
299
+ maxSize: z.ZodOptional<z.ZodInt>;
300
+ label: z.ZodString;
301
+ help: z.ZodOptional<z.ZodString>;
302
+ required: z.ZodOptional<z.ZodBoolean>;
303
+ readonly: z.ZodOptional<z.ZodBoolean>;
304
+ default: z.ZodOptional<z.ZodJSONSchema>;
305
+ type: z.ZodLiteral<"image">;
306
+ }, z.z.core.$strict>, z.ZodObject<{
307
+ relation: z.ZodString;
308
+ filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
309
+ field: z.ZodString;
310
+ op: z.ZodEnum<{
311
+ "=": "=";
312
+ "!=": "!=";
313
+ "<": "<";
314
+ ">": ">";
315
+ "<=": "<=";
316
+ ">=": ">=";
317
+ in: "in";
318
+ "not in": "not in";
319
+ like: "like";
320
+ ilike: "ilike";
321
+ }>;
322
+ value: z.ZodOptional<z.ZodJSONSchema>;
323
+ valueFrom: z.ZodOptional<z.ZodString>;
324
+ }, z.z.core.$strict>>>;
325
+ label: z.ZodString;
326
+ help: z.ZodOptional<z.ZodString>;
327
+ required: z.ZodOptional<z.ZodBoolean>;
328
+ readonly: z.ZodOptional<z.ZodBoolean>;
329
+ default: z.ZodOptional<z.ZodJSONSchema>;
330
+ type: z.ZodLiteral<"many2one">;
331
+ }, z.z.core.$strict>, z.ZodObject<{
332
+ relation: z.ZodString;
333
+ filter: z.ZodOptional<z.ZodArray<z.ZodObject<{
334
+ field: z.ZodString;
335
+ op: z.ZodEnum<{
336
+ "=": "=";
337
+ "!=": "!=";
338
+ "<": "<";
339
+ ">": ">";
340
+ "<=": "<=";
341
+ ">=": ">=";
342
+ in: "in";
343
+ "not in": "not in";
344
+ like: "like";
345
+ ilike: "ilike";
346
+ }>;
347
+ value: z.ZodOptional<z.ZodJSONSchema>;
348
+ valueFrom: z.ZodOptional<z.ZodString>;
349
+ }, z.z.core.$strict>>>;
350
+ label: z.ZodString;
351
+ help: z.ZodOptional<z.ZodString>;
352
+ required: z.ZodOptional<z.ZodBoolean>;
353
+ readonly: z.ZodOptional<z.ZodBoolean>;
354
+ default: z.ZodOptional<z.ZodJSONSchema>;
355
+ type: z.ZodLiteral<"many2many">;
356
+ }, z.z.core.$strict>, z.ZodObject<{
357
+ models: z.ZodArray<z.ZodObject<{
358
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
359
+ label: z.ZodString;
360
+ }, z.z.core.$strict>>;
361
+ label: z.ZodString;
362
+ help: z.ZodOptional<z.ZodString>;
363
+ required: z.ZodOptional<z.ZodBoolean>;
364
+ readonly: z.ZodOptional<z.ZodBoolean>;
365
+ default: z.ZodOptional<z.ZodJSONSchema>;
366
+ type: z.ZodLiteral<"reference">;
367
+ }, z.z.core.$strict>, z.ZodObject<{
368
+ label: z.ZodString;
369
+ help: z.ZodOptional<z.ZodString>;
370
+ required: z.ZodOptional<z.ZodBoolean>;
371
+ readonly: z.ZodOptional<z.ZodBoolean>;
372
+ default: z.ZodOptional<z.ZodJSONSchema>;
373
+ type: z.ZodLiteral<"properties">;
374
+ }, z.z.core.$strict>, z.ZodObject<{
375
+ label: z.ZodString;
376
+ help: z.ZodOptional<z.ZodString>;
377
+ required: z.ZodOptional<z.ZodBoolean>;
378
+ readonly: z.ZodOptional<z.ZodBoolean>;
379
+ default: z.ZodOptional<z.ZodJSONSchema>;
380
+ type: z.ZodLiteral<"json">;
381
+ }, z.z.core.$strict>], "type">>;
382
+ label: z.ZodString;
383
+ help: z.ZodOptional<z.ZodString>;
384
+ required: z.ZodOptional<z.ZodBoolean>;
385
+ readonly: z.ZodOptional<z.ZodBoolean>;
386
+ default: z.ZodOptional<z.ZodJSONSchema>;
387
+ type: z.ZodLiteral<"one2many">;
388
+ }, z.z.core.$strict>, z.ZodObject<{
389
+ models: z.ZodArray<z.ZodObject<{
390
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
391
+ label: z.ZodString;
392
+ }, z.z.core.$strict>>;
393
+ label: z.ZodString;
394
+ help: z.ZodOptional<z.ZodString>;
395
+ required: z.ZodOptional<z.ZodBoolean>;
396
+ readonly: z.ZodOptional<z.ZodBoolean>;
397
+ default: z.ZodOptional<z.ZodJSONSchema>;
398
+ type: z.ZodLiteral<"reference">;
399
+ }, z.z.core.$strict>, z.ZodObject<{
400
+ label: z.ZodString;
401
+ help: z.ZodOptional<z.ZodString>;
402
+ required: z.ZodOptional<z.ZodBoolean>;
403
+ readonly: z.ZodOptional<z.ZodBoolean>;
404
+ default: z.ZodOptional<z.ZodJSONSchema>;
405
+ type: z.ZodLiteral<"properties">;
406
+ }, z.z.core.$strict>, z.ZodObject<{
407
+ label: z.ZodString;
408
+ help: z.ZodOptional<z.ZodString>;
409
+ required: z.ZodOptional<z.ZodBoolean>;
410
+ readonly: z.ZodOptional<z.ZodBoolean>;
411
+ default: z.ZodOptional<z.ZodJSONSchema>;
412
+ type: z.ZodLiteral<"json">;
413
+ }, z.z.core.$strict>], "type">>;
414
+ layout: z.ZodDiscriminatedUnion<[z.ZodObject<{
415
+ type: z.ZodLiteral<"sheet">;
416
+ id: z.ZodString;
417
+ title: z.ZodOptional<z.ZodObject<{
418
+ field: z.ZodString;
419
+ subtitleField: z.ZodOptional<z.ZodString>;
420
+ avatarField: z.ZodOptional<z.ZodString>;
421
+ placeholder: z.ZodOptional<z.ZodString>;
422
+ }, z.z.core.$strict>>;
423
+ statusbar: z.ZodOptional<z.ZodObject<{
424
+ field: z.ZodString;
425
+ visibleStates: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
426
+ clickable: z.ZodOptional<z.ZodBoolean>;
427
+ }, z.z.core.$strict>>;
428
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
429
+ type: z.ZodLiteral<"button">;
430
+ id: z.ZodString;
431
+ label: z.ZodString;
432
+ action: z.ZodString;
433
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodJSONSchema>>;
434
+ style: z.ZodOptional<z.ZodEnum<{
435
+ danger: "danger";
436
+ primary: "primary";
437
+ secondary: "secondary";
438
+ link: "link";
439
+ }>>;
440
+ confirm: z.ZodOptional<z.ZodString>;
441
+ icon: z.ZodOptional<z.ZodString>;
442
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
443
+ }, z.z.core.$strict>>>;
444
+ statButtons: z.ZodOptional<z.ZodArray<z.ZodObject<{
445
+ id: z.ZodString;
446
+ label: z.ZodString;
447
+ action: z.ZodString;
448
+ field: z.ZodOptional<z.ZodString>;
449
+ icon: z.ZodOptional<z.ZodString>;
450
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
451
+ }, z.z.core.$strict>>>;
452
+ ribbon: z.ZodOptional<z.ZodObject<{
453
+ id: z.ZodString;
454
+ label: z.ZodString;
455
+ tone: z.ZodOptional<z.ZodEnum<{
456
+ success: "success";
457
+ info: "info";
458
+ warning: "warning";
459
+ danger: "danger";
460
+ muted: "muted";
461
+ }>>;
462
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
463
+ }, z.z.core.$strict>>;
464
+ alerts: z.ZodOptional<z.ZodArray<z.ZodObject<{
465
+ id: z.ZodString;
466
+ message: z.ZodString;
467
+ tone: z.ZodOptional<z.ZodEnum<{
468
+ success: "success";
469
+ info: "info";
470
+ warning: "warning";
471
+ danger: "danger";
472
+ muted: "muted";
473
+ }>>;
474
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
475
+ }, z.z.core.$strict>>>;
476
+ children: z.ZodArray<typeof import("./layout").LayoutNodeSchema>;
477
+ sidePanel: z.ZodOptional<z.ZodObject<{
478
+ type: z.ZodLiteral<"slot">;
479
+ id: z.ZodString;
480
+ name: z.ZodString;
481
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
482
+ }, z.z.core.$strict>>;
483
+ }, z.z.core.$strict>, z.ZodObject<{
484
+ type: z.ZodLiteral<"sections">;
485
+ id: z.ZodString;
486
+ children: z.ZodArray<typeof import("./layout").LayoutNodeSchema>;
487
+ }, z.z.core.$strict>, z.ZodObject<{
488
+ type: z.ZodLiteral<"tabs">;
489
+ id: z.ZodString;
490
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
491
+ children: z.ZodArray<z.ZodObject<{
492
+ type: z.ZodLiteral<"tab">;
493
+ id: z.ZodString;
494
+ label: z.ZodString;
495
+ icon: z.ZodOptional<z.ZodString>;
496
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
497
+ children: z.ZodArray<typeof import("./layout").LayoutNodeSchema>;
498
+ }, z.z.core.$strict>>;
499
+ }, z.z.core.$strict>, z.ZodObject<{
500
+ type: z.ZodLiteral<"wizard">;
501
+ id: z.ZodString;
502
+ children: z.ZodArray<z.ZodObject<{
503
+ type: z.ZodLiteral<"step">;
504
+ id: z.ZodString;
505
+ label: z.ZodString;
506
+ description: z.ZodOptional<z.ZodString>;
507
+ invisible: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
508
+ children: z.ZodArray<typeof import("./layout").LayoutNodeSchema>;
509
+ }, z.z.core.$strict>>;
510
+ }, z.z.core.$strict>], "type">;
511
+ }, z.z.core.$strict>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageSchema = exports.PageDataSchema = exports.FORMAT_VERSION = void 0;
4
+ const z = require("zod");
5
+ const field_1 = require("./field");
6
+ const layout_1 = require("./layout");
7
+ /** The page format version this build reads and writes. */
8
+ exports.FORMAT_VERSION = '0.1';
9
+ exports.PageDataSchema = z.discriminatedUnion('kind', [
10
+ z.strictObject({ kind: z.literal('record'), model: z.string().min(1) }),
11
+ z.strictObject({ kind: z.literal('responses') }),
12
+ ]);
13
+ exports.PageSchema = z
14
+ .strictObject({
15
+ fieldia: z.literal(exports.FORMAT_VERSION),
16
+ id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/),
17
+ title: z.string().optional(),
18
+ description: z.string().optional(),
19
+ data: exports.PageDataSchema,
20
+ fields: field_1.FieldsSchema,
21
+ layout: layout_1.RootLayoutSchema,
22
+ })
23
+ .meta({
24
+ title: 'Fieldia page',
25
+ description: 'A form, survey or record screen as data. This schema checks shape; validatePage() also checks that every reference resolves.',
26
+ });
27
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/page.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AACzB,mCAAoD;AACpD,qCAA6D;AAE7D,2DAA2D;AAC9C,QAAA,cAAc,GAAG,KAAc,CAAC;AAoBhC,QAAA,cAAc,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACzD,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;CACjD,CAAC,CAAC;AAEU,QAAA,UAAU,GAAG,CAAC;KACxB,YAAY,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAc,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,sBAAc;IACpB,MAAM,EAAE,oBAAY;IACpB,MAAM,EAAE,yBAAgB;CACzB,CAAC;KACD,IAAI,CAAC;IACJ,KAAK,EAAE,cAAc;IACrB,WAAW,EACT,8HAA8H;CACjI,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import * as z from 'zod';
2
+ import { FieldsSchema } from './field.mjs';
3
+ import { RootLayoutSchema } from './layout.mjs';
4
+ /** The page format version this build reads and writes. */
5
+ export const FORMAT_VERSION = '0.1';
6
+ export const PageDataSchema = z.discriminatedUnion('kind', [
7
+ z.strictObject({ kind: z.literal('record'), model: z.string().min(1) }),
8
+ z.strictObject({ kind: z.literal('responses') }),
9
+ ]);
10
+ export const PageSchema = z
11
+ .strictObject({
12
+ fieldia: z.literal(FORMAT_VERSION),
13
+ id: z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/),
14
+ title: z.string().optional(),
15
+ description: z.string().optional(),
16
+ data: PageDataSchema,
17
+ fields: FieldsSchema,
18
+ layout: RootLayoutSchema,
19
+ })
20
+ .meta({
21
+ title: 'Fieldia page',
22
+ description: 'A form, survey or record screen as data. This schema checks shape; validatePage() also checks that every reference resolves.',
23
+ });
24
+ //# sourceMappingURL=page.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,YAAY,EAAe,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAE7D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAc,CAAC;AAoB7C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACzD,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,YAAY,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,gBAAgB;CACzB,CAAC;KACD,IAAI,CAAC;IACJ,KAAK,EAAE,cAAc;IACrB,WAAW,EACT,8HAA8H;CACjI,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type Page } from './page.mjs';
2
+ export interface PageIssue {
3
+ /** Where the problem is, as a path into the page: `layout.children[0].field`. */
4
+ path: string;
5
+ message: string;
6
+ }
7
+ export type PageValidation = {
8
+ ok: true;
9
+ page: Page;
10
+ } | {
11
+ ok: false;
12
+ issues: PageIssue[];
13
+ };
14
+ /**
15
+ * Check a page in two passes: its shape against the format, then every
16
+ * reference inside it — ids unique, every field a layout, title, statusbar,
17
+ * stat button, currency or filter names actually defined, and every modifier
18
+ * readable and reading only fields of this page.
19
+ *
20
+ * Returns the page as validated. Nothing is coerced or filled in: a page that
21
+ * passes is returned equal to the input.
22
+ */
23
+ export declare function validatePage(input: unknown): PageValidation;
@@ -0,0 +1,23 @@
1
+ import { type Page } from './page';
2
+ export interface PageIssue {
3
+ /** Where the problem is, as a path into the page: `layout.children[0].field`. */
4
+ path: string;
5
+ message: string;
6
+ }
7
+ export type PageValidation = {
8
+ ok: true;
9
+ page: Page;
10
+ } | {
11
+ ok: false;
12
+ issues: PageIssue[];
13
+ };
14
+ /**
15
+ * Check a page in two passes: its shape against the format, then every
16
+ * reference inside it — ids unique, every field a layout, title, statusbar,
17
+ * stat button, currency or filter names actually defined, and every modifier
18
+ * readable and reading only fields of this page.
19
+ *
20
+ * Returns the page as validated. Nothing is coerced or filled in: a page that
21
+ * passes is returned equal to the input.
22
+ */
23
+ export declare function validatePage(input: unknown): PageValidation;