crelte 0.4.4 → 0.4.6
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/entry/index.d.ts +5 -0
- package/dist/entry/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/init/client.d.ts.map +1 -1
- package/dist/init/client.js +1 -0
- package/dist/init/server.d.ts.map +1 -1
- package/dist/init/server.js +5 -1
- package/dist/init/shared.d.ts +9 -16
- package/dist/init/shared.d.ts.map +1 -1
- package/dist/init/shared.js +36 -15
- package/dist/plugins/Events.d.ts +19 -3
- package/dist/plugins/Events.d.ts.map +1 -1
- package/dist/plugins/Events.js +10 -0
- package/package.json +1 -1
- package/src/entry/index.ts +6 -0
- package/src/index.ts +2 -0
- package/src/init/client.ts +1 -0
- package/src/init/server.ts +5 -1
- package/src/init/shared.ts +69 -38
- package/src/plugins/Events.ts +53 -3
package/dist/entry/index.d.ts
CHANGED
|
@@ -7,6 +7,11 @@ export type Entry = {
|
|
|
7
7
|
typeHandle: string;
|
|
8
8
|
[key: string]: any;
|
|
9
9
|
};
|
|
10
|
+
export type EntryQueryVars = {
|
|
11
|
+
uri: string;
|
|
12
|
+
siteId: number;
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
};
|
|
10
15
|
export type EntryRequestOptions = RequestOptions & {
|
|
11
16
|
params?: Map<string, string>;
|
|
12
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,WAAW,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;AAEjE,MAAM,MAAM,KAAK,GAAG;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG;IAClD,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAO,CAAC,MAAM,CAAsB;gBAExB,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,mBAAwB;IAMzE;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGrC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACpD,GAAG,EAAE,YAAY,CAAC;gBAEN,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY;CAI5C"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,WAAW,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,CAAC;AAEjE,MAAM,MAAM,KAAK,GAAG;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG;IAClD,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,qBAAa,YAAa,SAAQ,OAAO;IACxC,OAAO,CAAC,MAAM,CAAsB;gBAExB,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,mBAAwB;IAMzE;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGrC;AAED,qBAAa,kBAAmB,SAAQ,aAAa;IACpD,GAAG,EAAE,YAAY,CAAC;gBAEN,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY;CAI5C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { Readable } from 'crelte-std/stores';
|
|
|
11
11
|
import { LoadData, LoadDataArray, LoadDataFn, LoadDataObj } from './loadData/index.js';
|
|
12
12
|
import { Entry } from './entry/index.js';
|
|
13
13
|
export { Crelte, CrelteRequest, type Config, type QueryOptions, type LoadData, type LoadDataFn, type LoadDataObj, type LoadDataArray, type Entry, };
|
|
14
|
+
export type Init = (crelte: Crelte) => void;
|
|
14
15
|
/**
|
|
15
16
|
* Get Crelte from the current context
|
|
16
17
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,MAAM,EAAE,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACN,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EACN,MAAM,EACN,aAAa,EACb,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,KAAK,GACV,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAK1C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAKxC;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;AACrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC;AACtD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAKpD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,QAOjE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,QAOxD"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,MAAM,EAAE,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACN,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EACN,MAAM,EACN,aAAa,EACb,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,KAAK,GACV,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAK1C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAKxC;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;AACrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC;AACtD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAKpD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,QAOjE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,QAOxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/init/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,iDAAiD;IACjD,UAAU,EAAE,YAAY,CAAC;IACzB,mDAAmD;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAaF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/init/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;IACf,iDAAiD;IACjD,UAAU,EAAE,YAAY,CAAC;IACzB,mDAAmD;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAaF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,iBA8IxC"}
|
package/dist/init/client.js
CHANGED
|
@@ -66,6 +66,7 @@ export async function main(data) {
|
|
|
66
66
|
}
|
|
67
67
|
// setup plugins
|
|
68
68
|
setupPlugins(crelte, data.app.plugins ?? []);
|
|
69
|
+
data.app.init?.(crelte);
|
|
69
70
|
const loadFn = await prepareLoadFn(crelte, data.app, data.entryQuery, data.globalQuery);
|
|
70
71
|
// setup load Data
|
|
71
72
|
crelte.router._internal.onLoad = (req, opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/init/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,iDAAiD;IACjD,UAAU,EAAE,YAAY,CAAC;IACzB,mDAAmD;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC;IAE3B,0CAA0C;IAC1C,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/init/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,iDAAiD;IACjD,UAAU,EAAE,YAAY,CAAC;IACzB,mDAAmD;IACnD,WAAW,CAAC,EAAE,YAAY,CAAC;IAE3B,0CAA0C;IAC1C,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC,CAoFD;AAED,MAAM,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAE3B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,GAAG,CAAC;IAEf,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC9B,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B5C"}
|
package/dist/init/server.js
CHANGED
|
@@ -40,6 +40,7 @@ export async function main(data) {
|
|
|
40
40
|
const crelte = builder.build();
|
|
41
41
|
// setup plugins
|
|
42
42
|
setupPlugins(crelte, data.app.plugins ?? []);
|
|
43
|
+
data.app.init?.(crelte);
|
|
43
44
|
const loadFn = await prepareLoadFn(crelte, data.app, data.entryQuery, data.globalQuery);
|
|
44
45
|
// setup load Data
|
|
45
46
|
crelte.router._internal.onLoad = req => {
|
|
@@ -72,7 +73,10 @@ export async function main(data) {
|
|
|
72
73
|
.replace('<!--ssr-body-->', html);
|
|
73
74
|
const entry = props.entry;
|
|
74
75
|
return {
|
|
75
|
-
status:
|
|
76
|
+
status: req.statusCode ??
|
|
77
|
+
(entry.sectionHandle === 'error'
|
|
78
|
+
? parseInt(entry.typeHandle)
|
|
79
|
+
: 200),
|
|
76
80
|
html: finalHtml,
|
|
77
81
|
setCookies: crelte.cookies._getSetCookiesHeaders(),
|
|
78
82
|
};
|
package/dist/init/shared.d.ts
CHANGED
|
@@ -2,31 +2,24 @@ import Crelte from '../Crelte.js';
|
|
|
2
2
|
import CrelteRequest from '../CrelteRequest.js';
|
|
3
3
|
import { EntryRoutes } from '../entry/EntryRouter.js';
|
|
4
4
|
import { GraphQlQuery } from '../graphql/GraphQl.js';
|
|
5
|
+
import { Entry } from '../index.js';
|
|
5
6
|
import { LoadData } from '../loadData/index.js';
|
|
6
7
|
import { PluginCreator } from '../plugins/Plugins.js';
|
|
7
8
|
import { LoadOptions } from '../routing/PageLoader.js';
|
|
8
|
-
interface App
|
|
9
|
+
interface App {
|
|
9
10
|
loadGlobalData?: LoadData<null>;
|
|
10
|
-
loadEntryData?: LoadData<
|
|
11
|
-
templates?: Record<string, LazyTemplateModule
|
|
11
|
+
loadEntryData?: LoadData<Entry>;
|
|
12
|
+
templates?: Record<string, LazyTemplateModule>;
|
|
12
13
|
entryRoutes?: EntryRoutes;
|
|
14
|
+
init?: (crelte: Crelte) => void;
|
|
13
15
|
}
|
|
14
|
-
interface TemplateModule
|
|
16
|
+
interface TemplateModule {
|
|
15
17
|
default: any;
|
|
16
|
-
loadData
|
|
18
|
+
loadData?: LoadData<Entry>;
|
|
17
19
|
}
|
|
18
|
-
type LazyTemplateModule
|
|
20
|
+
type LazyTemplateModule = (() => Promise<TemplateModule>) | TemplateModule;
|
|
19
21
|
export declare function setupPlugins(crelte: Crelte, plugins: PluginCreator[]): void;
|
|
20
22
|
export declare function pluginsBeforeRender(cr: CrelteRequest): void;
|
|
21
|
-
|
|
22
|
-
* Get the entry from the page
|
|
23
|
-
*
|
|
24
|
-
* entries should export sectionHandle and typeHandle
|
|
25
|
-
*
|
|
26
|
-
* products should alias productTypeHandle with typeHandle,
|
|
27
|
-
* sectionHandle will be automatically set to product
|
|
28
|
-
*/
|
|
29
|
-
export declare function getEntry(page: any): any;
|
|
30
|
-
export declare function prepareLoadFn<E, T>(crelte: Crelte, app: App<E, T>, entryQuery: GraphQlQuery, globalQuery?: GraphQlQuery): Promise<(cr: CrelteRequest, loadOpts?: LoadOptions) => Promise<any>>;
|
|
23
|
+
export declare function prepareLoadFn(crelte: Crelte, app: App, entryQuery: GraphQlQuery, globalQuery?: GraphQlQuery): Promise<(cr: CrelteRequest, loadOpts?: LoadOptions) => Promise<any>>;
|
|
31
24
|
export {};
|
|
32
25
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/init/shared.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAoB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/init/shared.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAoB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAgB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,UAAU,GAAG;IACZ,cAAc,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAGhC,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAE/C,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,UAAU,cAAc;IAEvB,OAAO,EAAE,GAAG,CAAC;IAEb,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;CAC3B;AAED,KAAK,kBAAkB,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC;AAE3E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAKpE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAE3D;AA2BD,wBAAsB,aAAa,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,YAAY,EACxB,WAAW,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAmBtE"}
|
package/dist/init/shared.js
CHANGED
|
@@ -9,6 +9,10 @@ export function setupPlugins(crelte, plugins) {
|
|
|
9
9
|
export function pluginsBeforeRender(cr) {
|
|
10
10
|
cr.events.trigger('beforeRender', cr);
|
|
11
11
|
}
|
|
12
|
+
const ERROR_404_ENTRY = {
|
|
13
|
+
sectionHandle: 'error',
|
|
14
|
+
typeHandle: '404',
|
|
15
|
+
};
|
|
12
16
|
/**
|
|
13
17
|
* Get the entry from the page
|
|
14
18
|
*
|
|
@@ -17,7 +21,7 @@ export function pluginsBeforeRender(cr) {
|
|
|
17
21
|
* products should alias productTypeHandle with typeHandle,
|
|
18
22
|
* sectionHandle will be automatically set to product
|
|
19
23
|
*/
|
|
20
|
-
|
|
24
|
+
function getEntry(page) {
|
|
21
25
|
if (page?.entry)
|
|
22
26
|
return { ...page.entry };
|
|
23
27
|
if (page?.product)
|
|
@@ -25,10 +29,7 @@ export function getEntry(page) {
|
|
|
25
29
|
sectionHandle: 'product',
|
|
26
30
|
...page.product,
|
|
27
31
|
};
|
|
28
|
-
return
|
|
29
|
-
sectionHandle: 'error',
|
|
30
|
-
typeHandle: '404',
|
|
31
|
-
};
|
|
32
|
+
return null;
|
|
32
33
|
}
|
|
33
34
|
// todo it would be nice to call this only once per server start
|
|
34
35
|
export async function prepareLoadFn(crelte, app, entryQuery, globalQuery) {
|
|
@@ -124,25 +125,45 @@ function parseFilename(path) {
|
|
|
124
125
|
return [name, ext];
|
|
125
126
|
}
|
|
126
127
|
async function queryEntry(cr, app, entryRouter, entryQuery) {
|
|
127
|
-
|
|
128
|
-
if (entryRouter) {
|
|
129
|
-
const entry = await entryRouter._handle(cr);
|
|
130
|
-
if (entry)
|
|
131
|
-
return entry;
|
|
132
|
-
}
|
|
128
|
+
let vars = null;
|
|
133
129
|
if (cr.req.siteMatches()) {
|
|
134
130
|
let uri = decodeURI(cr.req.uri);
|
|
135
131
|
if (uri.startsWith('/'))
|
|
136
132
|
uri = uri.substring(1);
|
|
137
133
|
if (uri === '' || uri === '/')
|
|
138
134
|
uri = '__home__';
|
|
139
|
-
|
|
135
|
+
vars = {
|
|
140
136
|
uri,
|
|
141
137
|
siteId: cr.site.id,
|
|
142
|
-
}
|
|
143
|
-
return getEntry(page);
|
|
138
|
+
};
|
|
144
139
|
}
|
|
145
|
-
|
|
140
|
+
if (vars) {
|
|
141
|
+
await Promise.all(cr.events.trigger('beforeQueryEntry', cr, vars));
|
|
142
|
+
}
|
|
143
|
+
// basic query function
|
|
144
|
+
let loadFn = async (vars) => {
|
|
145
|
+
if (entryRouter) {
|
|
146
|
+
const entry = await entryRouter._handle(cr);
|
|
147
|
+
if (entry)
|
|
148
|
+
return entry;
|
|
149
|
+
}
|
|
150
|
+
if (vars) {
|
|
151
|
+
const page = await cr.query(entryQuery, vars);
|
|
152
|
+
return getEntry(page);
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
};
|
|
156
|
+
// check if a plugin wants to override the query
|
|
157
|
+
const fns = cr.events.getListeners('queryEntry');
|
|
158
|
+
for (const fn of fns) {
|
|
159
|
+
const prevLoadFn = loadFn;
|
|
160
|
+
loadFn = async (vars) => {
|
|
161
|
+
return await fn(cr, vars, prevLoadFn);
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const entry = (await loadFn(vars)) ?? ERROR_404_ENTRY;
|
|
165
|
+
await Promise.all(cr.events.trigger('afterQueryEntry', cr, entry));
|
|
166
|
+
return entry;
|
|
146
167
|
}
|
|
147
168
|
function prepareTemplates(rawModules) {
|
|
148
169
|
// parse modules
|
package/dist/plugins/Events.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntryQueryVars } from '../entry/index.js';
|
|
2
|
+
import { CrelteRequest, Entry } from '../index.js';
|
|
2
3
|
export default class Events {
|
|
3
4
|
inner: Map<string, Set<any>>;
|
|
4
5
|
constructor();
|
|
@@ -8,17 +9,32 @@ export default class Events {
|
|
|
8
9
|
* @returns a function to remove the listener
|
|
9
10
|
*/
|
|
10
11
|
on(ev: 'loadGlobalData', fn: (cr: CrelteRequest) => Promise<any>): () => void;
|
|
11
|
-
on(ev: 'loadData', fn: (cr: CrelteRequest, entry:
|
|
12
|
+
on(ev: 'loadData', fn: (cr: CrelteRequest, entry: Entry) => Promise<any>): () => void;
|
|
12
13
|
on(ev: 'beforeRender', fn: (cr: CrelteRequest) => void): () => void;
|
|
14
|
+
on(ev: 'beforeQueryEntry', fn: (cr: CrelteRequest, vars: EntryQueryVars) => Promise<void> | void): () => void;
|
|
15
|
+
on(ev: 'queryEntry', fn: (cr: CrelteRequest, vars: EntryQueryVars | null,
|
|
16
|
+
/** this might contain other plugin calls */
|
|
17
|
+
runQuery: (vars: EntryQueryVars | null) => Promise<Entry | null>) => Promise<Entry | null>): () => void;
|
|
18
|
+
on(ev: 'afterQueryEntry', fn: (cr: CrelteRequest, entry: Entry) => Promise<void> | void): () => void;
|
|
13
19
|
/**
|
|
14
20
|
* Remove a listener
|
|
15
21
|
*/
|
|
16
22
|
remove(ev: string, fn: any): void;
|
|
23
|
+
/**
|
|
24
|
+
* Check if an event has listeners
|
|
25
|
+
*/
|
|
26
|
+
has(ev: string): boolean;
|
|
17
27
|
/**
|
|
18
28
|
* Trigger an event
|
|
19
29
|
*/
|
|
20
30
|
trigger(ev: 'loadGlobalData', cr: CrelteRequest): Promise<any>[];
|
|
21
|
-
trigger(ev: 'loadData', cr: CrelteRequest, entry:
|
|
31
|
+
trigger(ev: 'loadData', cr: CrelteRequest, entry: Entry): Promise<any>[];
|
|
22
32
|
trigger(ev: 'beforeRender', cr: CrelteRequest): void[];
|
|
33
|
+
trigger(ev: 'beforeQueryEntry', cr: CrelteRequest, vars: EntryQueryVars): void[];
|
|
34
|
+
trigger(ev: 'afterQueryEntry', cr: CrelteRequest, entry: Entry): Promise<void>[];
|
|
35
|
+
/**
|
|
36
|
+
* Get all listeners for an event
|
|
37
|
+
*/
|
|
38
|
+
getListeners(ev: 'queryEntry'): ((cr: CrelteRequest, vars: EntryQueryVars | null, runQuery: (vars: EntryQueryVars | null) => Promise<Entry | null>) => Promise<Entry | null>)[];
|
|
23
39
|
}
|
|
24
40
|
//# sourceMappingURL=Events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;IAM7B;;;;OAIG;IAEH,EAAE,CACD,EAAE,EAAE,gBAAgB,EACpB,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,CAAC,GACrC,MAAM,IAAI;IACb,EAAE,CACD,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,GACnD,MAAM,IAAI;IACb,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IACnE,EAAE,CACD,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACnE,MAAM,IAAI;IACb,EAAE,CACD,EAAE,EAAE,YAAY,EAChB,EAAE,EAAE,CACH,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,cAAc,GAAG,IAAI;IAC3B,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAC5D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GACxB,MAAM,IAAI;IACb,EAAE,CACD,EAAE,EAAE,iBAAiB,EACrB,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC3D,MAAM,IAAI;IAeb;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG;IAO1B;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAKxB;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;IAChE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;IACxE,OAAO,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,GAAG,IAAI,EAAE;IACtD,OAAO,CACN,EAAE,EAAE,kBAAkB,EACtB,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,cAAc,GAClB,IAAI,EAAE;IACT,OAAO,CACN,EAAE,EAAE,iBAAiB,EACrB,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,IAAI,CAAC,EAAE;IAQlB;;OAEG;IACH,YAAY,CACX,EAAE,EAAE,YAAY,GACd,CAAC,CACH,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,cAAc,GAAG,IAAI,EAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAC5D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE;CAI7B"}
|
package/dist/plugins/Events.js
CHANGED
|
@@ -23,10 +23,20 @@ export default class Events {
|
|
|
23
23
|
return;
|
|
24
24
|
set.delete(fn);
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Check if an event has listeners
|
|
28
|
+
*/
|
|
29
|
+
has(ev) {
|
|
30
|
+
const size = this.inner.get(ev)?.size ?? 0;
|
|
31
|
+
return size > 0;
|
|
32
|
+
}
|
|
26
33
|
trigger(ev, ...args) {
|
|
27
34
|
const set = this.inner.get(ev);
|
|
28
35
|
if (!set)
|
|
29
36
|
return [];
|
|
30
37
|
return Array.from(set).map(fn => fn(...args));
|
|
31
38
|
}
|
|
39
|
+
getListeners(ev) {
|
|
40
|
+
return Array.from(this.inner.get(ev) ?? []);
|
|
41
|
+
}
|
|
32
42
|
}
|
package/package.json
CHANGED
package/src/entry/index.ts
CHANGED
package/src/index.ts
CHANGED
package/src/init/client.ts
CHANGED
package/src/init/server.ts
CHANGED
|
@@ -82,6 +82,7 @@ export async function main(data: MainData): Promise<{
|
|
|
82
82
|
|
|
83
83
|
// setup plugins
|
|
84
84
|
setupPlugins(crelte, data.app.plugins ?? []);
|
|
85
|
+
data.app.init?.(crelte);
|
|
85
86
|
|
|
86
87
|
const loadFn = await prepareLoadFn(
|
|
87
88
|
crelte,
|
|
@@ -135,7 +136,10 @@ export async function main(data: MainData): Promise<{
|
|
|
135
136
|
|
|
136
137
|
return {
|
|
137
138
|
status:
|
|
138
|
-
|
|
139
|
+
req.statusCode ??
|
|
140
|
+
(entry.sectionHandle === 'error'
|
|
141
|
+
? parseInt(entry.typeHandle)
|
|
142
|
+
: 200),
|
|
139
143
|
html: finalHtml,
|
|
140
144
|
setCookies: (crelte.cookies as ServerCookies)._getSetCookiesHeaders(),
|
|
141
145
|
};
|
package/src/init/shared.ts
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
import Crelte from '../Crelte.js';
|
|
2
2
|
import CrelteRequest from '../CrelteRequest.js';
|
|
3
3
|
import EntryRouter, { EntryRoutes } from '../entry/EntryRouter.js';
|
|
4
|
+
import { EntryQueryVars } from '../entry/index.js';
|
|
4
5
|
import { GraphQlQuery } from '../graphql/GraphQl.js';
|
|
6
|
+
import { Entry } from '../index.js';
|
|
5
7
|
import { LoadData, callLoadData } from '../loadData/index.js';
|
|
6
8
|
import { PluginCreator } from '../plugins/Plugins.js';
|
|
7
9
|
import { LoadOptions } from '../routing/PageLoader.js';
|
|
8
10
|
|
|
9
|
-
interface App
|
|
11
|
+
interface App {
|
|
10
12
|
loadGlobalData?: LoadData<null>;
|
|
11
13
|
|
|
12
14
|
// todo: add a generic
|
|
13
|
-
loadEntryData?: LoadData<
|
|
15
|
+
loadEntryData?: LoadData<Entry>;
|
|
14
16
|
|
|
15
|
-
templates?: Record<string, LazyTemplateModule
|
|
17
|
+
templates?: Record<string, LazyTemplateModule>;
|
|
16
18
|
|
|
17
19
|
entryRoutes?: EntryRoutes;
|
|
20
|
+
|
|
21
|
+
init?: (crelte: Crelte) => void;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
|
-
interface TemplateModule
|
|
24
|
+
interface TemplateModule {
|
|
21
25
|
// svelte component
|
|
22
26
|
default: any;
|
|
23
27
|
|
|
24
|
-
loadData
|
|
28
|
+
loadData?: LoadData<Entry>;
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
type LazyTemplateModule<
|
|
28
|
-
| (() => Promise<TemplateModule<E, T>>)
|
|
29
|
-
| TemplateModule<E, T>;
|
|
31
|
+
type LazyTemplateModule = (() => Promise<TemplateModule>) | TemplateModule;
|
|
30
32
|
|
|
31
33
|
export function setupPlugins(crelte: Crelte, plugins: PluginCreator[]) {
|
|
32
34
|
for (const plugin of plugins) {
|
|
@@ -39,6 +41,11 @@ export function pluginsBeforeRender(cr: CrelteRequest): void {
|
|
|
39
41
|
cr.events.trigger('beforeRender', cr);
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
const ERROR_404_ENTRY: Entry = {
|
|
45
|
+
sectionHandle: 'error',
|
|
46
|
+
typeHandle: '404',
|
|
47
|
+
};
|
|
48
|
+
|
|
42
49
|
/**
|
|
43
50
|
* Get the entry from the page
|
|
44
51
|
*
|
|
@@ -47,7 +54,7 @@ export function pluginsBeforeRender(cr: CrelteRequest): void {
|
|
|
47
54
|
* products should alias productTypeHandle with typeHandle,
|
|
48
55
|
* sectionHandle will be automatically set to product
|
|
49
56
|
*/
|
|
50
|
-
|
|
57
|
+
function getEntry(page: any): Entry | null {
|
|
51
58
|
if (page?.entry) return { ...page.entry };
|
|
52
59
|
if (page?.product)
|
|
53
60
|
return {
|
|
@@ -55,16 +62,13 @@ export function getEntry(page: any): any {
|
|
|
55
62
|
...page.product,
|
|
56
63
|
};
|
|
57
64
|
|
|
58
|
-
return
|
|
59
|
-
sectionHandle: 'error',
|
|
60
|
-
typeHandle: '404',
|
|
61
|
-
};
|
|
65
|
+
return null;
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
// todo it would be nice to call this only once per server start
|
|
65
|
-
export async function prepareLoadFn
|
|
69
|
+
export async function prepareLoadFn(
|
|
66
70
|
crelte: Crelte,
|
|
67
|
-
app: App
|
|
71
|
+
app: App,
|
|
68
72
|
entryQuery: GraphQlQuery,
|
|
69
73
|
globalQuery?: GraphQlQuery,
|
|
70
74
|
): Promise<(cr: CrelteRequest, loadOpts?: LoadOptions) => Promise<any>> {
|
|
@@ -88,10 +92,10 @@ export async function prepareLoadFn<E, T>(
|
|
|
88
92
|
};
|
|
89
93
|
}
|
|
90
94
|
|
|
91
|
-
async function loadFn
|
|
95
|
+
async function loadFn(
|
|
92
96
|
cr: CrelteRequest,
|
|
93
|
-
app: App
|
|
94
|
-
templateModules: Map<string, LazyTemplateModule
|
|
97
|
+
app: App,
|
|
98
|
+
templateModules: Map<string, LazyTemplateModule>,
|
|
95
99
|
entryRouter: EntryRouter | null,
|
|
96
100
|
entryQuery: GraphQlQuery,
|
|
97
101
|
globalQuery?: GraphQlQuery,
|
|
@@ -198,52 +202,79 @@ function parseFilename(path: string): [string, string] {
|
|
|
198
202
|
return [name, ext];
|
|
199
203
|
}
|
|
200
204
|
|
|
201
|
-
async function queryEntry
|
|
205
|
+
async function queryEntry(
|
|
202
206
|
cr: CrelteRequest,
|
|
203
|
-
app: App
|
|
207
|
+
app: App,
|
|
204
208
|
entryRouter: EntryRouter | null,
|
|
205
209
|
entryQuery: GraphQlQuery,
|
|
206
|
-
): Promise<
|
|
207
|
-
|
|
208
|
-
if (entryRouter) {
|
|
209
|
-
const entry = await entryRouter._handle(cr);
|
|
210
|
-
if (entry) return entry;
|
|
211
|
-
}
|
|
210
|
+
): Promise<Entry> {
|
|
211
|
+
let vars: EntryQueryVars | null = null;
|
|
212
212
|
|
|
213
213
|
if (cr.req.siteMatches()) {
|
|
214
214
|
let uri = decodeURI(cr.req.uri);
|
|
215
215
|
if (uri.startsWith('/')) uri = uri.substring(1);
|
|
216
216
|
if (uri === '' || uri === '/') uri = '__home__';
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
vars = {
|
|
219
219
|
uri,
|
|
220
220
|
siteId: cr.site.id,
|
|
221
|
-
}
|
|
221
|
+
};
|
|
222
|
+
}
|
|
222
223
|
|
|
223
|
-
|
|
224
|
+
if (vars) {
|
|
225
|
+
await Promise.all(cr.events.trigger('beforeQueryEntry', cr, vars));
|
|
224
226
|
}
|
|
225
227
|
|
|
226
|
-
|
|
228
|
+
// basic query function
|
|
229
|
+
let loadFn = async (vars: EntryQueryVars | null) => {
|
|
230
|
+
if (entryRouter) {
|
|
231
|
+
const entry = await entryRouter._handle(cr);
|
|
232
|
+
if (entry) return entry;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (vars) {
|
|
236
|
+
const page = await cr.query(entryQuery, vars);
|
|
237
|
+
|
|
238
|
+
return getEntry(page);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return null;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// check if a plugin wants to override the query
|
|
245
|
+
const fns = cr.events.getListeners('queryEntry');
|
|
246
|
+
for (const fn of fns) {
|
|
247
|
+
const prevLoadFn = loadFn;
|
|
248
|
+
loadFn = async vars => {
|
|
249
|
+
return await fn(cr, vars, prevLoadFn);
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const entry = (await loadFn(vars)) ?? ERROR_404_ENTRY;
|
|
254
|
+
|
|
255
|
+
await Promise.all(cr.events.trigger('afterQueryEntry', cr, entry));
|
|
256
|
+
|
|
257
|
+
return entry;
|
|
227
258
|
}
|
|
228
259
|
|
|
229
|
-
function prepareTemplates
|
|
230
|
-
rawModules: Record<string, LazyTemplateModule
|
|
231
|
-
): Map<string, LazyTemplateModule
|
|
260
|
+
function prepareTemplates(
|
|
261
|
+
rawModules: Record<string, LazyTemplateModule>,
|
|
262
|
+
): Map<string, LazyTemplateModule> {
|
|
232
263
|
// parse modules
|
|
233
264
|
return new Map(
|
|
234
265
|
Object.entries(rawModules)
|
|
235
266
|
.map(([path, mod]) => {
|
|
236
267
|
const [name, _ext] = parseFilename(path);
|
|
237
|
-
return [name, mod] as [string, LazyTemplateModule
|
|
268
|
+
return [name, mod] as [string, LazyTemplateModule];
|
|
238
269
|
})
|
|
239
270
|
.filter(([name, _mod]) => !!name),
|
|
240
271
|
);
|
|
241
272
|
}
|
|
242
273
|
|
|
243
|
-
async function loadTemplate
|
|
244
|
-
modules: Map<string, LazyTemplateModule
|
|
245
|
-
entry:
|
|
246
|
-
): Promise<TemplateModule
|
|
274
|
+
async function loadTemplate(
|
|
275
|
+
modules: Map<string, LazyTemplateModule>,
|
|
276
|
+
entry: Entry,
|
|
277
|
+
): Promise<TemplateModule> {
|
|
247
278
|
const entr = entry as any;
|
|
248
279
|
const handle = `${entr.sectionHandle}-${entr.typeHandle}`;
|
|
249
280
|
|
package/src/plugins/Events.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EntryQueryVars } from '../entry/index.js';
|
|
2
|
+
import { CrelteRequest, Entry } from '../index.js';
|
|
2
3
|
|
|
3
4
|
export default class Events {
|
|
4
5
|
inner: Map<string, Set<any>>;
|
|
@@ -19,9 +20,26 @@ export default class Events {
|
|
|
19
20
|
): () => void;
|
|
20
21
|
on(
|
|
21
22
|
ev: 'loadData',
|
|
22
|
-
fn: (cr: CrelteRequest, entry:
|
|
23
|
+
fn: (cr: CrelteRequest, entry: Entry) => Promise<any>,
|
|
23
24
|
): () => void;
|
|
24
25
|
on(ev: 'beforeRender', fn: (cr: CrelteRequest) => void): () => void;
|
|
26
|
+
on(
|
|
27
|
+
ev: 'beforeQueryEntry',
|
|
28
|
+
fn: (cr: CrelteRequest, vars: EntryQueryVars) => Promise<void> | void,
|
|
29
|
+
): () => void;
|
|
30
|
+
on(
|
|
31
|
+
ev: 'queryEntry',
|
|
32
|
+
fn: (
|
|
33
|
+
cr: CrelteRequest,
|
|
34
|
+
vars: EntryQueryVars | null,
|
|
35
|
+
/** this might contain other plugin calls */
|
|
36
|
+
runQuery: (vars: EntryQueryVars | null) => Promise<Entry | null>,
|
|
37
|
+
) => Promise<Entry | null>,
|
|
38
|
+
): () => void;
|
|
39
|
+
on(
|
|
40
|
+
ev: 'afterQueryEntry',
|
|
41
|
+
fn: (cr: CrelteRequest, entry: Entry) => Promise<void> | void,
|
|
42
|
+
): () => void;
|
|
25
43
|
on(ev: string, fn: (...args: any[]) => any): () => void {
|
|
26
44
|
let set = this.inner.get(ev);
|
|
27
45
|
if (!set) {
|
|
@@ -46,16 +64,48 @@ export default class Events {
|
|
|
46
64
|
set.delete(fn);
|
|
47
65
|
}
|
|
48
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Check if an event has listeners
|
|
69
|
+
*/
|
|
70
|
+
has(ev: string): boolean {
|
|
71
|
+
const size = this.inner.get(ev)?.size ?? 0;
|
|
72
|
+
return size > 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
49
75
|
/**
|
|
50
76
|
* Trigger an event
|
|
51
77
|
*/
|
|
52
78
|
trigger(ev: 'loadGlobalData', cr: CrelteRequest): Promise<any>[];
|
|
53
|
-
trigger(ev: 'loadData', cr: CrelteRequest, entry:
|
|
79
|
+
trigger(ev: 'loadData', cr: CrelteRequest, entry: Entry): Promise<any>[];
|
|
54
80
|
trigger(ev: 'beforeRender', cr: CrelteRequest): void[];
|
|
81
|
+
trigger(
|
|
82
|
+
ev: 'beforeQueryEntry',
|
|
83
|
+
cr: CrelteRequest,
|
|
84
|
+
vars: EntryQueryVars,
|
|
85
|
+
): void[];
|
|
86
|
+
trigger(
|
|
87
|
+
ev: 'afterQueryEntry',
|
|
88
|
+
cr: CrelteRequest,
|
|
89
|
+
entry: Entry,
|
|
90
|
+
): Promise<void>[];
|
|
55
91
|
trigger(ev: string, ...args: any[]): any[] {
|
|
56
92
|
const set = this.inner.get(ev);
|
|
57
93
|
if (!set) return [];
|
|
58
94
|
|
|
59
95
|
return Array.from(set).map(fn => fn(...args));
|
|
60
96
|
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get all listeners for an event
|
|
100
|
+
*/
|
|
101
|
+
getListeners(
|
|
102
|
+
ev: 'queryEntry',
|
|
103
|
+
): ((
|
|
104
|
+
cr: CrelteRequest,
|
|
105
|
+
vars: EntryQueryVars | null,
|
|
106
|
+
runQuery: (vars: EntryQueryVars | null) => Promise<Entry | null>,
|
|
107
|
+
) => Promise<Entry | null>)[];
|
|
108
|
+
getListeners(ev: string): any[] {
|
|
109
|
+
return Array.from(this.inner.get(ev) ?? []);
|
|
110
|
+
}
|
|
61
111
|
}
|