@cogenta/schema 0.1.1 → 0.2.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 (101) hide show
  1. package/dist/define-collection.d.ts.map +1 -1
  2. package/dist/define-collection.js +32 -0
  3. package/dist/define-collection.js.map +1 -1
  4. package/dist/define-taxonomy.d.ts +9 -0
  5. package/dist/define-taxonomy.d.ts.map +1 -0
  6. package/dist/define-taxonomy.js +144 -0
  7. package/dist/define-taxonomy.js.map +1 -0
  8. package/dist/fields.d.ts +20 -0
  9. package/dist/fields.d.ts.map +1 -1
  10. package/dist/fields.js +14 -0
  11. package/dist/fields.js.map +1 -1
  12. package/dist/generate-schema-json.d.ts +28 -4
  13. package/dist/generate-schema-json.d.ts.map +1 -1
  14. package/dist/generate-schema-json.js +25 -4
  15. package/dist/generate-schema-json.js.map +1 -1
  16. package/dist/generate-types.js +1 -0
  17. package/dist/generate-types.js.map +1 -1
  18. package/dist/index.d.ts +4 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/links/check.d.ts +76 -0
  23. package/dist/links/check.d.ts.map +1 -0
  24. package/dist/links/check.js +169 -0
  25. package/dist/links/check.js.map +1 -0
  26. package/dist/links/extract.d.ts +36 -0
  27. package/dist/links/extract.d.ts.map +1 -0
  28. package/dist/links/extract.js +69 -0
  29. package/dist/links/extract.js.map +1 -0
  30. package/dist/links/index.d.ts +10 -0
  31. package/dist/links/index.d.ts.map +1 -0
  32. package/dist/links/index.js +8 -0
  33. package/dist/links/index.js.map +1 -0
  34. package/dist/store/columns.d.ts.map +1 -1
  35. package/dist/store/columns.js +5 -2
  36. package/dist/store/columns.js.map +1 -1
  37. package/dist/store/index.d.ts +11 -2
  38. package/dist/store/index.d.ts.map +1 -1
  39. package/dist/store/index.js +6 -1
  40. package/dist/store/index.js.map +1 -1
  41. package/dist/store/lifecycle-events.d.ts +72 -0
  42. package/dist/store/lifecycle-events.d.ts.map +1 -0
  43. package/dist/store/lifecycle-events.js +73 -0
  44. package/dist/store/lifecycle-events.js.map +1 -0
  45. package/dist/store/naming.d.ts +11 -2
  46. package/dist/store/naming.d.ts.map +1 -1
  47. package/dist/store/naming.js +13 -1
  48. package/dist/store/naming.js.map +1 -1
  49. package/dist/store/read-only.d.ts +9 -3
  50. package/dist/store/read-only.d.ts.map +1 -1
  51. package/dist/store/read-only.js +13 -3
  52. package/dist/store/read-only.js.map +1 -1
  53. package/dist/store/schema-2-migration.d.ts +32 -0
  54. package/dist/store/schema-2-migration.d.ts.map +1 -0
  55. package/dist/store/schema-2-migration.js +136 -0
  56. package/dist/store/schema-2-migration.js.map +1 -0
  57. package/dist/store/search-indexing.d.ts +34 -0
  58. package/dist/store/search-indexing.d.ts.map +1 -0
  59. package/dist/store/search-indexing.js +65 -0
  60. package/dist/store/search-indexing.js.map +1 -0
  61. package/dist/store/store.d.ts +36 -7
  62. package/dist/store/store.d.ts.map +1 -1
  63. package/dist/store/store.js +348 -58
  64. package/dist/store/store.js.map +1 -1
  65. package/dist/store/tables.d.ts +15 -3
  66. package/dist/store/tables.d.ts.map +1 -1
  67. package/dist/store/tables.js +98 -6
  68. package/dist/store/tables.js.map +1 -1
  69. package/dist/store/taxonomy-path.d.ts +25 -0
  70. package/dist/store/taxonomy-path.d.ts.map +1 -0
  71. package/dist/store/taxonomy-path.js +64 -0
  72. package/dist/store/taxonomy-path.js.map +1 -0
  73. package/dist/store/taxonomy-store.d.ts +62 -0
  74. package/dist/store/taxonomy-store.d.ts.map +1 -0
  75. package/dist/store/taxonomy-store.js +292 -0
  76. package/dist/store/taxonomy-store.js.map +1 -0
  77. package/dist/store/types.d.ts +42 -2
  78. package/dist/store/types.d.ts.map +1 -1
  79. package/dist/store/values.d.ts.map +1 -1
  80. package/dist/store/values.js +4 -1
  81. package/dist/store/values.js.map +1 -1
  82. package/dist/system-fields.d.ts +2 -1
  83. package/dist/system-fields.d.ts.map +1 -1
  84. package/dist/system-fields.js +4 -0
  85. package/dist/system-fields.js.map +1 -1
  86. package/dist/types.d.ts +86 -4
  87. package/dist/types.d.ts.map +1 -1
  88. package/dist/types.js +12 -3
  89. package/dist/types.js.map +1 -1
  90. package/dist/validation.d.ts.map +1 -1
  91. package/dist/validation.js +5 -1
  92. package/dist/validation.js.map +1 -1
  93. package/package.json +2 -2
  94. package/dist/routing/ids.d.ts +0 -18
  95. package/dist/routing/ids.d.ts.map +0 -1
  96. package/dist/routing/ids.js +0 -41
  97. package/dist/routing/ids.js.map +0 -1
  98. package/dist/store/uuid.d.ts +0 -6
  99. package/dist/store/uuid.d.ts.map +0 -1
  100. package/dist/store/uuid.js +0 -64
  101. package/dist/store/uuid.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -5,11 +5,17 @@
