@commonpub/server 2.58.0 → 2.60.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/README.md +1 -0
- package/dist/contest/contest.d.ts +38 -13
- package/dist/contest/contest.d.ts.map +1 -1
- package/dist/contest/contest.js +64 -33
- package/dist/contest/contest.js.map +1 -1
- package/dist/contest/index.d.ts +2 -2
- package/dist/contest/index.d.ts.map +1 -1
- package/dist/contest/index.js +1 -1
- package/dist/contest/index.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/custom-page-validate.d.ts +41 -0
- package/dist/layout/custom-page-validate.d.ts.map +1 -0
- package/dist/layout/custom-page-validate.js +105 -0
- package/dist/layout/custom-page-validate.js.map +1 -0
- package/dist/layout/layout.d.ts +11 -1
- package/dist/layout/layout.d.ts.map +1 -1
- package/dist/layout/layout.js +74 -18
- package/dist/layout/layout.js.map +1 -1
- package/dist/layout/migrate-homepage.d.ts.map +1 -1
- package/dist/layout/migrate-homepage.js +65 -16
- package/dist/layout/migrate-homepage.js.map +1 -1
- package/dist/layout/path-normalize.d.ts +49 -0
- package/dist/layout/path-normalize.d.ts.map +1 -0
- package/dist/layout/path-normalize.js +91 -0
- package/dist/layout/path-normalize.js.map +1 -0
- package/dist/publicApi/serializers.d.ts +13 -3
- package/dist/publicApi/serializers.d.ts.map +1 -1
- package/dist/publicApi/serializers.js +15 -3
- package/dist/publicApi/serializers.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom-page scope validation — conflict detection.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/plans/layout-and-pages.md §6.2.
|
|
5
|
+
*
|
|
6
|
+
* Called from the admin save handler BEFORE saveLayout(). Three checks:
|
|
7
|
+
* 1. Path normalises cleanly (delegates to pathNormalize)
|
|
8
|
+
* 2. Path doesn't collide with a file-defined Nuxt route
|
|
9
|
+
* 3. Path doesn't collide with another custom-page layout
|
|
10
|
+
*
|
|
11
|
+
* Returns `{ok:true, normalisedScope}` or `{ok:false, reason, message}`.
|
|
12
|
+
* Admin handler maps reasons to HTTP status codes (400 for malformed,
|
|
13
|
+
* 409 for collision).
|
|
14
|
+
*
|
|
15
|
+
* **File-routes manifest**: Phase 2 ships a hardcoded list of the
|
|
16
|
+
* layer's known top-level route names. Phase 3 will replace with a
|
|
17
|
+
* Nitro plugin that scans Nuxt's compiled route table at startup +
|
|
18
|
+
* publishes via event.context. The hardcoded list is the conservative
|
|
19
|
+
* floor — a custom page can't claim any of these top-level segments
|
|
20
|
+
* even if the consumer app removes one (avoids surprise breaks for
|
|
21
|
+
* thin apps that re-add the route in a future bump).
|
|
22
|
+
*/
|
|
23
|
+
import { sql } from 'drizzle-orm';
|
|
24
|
+
import { pathNormalize } from './path-normalize.js';
|
|
25
|
+
/**
|
|
26
|
+
* Top-level path segments owned by file-defined routes in the layer.
|
|
27
|
+
* Generated from `ls layers/base/pages/` (session 159), trimmed to the
|
|
28
|
+
* names that occupy URL space (not the dynamic segments like `[type]`
|
|
29
|
+
* or the catch-all `[...customPath]`).
|
|
30
|
+
*
|
|
31
|
+
* **A custom page CANNOT claim any path that starts with one of these.**
|
|
32
|
+
* A thin app that ADDS new pages should add their top-level segment
|
|
33
|
+
* here too — Phase 3's startup scanner will obsolete this list.
|
|
34
|
+
*/
|
|
35
|
+
export const FILE_ROUTE_PREFIXES = new Set([
|
|
36
|
+
'about',
|
|
37
|
+
'admin',
|
|
38
|
+
'auth',
|
|
39
|
+
'authorize_interaction',
|
|
40
|
+
'cert',
|
|
41
|
+
'contests',
|
|
42
|
+
'cookies',
|
|
43
|
+
'create',
|
|
44
|
+
'dashboard',
|
|
45
|
+
'docs',
|
|
46
|
+
'events',
|
|
47
|
+
'explore',
|
|
48
|
+
'federated-hubs',
|
|
49
|
+
'federation',
|
|
50
|
+
'feed',
|
|
51
|
+
'hubs',
|
|
52
|
+
'learn',
|
|
53
|
+
'messages',
|
|
54
|
+
'mirror',
|
|
55
|
+
'notifications',
|
|
56
|
+
'privacy',
|
|
57
|
+
'products',
|
|
58
|
+
'search',
|
|
59
|
+
'settings',
|
|
60
|
+
'tags',
|
|
61
|
+
'terms',
|
|
62
|
+
'u',
|
|
63
|
+
'videos',
|
|
64
|
+
]);
|
|
65
|
+
export async function validateCustomPageScope(db, rawPath, opts = {}) {
|
|
66
|
+
// 1. Normalise
|
|
67
|
+
const norm = pathNormalize(rawPath);
|
|
68
|
+
if (!norm.ok) {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: norm.reason,
|
|
72
|
+
message: `Invalid custom-page path: ${norm.reason}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// 2. File-route conflict — check the first segment
|
|
76
|
+
const prefixes = opts.fileRoutePrefixes ?? FILE_ROUTE_PREFIXES;
|
|
77
|
+
const topSegment = norm.path.slice(1).split('/')[0];
|
|
78
|
+
if (topSegment && prefixes.has(topSegment)) {
|
|
79
|
+
return {
|
|
80
|
+
ok: false,
|
|
81
|
+
reason: 'file-route-conflict',
|
|
82
|
+
message: `Path /${topSegment} is owned by a built-in route; custom pages can't override it`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// 3. Existing custom-page at this path — raw query against the layouts
|
|
86
|
+
// table since this is a read-only validation that doesn't fit the
|
|
87
|
+
// full saveLayout payload shape.
|
|
88
|
+
const existing = await db.execute(sql `SELECT id FROM layouts WHERE scope_type = 'custom-page' AND scope_key = ${norm.path} LIMIT 1`);
|
|
89
|
+
const rows = Array.isArray(existing) ? existing :
|
|
90
|
+
Array.isArray(existing.rows) ? existing.rows :
|
|
91
|
+
[];
|
|
92
|
+
const conflicting = rows[0];
|
|
93
|
+
if (conflicting && conflicting.id !== opts.excludeLayoutId) {
|
|
94
|
+
return {
|
|
95
|
+
ok: false,
|
|
96
|
+
reason: 'custom-page-already-exists',
|
|
97
|
+
message: `A custom page at ${norm.path} already exists`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
ok: true,
|
|
102
|
+
scope: { type: 'custom-page', path: norm.path },
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=custom-page-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-page-validate.js","sourceRoot":"","sources":["../../src/layout/custom-page-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAA+B,MAAM,qBAAqB,CAAC;AAIjF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,OAAO;IACP,OAAO;IACP,MAAM;IACN,uBAAuB;IACvB,MAAM;IACN,UAAU;IACV,SAAS;IACT,QAAQ;IACR,WAAW;IACX,MAAM;IACN,QAAQ;IACR,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,MAAM;IACN,MAAM;IACN,OAAO;IACP,UAAU;IACV,QAAQ;IACR,eAAe;IACf,SAAS;IACT,UAAU;IACV,QAAQ;IACR,UAAU;IACV,MAAM;IACN,OAAO;IACP,GAAG;IACH,QAAQ;CACT,CAAC,CAAC;AA0BH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAM,EACN,OAAgB,EAChB,OAAkC,EAAE;IAEpC,eAAe;IACf,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,6BAA6B,IAAI,CAAC,MAAM,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qBAAqB;YAC7B,OAAO,EAAE,SAAS,UAAU,+DAA+D;SAC5F,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,oCAAoC;IACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAC/B,GAAG,CAAA,2EAA2E,IAAI,CAAC,IAAI,UAAU,CAClG,CAAC;IACF,MAAM,IAAI,GACR,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpC,KAAK,CAAC,OAAO,CAAE,QAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,QAA4C,CAAC,IAAI,CAAC,CAAC;YAC7G,EAAE,CAAC;IACL,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3D,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,4BAA4B;YACpC,OAAO,EAAE,oBAAoB,IAAI,CAAC,IAAI,iBAAiB;SACxD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAChD,CAAC;AACJ,CAAC"}
|
package/dist/layout/layout.d.ts
CHANGED
|
@@ -108,7 +108,17 @@ export interface LayoutVersionRecord {
|
|
|
108
108
|
export declare function getLayoutByScope(db: DB, scope: LayoutScope): Promise<LayoutRecord | null>;
|
|
109
109
|
/** Fetch a layout by its uuid. */
|
|
110
110
|
export declare function getLayoutById(db: DB, id: string): Promise<LayoutRecord | null>;
|
|
111
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* List all layouts, optionally filtered by scope type.
|
|
113
|
+
*
|
|
114
|
+
* Session 162 P2.2 — used to be 1 + 2N queries (one assembleLayout per
|
|
115
|
+
* layout, each making 2 child selects). For an instance with 50
|
|
116
|
+
* layouts that was 101 round-trips per list-page render. Now a flat
|
|
117
|
+
* 3 queries regardless of N: layouts → rows IN (layoutIds) → sections
|
|
118
|
+
* IN (rowIds), assembled in memory. Per-layout invariants preserved
|
|
119
|
+
* (cross-layout sort by scopeType/scopeKey, zone-stable row order,
|
|
120
|
+
* position-stable section order).
|
|
121
|
+
*/
|
|
112
122
|
export declare function listLayouts(db: DB, opts?: {
|
|
113
123
|
scopeType?: 'route' | 'virtual' | 'custom-page';
|
|
114
124
|
}): Promise<LayoutRecord[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/layout/layout.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* `invalidateLayoutCache()` after any write — see `instanceLayouts.ts`
|
|
26
26
|
* in `layers/base/server/utils/` (next phase).
|
|
27
27
|
*/
|
|
28
|
-
import { and, asc, desc, eq } from 'drizzle-orm';
|
|
28
|
+
import { and, asc, desc, eq, inArray } from 'drizzle-orm';
|
|
29
29
|
import { layouts, layoutRows, layoutSections, layoutVersions, } from '@commonpub/schema';
|
|
30
30
|
// ---- Helpers ------------------------------------------------------------
|
|
31
31
|
function unpackScope(scopeType, scopeKey) {
|
|
@@ -75,36 +75,92 @@ export async function getLayoutById(db, id) {
|
|
|
75
75
|
return null;
|
|
76
76
|
return assembleLayout(db, row);
|
|
77
77
|
}
|
|
78
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* List all layouts, optionally filtered by scope type.
|
|
80
|
+
*
|
|
81
|
+
* Session 162 P2.2 — used to be 1 + 2N queries (one assembleLayout per
|
|
82
|
+
* layout, each making 2 child selects). For an instance with 50
|
|
83
|
+
* layouts that was 101 round-trips per list-page render. Now a flat
|
|
84
|
+
* 3 queries regardless of N: layouts → rows IN (layoutIds) → sections
|
|
85
|
+
* IN (rowIds), assembled in memory. Per-layout invariants preserved
|
|
86
|
+
* (cross-layout sort by scopeType/scopeKey, zone-stable row order,
|
|
87
|
+
* position-stable section order).
|
|
88
|
+
*/
|
|
79
89
|
export async function listLayouts(db, opts = {}) {
|
|
80
|
-
const
|
|
90
|
+
const layoutRowsTop = opts.scopeType
|
|
81
91
|
? await db.select().from(layouts).where(eq(layouts.scopeType, opts.scopeType))
|
|
82
92
|
: await db.select().from(layouts);
|
|
83
|
-
|
|
93
|
+
if (layoutRowsTop.length === 0)
|
|
94
|
+
return [];
|
|
95
|
+
const layoutIds = layoutRowsTop.map((l) => l.id);
|
|
96
|
+
const allRowsForAllLayouts = await db
|
|
97
|
+
.select()
|
|
98
|
+
.from(layoutRows)
|
|
99
|
+
.where(inArray(layoutRows.layoutId, layoutIds))
|
|
100
|
+
.orderBy(asc(layoutRows.zone), asc(layoutRows.position));
|
|
101
|
+
const allRowIds = allRowsForAllLayouts.map((r) => r.id);
|
|
102
|
+
const allSections = allRowIds.length > 0
|
|
103
|
+
? await db
|
|
104
|
+
.select()
|
|
105
|
+
.from(layoutSections)
|
|
106
|
+
.where(inArray(layoutSections.rowId, allRowIds))
|
|
107
|
+
.orderBy(asc(layoutSections.position))
|
|
108
|
+
: [];
|
|
109
|
+
// Bucket child rows by parent id once. assembleFromParts does no I/O.
|
|
110
|
+
const rowsByLayoutId = new Map();
|
|
111
|
+
for (const r of allRowsForAllLayouts) {
|
|
112
|
+
const arr = rowsByLayoutId.get(r.layoutId) ?? [];
|
|
113
|
+
arr.push(r);
|
|
114
|
+
rowsByLayoutId.set(r.layoutId, arr);
|
|
115
|
+
}
|
|
116
|
+
const sectionsByRowId = new Map();
|
|
117
|
+
for (const s of allSections) {
|
|
118
|
+
const arr = sectionsByRowId.get(s.rowId) ?? [];
|
|
119
|
+
arr.push(s);
|
|
120
|
+
sectionsByRowId.set(s.rowId, arr);
|
|
121
|
+
}
|
|
122
|
+
return layoutRowsTop.map((l) => assembleFromParts(l, rowsByLayoutId.get(l.id) ?? [], sectionsByRowId));
|
|
84
123
|
}
|
|
85
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* Inner helper: take a layout-table row + fetch its rows + sections,
|
|
126
|
+
* return assembled record. Used by single-record reads (getLayoutByScope,
|
|
127
|
+
* getLayoutById, publishLayout). List reads use assembleFromParts directly
|
|
128
|
+
* to avoid the N+1.
|
|
129
|
+
*/
|
|
86
130
|
async function assembleLayout(db, row) {
|
|
87
131
|
const rowsForLayout = await db
|
|
88
132
|
.select()
|
|
89
133
|
.from(layoutRows)
|
|
90
134
|
.where(eq(layoutRows.layoutId, row.id))
|
|
91
135
|
.orderBy(asc(layoutRows.zone), asc(layoutRows.position));
|
|
136
|
+
// R4 audit fix (P0-perf): WHERE clause on rowId. Without it Drizzle
|
|
137
|
+
// ran SELECT * FROM layout_sections (no filter) on every layout fetch
|
|
138
|
+
// — full table scan on the by-route hot path. The idx_layout_sections_row
|
|
139
|
+
// index is now actually used by this query.
|
|
92
140
|
const sectionRowIds = rowsForLayout.map((r) => r.id);
|
|
93
141
|
const allSections = sectionRowIds.length > 0
|
|
94
142
|
? await db
|
|
95
143
|
.select()
|
|
96
144
|
.from(layoutSections)
|
|
145
|
+
.where(inArray(layoutSections.rowId, sectionRowIds))
|
|
97
146
|
.orderBy(asc(layoutSections.position))
|
|
98
147
|
: [];
|
|
99
148
|
const sectionsByRow = new Map();
|
|
100
149
|
for (const s of allSections) {
|
|
101
|
-
if (!sectionRowIds.includes(s.rowId))
|
|
102
|
-
continue;
|
|
103
150
|
const arr = sectionsByRow.get(s.rowId) ?? [];
|
|
104
|
-
arr.push(
|
|
151
|
+
arr.push(s);
|
|
105
152
|
sectionsByRow.set(s.rowId, arr);
|
|
106
153
|
}
|
|
107
|
-
|
|
154
|
+
return assembleFromParts(row, rowsForLayout, sectionsByRow);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Pure assembler: given a layout row + its pre-fetched child rows +
|
|
158
|
+
* sections keyed by rowId, produce the resolved LayoutRecord. No I/O.
|
|
159
|
+
* Lets listLayouts batch fetch once and assemble N records without
|
|
160
|
+
* re-querying per record.
|
|
161
|
+
*/
|
|
162
|
+
function assembleFromParts(layout, rowsForLayout, sectionsByRowId) {
|
|
163
|
+
// Group rows by zone preserving order (already ordered by zone, position).
|
|
108
164
|
const zoneMap = new Map();
|
|
109
165
|
for (const r of rowsForLayout) {
|
|
110
166
|
const list = zoneMap.get(r.zone) ?? [];
|
|
@@ -112,21 +168,21 @@ async function assembleLayout(db, row) {
|
|
|
112
168
|
id: r.id,
|
|
113
169
|
order: r.position,
|
|
114
170
|
config: (r.config ?? null),
|
|
115
|
-
sections:
|
|
171
|
+
sections: (sectionsByRowId.get(r.id) ?? []).map(rowToSection),
|
|
116
172
|
});
|
|
117
173
|
zoneMap.set(r.zone, list);
|
|
118
174
|
}
|
|
119
175
|
const zones = [...zoneMap.entries()].map(([zone, rs]) => ({ zone, rows: rs }));
|
|
120
176
|
return {
|
|
121
|
-
id:
|
|
122
|
-
scope: unpackScope(
|
|
123
|
-
name:
|
|
124
|
-
pageMeta: (
|
|
125
|
-
state:
|
|
126
|
-
publishedVersionId:
|
|
177
|
+
id: layout.id,
|
|
178
|
+
scope: unpackScope(layout.scopeType, layout.scopeKey),
|
|
179
|
+
name: layout.name,
|
|
180
|
+
pageMeta: (layout.pageMeta ?? null),
|
|
181
|
+
state: layout.state,
|
|
182
|
+
publishedVersionId: layout.publishedVersionId,
|
|
127
183
|
zones,
|
|
128
|
-
createdAt:
|
|
129
|
-
updatedAt:
|
|
184
|
+
createdAt: layout.createdAt.toISOString(),
|
|
185
|
+
updatedAt: layout.updatedAt.toISOString(),
|
|
130
186
|
};
|
|
131
187
|
}
|
|
132
188
|
// ---- Writes -------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-homepage.d.ts","sourceRoot":"","sources":["../../src/layout/migrate-homepage.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC;IAC1D,6DAA6D;IAC7D,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"migrate-homepage.d.ts","sourceRoot":"","sources":["../../src/layout/migrate-homepage.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC;IAC1D,6DAA6D;IAC7D,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAmLD;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,EAAE,EAAE,EAAE,EACN,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAuJhC"}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
* UI "re-run migration" affordance would set this).
|
|
39
39
|
*/
|
|
40
40
|
import { sql } from 'drizzle-orm';
|
|
41
|
-
import { saveLayout, publishLayout, getLayoutByScope
|
|
41
|
+
import { saveLayout, publishLayout, getLayoutByScope } from './layout.js';
|
|
42
42
|
// ---- Mapping tables -----------------------------------------------------
|
|
43
43
|
/** Legacy type slug → registered section type slug. */
|
|
44
44
|
const TYPE_MAP = {
|
|
@@ -76,19 +76,57 @@ function buildConfig(newType, legacy) {
|
|
|
76
76
|
const legacyConfig = legacy.config ?? {};
|
|
77
77
|
const heading = legacy.title ?? '';
|
|
78
78
|
switch (newType) {
|
|
79
|
-
case 'hero':
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
79
|
+
case 'hero': {
|
|
80
|
+
// **Important**: legacy `homepage.sections[].title` is the EDITOR
|
|
81
|
+
// DISPLAY NAME shown in admin UI ("Hero Banner") — NOT the user-
|
|
82
|
+
// facing content. The actual legacy hero copy was hardcoded in
|
|
83
|
+
// `layers/base/components/homepage/HeroSection.vue`:
|
|
84
|
+
//
|
|
85
|
+
// eyebrow: "Open Source" badge
|
|
86
|
+
// title: "Build. Document. Share."
|
|
87
|
+
// subtitle: "CommonPub is an open platform for maker communities..."
|
|
88
|
+
// CTAs: "Start Building" → /create, "Explore" → /explore
|
|
89
|
+
//
|
|
90
|
+
// When the legacy hero only set `variant: 'default'` (which is
|
|
91
|
+
// common — most operators never customised because the legacy
|
|
92
|
+
// editor didn't expose these fields), copying `legacy.title` into
|
|
93
|
+
// `new.config.title` gives the user a hero that says literally
|
|
94
|
+
// "Hero Banner" on the live page. That's the session-159 canary
|
|
95
|
+
// bug.
|
|
96
|
+
//
|
|
97
|
+
// Fix: prefer legacyConfig.title/subtitle/etc if explicitly set;
|
|
98
|
+
// otherwise fall through to the canonical hardcoded defaults that
|
|
99
|
+
// match what the legacy HeroSection.vue rendered. legacy.title
|
|
100
|
+
// (the display name) is intentionally IGNORED for these fields.
|
|
101
|
+
// Legacy admin editor exposes `customTitle`/`customSubtitle` fields
|
|
102
|
+
// (per layers/base/server/api/admin/homepage/sections.put.ts schema);
|
|
103
|
+
// some operator workflows write directly as `title`/`subtitle`. Check
|
|
104
|
+
// both naming conventions before falling through to defaults.
|
|
105
|
+
const legacyTitle = (legacyConfig.customTitle ?? legacyConfig.title);
|
|
106
|
+
const legacySubtitle = (legacyConfig.customSubtitle ?? legacyConfig.subtitle);
|
|
107
|
+
const legacyEyebrow = legacyConfig.eyebrow;
|
|
108
|
+
// Field NAMES match hero section's configSchema (Stage E.4): the
|
|
109
|
+
// unified hero uses customTitle/customSubtitle (mirrors the legacy
|
|
110
|
+
// admin form's field names), not title/subtitle. ctas optional.
|
|
111
|
+
const hasLegacyContent = !!(legacyTitle || legacySubtitle || legacyEyebrow);
|
|
112
|
+
if (hasLegacyContent) {
|
|
113
|
+
return {
|
|
114
|
+
variant: legacyConfig.variant ?? 'default',
|
|
115
|
+
customTitle: legacyTitle ?? '',
|
|
116
|
+
customSubtitle: legacySubtitle ?? '',
|
|
117
|
+
ctas: Array.isArray(legacyConfig.ctas) ? legacyConfig.ctas : [],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// No legacy customisation — produce an empty config; HeroSection
|
|
121
|
+
// applies its hardcoded "Build. Document. Share." defaults when
|
|
122
|
+
// customTitle/Subtitle are empty (Stage E hero extension).
|
|
85
123
|
return {
|
|
86
124
|
variant: legacyConfig.variant ?? 'default',
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
ctas: Array.isArray(legacyConfig.ctas) ? legacyConfig.ctas : [],
|
|
125
|
+
customTitle: '',
|
|
126
|
+
customSubtitle: '',
|
|
127
|
+
ctas: [],
|
|
91
128
|
};
|
|
129
|
+
}
|
|
92
130
|
case 'editorial':
|
|
93
131
|
return {
|
|
94
132
|
heading: heading || 'Staff Picks',
|
|
@@ -171,10 +209,13 @@ export async function migrateHomepageSectionsToLayout(db, opts = {}) {
|
|
|
171
209
|
reason: 'layout-already-exists',
|
|
172
210
|
};
|
|
173
211
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
212
|
+
// Note: we DO NOT delete `existing` here, even with force=true. Deleting
|
|
213
|
+
// the layout would cascade through `layout_versions` (FK ON DELETE CASCADE),
|
|
214
|
+
// destroying the operator's entire publish history. Instead, force passes
|
|
215
|
+
// `existing.id` to saveLayout below — saveLayout updates the layout row
|
|
216
|
+
// in-place, rewrites the rows + sections, and the cascade chain stops at
|
|
217
|
+
// those children. Publish snapshots survive.
|
|
218
|
+
// (R4 P1 fix, session 161. Previously this branch did `await deleteLayout(db, existing.id)`.)
|
|
178
219
|
// 3. Filter + map legacy sections.
|
|
179
220
|
const skipReasons = {};
|
|
180
221
|
const mapped = [];
|
|
@@ -259,7 +300,15 @@ export async function migrateHomepageSectionsToLayout(db, opts = {}) {
|
|
|
259
300
|
};
|
|
260
301
|
// 6. Save + publish atomically. publishLayout takes a snapshot into
|
|
261
302
|
// layout_versions so the operator can revert if needed.
|
|
262
|
-
|
|
303
|
+
//
|
|
304
|
+
// When `existing` is set (force=true path), pass its id to saveLayout
|
|
305
|
+
// so the layout row is updated in-place — preserves prior
|
|
306
|
+
// `layout_versions` snapshots that delete+create would have cascaded
|
|
307
|
+
// away. (R4 P1 fix, session 161.)
|
|
308
|
+
const saveOpts = { userId: opts.adminId };
|
|
309
|
+
if (existing)
|
|
310
|
+
saveOpts.id = existing.id;
|
|
311
|
+
const saved = await saveLayout(db, input, saveOpts);
|
|
263
312
|
await publishLayout(db, saved.id, { publishedBy: opts.adminId });
|
|
264
313
|
const sectionsConverted = mapped.length;
|
|
265
314
|
const sectionsSkipped = legacySections.length - sectionsConverted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-homepage.js","sourceRoot":"","sources":["../../src/layout/migrate-homepage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"migrate-homepage.js","sourceRoot":"","sources":["../../src/layout/migrate-homepage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAqD1E,4EAA4E;AAE5E,uDAAuD;AACvD,MAAM,QAAQ,GAA2B;IACvC,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,cAAc,EAAU,mBAAmB;IAC3D,kBAAkB,EAAE,cAAc,EAAM,oCAAoC;IAC5E,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE3C,iDAAiD;AACjD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,mEAAmE;AACnE,MAAM,iBAAiB,GAA6B;IAClD,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,UAAU,CAAC;CACvB,CAAC;AAEF,6EAA6E;AAE7E;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,MAA6B;IACjE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAEnC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,qDAAqD;YACrD,EAAE;YACF,iCAAiC;YACjC,wCAAwC;YACxC,uEAAuE;YACvE,+DAA+D;YAC/D,EAAE;YACF,+DAA+D;YAC/D,8DAA8D;YAC9D,kEAAkE;YAClE,+DAA+D;YAC/D,gEAAgE;YAChE,OAAO;YACP,EAAE;YACF,iEAAiE;YACjE,kEAAkE;YAClE,+DAA+D;YAC/D,gEAAgE;YAChE,oEAAoE;YACpE,sEAAsE;YACtE,sEAAsE;YACtE,8DAA8D;YAC9D,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,KAAK,CAAuB,CAAC;YAC3F,MAAM,cAAc,GAAG,CAAC,YAAY,CAAC,cAAc,IAAI,YAAY,CAAC,QAAQ,CAAuB,CAAC;YACpG,MAAM,aAAa,GAAG,YAAY,CAAC,OAA6B,CAAC;YACjE,iEAAiE;YACjE,mEAAmE;YACnE,gEAAgE;YAChE,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,cAAc,IAAI,aAAa,CAAC,CAAC;YAC5E,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAG,YAAY,CAAC,OAAkB,IAAI,SAAS;oBACtD,WAAW,EAAE,WAAW,IAAI,EAAE;oBAC9B,cAAc,EAAE,cAAc,IAAI,EAAE;oBACpC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;iBAChE,CAAC;YACJ,CAAC;YACD,iEAAiE;YACjE,gEAAgE;YAChE,2DAA2D;YAC3D,OAAO;gBACL,OAAO,EAAG,YAAY,CAAC,OAAkB,IAAI,SAAS;gBACtD,WAAW,EAAE,EAAE;gBACf,cAAc,EAAE,EAAE;gBAClB,IAAI,EAAE,EAAE;aACT,CAAC;QACJ,CAAC;QAED,KAAK,WAAW;YACd,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,aAAa;gBACjC,KAAK,EAAE,KAAK,CAAE,YAAY,CAAC,KAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxD,OAAO,EAAE,cAAc,CAAE,YAAY,CAAC,OAAkB,IAAI,CAAC,CAAC;aAC/D,CAAC;QAEJ,KAAK,cAAc;YACjB,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,WAAW,EAAG,YAAY,CAAC,WAAsB,IAAI,EAAE;gBACvD,IAAI,EAAE,CAAE,YAAY,CAAC,IAAe,IAAI,QAAQ,CACC;gBACjD,KAAK,EAAE,KAAK,CAAE,YAAY,CAAC,KAAgB,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,OAAO,EAAE,cAAc,CAAE,YAAY,CAAC,OAAkB,IAAI,CAAC,CAAC;gBAC9D,GAAG,EAAG,YAAY,CAAC,GAAc,IAAI,EAAE;gBACvC,QAAQ,EAAG,YAAY,CAAC,QAAoB,IAAI,KAAK;aACtD,CAAC;QAEJ,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAElD,KAAK,MAAM;YACT,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,eAAe;gBACnC,KAAK,EAAE,KAAK,CAAE,YAAY,CAAC,KAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;aACzD,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,iBAAiB;gBACrC,KAAK,EAAE,KAAK,CAAE,YAAY,CAAC,KAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;aACzD,CAAC;QAEJ,KAAK,UAAU;YACb,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,gBAAgB;gBACpC,KAAK,EAAE,KAAK,CAAE,YAAY,CAAC,KAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxD,OAAO,EAAE,cAAc,CAAE,YAAY,CAAC,OAAkB,IAAI,CAAC,CAAC;aAC/D,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO;gBACL,OAAO,EAAE,OAAO,IAAI,EAAE;gBACtB,IAAI,EAAG,YAAY,CAAC,IAAe,IAAI,EAAE;aAC1C,CAAC;QAEJ;YACE,kEAAkE;YAClE,oEAAoE;YACpE,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,CAAkB,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAE7E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,EAAM,EACN,OAA+B,EAAE;IAEjC,qEAAqE;IACrE,qEAAqE;IACrE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAC3B,GAAG,CAAA,6EAA6E,CACjF,CAAC;IACF,kEAAkE;IAClE,gCAAgC;IAChC,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAE,IAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAA4C,CAAC,IAAI,CAAC,CAAC;YACzG,EAAE,CAAC;IAEL,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IACtC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACjG,CAAC;IACD,MAAM,cAAc,GAAG,WAAsC,CAAC;IAE9D,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1E,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACrB,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE,CAAC;YAClB,MAAM,EAAE,uBAAuB;SAChC,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,6EAA6E;IAC7E,0EAA0E;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,6CAA6C;IAC7C,8FAA8F;IAE9F,mCAAmC;IACnC,MAAM,WAAW,GAAgD,EAAE,CAAC;IAEpE,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC7B,WAAW,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,WAAW,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;YACjC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE,cAAc,CAAC,MAAM;YACtC,WAAW;YACX,MAAM,EAAE,qBAAqB;SAC9B,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,sEAAsE;IACtE,qEAAqE;IACrE,sCAAsC;IACtC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAqD;QACzE,CAAC,YAAY,EAAE,EAAE,CAAC;QAClB,CAAC,MAAM,EAAE,EAAE,CAAC;QACZ,CAAC,SAAS,EAAE,EAAE,CAAC;KAChB,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GACR,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAChD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,CAAC;QACT,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,qDAAqD;IACnF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,0DAA0D;IAC1D,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAU,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhC,MAAM,QAAQ,GAAyB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACzD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,OAAO,GAAuB;gBAClC,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,CAAC,CAAC,OAAO;gBACf,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBACxC,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,CAAC;aACjB,CAAC;YACF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,CAAC,UAAU,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YACtD,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAmB;YAC1B,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;YAC1D,QAAQ;SACT,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;QACnC,IAAI,EAAE,iCAAiC;QACvC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;QACjD,KAAK,EAAE,OAAO,EAAG,yCAAyC;QAC1D,KAAK;KACN,CAAC;IAEF,oEAAoE;IACpE,2DAA2D;IAC3D,EAAE;IACF,yEAAyE;IACzE,6DAA6D;IAC7D,wEAAwE;IACxE,qCAAqC;IACrC,MAAM,QAAQ,GAAqC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5E,IAAI,QAAQ;QAAE,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjE,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,GAAG,iBAAiB,CAAC;IAElE,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,iBAAiB;QACjB,eAAe;QACf,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path normalisation for custom-page layouts.
|
|
3
|
+
*
|
|
4
|
+
* Spec: docs/plans/layout-and-pages.md §6.3.
|
|
5
|
+
*
|
|
6
|
+
* Normalises an input path to its canonical form, OR rejects with a
|
|
7
|
+
* specific reason if it violates structural rules.
|
|
8
|
+
*
|
|
9
|
+
* Why centralised: the rules apply at three call sites (admin save
|
|
10
|
+
* handler, Nuxt catch-all page, the `useLayout` lookup), and divergence
|
|
11
|
+
* between them would let admins save a `/About` layout that never gets
|
|
12
|
+
* served because the catch-all looked up `/about`. Single source of
|
|
13
|
+
* truth here, used everywhere.
|
|
14
|
+
*
|
|
15
|
+
* Examples (also pinned in tests):
|
|
16
|
+
* /about → ok '/about'
|
|
17
|
+
* /about/ → ok '/about' (trailing slash stripped)
|
|
18
|
+
* about → ok '/about' (leading slash added)
|
|
19
|
+
* /About → ok '/about' (lowercased)
|
|
20
|
+
* //a//b// → ok '/a/b' (collapsed double slashes)
|
|
21
|
+
* ' /about ' → ok '/about' (trimmed)
|
|
22
|
+
* /about?x=1 → reject 'has-query'
|
|
23
|
+
* /about#anchor → reject 'has-fragment'
|
|
24
|
+
* /api/foo → reject 'reserved-prefix'
|
|
25
|
+
* / → reject 'reserved-prefix' (root is route-scope, not custom-page)
|
|
26
|
+
* '' → reject 'empty'
|
|
27
|
+
* /a/../b → reject 'has-dot-segment'
|
|
28
|
+
* /a//b → ok '/a/b' (after collapse)
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Path prefixes that custom pages CANNOT claim. These either map to
|
|
32
|
+
* framework internals or to built-in route-scope layouts.
|
|
33
|
+
*/
|
|
34
|
+
export declare const RESERVED_PREFIXES: ReadonlyArray<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Single-segment paths that are RESERVED (route-scope, not custom-page).
|
|
37
|
+
* The homepage `/` lives in the route-scope layout, not custom-page.
|
|
38
|
+
*/
|
|
39
|
+
export declare const RESERVED_EXACT: ReadonlyArray<string>;
|
|
40
|
+
export type NormalisePathRejection = 'empty' | 'has-query' | 'has-fragment' | 'has-dot-segment' | 'reserved-prefix' | 'invalid-char';
|
|
41
|
+
export type NormalisePathResult = {
|
|
42
|
+
ok: true;
|
|
43
|
+
path: string;
|
|
44
|
+
} | {
|
|
45
|
+
ok: false;
|
|
46
|
+
reason: NormalisePathRejection;
|
|
47
|
+
};
|
|
48
|
+
export declare function pathNormalize(input: unknown): NormalisePathResult;
|
|
49
|
+
//# sourceMappingURL=path-normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-normalize.d.ts","sourceRoot":"","sources":["../../src/layout/path-normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAKnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,MAAM,CAAS,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAUlD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAoCjE"}
|