crelte 0.5.15 → 0.6.0-alpha.2
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/blocks/Blocks.svelte +5 -4
- package/dist/blocks/Blocks.svelte.d.ts +4 -19
- package/dist/blocks/Blocks.svelte.d.ts.map +1 -1
- package/dist/crelte.d.ts +2 -2
- package/dist/crelte.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/init/InternalApp.d.ts.map +1 -1
- package/dist/init/InternalApp.js +2 -2
- package/dist/init/server.js +4 -4
- package/dist/loadData/loadData.d.ts +1 -1
- package/dist/loadData/loadData.d.ts.map +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +15 -11
- package/dist/queries/Queries.d.ts +16 -27
- package/dist/queries/Queries.d.ts.map +1 -1
- package/dist/queries/Queries.js +13 -20
- package/dist/queries/gql.d.ts +2 -2
- package/dist/queries/gql.d.ts.map +1 -1
- package/dist/queries/gql.js +3 -2
- package/dist/queries/index.d.ts +13 -13
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +2 -2
- package/dist/queries/vars.d.ts +3 -3
- package/dist/queries/vars.d.ts.map +1 -1
- package/dist/queries/vars.js +3 -3
- package/dist/routing/route/BaseRoute.d.ts +4 -0
- package/dist/routing/route/BaseRoute.d.ts.map +1 -1
- package/dist/routing/route/BaseRoute.js +6 -0
- package/dist/routing/router/BaseRouter.d.ts.map +1 -1
- package/dist/routing/router/BaseRouter.js +4 -3
- package/dist/routing/router/ClientRouter.d.ts +1 -0
- package/dist/routing/router/ClientRouter.d.ts.map +1 -1
- package/dist/routing/router/ClientRouter.js +22 -7
- package/dist/server/CrelteServer.d.ts +1 -1
- package/dist/server/CrelteServer.d.ts.map +1 -1
- package/dist/server/ServerRouter.d.ts +1 -1
- package/dist/server/ServerRouter.d.ts.map +1 -1
- package/dist/server/queries/QueriesCaching.d.ts +0 -1
- package/dist/server/queries/QueriesCaching.d.ts.map +1 -1
- package/dist/server/queries/QueriesCaching.js +0 -2
- package/dist/server/queries/QueryGqlRoute.d.ts +2 -0
- package/dist/server/queries/QueryGqlRoute.d.ts.map +1 -1
- package/dist/server/queries/QueryGqlRoute.js +22 -14
- package/dist/server/queries/QueryHandleRoute.d.ts +1 -2
- package/dist/server/queries/QueryHandleRoute.d.ts.map +1 -1
- package/dist/server/queries/QueryHandleRoute.js +2 -2
- package/dist/server/queries/queries.d.ts.map +1 -1
- package/dist/server/queries/queries.js +2 -1
- package/dist/server/queries/routes.d.ts +3 -4
- package/dist/server/queries/routes.d.ts.map +1 -1
- package/dist/server/queries/routes.js +3 -3
- package/dist/server/shared.d.ts +5 -4
- package/dist/server/shared.d.ts.map +1 -1
- package/dist/server/shared.js +26 -16
- package/dist/ssr/SsrCache.d.ts +2 -2
- package/dist/ssr/SsrCache.d.ts.map +1 -1
- package/dist/ssr/SsrCache.js +10 -16
- package/dist/std/encdec/escaping.d.ts +2 -0
- package/dist/std/encdec/escaping.d.ts.map +1 -0
- package/dist/std/encdec/escaping.js +41 -0
- package/dist/std/encdec/index.d.ts +13 -0
- package/dist/std/encdec/index.d.ts.map +1 -0
- package/dist/std/encdec/index.js +15 -0
- package/dist/std/index.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +17 -0
- package/dist/vite/index.d.ts +1 -5
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +39 -79
- package/package.json +12 -7
- package/src/blocks/Blocks.svelte +4 -3
- package/src/crelte.ts +2 -2
- package/src/index.ts +2 -2
- package/src/init/InternalApp.ts +3 -4
- package/src/init/server.ts +4 -4
- package/src/loadData/loadData.ts +0 -2
- package/src/node/index.ts +24 -9
- package/src/queries/Queries.ts +31 -36
- package/src/queries/gql.ts +7 -3
- package/src/queries/index.ts +19 -16
- package/src/queries/vars.ts +5 -7
- package/src/routing/route/BaseRoute.ts +8 -7
- package/src/routing/router/BaseRouter.ts +6 -3
- package/src/routing/router/ClientRouter.ts +29 -8
- package/src/server/CrelteServer.ts +1 -1
- package/src/server/ServerRouter.ts +1 -1
- package/src/server/queries/QueriesCaching.ts +0 -2
- package/src/server/queries/QueryGqlRoute.ts +24 -20
- package/src/server/queries/QueryHandleRoute.ts +2 -6
- package/src/server/queries/queries.ts +2 -3
- package/src/server/queries/routes.ts +9 -6
- package/src/server/shared.ts +34 -16
- package/src/ssr/SsrCache.ts +13 -23
- package/src/std/encdec/escaping.ts +47 -0
- package/src/std/encdec/index.ts +16 -0
- package/src/std/index.ts +1 -6
- package/src/utils.ts +21 -0
- package/src/vite/index.ts +51 -87
- package/types.d.ts +1 -1
|
@@ -240,6 +240,12 @@ export default class BaseRoute {
|
|
|
240
240
|
this.z_context[key] = value;
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Returns the site preview token, or null if it is missing or empty.
|
|
245
|
+
*/
|
|
246
|
+
getSiteToken() {
|
|
247
|
+
return this.search.get('siteToken') || null;
|
|
248
|
+
}
|
|
243
249
|
/**
|
|
244
250
|
* Returns true if the route is in live preview mode
|
|
245
251
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/router/BaseRouter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BaseRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/router/BaseRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -175,9 +175,10 @@ export default class BaseRouter {
|
|
|
175
175
|
async preload(target) {
|
|
176
176
|
const req = this.targetToRequest(target, { origin: 'preload' });
|
|
177
177
|
const current = this.route.get();
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
// Preload only within the current origin and site preview context.
|
|
179
|
+
if (current &&
|
|
180
|
+
current.url.origin === req.url.origin &&
|
|
181
|
+
current.getSiteToken() === req.getSiteToken()) {
|
|
181
182
|
// todo i don't wan't to send a CrelteRequest?
|
|
182
183
|
// todo, it would be nice if this could not have any side effects
|
|
183
184
|
// but at the moment cr.router.open will cause a redirect
|
|
@@ -22,6 +22,7 @@ export default class ClientRouter extends BaseRouter {
|
|
|
22
22
|
pushRequest(req: Request, _opts?: RequestOptions): Promise<void | Route>;
|
|
23
23
|
replaceRequest(req: Request, _opts?: RequestOptions): Promise<void | Route>;
|
|
24
24
|
back(): void;
|
|
25
|
+
private requiresPageLoad;
|
|
25
26
|
/**
|
|
26
27
|
* This returns a route if it was handled else if an error occured
|
|
27
28
|
* or the request was cancelled returns void
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/router/ClientRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG;IACjC,kBAAkB,EAAE,OAAO,CAAC;CAC5B,GAAG,iBAAiB,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IACnD,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,kBAAkB,CAAU;IAEpC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;gBAE5B,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"ClientRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/router/ClientRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG;IACjC,kBAAkB,EAAE,OAAO,CAAC;CAC5B,GAAG,iBAAiB,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU;IACnD,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,kBAAkB,CAAU;IAEpC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;gBAE5B,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB;IAS/D;;OAEG;IACG,IAAI;IA8BV;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAuChD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;IAiBpD,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;IAiB7D,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,gBAAgB;IASxB;;;OAGG;IACG,qBAAqB,CAC1B,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GACnC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IASxB,MAAM;IAuEN,QAAQ;IAgCR,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI;CAgEpD"}
|
|
@@ -59,11 +59,7 @@ export default class ClientRouter extends BaseRouter {
|
|
|
59
59
|
window.history.replaceState(current.z_toState(), '');
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
// new site we need to do a window.location.href call
|
|
64
|
-
if ((current && current.url.origin !== req.url.origin) ||
|
|
65
|
-
// @ts-ignore
|
|
66
|
-
import.meta.env.SSR) {
|
|
62
|
+
if (this.requiresPageLoad(req)) {
|
|
67
63
|
window.location.href = req.url.href;
|
|
68
64
|
return;
|
|
69
65
|
}
|
|
@@ -75,12 +71,20 @@ export default class ClientRouter extends BaseRouter {
|
|
|
75
71
|
}
|
|
76
72
|
async pushRequest(req, _opts = {}) {
|
|
77
73
|
const url = req.url;
|
|
74
|
+
if (this.requiresPageLoad(req)) {
|
|
75
|
+
window.location.href = url.href;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
78
|
return this.handleRequest(req, route => {
|
|
79
79
|
window.history.pushState(route.z_toState(), '', url.pathname + url.search + url.hash);
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
async replaceRequest(req, _opts = {}) {
|
|
83
83
|
const url = req.url;
|
|
84
|
+
if (this.requiresPageLoad(req)) {
|
|
85
|
+
window.location.replace(url.href);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
84
88
|
return this.handleRequest(req, () => {
|
|
85
89
|
window.history.replaceState(req.z_toState(), '', url.pathname + url.search + url.hash);
|
|
86
90
|
});
|
|
@@ -88,6 +92,12 @@ export default class ClientRouter extends BaseRouter {
|
|
|
88
92
|
back() {
|
|
89
93
|
window.history.back();
|
|
90
94
|
}
|
|
95
|
+
requiresPageLoad(req) {
|
|
96
|
+
const current = this.route.get();
|
|
97
|
+
return (!!current &&
|
|
98
|
+
(current.url.origin !== req.url.origin ||
|
|
99
|
+
current.getSiteToken() !== req.getSiteToken()));
|
|
100
|
+
}
|
|
91
101
|
/**
|
|
92
102
|
* This returns a route if it was handled else if an error occured
|
|
93
103
|
* or the request was cancelled returns void
|
|
@@ -147,6 +157,10 @@ export default class ClientRouter extends BaseRouter {
|
|
|
147
157
|
origin: 'pop',
|
|
148
158
|
});
|
|
149
159
|
req.z_fillFromState(e.state);
|
|
160
|
+
if (this.requiresPageLoad(req)) {
|
|
161
|
+
window.location.reload();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
150
164
|
// todo handle errors
|
|
151
165
|
this.handleRequest(req, () => { });
|
|
152
166
|
});
|
|
@@ -183,8 +197,9 @@ export default class ClientRouter extends BaseRouter {
|
|
|
183
197
|
// this is called after the route was set
|
|
184
198
|
updateScroll(cr, _route) {
|
|
185
199
|
const req = cr.req;
|
|
186
|
-
if (req.disableScroll)
|
|
187
|
-
return;
|
|
200
|
+
if (req.disableScroll) {
|
|
201
|
+
return this.onScroll(); // make sure the current scrollY get's stored to the history
|
|
202
|
+
}
|
|
188
203
|
// scroll to target
|
|
189
204
|
let scrollTo = null;
|
|
190
205
|
// if we have a hash and the route was not visited
|
|
@@ -51,7 +51,7 @@ export default class CrelteServerRequest {
|
|
|
51
51
|
* returns an env variable from the craft/.env file.
|
|
52
52
|
*/
|
|
53
53
|
getEnv(name: 'ENDPOINT_URL'): string;
|
|
54
|
-
getEnv(name: '
|
|
54
|
+
getEnv(name: 'CRAFT_BASE_CP_URL'): string;
|
|
55
55
|
getEnv(name: 'FRONTEND_URL'): string;
|
|
56
56
|
getEnv(name: string): string | null;
|
|
57
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrelteServer.d.ts","sourceRoot":"","sources":["../../src/server/CrelteServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAW,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,aAAa,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACvC;;OAEG;IACH,GAAG,EAAE,aAAa,CAAC;IAEnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAU;gBAEd,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,0BAA0B;IAehE;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI,IAAI,CAEf;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"CrelteServer.d.ts","sourceRoot":"","sources":["../../src/server/CrelteServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAW,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,aAAa,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACvC;;OAEG;IACH,GAAG,EAAE,aAAa,CAAC;IAEnB,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAU;gBAEd,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,0BAA0B;IAehE;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI,IAAI,CAEf;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IACzC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKnC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG;IAI/B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG;IAI9B;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,aAAa,IAAI,IAAI,GAAG,IAAI;IAI5B;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,KAAK,EACZ,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;IAInB,cAAc;IACd,gBAAgB,CAAC,IAAI,EAAE,QAAQ;CAG/B"}
|
|
@@ -35,7 +35,7 @@ export default class ServerRouter {
|
|
|
35
35
|
* returns an env variable from the craft/.env file.
|
|
36
36
|
*/
|
|
37
37
|
getEnv(name: 'ENDPOINT_URL'): string;
|
|
38
|
-
getEnv(name: '
|
|
38
|
+
getEnv(name: 'CRAFT_BASE_CP_URL'): string;
|
|
39
39
|
getEnv(name: string): string | null;
|
|
40
40
|
/**
|
|
41
41
|
* Returns the primary site
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerRouter.d.ts","sourceRoot":"","sources":["../../src/server/ServerRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAW,MAAM,SAAS,CAAC;AACpD,OAAO,mBAAmB,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAW,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAC;AAGlE,MAAM,MAAM,OAAO,GAAG,CACrB,GAAG,EAAE,mBAAmB,KACpB,OAAO,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAY;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAmB;gBAG/B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACxB,KAAK,EAAE,eAAe,EAAE,EACxB,IAAI,GAAE,aAAkB;IAwBzB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAKpE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACxD,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACxD,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1D,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5D,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5D,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzD,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAExD;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"ServerRouter.d.ts","sourceRoot":"","sources":["../../src/server/ServerRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ export default class QueriesCaching {
|
|
|
8
8
|
private cacheDir;
|
|
9
9
|
private validBearerToken;
|
|
10
10
|
debug: boolean;
|
|
11
|
-
router: ServerRouter;
|
|
12
11
|
constructor(platform: Platform, cs: ServerRouter, opts?: QueriesCachingOptions);
|
|
13
12
|
isEnabled(): boolean;
|
|
14
13
|
getCache<T = any>(key: string): Promise<T | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueriesCaching.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueriesCaching.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,KAAK,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"QueriesCaching.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueriesCaching.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,KAAK,EAAE,OAAO,CAAC;gBAGd,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,YAAY,EAChB,IAAI,CAAC,EAAE,qBAAqB;IA2B7B,SAAS,IAAI,OAAO;IAId,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAoBjD,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAWxC,aAAa;CAgB3B"}
|
|
@@ -5,10 +5,8 @@ export default class QueriesCaching {
|
|
|
5
5
|
cacheDir;
|
|
6
6
|
validBearerToken;
|
|
7
7
|
debug;
|
|
8
|
-
router;
|
|
9
8
|
constructor(platform, cs, opts) {
|
|
10
9
|
this.platform = platform;
|
|
11
|
-
this.router = cs;
|
|
12
10
|
this.debug = !!opts?.debug;
|
|
13
11
|
const enableCaching = cs.getEnv('CACHING') === 'true';
|
|
14
12
|
const endpointToken = cs.getEnv('ENDPOINT_TOKEN');
|
|
@@ -12,11 +12,13 @@ export type QueryGqlArgs = {
|
|
|
12
12
|
export default class QueryGqlRoute {
|
|
13
13
|
name: string;
|
|
14
14
|
query: string;
|
|
15
|
+
queryHash: string;
|
|
15
16
|
vars: Record<string, QueryVar> | null;
|
|
16
17
|
validIfFn: ValidIfFn | null;
|
|
17
18
|
cacheIfFn: CacheIfFn | null;
|
|
18
19
|
transformFn: TransformFn | null;
|
|
19
20
|
constructor(name: string, query: string, args: QueryGqlArgs);
|
|
21
|
+
init(): Promise<void>;
|
|
20
22
|
private fillEntryDefaults;
|
|
21
23
|
private fillGlobalDefaults;
|
|
22
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACN,SAAS,EAET,WAAW,EAEX,SAAS,EACT,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACN,SAAS,EAET,WAAW,EAEX,SAAS,EACT,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IA6BrD,IAAI;IAIV,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAuBX,SAAS;IAWjB,MAAM,CACX,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAqHpB"}
|
|
@@ -2,10 +2,12 @@ import { vars } from '../../queries/vars.js';
|
|
|
2
2
|
import { extractEntry } from '../../loadData/index.js';
|
|
3
3
|
import { calcKey } from '../../ssr/index.js';
|
|
4
4
|
import { newError, validateVars, } from './routes.js';
|
|
5
|
+
import { cryptoSha1Hash } from '../../utils.js';
|
|
5
6
|
// only internal
|
|
6
7
|
export default class QueryGqlRoute {
|
|
7
8
|
name;
|
|
8
9
|
query;
|
|
10
|
+
queryHash;
|
|
9
11
|
vars;
|
|
10
12
|
validIfFn;
|
|
11
13
|
cacheIfFn;
|
|
@@ -18,6 +20,7 @@ export default class QueryGqlRoute {
|
|
|
18
20
|
'variables defined');
|
|
19
21
|
this.name = name;
|
|
20
22
|
this.query = query;
|
|
23
|
+
this.queryHash = query;
|
|
21
24
|
this.vars = args.vars;
|
|
22
25
|
this.validIfFn = args.validIfFn;
|
|
23
26
|
this.cacheIfFn = args.cacheIfFn;
|
|
@@ -36,6 +39,9 @@ export default class QueryGqlRoute {
|
|
|
36
39
|
else
|
|
37
40
|
this.fillBasicDefaults();
|
|
38
41
|
}
|
|
42
|
+
async init() {
|
|
43
|
+
this.queryHash = await cryptoSha1Hash(this.query);
|
|
44
|
+
}
|
|
39
45
|
fillEntryDefaults() {
|
|
40
46
|
if (this.vars)
|
|
41
47
|
return;
|
|
@@ -89,9 +95,9 @@ export default class QueryGqlRoute {
|
|
|
89
95
|
let vars;
|
|
90
96
|
try {
|
|
91
97
|
const reqVars = await csr.req.json();
|
|
92
|
-
vars = validateVars(this.vars, reqVars, this.validIfFn,
|
|
93
|
-
if ('qName'
|
|
94
|
-
throw new Error('qName and xCraftSite are reserved variable names');
|
|
98
|
+
vars = validateVars(this.vars, reqVars, this.validIfFn, csr);
|
|
99
|
+
if (['qName', 'qHash', 'xCraftSite'].some(name => name in vars))
|
|
100
|
+
throw new Error('qName, qHash and xCraftSite are reserved variable names');
|
|
95
101
|
}
|
|
96
102
|
catch (e) {
|
|
97
103
|
return newError(e, 400);
|
|
@@ -100,21 +106,20 @@ export default class QueryGqlRoute {
|
|
|
100
106
|
if (caching.debug) {
|
|
101
107
|
logInfo = `[queries: ${this.name}] vars: ${JSON.stringify(vars)}`;
|
|
102
108
|
}
|
|
103
|
-
let previewToken = null;
|
|
104
|
-
let siteToken = null;
|
|
105
109
|
const reqSearch = new URL(csr.req.url).searchParams;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
else if (reqSearch.has('siteToken')) {
|
|
110
|
-
siteToken = reqSearch.get('siteToken');
|
|
111
|
-
}
|
|
110
|
+
const previewToken = reqSearch.get('token');
|
|
111
|
+
const siteToken = reqSearch.get('siteToken');
|
|
112
112
|
// check for x-craft-site header and pass it on
|
|
113
113
|
const xCraftSite = csr.req.headers.get('X-Craft-Site');
|
|
114
114
|
let cacheKey = null;
|
|
115
|
-
const useCache = !previewToken && caching.isEnabled();
|
|
115
|
+
const useCache = !previewToken && !siteToken && caching.isEnabled();
|
|
116
116
|
if (useCache) {
|
|
117
|
-
cacheKey = await calcKey({
|
|
117
|
+
cacheKey = await calcKey({
|
|
118
|
+
...vars,
|
|
119
|
+
qName: this.name,
|
|
120
|
+
qHash: this.queryHash,
|
|
121
|
+
xCraftSite,
|
|
122
|
+
});
|
|
118
123
|
const cached = await caching.getCache(cacheKey);
|
|
119
124
|
if (logInfo)
|
|
120
125
|
console.log(`${logInfo} ${cached ? 'hit' : 'miss'}`);
|
|
@@ -138,6 +143,9 @@ export default class QueryGqlRoute {
|
|
|
138
143
|
headers['X-Debug'] = xDebug;
|
|
139
144
|
if (xCraftSite)
|
|
140
145
|
headers['X-Craft-Site'] = xCraftSite;
|
|
146
|
+
if (csr.req.headers.get('X-Craft-GQL-Cache') === 'no-cache') {
|
|
147
|
+
headers['X-Craft-GQL-Cache'] = 'no-cache';
|
|
148
|
+
}
|
|
141
149
|
// now execute the gql request
|
|
142
150
|
let resp;
|
|
143
151
|
try {
|
|
@@ -177,7 +185,7 @@ export default class QueryGqlRoute {
|
|
|
177
185
|
}
|
|
178
186
|
// now we have a valid json resp.
|
|
179
187
|
// should we cache it?
|
|
180
|
-
if (cacheKey && this.cacheIfFn?.(jsonResp.data, vars)) {
|
|
188
|
+
if (cacheKey && this.cacheIfFn?.(jsonResp.data, vars, csr)) {
|
|
181
189
|
try {
|
|
182
190
|
await caching.setCache(cacheKey, jsonResp);
|
|
183
191
|
if (logInfo)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { QueryVar } from '../../queries/vars.js';
|
|
2
2
|
import CrelteServerRequest from '../CrelteServer.js';
|
|
3
|
-
import ServerRouter from '../ServerRouter.js';
|
|
4
3
|
import { HandleFn, ValidIfFn } from './routes.js';
|
|
5
4
|
export default class QueryHandleRoute {
|
|
6
5
|
name: string;
|
|
@@ -8,6 +7,6 @@ export default class QueryHandleRoute {
|
|
|
8
7
|
handleFn: HandleFn;
|
|
9
8
|
vars: Record<string, QueryVar> | null;
|
|
10
9
|
constructor(name: string, validIfFn: ValidIfFn | null, handleFn: HandleFn, vars: Record<string, QueryVar> | null);
|
|
11
|
-
handle(
|
|
10
|
+
handle(csr: CrelteServerRequest): Promise<Response>;
|
|
12
11
|
}
|
|
13
12
|
//# sourceMappingURL=QueryHandleRoute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryHandleRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryHandleRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryHandleRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryHandleRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1E,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAGrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI;IAQhC,MAAM,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAYzD"}
|
|
@@ -11,11 +11,11 @@ export default class QueryHandleRoute {
|
|
|
11
11
|
this.handleFn = handleFn;
|
|
12
12
|
this.vars = vars;
|
|
13
13
|
}
|
|
14
|
-
async handle(
|
|
14
|
+
async handle(csr) {
|
|
15
15
|
let vars;
|
|
16
16
|
try {
|
|
17
17
|
const reqVars = await csr.req.json();
|
|
18
|
-
vars = validateVars(this.vars, reqVars, this.validIfFn,
|
|
18
|
+
vars = validateVars(this.vars, reqVars, this.validIfFn, csr);
|
|
19
19
|
}
|
|
20
20
|
catch (e) {
|
|
21
21
|
return newError(e, 400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/server/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAmC1C,wBAAsB,eAAe,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/server/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAmC1C,wBAAsB,eAAe,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAmHf"}
|
|
@@ -71,13 +71,14 @@ export async function initQueryRoutes(platform, mod, router) {
|
|
|
71
71
|
if (rb.handleFn)
|
|
72
72
|
throw new Error('cannot have a handle function if a query is present');
|
|
73
73
|
const route = new QueryGqlRoute(name, rb.query, rb);
|
|
74
|
+
await route.init();
|
|
74
75
|
router.post('/queries/' + route.name, csr => route.handle(caching, csr));
|
|
75
76
|
}
|
|
76
77
|
else if (rb.handleFn) {
|
|
77
78
|
if (rb.cacheIfFn || rb.transformFn || rb.preventCaching)
|
|
78
79
|
throw new Error('caching or transform not supported');
|
|
79
80
|
const route = new QueryHandleRoute(name, rb.validIfFn, rb.handleFn, rb.vars);
|
|
80
|
-
router.post('/queries/' + route.name, csr => route.handle(
|
|
81
|
+
router.post('/queries/' + route.name, csr => route.handle(csr));
|
|
81
82
|
}
|
|
82
83
|
else {
|
|
83
84
|
throw new Error(`query js/ts ${name} file needs to either have ` +
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { QueryVar } from '../../queries/vars.js';
|
|
2
2
|
import CrelteServerRequest from '../CrelteServer.js';
|
|
3
|
-
|
|
4
|
-
export type
|
|
5
|
-
export type ValidIfFn = (vars: Record<string, any>, sr: ServerRouter) => void | boolean;
|
|
3
|
+
export type CacheIfFn = (response: any, vars: Record<string, any>, csr: CrelteServerRequest) => boolean;
|
|
4
|
+
export type ValidIfFn = (vars: Record<string, any>, csr: CrelteServerRequest) => void | boolean;
|
|
6
5
|
export type TransformFn = (response: any, vars: Record<string, any>, csr: CrelteServerRequest) => void | any | Promise<void | any>;
|
|
7
6
|
export type HandleFn = (csr: CrelteServerRequest, vars: Record<string, any>) => Promise<any> | any;
|
|
8
7
|
/**
|
|
9
8
|
* Returns the validated variables if some vars were defined
|
|
10
9
|
* else just returns all vars
|
|
11
10
|
*/
|
|
12
|
-
export declare function validateVars(qvars: Record<string, QueryVar> | null, vars: any, validIfFn: ValidIfFn | null,
|
|
11
|
+
export declare function validateVars(qvars: Record<string, QueryVar> | null, vars: any, validIfFn: ValidIfFn | null, csr: CrelteServerRequest): Record<string, any>;
|
|
13
12
|
export declare function newError(e: any, status: number): Response;
|
|
14
13
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG,CACvB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,OAAO,CAAC;AAGb,MAAM,MAAM,SAAS,GAAG,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,IAAI,GAAG,OAAO,CAAC;AAMpB,MAAM,MAAM,WAAW,GAAG,CACzB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,CACtB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,EACtC,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,GAAG,EAAE,mBAAmB,GACtB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoBrB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEzD"}
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
* Returns the validated variables if some vars were defined
|
|
3
3
|
* else just returns all vars
|
|
4
4
|
*/
|
|
5
|
-
export function validateVars(qvars, vars, validIfFn,
|
|
5
|
+
export function validateVars(qvars, vars, validIfFn, csr) {
|
|
6
6
|
if (!vars || typeof vars !== 'object')
|
|
7
7
|
throw new Error('expected an object as vars');
|
|
8
8
|
if (!qvars)
|
|
9
9
|
return vars;
|
|
10
10
|
const nVars = {};
|
|
11
11
|
for (const [k, v] of Object.entries(qvars)) {
|
|
12
|
-
nVars[k] = v.validValue(vars[k],
|
|
12
|
+
nVars[k] = v.validValue(vars[k], csr);
|
|
13
13
|
}
|
|
14
14
|
if (validIfFn) {
|
|
15
15
|
// or throw
|
|
16
|
-
const valid = validIfFn(nVars,
|
|
16
|
+
const valid = validIfFn(nVars, csr);
|
|
17
17
|
if (typeof valid === 'boolean' && !valid)
|
|
18
18
|
throw new Error('invalid variables for query');
|
|
19
19
|
}
|
package/dist/server/shared.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type EnvData = {
|
|
|
13
13
|
env: Map<string, string>;
|
|
14
14
|
endpointUrl: string;
|
|
15
15
|
endpointToken?: string;
|
|
16
|
-
|
|
16
|
+
craftBaseCpUrl: string;
|
|
17
17
|
frontendUrl: string;
|
|
18
18
|
viteEnv: Map<string, string>;
|
|
19
19
|
};
|
|
@@ -23,7 +23,8 @@ export type SitesCache = {
|
|
|
23
23
|
readSitesCache?: () => Promise<any>;
|
|
24
24
|
writeSitesCache?: (data: any) => Promise<void>;
|
|
25
25
|
};
|
|
26
|
-
export declare function initSites(env: EnvData, cache?: SitesCache): Promise<SiteFromGraphQl[]>;
|
|
26
|
+
export declare function initSites(env: EnvData, cache?: SitesCache, siteToken?: string): Promise<SiteFromGraphQl[]>;
|
|
27
|
+
export declare function initRequestSites(env: EnvData, sites: SiteFromGraphQl[], req: Request): Promise<SiteFromGraphQl[]>;
|
|
27
28
|
export type ModRenderOptions = {
|
|
28
29
|
ssrManifest?: Record<string, string[]>;
|
|
29
30
|
};
|
|
@@ -32,7 +33,7 @@ export type RenderRequest = {
|
|
|
32
33
|
htmlTemplate: string;
|
|
33
34
|
ssrManifest: Record<string, string[]>;
|
|
34
35
|
endpoint: string;
|
|
35
|
-
|
|
36
|
+
craftUrl: string;
|
|
36
37
|
frontend: string;
|
|
37
38
|
viteEnv: Map<string, string>;
|
|
38
39
|
sites: SiteFromGraphQl[];
|
|
@@ -45,7 +46,7 @@ export type RenderErrorRequest = {
|
|
|
45
46
|
ssrManifest: Record<string, string[]>;
|
|
46
47
|
acceptLang: string | null;
|
|
47
48
|
endpoint: string;
|
|
48
|
-
|
|
49
|
+
craftUrl: string;
|
|
49
50
|
frontend: string;
|
|
50
51
|
viteEnv: Map<string, string>;
|
|
51
52
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/server/shared.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,MAAM,aAAa,GAAG;IAE3B,EAAE,CAAC,EAAE,OAAO,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAQF,MAAM,MAAM,OAAO,GAAG;IACrB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/server/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/server/shared.js
CHANGED
|
@@ -15,9 +15,9 @@ export async function initEnvData(os) {
|
|
|
15
15
|
if (!endpointUrl)
|
|
16
16
|
throw new Error('ENDPOINT_URL not set');
|
|
17
17
|
const endpointToken = env.get('ENDPOINT_TOKEN');
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
20
|
-
throw new Error('
|
|
18
|
+
const craftBaseCpUrl = env.get('CRAFT_BASE_CP_URL');
|
|
19
|
+
if (!craftBaseCpUrl)
|
|
20
|
+
throw new Error('CRAFT_BASE_CP_URL not set');
|
|
21
21
|
const frontendUrl = env.get('FRONTEND_URL');
|
|
22
22
|
if (!frontendUrl)
|
|
23
23
|
throw new Error('FRONTEND_URL not set');
|
|
@@ -27,21 +27,29 @@ export async function initEnvData(os) {
|
|
|
27
27
|
env,
|
|
28
28
|
endpointUrl,
|
|
29
29
|
endpointToken,
|
|
30
|
-
|
|
30
|
+
craftBaseCpUrl,
|
|
31
31
|
frontendUrl,
|
|
32
32
|
viteEnv,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
export async function initSites(env, cache) {
|
|
35
|
+
export async function initSites(env, cache, siteToken) {
|
|
36
36
|
const queries = Queries.new(env.endpointUrl, env.frontendUrl, new SsrCache(), { bearerToken: env.endpointToken });
|
|
37
|
-
return await loadSites(queries, cache);
|
|
37
|
+
return await loadSites(queries, cache, siteToken);
|
|
38
|
+
}
|
|
39
|
+
export async function initRequestSites(env, sites, req) {
|
|
40
|
+
const siteToken = new URL(req.url).searchParams.get('siteToken');
|
|
41
|
+
if (!siteToken)
|
|
42
|
+
return sites;
|
|
43
|
+
// Preview sites belong to this request, not the shared site cache.
|
|
44
|
+
return await initSites(env, undefined, siteToken);
|
|
38
45
|
}
|
|
39
46
|
// requires, GraphQl, SsrCache
|
|
40
|
-
async function loadSites(queries, cache) {
|
|
41
|
-
|
|
47
|
+
async function loadSites(queries, cache, siteToken) {
|
|
48
|
+
const useCache = !siteToken;
|
|
49
|
+
if (useCache && 'CRAFT_SITES_CACHED' in globalThis) {
|
|
42
50
|
return globalThis['CRAFT_SITES_CACHED'];
|
|
43
51
|
}
|
|
44
|
-
if (cache?.enabled && cache?.readSitesCache) {
|
|
52
|
+
if (useCache && cache?.enabled && cache?.readSitesCache) {
|
|
45
53
|
try {
|
|
46
54
|
const sites = (await cache.readSitesCache());
|
|
47
55
|
// @ts-ignore
|
|
@@ -65,11 +73,13 @@ async function loadSites(queries, cache) {
|
|
|
65
73
|
}
|
|
66
74
|
`, {},
|
|
67
75
|
// don't cache since we cache ourself
|
|
68
|
-
{ caching: false }));
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
{ caching: false, craftCaching: useCache, siteToken }));
|
|
77
|
+
if (useCache) {
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
globalThis['CRAFT_SITES_CACHED'] = resp.crelteSites;
|
|
80
|
+
if (cache?.enabled && cache?.writeSitesCache) {
|
|
81
|
+
await cache.writeSitesCache(resp.crelteSites);
|
|
82
|
+
}
|
|
73
83
|
}
|
|
74
84
|
return resp.crelteSites;
|
|
75
85
|
}
|
|
@@ -79,7 +89,7 @@ export async function modRender(env, sites, mod, template, req, opts = {}) {
|
|
|
79
89
|
htmlTemplate: template,
|
|
80
90
|
ssrManifest: {},
|
|
81
91
|
endpoint: env.endpointUrl,
|
|
82
|
-
|
|
92
|
+
craftUrl: env.craftBaseCpUrl,
|
|
83
93
|
frontend: env.frontendUrl,
|
|
84
94
|
viteEnv: env.viteEnv,
|
|
85
95
|
sites,
|
|
@@ -115,7 +125,7 @@ export async function modRenderError(env, mod, thrownError, template, req, opts
|
|
|
115
125
|
ssrManifest: {},
|
|
116
126
|
acceptLang,
|
|
117
127
|
endpoint: env.endpointUrl,
|
|
118
|
-
|
|
128
|
+
craftUrl: env.craftBaseCpUrl,
|
|
119
129
|
frontend: env.frontendUrl,
|
|
120
130
|
viteEnv: env.viteEnv,
|
|
121
131
|
...opts,
|
package/dist/ssr/SsrCache.d.ts
CHANGED
|
@@ -74,8 +74,8 @@ export default class SsrCache {
|
|
|
74
74
|
z_clear(): void;
|
|
75
75
|
/** @hidden */
|
|
76
76
|
z_importFromHead(): void;
|
|
77
|
-
private exportAsJson;
|
|
78
77
|
/** @hidden */
|
|
79
|
-
|
|
78
|
+
z_toData(): any;
|
|
80
79
|
}
|
|
80
|
+
export declare function ssrCacheExportToHead(ssr: SsrCache): string;
|
|
81
81
|
//# sourceMappingURL=SsrCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SsrCache.d.ts","sourceRoot":"","sources":["../../src/ssr/SsrCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SsrCache.d.ts","sourceRoot":"","sources":["../../src/ssr/SsrCache.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxD;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC5B,OAAO,CAAC,KAAK,CAAmB;;IAMhC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAK9B;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAKnD;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5D;;;;OAIG;IACG,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKzE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAcxC;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAMhC,cAAc;IACd,OAAO;IAIP,cAAc;IACd,gBAAgB;IAOhB,cAAc;IACd,QAAQ,IAAI,GAAG;CAGf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,UAKjD"}
|
package/dist/ssr/SsrCache.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { uneval } from 'devalue';
|
|
2
|
+
import { cryptoSha1Hash } from '../utils.js';
|
|
1
3
|
/**
|
|
2
4
|
* Calculates a key based on the json representation of the data
|
|
3
5
|
*
|
|
@@ -9,17 +11,7 @@ export async function calcKey(data) {
|
|
|
9
11
|
// specifically in the craft preview locally
|
|
10
12
|
if (!crypto?.subtle)
|
|
11
13
|
return json;
|
|
12
|
-
|
|
13
|
-
const encoder = new TextEncoder();
|
|
14
|
-
const dataBuffer = encoder.encode(json);
|
|
15
|
-
// Use the Web Crypto API to hash the data with SHA-1
|
|
16
|
-
const hashBuffer = await crypto.subtle.digest('SHA-1', dataBuffer);
|
|
17
|
-
// Convert the ArrayBuffer to a hex string
|
|
18
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer)); // Create an array from the buffer
|
|
19
|
-
const hashHex = hashArray
|
|
20
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
21
|
-
.join(''); // Convert to hex string
|
|
22
|
-
return hashHex;
|
|
14
|
+
return await cryptoSha1Hash(json);
|
|
23
15
|
}
|
|
24
16
|
/**
|
|
25
17
|
* A simple cache for server side rendering
|
|
@@ -132,11 +124,13 @@ export default class SsrCache {
|
|
|
132
124
|
// @ts-ignore
|
|
133
125
|
delete window._SSR_STORE;
|
|
134
126
|
}
|
|
135
|
-
exportAsJson() {
|
|
136
|
-
return JSON.stringify(Array.from(this.store.entries())).replace(/</g, '\\u003c');
|
|
137
|
-
}
|
|
138
127
|
/** @hidden */
|
|
139
|
-
|
|
140
|
-
return
|
|
128
|
+
z_toData() {
|
|
129
|
+
return this.store;
|
|
141
130
|
}
|
|
142
131
|
}
|
|
132
|
+
export function ssrCacheExportToHead(ssr) {
|
|
133
|
+
const data = Array.from(ssr.z_toData().entries());
|
|
134
|
+
// safety, uneval already escapes data: https://github.com/sveltejs/devalue#xss-mitigation
|
|
135
|
+
return `\n\t\t<script>window._SSR_STORE = ${uneval(data)};</script>`;
|
|
136
|
+
}
|