5
5
  * `@cogenta/api`: it declares what a field and a collection *are*, so the three
6
6
  * packages can be built against the same shapes rather than against each other.
7
7
  *
8
- * It implements contract A, frozen at `schema@1.0` on 2026-08-13. Every
9
- * departure from the contract text is a bug in this file, not a liberty.
8
+ * It implements contract A, frozen at `schema@2.0` on 2026-08-16 (ADR-0022).
9
+ * Every departure from the contract text is a bug in this file, not a liberty.
10
10
  */
11
- /** Contract A, "Types de champ (v1)". Closed set: adding one is a minor version. */
12
- export declare const FIELD_KINDS: readonly ['text', 'richText', 'slug', 'number', 'boolean', 'date', 'datetime', 'media', 'relation', 'select', 'json', 'geo', 'color', 'blocks'];
11
+ /**
12
+ * Contract A, "Types de champ". Closed set: adding one is a minor version.
13
+ *
14
+ * `taxonomy` joined the set in `schema@2.0` (ADR-0022) alongside
15
+ * `defineTaxonomy()`. It is not a `relation` with a different target: a
16
+ * relation points at a collection, and a taxonomy term is not content.
17
+ */
18
+ export declare const FIELD_KINDS: readonly ['text', 'richText', 'slug', 'number', 'boolean', 'date', 'datetime', 'media', 'relation', 'select', 'json', 'geo', 'color', 'blocks', 'taxonomy'];
13
19
  export type FieldKind = (typeof FIELD_KINDS)[number];
14
20
  /** Contract A, "Permissions". Actions are fixed; role names are an open set. */
15
21
  export declare const CONTENT_ACTIONS: readonly ['read', 'create', 'update', 'delete', 'publish'];
@@ -62,6 +68,19 @@ export interface CollectionVersioning {
62
68
  /** Versions kept per entry. Unlimited history is a slow leak, not a feature. */
63
69
  readonly keep?: number;
64
70
  }
71
+ /**
72
+ * The purge window of a collection's trash (`schema@2.0`, ADR-0022).
73
+ *
74
+ * Declared on the model of `versioning.keep`: a bound, not a promise of
75
+ * forever. `trash: false` on the collection restores the pre-2.0 behaviour —
76
+ * `delete()` is an immediate hard delete, with nothing kept.
77
+ */
78
+ export interface CollectionTrash {
79
+ /** Days a trashed entry is kept before `purgeExpired()` may remove it. */
80
+ readonly retainDays: number;
81
+ }
82
+ /** Days a trashed entry is kept when the collection says nothing. */
83
+ export declare const DEFAULT_TRASH_RETAIN_DAYS = 30;
65
84
  export type CollectionPermissions = Readonly<Partial<Record<ContentAction, readonly string[]>>>;
