@kywi-software/core 0.9.0 → 0.10.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/admin/layout-editor/column-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/column-overlay.js +7 -1
- package/dist/admin/layout-editor/column-overlay.js.map +1 -1
- package/dist/admin/layout-editor/drop-indicator.d.ts +18 -1
- package/dist/admin/layout-editor/drop-indicator.d.ts.map +1 -1
- package/dist/admin/layout-editor/drop-indicator.js +23 -3
- package/dist/admin/layout-editor/drop-indicator.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +11 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +105 -27
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +19 -3
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +19 -6
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +1 -1
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +6 -1
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +1 -1
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.d.ts +44 -1
- package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
- package/dist/admin/layout-editor/use-editor-dnd.js +191 -3
- package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
- package/dist/admin/styles/admin.css +8 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -1
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
- package/dist/api/content-routes.d.ts.map +1 -1
- package/dist/api/content-routes.js +34 -7
- package/dist/api/content-routes.js.map +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +7 -73
- package/dist/api/index.js.map +1 -1
- package/dist/cache/content-invalidation.d.ts +28 -0
- package/dist/cache/content-invalidation.d.ts.map +1 -0
- package/dist/cache/content-invalidation.js +72 -0
- package/dist/cache/content-invalidation.js.map +1 -0
- package/dist/db/content-restore.d.ts +5 -1
- package/dist/db/content-restore.d.ts.map +1 -1
- package/dist/db/content-restore.js +9 -2
- package/dist/db/content-restore.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { contentKey, contentSlugKey } from './keys.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build the narrow content-cache invalidation used both by the hook
|
|
4
|
+
* subscribers below and by mutation routes (workflow transitions, version
|
|
5
|
+
* restore) that update content directly rather than through the content hook
|
|
6
|
+
* dispatcher.
|
|
7
|
+
*/
|
|
8
|
+
export function createContentCacheInvalidator(cacheProvider) {
|
|
9
|
+
return async (siteId, id, slug) => {
|
|
10
|
+
if (!siteId || !id)
|
|
11
|
+
return;
|
|
12
|
+
await cacheProvider.delete(contentKey(siteId, id));
|
|
13
|
+
if (slug)
|
|
14
|
+
await cacheProvider.delete(contentSlugKey(siteId, slug));
|
|
15
|
+
await cacheProvider.invalidatePattern(`feed:${siteId}:*`);
|
|
16
|
+
await cacheProvider.invalidatePattern(`nav:${siteId}:*`);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function readContent(payload) {
|
|
20
|
+
const content = payload?.content ?? {};
|
|
21
|
+
return {
|
|
22
|
+
siteId: String(content.siteId ?? ''),
|
|
23
|
+
id: String(content.id ?? ''),
|
|
24
|
+
slug: content.slug ? String(content.slug) : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe the content cache to every content mutation event, and return the
|
|
29
|
+
* invalidator so callers that bypass the hook chain can reuse it.
|
|
30
|
+
*
|
|
31
|
+
* #137: `content:afterDelete` used to clear only the id key, so the slug key
|
|
32
|
+
* kept serving the just-trashed row — delete a page, recreate the same slug,
|
|
33
|
+
* and the editor loaded the trashed row's (empty) layout. Every event that can
|
|
34
|
+
* change what a slug resolves to now clears both keys. The DB getters already
|
|
35
|
+
* filter `deleted_at IS NULL`; the cache was the only place a trashed row could
|
|
36
|
+
* still come from.
|
|
37
|
+
*/
|
|
38
|
+
export function wireContentCacheInvalidation(registry, cacheProvider) {
|
|
39
|
+
const invalidate = createContentCacheInvalidator(cacheProvider);
|
|
40
|
+
const invalidateFromEvent = async (payload) => {
|
|
41
|
+
const { siteId, id, slug } = readContent(payload);
|
|
42
|
+
await invalidate(siteId, id, slug);
|
|
43
|
+
};
|
|
44
|
+
// A create can't have a stale entry of its own, but it can inherit one: a row
|
|
45
|
+
// recreated on a slug whose previous occupant was purged through a path that
|
|
46
|
+
// never invalidated (empty-trash, a direct DB write) would otherwise resolve
|
|
47
|
+
// to the old row. Clearing the keys the new row is about to own makes that
|
|
48
|
+
// self-healing. Nav is left alone — an unpublished new node isn't in it yet.
|
|
49
|
+
registry.on('content:afterCreate', async (payload) => {
|
|
50
|
+
const { siteId, id, slug } = readContent(payload);
|
|
51
|
+
if (!siteId)
|
|
52
|
+
return;
|
|
53
|
+
if (id)
|
|
54
|
+
await cacheProvider.delete(contentKey(siteId, id));
|
|
55
|
+
if (slug)
|
|
56
|
+
await cacheProvider.delete(contentSlugKey(siteId, slug));
|
|
57
|
+
await cacheProvider.invalidatePattern(`feed:${siteId}:*`);
|
|
58
|
+
});
|
|
59
|
+
registry.on('content:afterUpdate', invalidateFromEvent);
|
|
60
|
+
// Unpublish fires its own dedicated event (afterUpdate no longer fires on
|
|
61
|
+
// unpublish) — without this the public site keeps serving the just-unpublished
|
|
62
|
+
// node from stale cache.
|
|
63
|
+
registry.on('content:afterUnpublish', invalidateFromEvent);
|
|
64
|
+
registry.on('content:afterPublish', invalidateFromEvent);
|
|
65
|
+
registry.on('content:afterDelete', invalidateFromEvent);
|
|
66
|
+
// Trash transitions change what a slug resolves to just as much as a delete
|
|
67
|
+
// does: a restore puts the row back, a permanent delete removes it for good.
|
|
68
|
+
registry.on('trash:afterRestore', invalidateFromEvent);
|
|
69
|
+
registry.on('trash:afterPermanentDelete', invalidateFromEvent);
|
|
70
|
+
return invalidate;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=content-invalidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-invalidation.js","sourceRoot":"","sources":["../../src/cache/content-invalidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,12 @@ export interface DeletedContentRow {
|
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Get a soft-deleted content node by ID (for hook payloads).
|
|
14
|
+
*
|
|
15
|
+
* `siteId` is an optional cross-site guard: when provided, an id belonging to
|
|
16
|
+
* another site resolves to null, so a trash route can't hand a foreign row to
|
|
17
|
+
* its hooks.
|
|
14
18
|
*/
|
|
15
|
-
export declare function getDeletedContentById(db: KywiDb, id: string): Promise<Record<string, unknown> | null>;
|
|
19
|
+
export declare function getDeletedContentById(db: KywiDb, id: string, siteId?: string): Promise<Record<string, unknown> | null>;
|
|
16
20
|
/**
|
|
17
21
|
* List soft-deleted content for a specific site, sorted by deletion date (newest first).
|
|
18
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-restore.d.ts","sourceRoot":"","sources":["../../src/db/content-restore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED
|
|
1
|
+
{"version":3,"file":"content-restore.d.ts","sourceRoot":"","sources":["../../src/db/content-restore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC;IAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BvD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC;IAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BvD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlF;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CAAC,CA+C3D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYnF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlE"}
|
|
@@ -2,12 +2,19 @@ import { eq, and, sql, desc, count } from 'drizzle-orm';
|
|
|
2
2
|
import { kywiContent } from '../schema/base.js';
|
|
3
3
|
/**
|
|
4
4
|
* Get a soft-deleted content node by ID (for hook payloads).
|
|
5
|
+
*
|
|
6
|
+
* `siteId` is an optional cross-site guard: when provided, an id belonging to
|
|
7
|
+
* another site resolves to null, so a trash route can't hand a foreign row to
|
|
8
|
+
* its hooks.
|
|
5
9
|
*/
|
|
6
|
-
export async function getDeletedContentById(db, id) {
|
|
10
|
+
export async function getDeletedContentById(db, id, siteId) {
|
|
11
|
+
const conditions = [eq(kywiContent.id, id), sql `${kywiContent.deletedAt} IS NOT NULL`];
|
|
12
|
+
if (siteId !== undefined)
|
|
13
|
+
conditions.push(eq(kywiContent.siteId, siteId));
|
|
7
14
|
const [row] = await db
|
|
8
15
|
.select()
|
|
9
16
|
.from(kywiContent)
|
|
10
|
-
.where(and(
|
|
17
|
+
.where(and(...conditions))
|
|
11
18
|
.limit(1);
|
|
12
19
|
return row ?? null;
|
|
13
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-restore.js","sourceRoot":"","sources":["../../src/db/content-restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAW,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAc/C
|
|
1
|
+
{"version":3,"file":"content-restore.js","sourceRoot":"","sources":["../../src/db/content-restore.ts"],"names":[],"mappings":"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"}
|