@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,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FieldsSchema = exports.FieldSchema = exports.LineFieldSchema = exports.FilterConditionSchema = exports.OptionSchema = exports.FIELD_TYPES = exports.FIELD_NAME = void 0;
4
+ const z = require("zod");
5
+ const json_1 = require("./json");
6
+ /**
7
+ * Field definitions: what a page knows about each value it shows or collects.
8
+ *
9
+ * A page declares its fields once, by name, and its layout points at them —
10
+ * the same split a backend's own field metadata uses, so an app can generate
11
+ * these definitions from it. Names follow Fieldia's naming rule: a backend's
12
+ * vocabulary stays unless it is a product name, jargon, or a clash.
13
+ */
14
+ /** A field name: what expressions and layout nodes use to refer to a field. */
15
+ exports.FIELD_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
16
+ exports.FIELD_TYPES = [
17
+ 'char',
18
+ 'text',
19
+ 'html',
20
+ 'integer',
21
+ 'float',
22
+ 'monetary',
23
+ 'boolean',
24
+ 'date',
25
+ 'datetime',
26
+ 'selection',
27
+ 'binary',
28
+ 'image',
29
+ 'many2one',
30
+ 'many2many',
31
+ 'one2many',
32
+ 'reference',
33
+ 'properties',
34
+ 'json',
35
+ ];
36
+ /** One choice in a selection or reference. */
37
+ exports.OptionSchema = z
38
+ .object({
39
+ value: z.union([z.string(), z.number()]),
40
+ label: z.string(),
41
+ })
42
+ .strict()
43
+ .meta({ id: 'Option' });
44
+ /**
45
+ * One condition limiting which records a relation may point to. Conditions in
46
+ * a filter all apply together. `valueFrom` compares against another field of
47
+ * the record being edited, so a region list can follow the chosen country.
48
+ */
49
+ exports.FilterConditionSchema = z
50
+ .object({
51
+ field: z.string().min(1),
52
+ op: z.enum(['=', '!=', '<', '>', '<=', '>=', 'in', 'not in', 'like', 'ilike']),
53
+ value: json_1.JsonValueSchema.optional(),
54
+ valueFrom: z.string().regex(exports.FIELD_NAME).optional(),
55
+ })
56
+ .strict()
57
+ .refine((c) => (c.value === undefined) !== (c.valueFrom === undefined), {
58
+ message: 'set exactly one of value or valueFrom',
59
+ })
60
+ .meta({ id: 'FilterCondition' });
61
+ const common = {
62
+ label: z.string(),
63
+ help: z.string().optional(),
64
+ required: z.boolean().optional(),
65
+ readonly: z.boolean().optional(),
66
+ default: json_1.JsonValueSchema.optional(),
67
+ };
68
+ const size = z.int().positive().optional();
69
+ const digits = z.tuple([z.int().positive(), z.int().nonnegative()]).optional();
70
+ const relation = z.string().min(1);
71
+ const filter = z.array(exports.FilterConditionSchema).optional();
72
+ const Char = z.object({ type: z.literal('char'), ...common, size, pattern: z.string().optional() }).strict();
73
+ const Text = z.object({ type: z.literal('text'), ...common, size }).strict();
74
+ const Html = z.object({ type: z.literal('html'), ...common }).strict();
75
+ const Integer = z
76
+ .object({ type: z.literal('integer'), ...common, min: z.number().optional(), max: z.number().optional() })
77
+ .strict();
78
+ const Float = z
79
+ .object({ type: z.literal('float'), ...common, min: z.number().optional(), max: z.number().optional(), digits })
80
+ .strict();
81
+ const Monetary = z
82
+ .object({
83
+ type: z.literal('monetary'),
84
+ ...common,
85
+ /** The field holding this amount's currency. */
86
+ currencyField: z.string().regex(exports.FIELD_NAME).optional(),
87
+ /** A fixed ISO 4217 currency, when the page has no currency field. */
88
+ currency: z.string().regex(/^[A-Z]{3}$/).optional(),
89
+ min: z.number().optional(),
90
+ max: z.number().optional(),
91
+ digits,
92
+ })
93
+ .strict();
94
+ const BooleanField = z.object({ type: z.literal('boolean'), ...common }).strict();
95
+ const DateField = z.object({ type: z.literal('date'), ...common }).strict();
96
+ const DateTime = z.object({ type: z.literal('datetime'), ...common }).strict();
97
+ const Selection = z
98
+ .object({
99
+ type: z.literal('selection'),
100
+ ...common,
101
+ options: z.array(exports.OptionSchema).min(1),
102
+ /** Several options may be chosen; the value becomes a list. */
103
+ multiple: z.boolean().optional(),
104
+ })
105
+ .strict();
106
+ const Binary = z
107
+ .object({
108
+ type: z.literal('binary'),
109
+ ...common,
110
+ /** Accepted media types, such as "application/pdf" or "image/*". */
111
+ accept: z.array(z.string()).optional(),
112
+ /** Largest accepted file, in bytes. */
113
+ maxSize: z.int().positive().optional(),
114
+ })
115
+ .strict();
116
+ const Image = z.object({ type: z.literal('image'), ...common, maxSize: z.int().positive().optional() }).strict();
117
+ const Many2one = z.object({ type: z.literal('many2one'), ...common, relation, filter }).strict();
118
+ const Many2many = z.object({ type: z.literal('many2many'), ...common, relation, filter }).strict();
119
+ const Reference = z
120
+ .object({ type: z.literal('reference'), ...common, models: z.array(exports.OptionSchema).min(1) })
121
+ .strict();
122
+ const Properties = z.object({ type: z.literal('properties'), ...common }).strict();
123
+ const Json = z.object({ type: z.literal('json'), ...common }).strict();
124
+ /** A field of a one2many's lines. Lines cannot hold lines of their own. */
125
+ exports.LineFieldSchema = z
126
+ .discriminatedUnion('type', [
127
+ Char, Text, Html, Integer, Float, Monetary, BooleanField, DateField, DateTime,
128
+ Selection, Binary, Image, Many2one, Many2many, Reference, Properties, Json,
129
+ ])
130
+ .meta({ id: 'LineField' });
131
+ const One2many = z
132
+ .object({
133
+ type: z.literal('one2many'),
134
+ ...common,
135
+ relation,
136
+ /** The fields of each line, so lines can be edited in place. */
137
+ fields: z.record(z.string().regex(exports.FIELD_NAME), exports.LineFieldSchema),
138
+ })
139
+ .strict();
140
+ exports.FieldSchema = z
141
+ .discriminatedUnion('type', [
142
+ Char, Text, Html, Integer, Float, Monetary, BooleanField, DateField, DateTime,
143
+ Selection, Binary, Image, Many2one, Many2many, One2many, Reference, Properties, Json,
144
+ ])
145
+ .meta({ id: 'Field' });
146
+ exports.FieldsSchema = z.record(z.string().regex(exports.FIELD_NAME), exports.FieldSchema);
147
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import * as z from 'zod';
2
+ import { JsonValueSchema } from './json.mjs';
3
+ /**
4
+ * Field definitions: what a page knows about each value it shows or collects.
5
+ *
6
+ * A page declares its fields once, by name, and its layout points at them —
7
+ * the same split a backend's own field metadata uses, so an app can generate
8
+ * these definitions from it. Names follow Fieldia's naming rule: a backend's
9
+ * vocabulary stays unless it is a product name, jargon, or a clash.
10
+ */
11
+ /** A field name: what expressions and layout nodes use to refer to a field. */
12
+ export const FIELD_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
13
+ export const FIELD_TYPES = [
14
+ 'char',
15
+ 'text',
16
+ 'html',
17
+ 'integer',
18
+ 'float',
19
+ 'monetary',
20
+ 'boolean',
21
+ 'date',
22
+ 'datetime',
23
+ 'selection',
24
+ 'binary',
25
+ 'image',
26
+ 'many2one',
27
+ 'many2many',
28
+ 'one2many',
29
+ 'reference',
30
+ 'properties',
31
+ 'json',
32
+ ];
33
+ /** One choice in a selection or reference. */
34
+ export const OptionSchema = z
35
+ .object({
36
+ value: z.union([z.string(), z.number()]),
37
+ label: z.string(),
38
+ })
39
+ .strict()
40
+ .meta({ id: 'Option' });
41
+ /**
42
+ * One condition limiting which records a relation may point to. Conditions in
43
+ * a filter all apply together. `valueFrom` compares against another field of
44
+ * the record being edited, so a region list can follow the chosen country.
45
+ */
46
+ export const FilterConditionSchema = z
47
+ .object({
48
+ field: z.string().min(1),
49
+ op: z.enum(['=', '!=', '<', '>', '<=', '>=', 'in', 'not in', 'like', 'ilike']),
50
+ value: JsonValueSchema.optional(),
51
+ valueFrom: z.string().regex(FIELD_NAME).optional(),
52
+ })
53
+ .strict()
54
+ .refine((c) => (c.value === undefined) !== (c.valueFrom === undefined), {
55
+ message: 'set exactly one of value or valueFrom',
56
+ })
57
+ .meta({ id: 'FilterCondition' });
58
+ const common = {
59
+ label: z.string(),
60
+ help: z.string().optional(),
61
+ required: z.boolean().optional(),
62
+ readonly: z.boolean().optional(),
63
+ default: JsonValueSchema.optional(),
64
+ };
65
+ const size = z.int().positive().optional();
66
+ const digits = z.tuple([z.int().positive(), z.int().nonnegative()]).optional();
67
+ const relation = z.string().min(1);
68
+ const filter = z.array(FilterConditionSchema).optional();
69
+ const Char = z.object({ type: z.literal('char'), ...common, size, pattern: z.string().optional() }).strict();
70
+ const Text = z.object({ type: z.literal('text'), ...common, size }).strict();
71
+ const Html = z.object({ type: z.literal('html'), ...common }).strict();
72
+ const Integer = z
73
+ .object({ type: z.literal('integer'), ...common, min: z.number().optional(), max: z.number().optional() })
74
+ .strict();
75
+ const Float = z
76
+ .object({ type: z.literal('float'), ...common, min: z.number().optional(), max: z.number().optional(), digits })
77
+ .strict();
78
+ const Monetary = z
79
+ .object({
80
+ type: z.literal('monetary'),
81
+ ...common,
82
+ /** The field holding this amount's currency. */
83
+ currencyField: z.string().regex(FIELD_NAME).optional(),
84
+ /** A fixed ISO 4217 currency, when the page has no currency field. */
85
+ currency: z.string().regex(/^[A-Z]{3}$/).optional(),
86
+ min: z.number().optional(),
87
+ max: z.number().optional(),
88
+ digits,
89
+ })
90
+ .strict();
91
+ const BooleanField = z.object({ type: z.literal('boolean'), ...common }).strict();
92
+ const DateField = z.object({ type: z.literal('date'), ...common }).strict();
93
+ const DateTime = z.object({ type: z.literal('datetime'), ...common }).strict();
94
+ const Selection = z
95
+ .object({
96
+ type: z.literal('selection'),
97
+ ...common,
98
+ options: z.array(OptionSchema).min(1),
99
+ /** Several options may be chosen; the value becomes a list. */
100
+ multiple: z.boolean().optional(),
101
+ })
102
+ .strict();
103
+ const Binary = z
104
+ .object({
105
+ type: z.literal('binary'),
106
+ ...common,
107
+ /** Accepted media types, such as "application/pdf" or "image/*". */
108
+ accept: z.array(z.string()).optional(),
109
+ /** Largest accepted file, in bytes. */
110
+ maxSize: z.int().positive().optional(),
111
+ })
112
+ .strict();
113
+ const Image = z.object({ type: z.literal('image'), ...common, maxSize: z.int().positive().optional() }).strict();
114
+ const Many2one = z.object({ type: z.literal('many2one'), ...common, relation, filter }).strict();
115
+ const Many2many = z.object({ type: z.literal('many2many'), ...common, relation, filter }).strict();
116
+ const Reference = z
117
+ .object({ type: z.literal('reference'), ...common, models: z.array(OptionSchema).min(1) })
118
+ .strict();
119
+ const Properties = z.object({ type: z.literal('properties'), ...common }).strict();
120
+ const Json = z.object({ type: z.literal('json'), ...common }).strict();
121
+ /** A field of a one2many's lines. Lines cannot hold lines of their own. */
122
+ export const LineFieldSchema = z
123
+ .discriminatedUnion('type', [
124
+ Char, Text, Html, Integer, Float, Monetary, BooleanField, DateField, DateTime,
125
+ Selection, Binary, Image, Many2one, Many2many, Reference, Properties, Json,
126
+ ])
127
+ .meta({ id: 'LineField' });
128
+ const One2many = z
129
+ .object({
130
+ type: z.literal('one2many'),
131
+ ...common,
132
+ relation,
133
+ /** The fields of each line, so lines can be edited in place. */
134
+ fields: z.record(z.string().regex(FIELD_NAME), LineFieldSchema),
135
+ })
136
+ .strict();
137
+ export const FieldSchema = z
138
+ .discriminatedUnion('type', [
139
+ Char, Text, Html, Integer, Float, Monetary, BooleanField, DateField, DateTime,
140
+ Selection, Binary, Image, Many2one, Many2many, One2many, Reference, Properties, Json,
141
+ ])
142
+ .meta({ id: 'Field' });
143
+ export const FieldsSchema = z.record(z.string().regex(FIELD_NAME), FieldSchema);
144
+ //# sourceMappingURL=field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The page format as a JSON Schema (draft 2020-12), for tools outside
3
+ * JavaScript. It describes shape only: whether every reference resolves —
4
+ * unique ids, fields that exist — is checked by `validatePage`.
5
+ */
6
+ export declare function pageJsonSchema(): Record<string, unknown>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The page format as a JSON Schema (draft 2020-12), for tools outside
3
+ * JavaScript. It describes shape only: whether every reference resolves —
4
+ * unique ids, fields that exist — is checked by `validatePage`.
5
+ */
6
+ export declare function pageJsonSchema(): Record<string, unknown>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pageJsonSchema = pageJsonSchema;
4
+ const z = require("zod");
5
+ const page_1 = require("./page");
6
+ /**
7
+ * The page format as a JSON Schema (draft 2020-12), for tools outside
8
+ * JavaScript. It describes shape only: whether every reference resolves —
9
+ * unique ids, fields that exist — is checked by `validatePage`.
10
+ */
11
+ function pageJsonSchema() {
12
+ return z.toJSONSchema(page_1.PageSchema, { target: 'draft-2020-12' });
13
+ }
14
+ //# sourceMappingURL=json-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/json-schema.ts"],"names":[],"mappings":";;AAQA,wCAEC;AAVD,yBAAyB;AACzB,iCAAoC;AAEpC;;;;GAIG;AACH,SAAgB,cAAc;IAC5B,OAAO,CAAC,CAAC,YAAY,CAAC,iBAAU,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAA4B,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as z from 'zod';
2
+ import { PageSchema } from './page.mjs';
3
+ /**
4
+ * The page format as a JSON Schema (draft 2020-12), for tools outside
5
+ * JavaScript. It describes shape only: whether every reference resolves —
6
+ * unique ids, fields that exist — is checked by `validatePage`.
7
+ */
8
+ export function pageJsonSchema() {
9
+ return z.toJSONSchema(PageSchema, { target: 'draft-2020-12' });
10
+ }
11
+ //# sourceMappingURL=json-schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAA4B,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as z from 'zod';
2
+ /** Any value JSON can carry. A page holds nothing else. */
3
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
4
+ [key: string]: JsonValue;
5
+ };
6
+ /** Rejects functions, Dates, class instances and non-finite numbers. */
7
+ export declare const JsonValueSchema: z.ZodJSONSchema;
@@ -0,0 +1,7 @@
1
+ import * as z from 'zod';
2
+ /** Any value JSON can carry. A page holds nothing else. */
3
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
4
+ [key: string]: JsonValue;
5
+ };
6
+ /** Rejects functions, Dates, class instances and non-finite numbers. */
7
+ export declare const JsonValueSchema: z.ZodJSONSchema;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonValueSchema = void 0;
4
+ const z = require("zod");
5
+ /** Rejects functions, Dates, class instances and non-finite numbers. */
6
+ exports.JsonValueSchema = z.json().meta({ id: 'JsonValue' });
7
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/json.ts"],"names":[],"mappings":";;;AAAA,yBAAyB;AAKzB,wEAAwE;AAC3D,QAAA,eAAe,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+ /** Rejects functions, Dates, class instances and non-finite numbers. */
3
+ export const JsonValueSchema = z.json().meta({ id: 'JsonValue' });
4
+ //# sourceMappingURL=json.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.mjs","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/format/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAKzB,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC"}