66
85
  export interface CollectionDefinition {
67
86
  readonly name: string;
@@ -71,10 +90,63 @@ export interface CollectionDefinition {
71
90
  };
72
91
  readonly routing?: CollectionRouting;
73
92
  readonly versioning?: CollectionVersioning;
93
+ /**
94
+ * Trash window. Absent means the default window; `false` means no trash at
95
+ * all, so `delete()` is the hard delete `purge()` performs.
96
+ */
97
+ readonly trash?: CollectionTrash | false;
74
98
  readonly fields: Readonly<Record<string, FieldDefinition>>;
75
99
  readonly indexes?: readonly (readonly string[])[];
76
100
  readonly permissions: CollectionPermissions;
77
101
  }
102
+ /**
103
+ * A taxonomy, contract A § "Taxonomies" (`schema@2.0`, ADR-0022).
104
+ *
105
+ * A second top-level declarable object, beside `defineCollection()`. Its terms
106
+ * are **not content**: no `status`, no `version`, no `translationOf`. "Cuisine"
107
+ * and "Cooking" are one concept of classification, not two contents in a
108
+ * translation family — which is why labels are indexed by locale rather than
109
+ * split across rows the way ADR-0014 splits content.
110
+ */
111
+ export interface TaxonomyDefinition {
112
+ readonly name: string;
113
+ /** Indexed by locale, exactly like a term's own labels. */
114
+ readonly labels: {
115
+ readonly singular: Readonly<Record<string, string>>;
116
+ readonly plural?: Readonly<Record<string, string>>;
117
+ };
118
+ /**
119
+ * Whether terms may be nested. A flat taxonomy (tags) refuses a parent
120
+ * outright rather than allowing a tree nobody renders.
121
+ */
122
+ readonly hierarchical?: boolean;
123
+ /**
124
+ * Who may do what to the **terms**. The action vocabulary is the frozen one
125
+ * of contract A; `publish` has no meaning on a term and is refused.
126
+ */
127
+ readonly permissions: CollectionPermissions;
128
+ }
129
+ /**
130
+ * One term of a taxonomy.
131
+ *
132
+ * `path` is the materialised path (ADR-0022): the ids of every ancestor and of
133
+ * the term itself, slash-separated and slash-terminated, so "everything under
134
+ * this term" is a `like` the three dialects answer identically — never a
135
+ * recursive CTE, whose support diverges (ADR-0006).
136
+ */
137
+ export interface TaxonomyTerm {
138
+ readonly id: string;
139
+ readonly taxonomy: string;
140
+ readonly parent: string | null;
141
+ readonly slug: string;
142
+ readonly labels: Readonly<Record<string, string>>;
143
+ readonly position: number;
144
+ readonly path: string;
145
+ /** 0 at the root. Derived from `path`, never stored twice by hand. */
146
+ readonly depth: number;
147
+ readonly createdAt: string;
148
+ readonly updatedAt: string;
149
+ }
78
150
  /**
79
151
  * Contract A, "Champs système". Present on every entry, never declared by the
80
152
  * user, never optional — `provenance` least of all: the European AI framework
@@ -87,6 +159,16 @@ export interface SystemFields {
87
159
  readonly createdBy: string | null;
88
160
  readonly updatedBy: string | null;
89
161
  readonly status: ContentStatus;
162
+ /**
163
+ * When this entry went to the trash, `null` while it has not (`schema@2.0`,
164
+ * ADR-0022).
165
+ *
166
+ * **Orthogonal to `status`, never a value of it.** A published article in the
167
+ * trash is still `published`, so `untrash()` gives back what was taken rather
168
+ * than quietly demoting it to a draft — and every `switch` on `ContentStatus`
169
+ * in the repository stays exhaustive.
170
+ */
171
+ readonly deletedAt: string | null;
90
172
  readonly locale: string;
91
173
  readonly translationOf: string | null;
92
174
  readonly version: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,oFAAoF;AACpF,eAAO,MAAM,WAAW,YACtB,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,QAAQ,CACA,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpD,gFAAgF;AAChF,eAAO,MAAM,eAAe,YAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAEzF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,eAAO,MAAM,gBAAgB,YAAI,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAU,CAAA;AAExF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,eAAO,MAAM,gBAAgB,YAAI,OAAO,EAAE,UAAU,EAAE,WAAW,CAAU,CAAA;AAE3E,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1D,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAA;CACzE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,CAAA;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CACnC;AAED,oEAAoE;AACpE,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAEzD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;AAE/F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAA;IACjD,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAA;CAC5C;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,gBAAgB,EAAE;QACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KACzB,GAAG,IAAI,CAAA;CACT"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -5,10 +5,16 @@
