@plumix/core 0.3.0 → 0.4.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/auth/bootstrap.d.ts.map +1 -1
- package/dist/auth/bootstrap.js +39 -22
- package/dist/auth/bootstrap.js.map +1 -1
- package/dist/cache/tags.d.ts.map +1 -1
- package/dist/cache/tags.js +9 -0
- package/dist/cache/tags.js.map +1 -1
- package/dist/db/errors.d.ts +8 -0
- package/dist/db/errors.d.ts.map +1 -1
- package/dist/db/errors.js +22 -0
- package/dist/db/errors.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema/users.d.ts +57 -0
- package/dist/db/schema/users.d.ts.map +1 -1
- package/dist/db/schema/users.js +10 -2
- package/dist/db/schema/users.js.map +1 -1
- package/dist/debug-bar/template-node-label.d.ts.map +1 -1
- package/dist/debug-bar/template-node-label.js +8 -0
- package/dist/debug-bar/template-node-label.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/plugin/manifest.d.ts +34 -0
- package/dist/plugin/manifest.d.ts.map +1 -1
- package/dist/plugin/manifest.js +1 -0
- package/dist/plugin/manifest.js.map +1 -1
- package/dist/plugin/setup-context.d.ts +10 -1
- package/dist/plugin/setup-context.d.ts.map +1 -1
- package/dist/plugin/setup-context.js +12 -0
- package/dist/plugin/setup-context.js.map +1 -1
- package/dist/route/compile.d.ts +21 -0
- package/dist/route/compile.d.ts.map +1 -1
- package/dist/route/compile.js +63 -1
- package/dist/route/compile.js.map +1 -1
- package/dist/route/current.d.ts +5 -3
- package/dist/route/current.d.ts.map +1 -1
- package/dist/route/date-range.d.ts +12 -0
- package/dist/route/date-range.d.ts.map +1 -0
- package/dist/route/date-range.js +39 -0
- package/dist/route/date-range.js.map +1 -0
- package/dist/route/intent.d.ts +7 -3
- package/dist/route/intent.d.ts.map +1 -1
- package/dist/route/match.d.ts +1 -0
- package/dist/route/match.d.ts.map +1 -1
- package/dist/route/match.js +1 -1
- package/dist/route/match.js.map +1 -1
- package/dist/route/render/build-resolved-entries.d.ts.map +1 -1
- package/dist/route/render/build-resolved-entries.js +6 -1
- package/dist/route/render/build-resolved-entries.js.map +1 -1
- package/dist/route/render/resolved-entry.d.ts +36 -0
- package/dist/route/render/resolved-entry.d.ts.map +1 -1
- package/dist/route/render/template-builders.d.ts +54 -2
- package/dist/route/render/template-builders.d.ts.map +1 -1
- package/dist/route/render/template-builders.js +63 -4
- package/dist/route/render/template-builders.js.map +1 -1
- package/dist/route/render/template-hierarchy.d.ts +17 -1
- package/dist/route/render/template-hierarchy.d.ts.map +1 -1
- package/dist/route/render/template-hierarchy.js +23 -0
- package/dist/route/render/template-hierarchy.js.map +1 -1
- package/dist/route/resolve.d.ts +3 -1
- package/dist/route/resolve.d.ts.map +1 -1
- package/dist/route/resolve.js +148 -4
- package/dist/route/resolve.js.map +1 -1
- package/dist/rpc/procedures/entry/create.d.ts +2 -2
- package/dist/rpc/procedures/entry/delete-permanent.d.ts +2 -2
- package/dist/rpc/procedures/entry/duplicate.d.ts +2 -2
- package/dist/rpc/procedures/entry/get.d.ts +2 -2
- package/dist/rpc/procedures/entry/index.d.ts +22 -22
- package/dist/rpc/procedures/entry/list.d.ts +2 -2
- package/dist/rpc/procedures/entry/publish.d.ts +2 -2
- package/dist/rpc/procedures/entry/restore.d.ts +2 -2
- package/dist/rpc/procedures/entry/revisions.d.ts +8 -8
- package/dist/rpc/procedures/entry/trash.d.ts +2 -2
- package/dist/rpc/procedures/entry/update.d.ts +2 -2
- package/dist/rpc/procedures/term/create.d.ts +2 -2
- package/dist/rpc/procedures/term/delete.d.ts +2 -2
- package/dist/rpc/procedures/term/get.d.ts +2 -2
- package/dist/rpc/procedures/term/index.d.ts +10 -10
- package/dist/rpc/procedures/term/list.d.ts +2 -2
- package/dist/rpc/procedures/term/update.d.ts +2 -2
- package/dist/rpc/procedures/user/delete.d.ts +2 -0
- package/dist/rpc/procedures/user/delete.d.ts.map +1 -1
- package/dist/rpc/procedures/user/disable.d.ts +2 -0
- package/dist/rpc/procedures/user/disable.d.ts.map +1 -1
- package/dist/rpc/procedures/user/enable.d.ts +2 -0
- package/dist/rpc/procedures/user/enable.d.ts.map +1 -1
- package/dist/rpc/procedures/user/get.d.ts +2 -0
- package/dist/rpc/procedures/user/get.d.ts.map +1 -1
- package/dist/rpc/procedures/user/index.d.ts +12 -0
- package/dist/rpc/procedures/user/index.d.ts.map +1 -1
- package/dist/rpc/procedures/user/invite.d.ts.map +1 -1
- package/dist/rpc/procedures/user/invite.js +28 -15
- package/dist/rpc/procedures/user/invite.js.map +1 -1
- package/dist/rpc/procedures/user/list.d.ts +2 -0
- package/dist/rpc/procedures/user/list.d.ts.map +1 -1
- package/dist/rpc/procedures/user/list.js +1 -0
- package/dist/rpc/procedures/user/list.js.map +1 -1
- package/dist/rpc/procedures/user/update.d.ts +2 -0
- package/dist/rpc/procedures/user/update.d.ts.map +1 -1
- package/dist/rpc/router.d.ts +44 -32
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/runtime/dispatcher.d.ts.map +1 -1
- package/dist/runtime/dispatcher.js +70 -6
- package/dist/runtime/dispatcher.js.map +1 -1
- package/dist/seo/feed.d.ts +19 -4
- package/dist/seo/feed.d.ts.map +1 -1
- package/dist/seo/feed.js +49 -12
- package/dist/seo/feed.js.map +1 -1
- package/dist/seo/head-defaults.d.ts.map +1 -1
- package/dist/seo/head-defaults.js +6 -3
- package/dist/seo/head-defaults.js.map +1 -1
- package/dist/template-registry.d.ts +31 -1
- package/dist/template-registry.d.ts.map +1 -1
- package/dist/test/default-theme.d.ts.map +1 -1
- package/dist/test/default-theme.js +3 -0
- package/dist/test/default-theme.js.map +1 -1
- package/dist/test/factories.d.ts +39 -21
- package/dist/test/factories.d.ts.map +1 -1
- package/dist/test/factories.js +1 -0
- package/dist/test/factories.js.map +1 -1
- package/dist/theme.d.ts +15 -7
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +9 -0
- package/dist/theme.js.map +1 -1
- package/dist/users/slug.d.ts +12 -0
- package/dist/users/slug.d.ts.map +1 -0
- package/dist/users/slug.js +32 -0
- package/dist/users/slug.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,GACA,OAAO,CAAC,gBAAgB,CAAC,CA0C3B"}
|
package/dist/auth/bootstrap.js
CHANGED
|
@@ -1,27 +1,44 @@
|
|
|
1
|
-
import { sql } from "../db/index.js";
|
|
1
|
+
import { isUniqueConstraintErrorOn, sql } from "../db/index.js";
|
|
2
2
|
import { users } from "../db/schema/users.js";
|
|
3
|
+
import { deriveUserSlug, MAX_SLUG_ATTEMPTS } from "../users/slug.js";
|
|
3
4
|
export async function provisionUser(db, input) {
|
|
4
5
|
const defaultRole = input.defaultRole ?? "subscriber";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
6
|
+
for (let attempt = 1;; attempt++) {
|
|
7
|
+
const slug = await deriveUserSlug(db, input.name);
|
|
8
|
+
// Role is decided inside the INSERT so concurrent first-user provisioning
|
|
9
|
+
// can't elect two admins: SQLite serializes writers, and the subquery
|
|
10
|
+
// observes previously-inserted rows. Only the statement that runs when
|
|
11
|
+
// the table is empty gets `admin`.
|
|
12
|
+
let user;
|
|
13
|
+
try {
|
|
14
|
+
[user] = await db
|
|
15
|
+
.insert(users)
|
|
16
|
+
.values({
|
|
17
|
+
email: input.email,
|
|
18
|
+
slug,
|
|
19
|
+
name: input.name ?? null,
|
|
20
|
+
avatarUrl: input.avatarUrl ?? null,
|
|
21
|
+
role: sql `CASE WHEN (SELECT COUNT(*) FROM ${users}) = 0 THEN 'admin' ELSE ${defaultRole} END`,
|
|
22
|
+
emailVerifiedAt: input.emailVerified ? new Date() : null,
|
|
23
|
+
})
|
|
24
|
+
.returning();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
// Only a slug race is retryable; an email collision is a real conflict
|
|
28
|
+
// the caller must see, so re-throw it (and any other error) as-is.
|
|
29
|
+
if (attempt < MAX_SLUG_ATTEMPTS &&
|
|
30
|
+
isUniqueConstraintErrorOn(error, "users.slug")) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
// eslint-disable-next-line no-restricted-syntax -- defensive driver-regression guard; migrate alongside auth errors in PR 2 (#234)
|
|
36
|
+
if (!user)
|
|
37
|
+
throw new Error("provisionUser: insert returned no row");
|
|
38
|
+
return {
|
|
39
|
+
user,
|
|
40
|
+
bootstrapped: user.role === "admin" && defaultRole !== "admin",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
26
43
|
}
|
|
27
44
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAM,EACN,KAMC;IAED,MAAM,WAAW,GAAa,KAAK,CAAC,WAAW,IAAI,YAAY,CAAC;IAEhE,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,mCAAmC;QACnC,IAAI,IAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;iBACd,MAAM,CAAC,KAAK,CAAC;iBACb,MAAM,CAAC;gBACN,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,IAAI,EAAE,GAAG,CAAU,mCAAmC,KAAK,2BAA2B,WAAW,MAAM;gBACvG,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;aACzD,CAAC;iBACD,SAAS,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uEAAuE;YACvE,mEAAmE;YACnE,IACE,OAAO,GAAG,iBAAiB;gBAC3B,yBAAyB,CAAC,KAAK,EAAE,YAAY,CAAC,EAC9C,CAAC;gBACD,SAAS;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,mIAAmI;QACnI,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACpE,OAAO;YACL,IAAI;YACJ,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,WAAW,KAAK,OAAO;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/cache/tags.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/cache/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACtD,kDAAkD;IAClD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CACtE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/cache/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IACtD,kDAAkD;IAClD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CACtE;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,EAAE,CAyB1D;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE7E"}
|
package/dist/cache/tags.js
CHANGED
|
@@ -27,7 +27,16 @@ export function pageTags(sources) {
|
|
|
27
27
|
return sources.frontPageEntryTypes().map(typeTag);
|
|
28
28
|
case "taxonomy":
|
|
29
29
|
return sources.taxonomyEntryTypes(intent.taxonomy).map(typeTag);
|
|
30
|
+
case "author":
|
|
31
|
+
case "date":
|
|
32
|
+
// Author and date archives list the same public, non-hierarchical type
|
|
33
|
+
// set as the front page, so any publish of those types can change them.
|
|
34
|
+
return sources.frontPageEntryTypes().map(typeTag);
|
|
35
|
+
case "custom":
|
|
30
36
|
case "search":
|
|
37
|
+
// A plugin archive's content dependencies are unknown to core (as search
|
|
38
|
+
// results are), so it carries no coarse type tags — the plugin manages
|
|
39
|
+
// its own invalidation if it edge-caches.
|
|
31
40
|
return [];
|
|
32
41
|
}
|
|
33
42
|
}
|
package/dist/cache/tags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/cache/tags.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,SAAiB;IACvC,OAAO,KAAK,SAAS,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAChC,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAuB;IAC9C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,cAAc,EAAE,IAAI,KAAK,OAAO;gBACrC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC1D,CAAC,CAAC,EAAE,CAAC;QACT,KAAK,SAAS;YACZ,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,kBAAqC;IACjE,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/cache/tags.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,SAAiB;IACvC,OAAO,KAAK,SAAS,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AAChC,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAuB;IAC9C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC3C,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,cAAc,EAAE,IAAI,KAAK,OAAO;gBACrC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC1D,CAAC,CAAC,EAAE,CAAC;QACT,KAAK,SAAS;YACZ,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClE,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,uEAAuE;YACvE,wEAAwE;YACxE,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpD,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,yEAAyE;YACzE,uEAAuE;YACvE,0CAA0C;YAC1C,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,kBAAqC;IACjE,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/db/errors.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
export declare function isUniqueConstraintError(error: unknown): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* True when the unique violation is on a specific `table.column` constraint —
|
|
4
|
+
* e.g. `isUniqueConstraintErrorOn(err, "users.slug")` to tell a slug collision
|
|
5
|
+
* apart from an email one. Column identity only rides on SQLite's message
|
|
6
|
+
* (`UNIQUE constraint failed: users.slug`), so this is message-only, unlike the
|
|
7
|
+
* code-first `isUniqueConstraintError`; every driver surfaces that phrase.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isUniqueConstraintErrorOn(error: unknown, qualifiedColumn: string): boolean;
|
|
2
10
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/db/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/db/errors.ts"],"names":[],"mappings":"AA+DA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU/D"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/db/errors.ts"],"names":[],"mappings":"AA+DA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU/D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,eAAe,EAAE,MAAM,GACtB,OAAO,CAYT"}
|
package/dist/db/errors.js
CHANGED
|
@@ -66,4 +66,26 @@ export function isUniqueConstraintError(error) {
|
|
|
66
66
|
}
|
|
67
67
|
return false;
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* True when the unique violation is on a specific `table.column` constraint —
|
|
71
|
+
* e.g. `isUniqueConstraintErrorOn(err, "users.slug")` to tell a slug collision
|
|
72
|
+
* apart from an email one. Column identity only rides on SQLite's message
|
|
73
|
+
* (`UNIQUE constraint failed: users.slug`), so this is message-only, unlike the
|
|
74
|
+
* code-first `isUniqueConstraintError`; every driver surfaces that phrase.
|
|
75
|
+
*/
|
|
76
|
+
export function isUniqueConstraintErrorOn(error, qualifiedColumn) {
|
|
77
|
+
const needle = `UNIQUE constraint failed: ${qualifiedColumn}`;
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
let current = error;
|
|
80
|
+
for (let depth = 0; depth < MAX_CAUSE_DEPTH && current; depth++) {
|
|
81
|
+
if (seen.has(current))
|
|
82
|
+
return false; // cycle guard
|
|
83
|
+
seen.add(current);
|
|
84
|
+
const message = current.message;
|
|
85
|
+
if (typeof message === "string" && message.includes(needle))
|
|
86
|
+
return true;
|
|
87
|
+
current = current.cause;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
69
91
|
//# sourceMappingURL=errors.js.map
|
package/dist/db/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/db/errors.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,qEAAqE;AACrE,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,kCAAkC;AAElC,uEAAuE;AACvE,0EAA0E;AAC1E,6CAA6C;AAC7C,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,0BAA0B;IAC1B,8BAA8B;CAC/B,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEtD,8EAA8E;AAC9E,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,sEAAsE;AACtE,yEAAyE;AACzE,wEAAwE;AACxE,kEAAkE;AAClE,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAU,CAAC;AAC7D,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAU,CAAC;AAEvE,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAE7C,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,mEAAmE;IACnE,2EAA2E;IAC3E,EAAE;IACF,qEAAqE;IACrE,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,cAAc;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,aAAa,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,GAAI,OAA+B,CAAC,KAAK,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/db/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/db/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from "drizzle-orm/sql";
|
|
2
2
|
export type { InferInsertModel, InferSelectModel } from "drizzle-orm";
|
|
3
|
-
export { isUniqueConstraintError } from "./errors.js";
|
|
3
|
+
export { isUniqueConstraintError, isUniqueConstraintErrorOn, } from "./errors.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/db/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC"}
|
package/dist/db/index.js
CHANGED
package/dist/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC"}
|
|
@@ -40,6 +40,25 @@ export declare const users: import("drizzle-orm/sqlite-core").SQLiteTableWithCol
|
|
|
40
40
|
}, {}, {
|
|
41
41
|
length: undefined;
|
|
42
42
|
}>;
|
|
43
|
+
slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
44
|
+
name: "slug";
|
|
45
|
+
tableName: "users";
|
|
46
|
+
dataType: "string";
|
|
47
|
+
columnType: "SQLiteText";
|
|
48
|
+
data: string;
|
|
49
|
+
driverParam: string;
|
|
50
|
+
notNull: true;
|
|
51
|
+
hasDefault: false;
|
|
52
|
+
isPrimaryKey: false;
|
|
53
|
+
isAutoincrement: false;
|
|
54
|
+
hasRuntimeDefault: false;
|
|
55
|
+
enumValues: [string, ...string[]];
|
|
56
|
+
baseColumn: never;
|
|
57
|
+
identity: undefined;
|
|
58
|
+
generated: undefined;
|
|
59
|
+
}, {}, {
|
|
60
|
+
length: undefined;
|
|
61
|
+
}>;
|
|
43
62
|
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
44
63
|
name: "name";
|
|
45
64
|
tableName: "users";
|
|
@@ -226,6 +245,25 @@ export declare const userInsertSchema: import("drizzle-valibot").BuildSchema<"in
|
|
|
226
245
|
}, {}, {
|
|
227
246
|
length: undefined;
|
|
228
247
|
}>;
|
|
248
|
+
slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
249
|
+
name: "slug";
|
|
250
|
+
tableName: "users";
|
|
251
|
+
dataType: "string";
|
|
252
|
+
columnType: "SQLiteText";
|
|
253
|
+
data: string;
|
|
254
|
+
driverParam: string;
|
|
255
|
+
notNull: true;
|
|
256
|
+
hasDefault: false;
|
|
257
|
+
isPrimaryKey: false;
|
|
258
|
+
isAutoincrement: false;
|
|
259
|
+
hasRuntimeDefault: false;
|
|
260
|
+
enumValues: [string, ...string[]];
|
|
261
|
+
baseColumn: never;
|
|
262
|
+
identity: undefined;
|
|
263
|
+
generated: undefined;
|
|
264
|
+
}, {}, {
|
|
265
|
+
length: undefined;
|
|
266
|
+
}>;
|
|
229
267
|
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
230
268
|
name: "name";
|
|
231
269
|
tableName: "users";
|
|
@@ -408,6 +446,25 @@ export declare const userSelectSchema: import("drizzle-valibot").BuildSchema<"se
|
|
|
408
446
|
}, {}, {
|
|
409
447
|
length: undefined;
|
|
410
448
|
}>;
|
|
449
|
+
slug: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
450
|
+
name: "slug";
|
|
451
|
+
tableName: "users";
|
|
452
|
+
dataType: "string";
|
|
453
|
+
columnType: "SQLiteText";
|
|
454
|
+
data: string;
|
|
455
|
+
driverParam: string;
|
|
456
|
+
notNull: true;
|
|
457
|
+
hasDefault: false;
|
|
458
|
+
isPrimaryKey: false;
|
|
459
|
+
isAutoincrement: false;
|
|
460
|
+
hasRuntimeDefault: false;
|
|
461
|
+
enumValues: [string, ...string[]];
|
|
462
|
+
baseColumn: never;
|
|
463
|
+
identity: undefined;
|
|
464
|
+
generated: undefined;
|
|
465
|
+
}, {}, {
|
|
466
|
+
length: undefined;
|
|
467
|
+
}>;
|
|
411
468
|
name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
|
|
412
469
|
name: "name";
|
|
413
470
|
tableName: "users";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,qEAMb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,qEAMb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCjB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC;AAC7C,MAAM,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,YAAY,CAAC;AAEhD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAA4B,CAAC;AAC1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAA4B,CAAC"}
|
package/dist/db/schema/users.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sql } from "drizzle-orm";
|
|
2
|
-
import { sqliteTable } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { sqliteTable, uniqueIndex } from "drizzle-orm/sqlite-core";
|
|
3
3
|
import { createInsertSchema, createSelectSchema } from "drizzle-valibot";
|
|
4
4
|
export const USER_ROLES = [
|
|
5
5
|
"subscriber",
|
|
@@ -11,6 +11,11 @@ export const USER_ROLES = [
|
|
|
11
11
|
export const users = sqliteTable("users", (t) => ({
|
|
12
12
|
id: t.integer().primaryKey({ autoIncrement: true }),
|
|
13
13
|
email: t.text().notNull().unique(),
|
|
14
|
+
// URL-safe author-archive identifier (`/authors/{slug}`). Derived from
|
|
15
|
+
// `name` at creation and stable thereafter — a name edit never rewrites
|
|
16
|
+
// it, so author permalinks don't break. Globally unique via the index
|
|
17
|
+
// below (users have no parent to scope by, unlike terms/entries).
|
|
18
|
+
slug: t.text().notNull(),
|
|
14
19
|
name: t.text(),
|
|
15
20
|
avatarUrl: t.text(),
|
|
16
21
|
role: t.text({ enum: USER_ROLES }).notNull().default("subscriber"),
|
|
@@ -30,7 +35,10 @@ export const users = sqliteTable("users", (t) => ({
|
|
|
30
35
|
.notNull()
|
|
31
36
|
.default(sql `(unixepoch())`)
|
|
32
37
|
.$onUpdate(() => sql `(unixepoch())`),
|
|
33
|
-
})
|
|
38
|
+
}),
|
|
39
|
+
// Named unique index, mirroring `terms_taxonomy_slug_idx` /
|
|
40
|
+
// `entries_type_slug_idx` — single-column since the slug is global.
|
|
41
|
+
(table) => [uniqueIndex("users_slug_idx").on(table.slug)]);
|
|
34
42
|
export const userInsertSchema = createInsertSchema(users);
|
|
35
43
|
export const userSelectSchema = createSelectSchema(users);
|
|
36
44
|
//# sourceMappingURL=users.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/db/schema/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,OAAO;CACC,CAAC;AAIX,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAC9B,OAAO,EACP,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IAClC,uEAAuE;IACvE,wEAAwE;IACxE,sEAAsE;IACtE,kEAAkE;IAClE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IACxB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAClE,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACtB,KAAK,EAA2B;SAChC,OAAO,EAAE;SACT,OAAO,CAAC,EAAE,CAAC;IACd,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAC5C,SAAS,EAAE,CAAC;SACT,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC9B,OAAO,EAAE;SACT,OAAO,CAAC,GAAG,CAAA,eAAe,CAAC;IAC9B,SAAS,EAAE,CAAC;SACT,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SAC9B,OAAO,EAAE;SACT,OAAO,CAAC,GAAG,CAAA,eAAe,CAAC;SAC3B,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAA,eAAe,CAAC;CACvC,CAAC;AACF,4DAA4D;AAC5D,oEAAoE;AACpE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;AAKF,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-node-label.d.ts","sourceRoot":"","sources":["../../src/debug-bar/template-node-label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1E,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"template-node-label.d.ts","sourceRoot":"","sources":["../../src/debug-bar/template-node-label.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1E,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAqB5D"}
|
|
@@ -7,6 +7,14 @@ export function templateNodeLabel(node) {
|
|
|
7
7
|
return `${node.entryType}: ${node.slug}`;
|
|
8
8
|
case "term":
|
|
9
9
|
return `${node.taxonomy}: ${node.slug}`;
|
|
10
|
+
case "author":
|
|
11
|
+
return `author: ${node.slug}`;
|
|
12
|
+
case "date":
|
|
13
|
+
return `date: ${[node.year, node.month, node.day]
|
|
14
|
+
.filter((v) => v !== null)
|
|
15
|
+
.join("-")}`;
|
|
16
|
+
case "custom":
|
|
17
|
+
return `archive: ${node.name}`;
|
|
10
18
|
case "content-type-archive":
|
|
11
19
|
return `${node.entryType} archive`;
|
|
12
20
|
case "front-page":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-node-label.js","sourceRoot":"","sources":["../../src/debug-bar/template-node-label.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,sBAAsB;YACzB,OAAO,GAAG,IAAI,CAAC,SAAS,UAAU,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"template-node-label.js","sourceRoot":"","sources":["../../src/debug-bar/template-node-label.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,KAAK,QAAQ;YACX,OAAO,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;iBAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;iBACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,KAAK,sBAAsB;YACzB,OAAO,GAAG,IAAI,CAAC,SAAS,UAAU,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -32,14 +32,14 @@ export { runScheduledTasks } from "./runtime/scheduled.js";
|
|
|
32
32
|
export type * from "./runtime/slots.js";
|
|
33
33
|
export { slugify } from "./slugify.js";
|
|
34
34
|
export { buildResolvedEntries } from "./route/render/build-resolved-entries.js";
|
|
35
|
-
export { archive, entry, fallback, forEntryType, forTermTaxonomy, frontPage, NAMED_TEMPLATE_META_KEY, notFound, search, serverError, taxonomy, templateRules, } from "./route/render/template-builders.js";
|
|
36
|
-
export type { EntryProjection, EntryTypeName, EntryTypeRegistry, MetaOf, TermTaxonomyName, TermTaxonomyRegistry, TermProjection, } from "./template-registry.js";
|
|
35
|
+
export { archive, author, date, entry, fallback, forArchiveType, forAuthor, forDate, forEntryType, forTermTaxonomy, frontPage, NAMED_TEMPLATE_META_KEY, notFound, search, serverError, taxonomy, templateRules, } from "./route/render/template-builders.js";
|
|
36
|
+
export type { ArchiveDataOf, ArchiveTypeName, ArchiveTypeRegistry, EntryProjection, EntryTypeName, EntryTypeRegistry, MetaOf, TermMetaOf, TermTaxonomyName, TermTaxonomyRegistry, TermProjection, } from "./template-registry.js";
|
|
37
37
|
export { resolveErrorTemplate, resolveTemplate, } from "./route/render/template-hierarchy.js";
|
|
38
|
-
export type { ArchiveData, EntryData, ErrorData, FrontPageData, Pagination, ResolvedAuthor, ResolvedEntry, ResolvedTerm, SearchData, TaxonomyData, } from "./route/render/resolved-entry.js";
|
|
38
|
+
export type { ArchiveData, AuthorArchiveData, CustomArchiveData, DateArchiveData, EntryData, ErrorData, FrontPageData, Pagination, ResolvedAuthor, ResolvedEntry, ResolvedTerm, SearchData, TaxonomyData, } from "./route/render/resolved-entry.js";
|
|
39
39
|
export { defineTemplate } from "./template.js";
|
|
40
40
|
export type { Template, TemplateDepRegistry, TemplateRender, TemplateRenderArgs, } from "./template.js";
|
|
41
41
|
export type { TemplateDepLoader } from "./template-deps.js";
|
|
42
|
-
export { defineTheme, isArchive, isEntry, isError, isFrontPage, isSearch, isTaxonomy, } from "./theme.js";
|
|
42
|
+
export { defineTheme, isArchive, isAuthor, isCustom, isDate, isEntry, isError, isFrontPage, isSearch, isTaxonomy, } from "./theme.js";
|
|
43
43
|
export type { DocumentLink, DocumentManifest, DocumentMeta, DocumentScript, GenericTier, TargetMatcher, TemplateComponent, TemplateData, TemplateEntry, TemplateRule, ThemeDescriptor, } from "./theme.js";
|
|
44
44
|
export { ThemeError, ThemeRegistrationError } from "./theme-errors.js";
|
|
45
45
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -25,9 +25,9 @@ export { memoryStorage } from "./runtime/memory-storage.js";
|
|
|
25
25
|
export { runScheduledTasks } from "./runtime/scheduled.js";
|
|
26
26
|
export { slugify } from "./slugify.js";
|
|
27
27
|
export { buildResolvedEntries } from "./route/render/build-resolved-entries.js";
|
|
28
|
-
export { archive, entry, fallback, forEntryType, forTermTaxonomy, frontPage, NAMED_TEMPLATE_META_KEY, notFound, search, serverError, taxonomy, templateRules, } from "./route/render/template-builders.js";
|
|
28
|
+
export { archive, author, date, entry, fallback, forArchiveType, forAuthor, forDate, forEntryType, forTermTaxonomy, frontPage, NAMED_TEMPLATE_META_KEY, notFound, search, serverError, taxonomy, templateRules, } from "./route/render/template-builders.js";
|
|
29
29
|
export { resolveErrorTemplate, resolveTemplate, } from "./route/render/template-hierarchy.js";
|
|
30
30
|
export { defineTemplate } from "./template.js";
|
|
31
|
-
export { defineTheme, isArchive, isEntry, isError, isFrontPage, isSearch, isTaxonomy, } from "./theme.js";
|
|
31
|
+
export { defineTheme, isArchive, isAuthor, isCustom, isDate, isEntry, isError, isFrontPage, isSearch, isTaxonomy, } from "./theme.js";
|
|
32
32
|
export { ThemeError, ThemeRegistrationError } from "./theme-errors.js";
|
|
33
33
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,yBAAyB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,2EAA2E;AAC3E,oEAAoE;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,SAAS,EACT,uBAAuB,EACvB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,GACd,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,yBAAyB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,2EAA2E;AAC3E,oEAAoE;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EACL,OAAO,EACP,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,cAAc,EACd,SAAS,EACT,OAAO,EACP,YAAY,EACZ,eAAe,EACf,SAAS,EACT,uBAAuB,EACvB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,GACd,MAAM,qCAAqC,CAAC;AAc7C,OAAO,EACL,oBAAoB,EACpB,eAAe,GAChB,MAAM,sCAAsC,CAAC;AAgB9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQ/C,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAcpB,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SQL } from "drizzle-orm";
|
|
1
2
|
import type { BlockNode, BlockPattern, BlockSpec, BlockVariation, MarkSpec, PatternInsertMode, PatternPreview, PatternTarget, ShortcodeSpec, ThemeBreakpoints, ThemeTokens } from "@plumix/blocks";
|
|
2
3
|
import type { EntryTypeCapabilityOverrides, TermTaxonomyCapabilityOverrides } from "../auth/rbac.js";
|
|
3
4
|
import type { AppContext } from "../context/app.js";
|
|
@@ -6,6 +7,7 @@ import type { Label } from "../i18n/label.js";
|
|
|
6
7
|
import type { ResolvedI18n, ResolvedLocale } from "../i18n/locale-registry.js";
|
|
7
8
|
import type { McpTool } from "../mcp/tool.js";
|
|
8
9
|
import type { RouteIntent } from "../route/intent.js";
|
|
10
|
+
import type { CustomArchiveData } from "../route/render/resolved-entry.js";
|
|
9
11
|
import type { RegisteredTemplateDep } from "../template-deps.js";
|
|
10
12
|
import type { PluginI18nSlot } from "./define.js";
|
|
11
13
|
import type { RegisteredLookupAdapter } from "./lookup.js";
|
|
@@ -822,6 +824,36 @@ export interface RegisteredRewriteRule {
|
|
|
822
824
|
readonly priority: number;
|
|
823
825
|
readonly registeredBy: string | null;
|
|
824
826
|
}
|
|
827
|
+
/** The render payload a custom-archive resolver produces, or `null` for a 404. */
|
|
828
|
+
export interface CustomArchiveResolution {
|
|
829
|
+
readonly data: CustomArchiveData;
|
|
830
|
+
readonly title: string;
|
|
831
|
+
}
|
|
832
|
+
/** The RSS/Atom feed a `registerArchiveType` archive can own. */
|
|
833
|
+
export interface ArchiveTypeFeed {
|
|
834
|
+
/** URLPattern pathnames the feed answers (e.g. `/events/:series/feed`). */
|
|
835
|
+
readonly routes: readonly string[];
|
|
836
|
+
/** SQL row filter for the feed's entries, or `null` → 404. */
|
|
837
|
+
readonly filter: (ctx: AppContext, params: Record<string, string>) => Promise<SQL | null> | SQL | null;
|
|
838
|
+
}
|
|
839
|
+
/**
|
|
840
|
+
* `registerArchiveType` options — a URL pattern set + resolver (+ optional feed)
|
|
841
|
+
* that adds a whole archive type without patching core. The resolver returns the
|
|
842
|
+
* render payload (`{ data, title }`) or `null` (404); `data` extends
|
|
843
|
+
* {@link CustomArchiveData} and is typed via `ArchiveTypeRegistry`.
|
|
844
|
+
*/
|
|
845
|
+
export interface ArchiveTypeOptions {
|
|
846
|
+
/** URLPattern pathnames that dispatch to this archive (`/events/:series`). */
|
|
847
|
+
readonly routes: readonly string[];
|
|
848
|
+
/** Route priority (lower wins); defaults to the rewrite-rule priority. */
|
|
849
|
+
readonly priority?: number;
|
|
850
|
+
readonly resolve: (ctx: AppContext, params: Record<string, string>) => Promise<CustomArchiveResolution | null> | CustomArchiveResolution | null;
|
|
851
|
+
readonly feed?: ArchiveTypeFeed;
|
|
852
|
+
}
|
|
853
|
+
export interface RegisteredArchiveType extends ArchiveTypeOptions {
|
|
854
|
+
readonly name: string;
|
|
855
|
+
readonly registeredBy: string | null;
|
|
856
|
+
}
|
|
825
857
|
/**
|
|
826
858
|
* Reference to a React component contributed by a plugin. The string is
|
|
827
859
|
* the export name on the plugin's `adminEntry` module — the plumix vite
|
|
@@ -1054,6 +1086,7 @@ export interface PluginRegistry {
|
|
|
1054
1086
|
readonly settingsGroups: ReadonlyMap<string, RegisteredSettingsGroup>;
|
|
1055
1087
|
readonly settingsPages: ReadonlyMap<string, RegisteredSettingsPage>;
|
|
1056
1088
|
readonly rewriteRules: readonly RegisteredRewriteRule[];
|
|
1089
|
+
readonly archiveTypes: ReadonlyMap<string, RegisteredArchiveType>;
|
|
1057
1090
|
readonly rpcRouters: ReadonlyMap<string, PluginRpcRouter>;
|
|
1058
1091
|
readonly mcpTools: ReadonlyMap<string, RegisteredMcpTool>;
|
|
1059
1092
|
readonly rawRoutes: readonly RegisteredRawRoute[];
|
|
@@ -1081,6 +1114,7 @@ export interface MutablePluginRegistry extends PluginRegistry {
|
|
|
1081
1114
|
readonly settingsGroups: Map<string, RegisteredSettingsGroup>;
|
|
1082
1115
|
readonly settingsPages: Map<string, RegisteredSettingsPage>;
|
|
1083
1116
|
readonly rewriteRules: RegisteredRewriteRule[];
|
|
1117
|
+
readonly archiveTypes: Map<string, RegisteredArchiveType>;
|
|
1084
1118
|
readonly rpcRouters: Map<string, PluginRpcRouter>;
|
|
1085
1119
|
readonly mcpTools: Map<string, RegisteredMcpTool>;
|
|
1086
1120
|
readonly rawRoutes: RegisteredRawRoute[];
|