@kywi-software/core 0.6.2 → 0.6.3
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/README.md +23 -5
- package/dist/admin/layout-editor/column-overlay.d.ts +14 -1
- package/dist/admin/layout-editor/column-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/column-overlay.js +5 -2
- package/dist/admin/layout-editor/column-overlay.js.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts +34 -1
- package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-canvas.js +156 -16
- package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
- package/dist/admin/layout-editor/editor-state.d.ts +57 -2
- package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
- package/dist/admin/layout-editor/editor-state.js +125 -53
- package/dist/admin/layout-editor/editor-state.js.map +1 -1
- package/dist/admin/layout-editor/editor.css +487 -44
- package/dist/admin/layout-editor/index.d.ts +1 -1
- package/dist/admin/layout-editor/index.d.ts.map +1 -1
- package/dist/admin/layout-editor/index.js.map +1 -1
- package/dist/admin/layout-editor/inline-text.d.ts +44 -0
- package/dist/admin/layout-editor/inline-text.d.ts.map +1 -0
- package/dist/admin/layout-editor/inline-text.js +67 -0
- package/dist/admin/layout-editor/inline-text.js.map +1 -0
- package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
- package/dist/admin/layout-editor/layout-editor.js +23 -31
- package/dist/admin/layout-editor/layout-editor.js.map +1 -1
- package/dist/admin/layout-editor/module-overlay.d.ts +32 -1
- package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/module-overlay.js +108 -6
- package/dist/admin/layout-editor/module-overlay.js.map +1 -1
- package/dist/admin/layout-editor/node-lookup.d.ts +94 -0
- package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -0
- package/dist/admin/layout-editor/node-lookup.js +142 -0
- package/dist/admin/layout-editor/node-lookup.js.map +1 -0
- package/dist/admin/layout-editor/overlay-shell.d.ts +19 -1
- package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
- package/dist/admin/layout-editor/overlay-shell.js +177 -69
- package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
- package/dist/admin/layout-editor/props-panel.d.ts +9 -2
- package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
- package/dist/admin/layout-editor/props-panel.js +13 -5
- package/dist/admin/layout-editor/props-panel.js.map +1 -1
- package/dist/admin/layout-editor/region-overlay.d.ts +8 -1
- package/dist/admin/layout-editor/region-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/region-overlay.js +4 -1
- package/dist/admin/layout-editor/region-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-insert-line.d.ts +7 -1
- package/dist/admin/layout-editor/section-insert-line.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-insert-line.js +4 -1
- package/dist/admin/layout-editor/section-insert-line.js.map +1 -1
- package/dist/admin/layout-editor/section-overlay.d.ts +13 -1
- package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
- package/dist/admin/layout-editor/section-overlay.js +24 -12
- package/dist/admin/layout-editor/section-overlay.js.map +1 -1
- package/dist/admin/layout-editor/section-variant-container-config.d.ts +29 -0
- package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -0
- package/dist/admin/layout-editor/section-variant-container-config.js +82 -0
- package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -0
- package/dist/admin/styles/admin.css +5 -2
- package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -1
- package/dist/admin/surfaces/content/content-edit.js +8 -1
- package/dist/admin/surfaces/content/content-edit.js.map +1 -1
- package/dist/db/content-queries.d.ts +35 -0
- package/dist/db/content-queries.d.ts.map +1 -1
- package/dist/db/content-queries.js +175 -36
- package/dist/db/content-queries.js.map +1 -1
- package/dist/nav/index.d.ts +1 -1
- package/dist/nav/index.d.ts.map +1 -1
- package/dist/nav/index.js +4 -1
- package/dist/nav/index.js.map +1 -1
- package/dist/nav/url-resolver.d.ts +27 -0
- package/dist/nav/url-resolver.d.ts.map +1 -1
- package/dist/nav/url-resolver.js +36 -1
- package/dist/nav/url-resolver.js.map +1 -1
- package/dist/scope/edit-mode-hooks.d.ts.map +1 -1
- package/dist/scope/edit-mode-hooks.js +27 -1
- package/dist/scope/edit-mode-hooks.js.map +1 -1
- package/dist/scope/inline-editing.d.ts.map +1 -1
- package/dist/scope/inline-editing.js +2 -1
- package/dist/scope/inline-editing.js.map +1 -1
- package/dist/site/styles.css +147 -4
- package/package.json +1 -1
|
@@ -3,6 +3,20 @@ import type { PgTableWithColumns } from 'drizzle-orm/pg-core';
|
|
|
3
3
|
import type { KywiDb } from './client.js';
|
|
4
4
|
import type { ContentTypeConfig } from '../config/types.js';
|
|
5
5
|
import type { PaginationParams, SortParams, FilterParams } from '../api/pagination.js';
|
|
6
|
+
/**
|
|
7
|
+
* Thrown when the custom-field (side) table write of a content mutation fails.
|
|
8
|
+
*
|
|
9
|
+
* The base `kywi_content` write and the `kywi_ct_*` side-table write run inside
|
|
10
|
+
* one transaction (kywi-cms#95), so this error always means the WHOLE mutation
|
|
11
|
+
* was rolled back — there is never a half-created node left behind. The most
|
|
12
|
+
* common cause is a side table that does not physically exist yet because the
|
|
13
|
+
* content type was declared but `/content-types/apply` never ran.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ContentCustomFieldsError extends Error {
|
|
16
|
+
readonly contentTypeName: string;
|
|
17
|
+
readonly tableName: string;
|
|
18
|
+
constructor(contentTypeName: string, tableName: string, cause: unknown);
|
|
19
|
+
}
|
|
6
20
|
/**
|
|
7
21
|
* Build SQL conditions that exclude content outside its display window.
|
|
8
22
|
*
|
|
@@ -60,6 +74,10 @@ export declare function getContentById(db: KywiDb, customTable: PgTableWithColum
|
|
|
60
74
|
* `contact` can collide — pass `baseType` (e.g. 'form') to resolve the intended
|
|
61
75
|
* row rather than whichever the query happens to return first (kywi-cms#39).
|
|
62
76
|
*
|
|
77
|
+
* When `baseType` is NOT given the lookup is a public-page resolution, so a
|
|
78
|
+
* collision is broken in favour of the page-like row instead of being left to
|
|
79
|
+
* the planner (kywi-cms#100). A slug matching exactly one row is unaffected.
|
|
80
|
+
*
|
|
63
81
|
* `options.status` restricts the lookup to rows with an exact status match (e.g.
|
|
64
82
|
* 'published'). It is optional and defaults to no filter (current behavior) —
|
|
65
83
|
* callers that don't pass it are unaffected. This is what lets a public,
|
|
@@ -71,6 +89,23 @@ export declare function getContentBySlug(db: KywiDb, customTable: PgTableWithCol
|
|
|
71
89
|
baseType?: string;
|
|
72
90
|
status?: string;
|
|
73
91
|
}): Promise<ContentWithCustomFields | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Rows on the same site that share `slug` but carry a DIFFERENT base type.
|
|
94
|
+
*
|
|
95
|
+
* `kywi_content.slug` has no cross-base-type uniqueness constraint, so a Page
|
|
96
|
+
* and a Form can both be authored at "contact". Public routes now resolve that
|
|
97
|
+
* ambiguity in the page's favour (see {@link getContentBySlug}), but the author
|
|
98
|
+
* still deserves to know the site has two things claiming one URL — hence this
|
|
99
|
+
* detector, surfaced as a non-blocking warning on create/rename (kywi-cms#100).
|
|
100
|
+
*
|
|
101
|
+
* Soft-deleted rows are excluded; they own no URL.
|
|
102
|
+
*/
|
|
103
|
+
export declare function findCrossBaseTypeSlugCollisions(db: KywiDb, siteId: string, slug: string, baseType: string, excludeContentId?: string): Promise<{
|
|
104
|
+
id: string;
|
|
105
|
+
title: string;
|
|
106
|
+
baseType: string;
|
|
107
|
+
contentTypeName: string;
|
|
108
|
+
}[]>;
|
|
74
109
|
/**
|
|
75
110
|
* Create a new content node with custom fields.
|
|
76
111
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-queries.d.ts","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"content-queries.d.ts","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,44 @@
|
|
|
1
|
-
import { eq, and, like, sql, desc, asc, count, inArray, or, lte, gt, getTableColumns } from 'drizzle-orm';
|
|
1
|
+
import { eq, and, like, sql, desc, asc, count, inArray, or, lte, gt, ne, getTableColumns, getTableName } from 'drizzle-orm';
|
|
2
2
|
import { kywiContent } from '../schema/base.js';
|
|
3
3
|
import { computePath } from '../nav/builder.js';
|
|
4
|
+
import { pageFirstOrdering } from '../nav/url-resolver.js';
|
|
5
|
+
/**
|
|
6
|
+
* Thrown when the custom-field (side) table write of a content mutation fails.
|
|
7
|
+
*
|
|
8
|
+
* The base `kywi_content` write and the `kywi_ct_*` side-table write run inside
|
|
9
|
+
* one transaction (kywi-cms#95), so this error always means the WHOLE mutation
|
|
10
|
+
* was rolled back — there is never a half-created node left behind. The most
|
|
11
|
+
* common cause is a side table that does not physically exist yet because the
|
|
12
|
+
* content type was declared but `/content-types/apply` never ran.
|
|
13
|
+
*/
|
|
14
|
+
export class ContentCustomFieldsError extends Error {
|
|
15
|
+
contentTypeName;
|
|
16
|
+
tableName;
|
|
17
|
+
constructor(contentTypeName, tableName, cause) {
|
|
18
|
+
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
19
|
+
super(`Failed to write custom fields for content type '${contentTypeName}' ` +
|
|
20
|
+
`(side table "${tableName}"): ${detail}. The write was rolled back — no partial ` +
|
|
21
|
+
`content row remains. The side table may not exist yet (apply pending ` +
|
|
22
|
+
`content-type changes) or a field value violated a constraint.`, { cause });
|
|
23
|
+
this.name = 'ContentCustomFieldsError';
|
|
24
|
+
this.contentTypeName = contentTypeName;
|
|
25
|
+
this.tableName = tableName;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Run `fn` inside a DB transaction when the client supports one, otherwise run
|
|
30
|
+
* it inline against `db`.
|
|
31
|
+
*
|
|
32
|
+
* The guard mirrors the one in `changeset-queries.ts`: unit tests hand these
|
|
33
|
+
* queries a minimal chainable mock with no `.transaction`, and those callers
|
|
34
|
+
* must keep working (they exercise statement shape, not atomicity).
|
|
35
|
+
*/
|
|
36
|
+
async function runInTransaction(db, fn) {
|
|
37
|
+
if ('transaction' in db && typeof db.transaction === 'function') {
|
|
38
|
+
return db.transaction(fn);
|
|
39
|
+
}
|
|
40
|
+
return fn(db);
|
|
41
|
+
}
|
|
4
42
|
/**
|
|
5
43
|
* Build SQL conditions that exclude content outside its display window.
|
|
6
44
|
*
|
|
@@ -202,6 +240,10 @@ export async function getContentById(db, customTable, id, siteId) {
|
|
|
202
240
|
* `contact` can collide — pass `baseType` (e.g. 'form') to resolve the intended
|
|
203
241
|
* row rather than whichever the query happens to return first (kywi-cms#39).
|
|
204
242
|
*
|
|
243
|
+
* When `baseType` is NOT given the lookup is a public-page resolution, so a
|
|
244
|
+
* collision is broken in favour of the page-like row instead of being left to
|
|
245
|
+
* the planner (kywi-cms#100). A slug matching exactly one row is unaffected.
|
|
246
|
+
*
|
|
205
247
|
* `options.status` restricts the lookup to rows with an exact status match (e.g.
|
|
206
248
|
* 'published'). It is optional and defaults to no filter (current behavior) —
|
|
207
249
|
* callers that don't pass it are unaffected. This is what lets a public,
|
|
@@ -224,6 +266,8 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
|
|
|
224
266
|
conditions.push(eq(kywiContent.status, options.status));
|
|
225
267
|
}
|
|
226
268
|
const where = and(...conditions);
|
|
269
|
+
// An explicit baseType already pins the row; ordering would be dead weight.
|
|
270
|
+
const ordering = options?.baseType ? [] : pageFirstOrdering();
|
|
227
271
|
let query;
|
|
228
272
|
if (customTable) {
|
|
229
273
|
query = db
|
|
@@ -231,6 +275,7 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
|
|
|
231
275
|
.from(kywiContent)
|
|
232
276
|
.leftJoin(customTable, eq(kywiContent.id, customTable.id))
|
|
233
277
|
.where(where)
|
|
278
|
+
.orderBy(...ordering)
|
|
234
279
|
.limit(1);
|
|
235
280
|
}
|
|
236
281
|
else {
|
|
@@ -238,6 +283,7 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
|
|
|
238
283
|
.select()
|
|
239
284
|
.from(kywiContent)
|
|
240
285
|
.where(where)
|
|
286
|
+
.orderBy(...ordering)
|
|
241
287
|
.limit(1);
|
|
242
288
|
}
|
|
243
289
|
const [row] = await query;
|
|
@@ -249,6 +295,70 @@ export async function getContentBySlug(db, customTable, slug, siteId, options) {
|
|
|
249
295
|
}
|
|
250
296
|
return row;
|
|
251
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Rows on the same site that share `slug` but carry a DIFFERENT base type.
|
|
300
|
+
*
|
|
301
|
+
* `kywi_content.slug` has no cross-base-type uniqueness constraint, so a Page
|
|
302
|
+
* and a Form can both be authored at "contact". Public routes now resolve that
|
|
303
|
+
* ambiguity in the page's favour (see {@link getContentBySlug}), but the author
|
|
304
|
+
* still deserves to know the site has two things claiming one URL — hence this
|
|
305
|
+
* detector, surfaced as a non-blocking warning on create/rename (kywi-cms#100).
|
|
306
|
+
*
|
|
307
|
+
* Soft-deleted rows are excluded; they own no URL.
|
|
308
|
+
*/
|
|
309
|
+
export async function findCrossBaseTypeSlugCollisions(db, siteId, slug, baseType, excludeContentId) {
|
|
310
|
+
const conditions = [
|
|
311
|
+
eq(kywiContent.siteId, siteId),
|
|
312
|
+
eq(kywiContent.slug, slug),
|
|
313
|
+
ne(kywiContent.baseType, baseType),
|
|
314
|
+
sql `${kywiContent.deletedAt} IS NULL`,
|
|
315
|
+
];
|
|
316
|
+
if (excludeContentId !== undefined)
|
|
317
|
+
conditions.push(ne(kywiContent.id, excludeContentId));
|
|
318
|
+
return db
|
|
319
|
+
.select({
|
|
320
|
+
id: kywiContent.id,
|
|
321
|
+
title: kywiContent.title,
|
|
322
|
+
baseType: kywiContent.baseType,
|
|
323
|
+
contentTypeName: kywiContent.contentTypeName,
|
|
324
|
+
})
|
|
325
|
+
.from(kywiContent)
|
|
326
|
+
.where(and(...conditions));
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Non-blocking authoring guard for kywi-cms#100.
|
|
330
|
+
*
|
|
331
|
+
* There is no warning channel on the content API (`jsonOk` emits a bare
|
|
332
|
+
* `{ data }` envelope), and hard-failing the write would break every install
|
|
333
|
+
* that already has a legitimate collision. So the guard logs server-side under
|
|
334
|
+
* the existing `[kywi:content]` prefix and lets the write stand. Living in the
|
|
335
|
+
* query layer means every authoring path — REST routes, `scope.content.create`,
|
|
336
|
+
* SDK, MCP — is covered by one wiring point.
|
|
337
|
+
*
|
|
338
|
+
* Never throws: a failed advisory lookup must not fail the mutation it advises on.
|
|
339
|
+
*/
|
|
340
|
+
async function warnOnCrossBaseTypeSlugCollision(db, row) {
|
|
341
|
+
try {
|
|
342
|
+
const siteId = row.siteId;
|
|
343
|
+
const slug = row.slug;
|
|
344
|
+
const baseType = row.baseType;
|
|
345
|
+
const id = row.id;
|
|
346
|
+
if (!siteId || !slug || !baseType)
|
|
347
|
+
return;
|
|
348
|
+
const collisions = await findCrossBaseTypeSlugCollisions(db, siteId, slug, baseType, id);
|
|
349
|
+
if (collisions.length === 0)
|
|
350
|
+
return;
|
|
351
|
+
const others = collisions
|
|
352
|
+
.map(c => `${c.contentTypeName} (baseType '${c.baseType}', id ${c.id})`)
|
|
353
|
+
.join(', ');
|
|
354
|
+
console.warn(`[kywi:content] slug collision: "${slug}" is now used by ${row.contentTypeName} ` +
|
|
355
|
+
`(baseType '${baseType}') and ${others} on site ${siteId}. ` +
|
|
356
|
+
`Public routes resolve the page-like row; rename one slug to remove the ambiguity (kywi-cms#100).`);
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// Advisory only — swallow.
|
|
360
|
+
}
|
|
361
|
+
}
|
|
252
362
|
/** Slugify a title: lowercase, spaces→hyphens, strip non-url-safe chars. */
|
|
253
363
|
function slugFromTitle(title) {
|
|
254
364
|
return title.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
@@ -334,19 +444,34 @@ export async function createContent(db, contentType, customTable, siteId, data,
|
|
|
334
444
|
if (status === 'published' && insertValues.publishedAt === undefined) {
|
|
335
445
|
insertValues.publishedAt = new Date();
|
|
336
446
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
await
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
447
|
+
// kywi-cms#95 — the base row and its side-table row are ONE unit of work. Written
|
|
448
|
+
// as two independent statements, a failed side-table insert (missing physical
|
|
449
|
+
// kywi_ct_* table, constraint violation, dropped connection) left the already
|
|
450
|
+
// committed base row behind: the node was permanently half-created, and an
|
|
451
|
+
// idempotent re-run found it by slug and skipped it. Both writes now share a
|
|
452
|
+
// transaction, so a side-table failure rolls the base row back too.
|
|
453
|
+
const baseRow = await runInTransaction(db, async (tx) => {
|
|
454
|
+
const [inserted] = await tx
|
|
455
|
+
.insert(kywiContent)
|
|
456
|
+
.values(insertValues)
|
|
457
|
+
.returning();
|
|
458
|
+
if (!inserted)
|
|
459
|
+
throw new Error('Failed to insert content');
|
|
460
|
+
if (customTable && Object.keys(customFields).length > 0) {
|
|
461
|
+
try {
|
|
462
|
+
await tx.insert(customTable).values({
|
|
463
|
+
id: inserted.id,
|
|
464
|
+
siteId,
|
|
465
|
+
...customFields,
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
catch (err) {
|
|
469
|
+
throw new ContentCustomFieldsError(contentType.name, getTableName(customTable), err);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
return inserted;
|
|
473
|
+
});
|
|
474
|
+
await warnOnCrossBaseTypeSlugCollision(db, baseRow);
|
|
350
475
|
return mergeContentRow(baseRow, Object.keys(customFields).length > 0 ? { id: baseRow.id, siteId, ...customFields } : null, customTable);
|
|
351
476
|
}
|
|
352
477
|
/**
|
|
@@ -355,32 +480,46 @@ export async function createContent(db, contentType, customTable, siteId, data,
|
|
|
355
480
|
export async function updateContent(db, contentType, customTable, id, data, userId) {
|
|
356
481
|
const customFieldNames = contentType.fields.map(f => f.name);
|
|
357
482
|
const { baseFields, customFields } = splitCustomFields(data, customFieldNames);
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
483
|
+
// kywi-cms#95 — same unit-of-work rule as createContent: a failed side-table
|
|
484
|
+
// write must not leave the base row updated on its own.
|
|
485
|
+
await runInTransaction(db, async (tx) => {
|
|
486
|
+
if (Object.keys(baseFields).length > 0) {
|
|
487
|
+
const setValues = { ...baseFields, updatedBy: userId, updatedAt: new Date() };
|
|
488
|
+
// A status change into 'published' (e.g. via PUT/PATCH) stamps publishedAt.
|
|
489
|
+
// COALESCE preserves any existing timestamp so the original publish date is
|
|
490
|
+
// kept across re-publishes; skip when the caller set publishedAt explicitly.
|
|
491
|
+
if (baseFields.status === 'published' && baseFields.publishedAt === undefined) {
|
|
492
|
+
setValues.publishedAt = sql `COALESCE(${kywiContent.publishedAt}, now())`;
|
|
493
|
+
}
|
|
494
|
+
await tx
|
|
495
|
+
.update(kywiContent)
|
|
496
|
+
.set(setValues)
|
|
497
|
+
.where(eq(kywiContent.id, id));
|
|
365
498
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
499
|
+
if (customTable && Object.keys(customFields).length > 0) {
|
|
500
|
+
try {
|
|
501
|
+
const result = await tx
|
|
502
|
+
.update(customTable)
|
|
503
|
+
.set(customFields)
|
|
504
|
+
.where(eq(customTable.id, id));
|
|
505
|
+
if (result.rowCount === 0) {
|
|
506
|
+
const [baseRow] = await tx.select({ siteId: kywiContent.siteId }).from(kywiContent).where(eq(kywiContent.id, id));
|
|
507
|
+
if (baseRow) {
|
|
508
|
+
await tx.insert(customTable).values({ id, siteId: baseRow.siteId, ...customFields });
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
catch (err) {
|
|
513
|
+
throw new ContentCustomFieldsError(contentType.name, getTableName(customTable), err);
|
|
380
514
|
}
|
|
381
515
|
}
|
|
516
|
+
});
|
|
517
|
+
const updated = await getContentById(db, customTable, id);
|
|
518
|
+
// Only a slug change can introduce a new cross-base-type collision.
|
|
519
|
+
if (updated && baseFields.slug !== undefined) {
|
|
520
|
+
await warnOnCrossBaseTypeSlugCollision(db, updated);
|
|
382
521
|
}
|
|
383
|
-
return
|
|
522
|
+
return updated;
|
|
384
523
|
}
|
|
385
524
|
/**
|
|
386
525
|
* Soft-delete a content node (set deletedAt).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-queries.js","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-queries.js","sourceRoot":"","sources":["../../src/db/content-queries.ts"],"names":[],"mappings":"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"}
|
package/dist/nav/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export * from './builder.js';
|
|
3
|
-
export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, type ResolvedContent, } from './url-resolver.js';
|
|
3
|
+
export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, pageFirstOrdering, PAGE_LIKE_BASE_TYPES, type ResolvedContent, } from './url-resolver.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/nav/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAO5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA"}
|
package/dist/nav/index.js
CHANGED
|
@@ -3,5 +3,8 @@ export * from './builder.js';
|
|
|
3
3
|
// Public path-based content resolution (kywi-cms#30): resolve a content node by
|
|
4
4
|
// its full materialized path (honouring the Site Tree hierarchy) instead of by a
|
|
5
5
|
// bare last-segment slug, so `/a/b/<slug>` cannot serve a top-level `<slug>`.
|
|
6
|
-
|
|
6
|
+
// Slug/path is not unique across base types, so a public route can match a Page
|
|
7
|
+
// AND a Form; `PAGE_LIKE_BASE_TYPES`/`pageFirstOrdering` make the page win
|
|
8
|
+
// (kywi-cms#100).
|
|
9
|
+
export { resolveContentByPath, resolveContentBySegments, normalizePath, pathToSegments, pageFirstOrdering, PAGE_LIKE_BASE_TYPES, } from './url-resolver.js';
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
package/dist/nav/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nav/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,gFAAgF;AAChF,2EAA2E;AAC3E,kBAAkB;AAClB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,mBAAmB,CAAA"}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
|
+
import { type SQL } from 'drizzle-orm';
|
|
1
2
|
import type { KywiDb } from '../db/client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base types that can legitimately own a public page URL.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `INDEXABLE_BASE_TYPES` (src/ax/filters.ts) plus `link`, which is also
|
|
7
|
+
* addressable (it redirects). Everything else — `form`, `component`, `media` —
|
|
8
|
+
* is an embeddable, not a standalone route.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PAGE_LIKE_BASE_TYPES: readonly ["content", "folder", "event", "gallery", "link"];
|
|
11
|
+
/**
|
|
12
|
+
* ORDER BY fragments that rank page-like rows ahead of everything else, then
|
|
13
|
+
* break remaining ties deterministically by creation order.
|
|
14
|
+
*
|
|
15
|
+
* `kywi_content.slug`/`path` are not unique across base types, so a Page and a
|
|
16
|
+
* Form can both sit at `/contact`. Resolving whichever row the planner happened
|
|
17
|
+
* to return first served the form's row at the page URL and rendered an empty,
|
|
18
|
+
* layout-less page while the real page stayed invisible (kywi-cms#100 / UAT-009;
|
|
19
|
+
* kywi-cms#39 fixed the same collision on the form-*submission* side).
|
|
20
|
+
*
|
|
21
|
+
* This only breaks ties: a route that matches exactly one row resolves to that
|
|
22
|
+
* row exactly as before.
|
|
23
|
+
*/
|
|
24
|
+
export declare function pageFirstOrdering(): SQL[];
|
|
2
25
|
export interface ResolvedContent {
|
|
3
26
|
id: string;
|
|
4
27
|
siteId: string;
|
|
@@ -24,6 +47,10 @@ export interface ResolvedContent {
|
|
|
24
47
|
* row for that locale matches; the caller falls back to the default locale on a
|
|
25
48
|
* miss. Omit it to match any locale (structural resolution).
|
|
26
49
|
*
|
|
50
|
+
* When more than one row shares the path (slug is not unique across base types —
|
|
51
|
+
* e.g. a Page and a Form both named "contact"), the page-like row wins; see
|
|
52
|
+
* {@link pageFirstOrdering} (kywi-cms#100).
|
|
53
|
+
*
|
|
27
54
|
* Returns null if no matching content exists for the site+path (+locale).
|
|
28
55
|
*/
|
|
29
56
|
export declare function resolveContentByPath(db: KywiDb, path: string, siteId: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-resolver.d.ts","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"url-resolver.d.ts","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,4DAA6D,CAAA;AAE9F;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,EAAE,CAKzC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAgCjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAgEjC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrD"}
|
package/dist/nav/url-resolver.js
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
|
-
import { eq, and, sql } from 'drizzle-orm';
|
|
1
|
+
import { eq, and, sql, inArray, asc } from 'drizzle-orm';
|
|
2
2
|
import { kywiContent } from '../schema/base.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base types that can legitimately own a public page URL.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `INDEXABLE_BASE_TYPES` (src/ax/filters.ts) plus `link`, which is also
|
|
7
|
+
* addressable (it redirects). Everything else — `form`, `component`, `media` —
|
|
8
|
+
* is an embeddable, not a standalone route.
|
|
9
|
+
*/
|
|
10
|
+
export const PAGE_LIKE_BASE_TYPES = ['content', 'folder', 'event', 'gallery', 'link'];
|
|
11
|
+
/**
|
|
12
|
+
* ORDER BY fragments that rank page-like rows ahead of everything else, then
|
|
13
|
+
* break remaining ties deterministically by creation order.
|
|
14
|
+
*
|
|
15
|
+
* `kywi_content.slug`/`path` are not unique across base types, so a Page and a
|
|
16
|
+
* Form can both sit at `/contact`. Resolving whichever row the planner happened
|
|
17
|
+
* to return first served the form's row at the page URL and rendered an empty,
|
|
18
|
+
* layout-less page while the real page stayed invisible (kywi-cms#100 / UAT-009;
|
|
19
|
+
* kywi-cms#39 fixed the same collision on the form-*submission* side).
|
|
20
|
+
*
|
|
21
|
+
* This only breaks ties: a route that matches exactly one row resolves to that
|
|
22
|
+
* row exactly as before.
|
|
23
|
+
*/
|
|
24
|
+
export function pageFirstOrdering() {
|
|
25
|
+
return [
|
|
26
|
+
sql `CASE WHEN ${inArray(kywiContent.baseType, PAGE_LIKE_BASE_TYPES)} THEN 0 ELSE 1 END`,
|
|
27
|
+
asc(kywiContent.createdAt),
|
|
28
|
+
];
|
|
29
|
+
}
|
|
3
30
|
/**
|
|
4
31
|
* Resolve a content node by walking the materialized path.
|
|
5
32
|
*
|
|
@@ -13,6 +40,10 @@ import { kywiContent } from '../schema/base.js';
|
|
|
13
40
|
* row for that locale matches; the caller falls back to the default locale on a
|
|
14
41
|
* miss. Omit it to match any locale (structural resolution).
|
|
15
42
|
*
|
|
43
|
+
* When more than one row shares the path (slug is not unique across base types —
|
|
44
|
+
* e.g. a Page and a Form both named "contact"), the page-like row wins; see
|
|
45
|
+
* {@link pageFirstOrdering} (kywi-cms#100).
|
|
46
|
+
*
|
|
16
47
|
* Returns null if no matching content exists for the site+path (+locale).
|
|
17
48
|
*/
|
|
18
49
|
export async function resolveContentByPath(db, path, siteId, options) {
|
|
@@ -40,6 +71,7 @@ export async function resolveContentByPath(db, path, siteId, options) {
|
|
|
40
71
|
})
|
|
41
72
|
.from(kywiContent)
|
|
42
73
|
.where(and(...conditions))
|
|
74
|
+
.orderBy(...pageFirstOrdering())
|
|
43
75
|
.limit(1);
|
|
44
76
|
if (!row)
|
|
45
77
|
return null;
|
|
@@ -86,6 +118,9 @@ export async function resolveContentBySegments(db, path, siteId) {
|
|
|
86
118
|
})
|
|
87
119
|
.from(kywiContent)
|
|
88
120
|
.where(and(...conditions))
|
|
121
|
+
// Same page-first tie-break as resolveContentByPath: a segment slug shared
|
|
122
|
+
// by a page and a non-page row must walk into the page (kywi-cms#100).
|
|
123
|
+
.orderBy(...pageFirstOrdering())
|
|
89
124
|
.limit(1);
|
|
90
125
|
if (!row)
|
|
91
126
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-resolver.js","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"url-resolver.js","sourceRoot":"","sources":["../../src/nav/url-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-mode-hooks.d.ts","sourceRoot":"","sources":["../../src/scope/edit-mode-hooks.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAA;IACnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"edit-mode-hooks.d.ts","sourceRoot":"","sources":["../../src/scope/edit-mode-hooks.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAA;IACnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uBAAuB;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAwBD,wBAAgB,eAAe,CAC7B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,iBAAiB,CAYnB;AAID,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;EAUxD"}
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { useState, useCallback } from 'react';
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
const EDIT_PARAM = 'kywi-edit';
|
|
4
|
+
// Keep the `?kywi-edit=1` URL param mirroring edit-mode state. This is a plain
|
|
5
|
+
// `history.replaceState` (never a push — a UI-mode toggle isn't a new history
|
|
6
|
+
// entry, and this deliberately bypasses next/navigation's router so it can't
|
|
7
|
+
// trigger a server round-trip): entering edit mode adds the param so a reload
|
|
8
|
+
// or a shared link lands straight back in the editor; leaving removes it. A
|
|
9
|
+
// deep link that opened straight into edit mode (the param already present)
|
|
10
|
+
// is a no-op here — nothing to reconcile.
|
|
11
|
+
function syncEditModeParam(isEditMode) {
|
|
12
|
+
if (typeof window === 'undefined')
|
|
13
|
+
return;
|
|
14
|
+
const url = new URL(window.location.href);
|
|
15
|
+
const hasParam = url.searchParams.get(EDIT_PARAM) === '1';
|
|
16
|
+
if (isEditMode === hasParam)
|
|
17
|
+
return;
|
|
18
|
+
if (isEditMode) {
|
|
19
|
+
url.searchParams.set(EDIT_PARAM, '1');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
url.searchParams.delete(EDIT_PARAM);
|
|
23
|
+
}
|
|
24
|
+
window.history.replaceState(window.history.state, '', url.toString());
|
|
25
|
+
}
|
|
3
26
|
export function useKywiEditMode(opts = {}) {
|
|
4
27
|
const { canEdit = false, canPublish = false } = opts;
|
|
5
28
|
const [isEditMode, setIsEditMode] = useState(false);
|
|
6
29
|
const toggleEdit = useCallback(() => setIsEditMode(prev => !prev), []);
|
|
7
30
|
const startEdit = useCallback(() => setIsEditMode(true), []);
|
|
8
31
|
const endEdit = useCallback(() => setIsEditMode(false), []);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
syncEditModeParam(isEditMode);
|
|
34
|
+
}, [isEditMode]);
|
|
9
35
|
return { isEditMode, canEdit, canPublish, toggleEdit, startEdit, endEdit };
|
|
10
36
|
}
|
|
11
37
|
// ─── useKywiInlineEdit ────────────────────────────────────────────────────────
|