5
5
  * `@cogenta/api`: it declares what a field and a collection *are*, so the three
6
6
  * packages can be built against the same shapes rather than against each other.
7
7
  *
8
- * It implements contract A, frozen at `schema@1.0` on 2026-08-13. Every
9
- * departure from the contract text is a bug in this file, not a liberty.
8
+ * It implements contract A, frozen at `schema@2.0` on 2026-08-16 (ADR-0022).
9
+ * Every departure from the contract text is a bug in this file, not a liberty.
10
+ */
11
+ /**
12
+ * Contract A, "Types de champ". Closed set: adding one is a minor version.
13
+ *
14
+ * `taxonomy` joined the set in `schema@2.0` (ADR-0022) alongside
15
+ * `defineTaxonomy()`. It is not a `relation` with a different target: a
16
+ * relation points at a collection, and a taxonomy term is not content.
10
17
  */
11
- /** Contract A, "Types de champ (v1)". Closed set: adding one is a minor version. */
12
18
  export const FIELD_KINDS = [
13
19
  'text',
14
20
  'richText',
@@ -24,9 +30,12 @@ export const FIELD_KINDS = [
24
30
  'geo',
25
31
  'color',
26
32
  'blocks',
33
+ 'taxonomy',
27
34
  ];
28
35
  /** Contract A, "Permissions". Actions are fixed; role names are an open set. */
29
36
  export const CONTENT_ACTIONS = ['read', 'create', 'update', 'delete', 'publish'];
30
37
  export const CONTENT_STATUSES = ['draft', 'scheduled', 'published', 'archived'];
31
38
  export const PROVENANCE_KINDS = ['human', 'assisted', 'generated'];
39
+ /** Days a trashed entry is kept when the collection says nothing. */
40
+ export const DEFAULT_TRASH_RETAIN_DAYS = 30;
32
41
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;IACR,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;CACA,CAAA;AAIV,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAIzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAU,CAAA;AAIxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAU,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;IACR,SAAS;IACT,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;IACR,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,UAAU;CACF,CAAA;AAIV,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAIzF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAU,CAAA;AAIxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAU,CAAA;AA+D3E,qEAAqE;AACrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEvE;;;;;;GAMG;AAEH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEhC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAShD,CAAA;AAED,eAAO,MAAM,cAAc;;;;kBAIzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAErD,gFAAgF;AAChF,eAAO,MAAM,YAAY,QAA+B,CAAA;AAExD,kFAAkF;AAClF,eAAO,MAAM,aAAa,QAAwD,CAAA;AAElF,eAAO,MAAM,kBAAkB;;;iBAI7B,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAiC9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAIlE;AAyED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,OAAO,CAoB7D;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAQjF;AAED,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAMjF"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEvE;;;;;;GAMG;AAEH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEhC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAShD,CAAA;AAED,eAAO,MAAM,cAAc;;;;kBAIzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAErD,gFAAgF;AAChF,eAAO,MAAM,YAAY,QAA+B,CAAA;AAExD,kFAAkF;AAClF,eAAO,MAAM,aAAa,QAAwD,CAAA;AAElF,eAAO,MAAM,kBAAkB;;;iBAI7B,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAiC9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAQlE;AA0ED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,OAAO,CAoB7D;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAQjF;AAED,4DAA4D;AAC5D,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAMjF"}
@@ -58,7 +58,10 @@ function manyOf(item, field) {
58
58
  export function isCollectionValued(field) {
59
59
  if (field.kind === 'blocks')
60
60
  return true;
61
- const isManyKind = field.kind === 'media' || field.kind === 'relation' || field.kind === 'select';
61
+ const isManyKind = field.kind === 'media' ||
62
+ field.kind === 'relation' ||
63
+ field.kind === 'select' ||
64
+ field.kind === 'taxonomy';
62
65
  return isManyKind && field.options.many === true;
63
66
  }
64
67
  function baseSchemaFor(field) {
@@ -100,6 +103,7 @@ function baseSchemaFor(field) {
100
103
  return z.iso.datetime({ offset: true });
101
104
  case 'media':
102
105
  case 'relation':
106
+ case 'taxonomy':
103
107
  return field.options.many === true ? manyOf(idSchema(), field) : idSchema();
104
108
  case 'select': {
105
109
  const choice = z.enum(selectValues(field));
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogenta/schema",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Content schema in code: collections, field types, generated types and migrations.",
5
5
  "license": "MPL-2.0",
6
6
  "type": "module",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "zod": "^4.4.3",
31
- "@cogenta/core": "0.1.1"
31
+ "@cogenta/core": "0.3.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "typescript": "^7.0.2",
@@ -1,18 +0,0 @@
1
- /**
2
- * UUIDv7, generated by the application (ADR-0015).
3
- *
4
- * `node:crypto` ships `randomUUID` for v4 only, and v4 is exactly what ADR-0015
5
- * rules out: random keys fragment a B-tree on insert, which degrades writes as
6
- * the table grows. v7 puts a 48-bit millisecond timestamp first, so new rows
7
- * land at the end of the index.
8
- *
9
- * Layout, per RFC 9562 §5.7:
10
- *
11
- * 0 1 2 3
12
- * | unix_ts_ms (48 bits) | ver | rand_a | var | rand_b |
13
- *
14
- * Same-millisecond ordering is not guaranteed and is not needed: nothing here
15
- * sorts by identifier for correctness, only for index locality.
16
- */
17
- export declare function uuidv7(): string;
18
- //# sourceMappingURL=ids.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/routing/ids.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,IAAI,MAAM,CA0B/B"}
@@ -1,41 +0,0 @@
1
- import { randomFillSync } from 'node:crypto';
2
- /**
3
- * UUIDv7, generated by the application (ADR-0015).
4
- *
5
- * `node:crypto` ships `randomUUID` for v4 only, and v4 is exactly what ADR-0015
6
- * rules out: random keys fragment a B-tree on insert, which degrades writes as
7
- * the table grows. v7 puts a 48-bit millisecond timestamp first, so new rows
8
- * land at the end of the index.
9
- *
10
- * Layout, per RFC 9562 §5.7:
11
- *
12
- * 0 1 2 3
13
- * | unix_ts_ms (48 bits) | ver | rand_a | var | rand_b |
14
- *
15
- * Same-millisecond ordering is not guaranteed and is not needed: nothing here
16
- * sorts by identifier for correctness, only for index locality.
17
- */
18
- export function uuidv7() {
19
- const bytes = new Uint8Array(16);
20
- randomFillSync(bytes);
21
- const milliseconds = Date.now();
22
- // Big-endian 48-bit timestamp. `Math.floor(ms / 2 ** 32)` rather than a shift:
23
- // bitwise operators in JavaScript truncate to 32 bits and would drop the top.
24
- bytes[0] = Math.floor(milliseconds / 2 ** 40) & 0xff;
25
- bytes[1] = Math.floor(milliseconds / 2 ** 32) & 0xff;
26
- bytes[2] = Math.floor(milliseconds / 2 ** 24) & 0xff;
27
- bytes[3] = Math.floor(milliseconds / 2 ** 16) & 0xff;
28
- bytes[4] = Math.floor(milliseconds / 2 ** 8) & 0xff;
29
- bytes[5] = milliseconds & 0xff;
30
- bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x70; // version 7
31
- bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80; // variant 10
32
- const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
33
- return [
34
- hex.slice(0, 8),
35
- hex.slice(8, 12),
36
- hex.slice(12, 16),
37
- hex.slice(16, 20),
38
- hex.slice(20, 32),
39
- ].join('-');
40
- }
41
- //# sourceMappingURL=ids.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/routing/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM;IACpB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAChC,cAAc,CAAC,KAAK,CAAC,CAAA;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC/B,+EAA+E;IAC/E,8EAA8E;IAC9E,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IACnD,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,CAAA;IAE9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA,CAAC,YAAY;IACvD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA,CAAC,aAAa;IAExD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEpF,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;KAClB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,CAAC"}
@@ -1,6 +0,0 @@
1
- export declare function uuidv7(): string;
2
- /** True for a syntactically valid UUID. `version` narrows it to one layout. */
3
- export declare function isUuid(value: string, version?: number): boolean;
4
- /** The millisecond timestamp a v7 was minted at. Null for any other layout. */
5
- export declare function uuidv7Timestamp(value: string): number | null;
6
- //# sourceMappingURL=uuid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/store/uuid.ts"],"names":[],"mappings":"AAqBA,wBAAgB,MAAM,IAAI,MAAM,CAiC/B;AAID,+EAA+E;AAC/E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D"}
@@ -1,64 +0,0 @@
1
- import { randomBytes } from 'node:crypto';
2
- /**
3
- * UUIDv7, generated by the application (ADR-0015).
4
- *
5
- * Node ships `randomUUID()`, but that is a v4: random, and therefore a B-tree
6
- * index that fragments a little more with every insert. A v7 carries its
7
- * millisecond timestamp in the high bits, so ids sort in creation order and rows
8
- * written together land together on disk.
9
- *
10
- * There is no dependency here on purpose (rule R9): the layout is 48 bits of
11
- * Unix milliseconds, 4 bits of version, 12 bits of counter, 2 bits of variant
12
- * and 62 bits of randomness — small enough to write than to justify a package.
13
- */
14
- /** The counter occupies 12 bits, so it wraps after 4096 ids in one millisecond. */
15
- const MAX_COUNTER = 0xfff;
16
- let lastTimestamp = 0;
17
- let counter = 0;
18
- export function uuidv7() {
19
- const now = Date.now();
20
- if (now > lastTimestamp) {
21
- lastTimestamp = now;
22
- // Seeded low, and randomly: low so a burst inside a single millisecond
23
- // cannot overflow the twelve bits, random so one id does not give away the
24
- // next. A fixed zero would make consecutive ids guessable.
25
- counter = randomBytes(1).readUInt8(0);
26
- }
27
- else {
28
- counter += 1;
29
- if (counter > MAX_COUNTER) {
30
- // Borrow from the next millisecond rather than emit a duplicate. Ordering
31
- // survives, and the id is at most a few milliseconds ahead of the clock.
32
- lastTimestamp += 1;
33
- counter = 0;
34
- }
35
- }
36
- const time = lastTimestamp.toString(16).padStart(12, '0');
37
- const random = randomBytes(8).toString('hex');
38
- // RFC 9562 variant: the top two bits of octet 8 must be `10`.
39
- const variant = ((Number.parseInt(random.slice(0, 2), 16) & 0x3f) | 0x80)
40
- .toString(16)
41
- .padStart(2, '0');
42
- return [
43
- time.slice(0, 8),
44
- time.slice(8, 12),
45
- `7${counter.toString(16).padStart(3, '0')}`,
46
- `${variant}${random.slice(2, 4)}`,
47
- random.slice(4, 16),
48
- ].join('-');
49
- }
50
- const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-([0-9a-f])[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
51
- /** True for a syntactically valid UUID. `version` narrows it to one layout. */
52
- export function isUuid(value, version) {
53
- const match = UUID.exec(value);
54
- if (match === null)
55
- return false;
56
- return version === undefined || match[1] === version.toString(16);
57
- }
58
- /** The millisecond timestamp a v7 was minted at. Null for any other layout. */
59
- export function uuidv7Timestamp(value) {
60
- if (!isUuid(value, 7))
61
- return null;
62
- return Number.parseInt(value.slice(0, 8) + value.slice(9, 13), 16);
63
- }
64
- //# sourceMappingURL=uuid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/store/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;;;;;;;GAWG;AAEH,mFAAmF;AACnF,MAAM,WAAW,GAAG,KAAK,CAAA;AAEzB,IAAI,aAAa,GAAG,CAAC,CAAA;AACrB,IAAI,OAAO,GAAG,CAAC,CAAA;AAEf,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC;QACxB,aAAa,GAAG,GAAG,CAAA;QACnB,uEAAuE;QACvE,2EAA2E;QAC3E,2DAA2D;QAC3D,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC,CAAA;QACZ,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;YAC1B,0EAA0E;YAC1E,yEAAyE;YACzE,aAAa,IAAI,CAAC,CAAA;YAClB,OAAO,GAAG,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,8DAA8D;IAC9D,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;SACtE,QAAQ,CAAC,EAAE,CAAC;SACZ,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAEnB,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC3C,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACpB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,CAAC;AAED,MAAM,IAAI,GAAG,iFAAiF,CAAA;AAE9F,+EAA+E;AAC/E,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,OAAgB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAChC,OAAO,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC"}