crelte 0.5.15 → 0.6.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks/Blocks.svelte +5 -4
- package/dist/blocks/Blocks.svelte.d.ts +4 -19
- package/dist/blocks/Blocks.svelte.d.ts.map +1 -1
- package/dist/crelte.d.ts +2 -2
- package/dist/crelte.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/init/InternalApp.d.ts.map +1 -1
- package/dist/init/InternalApp.js +2 -2
- package/dist/init/server.js +4 -4
- package/dist/loadData/loadData.d.ts +1 -1
- package/dist/loadData/loadData.d.ts.map +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +15 -11
- package/dist/queries/Queries.d.ts +16 -27
- package/dist/queries/Queries.d.ts.map +1 -1
- package/dist/queries/Queries.js +13 -20
- package/dist/queries/gql.d.ts +2 -2
- package/dist/queries/gql.d.ts.map +1 -1
- package/dist/queries/gql.js +3 -2
- package/dist/queries/index.d.ts +13 -13
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +2 -2
- package/dist/queries/vars.d.ts +3 -3
- package/dist/queries/vars.d.ts.map +1 -1
- package/dist/queries/vars.js +3 -3
- package/dist/routing/route/BaseRoute.d.ts +4 -0
- package/dist/routing/route/BaseRoute.d.ts.map +1 -1
- package/dist/routing/route/BaseRoute.js +6 -0
- package/dist/routing/router/BaseRouter.d.ts.map +1 -1
- package/dist/routing/router/BaseRouter.js +4 -3
- package/dist/routing/router/ClientRouter.d.ts +1 -0
- package/dist/routing/router/ClientRouter.d.ts.map +1 -1
- package/dist/routing/router/ClientRouter.js +22 -7
- package/dist/server/CrelteServer.d.ts +1 -1
- package/dist/server/CrelteServer.d.ts.map +1 -1
- package/dist/server/ServerRouter.d.ts +1 -1
- package/dist/server/ServerRouter.d.ts.map +1 -1
- package/dist/server/queries/QueriesCaching.d.ts +0 -1
- package/dist/server/queries/QueriesCaching.d.ts.map +1 -1
- package/dist/server/queries/QueriesCaching.js +0 -2
- package/dist/server/queries/QueryGqlRoute.d.ts +2 -0
- package/dist/server/queries/QueryGqlRoute.d.ts.map +1 -1
- package/dist/server/queries/QueryGqlRoute.js +22 -14
- package/dist/server/queries/QueryHandleRoute.d.ts +1 -2
- package/dist/server/queries/QueryHandleRoute.d.ts.map +1 -1
- package/dist/server/queries/QueryHandleRoute.js +2 -2
- package/dist/server/queries/queries.d.ts.map +1 -1
- package/dist/server/queries/queries.js +2 -1
- package/dist/server/queries/routes.d.ts +3 -4
- package/dist/server/queries/routes.d.ts.map +1 -1
- package/dist/server/queries/routes.js +3 -3
- package/dist/server/shared.d.ts +5 -4
- package/dist/server/shared.d.ts.map +1 -1
- package/dist/server/shared.js +26 -16
- package/dist/ssr/SsrCache.d.ts +2 -2
- package/dist/ssr/SsrCache.d.ts.map +1 -1
- package/dist/ssr/SsrCache.js +10 -16
- package/dist/std/encdec/escaping.d.ts +2 -0
- package/dist/std/encdec/escaping.d.ts.map +1 -0
- package/dist/std/encdec/escaping.js +41 -0
- package/dist/std/encdec/index.d.ts +13 -0
- package/dist/std/encdec/index.d.ts.map +1 -0
- package/dist/std/encdec/index.js +15 -0
- package/dist/std/index.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +17 -0
- package/dist/vite/index.d.ts +1 -5
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +39 -79
- package/package.json +12 -7
- package/src/blocks/Blocks.svelte +4 -3
- package/src/crelte.ts +2 -2
- package/src/index.ts +2 -2
- package/src/init/InternalApp.ts +3 -4
- package/src/init/server.ts +4 -4
- package/src/loadData/loadData.ts +0 -2
- package/src/node/index.ts +24 -9
- package/src/queries/Queries.ts +31 -36
- package/src/queries/gql.ts +7 -3
- package/src/queries/index.ts +19 -16
- package/src/queries/vars.ts +5 -7
- package/src/routing/route/BaseRoute.ts +8 -7
- package/src/routing/router/BaseRouter.ts +6 -3
- package/src/routing/router/ClientRouter.ts +29 -8
- package/src/server/CrelteServer.ts +1 -1
- package/src/server/ServerRouter.ts +1 -1
- package/src/server/queries/QueriesCaching.ts +0 -2
- package/src/server/queries/QueryGqlRoute.ts +24 -20
- package/src/server/queries/QueryHandleRoute.ts +2 -6
- package/src/server/queries/queries.ts +2 -3
- package/src/server/queries/routes.ts +9 -6
- package/src/server/shared.ts +34 -16
- package/src/ssr/SsrCache.ts +13 -23
- package/src/std/encdec/escaping.ts +47 -0
- package/src/std/encdec/index.ts +16 -0
- package/src/std/index.ts +1 -6
- package/src/utils.ts +21 -0
- package/src/vite/index.ts +51 -87
- package/types.d.ts +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escaping.d.ts","sourceRoot":"","sources":["../../../src/std/encdec/escaping.ts"],"names":[],"mappings":"AA2BA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,OAAe,UAmBhE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code from Svelte (https://github.com/sveltejs/svelte/blob/b4968584df6be22222f58c273bdd8e04307ad36b/packages/svelte/src/escaping.js)
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2016-24 these people (https://github.com/sveltejs/svelte/graphs/contributors)
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
* copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
const ATTR_REGEX = /[&"<]/g;
|
|
25
|
+
const CONTENT_REGEX = /[&<]/g;
|
|
26
|
+
export function escape_html(value, is_attr = false) {
|
|
27
|
+
const str = String(value ?? '');
|
|
28
|
+
const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;
|
|
29
|
+
pattern.lastIndex = 0;
|
|
30
|
+
let escaped = '';
|
|
31
|
+
let last = 0;
|
|
32
|
+
while (pattern.test(str)) {
|
|
33
|
+
const i = pattern.lastIndex - 1;
|
|
34
|
+
const ch = str[i];
|
|
35
|
+
escaped +=
|
|
36
|
+
str.substring(last, i) +
|
|
37
|
+
(ch === '&' ? '&' : ch === '"' ? '"' : '<');
|
|
38
|
+
last = i + 1;
|
|
39
|
+
}
|
|
40
|
+
return escaped + str.substring(last);
|
|
41
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert newlines to <br> tags and escape HTML.
|
|
3
|
+
*
|
|
4
|
+
* #### Warning
|
|
5
|
+
* When used in an attribute, the `isAttr` parameter needs to be set to `true`.
|
|
6
|
+
*
|
|
7
|
+
* #### Example
|
|
8
|
+
* ```svelte
|
|
9
|
+
* {@html nl2br("Hello\nWorld")}
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare function nl2br(str: string, isAttr?: boolean): string;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/std/encdec/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { escape_html } from './escaping.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert newlines to <br> tags and escape HTML.
|
|
4
|
+
*
|
|
5
|
+
* #### Warning
|
|
6
|
+
* When used in an attribute, the `isAttr` parameter needs to be set to `true`.
|
|
7
|
+
*
|
|
8
|
+
* #### Example
|
|
9
|
+
* ```svelte
|
|
10
|
+
* {@html nl2br("Hello\nWorld")}
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export function nl2br(str, isAttr = false) {
|
|
14
|
+
return escape_html(str, isAttr).replace(/\n/g, '<br>');
|
|
15
|
+
}
|
package/dist/std/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/std/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/std/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC/B,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,oBAAoB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAIjE"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export declare function isPromise<T>(p: Promise<T> | T): p is Promise<T>;
|
|
|
10
10
|
*/
|
|
11
11
|
export declare function promiseThen<T, R = void>(p: Promise<T> | T, then: (val: T) => R): Promise<R> | R;
|
|
12
12
|
export declare function urlWithPath(url: string, path?: string): URL;
|
|
13
|
+
export declare function cryptoSha1Hash(str: string): Promise<string>;
|
|
13
14
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAMtC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EACtC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACjB,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GACjB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAI3D"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAMtC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EACtC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACjB,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GACjB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhB;AAGD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAI3D;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBjE"}
|
package/dist/utils.js
CHANGED
|
@@ -26,3 +26,20 @@ export function urlWithPath(url, path) {
|
|
|
26
26
|
u.pathname = path ?? '';
|
|
27
27
|
return u;
|
|
28
28
|
}
|
|
29
|
+
export async function cryptoSha1Hash(str) {
|
|
30
|
+
// Convert the string data to an ArrayBuffer
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
const dataBuffer = encoder.encode(str);
|
|
33
|
+
// Use the Web Crypto API to hash the data with SHA-1
|
|
34
|
+
const hashBuffer = await crypto.subtle.digest('SHA-1', dataBuffer);
|
|
35
|
+
const bytes = new Uint8Array(hashBuffer);
|
|
36
|
+
// @ts-ignore using 2025 baseline feature
|
|
37
|
+
if (typeof bytes.toHex === 'function')
|
|
38
|
+
return bytes.toHex();
|
|
39
|
+
// Convert the ArrayBuffer to a hex string
|
|
40
|
+
const hashArray = Array.from(bytes); // Create an array from the buffer
|
|
41
|
+
const hashHex = hashArray
|
|
42
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
43
|
+
.join(''); // Convert to hex string
|
|
44
|
+
return hashHex;
|
|
45
|
+
}
|
package/dist/vite/index.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
export
|
|
3
|
-
/** If not specified tries to detect which version is installed */
|
|
4
|
-
svelte4?: boolean;
|
|
5
|
-
};
|
|
6
|
-
export default function crelte(opts?: CrelteOptions): Plugin;
|
|
2
|
+
export default function crelte(): Plugin;
|
|
7
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/vite/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,MAAM,EAON,MAAM,MAAM,CAAC;AAyHd,MAAM,CAAC,OAAO,UAAU,MAAM,IAAI,MAAM,CA4JvC"}
|
package/dist/vite/index.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { relative } from 'node:path';
|
|
2
|
-
import MagicString from 'magic-string';
|
|
3
2
|
import { build as viteBuild, } from 'vite';
|
|
4
3
|
import fs from 'node:fs/promises';
|
|
5
|
-
import { initEnvData, initSites, modRender, modRenderError, } from '../server/shared.js';
|
|
4
|
+
import { initEnvData, initSites, initRequestSites, modRender, modRenderError, } from '../server/shared.js';
|
|
6
5
|
import ServerRouter from '../server/ServerRouter.js';
|
|
7
|
-
import sveltePackage from 'svelte/package.json' with { type: 'json' };
|
|
8
6
|
import { initQueryRoutes } from '../server/queries/queries.js';
|
|
9
7
|
import { PLATFORM, requestToWebRequest, webResponseToResponse, } from '../node/utils.js';
|
|
10
8
|
import QueryError from '../queries/QueryError.js';
|
|
9
|
+
import { generateTransform, rolldownString, } from 'rolldown-string';
|
|
11
10
|
const VIRT_MOD_ID = 'virtual:crelte/svelteComponents';
|
|
12
11
|
const RESOLVED_VIRT_MOD_ID = '\0' + VIRT_MOD_ID;
|
|
13
12
|
async function readFile(path) {
|
|
@@ -17,41 +16,31 @@ async function readFile(path) {
|
|
|
17
16
|
// todo need to find a better solution
|
|
18
17
|
// for reference https://github.com/sveltejs/svelte/issues/4854
|
|
19
18
|
// and https://github.com/sveltejs/svelte/pull/5476
|
|
20
|
-
function usedSsrComponents(code, id, options
|
|
19
|
+
function usedSsrComponents(code, id, options) {
|
|
21
20
|
if (!options?.ssr || !id.endsWith('.svelte'))
|
|
22
21
|
return;
|
|
23
22
|
const file = relative('.', id);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
console.error('could not find svelte5 init', id);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const renderCompSign = '$$renderer.component(($$renderer) => {';
|
|
38
|
-
const renderCompIdx = code.indexOf(renderCompSign, idx);
|
|
39
|
-
if (renderCompIdx >= 0)
|
|
40
|
-
idx = renderCompIdx;
|
|
41
|
-
// Find the end of the line where the pattern was found
|
|
42
|
-
idx = code.indexOf('\n', idx);
|
|
43
|
-
if (idx < 0)
|
|
44
|
-
return;
|
|
45
|
-
idx += 1; // \n
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const initFnSign = 'create_ssr_component(($$result, $$props, $$bindings, slots) => {';
|
|
49
|
-
idx = code.indexOf(initFnSign);
|
|
50
|
-
if (idx < 0)
|
|
51
|
-
return;
|
|
52
|
-
idx += initFnSign.length;
|
|
23
|
+
const defFnSign = 'export default function ';
|
|
24
|
+
let idx = code.indexOf(defFnSign);
|
|
25
|
+
if (idx < 0)
|
|
26
|
+
return;
|
|
27
|
+
const withPropsIdx = code.indexOf('($$renderer, $$props) {', idx);
|
|
28
|
+
const noPropsIdx = code.indexOf('($$renderer) {', idx);
|
|
29
|
+
idx = withPropsIdx >= 0 ? withPropsIdx : noPropsIdx;
|
|
30
|
+
if (idx < 0) {
|
|
31
|
+
console.error('could not find svelte5 init', id);
|
|
32
|
+
return;
|
|
53
33
|
}
|
|
54
|
-
const
|
|
34
|
+
const renderCompSign = '$$renderer.component(($$renderer) => {';
|
|
35
|
+
const renderCompIdx = code.indexOf(renderCompSign, idx);
|
|
36
|
+
if (renderCompIdx >= 0)
|
|
37
|
+
idx = renderCompIdx;
|
|
38
|
+
// Find the end of the line where the pattern was found
|
|
39
|
+
idx = code.indexOf('\n', idx);
|
|
40
|
+
if (idx < 0)
|
|
41
|
+
return;
|
|
42
|
+
idx += 1; // \n
|
|
43
|
+
const s = rolldownString(code, id, options);
|
|
55
44
|
s.prepend(`import { getContext as __modulesGetContext } from 'svelte';\n`);
|
|
56
45
|
const ctxAdd = `
|
|
57
46
|
(() => {
|
|
@@ -62,14 +51,7 @@ if (ctx && ctx instanceof Set) {
|
|
|
62
51
|
})();
|
|
63
52
|
`;
|
|
64
53
|
s.appendLeft(idx, ctxAdd);
|
|
65
|
-
return
|
|
66
|
-
map: s.generateMap({
|
|
67
|
-
source: id,
|
|
68
|
-
includeContent: true,
|
|
69
|
-
hires: 'boundary',
|
|
70
|
-
}),
|
|
71
|
-
code: s.toString(),
|
|
72
|
-
};
|
|
54
|
+
return generateTransform(s, id);
|
|
73
55
|
}
|
|
74
56
|
// transform graphql files into a GraphQlQuery which can called with
|
|
75
57
|
// crelte.query or graphQl.query
|
|
@@ -82,18 +64,14 @@ function graphQlFiles(code, path, ssr) {
|
|
|
82
64
|
const name = filename.substring(0, filename.length - '.graphql'.length);
|
|
83
65
|
if (!ssr) {
|
|
84
66
|
return `
|
|
85
|
-
export default {
|
|
86
|
-
queryName: ${JSON.stringify(name)}
|
|
87
|
-
};
|
|
67
|
+
export default ${JSON.stringify(name)};
|
|
88
68
|
`;
|
|
89
69
|
}
|
|
90
70
|
const json = JSON.stringify(code)
|
|
91
71
|
.replace(/\u2028/g, '\\u2028')
|
|
92
72
|
.replace(/\u2029/g, '\\u2029');
|
|
93
73
|
return `
|
|
94
|
-
export default {
|
|
95
|
-
queryName: ${JSON.stringify(name)}
|
|
96
|
-
};
|
|
74
|
+
export default ${JSON.stringify(name)};
|
|
97
75
|
|
|
98
76
|
export const query = {
|
|
99
77
|
path: ${JSON.stringify(path)},
|
|
@@ -101,21 +79,12 @@ export const query = {
|
|
|
101
79
|
};
|
|
102
80
|
`;
|
|
103
81
|
}
|
|
104
|
-
function isSvelte5() {
|
|
105
|
-
if (sveltePackage && sveltePackage.version) {
|
|
106
|
-
return sveltePackage.version.startsWith('5.');
|
|
107
|
-
}
|
|
108
|
-
// Fallback or error handling if version cannot be determined
|
|
109
|
-
console.warn('Could not determine Svelte version. Assuming not Svelte 5.');
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
82
|
// outside of crelte because each build executes crelte again
|
|
113
83
|
let isSsrBuild = false;
|
|
114
|
-
export default function crelte(
|
|
84
|
+
export default function crelte() {
|
|
115
85
|
let viteConfig;
|
|
116
86
|
let viteConfigEnv;
|
|
117
87
|
let initialConfig;
|
|
118
|
-
const svelte5 = opts?.svelte4 ? false : isSvelte5();
|
|
119
88
|
return {
|
|
120
89
|
name: 'crelte',
|
|
121
90
|
config(config, configEnv) {
|
|
@@ -167,28 +136,18 @@ export default function crelte(opts) {
|
|
|
167
136
|
`createServer(server, ${Date.now()});`);
|
|
168
137
|
}
|
|
169
138
|
if (id === RESOLVED_VIRT_MOD_ID) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
`}`);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
return (`export function internalSvelteMount(comp, options) {` +
|
|
182
|
-
`return new comp({ ...options, hydrate: true });` +
|
|
183
|
-
`}` +
|
|
184
|
-
`export function internalSvelteRender(comp, options) {` +
|
|
185
|
-
`return comp.render(options.props, options);` +
|
|
186
|
-
`}`);
|
|
187
|
-
}
|
|
139
|
+
return (`import { hydrate } from 'svelte';` +
|
|
140
|
+
`import { render } from 'svelte/server';` +
|
|
141
|
+
`export function internalSvelteMount(comp, options) {` +
|
|
142
|
+
`return hydrate(comp, options);` +
|
|
143
|
+
`}` +
|
|
144
|
+
`export function internalSvelteRender(comp, options) {` +
|
|
145
|
+
`return render(comp, options);` +
|
|
146
|
+
`}`);
|
|
188
147
|
}
|
|
189
148
|
},
|
|
190
149
|
transform(code, id, options) {
|
|
191
|
-
return (usedSsrComponents(code, id, options
|
|
150
|
+
return (usedSsrComponents(code, id, options) ||
|
|
192
151
|
graphQlFiles(code, id, !!options?.ssr));
|
|
193
152
|
},
|
|
194
153
|
async configureServer(vite) {
|
|
@@ -264,7 +223,8 @@ async function serveVite(env, vite) {
|
|
|
264
223
|
if (!sites) {
|
|
265
224
|
sites = await initSites(env);
|
|
266
225
|
}
|
|
267
|
-
const
|
|
226
|
+
const requestSites = await initRequestSites(env, sites, req);
|
|
227
|
+
const router = new ServerRouter(env.endpointUrl, env.frontendUrl, env.env, requestSites, { endpointToken: env.endpointToken });
|
|
268
228
|
await initQueryRoutes(PLATFORM, serverMod, router);
|
|
269
229
|
if (typeof serverMod.routes === 'function') {
|
|
270
230
|
await serverMod.routes(router);
|
|
@@ -291,7 +251,7 @@ async function serveVite(env, vite) {
|
|
|
291
251
|
await webResponseToResponse(errorResp, res);
|
|
292
252
|
return;
|
|
293
253
|
}
|
|
294
|
-
const response = await modRender(env,
|
|
254
|
+
const response = await modRender(env, requestSites, serverMod, template, req);
|
|
295
255
|
await webResponseToResponse(response, res);
|
|
296
256
|
};
|
|
297
257
|
vite.middlewares.use(async (nReq, res, next) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crelte",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-alpha.2",
|
|
4
4
|
"author": "Crelte <support@crelte.com>",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -111,22 +111,27 @@
|
|
|
111
111
|
"./std/url": {
|
|
112
112
|
"types": "./dist/std/url/index.d.ts",
|
|
113
113
|
"default": "./dist/std/url/index.js"
|
|
114
|
+
},
|
|
115
|
+
"./std/encdec": {
|
|
116
|
+
"types": "./dist/std/encdec/index.d.ts",
|
|
117
|
+
"default": "./dist/std/encdec/index.js"
|
|
114
118
|
}
|
|
115
119
|
},
|
|
116
120
|
"dependencies": {
|
|
117
|
-
"
|
|
121
|
+
"devalue": "^5.9.0",
|
|
122
|
+
"rolldown-string": "^0.3.1",
|
|
118
123
|
"trouter": "^4.0.0"
|
|
119
124
|
},
|
|
120
125
|
"peerDependencies": {
|
|
121
|
-
"svelte": "^
|
|
122
|
-
"vite": "^
|
|
126
|
+
"svelte": "^5.39.1",
|
|
127
|
+
"vite": "^8.0.0"
|
|
123
128
|
},
|
|
124
129
|
"devDependencies": {
|
|
125
130
|
"@sveltejs/package": "^2.3.1",
|
|
126
|
-
"@sveltejs/vite-plugin-svelte": "^
|
|
131
|
+
"@sveltejs/vite-plugin-svelte": "^7.0.0",
|
|
132
|
+
"@types/node": "^22.13.10",
|
|
127
133
|
"svelte-check": "^4.1.4",
|
|
128
134
|
"typescript-svelte-plugin": "^0.3.45",
|
|
129
|
-
"vitest": "^
|
|
130
|
-
"@types/node": "^22.13.10"
|
|
135
|
+
"vitest": "^4.0.0"
|
|
131
136
|
}
|
|
132
137
|
}
|
package/src/blocks/Blocks.svelte
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { type BlocksInstance } from './index.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// eslint-disable-next-line svelte/valid-compile
|
|
5
|
+
let { blocks, ...rest }: { blocks: BlocksInstance } = $props();
|
|
5
6
|
</script>
|
|
6
7
|
|
|
7
|
-
{#each blocks.each() as { mod, props }}
|
|
8
|
-
<
|
|
8
|
+
{#each blocks.each() as { mod: Mod, props }}
|
|
9
|
+
<Mod {...props} {...rest} />
|
|
9
10
|
{/each}
|
package/src/crelte.ts
CHANGED
|
@@ -127,10 +127,10 @@ export type Crelte = {
|
|
|
127
127
|
/**
|
|
128
128
|
* returns an env variable from the craft/.env file.
|
|
129
129
|
* All env variables need to start with VITE_
|
|
130
|
-
* except ENDPOINT_URL,
|
|
130
|
+
* except ENDPOINT_URL, CRAFT_BASE_CP_URL and FRONTEND_URL
|
|
131
131
|
*/
|
|
132
132
|
getEnv(name: 'ENDPOINT_URL'): string;
|
|
133
|
-
getEnv(name: '
|
|
133
|
+
getEnv(name: 'CRAFT_BASE_CP_URL'): string;
|
|
134
134
|
getEnv(name: 'FRONTEND_URL'): string;
|
|
135
135
|
getEnv(name: string): string | null;
|
|
136
136
|
|
package/src/index.ts
CHANGED
|
@@ -125,13 +125,13 @@ export function getEntry(): Readable<Entry> {
|
|
|
125
125
|
/**
|
|
126
126
|
* returns an env variable from the craft/.env file.
|
|
127
127
|
* All env variables need to start with VITE_
|
|
128
|
-
* except ENDPOINT_URL,
|
|
128
|
+
* except ENDPOINT_URL, CRAFT_BASE_CP_URL and FRONTEND_URL
|
|
129
129
|
*
|
|
130
130
|
* #### Note
|
|
131
131
|
* This only works during component initialisation.
|
|
132
132
|
*/
|
|
133
133
|
export function getEnv(name: 'ENDPOINT_URL'): string;
|
|
134
|
-
export function getEnv(name: '
|
|
134
|
+
export function getEnv(name: 'CRAFT_BASE_CP_URL'): string;
|
|
135
135
|
export function getEnv(name: 'FRONTEND_URL'): string;
|
|
136
136
|
export function getEnv(name: string): string | null;
|
|
137
137
|
export function getEnv(name: string): string | null {
|
package/src/init/InternalApp.ts
CHANGED
|
@@ -27,8 +27,7 @@ export interface TemplateModule {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type LazyTemplateModule =
|
|
30
|
-
|
|
31
|
-
| TemplateModule;
|
|
30
|
+
(() => Promise<TemplateModule>) | TemplateModule;
|
|
32
31
|
|
|
33
32
|
export type TemplateModules = Map<string, LazyTemplateModule>;
|
|
34
33
|
|
|
@@ -54,7 +53,7 @@ export default class InternalApp {
|
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
get loadGlobalData(): LoadData<null> {
|
|
57
|
-
return this.inner.loadGlobalData ??
|
|
56
|
+
return this.inner.loadGlobalData ?? 'global';
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
init(crelte: Crelte): void {
|
|
@@ -63,7 +62,7 @@ export default class InternalApp {
|
|
|
63
62
|
|
|
64
63
|
get loadEntry(): LoadData<null> {
|
|
65
64
|
// if no loadEntry property was defined we expect a graphql entry file
|
|
66
|
-
return this.inner.loadEntry ??
|
|
65
|
+
return this.inner.loadEntry ?? 'entry';
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
async loadTemplate(entry: Entry): Promise<TemplateModule> {
|
package/src/init/server.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
setupPlugins,
|
|
8
8
|
} from './shared.js';
|
|
9
9
|
import SsrComponents from '../ssr/SsrComponents.js';
|
|
10
|
-
import SsrCache from '../ssr/SsrCache.js';
|
|
10
|
+
import SsrCache, { ssrCacheExportToHead } from '../ssr/SsrCache.js';
|
|
11
11
|
import ServerCookies from '../cookies/ServerCookies.js';
|
|
12
12
|
import { svelteRender } from './svelteComponents.js';
|
|
13
13
|
import ServerRouter from '../routing/router/ServerRouter.js';
|
|
@@ -74,7 +74,7 @@ export async function main(data: MainData): Promise<RenderResponse> {
|
|
|
74
74
|
|
|
75
75
|
const endpoint = data.serverData.endpoint;
|
|
76
76
|
ssrCache.set('ENDPOINT_URL', endpoint);
|
|
77
|
-
ssrCache.set('
|
|
77
|
+
ssrCache.set('CRAFT_BASE_CP_URL', data.serverData.craftUrl);
|
|
78
78
|
ssrCache.set('FRONTEND_URL', data.serverData.frontend);
|
|
79
79
|
|
|
80
80
|
const cookies = new ServerCookies(data.serverData.headers);
|
|
@@ -154,7 +154,7 @@ export async function main(data: MainData): Promise<RenderResponse> {
|
|
|
154
154
|
|
|
155
155
|
bodyClass.z_populateSsrCache(ssrCache);
|
|
156
156
|
head += ssrComponents.toHead(data.serverData.ssrManifest);
|
|
157
|
-
head += crelte.ssrCache
|
|
157
|
+
head += ssrCacheExportToHead(crelte.ssrCache);
|
|
158
158
|
|
|
159
159
|
let htmlTemplate = data.serverData.htmlTemplate;
|
|
160
160
|
htmlTemplate = htmlTemplate.replace(
|
|
@@ -234,7 +234,7 @@ export async function mainError(
|
|
|
234
234
|
});
|
|
235
235
|
|
|
236
236
|
head += ssrComponents.toHead(data.serverData.ssrManifest);
|
|
237
|
-
head += ssrCache
|
|
237
|
+
head += ssrCacheExportToHead(ssrCache);
|
|
238
238
|
|
|
239
239
|
let htmlTemplate = data.serverData.htmlTemplate;
|
|
240
240
|
htmlTemplate = htmlTemplate.replace('<!--page-lang-->', 'de');
|
package/src/loadData/loadData.ts
CHANGED
package/src/node/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
EnvData,
|
|
7
7
|
initEnvData,
|
|
8
8
|
initSites,
|
|
9
|
+
initRequestSites,
|
|
9
10
|
modRender,
|
|
10
11
|
modRenderError,
|
|
11
12
|
} from '../server/shared.js';
|
|
@@ -37,12 +38,15 @@ async function writeSitesCache(data: any): Promise<void> {
|
|
|
37
38
|
async function initRouter(
|
|
38
39
|
serverMod: any,
|
|
39
40
|
env: EnvData,
|
|
41
|
+
sites?: SiteFromGraphQl[],
|
|
40
42
|
): Promise<[SiteFromGraphQl[], ServerRouter]> {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
if (!sites) {
|
|
44
|
+
sites = await initSites(env, {
|
|
45
|
+
enabled: process.env.NODE_ENV === 'production',
|
|
46
|
+
writeSitesCache,
|
|
47
|
+
readSitesCache,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
46
50
|
|
|
47
51
|
const router = new ServerRouter(
|
|
48
52
|
env.endpointUrl,
|
|
@@ -113,7 +117,13 @@ export default async function createServer(serverMod: any, buildTime: string) {
|
|
|
113
117
|
throw routesError ?? new Error('Router not initialized');
|
|
114
118
|
}
|
|
115
119
|
|
|
116
|
-
const
|
|
120
|
+
const requestSites = await initRequestSites(env, sites, req);
|
|
121
|
+
const requestRouter =
|
|
122
|
+
requestSites === sites
|
|
123
|
+
? router
|
|
124
|
+
: (await initRouter(serverMod, env, requestSites))[1];
|
|
125
|
+
|
|
126
|
+
const routeResp = await requestRouter.z_handle(req);
|
|
117
127
|
if (routeResp) {
|
|
118
128
|
await webResponseToResponse(routeResp, res);
|
|
119
129
|
return;
|
|
@@ -121,9 +131,14 @@ export default async function createServer(serverMod: any, buildTime: string) {
|
|
|
121
131
|
|
|
122
132
|
if (await basicAuthCheck(req, res, env)) return;
|
|
123
133
|
|
|
124
|
-
const response = await modRender(
|
|
125
|
-
|
|
126
|
-
|
|
134
|
+
const response = await modRender(
|
|
135
|
+
env,
|
|
136
|
+
requestSites,
|
|
137
|
+
serverMod,
|
|
138
|
+
template,
|
|
139
|
+
req,
|
|
140
|
+
{ ssrManifest },
|
|
141
|
+
);
|
|
127
142
|
await webResponseToResponse(response, res);
|
|
128
143
|
};
|
|
129
144
|
|