crelte 0.5.0-alpha.8 → 0.5.0-alpha.9
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 +2 -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 +5 -2
- 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 +6 -0
- package/dist/init/shared.d.ts +0 -3
- package/dist/init/shared.d.ts.map +1 -1
- package/dist/init/shared.js +1 -37
- 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/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/Router.js +1 -1
- 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/package.json +1 -1
- package/src/entry/EntryRouter.ts +2 -2
- package/src/entry/index.ts +49 -0
- package/src/graphql/GraphQl.ts +5 -2
- package/src/index.ts +0 -1
- package/src/init/client.ts +6 -0
- package/src/init/shared.ts +2 -48
- package/src/plugins/Events.ts +2 -1
- package/src/routing/BaseRouter.ts +2 -1
- package/src/routing/ClientRouter.ts +4 -12
- package/src/routing/Route.ts +2 -1
- package/src/routing/Router.ts +1 -1
- package/src/routing/index.ts +2 -0
|
@@ -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,5 @@ 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>;
|
|
37
39
|
//# 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"}
|
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 getEntry(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
|
+
function getEntry(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;
|
|
@@ -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
|
@@ -139,6 +139,12 @@ export async function main(data) {
|
|
|
139
139
|
}
|
|
140
140
|
return await render();
|
|
141
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
|
+
});
|
|
142
148
|
try {
|
|
143
149
|
await router.init();
|
|
144
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
|
@@ -2,6 +2,7 @@ import { isGraphQlQuery } from '../graphql/GraphQl.js';
|
|
|
2
2
|
import { callLoadData } from '../loadData/index.js';
|
|
3
3
|
import { isPromise } from '../utils.js';
|
|
4
4
|
import { timeout } from 'crelte-std';
|
|
5
|
+
import { queryEntry } from '../entry/index.js';
|
|
5
6
|
export function setupPlugins(crelte, plugins) {
|
|
6
7
|
for (const plugin of plugins) {
|
|
7
8
|
const p = plugin(crelte);
|
|
@@ -108,40 +109,3 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
108
109
|
// loading progress is at 100%
|
|
109
110
|
loadOpts?.setProgress(1);
|
|
110
111
|
}
|
|
111
|
-
export async function queryEntry(cr, entryQuery) {
|
|
112
|
-
if (!cr.req.siteMatches())
|
|
113
|
-
throw new Error('to run the entryQuery the request needs to have a matching site');
|
|
114
|
-
let uri = decodeURI(cr.req.uri);
|
|
115
|
-
if (uri.startsWith('/'))
|
|
116
|
-
uri = uri.substring(1);
|
|
117
|
-
if (uri === '' || uri === '/')
|
|
118
|
-
uri = '__home__';
|
|
119
|
-
const vars = {
|
|
120
|
-
uri,
|
|
121
|
-
siteId: cr.site.id,
|
|
122
|
-
};
|
|
123
|
-
const page = await cr.query(entryQuery, vars);
|
|
124
|
-
return getEntry(page) ?? ERROR_404_ENTRY;
|
|
125
|
-
}
|
|
126
|
-
const ERROR_404_ENTRY = {
|
|
127
|
-
sectionHandle: 'error',
|
|
128
|
-
typeHandle: '404',
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* Get the entry from the page
|
|
132
|
-
*
|
|
133
|
-
* entries should export sectionHandle and typeHandle
|
|
134
|
-
*
|
|
135
|
-
* products should alias productTypeHandle with typeHandle,
|
|
136
|
-
* sectionHandle will be automatically set to product
|
|
137
|
-
*/
|
|
138
|
-
function getEntry(page) {
|
|
139
|
-
if (page?.entry)
|
|
140
|
-
return { ...page.entry };
|
|
141
|
-
if (page?.product)
|
|
142
|
-
return {
|
|
143
|
-
sectionHandle: 'product',
|
|
144
|
-
...page.product,
|
|
145
|
-
};
|
|
146
|
-
return null;
|
|
147
|
-
}
|
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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"}
|
|
@@ -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/Router.js
CHANGED
|
@@ -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/package.json
CHANGED
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 getEntry(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
|
+
function getEntry(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;
|
|
@@ -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
|
@@ -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,7 +1,6 @@
|
|
|
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';
|
|
@@ -9,6 +8,7 @@ import { isPromise } from '../utils.js';
|
|
|
9
8
|
import InternalApp, { TemplateModule } from './InternalApp.js';
|
|
10
9
|
import Route from '../routing/Route.js';
|
|
11
10
|
import { timeout } from 'crelte-std';
|
|
11
|
+
import { Entry, queryEntry } from '../entry/index.js';
|
|
12
12
|
|
|
13
13
|
export function setupPlugins(crelte: Crelte, plugins: PluginCreator[]) {
|
|
14
14
|
for (const plugin of plugins) {
|
|
@@ -148,49 +148,3 @@ export async function loadFn(
|
|
|
148
148
|
// loading progress is at 100%
|
|
149
149
|
loadOpts?.setProgress(1);
|
|
150
150
|
}
|
|
151
|
-
|
|
152
|
-
export async function queryEntry(
|
|
153
|
-
cr: CrelteRequest,
|
|
154
|
-
entryQuery: GraphQlQuery,
|
|
155
|
-
): Promise<Entry> {
|
|
156
|
-
if (!cr.req.siteMatches())
|
|
157
|
-
throw new Error(
|
|
158
|
-
'to run the entryQuery the request needs to have a matching site',
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
let uri = decodeURI(cr.req.uri);
|
|
162
|
-
if (uri.startsWith('/')) uri = uri.substring(1);
|
|
163
|
-
if (uri === '' || uri === '/') uri = '__home__';
|
|
164
|
-
|
|
165
|
-
const vars = {
|
|
166
|
-
uri,
|
|
167
|
-
siteId: cr.site.id,
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
const page = await cr.query(entryQuery, vars);
|
|
171
|
-
return getEntry(page) ?? ERROR_404_ENTRY;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const ERROR_404_ENTRY: Entry = {
|
|
175
|
-
sectionHandle: 'error',
|
|
176
|
-
typeHandle: '404',
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Get the entry from the page
|
|
181
|
-
*
|
|
182
|
-
* entries should export sectionHandle and typeHandle
|
|
183
|
-
*
|
|
184
|
-
* products should alias productTypeHandle with typeHandle,
|
|
185
|
-
* sectionHandle will be automatically set to product
|
|
186
|
-
*/
|
|
187
|
-
function getEntry(page: any): Entry | null {
|
|
188
|
-
if (page?.entry) return { ...page.entry };
|
|
189
|
-
if (page?.product)
|
|
190
|
-
return {
|
|
191
|
-
sectionHandle: 'product',
|
|
192
|
-
...page.product,
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
return null;
|
|
196
|
-
}
|
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
14
|
import { isPromise } from '../utils.js';
|
|
15
|
+
import { Entry } from '../entry/index.js';
|
|
15
16
|
|
|
16
17
|
export type BaseRouterOptions = {} & LoadRunnerOptions;
|
|
17
18
|
|
|
@@ -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;
|
package/src/routing/Router.ts
CHANGED
|
@@ -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,
|