@cogenta/schema 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.
- package/dist/define-collection.d.ts +8 -0
- package/dist/define-collection.d.ts.map +1 -0
- package/dist/define-collection.js +311 -0
- package/dist/define-collection.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/fields.d.ts +117 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +107 -0
- package/dist/fields.js.map +1 -0
- package/dist/generate-schema-json.d.ts +61 -0
- package/dist/generate-schema-json.d.ts.map +1 -0
- package/dist/generate-schema-json.js +128 -0
- package/dist/generate-schema-json.js.map +1 -0
- package/dist/generate-types.d.ts +5 -0
- package/dist/generate-types.d.ts.map +1 -0
- package/dist/generate-types.js +220 -0
- package/dist/generate-types.js.map +1 -0
- package/dist/id.d.ts +8 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +8 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/rich-text.d.ts +164 -0
- package/dist/rich-text.d.ts.map +1 -0
- package/dist/rich-text.js +97 -0
- package/dist/rich-text.js.map +1 -0
- package/dist/routing/ids.d.ts +18 -0
- package/dist/routing/ids.d.ts.map +1 -0
- package/dist/routing/ids.js +41 -0
- package/dist/routing/ids.js.map +1 -0
- package/dist/routing/index.d.ts +13 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +7 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/redirects.d.ts +76 -0
- package/dist/routing/redirects.d.ts.map +1 -0
- package/dist/routing/redirects.js +237 -0
- package/dist/routing/redirects.js.map +1 -0
- package/dist/routing/resolve.d.ts +38 -0
- package/dist/routing/resolve.d.ts.map +1 -0
- package/dist/routing/resolve.js +23 -0
- package/dist/routing/resolve.js.map +1 -0
- package/dist/routing/router.d.ts +51 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +132 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/slug-change.d.ts +39 -0
- package/dist/routing/slug-change.d.ts.map +1 -0
- package/dist/routing/slug-change.js +44 -0
- package/dist/routing/slug-change.js.map +1 -0
- package/dist/routing/slug.d.ts +82 -0
- package/dist/routing/slug.d.ts.map +1 -0
- package/dist/routing/slug.js +124 -0
- package/dist/routing/slug.js.map +1 -0
- package/dist/routing/slugify.d.ts +29 -0
- package/dist/routing/slugify.d.ts.map +1 -0
- package/dist/routing/slugify.js +104 -0
- package/dist/routing/slugify.js.map +1 -0
- package/dist/scheduling/index.d.ts +3 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +2 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/scheduling/publish.d.ts +71 -0
- package/dist/scheduling/publish.d.ts.map +1 -0
- package/dist/scheduling/publish.js +122 -0
- package/dist/scheduling/publish.js.map +1 -0
- package/dist/search/extract.d.ts +25 -0
- package/dist/search/extract.d.ts.map +1 -0
- package/dist/search/extract.js +188 -0
- package/dist/search/extract.js.map +1 -0
- package/dist/search/index.d.ts +36 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +44 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/mysql.d.ts +7 -0
- package/dist/search/mysql.d.ts.map +1 -0
- package/dist/search/mysql.js +121 -0
- package/dist/search/mysql.js.map +1 -0
- package/dist/search/postgres.d.ts +9 -0
- package/dist/search/postgres.d.ts.map +1 -0
- package/dist/search/postgres.js +167 -0
- package/dist/search/postgres.js.map +1 -0
- package/dist/search/query.d.ts +35 -0
- package/dist/search/query.d.ts.map +1 -0
- package/dist/search/query.js +116 -0
- package/dist/search/query.js.map +1 -0
- package/dist/search/sqlite.d.ts +16 -0
- package/dist/search/sqlite.d.ts.map +1 -0
- package/dist/search/sqlite.js +166 -0
- package/dist/search/sqlite.js.map +1 -0
- package/dist/search/table.d.ts +49 -0
- package/dist/search/table.d.ts.map +1 -0
- package/dist/search/table.js +86 -0
- package/dist/search/table.js.map +1 -0
- package/dist/search/text.d.ts +42 -0
- package/dist/search/text.d.ts.map +1 -0
- package/dist/search/text.js +56 -0
- package/dist/search/text.js.map +1 -0
- package/dist/search/types.d.ts +98 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +2 -0
- package/dist/search/types.js.map +1 -0
- package/dist/store/columns.d.ts +33 -0
- package/dist/store/columns.d.ts.map +1 -0
- package/dist/store/columns.js +113 -0
- package/dist/store/columns.js.map +1 -0
- package/dist/store/cursor.d.ts +23 -0
- package/dist/store/cursor.d.ts.map +1 -0
- package/dist/store/cursor.js +36 -0
- package/dist/store/cursor.js.map +1 -0
- package/dist/store/diff.d.ts +59 -0
- package/dist/store/diff.d.ts.map +1 -0
- package/dist/store/diff.js +124 -0
- package/dist/store/diff.js.map +1 -0
- package/dist/store/fragments.d.ts +13 -0
- package/dist/store/fragments.d.ts.map +1 -0
- package/dist/store/fragments.js +25 -0
- package/dist/store/fragments.js.map +1 -0
- package/dist/store/index.d.ts +22 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +16 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/naming.d.ts +25 -0
- package/dist/store/naming.d.ts.map +1 -0
- package/dist/store/naming.js +80 -0
- package/dist/store/naming.js.map +1 -0
- package/dist/store/read-only.d.ts +16 -0
- package/dist/store/read-only.d.ts.map +1 -0
- package/dist/store/read-only.js +36 -0
- package/dist/store/read-only.js.map +1 -0
- package/dist/store/store.d.ts +52 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +706 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/tables.d.ts +40 -0
- package/dist/store/tables.d.ts.map +1 -0
- package/dist/store/tables.js +267 -0
- package/dist/store/tables.js.map +1 -0
- package/dist/store/types.d.ts +105 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/uuid.d.ts +6 -0
- package/dist/store/uuid.d.ts.map +1 -0
- package/dist/store/uuid.js +64 -0
- package/dist/store/uuid.js.map +1 -0
- package/dist/store/values.d.ts +40 -0
- package/dist/store/values.d.ts.map +1 -0
- package/dist/store/values.js +160 -0
- package/dist/store/values.js.map +1 -0
- package/dist/system-fields.d.ts +60 -0
- package/dist/system-fields.d.ts.map +1 -0
- package/dist/system-fields.js +73 -0
- package/dist/system-fields.js.map +1 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +32 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +54 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +183 -0
- package/dist/validation.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { CogentaError } from '@cogenta/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { richTextDocumentSchema } from './rich-text.js';
|
|
4
|
+
import { systemFieldsSchema } from './system-fields.js';
|
|
5
|
+
/**
|
|
6
|
+
* Written out rather than taken from Zod's helper: a `json` column must hold
|
|
7
|
+
* what `JSON.parse` can return and nothing else — no `undefined`, no `Date`,
|
|
8
|
+
* no class instance that would come back as `{}` after a round-trip.
|
|
9
|
+
*/
|
|
10
|
+
export const jsonValueSchema = z.lazy(() => z.union([
|
|
11
|
+
z.string(),
|
|
12
|
+
z.number().finite(),
|
|
13
|
+
z.boolean(),
|
|
14
|
+
z.null(),
|
|
15
|
+
z.array(jsonValueSchema),
|
|
16
|
+
z.record(z.string(), jsonValueSchema),
|
|
17
|
+
]));
|
|
18
|
+
export const geoPointSchema = z.strictObject({
|
|
19
|
+
lat: z.number().min(-90).max(90),
|
|
20
|
+
lng: z.number().min(-180).max(180),
|
|
21
|
+
label: z.string().optional(),
|
|
22
|
+
});
|
|
23
|
+
/** Lowercase words joined by single hyphens: what a URL segment may contain. */
|
|
24
|
+
export const SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
25
|
+
/** `#rgb`, `#rrggbb` or `#rrggbbaa`. A colour is data, never a CSS value (R3). */
|
|
26
|
+
export const COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
|
|
27
|
+
export const contentBlockSchema = z.looseObject({
|
|
28
|
+
/** Stable for the life of the block: comments, diffs and RAG chunks key off it. */
|
|
29
|
+
_key: z.string().min(1),
|
|
30
|
+
_type: z.string().min(1),
|
|
31
|
+
});
|
|
32
|
+
function idSchema() {
|
|
33
|
+
// Every content id is an application-minted UUIDv7 (ADR-0015), so a reference
|
|
34
|
+
// that is not uuid-shaped can only be a mistake.
|
|
35
|
+
return z.uuid();
|
|
36
|
+
}
|
|
37
|
+
function selectValues(field) {
|
|
38
|
+
const raw = field.options.options;
|
|
39
|
+
if (!Array.isArray(raw))
|
|
40
|
+
return [];
|
|
41
|
+
return raw.map((choice) => typeof choice === 'object' && choice !== null && 'value' in choice
|
|
42
|
+
? String(choice.value)
|
|
43
|
+
: String(choice));
|
|
44
|
+
}
|
|
45
|
+
function numberOption(field, key) {
|
|
46
|
+
const value = field.options[key];
|
|
47
|
+
return typeof value === 'number' ? value : undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A field that holds several values is stored as rows in a join table, and a
|
|
51
|
+
* join table cannot say "null" — it can only have no rows. So `required` on a
|
|
52
|
+
* to-many field means "at least one", and its empty case is `[]`, never null.
|
|
53
|
+
*/
|
|
54
|
+
function manyOf(item, field) {
|
|
55
|
+
const array = z.array(item);
|
|
56
|
+
return field.required === true ? array.min(1) : array;
|
|
57
|
+
}
|
|
58
|
+
export function isCollectionValued(field) {
|
|
59
|
+
if (field.kind === 'blocks')
|
|
60
|
+
return true;
|
|
61
|
+
const isManyKind = field.kind === 'media' || field.kind === 'relation' || field.kind === 'select';
|
|
62
|
+
return isManyKind && field.options.many === true;
|
|
63
|
+
}
|
|
64
|
+
function baseSchemaFor(field) {
|
|
65
|
+
switch (field.kind) {
|
|
66
|
+
case 'text': {
|
|
67
|
+
let schema = z.string();
|
|
68
|
+
const min = numberOption(field, 'min');
|
|
69
|
+
const max = numberOption(field, 'max');
|
|
70
|
+
if (min !== undefined)
|
|
71
|
+
schema = schema.min(min);
|
|
72
|
+
if (max !== undefined)
|
|
73
|
+
schema = schema.max(max);
|
|
74
|
+
return schema;
|
|
75
|
+
}
|
|
76
|
+
case 'richText':
|
|
77
|
+
return richTextDocumentSchema;
|
|
78
|
+
case 'slug': {
|
|
79
|
+
let schema = z.string().regex(SLUG_PATTERN, 'must be lowercase words joined by hyphens');
|
|
80
|
+
const max = numberOption(field, 'max');
|
|
81
|
+
if (max !== undefined)
|
|
82
|
+
schema = schema.max(max);
|
|
83
|
+
return schema;
|
|
84
|
+
}
|
|
85
|
+
case 'number': {
|
|
86
|
+
let schema = field.options.integer === true ? z.number().int() : z.number().finite();
|
|
87
|
+
const min = numberOption(field, 'min');
|
|
88
|
+
const max = numberOption(field, 'max');
|
|
89
|
+
if (min !== undefined)
|
|
90
|
+
schema = schema.min(min);
|
|
91
|
+
if (max !== undefined)
|
|
92
|
+
schema = schema.max(max);
|
|
93
|
+
return schema;
|
|
94
|
+
}
|
|
95
|
+
case 'boolean':
|
|
96
|
+
return z.boolean();
|
|
97
|
+
case 'date':
|
|
98
|
+
return z.iso.date();
|
|
99
|
+
case 'datetime':
|
|
100
|
+
return z.iso.datetime({ offset: true });
|
|
101
|
+
case 'media':
|
|
102
|
+
case 'relation':
|
|
103
|
+
return field.options.many === true ? manyOf(idSchema(), field) : idSchema();
|
|
104
|
+
case 'select': {
|
|
105
|
+
const choice = z.enum(selectValues(field));
|
|
106
|
+
return field.options.many === true ? manyOf(choice, field) : choice;
|
|
107
|
+
}
|
|
108
|
+
case 'json':
|
|
109
|
+
return jsonValueSchema;
|
|
110
|
+
case 'geo':
|
|
111
|
+
return geoPointSchema;
|
|
112
|
+
case 'color':
|
|
113
|
+
return z.string().regex(COLOR_PATTERN, 'must be a hex colour such as #1a2b3c');
|
|
114
|
+
case 'blocks': {
|
|
115
|
+
const allow = field.options.allow;
|
|
116
|
+
const blocks = manyOf(contentBlockSchema, field);
|
|
117
|
+
if (allow === '*' || !Array.isArray(allow))
|
|
118
|
+
return blocks;
|
|
119
|
+
const allowed = new Set(allow.map(String));
|
|
120
|
+
return blocks.superRefine((value, context) => {
|
|
121
|
+
for (const [index, block] of value.entries()) {
|
|
122
|
+
if (!allowed.has(block._type)) {
|
|
123
|
+
context.addIssue({
|
|
124
|
+
code: 'custom',
|
|
125
|
+
message: `block "${block._type}" is not allowed here`,
|
|
126
|
+
path: [index, '_type'],
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
default:
|
|
133
|
+
throw new CogentaError({
|
|
134
|
+
code: 'SCHEMA_INVALID',
|
|
135
|
+
message: `Unknown field kind "${String(field.kind)}".`,
|
|
136
|
+
hint: 'Build fields with the `f` constructors from @cogenta/schema.',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The validator for one field, custom rule and optionality included.
|
|
142
|
+
*
|
|
143
|
+
* An optional field accepts `null` and an absent key alike: a form that never
|
|
144
|
+
* showed the field and a form that cleared it mean the same thing to storage.
|
|
145
|
+
*/
|
|
146
|
+
export function fieldSchema(field) {
|
|
147
|
+
let schema = baseSchemaFor(field);
|
|
148
|
+
const { validate } = field;
|
|
149
|
+
if (validate !== undefined) {
|
|
150
|
+
schema = schema.superRefine((value, context) => {
|
|
151
|
+
const verdict = validate(value);
|
|
152
|
+
if (verdict !== true) {
|
|
153
|
+
context.addIssue({ code: 'custom', message: verdict });
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (field.required === true)
|
|
158
|
+
return schema;
|
|
159
|
+
// Absent and null both mean "nothing was entered". They are normalised to one
|
|
160
|
+
// stored shape so that a reader never has to handle two spellings of empty.
|
|
161
|
+
return isCollectionValued(field)
|
|
162
|
+
? schema.nullish().transform((value) => value ?? [])
|
|
163
|
+
: schema.nullish().transform((value) => value ?? null);
|
|
164
|
+
}
|
|
165
|
+
/** What an author may send: the declared fields, and nothing else. */
|
|
166
|
+
export function collectionInputSchema(collection) {
|
|
167
|
+
const shape = {};
|
|
168
|
+
for (const [name, field] of Object.entries(collection.fields)) {
|
|
169
|
+
shape[name] = fieldSchema(field);
|
|
170
|
+
}
|
|
171
|
+
// Strict on purpose, as everywhere else in Cogenta: an unknown key is a typo
|
|
172
|
+
// in a field name, and dropping it silently loses the editor's work.
|
|
173
|
+
return z.strictObject(shape);
|
|
174
|
+
}
|
|
175
|
+
/** A stored entry: system fields plus the declared ones. */
|
|
176
|
+
export function collectionEntrySchema(collection) {
|
|
177
|
+
const shape = {};
|
|
178
|
+
for (const [name, field] of Object.entries(collection.fields)) {
|
|
179
|
+
shape[name] = fieldSchema(field);
|
|
180
|
+
}
|
|
181
|
+
return systemFieldsSchema.extend(shape);
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAmBvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAC/D,CAAC,CAAC,KAAK,CAAC;IACN,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;IACnB,CAAC,CAAC,OAAO,EAAE;IACX,CAAC,CAAC,IAAI,EAAE;IACR,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC;CACtC,CAAC,CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAIF,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AAExD,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,qDAAqD,CAAA;AAElF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC9C,mFAAmF;IACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAA;AAYF,SAAS,QAAQ;IACf,8EAA8E;IAC9E,iDAAiD;IACjD,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAA;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAClC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM;QAChE,CAAC,CAAC,MAAM,CAAE,MAA6B,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CACnB,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACtD,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAsB,IAAO,EAAE,KAAsB;IAClE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3B,OAAO,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;IACjG,OAAO,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAA;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,KAAsB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;YACvB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,UAAU;YACb,OAAO,sBAAsB,CAAA;QAC/B,KAAK,MAAM,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,2CAA2C,CAAC,CAAA;YACxF,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAA;YACpF,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACtC,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/C,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;QACpB,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACrB,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACzC,KAAK,OAAO,CAAC;QACb,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC7E,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;YAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QACrE,CAAC;QACD,KAAK,MAAM;YACT,OAAO,eAAe,CAAA;QACxB,KAAK,KAAK;YACR,OAAO,cAAc,CAAA;QACvB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAA;QAChF,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA;YACjC,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;YAChD,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAA;YACzD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9B,OAAO,CAAC,QAAQ,CAAC;4BACf,IAAI,EAAE,QAAQ;4BACd,OAAO,EAAE,UAAU,KAAK,CAAC,KAAK,uBAAuB;4BACrD,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;yBACvB,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD;YACE,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,uBAAuB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;gBACtD,IAAI,EAAE,8DAA8D;aACrE,CAAC,CAAA;IACN,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAsB;IAChD,IAAI,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAEjC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAC1B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAc,EAAE,OAAO,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YACxD,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IAE1C,8EAA8E;IAC9E,4EAA4E;IAC5E,OAAO,kBAAkB,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;AAC1D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,qBAAqB,CAAC,UAAgC;IACpE,MAAM,KAAK,GAA8B,EAAE,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IACD,6EAA6E;IAC7E,qEAAqE;IACrE,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,qBAAqB,CAAC,UAAgC;IACpE,MAAM,KAAK,GAA8B,EAAE,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cogenta/schema",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Content schema in code: collections, field types, generated types and migrations.",
|
|
5
|
+
"license": "MPL-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=22.11.0"
|
|
19
|
+
},
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public",
|
|
22
|
+
"provenance": true
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/cogenta-cms/cogenta.git",
|
|
27
|
+
"directory": "packages/schema"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc -p tsconfig.json",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.typecheck.json",
|
|
32
|
+
"test": "vitest run --passWithNoTests",
|
|
33
|
+
"test:integration": "vitest run --config vitest.integration.config.ts --passWithNoTests"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@cogenta/core": "workspace:*",
|
|
37
|
+
"zod": "catalog:"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"typescript": "catalog:",
|
|
41
|
+
"vitest": "catalog:"
|
|
42
|
+
}
|
|
43
|
+
}
|