crelte 0.5.10 → 0.5.12
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/bodyClass/BodyClass.d.ts +39 -0
- package/dist/bodyClass/BodyClass.d.ts.map +1 -0
- package/dist/bodyClass/BodyClass.js +51 -0
- package/dist/bodyClass/ClientBodyClass.d.ts +12 -0
- package/dist/bodyClass/ClientBodyClass.d.ts.map +1 -0
- package/dist/bodyClass/ClientBodyClass.js +57 -0
- package/dist/bodyClass/ServerBodyClass.d.ts +12 -0
- package/dist/bodyClass/ServerBodyClass.d.ts.map +1 -0
- package/dist/bodyClass/ServerBodyClass.js +47 -0
- package/dist/bodyClass/index.d.ts +2 -0
- package/dist/bodyClass/index.d.ts.map +1 -0
- package/dist/bodyClass/index.js +1 -0
- package/dist/cookies/ClientCookies.d.ts +8 -3
- package/dist/cookies/ClientCookies.d.ts.map +1 -1
- package/dist/cookies/ClientCookies.js +31 -7
- package/dist/cookies/Cookies.d.ts +42 -0
- package/dist/cookies/Cookies.d.ts.map +1 -0
- package/dist/cookies/Cookies.js +44 -0
- package/dist/cookies/ServerCookies.d.ts +3 -2
- package/dist/cookies/ServerCookies.d.ts.map +1 -1
- package/dist/cookies/ServerCookies.js +6 -4
- package/dist/cookies/index.d.ts +1 -25
- package/dist/cookies/index.d.ts.map +1 -1
- package/dist/cookies/index.js +1 -1
- package/dist/crelte.d.ts +7 -1
- package/dist/crelte.d.ts.map +1 -1
- package/dist/crelte.js +2 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/init/client.d.ts +1 -8
- package/dist/init/client.d.ts.map +1 -1
- package/dist/init/client.js +26 -24
- package/dist/init/server.d.ts.map +1 -1
- package/dist/init/server.js +12 -4
- package/dist/init/shared.d.ts +1 -0
- package/dist/init/shared.d.ts.map +1 -1
- package/dist/init/shared.js +16 -5
- package/dist/loadData/Globals.d.ts.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/plugins/Events.d.ts +12 -7
- package/dist/plugins/Events.d.ts.map +1 -1
- package/dist/plugins/Plugins.d.ts +36 -1
- package/dist/plugins/Plugins.d.ts.map +1 -1
- package/dist/plugins/Plugins.js +32 -0
- package/dist/queries/Queries.d.ts +30 -5
- package/dist/queries/Queries.d.ts.map +1 -1
- package/dist/queries/Queries.js +19 -2
- package/dist/queries/gql.d.ts +2 -2
- package/dist/queries/gql.d.ts.map +1 -1
- package/dist/queries/index.d.ts +47 -2
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +2 -2
- package/dist/queries/vars.d.ts +2 -0
- package/dist/queries/vars.d.ts.map +1 -1
- package/dist/queries/vars.js +10 -0
- package/dist/routing/route/Request.d.ts +1 -1
- package/dist/routing/route/Request.d.ts.map +1 -1
- package/dist/routing/route/Request.js +7 -3
- package/dist/routing/router/BaseRouter.d.ts +2 -1
- package/dist/routing/router/BaseRouter.d.ts.map +1 -1
- package/dist/routing/router/BaseRouter.js +4 -2
- package/dist/routing/router/ClientRouter.d.ts.map +1 -1
- package/dist/routing/router/ClientRouter.js +21 -15
- package/dist/routing/router/Router.d.ts +2 -1
- package/dist/routing/router/Router.d.ts.map +1 -1
- package/dist/routing/router/Router.js +10 -13
- package/dist/routing/utils.d.ts +1 -0
- package/dist/routing/utils.d.ts.map +1 -1
- package/dist/routing/utils.js +1 -1
- package/dist/server/CrelteServer.d.ts +1 -0
- package/dist/server/CrelteServer.d.ts.map +1 -1
- package/dist/server/CrelteServer.js +5 -2
- package/dist/server/ServerRouter.d.ts.map +1 -1
- package/dist/server/ServerRouter.js +17 -7
- package/dist/server/queries/QueryGqlRoute.d.ts +28 -0
- package/dist/server/queries/QueryGqlRoute.d.ts.map +1 -0
- package/dist/server/queries/QueryGqlRoute.js +194 -0
- package/dist/server/queries/QueryHandleRoute.d.ts +12 -0
- package/dist/server/queries/QueryHandleRoute.d.ts.map +1 -0
- package/dist/server/queries/QueryHandleRoute.js +24 -0
- package/dist/server/queries/queries.d.ts.map +1 -1
- package/dist/server/queries/queries.js +42 -19
- package/dist/server/queries/routes.d.ts +7 -30
- package/dist/server/queries/routes.d.ts.map +1 -1
- package/dist/server/queries/routes.js +13 -199
- package/dist/std/stores/StagedWritable.d.ts +48 -0
- package/dist/std/stores/StagedWritable.d.ts.map +1 -0
- package/dist/std/stores/StagedWritable.js +84 -0
- package/dist/std/stores/index.d.ts +2 -1
- package/dist/std/stores/index.d.ts.map +1 -1
- package/dist/std/stores/index.js +2 -1
- package/dist/std/sync/Barrier.js +1 -1
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +11 -0
- package/package.json +5 -1
- package/src/bodyClass/BodyClass.ts +72 -0
- package/src/bodyClass/ClientBodyClass.ts +62 -0
- package/src/bodyClass/ServerBodyClass.ts +65 -0
- package/src/bodyClass/index.ts +1 -0
- package/src/cookies/ClientCookies.ts +41 -10
- package/src/cookies/Cookies.ts +70 -0
- package/src/cookies/ServerCookies.ts +9 -6
- package/src/cookies/index.ts +5 -29
- package/src/crelte.ts +9 -0
- package/src/index.ts +15 -1
- package/src/init/client.ts +29 -24
- package/src/init/server.ts +12 -4
- package/src/init/shared.ts +18 -6
- package/src/loadData/Globals.ts +1 -1
- package/src/node/index.ts +1 -1
- package/src/plugins/Events.ts +22 -7
- package/src/plugins/Plugins.ts +66 -1
- package/src/queries/Queries.ts +47 -14
- package/src/queries/gql.ts +2 -2
- package/src/queries/index.ts +71 -0
- package/src/queries/vars.ts +13 -0
- package/src/routing/route/Request.ts +11 -4
- package/src/routing/router/BaseRouter.ts +4 -2
- package/src/routing/router/ClientRouter.ts +26 -18
- package/src/routing/router/Router.ts +10 -11
- package/src/routing/utils.ts +1 -1
- package/src/server/CrelteServer.ts +4 -2
- package/src/server/ServerRouter.ts +18 -7
- package/src/server/queries/QueryGqlRoute.ts +224 -0
- package/src/server/queries/QueryHandleRoute.ts +37 -0
- package/src/server/queries/queries.ts +57 -21
- package/src/server/queries/routes.ts +25 -229
- package/src/std/stores/StagedWritable.ts +96 -0
- package/src/std/stores/index.ts +2 -1
- package/src/std/sync/Barrier.ts +1 -1
- package/src/utils.ts +15 -0
package/dist/init/client.d.ts
CHANGED
|
@@ -14,16 +14,9 @@ export type MainData = {
|
|
|
14
14
|
* ```js
|
|
15
15
|
* import * as app from './App.svelte';
|
|
16
16
|
* import * as errorPage from './Error.svelte';
|
|
17
|
-
* import entryQuery from './queries/entry.graphql';
|
|
18
|
-
* import globalQuery from './queries/global.graphql';
|
|
19
17
|
* import { main } from 'crelte/client';
|
|
20
18
|
*
|
|
21
|
-
* main({
|
|
22
|
-
* app,
|
|
23
|
-
* errorPage,
|
|
24
|
-
* entryQuery,
|
|
25
|
-
* globalQuery,
|
|
26
|
-
* });
|
|
19
|
+
* main({ app, errorPage });
|
|
27
20
|
* ```
|
|
28
21
|
*/
|
|
29
22
|
export declare function main(data: MainData): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/init/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/init/client.ts"],"names":[],"mappings":"AA0BA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,8BAA8B;IAC9B,SAAS,EAAE,GAAG,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,iBAqKxC"}
|
package/dist/init/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadFn, newQueries, onNewCrelteRequest, pluginsBeforeRender, pluginsBeforeRequest, setupPlugins, } from './shared.js';
|
|
1
|
+
import { loadFn, newQueries, onNewCrelteRequest, pluginsAfterRender, pluginsBeforeRender, pluginsBeforeRequest, setupPlugins, } from './shared.js';
|
|
2
2
|
import { tick } from 'svelte';
|
|
3
3
|
import { svelteMount } from './svelteComponents.js';
|
|
4
4
|
import ClientCookies from '../cookies/ClientCookies.js';
|
|
@@ -11,6 +11,9 @@ import Plugins from '../plugins/Plugins.js';
|
|
|
11
11
|
import Events from '../plugins/Events.js';
|
|
12
12
|
import Globals from '../loadData/Globals.js';
|
|
13
13
|
import { Writable } from '../std/stores/index.js';
|
|
14
|
+
import ClientBodyClass from '../bodyClass/ClientBodyClass.js';
|
|
15
|
+
import { BodyClass } from '../bodyClass/index.js';
|
|
16
|
+
import { Cookies } from '../cookies/index.js';
|
|
14
17
|
/**
|
|
15
18
|
* The main function to start the client side rendering
|
|
16
19
|
*
|
|
@@ -18,16 +21,9 @@ import { Writable } from '../std/stores/index.js';
|
|
|
18
21
|
* ```js
|
|
19
22
|
* import * as app from './App.svelte';
|
|
20
23
|
* import * as errorPage from './Error.svelte';
|
|
21
|
-
* import entryQuery from './queries/entry.graphql';
|
|
22
|
-
* import globalQuery from './queries/global.graphql';
|
|
23
24
|
* import { main } from 'crelte/client';
|
|
24
25
|
*
|
|
25
|
-
* main({
|
|
26
|
-
* app,
|
|
27
|
-
* errorPage,
|
|
28
|
-
* entryQuery,
|
|
29
|
-
* globalQuery,
|
|
30
|
-
* });
|
|
26
|
+
* main({ app, errorPage });
|
|
31
27
|
* ```
|
|
32
28
|
*/
|
|
33
29
|
export async function main(data) {
|
|
@@ -56,7 +52,6 @@ export async function main(data) {
|
|
|
56
52
|
preloadOnMouseOver: config.preloadOnMouseOver ?? false,
|
|
57
53
|
});
|
|
58
54
|
const queries = newQueries(ssrCache, router.route.readonly(), config);
|
|
59
|
-
const cookies = new ClientCookies();
|
|
60
55
|
const crelte = newCrelte({
|
|
61
56
|
config,
|
|
62
57
|
ssrCache,
|
|
@@ -65,7 +60,8 @@ export async function main(data) {
|
|
|
65
60
|
globals: new Globals(),
|
|
66
61
|
router: new Router(router),
|
|
67
62
|
queries,
|
|
68
|
-
cookies,
|
|
63
|
+
cookies: new Cookies(new ClientCookies()),
|
|
64
|
+
bodyClass: new BodyClass(new ClientBodyClass()),
|
|
69
65
|
});
|
|
70
66
|
const app = new InternalApp(data.app);
|
|
71
67
|
// setup plugins
|
|
@@ -75,21 +71,21 @@ export async function main(data) {
|
|
|
75
71
|
router.onBeforeRequest = pluginsBeforeRequest;
|
|
76
72
|
router.loadRunner.loadFn = (cr, opts) => loadFn(cr, app, opts);
|
|
77
73
|
// render Space
|
|
78
|
-
let
|
|
79
|
-
let routeProp;
|
|
74
|
+
let routeProp = null;
|
|
80
75
|
const renderApp = (route) => {
|
|
81
|
-
if (
|
|
76
|
+
if (routeProp) {
|
|
82
77
|
routeProp.set(route);
|
|
83
78
|
return;
|
|
84
79
|
}
|
|
85
80
|
routeProp = new Writable(route);
|
|
86
|
-
|
|
81
|
+
svelteMount(data.app.default, {
|
|
87
82
|
target: document.body,
|
|
88
83
|
props: { route: routeProp },
|
|
89
84
|
context: new Map([['crelte', crelte]]),
|
|
90
85
|
intro: config.playIntro,
|
|
91
86
|
});
|
|
92
87
|
};
|
|
88
|
+
const appMounted = () => !!routeProp;
|
|
93
89
|
router.onError = (e, req) => {
|
|
94
90
|
console.error('routing failed:', e, 'reloading trying to fix it');
|
|
95
91
|
// since onError is called only on subsequent requests we should never
|
|
@@ -97,38 +93,44 @@ export async function main(data) {
|
|
|
97
93
|
window.location.href = req.url.href;
|
|
98
94
|
};
|
|
99
95
|
router.onRender = async (cr, readyForRoute, domUpdated) => {
|
|
100
|
-
if (
|
|
96
|
+
if (appMounted() && cr.req.disableLoadData) {
|
|
101
97
|
// if the app is already rendered and entry did not change
|
|
102
|
-
// we just wan't to run domUpdated because we don't
|
|
98
|
+
// we just wan't to run domUpdated because we don't want to update anything
|
|
103
99
|
const route = readyForRoute();
|
|
104
|
-
cr.router.
|
|
100
|
+
cr.router.z_requestCompleted();
|
|
105
101
|
// globals should not be run because they will be empty
|
|
106
102
|
// since nobody called loadGlobalData (todo maybe globals should also,
|
|
107
103
|
// know if it accepts updates)
|
|
108
104
|
// todo should we wait a tick here?
|
|
109
105
|
await tick();
|
|
110
106
|
domUpdated(cr, route);
|
|
107
|
+
pluginsAfterRender(cr, route);
|
|
111
108
|
return route;
|
|
112
109
|
}
|
|
113
110
|
const startTime = config.debugTiming ? Date.now() : null;
|
|
114
111
|
let render = async () => {
|
|
115
112
|
const route = readyForRoute();
|
|
116
|
-
cr.router.
|
|
117
|
-
|
|
113
|
+
cr.router.z_requestCompleted();
|
|
114
|
+
// this is only important on the first render
|
|
115
|
+
// else we will catch an earlier branch in onRender
|
|
116
|
+
if (route.entryChanged) {
|
|
118
117
|
cr.globals.z_syncToStores();
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
pluginsBeforeRender(cr, route);
|
|
119
|
+
cr.cookies.z_render();
|
|
120
|
+
cr.bodyClass.z_render();
|
|
121
|
+
}
|
|
121
122
|
renderApp(route);
|
|
122
123
|
await tick();
|
|
123
124
|
if (startTime) {
|
|
124
125
|
console.log('dom update took ' + (Date.now() - startTime) + 'ms');
|
|
125
126
|
}
|
|
126
127
|
domUpdated(cr, route);
|
|
128
|
+
pluginsAfterRender(cr, route);
|
|
127
129
|
return route;
|
|
128
130
|
};
|
|
129
131
|
// render with view Transition if enabled and not in hydration
|
|
130
132
|
if (config.viewTransition &&
|
|
131
|
-
|
|
133
|
+
appMounted() &&
|
|
132
134
|
document.startViewTransition) {
|
|
133
135
|
const prevRender = render;
|
|
134
136
|
render = async () => new Promise(resolve => {
|
|
@@ -163,8 +165,8 @@ function handleLoadError(e) {
|
|
|
163
165
|
const userLang = navigator.language || navigator.userLanguage;
|
|
164
166
|
// Messages in different languages
|
|
165
167
|
const messages = {
|
|
166
|
-
en: 'An error has occurred. Please reload the page or try again later.',
|
|
167
168
|
de: 'Leider ist ein Fehler aufgetreten. Laden Sie die Seite neu, oder versuchen Sie es später noch mal.',
|
|
169
|
+
en: 'An error has occurred. Please reload the page or try again later.',
|
|
168
170
|
fr: 'Une erreur s’est produite. Veuillez recharger la page ou réessayer plus tard.',
|
|
169
171
|
it: 'Si è verificato un errore. Ricarica la pagina o riprova più tardi.',
|
|
170
172
|
nl: 'Er is een fout opgetreden. Herlaad de pagina of probeer het later opnieuw.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/init/server.ts"],"names":[],"mappings":"AAoBA,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/init/server.ts"],"names":[],"mappings":"AAoBA,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACtB,4BAA4B;IAC5B,GAAG,EAAE,GAAG,CAAC;IAET,0CAA0C;IAC1C,UAAU,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAsHlE;AAED,MAAM,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAE3B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,GAAG,CAAC;IAEf,UAAU,EAAE,kBAAkB,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC9B,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC5C"}
|
package/dist/init/server.js
CHANGED
|
@@ -11,6 +11,9 @@ import Events from '../plugins/Events.js';
|
|
|
11
11
|
import Globals from '../loadData/Globals.js';
|
|
12
12
|
import { Router } from '../routing/index.js';
|
|
13
13
|
import { Writable } from '../std/stores/index.js';
|
|
14
|
+
import ServerBodyClass from '../bodyClass/ServerBodyClass.js';
|
|
15
|
+
import BodyClass from '../bodyClass/BodyClass.js';
|
|
16
|
+
import { Cookies } from '../cookies/index.js';
|
|
14
17
|
/**
|
|
15
18
|
* The main function to start the server side rendering
|
|
16
19
|
*
|
|
@@ -43,6 +46,7 @@ export async function main(data) {
|
|
|
43
46
|
ssrCache.set('CRAFT_WEB_URL', data.serverData.craftWeb);
|
|
44
47
|
ssrCache.set('FRONTEND_URL', data.serverData.frontend);
|
|
45
48
|
const cookies = new ServerCookies(data.serverData.headers);
|
|
49
|
+
const bodyClass = new ServerBodyClass();
|
|
46
50
|
ssrCache.set('crelteSites', data.serverData.sites);
|
|
47
51
|
const router = new ServerRouter(data.serverData.sites, data.serverData.headers.get('Accept-Language') ?? '', { debugTiming: config.debugTiming ?? false });
|
|
48
52
|
const queries = newQueries(ssrCache, router.route.readonly(), config);
|
|
@@ -54,7 +58,8 @@ export async function main(data) {
|
|
|
54
58
|
globals: new Globals(),
|
|
55
59
|
router: new Router(router),
|
|
56
60
|
queries,
|
|
57
|
-
cookies,
|
|
61
|
+
cookies: new Cookies(cookies),
|
|
62
|
+
bodyClass: new BodyClass(bodyClass),
|
|
58
63
|
});
|
|
59
64
|
const app = new InternalApp(data.app);
|
|
60
65
|
// setup plugins
|
|
@@ -65,9 +70,11 @@ export async function main(data) {
|
|
|
65
70
|
router.loadRunner.loadFn = (cr, opts) => loadFn(cr, app, opts);
|
|
66
71
|
router.onRender = (cr, readyForRoute, _domUpdated) => {
|
|
67
72
|
const route = readyForRoute();
|
|
68
|
-
cr.router.
|
|
73
|
+
cr.router.z_requestCompleted();
|
|
69
74
|
cr.globals.z_syncToStores();
|
|
70
75
|
pluginsBeforeRender(cr, route);
|
|
76
|
+
cr.cookies.z_render();
|
|
77
|
+
cr.bodyClass.z_render();
|
|
71
78
|
return route;
|
|
72
79
|
};
|
|
73
80
|
// throws if there was an error
|
|
@@ -75,7 +82,7 @@ export async function main(data) {
|
|
|
75
82
|
// if redirect
|
|
76
83
|
if (!route) {
|
|
77
84
|
const headers = new Headers();
|
|
78
|
-
|
|
85
|
+
cookies._populateHeaders(headers);
|
|
79
86
|
return {
|
|
80
87
|
status: req.statusCode ?? 302,
|
|
81
88
|
location: req.url.toString(),
|
|
@@ -98,12 +105,13 @@ export async function main(data) {
|
|
|
98
105
|
head += crelte.ssrCache.z_exportToHead();
|
|
99
106
|
let htmlTemplate = data.serverData.htmlTemplate;
|
|
100
107
|
htmlTemplate = htmlTemplate.replace('<!--page-lang-->', route.site.language);
|
|
108
|
+
htmlTemplate = bodyClass.z_processHtmlTemplate(htmlTemplate);
|
|
101
109
|
const finalHtml = htmlTemplate
|
|
102
110
|
.replace('</head>', head + '\n\t</head>')
|
|
103
111
|
.replace('<!--ssr-body-->', html);
|
|
104
112
|
const entry = route.entry;
|
|
105
113
|
const headers = new Headers();
|
|
106
|
-
|
|
114
|
+
cookies._populateHeaders(headers);
|
|
107
115
|
return {
|
|
108
116
|
status: req.statusCode ??
|
|
109
117
|
(entry.sectionHandle === 'error'
|
package/dist/init/shared.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { Readable } from '../std/stores/index.js';
|
|
|
9
9
|
export declare function setupPlugins(crelte: Crelte, plugins: PluginCreator[]): void;
|
|
10
10
|
export declare function pluginsBeforeRequest(cr: CrelteRequest): Promise<void> | void;
|
|
11
11
|
export declare function pluginsBeforeRender(cr: CrelteRequest, route: Route): void;
|
|
12
|
+
export declare function pluginsAfterRender(cr: CrelteRequest, route: Route): void;
|
|
12
13
|
export declare function newQueries(ssrCache: SsrCache, route: Readable<Route | null>, config: Required<Config>): Queries;
|
|
13
14
|
export declare function onNewCrelteRequest(crelte: Crelte, req: Request): CrelteRequest;
|
|
14
15
|
export declare function loadFn(cr: CrelteRequest, app: InternalApp, loadOpts?: LoadOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/init/shared.ts"],"names":[],"mappings":"AAMA,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,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAC9E,OAAO,OAA2B,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,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,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/init/shared.ts"],"names":[],"mappings":"AAMA,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,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAC9E,OAAO,OAA2B,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,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,CAGzE;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAExE;AAED,wBAAgB,UAAU,CACzB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,EAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,WAcxB;AAED,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACV,aAAa,CAcf;AAsBD,wBAAsB,MAAM,CAC3B,EAAE,EAAE,aAAa,EACjB,GAAG,EAAE,WAAW,EAChB,QAAQ,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CAwHf"}
|
package/dist/init/shared.js
CHANGED
|
@@ -18,6 +18,10 @@ export function pluginsBeforeRequest(cr) {
|
|
|
18
18
|
}
|
|
19
19
|
export function pluginsBeforeRender(cr, route) {
|
|
20
20
|
cr.events.trigger('beforeRender', cr, route);
|
|
21
|
+
cr.plugins.z_render(cr, route);
|
|
22
|
+
}
|
|
23
|
+
export function pluginsAfterRender(cr, route) {
|
|
24
|
+
cr.events.trigger('afterRender', cr, route);
|
|
21
25
|
}
|
|
22
26
|
export function newQueries(ssrCache, route, config) {
|
|
23
27
|
return Queries.new(ssrCache.get('ENDPOINT_URL'),
|
|
@@ -37,11 +41,14 @@ export function onNewCrelteRequest(crelte, req) {
|
|
|
37
41
|
...crelte,
|
|
38
42
|
router: crelte.router.z_toRequest(req),
|
|
39
43
|
queries: crelte.queries.z_toRequest(req),
|
|
44
|
+
plugins: crelte.plugins.z_toRequest(req),
|
|
40
45
|
globals: crelte.globals.z_toRequest(),
|
|
46
|
+
cookies: crelte.cookies.z_toRequest(),
|
|
47
|
+
bodyClass: crelte.bodyClass.z_toRequest(),
|
|
41
48
|
};
|
|
42
49
|
return crelteToRequest(nCrelte, req);
|
|
43
50
|
}
|
|
44
|
-
async function
|
|
51
|
+
async function eventsLoadEntry(cr) {
|
|
45
52
|
const listeners = cr.events.getListeners('loadEntry');
|
|
46
53
|
for (const loadEntry of listeners) {
|
|
47
54
|
const entry = await loadEntry(cr);
|
|
@@ -79,7 +86,7 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
79
86
|
// checked to be empty before doing it
|
|
80
87
|
const entryProm = (async () => {
|
|
81
88
|
// first let's try to call the plugin loadEntry
|
|
82
|
-
let entry = await
|
|
89
|
+
let entry = await eventsLoadEntry(cr);
|
|
83
90
|
if (isCanceled())
|
|
84
91
|
return [];
|
|
85
92
|
// if no plugin provides an entry we load it from the app
|
|
@@ -106,18 +113,20 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
106
113
|
cr.req.template = template;
|
|
107
114
|
return [entry, template];
|
|
108
115
|
})();
|
|
109
|
-
const
|
|
116
|
+
const eventsLoadGlobalData = cr.events.trigger('loadGlobalData', cr);
|
|
117
|
+
const pluginsLoadGlobalData = cr.plugins.z_loadGlobalData(cr);
|
|
110
118
|
// loading progress is at 20%
|
|
111
119
|
loadOpts?.setProgress(0.2);
|
|
112
120
|
const loadGlobalDataProm = Promise.all([
|
|
113
121
|
globalProm,
|
|
114
122
|
entryProm,
|
|
123
|
+
...eventsLoadGlobalData,
|
|
115
124
|
...pluginsLoadGlobalData,
|
|
116
125
|
]);
|
|
117
126
|
// if globals take longer than 2 seconds to load in dev mode
|
|
118
127
|
// we force resolve them to prevent deadlocks
|
|
119
128
|
if (import.meta.env.DEV &&
|
|
120
|
-
!(await Promise.
|
|
129
|
+
!(await Promise.race([loadGlobalDataProm, timeout(2000)]))) {
|
|
121
130
|
console.error('DEV: globals took longer than 2 seconds to load. ' +
|
|
122
131
|
'Resolving globals now to fix potential deadlocks');
|
|
123
132
|
cr.globals.z_globalsLoaded();
|
|
@@ -128,7 +137,6 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
128
137
|
cr.globals.z_globalsLoaded();
|
|
129
138
|
// loading progress is at 60%
|
|
130
139
|
loadOpts?.setProgress(0.6);
|
|
131
|
-
const pluginsLoadData = cr.events.trigger('loadData', cr, entry);
|
|
132
140
|
let loadDataProm = null;
|
|
133
141
|
if (template.loadData) {
|
|
134
142
|
loadDataProm = callLoadData(template.loadData, cr, entry);
|
|
@@ -137,9 +145,12 @@ export async function loadFn(cr, app, loadOpts) {
|
|
|
137
145
|
if (app.loadEntryData) {
|
|
138
146
|
entryDataProm = callLoadData(app.loadEntryData, cr, entry);
|
|
139
147
|
}
|
|
148
|
+
const eventsLoadData = cr.events.trigger('loadData', cr, entry);
|
|
149
|
+
const pluginsLoadData = cr.plugins.z_loadData(cr);
|
|
140
150
|
const [templateData, entryData] = await Promise.all([
|
|
141
151
|
loadDataProm,
|
|
142
152
|
entryDataProm,
|
|
153
|
+
...eventsLoadData,
|
|
143
154
|
...pluginsLoadData,
|
|
144
155
|
]);
|
|
145
156
|
cr.req.loadedData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Globals.d.ts","sourceRoot":"","sources":["../../src/loadData/Globals.ts"],"names":[],"mappings":"AASA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAEjD,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,WAAW;
|
|
1
|
+
{"version":3,"file":"Globals.d.ts","sourceRoot":"","sources":["../../src/loadData/Globals.ts"],"names":[],"mappings":"AASA,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AAEjD,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,WAAW,IAAI,OAAO;IAQtB;;;OAGG;IACH,eAAe;IAYf;;;;OAIG;IACH,cAAc;CAyBd"}
|
package/dist/node/index.js
CHANGED
|
@@ -115,7 +115,7 @@ export default async function createServer(serverMod, buildTime) {
|
|
|
115
115
|
catch (e) {
|
|
116
116
|
basicError(res, e);
|
|
117
117
|
}
|
|
118
|
-
}).listen(8080);
|
|
118
|
+
}).listen(process.env.PORT ?? 8080);
|
|
119
119
|
}
|
|
120
120
|
function basicError(res, err) {
|
|
121
121
|
console.error('Internal Server Error:', err);
|
package/dist/plugins/Events.d.ts
CHANGED
|
@@ -27,14 +27,18 @@ export default class Events {
|
|
|
27
27
|
* Will be executed in preload as well.
|
|
28
28
|
*
|
|
29
29
|
* @returns a function to remove the listener
|
|
30
|
+
*
|
|
31
|
+
* #### afterRender
|
|
32
|
+
* Note this will also be executed when disableLoadData is true
|
|
30
33
|
*/
|
|
31
34
|
on(ev: 'beforeRequest', fn: (cr: CrelteRequest) => Promise<void> | void): () => void;
|
|
32
|
-
on(ev: 'loadGlobalData', fn: (cr: CrelteRequest) => Promise<any>): () => void;
|
|
35
|
+
on(ev: 'loadGlobalData', fn: (cr: CrelteRequest) => Promise<any> | any): () => void;
|
|
33
36
|
on(ev: 'loadEntry', fn: (cr: CrelteRequest) => Promise<Entry | null> | Entry | null): () => void;
|
|
34
37
|
on(ev: 'beforeQueryEntry', fn: (cr: CrelteRequest, vars: EntryQueryVars) => Promise<void> | void): () => void;
|
|
35
|
-
on(ev: 'afterLoadEntry', fn: (cr: CrelteRequest) => Promise<any>): () => void;
|
|
36
|
-
on(ev: 'loadData', fn: (cr: CrelteRequest, entry: Entry) => Promise<any>): () => void;
|
|
37
|
-
on(ev: 'beforeRender', fn: (cr: CrelteRequest) => void): () => void;
|
|
38
|
+
on(ev: 'afterLoadEntry', fn: (cr: CrelteRequest) => Promise<any> | any): () => void;
|
|
39
|
+
on(ev: 'loadData', fn: (cr: CrelteRequest, entry: Entry) => Promise<any> | any): () => void;
|
|
40
|
+
on(ev: 'beforeRender', fn: (cr: CrelteRequest, route: Route) => void): () => void;
|
|
41
|
+
on(ev: 'afterRender', fn: (cr: CrelteRequest, route: Route) => void): () => void;
|
|
38
42
|
/**
|
|
39
43
|
* Remove a listener
|
|
40
44
|
*/
|
|
@@ -47,11 +51,12 @@ export default class Events {
|
|
|
47
51
|
* Trigger an event
|
|
48
52
|
*/
|
|
49
53
|
trigger(ev: 'beforeRequest', cr: CrelteRequest): (Promise<void> | void)[];
|
|
50
|
-
trigger(ev: 'loadGlobalData', cr: CrelteRequest): Promise<any>[];
|
|
54
|
+
trigger(ev: 'loadGlobalData', cr: CrelteRequest): (Promise<any> | any)[];
|
|
51
55
|
trigger(ev: 'beforeQueryEntry', cr: CrelteRequest, vars: EntryQueryVars): (Promise<void> | void)[];
|
|
52
|
-
trigger(ev: 'afterLoadEntry', cr: CrelteRequest): Promise<any>[];
|
|
53
|
-
trigger(ev: 'loadData', cr: CrelteRequest, entry: Entry): Promise<any>[];
|
|
56
|
+
trigger(ev: 'afterLoadEntry', cr: CrelteRequest): (Promise<any> | any)[];
|
|
57
|
+
trigger(ev: 'loadData', cr: CrelteRequest, entry: Entry): (Promise<any> | any)[];
|
|
54
58
|
trigger(ev: 'beforeRender', cr: CrelteRequest, route: Route): void[];
|
|
59
|
+
trigger(ev: 'afterRender', cr: CrelteRequest, route: Route): void[];
|
|
55
60
|
/**
|
|
56
61
|
* Get all listeners for an event
|
|
57
62
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7D,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
|
|
1
|
+
{"version":3,"file":"Events.d.ts","sourceRoot":"","sources":["../../src/plugins/Events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
import { Crelte } from '../crelte.js';
|
|
1
|
+
import { Crelte, CrelteRequest } from '../crelte.js';
|
|
2
|
+
import { Request, Route } from '../routing/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* A plugin
|
|
4
5
|
*/
|
|
5
6
|
export interface Plugin {
|
|
6
7
|
name: string;
|
|
8
|
+
/**
|
|
9
|
+
* The returned value will be used inside of CrelteRequest
|
|
10
|
+
*/
|
|
11
|
+
toRequest?: (req: Request) => Plugin;
|
|
12
|
+
/**
|
|
13
|
+
* This will be called during the loadGlobalData phase.
|
|
14
|
+
*/
|
|
15
|
+
loadGlobalData?: (cr: CrelteRequest) => Promise<void> | void;
|
|
16
|
+
/**
|
|
17
|
+
* This will be called during the loadData phase.
|
|
18
|
+
*/
|
|
19
|
+
loadData?: (cr: CrelteRequest) => Promise<void> | void;
|
|
20
|
+
/**
|
|
21
|
+
* This will be called before the dom gets updated.
|
|
22
|
+
*
|
|
23
|
+
* At this point you can update variables or stores.
|
|
24
|
+
*/
|
|
25
|
+
render?: (cr: CrelteRequest, route: Route) => void;
|
|
7
26
|
}
|
|
8
27
|
/**
|
|
9
28
|
* A plugin create function
|
|
@@ -34,5 +53,21 @@ export default class Plugins {
|
|
|
34
53
|
*/
|
|
35
54
|
add(plugin: Plugin): void;
|
|
36
55
|
get(name: string): Plugin | null;
|
|
56
|
+
/**
|
|
57
|
+
* @hidden
|
|
58
|
+
*/
|
|
59
|
+
z_toRequest(req: Request): Plugins;
|
|
60
|
+
/**
|
|
61
|
+
* @hidden
|
|
62
|
+
*/
|
|
63
|
+
z_loadGlobalData(cr: CrelteRequest): (Promise<void> | void | undefined)[];
|
|
64
|
+
/**
|
|
65
|
+
* @hidden
|
|
66
|
+
*/
|
|
67
|
+
z_loadData(cr: CrelteRequest): (Promise<void> | void | undefined)[];
|
|
68
|
+
/**
|
|
69
|
+
* @hidden
|
|
70
|
+
*/
|
|
71
|
+
z_render(cr: CrelteRequest, route: Route): void;
|
|
37
72
|
}
|
|
38
73
|
//# sourceMappingURL=Plugins.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugins.d.ts","sourceRoot":"","sources":["../../src/plugins/Plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Plugins.d.ts","sourceRoot":"","sources":["../../src/plugins/Plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IAErC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE7D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvD;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnD;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAEvD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;IAM7B;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM;IAIlB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAalC;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE;IAMzE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE;IAMnE;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAK/C"}
|
package/dist/plugins/Plugins.js
CHANGED
|
@@ -17,4 +17,36 @@ export default class Plugins {
|
|
|
17
17
|
get(name) {
|
|
18
18
|
return this.plugins.get(name) ?? null;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* @hidden
|
|
22
|
+
*/
|
|
23
|
+
z_toRequest(req) {
|
|
24
|
+
const nPlugins = new Plugins();
|
|
25
|
+
for (let plugin of this.plugins.values()) {
|
|
26
|
+
if (typeof plugin.toRequest === 'function')
|
|
27
|
+
plugin = plugin.toRequest(req);
|
|
28
|
+
nPlugins.add(plugin);
|
|
29
|
+
}
|
|
30
|
+
return nPlugins;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @hidden
|
|
34
|
+
*/
|
|
35
|
+
z_loadGlobalData(cr) {
|
|
36
|
+
return Array.from(this.plugins.values()).map(plugin => plugin.loadGlobalData?.(cr));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @hidden
|
|
40
|
+
*/
|
|
41
|
+
z_loadData(cr) {
|
|
42
|
+
return Array.from(this.plugins.values()).map(plugin => plugin.loadData?.(cr));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @hidden
|
|
46
|
+
*/
|
|
47
|
+
z_render(cr, route) {
|
|
48
|
+
for (const plugin of this.plugins.values()) {
|
|
49
|
+
plugin.render?.(cr, route);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
20
52
|
}
|
|
@@ -14,15 +14,35 @@ export type QueriesOptions = {
|
|
|
14
14
|
/**
|
|
15
15
|
* A GraphQL query
|
|
16
16
|
*
|
|
17
|
-
* You should almost never
|
|
18
|
-
*
|
|
17
|
+
* **You should almost never**
|
|
18
|
+
*
|
|
19
|
+
* When importing a graphql file you will get a {@link NamedQuery}
|
|
20
|
+
* or use the {@link gql} template function to create
|
|
21
|
+
* an {@link InlineQuery}.
|
|
22
|
+
* Alternatively you can use the {@link namedQuery} function to create
|
|
23
|
+
* a {@link NamedQuery}.
|
|
24
|
+
*/
|
|
25
|
+
export type Query = InlineQuery | NamedQuery;
|
|
26
|
+
/**
|
|
27
|
+
* You should never create this type directly. It is returned from
|
|
28
|
+
* the {@link gql} template function.
|
|
19
29
|
*/
|
|
20
|
-
export type
|
|
30
|
+
export type InlineQuery = {
|
|
21
31
|
path?: string;
|
|
22
32
|
query: string;
|
|
23
|
-
}
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Always create this object via the {@link namedQuery} function
|
|
36
|
+
*/
|
|
37
|
+
export type NamedQuery = {
|
|
24
38
|
queryName: string;
|
|
25
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Create a NamedQuery for the given server query name.
|
|
42
|
+
*
|
|
43
|
+
* Prefer importing a graphql file instead.
|
|
44
|
+
*/
|
|
45
|
+
export declare function namedQuery(name: string): NamedQuery;
|
|
26
46
|
/** Returns true if the passed object is a GraphQlQuery */
|
|
27
47
|
export declare function isQuery(obj: any): obj is Query;
|
|
28
48
|
/**
|
|
@@ -74,7 +94,12 @@ export default class Queries {
|
|
|
74
94
|
* @param opts options
|
|
75
95
|
* @returns
|
|
76
96
|
*/
|
|
77
|
-
static new(endpoint: string, frontend
|
|
97
|
+
static new(endpoint: string, frontend?: string | null, ssrCache?: SsrCache, opts?: QueriesOptions): Queries;
|
|
98
|
+
/**
|
|
99
|
+
* Create a new Queries instance that always intented to call an
|
|
100
|
+
* external GraphQl endpoint.
|
|
101
|
+
*/
|
|
102
|
+
static newExternal(endpoint: string, bearerToken?: string): Queries;
|
|
78
103
|
/**
|
|
79
104
|
* Run a GraphQl Query
|
|
80
105
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queries.d.ts","sourceRoot":"","sources":["../../src/queries/Queries.ts"],"names":[],"mappings":"AAAA,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAa,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/B,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
|
|
1
|
+
{"version":3,"file":"Queries.d.ts","sourceRoot":"","sources":["../../src/queries/Queries.ts"],"names":[],"mappings":"AAAA,OAAO,QAAwC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAa,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/B,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;;;;;;;;;;GAUG;AACH,MAAM,MAAM,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,KAAK,CAI9C;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAgC;IAE7C,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO;IAUP;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,QAAQ,GAAE,QAAyB,EACnC,IAAI,GAAE,cAAmB,GACvB,OAAO;IAQV;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAQnE;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;IA0BnB;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO;CAGxB"}
|
package/dist/queries/Queries.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import { calcKey as ssrCacheCalcKey } from '../ssr/SsrCache.js';
|
|
1
|
+
import SsrCache, { calcKey as ssrCacheCalcKey } from '../ssr/SsrCache.js';
|
|
2
2
|
import QueryError from './QueryError.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a NamedQuery for the given server query name.
|
|
5
|
+
*
|
|
6
|
+
* Prefer importing a graphql file instead.
|
|
7
|
+
*/
|
|
8
|
+
export function namedQuery(name) {
|
|
9
|
+
return { queryName: name };
|
|
10
|
+
}
|
|
3
11
|
/** Returns true if the passed object is a GraphQlQuery */
|
|
4
12
|
export function isQuery(obj) {
|
|
5
13
|
if (typeof obj !== 'object' || obj === null)
|
|
@@ -31,9 +39,16 @@ export default class Queries {
|
|
|
31
39
|
* @param opts options
|
|
32
40
|
* @returns
|
|
33
41
|
*/
|
|
34
|
-
static new(endpoint, frontend, ssrCache, opts = {}) {
|
|
42
|
+
static new(endpoint, frontend = null, ssrCache = new SsrCache(), opts = {}) {
|
|
35
43
|
return new Queries(new Inner(endpoint, frontend, ssrCache, opts), opts?.route ?? null, null);
|
|
36
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a new Queries instance that always intented to call an
|
|
47
|
+
* external GraphQl endpoint.
|
|
48
|
+
*/
|
|
49
|
+
static newExternal(endpoint, bearerToken) {
|
|
50
|
+
return new Queries(new Inner(endpoint, null, new SsrCache(), { bearerToken }), null, null);
|
|
51
|
+
}
|
|
37
52
|
/**
|
|
38
53
|
* Run a GraphQl Query
|
|
39
54
|
*
|
|
@@ -136,6 +151,8 @@ class Inner {
|
|
|
136
151
|
async queryNotCached(query, vars, opts) {
|
|
137
152
|
let logName, url;
|
|
138
153
|
if ('queryName' in query) {
|
|
154
|
+
if (!this.frontend)
|
|
155
|
+
throw new Error('only inline queries supported');
|
|
139
156
|
logName = `query (server: ${query.queryName})`;
|
|
140
157
|
url = new URL(this.frontend);
|
|
141
158
|
url.pathname = '/queries/' + query.queryName;
|
package/dist/queries/gql.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InlineQuery } from './Queries.js';
|
|
2
2
|
/**
|
|
3
3
|
* Create a GraphQL query string with variables.
|
|
4
4
|
* @param strings
|
|
@@ -9,5 +9,5 @@ import { Query } from './Queries.js';
|
|
|
9
9
|
* const query = gql`query ($id: ID!) { page(id: $id) { id } }`;
|
|
10
10
|
* ```
|
|
11
11
|
*/
|
|
12
|
-
export declare function gql(strings: TemplateStringsArray | string[] | string, ...keys: unknown[]):
|
|
12
|
+
export declare function gql(strings: TemplateStringsArray | string[] | string, ...keys: unknown[]): InlineQuery;
|
|
13
13
|
//# sourceMappingURL=gql.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql.d.ts","sourceRoot":"","sources":["../../src/queries/gql.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"gql.d.ts","sourceRoot":"","sources":["../../src/queries/gql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAW,MAAM,cAAc,CAAC;AAEpD;;;;;;;;;GASG;AACH,wBAAgB,GAAG,CAClB,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,GAAG,MAAM,EACjD,GAAG,IAAI,EAAE,OAAO,EAAE,GAChB,WAAW,CAuBb"}
|