@cogenta/schema 0.1.2 → 0.3.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.map +1 -1
- package/dist/define-collection.js +32 -0
- package/dist/define-collection.js.map +1 -1
- package/dist/define-taxonomy.d.ts +9 -0
- package/dist/define-taxonomy.d.ts.map +1 -0
- package/dist/define-taxonomy.js +144 -0
- package/dist/define-taxonomy.js.map +1 -0
- package/dist/fields.d.ts +20 -0
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +14 -0
- package/dist/fields.js.map +1 -1
- package/dist/generate-schema-json.d.ts +28 -4
- package/dist/generate-schema-json.d.ts.map +1 -1
- package/dist/generate-schema-json.js +25 -4
- package/dist/generate-schema-json.js.map +1 -1
- package/dist/generate-types.js +1 -0
- package/dist/generate-types.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/links/check.d.ts +76 -0
- package/dist/links/check.d.ts.map +1 -0
- package/dist/links/check.js +169 -0
- package/dist/links/check.js.map +1 -0
- package/dist/links/extract.d.ts +36 -0
- package/dist/links/extract.d.ts.map +1 -0
- package/dist/links/extract.js +69 -0
- package/dist/links/extract.js.map +1 -0
- package/dist/links/index.d.ts +10 -0
- package/dist/links/index.d.ts.map +1 -0
- package/dist/links/index.js +8 -0
- package/dist/links/index.js.map +1 -0
- package/dist/store/columns.d.ts.map +1 -1
- package/dist/store/columns.js +5 -2
- package/dist/store/columns.js.map +1 -1
- package/dist/store/index.d.ts +16 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +9 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/lifecycle-events.d.ts +72 -0
- package/dist/store/lifecycle-events.d.ts.map +1 -0
- package/dist/store/lifecycle-events.js +73 -0
- package/dist/store/lifecycle-events.js.map +1 -0
- package/dist/store/menu-store.d.ts +99 -0
- package/dist/store/menu-store.d.ts.map +1 -0
- package/dist/store/menu-store.js +418 -0
- package/dist/store/menu-store.js.map +1 -0
- package/dist/store/menu-tables.d.ts +26 -0
- package/dist/store/menu-tables.d.ts.map +1 -0
- package/dist/store/menu-tables.js +79 -0
- package/dist/store/menu-tables.js.map +1 -0
- package/dist/store/naming.d.ts +11 -2
- package/dist/store/naming.d.ts.map +1 -1
- package/dist/store/naming.js +13 -1
- package/dist/store/naming.js.map +1 -1
- package/dist/store/read-only.d.ts +9 -3
- package/dist/store/read-only.d.ts.map +1 -1
- package/dist/store/read-only.js +13 -3
- package/dist/store/read-only.js.map +1 -1
- package/dist/store/scheduled-publish-enqueue.d.ts +37 -0
- package/dist/store/scheduled-publish-enqueue.d.ts.map +1 -0
- package/dist/store/scheduled-publish-enqueue.js +51 -0
- package/dist/store/scheduled-publish-enqueue.js.map +1 -0
- package/dist/store/schema-2-migration.d.ts +32 -0
- package/dist/store/schema-2-migration.d.ts.map +1 -0
- package/dist/store/schema-2-migration.js +136 -0
- package/dist/store/schema-2-migration.js.map +1 -0
- package/dist/store/search-indexing.d.ts +34 -0
- package/dist/store/search-indexing.d.ts.map +1 -0
- package/dist/store/search-indexing.js +65 -0
- package/dist/store/search-indexing.js.map +1 -0
- package/dist/store/store.d.ts +45 -8
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +398 -59
- package/dist/store/store.js.map +1 -1
- package/dist/store/tables.d.ts +15 -3
- package/dist/store/tables.d.ts.map +1 -1
- package/dist/store/tables.js +98 -6
- package/dist/store/tables.js.map +1 -1
- package/dist/store/taxonomy-path.d.ts +25 -0
- package/dist/store/taxonomy-path.d.ts.map +1 -0
- package/dist/store/taxonomy-path.js +64 -0
- package/dist/store/taxonomy-path.js.map +1 -0
- package/dist/store/taxonomy-store.d.ts +62 -0
- package/dist/store/taxonomy-store.d.ts.map +1 -0
- package/dist/store/taxonomy-store.js +292 -0
- package/dist/store/taxonomy-store.js.map +1 -0
- package/dist/store/types.d.ts +42 -2
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/values.d.ts.map +1 -1
- package/dist/store/values.js +4 -1
- package/dist/store/values.js.map +1 -1
- package/dist/system-fields.d.ts +2 -1
- package/dist/system-fields.d.ts.map +1 -1
- package/dist/system-fields.js +4 -0
- package/dist/system-fields.js.map +1 -1
- package/dist/types.d.ts +86 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -3
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +5 -1
- package/dist/validation.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { searchDocumentFor } from '../search/extract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Re-derives the indexed document for one entry.
|
|
4
|
+
*
|
|
5
|
+
* The published face is asked for **first**, and it is the one indexed
|
|
6
|
+
* whenever it exists. That ordering is the whole safety property: with drafts
|
|
7
|
+
* enabled, `update()` returns the working face of an entry whose `status` is
|
|
8
|
+
* still `published`, and indexing *that* would file unreviewed text under a
|
|
9
|
+
* status a public search is allowed to reach. Reading back through
|
|
10
|
+
* `state: 'published'` makes it structurally impossible — the store only
|
|
11
|
+
* returns a row there when its status really is `published`.
|
|
12
|
+
*
|
|
13
|
+
* When there is no published face, the working one is indexed under its real
|
|
14
|
+
* status (`draft`, `scheduled`, `archived`), which is what lets the admin
|
|
15
|
+
* find a draft while `SearchQuery`'s `published` default keeps it away from
|
|
16
|
+
* anyone who did not explicitly ask for it and hold the permission to.
|
|
17
|
+
*/
|
|
18
|
+
async function reindex(store, options, id) {
|
|
19
|
+
const { collection, index } = options;
|
|
20
|
+
try {
|
|
21
|
+
const published = await store.read(id, { state: 'published' });
|
|
22
|
+
if (published !== null) {
|
|
23
|
+
await index.index(searchDocumentFor(collection, published));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const working = await store.read(id, { state: 'working' });
|
|
27
|
+
if (working === null) {
|
|
28
|
+
await index.remove({ id, collection: collection.name });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
await index.index(searchDocumentFor(collection, working));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
options.onError?.(error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function withSearchIndexing(store, options) {
|
|
38
|
+
async function after(entry) {
|
|
39
|
+
await reindex(store, options, entry.id);
|
|
40
|
+
return entry;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...store,
|
|
44
|
+
create: async (input) => after(await store.create(input)),
|
|
45
|
+
update: async (id, input) => after(await store.update(id, input)),
|
|
46
|
+
publish: async (id, input) => after(await store.publish(id, input)),
|
|
47
|
+
unpublish: async (id, input) => after(await store.unpublish(id, input)),
|
|
48
|
+
restore: async (id, version, input) => after(await store.restore(id, version, input)),
|
|
49
|
+
delete: async (id) => {
|
|
50
|
+
const removed = await store.delete(id);
|
|
51
|
+
// Unconditionally, not only on `removed`: an entry the store says was
|
|
52
|
+
// already gone may still have a stale row in the index — that is exactly
|
|
53
|
+
// the state a crash between the two writes leaves behind, and the
|
|
54
|
+
// cheapest place to repair it is the next delete.
|
|
55
|
+
try {
|
|
56
|
+
await options.index.remove({ id, collection: options.collection.name });
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
options.onError?.(error);
|
|
60
|
+
}
|
|
61
|
+
return removed;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=search-indexing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-indexing.js","sourceRoot":"","sources":["../../src/store/search-indexing.ts"],"names":[],"mappings":"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"}
|
package/dist/store/store.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type DatabaseHandle } from '@cogenta/core';
|
|
2
|
-
import type
|
|
2
|
+
import { type CollectionDefinition } from '../types.js';
|
|
3
3
|
import { type ContentDiff } from './diff.js';
|
|
4
|
-
import type { ContentEntry, ContentValues, CreateInput,
|
|
4
|
+
import type { ContentEntry, ContentValues, CreateInput, DuplicateInput, ListOptions, LocaleResolution, Page, PurgeReport, ReadOptions, ResolveLocaleOptions, TrashOptions, UpdateInput, VersionSummary } from './types.js';
|
|
5
5
|
/**
|
|
6
6
|
* The persistence layer of a collection.
|
|
7
7
|
*
|
|
@@ -21,6 +21,18 @@ import type { ContentEntry, ContentValues, CreateInput, EntryState, ListOptions,
|
|
|
21
21
|
export interface ContentStoreOptions {
|
|
22
22
|
readonly db: DatabaseHandle;
|
|
23
23
|
readonly collection: CollectionDefinition;
|
|
24
|
+
/**
|
|
25
|
+
* The other collections of the site, so `delete()` can enforce `restrict`.
|
|
26
|
+
*
|
|
27
|
+
* Trashing is not a `DELETE`, so the foreign key cannot refuse it any more
|
|
28
|
+
* (ADR-0022) — the check has to be made in application code, and this is
|
|
29
|
+
* what makes it possible: a store only knows its own collection otherwise.
|
|
30
|
+
*
|
|
31
|
+
* Left out, only self-references are checked. That degrades honestly rather
|
|
32
|
+
* than silently: nothing is destroyed, since `purge()` still meets the real
|
|
33
|
+
* foreign key. Every real runtime (`serve.ts`) passes the whole set.
|
|
34
|
+
*/
|
|
35
|
+
readonly siblings?: readonly CollectionDefinition[];
|
|
24
36
|
/** The locale an entry gets when the caller does not say. */
|
|
25
37
|
readonly defaultLocale?: string;
|
|
26
38
|
/** Injectable so tests can pin time; nothing else should pass it. */
|
|
@@ -29,23 +41,48 @@ export interface ContentStoreOptions {
|
|
|
29
41
|
}
|
|
30
42
|
export interface ContentStore<TValues extends ContentValues = ContentValues> {
|
|
31
43
|
create(input: CreateInput<TValues>): Promise<ContentEntry<TValues>>;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
/** Copies an entry into a new, independent draft. See the implementation for what is deliberately not copied. */
|
|
45
|
+
duplicate(id: string, input?: DuplicateInput<TValues>): Promise<ContentEntry<TValues>>;
|
|
46
|
+
read(id: string, options?: ReadOptions): Promise<ContentEntry<TValues> | null>;
|
|
35
47
|
update(id: string, input: UpdateInput<TValues>): Promise<ContentEntry<TValues>>;
|
|
48
|
+
/**
|
|
49
|
+
* Moves an entry to the trash (`schema@2.0`, ADR-0022).
|
|
50
|
+
*
|
|
51
|
+
* **This used to be a hard `DELETE`.** It now writes `deletedAt` and leaves
|
|
52
|
+
* every row — versions, blocks, join rows, the `translation_of` of its
|
|
53
|
+
* translations — exactly where it was, which is the only way `untrash()` can
|
|
54
|
+
* give back precisely what was taken.
|
|
55
|
+
*
|
|
56
|
+
* A collection declared `trash: false` keeps the old behaviour: `delete()`
|
|
57
|
+
* is `purge()`.
|
|
58
|
+
*/
|
|
36
59
|
delete(id: string): Promise<boolean>;
|
|
60
|
+
/** Takes an entry back out of the trash, with the status it went in with. */
|
|
61
|
+
untrash(id: string): Promise<ContentEntry<TValues>>;
|
|
62
|
+
/** The real `DELETE`, and the only one. What `delete()` did before 2.0. */
|
|
63
|
+
purge(id: string): Promise<boolean>;
|
|
64
|
+
/** Purges what has sat in the trash longer than `trash.retainDays`. */
|
|
65
|
+
purgeExpired(): Promise<PurgeReport>;
|
|
37
66
|
list(options?: ListOptions): Promise<Page<ContentEntry<TValues>>>;
|
|
38
67
|
publish(id: string, input?: {
|
|
39
68
|
readonly publishedBy?: string | null;
|
|
40
69
|
}): Promise<ContentEntry<TValues>>;
|
|
41
70
|
unpublish(id: string, input?: {
|
|
42
|
-
readonly status?: 'draft' | 'archived';
|
|
71
|
+
readonly status?: 'draft' | 'archived' | 'scheduled';
|
|
72
|
+
/**
|
|
73
|
+
* Required, and only meaningful, when `status` is `'scheduled'`: the
|
|
74
|
+
* future instant this entry becomes public. A `Date`, an ISO 8601
|
|
75
|
+
* string, or epoch milliseconds — the same three forms
|
|
76
|
+
* `schedulePublication` accepts, since this is the write that puts an
|
|
77
|
+
* entry into the state that function's caller later queues a job for.
|
|
78
|
+
*/
|
|
79
|
+
readonly publishedAt?: Date | string | number;
|
|
43
80
|
}): Promise<ContentEntry<TValues>>;
|
|
44
|
-
history(id: string): Promise<readonly VersionSummary[]>;
|
|
81
|
+
history(id: string, options?: TrashOptions): Promise<readonly VersionSummary[]>;
|
|
45
82
|
readVersion(id: string, version: number): Promise<ContentEntry<TValues> | null>;
|
|
46
83
|
restore(id: string, version: number, input?: UpdateInput<TValues>): Promise<ContentEntry<TValues>>;
|
|
47
84
|
diff(id: string, from: number, to: number): Promise<ContentDiff>;
|
|
48
|
-
translations(id: string): Promise<readonly ContentEntry<TValues>[]>;
|
|
85
|
+
translations(id: string, options?: TrashOptions): Promise<readonly ContentEntry<TValues>[]>;
|
|
49
86
|
resolveLocale(id: string, locale: string, options: ResolveLocaleOptions): Promise<LocaleResolution<TValues>>;
|
|
50
87
|
}
|
|
51
88
|
export declare function createContentStore<TValues extends ContentValues = ContentValues>(options: ContentStoreOptions): ContentStore<TValues>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAMpB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|