crelte 0.5.0-alpha.1 → 0.5.0-alpha.10
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/EntryRouter.d.ts +2 -2
- package/dist/entry/EntryRouter.d.ts.map +1 -1
- package/dist/entry/index.d.ts +11 -0
- package/dist/entry/index.d.ts.map +1 -1
- package/dist/entry/index.js +38 -0
- package/dist/graphql/GraphQl.d.ts +2 -0
- package/dist/graphql/GraphQl.d.ts.map +1 -1
- package/dist/graphql/GraphQl.js +6 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/init/client.d.ts.map +1 -1
- package/dist/init/client.js +8 -1
- package/dist/init/shared.d.ts +0 -3
- package/dist/init/shared.d.ts.map +1 -1
- package/dist/init/shared.js +10 -38
- package/dist/init/svelteComponents.js +1 -1
- package/dist/init/{crelte-vite-plugin.d.ts → virtualSvelteComponents.d.ts} +1 -1
- package/dist/loadData/Globals.d.ts.map +1 -1
- package/dist/loadData/Globals.js +21 -17
- package/dist/plugins/Events.d.ts +2 -1
- package/dist/plugins/Events.d.ts.map +1 -1
- package/dist/routing/BaseRouter.d.ts +2 -1
- package/dist/routing/BaseRouter.d.ts.map +1 -1
- package/dist/routing/BaseRouter.js +3 -3
- package/dist/routing/ClientRouter.d.ts.map +1 -1
- package/dist/routing/ClientRouter.js +4 -12
- package/dist/routing/Route.d.ts +2 -1
- package/dist/routing/Route.d.ts.map +1 -1
- package/dist/routing/Route.js +1 -0
- package/dist/routing/Router.d.ts +2 -2
- package/dist/routing/Router.js +3 -3
- package/dist/routing/index.d.ts +2 -1
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +2 -1
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +2 -2
- package/package.json +2 -2
- package/src/entry/EntryRouter.ts +2 -2
- package/src/entry/index.ts +49 -0
- package/src/graphql/GraphQl.ts +6 -3
- package/src/index.ts +0 -1
- package/src/init/client.ts +7 -1
- package/src/init/shared.ts +17 -49
- package/src/init/svelteComponents.ts +1 -1
- package/src/init/{crelte-vite-plugin.d.ts → virtualSvelteComponents.d.ts} +1 -1
- package/src/loadData/Globals.ts +21 -22
- package/src/plugins/Events.ts +2 -1
- package/src/routing/BaseRouter.ts +5 -4
- package/src/routing/ClientRouter.ts +4 -12
- package/src/routing/Route.ts +3 -1
- package/src/routing/Router.ts +3 -3
- package/src/routing/index.ts +2 -0
- package/src/ssr/index.ts +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Pattern } from 'trouter';
|
|
2
|
-
import { Crelte, CrelteRequest,
|
|
3
|
-
import { CrelteEntryRequest } from './index.js';
|
|
2
|
+
import { Crelte, CrelteRequest, QueryOptions } from '../index.js';
|
|
3
|
+
import { CrelteEntryRequest, Entry } from './index.js';
|
|
4
4
|
import { GraphQlQuery } from '../graphql/GraphQl.js';
|
|
5
5
|
export type EntryRouteHandler = (cr: CrelteEntryRequest) => Promise<Entry | null | undefined> | Entry | null | undefined | void;
|
|
6
6
|
export type EntryRoutes = (router: EntryRouter) => Promise<void> | void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryRouter.d.ts","sourceRoot":"","sources":["../../src/entry/EntryRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"EntryRouter.d.ts","sourceRoot":"","sources":["../../src/entry/EntryRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAgB,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,CAC/B,EAAE,EAAE,kBAAkB,KAClB,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA6B;gBAE9B,MAAM,EAAE,MAAM;IAK1B,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAK7D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKnC;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,YAAY,EACnB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;IAKnB,cAAc;IACR,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAiBvD"}
|
package/dist/entry/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GraphQlQuery } from '../graphql/index.js';
|
|
1
2
|
import { Crelte, CrelteRequest } from '../index.js';
|
|
2
3
|
import { Request, RequestOptions, Site } from '../routing/index.js';
|
|
3
4
|
import EntryRouter, { EntryRouteHandler, EntryRoutes } from './EntryRouter.js';
|
|
@@ -34,4 +35,14 @@ export declare class CrelteEntryRequest extends CrelteRequest {
|
|
|
34
35
|
req: EntryRequest;
|
|
35
36
|
constructor(inner: Crelte, req: EntryRequest);
|
|
36
37
|
}
|
|
38
|
+
export declare function queryEntry(cr: CrelteRequest, entryQuery: GraphQlQuery): Promise<Entry>;
|
|
39
|
+
/**
|
|
40
|
+
* Get the entry from the page
|
|
41
|
+
*
|
|
42
|
+
* entries should export sectionHandle and typeHandle
|
|
43
|
+
*
|
|
44
|
+
* products should alias productTypeHandle with typeHandle,
|
|
45
|
+
* sectionHandle will be automatically set to product
|
|
46
|
+
*/
|
|
47
|
+
export declare function extractEntry(page: any): Entry | null;
|
|
37
48
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,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;AAED,wBAAsB,UAAU,CAC/B,EAAE,EAAE,aAAa,EACjB,UAAU,EAAE,YAAY,GACtB,OAAO,CAAC,KAAK,CAAC,CAiBhB;AAOD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CASpD"}
|
package/dist/entry/index.js
CHANGED
|
@@ -29,3 +29,41 @@ export class CrelteEntryRequest extends CrelteRequest {
|
|
|
29
29
|
this.req = req;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
export async function queryEntry(cr, entryQuery) {
|
|
33
|
+
if (!cr.req.siteMatches())
|
|
34
|
+
throw new Error('to run the entryQuery the request needs to have a matching site');
|
|
35
|
+
let uri = decodeURI(cr.req.uri);
|
|
36
|
+
if (uri.startsWith('/'))
|
|
37
|
+
uri = uri.substring(1);
|
|
38
|
+
if (uri === '' || uri === '/')
|
|
39
|
+
uri = '__home__';
|
|
40
|
+
const vars = {
|
|
41
|
+
uri,
|
|
42
|
+
siteId: cr.site.id,
|
|
43
|
+
};
|
|
44
|
+
const page = await cr.query(entryQuery, vars);
|
|
45
|
+
return extractEntry(page) ?? ERROR_404_ENTRY;
|
|
46
|
+
}
|
|
47
|
+
const ERROR_404_ENTRY = {
|
|
48
|
+
sectionHandle: 'error',
|
|
49
|
+
typeHandle: '404',
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Get the entry from the page
|
|
53
|
+
*
|
|
54
|
+
* entries should export sectionHandle and typeHandle
|
|
55
|
+
*
|
|
56
|
+
* products should alias productTypeHandle with typeHandle,
|
|
57
|
+
* sectionHandle will be automatically set to product
|
|
58
|
+
*/
|
|
59
|
+
export function extractEntry(page) {
|
|
60
|
+
if (page?.entry)
|
|
61
|
+
return { ...page.entry };
|
|
62
|
+
if (page?.product)
|
|
63
|
+
return {
|
|
64
|
+
sectionHandle: 'product',
|
|
65
|
+
...page.product,
|
|
66
|
+
};
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
// todo maybe move everything here to /loadData
|
|
@@ -35,6 +35,7 @@ export declare class GraphQlError extends Error {
|
|
|
35
35
|
* Options for the GraphQl class
|
|
36
36
|
*/
|
|
37
37
|
export type GraphQlOptions = {
|
|
38
|
+
bearerToken?: string;
|
|
38
39
|
XCraftSiteHeader?: boolean;
|
|
39
40
|
debug?: boolean;
|
|
40
41
|
debugTiming?: boolean;
|
|
@@ -71,6 +72,7 @@ export default class GraphQl {
|
|
|
71
72
|
private endpoint;
|
|
72
73
|
private ssrCache;
|
|
73
74
|
private listeners;
|
|
75
|
+
private bearerToken;
|
|
74
76
|
private XCraftSiteHeader;
|
|
75
77
|
private loggingRequests;
|
|
76
78
|
private loggingTiming;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphQl.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQl.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAEhD,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAE1E,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAGD;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,GAAG,CAAC;gBAGG,IAAI,EAAE,oBAAoB,EAAE,GAAG,GAAE,GAAU;IAOvD;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB,kBAAkB;IAElB;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;CACD;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,aAAa,CAAU;IAE/B;;OAEG;gBAEF,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,cAAmB;
|
|
1
|
+
{"version":3,"file":"GraphQl.d.ts","sourceRoot":"","sources":["../../src/graphql/GraphQl.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAEhD,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAE1E,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAGD;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,GAAG,CAAC;gBAGG,IAAI,EAAE,oBAAoB,EAAE,GAAG,GAAE,GAAU;IAOvD;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB,kBAAkB;IAElB;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;CACD;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,aAAa,CAAU;IAE/B;;OAEG;gBAEF,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,cAAmB;IAY1B;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,YAAY,EACnB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,IAAI,GAAE,qBAA0B,GAC9B,OAAO,CAAC,OAAO,CAAC;YAiCL,OAAO;YA0DP,UAAU;CAsFxB;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,YAAY,CAI5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAClB,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,GAAG,MAAM,EACjD,GAAG,IAAI,EAAE,OAAO,EAAE,GAChB,YAAY,CAuBd"}
|
package/dist/graphql/GraphQl.js
CHANGED
|
@@ -33,6 +33,7 @@ export default class GraphQl {
|
|
|
33
33
|
endpoint;
|
|
34
34
|
ssrCache;
|
|
35
35
|
listeners;
|
|
36
|
+
bearerToken;
|
|
36
37
|
XCraftSiteHeader;
|
|
37
38
|
loggingRequests;
|
|
38
39
|
loggingTiming;
|
|
@@ -43,6 +44,7 @@ export default class GraphQl {
|
|
|
43
44
|
this.endpoint = endpoint;
|
|
44
45
|
this.ssrCache = ssrCache;
|
|
45
46
|
this.listeners = new Map();
|
|
47
|
+
this.bearerToken = opts?.bearerToken ?? null;
|
|
46
48
|
this.XCraftSiteHeader = opts?.XCraftSiteHeader ?? false;
|
|
47
49
|
this.loggingRequests = opts?.debug ?? false;
|
|
48
50
|
this.loggingTiming = opts?.debugTiming ?? false;
|
|
@@ -58,7 +60,7 @@ export default class GraphQl {
|
|
|
58
60
|
async query(query, variables = {}, opts = {}) {
|
|
59
61
|
if (opts.route) {
|
|
60
62
|
const search = opts.route.searchParams ?? opts.route.search;
|
|
61
|
-
if (search.has('token')
|
|
63
|
+
if (search.has('token')) {
|
|
62
64
|
opts.previewToken = search.get('token');
|
|
63
65
|
}
|
|
64
66
|
else if (search.has('siteToken')) {
|
|
@@ -137,8 +139,9 @@ export default class GraphQl {
|
|
|
137
139
|
url += '?siteToken=' + opts.siteToken;
|
|
138
140
|
const headers = opts?.headers ?? {};
|
|
139
141
|
headers['Content-Type'] = 'application/json';
|
|
140
|
-
|
|
141
|
-
|
|
142
|
+
const bearerToken = opts?.bearerToken ?? this.bearerToken;
|
|
143
|
+
if (bearerToken)
|
|
144
|
+
headers['Authorization'] = 'Bearer ' + bearerToken;
|
|
142
145
|
if (this.loggingRequests) {
|
|
143
146
|
console.log('query to ', url, variables, opts);
|
|
144
147
|
headers['X-Debug'] = 'enable';
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { Cookies } from './cookies/index.js';
|
|
|
9
9
|
import type { Readable } from 'crelte-std/stores';
|
|
10
10
|
import { LoadData, LoadDataArray, LoadDataFn, LoadDataObj } from './loadData/index.js';
|
|
11
11
|
import { Entry } from './entry/index.js';
|
|
12
|
-
export { Crelte, CrelteRequest, type Config, type QueryOptions, type LoadData, type LoadDataFn, type LoadDataObj, type LoadDataArray,
|
|
12
|
+
export { Crelte, CrelteRequest, type Config, type QueryOptions, type LoadData, type LoadDataFn, type LoadDataObj, type LoadDataArray, };
|
|
13
13
|
export type Init = (crelte: Crelte) => void;
|
|
14
14
|
/**
|
|
15
15
|
* Get Crelte from the current context
|
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,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,
|
|
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,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,GAClB,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;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAK1C;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,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,QAKjD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,QAKxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/init/client.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;CACf,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":"AAiBA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;CACf,CAAC;AAaF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,iBAyJxC"}
|
package/dist/init/client.js
CHANGED
|
@@ -114,7 +114,8 @@ export async function main(data) {
|
|
|
114
114
|
let render = async () => {
|
|
115
115
|
const route = readyForRoute();
|
|
116
116
|
cr.router._requestCompleted();
|
|
117
|
-
|
|
117
|
+
if (route.entryChanged)
|
|
118
|
+
cr.globals._syncToStores();
|
|
118
119
|
// we should trigger the route update here
|
|
119
120
|
pluginsBeforeRender(cr, route);
|
|
120
121
|
renderApp(route);
|
|
@@ -138,6 +139,12 @@ export async function main(data) {
|
|
|
138
139
|
}
|
|
139
140
|
return await render();
|
|
140
141
|
};
|
|
142
|
+
// listen for a site change and update the lang attribute on the html tag
|
|
143
|
+
router.site.subscribe(site => {
|
|
144
|
+
if (!site)
|
|
145
|
+
return;
|
|
146
|
+
document.documentElement.lang = site.language;
|
|
147
|
+
});
|
|
141
148
|
try {
|
|
142
149
|
await router.init();
|
|
143
150
|
}
|
package/dist/init/shared.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import Crelte from '../Crelte.js';
|
|
2
2
|
import CrelteRequest from '../CrelteRequest.js';
|
|
3
|
-
import { GraphQlQuery } from '../graphql/GraphQl.js';
|
|
4
|
-
import { Entry } from '../index.js';
|
|
5
3
|
import { PluginCreator } from '../plugins/Plugins.js';
|
|
6
4
|
import { LoadOptions } from '../routing/LoadRunner.js';
|
|
7
5
|
import InternalApp from './InternalApp.js';
|
|
@@ -10,5 +8,4 @@ export declare function setupPlugins(crelte: Crelte, plugins: PluginCreator[]):
|
|
|
10
8
|
export declare function pluginsBeforeRequest(cr: CrelteRequest): Promise<void> | void;
|
|
11
9
|
export declare function pluginsBeforeRender(cr: CrelteRequest, route: Route): void;
|
|
12
10
|
export declare function loadFn(cr: CrelteRequest, app: InternalApp, loadOpts?: LoadOptions): Promise<void>;
|
|
13
|
-
export declare function queryEntry(cr: CrelteRequest, entryQuery: GraphQlQuery): Promise<Entry>;
|
|
14
11
|
//# 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;
|
|
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;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,WAA+B,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,MAAM,qBAAqB,CAAC;AAIxC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAKpE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAM5E;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAEzE;AAOD,wBAAsB,MAAM,CAC3B,EAAE,EAAE,aAAa,EACjB,GAAG,EAAE,WAAW,EAChB,QAAQ,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CA6Gf"}
|
package/dist/init/shared.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { isGraphQlQuery } from '../graphql/GraphQl.js';
|
|
2
2
|
import { callLoadData } from '../loadData/index.js';
|
|
3
3
|
import { isPromise } from '../utils.js';
|
|
4
|
+
import { timeout } from 'crelte-std';
|
|
5
|
+
import { queryEntry } from '../entry/index.js';
|
|
4
6
|
export function setupPlugins(crelte, plugins) {
|
|
5
7
|
for (const plugin of plugins) {
|
|
6
8
|
const p = plugin(crelte);
|
|
@@ -69,11 +71,18 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
69
71
|
const pluginsLoadGlobalData = cr.events.trigger('loadGlobalData', cr);
|
|
70
72
|
// loading progress is at 20%
|
|
71
73
|
loadOpts?.setProgress(0.2);
|
|
72
|
-
const
|
|
74
|
+
const loadGlobalDataProm = Promise.all([
|
|
73
75
|
globalProm,
|
|
74
76
|
entryProm,
|
|
75
77
|
...pluginsLoadGlobalData,
|
|
76
78
|
]);
|
|
79
|
+
if (import.meta.env.DEV &&
|
|
80
|
+
!(await Promise.any([loadGlobalDataProm, timeout(2000)]))) {
|
|
81
|
+
console.error('DEV: globals took longer than 2 seconds to load. ' +
|
|
82
|
+
'Resolving globals now to fix potential deadlocks');
|
|
83
|
+
cr.globals._globalsLoaded();
|
|
84
|
+
}
|
|
85
|
+
const [_global, [entry, template]] = await loadGlobalDataProm;
|
|
77
86
|
if (isCanceled())
|
|
78
87
|
return;
|
|
79
88
|
cr.globals._globalsLoaded();
|
|
@@ -100,40 +109,3 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
100
109
|
// loading progress is at 100%
|
|
101
110
|
loadOpts?.setProgress(1);
|
|
102
111
|
}
|
|
103
|
-
export async function queryEntry(cr, entryQuery) {
|
|
104
|
-
if (!cr.req.siteMatches())
|
|
105
|
-
throw new Error('to run the entryQuery the request needs to have a matching site');
|
|
106
|
-
let uri = decodeURI(cr.req.uri);
|
|
107
|
-
if (uri.startsWith('/'))
|
|
108
|
-
uri = uri.substring(1);
|
|
109
|
-
if (uri === '' || uri === '/')
|
|
110
|
-
uri = '__home__';
|
|
111
|
-
const vars = {
|
|
112
|
-
uri,
|
|
113
|
-
siteId: cr.site.id,
|
|
114
|
-
};
|
|
115
|
-
const page = await cr.query(entryQuery, vars);
|
|
116
|
-
return getEntry(page) ?? ERROR_404_ENTRY;
|
|
117
|
-
}
|
|
118
|
-
const ERROR_404_ENTRY = {
|
|
119
|
-
sectionHandle: 'error',
|
|
120
|
-
typeHandle: '404',
|
|
121
|
-
};
|
|
122
|
-
/**
|
|
123
|
-
* Get the entry from the page
|
|
124
|
-
*
|
|
125
|
-
* entries should export sectionHandle and typeHandle
|
|
126
|
-
*
|
|
127
|
-
* products should alias productTypeHandle with typeHandle,
|
|
128
|
-
* sectionHandle will be automatically set to product
|
|
129
|
-
*/
|
|
130
|
-
function getEntry(page) {
|
|
131
|
-
if (page?.entry)
|
|
132
|
-
return { ...page.entry };
|
|
133
|
-
if (page?.product)
|
|
134
|
-
return {
|
|
135
|
-
sectionHandle: 'product',
|
|
136
|
-
...page.product,
|
|
137
|
-
};
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { internalSvelteMount, internalSvelteRender, } from 'crelte
|
|
1
|
+
import { internalSvelteMount, internalSvelteRender, } from 'virtual:crelte/svelteComponents';
|
|
2
2
|
export function svelteMount(comp, options) {
|
|
3
3
|
return internalSvelteMount(comp, options);
|
|
4
4
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare module 'crelte
|
|
1
|
+
declare module 'virtual:crelte/svelteComponents' {
|
|
2
2
|
// Declarations for the internal functions imported from the plugin
|
|
3
3
|
export function internalSvelteMount(comp: any, options: any): any;
|
|
4
4
|
export function internalSvelteRender(comp: any, options: any): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Globals.d.ts","sourceRoot":"","sources":["../../src/loadData/Globals.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAK3B,OAAO,CAAC,OAAO,CAAyC;IAIxD,OAAO,CAAC,OAAO,CAA0B;IAGzC,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAM/C;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Globals.d.ts","sourceRoot":"","sources":["../../src/loadData/Globals.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAK3B,OAAO,CAAC,OAAO,CAAyC;IAIxD,OAAO,CAAC,OAAO,CAA0B;IAGzC,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAM/C;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAWpC;;;;;;;OAOG;IACH,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAInD;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAkB7D;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IA4B5B;;;OAGG;IACH,UAAU;IAQV;;;OAGG;IACH,cAAc;IAYd;;;;OAIG;IACH,aAAa;CAyBb"}
|
package/dist/loadData/Globals.js
CHANGED
|
@@ -42,13 +42,9 @@ export default class Globals {
|
|
|
42
42
|
get(name) {
|
|
43
43
|
if (this.waiters)
|
|
44
44
|
throw new Error('calling get in loadGlobalData will not work. call getAsync');
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// isn't it just a footgun?
|
|
49
|
-
// return this.getStore(name)?.get() ?? null;
|
|
50
|
-
}
|
|
51
|
-
return this.newData.get(name) ?? null;
|
|
45
|
+
if (this.newData)
|
|
46
|
+
return this.newData.get(name) ?? null;
|
|
47
|
+
return this.getStore(name)?.get() ?? null;
|
|
52
48
|
}
|
|
53
49
|
/**
|
|
54
50
|
* returns a store which contains a globalSet
|
|
@@ -69,16 +65,19 @@ export default class Globals {
|
|
|
69
65
|
* you can use `.get` which does not return a Promise
|
|
70
66
|
*/
|
|
71
67
|
getAsync(name) {
|
|
72
|
-
if (this.newData)
|
|
68
|
+
if (this.newData?.has(name))
|
|
73
69
|
return this.newData.get(name) ?? null;
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
70
|
+
if (this.waiters) {
|
|
71
|
+
let listeners = this.waiters.get(name);
|
|
72
|
+
if (!listeners) {
|
|
73
|
+
listeners = [];
|
|
74
|
+
this.waiters.set(name, listeners);
|
|
75
|
+
}
|
|
76
|
+
return new Promise(resolve => listeners.push(resolve));
|
|
80
77
|
}
|
|
81
|
-
|
|
78
|
+
if (this.newData)
|
|
79
|
+
return this.newData.get(name) ?? null;
|
|
80
|
+
return this.stores.get(name)?.get() ?? null;
|
|
82
81
|
}
|
|
83
82
|
/**
|
|
84
83
|
* can only be called in loadGlobalData contexts
|
|
@@ -118,8 +117,13 @@ export default class Globals {
|
|
|
118
117
|
* call this after the loadGlobalData phase
|
|
119
118
|
*/
|
|
120
119
|
_globalsLoaded() {
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
if (!this.waiters)
|
|
121
|
+
return;
|
|
122
|
+
for (const [name, listeners] of this.waiters.entries()) {
|
|
123
|
+
const data = this.stores.get(name)?.get() ?? null;
|
|
124
|
+
listeners.forEach(fn => fn(data));
|
|
125
|
+
}
|
|
126
|
+
this.waiters.clear();
|
|
123
127
|
this.waiters = null;
|
|
124
128
|
}
|
|
125
129
|
/**
|
package/dist/plugins/Events.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;;IAM7B;;;;;;;;;OASG;IAEH,EAAE,CACD,EAAE,EAAE,eAAe,EACnB,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC7C,MAAM,IAAI;IACb,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,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;IAyBnE;;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,eAAe,EAAE,EAAE,EAAE,aAAa,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;IACzE,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE;IAChE,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,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE;CAqBpE"}
|
|
@@ -7,8 +7,9 @@ import Request, { RequestOptions } from './Request.js';
|
|
|
7
7
|
import Route from './Route.js';
|
|
8
8
|
import Site, { SiteFromGraphQl } from './Site.js';
|
|
9
9
|
import LoadRunner, { LoadRunnerOptions } from './LoadRunner.js';
|
|
10
|
-
import {
|
|
10
|
+
import { type CrelteRequest } from '../index.js';
|
|
11
11
|
import { Listeners } from 'crelte-std/sync';
|
|
12
|
+
import { Entry } from '../entry/index.js';
|
|
12
13
|
export type BaseRouterOptions = {} & LoadRunnerOptions;
|
|
13
14
|
export default class BaseRouter {
|
|
14
15
|
sites: Site[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRouter.d.ts","sourceRoot":"","sources":["../../src/routing/BaseRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,OAAO,EAAE,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,EAAE,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AAE/D,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"BaseRouter.d.ts","sourceRoot":"","sources":["../../src/routing/BaseRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import Site, { siteFromUrl } from './Site.js';
|
|
|
8
8
|
import { matchAcceptLang } from './utils.js';
|
|
9
9
|
import LoadRunner from './LoadRunner.js';
|
|
10
10
|
import { Listeners } from 'crelte-std/sync';
|
|
11
|
-
import { isPromise
|
|
11
|
+
import { isPromise } from '../utils.js';
|
|
12
12
|
const INF_LOOP_CHECK = '__REQ_FROM_REQ_START__';
|
|
13
13
|
export default class BaseRouter {
|
|
14
14
|
sites;
|
|
@@ -423,9 +423,9 @@ export default class BaseRouter {
|
|
|
423
423
|
const route = this.route.get();
|
|
424
424
|
if (!route)
|
|
425
425
|
throw new Error('the first request is not allowed to disableLoadData');
|
|
426
|
-
req.entry =
|
|
426
|
+
req.entry = route.entry;
|
|
427
427
|
req.template = route.template;
|
|
428
|
-
req.loadedData =
|
|
428
|
+
req.loadedData = route.loadedData;
|
|
429
429
|
}
|
|
430
430
|
triggerRoute(route) {
|
|
431
431
|
this.route.setSilent(route);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientRouter.d.ts","sourceRoot":"","sources":["../../src/routing/ClientRouter.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,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,KAAK,IAAI,CAAC;gBAEd,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB;IAQ/D;;OAEG;IACG,IAAI;IAaV;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA6ChD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;
|
|
1
|
+
{"version":3,"file":"ClientRouter.d.ts","sourceRoot":"","sources":["../../src/routing/ClientRouter.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,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,KAAK,IAAI,CAAC;gBAEd,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,mBAAmB;IAQ/D;;OAEG;IACG,IAAI;IAaV;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA6ChD,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;IAqBpD,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,cAAmB;IA0B7D;;;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;IAiGN,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI;CAwEpD"}
|
|
@@ -61,38 +61,30 @@ export default class ClientRouter extends BaseRouter {
|
|
|
61
61
|
async pushRequest(req, _opts = {}) {
|
|
62
62
|
const url = req.url;
|
|
63
63
|
// todo a push should also store the previous scrollY
|
|
64
|
-
let nReq = req;
|
|
65
64
|
if (req.scrollY === null) {
|
|
66
65
|
// if there is no scrollY stored we store the current scrollY
|
|
67
66
|
// since a push does not cause a scroll top
|
|
68
67
|
// todo: probably should refactor something probably
|
|
69
68
|
// should not be here
|
|
70
|
-
|
|
71
|
-
nReq.scrollY = window.scrollY;
|
|
72
|
-
// todo this does not work? nReq is never used
|
|
73
|
-
// why not assign it without a clone?
|
|
69
|
+
req.scrollY = window.scrollY;
|
|
74
70
|
}
|
|
75
71
|
return await this.handleRequest(req, route => {
|
|
76
|
-
window.history.pushState(route._toState(), url.pathname + url.search + url.hash);
|
|
72
|
+
window.history.pushState(route._toState(), '', url.pathname + url.search + url.hash);
|
|
77
73
|
});
|
|
78
74
|
}
|
|
79
75
|
async replaceRequest(req, _opts = {}) {
|
|
80
76
|
const url = req.url;
|
|
81
|
-
let nReq = req;
|
|
82
77
|
if (req.scrollY === null) {
|
|
83
78
|
// if there is no scrollY stored we store the current scrollY
|
|
84
79
|
// since a replace does not cause a scrollTo and we wan't
|
|
85
80
|
// history back to work as intended
|
|
86
81
|
// todo: probably should refactor something probably
|
|
87
82
|
// should not be here
|
|
88
|
-
|
|
89
|
-
nReq.scrollY = window.scrollY;
|
|
90
|
-
// todo this does not work? nReq is never used
|
|
91
|
-
// why not assign it without a clone?
|
|
83
|
+
req.scrollY = window.scrollY;
|
|
92
84
|
}
|
|
93
85
|
try {
|
|
94
86
|
return await this.handleRequest(req, () => {
|
|
95
|
-
window.history.replaceState(req._toState(), url.pathname + url.search + url.hash);
|
|
87
|
+
window.history.replaceState(req._toState(), '', url.pathname + url.search + url.hash);
|
|
96
88
|
});
|
|
97
89
|
}
|
|
98
90
|
catch (e) {
|
package/dist/routing/Route.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Site from './Site.js';
|
|
2
|
-
import {
|
|
2
|
+
import { LoadData } from '../index.js';
|
|
3
3
|
import BaseRoute, { RouteOrigin } from './BaseRoute.js';
|
|
4
|
+
import { Entry } from '../entry/index.js';
|
|
4
5
|
export type RouteOptions = {
|
|
5
6
|
entryChanged?: boolean;
|
|
6
7
|
scrollY?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/routing/Route.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/routing/Route.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,cAAc;IAE9B,OAAO,EAAE,GAAG,CAAC;IAEb,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS;IAC3C;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAGhC;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;gBAEF,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,IAAI,GAAE,YAAiB;IAUxB;;;;;OAKG;IACH,KAAK;CAgBL;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,KAAK,CAIlD"}
|
package/dist/routing/Route.js
CHANGED
package/dist/routing/Router.d.ts
CHANGED
|
@@ -102,8 +102,8 @@ export default class Router {
|
|
|
102
102
|
*
|
|
103
103
|
* ## Note
|
|
104
104
|
* This will always set the origin to 'push'
|
|
105
|
-
* And will clear the scrollY value if you
|
|
106
|
-
* This will disableLoadData by default if you
|
|
105
|
+
* And will clear the scrollY value if you dont provide a new one via the `opts`
|
|
106
|
+
* This will disableLoadData by default if you dont provide an override via the `opts`
|
|
107
107
|
*
|
|
108
108
|
* ## Example using the update function
|
|
109
109
|
* ```
|
package/dist/routing/Router.js
CHANGED
|
@@ -114,8 +114,8 @@ export default class Router {
|
|
|
114
114
|
*
|
|
115
115
|
* ## Note
|
|
116
116
|
* This will always set the origin to 'push'
|
|
117
|
-
* And will clear the scrollY value if you
|
|
118
|
-
* This will disableLoadData by default if you
|
|
117
|
+
* And will clear the scrollY value if you dont provide a new one via the `opts`
|
|
118
|
+
* This will disableLoadData by default if you dont provide an override via the `opts`
|
|
119
119
|
*
|
|
120
120
|
* ## Example using the update function
|
|
121
121
|
* ```
|
|
@@ -261,7 +261,7 @@ export default class Router {
|
|
|
261
261
|
targetOrUpdateToRequest(target, opts = {}) {
|
|
262
262
|
// we have an update request
|
|
263
263
|
if (typeof target === 'function') {
|
|
264
|
-
const source = this._request ?? this.route.get();
|
|
264
|
+
const source = this._request?.clone() ?? this.route.get();
|
|
265
265
|
if (!source) {
|
|
266
266
|
// todo should we use the request here?
|
|
267
267
|
throw new Error('route to update missing in first loadData call. ' +
|
package/dist/routing/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import Router, { type UpdateRequest } from './Router.js';
|
|
|
2
2
|
import Route, { type RouteOptions } from './Route.js';
|
|
3
3
|
import Request, { type RequestOptions, type DelayRender } from './Request.js';
|
|
4
4
|
import Site from './Site.js';
|
|
5
|
-
|
|
5
|
+
import BaseRoute from './BaseRoute.js';
|
|
6
|
+
export { Router, UpdateRequest, BaseRoute, Route, RouteOptions, Site, Request, DelayRender, RequestOptions, };
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,OAAO,EAAE,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,OAAO,EAAE,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EACN,MAAM,EACN,aAAa,EACb,SAAS,EACT,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,WAAW,EACX,cAAc,GACd,CAAC"}
|
package/dist/routing/index.js
CHANGED
|
@@ -2,4 +2,5 @@ import Router from './Router.js';
|
|
|
2
2
|
import Route from './Route.js';
|
|
3
3
|
import Request from './Request.js';
|
|
4
4
|
import Site from './Site.js';
|
|
5
|
-
|
|
5
|
+
import BaseRoute from './BaseRoute.js';
|
|
6
|
+
export { Router, BaseRoute, Route, Site, Request, };
|
package/dist/ssr/index.d.ts
CHANGED
package/dist/ssr/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/ssr/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import SsrCache from './SsrCache.js';
|
|
1
|
+
import SsrCache, { calcKey } from './SsrCache.js';
|
|
2
2
|
import SsrComponents from './SsrComponents.js';
|
|
3
|
-
export { SsrCache, SsrComponents };
|
|
3
|
+
export { SsrCache, SsrComponents, calcKey };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crelte",
|
|
3
|
-
"version": "0.5.0-alpha.
|
|
3
|
+
"version": "0.5.0-alpha.10",
|
|
4
4
|
"author": "Crelte <support@crelte.com>",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"crelte-std": "^0.1.
|
|
81
|
+
"crelte-std": "^0.1.2",
|
|
82
82
|
"trouter": "^4.0.0"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
package/src/entry/EntryRouter.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Pattern, Trouter } from 'trouter';
|
|
2
|
-
import { Crelte, CrelteRequest,
|
|
3
|
-
import { CrelteEntryRequest, EntryRequest } from './index.js';
|
|
2
|
+
import { Crelte, CrelteRequest, QueryOptions } from '../index.js';
|
|
3
|
+
import { CrelteEntryRequest, Entry, EntryRequest } from './index.js';
|
|
4
4
|
import { GraphQlQuery } from '../graphql/GraphQl.js';
|
|
5
5
|
|
|
6
6
|
export type EntryRouteHandler = (
|
package/src/entry/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GraphQlQuery } from '../graphql/index.js';
|
|
1
2
|
import { Crelte, CrelteRequest } from '../index.js';
|
|
2
3
|
import { Request, RequestOptions, Site } from '../routing/index.js';
|
|
3
4
|
import EntryRouter, { EntryRouteHandler, EntryRoutes } from './EntryRouter.js';
|
|
@@ -52,3 +53,51 @@ export class CrelteEntryRequest extends CrelteRequest {
|
|
|
52
53
|
this.req = req;
|
|
53
54
|
}
|
|
54
55
|
}
|
|
56
|
+
|
|
57
|
+
export async function queryEntry(
|
|
58
|
+
cr: CrelteRequest,
|
|
59
|
+
entryQuery: GraphQlQuery,
|
|
60
|
+
): Promise<Entry> {
|
|
61
|
+
if (!cr.req.siteMatches())
|
|
62
|
+
throw new Error(
|
|
63
|
+
'to run the entryQuery the request needs to have a matching site',
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
let uri = decodeURI(cr.req.uri);
|
|
67
|
+
if (uri.startsWith('/')) uri = uri.substring(1);
|
|
68
|
+
if (uri === '' || uri === '/') uri = '__home__';
|
|
69
|
+
|
|
70
|
+
const vars = {
|
|
71
|
+
uri,
|
|
72
|
+
siteId: cr.site.id,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const page = await cr.query(entryQuery, vars);
|
|
76
|
+
return extractEntry(page) ?? ERROR_404_ENTRY;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const ERROR_404_ENTRY: Entry = {
|
|
80
|
+
sectionHandle: 'error',
|
|
81
|
+
typeHandle: '404',
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get the entry from the page
|
|
86
|
+
*
|
|
87
|
+
* entries should export sectionHandle and typeHandle
|
|
88
|
+
*
|
|
89
|
+
* products should alias productTypeHandle with typeHandle,
|
|
90
|
+
* sectionHandle will be automatically set to product
|
|
91
|
+
*/
|
|
92
|
+
export function extractEntry(page: any): Entry | null {
|
|
93
|
+
if (page?.entry) return { ...page.entry };
|
|
94
|
+
if (page?.product)
|
|
95
|
+
return {
|
|
96
|
+
sectionHandle: 'product',
|
|
97
|
+
...page.product,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// todo maybe move everything here to /loadData
|
package/src/graphql/GraphQl.ts
CHANGED
|
@@ -55,6 +55,7 @@ export class GraphQlError extends Error {
|
|
|
55
55
|
* Options for the GraphQl class
|
|
56
56
|
*/
|
|
57
57
|
export type GraphQlOptions = {
|
|
58
|
+
bearerToken?: string;
|
|
58
59
|
XCraftSiteHeader?: boolean;
|
|
59
60
|
debug?: boolean;
|
|
60
61
|
debugTiming?: boolean;
|
|
@@ -98,6 +99,7 @@ export default class GraphQl {
|
|
|
98
99
|
[(resp: unknown) => void, (error: unknown) => void][]
|
|
99
100
|
>;
|
|
100
101
|
|
|
102
|
+
private bearerToken: string | null;
|
|
101
103
|
private XCraftSiteHeader: boolean;
|
|
102
104
|
private loggingRequests: boolean;
|
|
103
105
|
private loggingTiming: boolean;
|
|
@@ -114,6 +116,7 @@ export default class GraphQl {
|
|
|
114
116
|
this.ssrCache = ssrCache;
|
|
115
117
|
this.listeners = new Map();
|
|
116
118
|
|
|
119
|
+
this.bearerToken = opts?.bearerToken ?? null;
|
|
117
120
|
this.XCraftSiteHeader = opts?.XCraftSiteHeader ?? false;
|
|
118
121
|
this.loggingRequests = opts?.debug ?? false;
|
|
119
122
|
this.loggingTiming = opts?.debugTiming ?? false;
|
|
@@ -136,7 +139,7 @@ export default class GraphQl {
|
|
|
136
139
|
const search =
|
|
137
140
|
(opts.route as URL).searchParams ?? opts.route.search;
|
|
138
141
|
|
|
139
|
-
if (search.has('token')
|
|
142
|
+
if (search.has('token')) {
|
|
140
143
|
opts.previewToken = search.get('token')!;
|
|
141
144
|
} else if (search.has('siteToken')) {
|
|
142
145
|
opts.siteToken = search.get('siteToken')!;
|
|
@@ -237,8 +240,8 @@ export default class GraphQl {
|
|
|
237
240
|
const headers = opts?.headers ?? {};
|
|
238
241
|
headers['Content-Type'] = 'application/json';
|
|
239
242
|
|
|
240
|
-
|
|
241
|
-
|
|
243
|
+
const bearerToken = opts?.bearerToken ?? this.bearerToken;
|
|
244
|
+
if (bearerToken) headers['Authorization'] = 'Bearer ' + bearerToken;
|
|
242
245
|
|
|
243
246
|
if (this.loggingRequests) {
|
|
244
247
|
console.log('query to ', url, variables, opts);
|
package/src/index.ts
CHANGED
package/src/init/client.ts
CHANGED
|
@@ -158,7 +158,7 @@ export async function main(data: MainData) {
|
|
|
158
158
|
let render = async () => {
|
|
159
159
|
const route = readyForRoute();
|
|
160
160
|
cr.router._requestCompleted();
|
|
161
|
-
cr.globals._syncToStores();
|
|
161
|
+
if (route.entryChanged) cr.globals._syncToStores();
|
|
162
162
|
// we should trigger the route update here
|
|
163
163
|
pluginsBeforeRender(cr, route);
|
|
164
164
|
renderApp(route);
|
|
@@ -194,6 +194,12 @@ export async function main(data: MainData) {
|
|
|
194
194
|
return await render();
|
|
195
195
|
};
|
|
196
196
|
|
|
197
|
+
// listen for a site change and update the lang attribute on the html tag
|
|
198
|
+
router.site.subscribe(site => {
|
|
199
|
+
if (!site) return;
|
|
200
|
+
document.documentElement.lang = site.language;
|
|
201
|
+
});
|
|
202
|
+
|
|
197
203
|
try {
|
|
198
204
|
await router.init();
|
|
199
205
|
} catch (e) {
|
package/src/init/shared.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import Crelte from '../Crelte.js';
|
|
2
2
|
import CrelteRequest from '../CrelteRequest.js';
|
|
3
|
-
import {
|
|
4
|
-
import { Entry } from '../index.js';
|
|
3
|
+
import { isGraphQlQuery } from '../graphql/GraphQl.js';
|
|
5
4
|
import { callLoadData } from '../loadData/index.js';
|
|
6
5
|
import { PluginCreator } from '../plugins/Plugins.js';
|
|
7
6
|
import { LoadOptions } from '../routing/LoadRunner.js';
|
|
8
7
|
import { isPromise } from '../utils.js';
|
|
9
8
|
import InternalApp, { TemplateModule } from './InternalApp.js';
|
|
10
9
|
import Route from '../routing/Route.js';
|
|
10
|
+
import { timeout } from 'crelte-std';
|
|
11
|
+
import { Entry, queryEntry } from '../entry/index.js';
|
|
11
12
|
|
|
12
13
|
export function setupPlugins(crelte: Crelte, plugins: PluginCreator[]) {
|
|
13
14
|
for (const plugin of plugins) {
|
|
@@ -96,11 +97,24 @@ export async function loadFn(
|
|
|
96
97
|
// loading progress is at 20%
|
|
97
98
|
loadOpts?.setProgress(0.2);
|
|
98
99
|
|
|
99
|
-
const
|
|
100
|
+
const loadGlobalDataProm = Promise.all([
|
|
100
101
|
globalProm,
|
|
101
102
|
entryProm,
|
|
102
103
|
...pluginsLoadGlobalData,
|
|
103
104
|
]);
|
|
105
|
+
|
|
106
|
+
if (
|
|
107
|
+
import.meta.env.DEV &&
|
|
108
|
+
!(await Promise.any([loadGlobalDataProm, timeout(2000)]))
|
|
109
|
+
) {
|
|
110
|
+
console.error(
|
|
111
|
+
'DEV: globals took longer than 2 seconds to load. ' +
|
|
112
|
+
'Resolving globals now to fix potential deadlocks',
|
|
113
|
+
);
|
|
114
|
+
cr.globals._globalsLoaded();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const [_global, [entry, template]] = await loadGlobalDataProm;
|
|
104
118
|
if (isCanceled()) return;
|
|
105
119
|
|
|
106
120
|
cr.globals._globalsLoaded();
|
|
@@ -134,49 +148,3 @@ export async function loadFn(
|
|
|
134
148
|
// loading progress is at 100%
|
|
135
149
|
loadOpts?.setProgress(1);
|
|
136
150
|
}
|
|
137
|
-
|
|
138
|
-
export async function queryEntry(
|
|
139
|
-
cr: CrelteRequest,
|
|
140
|
-
entryQuery: GraphQlQuery,
|
|
141
|
-
): Promise<Entry> {
|
|
142
|
-
if (!cr.req.siteMatches())
|
|
143
|
-
throw new Error(
|
|
144
|
-
'to run the entryQuery the request needs to have a matching site',
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
let uri = decodeURI(cr.req.uri);
|
|
148
|
-
if (uri.startsWith('/')) uri = uri.substring(1);
|
|
149
|
-
if (uri === '' || uri === '/') uri = '__home__';
|
|
150
|
-
|
|
151
|
-
const vars = {
|
|
152
|
-
uri,
|
|
153
|
-
siteId: cr.site.id,
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
const page = await cr.query(entryQuery, vars);
|
|
157
|
-
return getEntry(page) ?? ERROR_404_ENTRY;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const ERROR_404_ENTRY: Entry = {
|
|
161
|
-
sectionHandle: 'error',
|
|
162
|
-
typeHandle: '404',
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Get the entry from the page
|
|
167
|
-
*
|
|
168
|
-
* entries should export sectionHandle and typeHandle
|
|
169
|
-
*
|
|
170
|
-
* products should alias productTypeHandle with typeHandle,
|
|
171
|
-
* sectionHandle will be automatically set to product
|
|
172
|
-
*/
|
|
173
|
-
function getEntry(page: any): Entry | null {
|
|
174
|
-
if (page?.entry) return { ...page.entry };
|
|
175
|
-
if (page?.product)
|
|
176
|
-
return {
|
|
177
|
-
sectionHandle: 'product',
|
|
178
|
-
...page.product,
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare module 'crelte
|
|
1
|
+
declare module 'virtual:crelte/svelteComponents' {
|
|
2
2
|
// Declarations for the internal functions imported from the plugin
|
|
3
3
|
export function internalSvelteMount(comp: any, options: any): any;
|
|
4
4
|
export function internalSvelteRender(comp: any, options: any): any;
|
package/src/loadData/Globals.ts
CHANGED
|
@@ -53,17 +53,9 @@ export default class Globals {
|
|
|
53
53
|
'calling get in loadGlobalData will not work. call getAsync',
|
|
54
54
|
);
|
|
55
55
|
|
|
56
|
-
if (
|
|
57
|
-
throw new Error(
|
|
58
|
-
'calling get outside of a loadData is forbidden. use getStore',
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
// todo do we wan't to allow this?
|
|
62
|
-
// isn't it just a footgun?
|
|
63
|
-
// return this.getStore(name)?.get() ?? null;
|
|
64
|
-
}
|
|
56
|
+
if (this.newData) return this.newData.get(name) ?? null;
|
|
65
57
|
|
|
66
|
-
return this.
|
|
58
|
+
return this.getStore(name)?.get() ?? null;
|
|
67
59
|
}
|
|
68
60
|
|
|
69
61
|
/**
|
|
@@ -86,20 +78,21 @@ export default class Globals {
|
|
|
86
78
|
* you can use `.get` which does not return a Promise
|
|
87
79
|
*/
|
|
88
80
|
getAsync<T = any>(name: string): Promise<T | null> | T | null {
|
|
89
|
-
if (this.newData) return this.newData.get(name) ?? null;
|
|
81
|
+
if (this.newData?.has(name)) return this.newData.get(name) ?? null;
|
|
90
82
|
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
if (this.waiters) {
|
|
84
|
+
let listeners = this.waiters.get(name);
|
|
85
|
+
if (!listeners) {
|
|
86
|
+
listeners = [];
|
|
87
|
+
this.waiters.set(name, listeners);
|
|
88
|
+
}
|
|
95
89
|
|
|
96
|
-
|
|
97
|
-
if (!listeners) {
|
|
98
|
-
listeners = [];
|
|
99
|
-
this.waiters.set(name, listeners);
|
|
90
|
+
return new Promise(resolve => listeners.push(resolve));
|
|
100
91
|
}
|
|
101
92
|
|
|
102
|
-
|
|
93
|
+
if (this.newData) return this.newData.get(name) ?? null;
|
|
94
|
+
|
|
95
|
+
return this.stores.get(name)?.get() ?? null;
|
|
103
96
|
}
|
|
104
97
|
|
|
105
98
|
/**
|
|
@@ -150,8 +143,14 @@ export default class Globals {
|
|
|
150
143
|
* call this after the loadGlobalData phase
|
|
151
144
|
*/
|
|
152
145
|
_globalsLoaded() {
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
if (!this.waiters) return;
|
|
147
|
+
|
|
148
|
+
for (const [name, listeners] of this.waiters.entries()) {
|
|
149
|
+
const data = this.stores.get(name)?.get() ?? null;
|
|
150
|
+
listeners.forEach(fn => fn(data));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
this.waiters.clear();
|
|
155
154
|
this.waiters = null;
|
|
156
155
|
}
|
|
157
156
|
|
package/src/plugins/Events.ts
CHANGED
|
@@ -9,9 +9,10 @@ import Route from './Route.js';
|
|
|
9
9
|
import Site, { SiteFromGraphQl, siteFromUrl } from './Site.js';
|
|
10
10
|
import { matchAcceptLang } from './utils.js';
|
|
11
11
|
import LoadRunner, { LoadRunnerOptions } from './LoadRunner.js';
|
|
12
|
-
import {
|
|
12
|
+
import { type CrelteRequest } from '../index.js';
|
|
13
13
|
import { Listeners } from 'crelte-std/sync';
|
|
14
|
-
import { isPromise
|
|
14
|
+
import { isPromise } from '../utils.js';
|
|
15
|
+
import { Entry } from '../entry/index.js';
|
|
15
16
|
|
|
16
17
|
export type BaseRouterOptions = {} & LoadRunnerOptions;
|
|
17
18
|
|
|
@@ -506,9 +507,9 @@ export default class BaseRouter {
|
|
|
506
507
|
'the first request is not allowed to disableLoadData',
|
|
507
508
|
);
|
|
508
509
|
|
|
509
|
-
req.entry =
|
|
510
|
+
req.entry = route.entry;
|
|
510
511
|
req.template = route.template;
|
|
511
|
-
req.loadedData =
|
|
512
|
+
req.loadedData = route.loadedData;
|
|
512
513
|
}
|
|
513
514
|
|
|
514
515
|
triggerRoute(route: Route) {
|
|
@@ -90,22 +90,18 @@ export default class ClientRouter extends BaseRouter {
|
|
|
90
90
|
const url = req.url;
|
|
91
91
|
// todo a push should also store the previous scrollY
|
|
92
92
|
|
|
93
|
-
let nReq = req;
|
|
94
93
|
if (req.scrollY === null) {
|
|
95
94
|
// if there is no scrollY stored we store the current scrollY
|
|
96
95
|
// since a push does not cause a scroll top
|
|
97
96
|
// todo: probably should refactor something probably
|
|
98
97
|
// should not be here
|
|
99
|
-
|
|
100
|
-
nReq.scrollY = window.scrollY;
|
|
101
|
-
|
|
102
|
-
// todo this does not work? nReq is never used
|
|
103
|
-
// why not assign it without a clone?
|
|
98
|
+
req.scrollY = window.scrollY;
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
return await this.handleRequest(req, route => {
|
|
107
102
|
window.history.pushState(
|
|
108
103
|
route._toState(),
|
|
104
|
+
'',
|
|
109
105
|
url.pathname + url.search + url.hash,
|
|
110
106
|
);
|
|
111
107
|
});
|
|
@@ -114,24 +110,20 @@ export default class ClientRouter extends BaseRouter {
|
|
|
114
110
|
async replaceRequest(req: Request, _opts: RequestOptions = {}) {
|
|
115
111
|
const url = req.url;
|
|
116
112
|
|
|
117
|
-
let nReq = req;
|
|
118
113
|
if (req.scrollY === null) {
|
|
119
114
|
// if there is no scrollY stored we store the current scrollY
|
|
120
115
|
// since a replace does not cause a scrollTo and we wan't
|
|
121
116
|
// history back to work as intended
|
|
122
117
|
// todo: probably should refactor something probably
|
|
123
118
|
// should not be here
|
|
124
|
-
|
|
125
|
-
nReq.scrollY = window.scrollY;
|
|
126
|
-
|
|
127
|
-
// todo this does not work? nReq is never used
|
|
128
|
-
// why not assign it without a clone?
|
|
119
|
+
req.scrollY = window.scrollY;
|
|
129
120
|
}
|
|
130
121
|
|
|
131
122
|
try {
|
|
132
123
|
return await this.handleRequest(req, () => {
|
|
133
124
|
window.history.replaceState(
|
|
134
125
|
req._toState(),
|
|
126
|
+
'',
|
|
135
127
|
url.pathname + url.search + url.hash,
|
|
136
128
|
);
|
|
137
129
|
});
|
package/src/routing/Route.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Site from './Site.js';
|
|
2
2
|
import { objClone } from '../utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { LoadData } from '../index.js';
|
|
4
4
|
import BaseRoute, { RouteOrigin } from './BaseRoute.js';
|
|
5
|
+
import { Entry } from '../entry/index.js';
|
|
5
6
|
|
|
6
7
|
export type RouteOptions = {
|
|
7
8
|
entryChanged?: boolean;
|
|
@@ -39,6 +40,7 @@ export default class Route extends BaseRoute {
|
|
|
39
40
|
*/
|
|
40
41
|
loadedData: Record<string, any>;
|
|
41
42
|
|
|
43
|
+
// todo should this be renamed to data changed? or loadData called?
|
|
42
44
|
/**
|
|
43
45
|
* Wether the entry changed since the last Route change
|
|
44
46
|
*/
|
package/src/routing/Router.ts
CHANGED
|
@@ -145,8 +145,8 @@ export default class Router {
|
|
|
145
145
|
*
|
|
146
146
|
* ## Note
|
|
147
147
|
* This will always set the origin to 'push'
|
|
148
|
-
* And will clear the scrollY value if you
|
|
149
|
-
* This will disableLoadData by default if you
|
|
148
|
+
* And will clear the scrollY value if you dont provide a new one via the `opts`
|
|
149
|
+
* This will disableLoadData by default if you dont provide an override via the `opts`
|
|
150
150
|
*
|
|
151
151
|
* ## Example using the update function
|
|
152
152
|
* ```
|
|
@@ -314,7 +314,7 @@ export default class Router {
|
|
|
314
314
|
): Request | null {
|
|
315
315
|
// we have an update request
|
|
316
316
|
if (typeof target === 'function') {
|
|
317
|
-
const source = this._request ?? this.route.get();
|
|
317
|
+
const source = this._request?.clone() ?? this.route.get();
|
|
318
318
|
if (!source) {
|
|
319
319
|
// todo should we use the request here?
|
|
320
320
|
throw new Error(
|
package/src/routing/index.ts
CHANGED
|
@@ -2,10 +2,12 @@ import Router, { type UpdateRequest } from './Router.js';
|
|
|
2
2
|
import Route, { type RouteOptions } from './Route.js';
|
|
3
3
|
import Request, { type RequestOptions, type DelayRender } from './Request.js';
|
|
4
4
|
import Site from './Site.js';
|
|
5
|
+
import BaseRoute from './BaseRoute.js';
|
|
5
6
|
|
|
6
7
|
export {
|
|
7
8
|
Router,
|
|
8
9
|
UpdateRequest,
|
|
10
|
+
BaseRoute,
|
|
9
11
|
Route,
|
|
10
12
|
RouteOptions,
|
|
11
13
|
Site,
|
package/src/ssr/index.ts
CHANGED