crelte 0.5.12 → 0.5.13
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.d.ts +1 -1
- package/dist/blocks/Blocks.d.ts.map +1 -1
- package/dist/bodyClass/BodyClass.d.ts +18 -1
- package/dist/bodyClass/BodyClass.d.ts.map +1 -1
- package/dist/bodyClass/BodyClass.js +21 -2
- package/dist/bodyClass/ClientBodyClass.d.ts +7 -2
- package/dist/bodyClass/ClientBodyClass.d.ts.map +1 -1
- package/dist/bodyClass/ClientBodyClass.js +29 -15
- package/dist/bodyClass/ServerBodyClass.d.ts +7 -1
- package/dist/bodyClass/ServerBodyClass.d.ts.map +1 -1
- package/dist/bodyClass/ServerBodyClass.js +19 -5
- package/dist/bodyClass/utils.d.ts +39 -0
- package/dist/bodyClass/utils.d.ts.map +1 -0
- package/dist/bodyClass/utils.js +84 -0
- package/dist/crelte.d.ts.map +1 -1
- package/dist/crelte.js +2 -0
- package/dist/init/client.js +1 -1
- package/dist/init/server.d.ts.map +1 -1
- package/dist/init/server.js +1 -0
- package/dist/init/shared.d.ts.map +1 -1
- package/dist/init/shared.js +3 -0
- package/dist/loadData/entry.d.ts +11 -2
- package/dist/loadData/entry.d.ts.map +1 -1
- package/dist/loadData/entry.js +11 -2
- package/dist/queries/index.d.ts +1 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/server/queries/QueryGqlRoute.d.ts.map +1 -1
- package/dist/server/queries/QueryGqlRoute.js +3 -3
- package/dist/server/queries/routes.d.ts +1 -1
- package/dist/server/queries/routes.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/blocks/Blocks.ts +1 -1
- package/src/bodyClass/BodyClass.ts +25 -3
- package/src/bodyClass/ClientBodyClass.ts +37 -20
- package/src/bodyClass/ServerBodyClass.ts +28 -7
- package/src/bodyClass/utils.ts +118 -0
- package/src/crelte.ts +3 -0
- package/src/init/client.ts +1 -1
- package/src/init/server.ts +1 -0
- package/src/init/shared.ts +3 -0
- package/src/loadData/entry.ts +12 -2
- package/src/queries/index.ts +5 -1
- package/src/server/queries/QueryGqlRoute.ts +3 -2
- package/src/server/queries/routes.ts +1 -0
package/dist/blocks/Blocks.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export declare class BlockModules {
|
|
|
58
58
|
* );
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
|
-
export declare function blockModules(modules: Record<string,
|
|
61
|
+
export declare function blockModules(modules: Record<string, (() => Promise<any>) | Module>, opts?: BlockModulesOptions): BlockModules;
|
|
62
62
|
/**
|
|
63
63
|
* Load blocks data
|
|
64
64
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blocks.d.ts","sourceRoot":"","sources":["../../src/blocks/Blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,MAAM;IACtB,uBAAuB;IACvB,OAAO,EAAE,GAAG,CAAC;IAEb,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,EAAE,CACV,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,YAAY,KACd,OAAO,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,qBAAa,YAAY;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAG1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,IAAI,GAAE,mBAAwB;IAgC/B;;;;OAIG;IACG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAmBtE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"Blocks.d.ts","sourceRoot":"","sources":["../../src/blocks/Blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,MAAM;IACtB,uBAAuB;IACvB,OAAO,EAAE,GAAG,CAAC;IAEb,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,QAAQ,CAAC,EAAE,CACV,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,YAAY,KACd,OAAO,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG;IAC1B;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,qBAAa,YAAY;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAG1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,IAAI,GAAE,mBAAwB;IAgC/B;;;;OAIG;IACG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAmBtE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EACtD,IAAI,GAAE,mBAAwB,GAC5B,YAAY,CAEd;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CACnC,EAAE,EAAE,aAAa,EACjB,MAAM,EAAE,GAAG,EAAE,EACb,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC9B,MAAM,EAAE,GAAG,EAAE,EACb,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,cAAc,CAAC,CAazB;AAED,MAAM,CAAC,OAAO,OAAO,cAAc;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEjB,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAMjD,QAAQ,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,EAAE;CAclC"}
|
|
@@ -22,7 +22,23 @@ export default class BodyClass {
|
|
|
22
22
|
* it.
|
|
23
23
|
*/
|
|
24
24
|
toggle(cls: string, force?: boolean): void;
|
|
25
|
+
/**
|
|
26
|
+
* Removes the given classes from the body
|
|
27
|
+
*/
|
|
25
28
|
remove(...classes: string[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Sets the class for the given variant removing the old class for that
|
|
31
|
+
* variant, if cls is null it will remove the variant class
|
|
32
|
+
*
|
|
33
|
+
* If you just have like a dark or light mode and only for the dark mode a
|
|
34
|
+
* class, **prefer** `toggle('dark', isDarkMode)` over
|
|
35
|
+
* `setVariant('mode', isDarkMode ? 'dark' : null)`
|
|
36
|
+
*
|
|
37
|
+
* ## Note
|
|
38
|
+
* The variant name is only used for the internal state management
|
|
39
|
+
* and has no inpact on the actual class name
|
|
40
|
+
*/
|
|
41
|
+
setVariant(variant: string, cls: string | null): void;
|
|
26
42
|
/** @hidden */
|
|
27
43
|
z_toRequest(): BodyClass;
|
|
28
44
|
/** @hidden */
|
|
@@ -31,8 +47,9 @@ export default class BodyClass {
|
|
|
31
47
|
export interface PlatformBodyClass {
|
|
32
48
|
contains(cls: string): boolean;
|
|
33
49
|
add(...classes: string[]): void;
|
|
34
|
-
toggle(cls: string, force?: boolean):
|
|
50
|
+
toggle(cls: string, force?: boolean): boolean;
|
|
35
51
|
remove(...classes: string[]): void;
|
|
52
|
+
setVariant(variant: string, cls: string | null): boolean;
|
|
36
53
|
toRequest(): PlatformBodyClass;
|
|
37
54
|
render?: () => void;
|
|
38
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/BodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,SAAS;IAC7B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlE,SAAS,CACR,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,EAC5B,UAAU,CAAC,EAAE,MAAM,IAAI,GACrB,MAAM,IAAI;IAIb;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"BodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/BodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,SAAS;IAC7B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,KAAK,CAAuB;gBAExB,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC;IAKlE,SAAS,CACR,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,EAC5B,UAAU,CAAC,EAAE,MAAM,IAAI,GACrB,MAAM,IAAI;IAIb;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B;;;;;;;;OAQG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAI1C;;OAEG;IACH,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIrD,cAAc;IACd,WAAW,IAAI,SAAS;IAIxB,cAAc;IACd,QAAQ,IAAI,IAAI;CAIhB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAGhC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9C,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEnC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IACzD,SAAS,IAAI,iBAAiB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB"}
|
|
@@ -32,13 +32,32 @@ export default class BodyClass {
|
|
|
32
32
|
* it.
|
|
33
33
|
*/
|
|
34
34
|
toggle(cls, force) {
|
|
35
|
-
this.inner.toggle(cls, force)
|
|
36
|
-
|
|
35
|
+
if (this.inner.toggle(cls, force))
|
|
36
|
+
this.store.set();
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Removes the given classes from the body
|
|
40
|
+
*/
|
|
38
41
|
remove(...classes) {
|
|
39
42
|
this.inner.remove(...classes);
|
|
40
43
|
this.store.set();
|
|
41
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Sets the class for the given variant removing the old class for that
|
|
47
|
+
* variant, if cls is null it will remove the variant class
|
|
48
|
+
*
|
|
49
|
+
* If you just have like a dark or light mode and only for the dark mode a
|
|
50
|
+
* class, **prefer** `toggle('dark', isDarkMode)` over
|
|
51
|
+
* `setVariant('mode', isDarkMode ? 'dark' : null)`
|
|
52
|
+
*
|
|
53
|
+
* ## Note
|
|
54
|
+
* The variant name is only used for the internal state management
|
|
55
|
+
* and has no inpact on the actual class name
|
|
56
|
+
*/
|
|
57
|
+
setVariant(variant, cls) {
|
|
58
|
+
if (this.inner.setVariant(variant, cls))
|
|
59
|
+
this.store.set();
|
|
60
|
+
}
|
|
42
61
|
/** @hidden */
|
|
43
62
|
z_toRequest() {
|
|
44
63
|
return new BodyClass(this.inner.toRequest(), this.store.stage());
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
1
2
|
import { PlatformBodyClass } from './BodyClass.js';
|
|
3
|
+
import { ClassSet, Variants } from './utils.js';
|
|
2
4
|
export default class ClientBodyClass implements PlatformBodyClass {
|
|
5
|
+
private variants;
|
|
3
6
|
private inner;
|
|
4
|
-
constructor(inner?:
|
|
7
|
+
constructor(variants: Variants, inner?: ClassSet);
|
|
8
|
+
static fromSsrCache(ssrCache: SsrCache): ClientBodyClass;
|
|
5
9
|
contains(cls: string): boolean;
|
|
6
10
|
add(...classes: string[]): void;
|
|
7
|
-
toggle(cls: string, force?: boolean):
|
|
11
|
+
toggle(cls: string, force?: boolean): boolean;
|
|
8
12
|
remove(...classes: string[]): void;
|
|
13
|
+
setVariant(variant: string, cls: string | null): boolean;
|
|
9
14
|
toRequest(): ClientBodyClass;
|
|
10
15
|
render(): void;
|
|
11
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientBodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/ClientBodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ClientBodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/ClientBodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAsB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,KAAK,CAAkB;gBAEnB,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,QAAQ;IAKhD,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe;IAKxD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK9B,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAM/B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAe7C,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAWxD,SAAS,IAAI,eAAe;IAK5B,MAAM,IAAI,IAAI;CAQd"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import { ClassSet, ssrCacheToVariants } from './utils.js';
|
|
1
2
|
export default class ClientBodyClass {
|
|
3
|
+
variants;
|
|
4
|
+
// during the request store the classes here
|
|
2
5
|
inner;
|
|
3
|
-
constructor(inner) {
|
|
6
|
+
constructor(variants, inner) {
|
|
7
|
+
this.variants = variants;
|
|
4
8
|
this.inner = inner ?? null;
|
|
5
9
|
}
|
|
10
|
+
static fromSsrCache(ssrCache) {
|
|
11
|
+
const variants = ssrCacheToVariants(ssrCache);
|
|
12
|
+
return new ClientBodyClass(variants);
|
|
13
|
+
}
|
|
6
14
|
contains(cls) {
|
|
7
15
|
if (this.inner)
|
|
8
16
|
return this.inner.has(cls);
|
|
@@ -14,10 +22,13 @@ export default class ClientBodyClass {
|
|
|
14
22
|
else
|
|
15
23
|
cl().add(...classes);
|
|
16
24
|
}
|
|
25
|
+
// returns true if the value was changed
|
|
17
26
|
toggle(cls, force) {
|
|
27
|
+
const exists = this.contains(cls);
|
|
28
|
+
const shouldExist = typeof force === 'boolean' ? force : !exists;
|
|
29
|
+
const changed = shouldExist !== exists;
|
|
18
30
|
if (this.inner) {
|
|
19
|
-
|
|
20
|
-
if (add)
|
|
31
|
+
if (shouldExist)
|
|
21
32
|
this.inner.add(cls);
|
|
22
33
|
else
|
|
23
34
|
this.inner.delete(cls);
|
|
@@ -25,6 +36,7 @@ export default class ClientBodyClass {
|
|
|
25
36
|
else {
|
|
26
37
|
cl().toggle(cls, force);
|
|
27
38
|
}
|
|
39
|
+
return changed;
|
|
28
40
|
}
|
|
29
41
|
remove(...classes) {
|
|
30
42
|
if (this.inner)
|
|
@@ -32,24 +44,26 @@ export default class ClientBodyClass {
|
|
|
32
44
|
else
|
|
33
45
|
cl().remove(...classes);
|
|
34
46
|
}
|
|
47
|
+
setVariant(variant, cls) {
|
|
48
|
+
if (this.inner)
|
|
49
|
+
return this.inner.setVariant(variant, cls);
|
|
50
|
+
const { remove, add } = this.variants.set(variant, cls);
|
|
51
|
+
if (remove)
|
|
52
|
+
cl().remove(remove);
|
|
53
|
+
if (add)
|
|
54
|
+
cl().add(add);
|
|
55
|
+
return !!remove || !!add;
|
|
56
|
+
}
|
|
35
57
|
toRequest() {
|
|
36
|
-
const inner = new
|
|
37
|
-
return new ClientBodyClass(inner);
|
|
58
|
+
const inner = new ClassSet(cl(), this.variants.entries(), true);
|
|
59
|
+
return new ClientBodyClass(this.variants, inner);
|
|
38
60
|
}
|
|
39
61
|
render() {
|
|
40
62
|
if (!this.inner)
|
|
41
63
|
throw new Error('call toRequest first');
|
|
42
|
-
const
|
|
43
|
-
for (const cls of this.inner) {
|
|
44
|
-
const existed = current.delete(cls);
|
|
45
|
-
if (!existed)
|
|
46
|
-
cl().add(cls);
|
|
47
|
-
}
|
|
48
|
-
// now lets remove all classes that still exist in current
|
|
49
|
-
for (const cls of current) {
|
|
50
|
-
cl().remove(cls);
|
|
51
|
-
}
|
|
64
|
+
const inner = this.inner;
|
|
52
65
|
this.inner = null;
|
|
66
|
+
inner.applyHistory(this);
|
|
53
67
|
}
|
|
54
68
|
}
|
|
55
69
|
function cl() {
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
1
2
|
import { PlatformBodyClass } from './BodyClass.js';
|
|
2
3
|
export default class ServerBodyClass implements PlatformBodyClass {
|
|
3
4
|
private inner;
|
|
4
5
|
constructor();
|
|
5
6
|
contains(cls: string): boolean;
|
|
6
7
|
add(...classes: string[]): void;
|
|
7
|
-
toggle(cls: string, force?: boolean):
|
|
8
|
+
toggle(cls: string, force?: boolean): boolean;
|
|
8
9
|
remove(...classes: string[]): void;
|
|
10
|
+
/**
|
|
11
|
+
* @returns Returns true if the value was changed
|
|
12
|
+
*/
|
|
13
|
+
setVariant(variant: string, cls: string | null): boolean;
|
|
9
14
|
toRequest(): ServerBodyClass;
|
|
15
|
+
z_populateSsrCache(ssrCache: SsrCache): void;
|
|
10
16
|
z_processHtmlTemplate(html: string): string;
|
|
11
17
|
}
|
|
12
18
|
//# sourceMappingURL=ServerBodyClass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerBodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/ServerBodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ServerBodyClass.d.ts","sourceRoot":"","sources":["../../src/bodyClass/ServerBodyClass.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,eAAgB,YAAW,iBAAiB;IAChE,OAAO,CAAC,KAAK,CAAW;;IAMxB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI9B,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAqB7C,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAIxD,SAAS,IAAI,eAAe;IAK5B,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI5C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAa3C"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { ClassSet, variantsToSsrCache } from './utils.js';
|
|
1
2
|
export default class ServerBodyClass {
|
|
2
3
|
inner;
|
|
3
4
|
constructor() {
|
|
4
|
-
this.inner = new
|
|
5
|
+
this.inner = new ClassSet();
|
|
5
6
|
}
|
|
6
7
|
contains(cls) {
|
|
7
8
|
return this.inner.has(cls);
|
|
@@ -17,25 +18,38 @@ export default class ServerBodyClass {
|
|
|
17
18
|
'to unexpected results. Because in a loadData the server will add it ' +
|
|
18
19
|
'and the client will afterwards remove it.');
|
|
19
20
|
}
|
|
20
|
-
const
|
|
21
|
-
|
|
21
|
+
const exists = this.inner.has(cls);
|
|
22
|
+
const shouldExist = typeof force === 'boolean' ? force : !exists;
|
|
23
|
+
const changed = shouldExist !== exists;
|
|
24
|
+
if (shouldExist)
|
|
22
25
|
this.inner.add(cls);
|
|
23
26
|
else
|
|
24
27
|
this.inner.delete(cls);
|
|
28
|
+
return changed;
|
|
25
29
|
}
|
|
26
30
|
remove(...classes) {
|
|
27
31
|
validate(classes);
|
|
28
32
|
classes.forEach(cls => this.inner.delete(cls));
|
|
29
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* @returns Returns true if the value was changed
|
|
36
|
+
*/
|
|
37
|
+
setVariant(variant, cls) {
|
|
38
|
+
return this.inner.setVariant(variant, cls);
|
|
39
|
+
}
|
|
30
40
|
toRequest() {
|
|
41
|
+
// no second request should ever start on the server
|
|
31
42
|
return this;
|
|
32
43
|
}
|
|
44
|
+
z_populateSsrCache(ssrCache) {
|
|
45
|
+
variantsToSsrCache(this.inner.z_variants, ssrCache);
|
|
46
|
+
}
|
|
33
47
|
z_processHtmlTemplate(html) {
|
|
34
48
|
const SEARCH_STR = '<!--body-class-->';
|
|
35
|
-
if (this.inner.
|
|
49
|
+
if (this.inner.length && !html.includes(SEARCH_STR)) {
|
|
36
50
|
throw new Error('index.html needs to contain `class="<!--body-class-->"`');
|
|
37
51
|
}
|
|
38
|
-
return html.replace(SEARCH_STR, Array.from(this.inner).join(' '));
|
|
52
|
+
return html.replace(SEARCH_STR, Array.from(this.inner.classes()).join(' '));
|
|
39
53
|
}
|
|
40
54
|
}
|
|
41
55
|
function validate(classes) {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
2
|
+
export type HistoryClassSet = {
|
|
3
|
+
add(cls: string): void;
|
|
4
|
+
remove(cls: string): void;
|
|
5
|
+
setVariant(variant: string, cls: string | null): void;
|
|
6
|
+
};
|
|
7
|
+
export declare class ClassSet {
|
|
8
|
+
private _classes;
|
|
9
|
+
/** @hidden */
|
|
10
|
+
z_variants: Variants;
|
|
11
|
+
private history;
|
|
12
|
+
constructor(classes?: Iterable<string>, variants?: Iterable<[string, string]>, history?: boolean);
|
|
13
|
+
classes(): Iterable<string>;
|
|
14
|
+
get length(): number;
|
|
15
|
+
has(cls: string): boolean;
|
|
16
|
+
add(cls: string): void;
|
|
17
|
+
delete(cls: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* @returns Returns true if the value was changed
|
|
20
|
+
*/
|
|
21
|
+
setVariant(variant: string, cls: string | null): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Fails if no history is active.
|
|
24
|
+
*/
|
|
25
|
+
applyHistory(cl: HistoryClassSet): void;
|
|
26
|
+
}
|
|
27
|
+
export type VariantSetReturn = {
|
|
28
|
+
remove?: string;
|
|
29
|
+
add?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare class Variants {
|
|
32
|
+
private inner;
|
|
33
|
+
constructor(entries?: Iterable<[string, string]>);
|
|
34
|
+
set(variant: string, cls: string | null): VariantSetReturn;
|
|
35
|
+
entries(): Iterable<[string, string]>;
|
|
36
|
+
}
|
|
37
|
+
export declare function ssrCacheToVariants(ssrCache: SsrCache): Variants;
|
|
38
|
+
export declare function variantsToSsrCache(variants: Variants, ssrCache: SsrCache): void;
|
|
39
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bodyClass/utils.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACtD,CAAC;AAEF,qBAAa,QAAQ;IACpB,OAAO,CAAC,QAAQ,CAAc;IAC9B,cAAc;IACd,UAAU,EAAE,QAAQ,CAAC;IACrB,OAAO,CAAC,OAAO,CAA2C;gBAGzD,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrC,OAAO,GAAE,OAAe;IAOzB,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC;IAI3B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAaxD;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;CAGvC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,QAAQ;IAEpB,OAAO,CAAC,KAAK,CAAsB;gBAEvB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIhD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB;IAkB1D,OAAO,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAGrC;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAE/D;AAGD,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAChB,IAAI,CAEN"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export class ClassSet {
|
|
2
|
+
_classes;
|
|
3
|
+
/** @hidden */
|
|
4
|
+
z_variants;
|
|
5
|
+
history;
|
|
6
|
+
constructor(classes, variants, history = false) {
|
|
7
|
+
this._classes = new Set(classes);
|
|
8
|
+
this.z_variants = new Variants();
|
|
9
|
+
this.history = history ? [] : null;
|
|
10
|
+
}
|
|
11
|
+
classes() {
|
|
12
|
+
return this._classes;
|
|
13
|
+
}
|
|
14
|
+
get length() {
|
|
15
|
+
return this._classes.size;
|
|
16
|
+
}
|
|
17
|
+
has(cls) {
|
|
18
|
+
return this._classes.has(cls);
|
|
19
|
+
}
|
|
20
|
+
add(cls) {
|
|
21
|
+
this._classes.add(cls);
|
|
22
|
+
if (this.history)
|
|
23
|
+
this.history.push(c => c.add(cls));
|
|
24
|
+
}
|
|
25
|
+
delete(cls) {
|
|
26
|
+
this._classes.delete(cls);
|
|
27
|
+
if (this.history)
|
|
28
|
+
this.history.push(c => c.remove(cls));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @returns Returns true if the value was changed
|
|
32
|
+
*/
|
|
33
|
+
setVariant(variant, cls) {
|
|
34
|
+
const { remove, add } = this.z_variants.set(variant, cls);
|
|
35
|
+
if (remove)
|
|
36
|
+
this.delete(remove);
|
|
37
|
+
if (add)
|
|
38
|
+
this.add(add);
|
|
39
|
+
const changed = !!remove || !!add;
|
|
40
|
+
if (this.history)
|
|
41
|
+
this.history.push(c => c.setVariant(variant, cls));
|
|
42
|
+
return changed;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fails if no history is active.
|
|
46
|
+
*/
|
|
47
|
+
applyHistory(cl) {
|
|
48
|
+
this.history.forEach(fn => fn(cl));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class Variants {
|
|
52
|
+
// list of active variant classes
|
|
53
|
+
inner;
|
|
54
|
+
constructor(entries) {
|
|
55
|
+
this.inner = new Map(entries);
|
|
56
|
+
}
|
|
57
|
+
set(variant, cls) {
|
|
58
|
+
const current = this.inner.get(variant) ?? null;
|
|
59
|
+
if (current === cls)
|
|
60
|
+
return {};
|
|
61
|
+
const obj = {};
|
|
62
|
+
if (current)
|
|
63
|
+
obj.remove = current;
|
|
64
|
+
if (cls) {
|
|
65
|
+
obj.add = cls;
|
|
66
|
+
this.inner.set(variant, cls);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.inner.delete(variant);
|
|
70
|
+
}
|
|
71
|
+
return obj;
|
|
72
|
+
}
|
|
73
|
+
entries() {
|
|
74
|
+
return this.inner.entries();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// separate function for tree shaking
|
|
78
|
+
export function ssrCacheToVariants(ssrCache) {
|
|
79
|
+
return new Variants(ssrCache.get('BODY_CLASS_VAR'));
|
|
80
|
+
}
|
|
81
|
+
// separate function for tree shaking
|
|
82
|
+
export function variantsToSsrCache(variants, ssrCache) {
|
|
83
|
+
ssrCache.set('BODY_CLASS_VAR', Array.from(variants.entries()));
|
|
84
|
+
}
|
package/dist/crelte.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crelte.d.ts","sourceRoot":"","sources":["../src/crelte.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"crelte.d.ts","sourceRoot":"","sources":["../src/crelte.ts"],"names":[],"mappings":"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"}
|
package/dist/crelte.js
CHANGED
|
@@ -21,6 +21,8 @@ export function newCrelte({ config, ssrCache, plugins, events, globals, router,
|
|
|
21
21
|
queries,
|
|
22
22
|
cookies,
|
|
23
23
|
bodyClass,
|
|
24
|
+
// when adding a new helper function make sure to add it to
|
|
25
|
+
// onNewCrelteRequest if needed
|
|
24
26
|
getPlugin: name => plugins.get(name),
|
|
25
27
|
getEnv: key => ssrCache.get(key),
|
|
26
28
|
frontendUrl: path => urlWithPath(ssrCache.get('FRONTEND_URL'), path),
|
package/dist/init/client.js
CHANGED
|
@@ -61,7 +61,7 @@ export async function main(data) {
|
|
|
61
61
|
router: new Router(router),
|
|
62
62
|
queries,
|
|
63
63
|
cookies: new Cookies(new ClientCookies()),
|
|
64
|
-
bodyClass: new BodyClass(
|
|
64
|
+
bodyClass: new BodyClass(ClientBodyClass.fromSsrCache(ssrCache)),
|
|
65
65
|
});
|
|
66
66
|
const app = new InternalApp(data.app);
|
|
67
67
|
// setup plugins
|
|
@@ -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;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,
|
|
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,CAuHlE;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
|
@@ -101,6 +101,7 @@ export async function main(data) {
|
|
|
101
101
|
props: { route: routeProp },
|
|
102
102
|
context,
|
|
103
103
|
});
|
|
104
|
+
bodyClass.z_populateSsrCache(ssrCache);
|
|
104
105
|
head += ssrComponents.toHead(data.serverData.ssrManifest);
|
|
105
106
|
head += crelte.ssrCache.z_exportToHead();
|
|
106
107
|
let htmlTemplate = data.serverData.htmlTemplate;
|
|
@@ -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,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,
|
|
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,CAiBf;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
|
@@ -46,6 +46,9 @@ export function onNewCrelteRequest(crelte, req) {
|
|
|
46
46
|
cookies: crelte.cookies.z_toRequest(),
|
|
47
47
|
bodyClass: crelte.bodyClass.z_toRequest(),
|
|
48
48
|
};
|
|
49
|
+
// make sure helper funcitons link to the correct instances
|
|
50
|
+
nCrelte.getPlugin = name => nCrelte.plugins.get(name);
|
|
51
|
+
nCrelte.getGlobalStore = name => nCrelte.globals.getStore(name);
|
|
49
52
|
return crelteToRequest(nCrelte, req);
|
|
50
53
|
}
|
|
51
54
|
async function eventsLoadEntry(cr) {
|
package/dist/loadData/entry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CrelteRequest } from '../index.js';
|
|
2
|
-
import { Query } from '../queries/Queries.js';
|
|
2
|
+
import { Query, QueryOptions } from '../queries/Queries.js';
|
|
3
3
|
export type Entry = {
|
|
4
4
|
sectionHandle: string;
|
|
5
5
|
typeHandle: string;
|
|
@@ -11,7 +11,16 @@ export type EntryQueryVars = {
|
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
};
|
|
13
13
|
export declare function entryQueryVars(cr: CrelteRequest): EntryQueryVars;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* ## Example
|
|
16
|
+
* `App.svelte`
|
|
17
|
+
* ```ts
|
|
18
|
+
* import entryQuery from '@/queries/entry.graphql';
|
|
19
|
+
*
|
|
20
|
+
* export const loadEntry => cr => queryEntry(cr, entryQuery, entryQueryVars(cr));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function queryEntry(cr: CrelteRequest, entryQuery: Query, vars: EntryQueryVars, opts?: QueryOptions): Promise<Entry>;
|
|
15
24
|
export declare const ENTRY_ERROR_404: Entry;
|
|
16
25
|
/**
|
|
17
26
|
* Get the entry from the page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/loadData/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/loadData/entry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE5D,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;IAGf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,cAAc,CAchE;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC/B,EAAE,EAAE,aAAa,EACjB,UAAU,EAAE,KAAK,EACjB,IAAI,EAAE,cAAc,EACpB,IAAI,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,KAAK,CAAC,CAGhB;AAED,eAAO,MAAM,eAAe,EAAE,KAG7B,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAUpD"}
|
package/dist/loadData/entry.js
CHANGED
|
@@ -11,8 +11,17 @@ export function entryQueryVars(cr) {
|
|
|
11
11
|
siteId: cr.site.id,
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* ## Example
|
|
16
|
+
* `App.svelte`
|
|
17
|
+
* ```ts
|
|
18
|
+
* import entryQuery from '@/queries/entry.graphql';
|
|
19
|
+
*
|
|
20
|
+
* export const loadEntry => cr => queryEntry(cr, entryQuery, entryQueryVars(cr));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export async function queryEntry(cr, entryQuery, vars, opts) {
|
|
24
|
+
const page = await cr.query(entryQuery, vars, opts);
|
|
16
25
|
return extractEntry(page) ?? ENTRY_ERROR_404;
|
|
17
26
|
}
|
|
18
27
|
export const ENTRY_ERROR_404 = {
|
package/dist/queries/index.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export type TransformFn<T extends Record<string, QueryVar<any>> = Record<string,
|
|
|
41
41
|
* };
|
|
42
42
|
* ```
|
|
43
43
|
*/
|
|
44
|
-
export type Transform<T extends Record<string, QueryVar<any>> = Record<string, QueryVar<any>>, F extends TransformFn<T> = TransformFn<T>> = (response: any, vars: InferVariableTypes<T
|
|
44
|
+
export type Transform<T extends Record<string, QueryVar<any>> = Record<string, QueryVar<any>>, F extends TransformFn<T> = TransformFn<T>> = (response: any, vars: InferVariableTypes<T>, csr: CrelteServerRequest) => Awaited<ReturnType<F>>;
|
|
45
45
|
/** use {@link Handle} */
|
|
46
46
|
export type HandleFn<T extends Record<string, QueryVar<any>> = Record<string, QueryVar<any>>> = (csr: CrelteServerRequest, vars: InferVariableTypes<T>) => any;
|
|
47
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EACf,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,cAAc,EACd,KAAK,EACL,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,UAAU,EAAE,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EACN,OAAO,EACP,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,WAAW,IAAI,QAAQ,EAC5B,KAAK,UAAU,EACf,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,kBAAkB,EACvB,GAAG,EACH,IAAI,EACJ,KAAK,OAAO,EACZ,QAAQ,EACR,YAAY,GACZ,CAAC;AAEF,cAAc;AACd,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE3E,cAAc;AACd,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,OAAO,CAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IACpE,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAExE,4BAA4B;AAC5B,MAAM,MAAM,WAAW,CACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IACpE,CACH,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KACvB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EACvE,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IACtC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queries/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAY,WAAW,EAAgB,MAAM,aAAa,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IA2B3D,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAuBX,SAAS;
|
|
1
|
+
{"version":3,"file":"QueryGqlRoute.d.ts","sourceRoot":"","sources":["../../../src/server/queries/QueryGqlRoute.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAQ,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAY,WAAW,EAAgB,MAAM,aAAa,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IA2B3D,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAuBX,SAAS;IAWjB,MAAM,CACX,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,QAAQ,CAAC;CAkHpB"}
|
|
@@ -76,10 +76,10 @@ export default class QueryGqlRoute {
|
|
|
76
76
|
' https://github.com/crelte/crelte/issues/114 for infos');
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
async transform(jsonResp, vars) {
|
|
79
|
+
async transform(jsonResp, vars, csr) {
|
|
80
80
|
if (!this.transformFn || !jsonResp.data)
|
|
81
81
|
return;
|
|
82
|
-
const transformed = await this.transformFn(jsonResp.data, vars);
|
|
82
|
+
const transformed = await this.transformFn(jsonResp.data, vars, csr);
|
|
83
83
|
if (typeof transformed !== 'undefined')
|
|
84
84
|
jsonResp.data = transformed;
|
|
85
85
|
}
|
|
@@ -164,7 +164,7 @@ export default class QueryGqlRoute {
|
|
|
164
164
|
jsonResp = await resp.json();
|
|
165
165
|
if (!jsonResp || typeof jsonResp !== 'object')
|
|
166
166
|
throw new Error('invalid json response');
|
|
167
|
-
await this.transform(jsonResp, vars);
|
|
167
|
+
await this.transform(jsonResp, vars, csr);
|
|
168
168
|
}
|
|
169
169
|
catch (e) {
|
|
170
170
|
return newError(e, 500);
|
|
@@ -2,7 +2,7 @@ import { QueryVar } from '../../queries/vars.js';
|
|
|
2
2
|
import CrelteServerRequest from '../CrelteServer.js';
|
|
3
3
|
import ServerRouter from '../ServerRouter.js';
|
|
4
4
|
export type CacheIfFn = (response: any, vars: Record<string, any>) => boolean;
|
|
5
|
-
export type TransformFn = (response: any, vars: Record<string, any
|
|
5
|
+
export type TransformFn = (response: any, vars: Record<string, any>, csr: CrelteServerRequest) => void | any | Promise<void | any>;
|
|
6
6
|
export type HandleFn = (csr: CrelteServerRequest, vars: Record<string, any>) => Promise<any> | any;
|
|
7
7
|
/**
|
|
8
8
|
* Returns the validated variables if some vars where defined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;AAM9E,MAAM,MAAM,WAAW,GAAG,CACzB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/queries/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,mBAAmB,MAAM,oBAAoB,CAAC;AACrD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;AAM9E,MAAM,MAAM,WAAW,GAAG,CACzB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,GAAG,EAAE,mBAAmB,KACpB,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,CACtB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,EACtC,IAAI,EAAE,GAAG,EACT,EAAE,EAAE,YAAY,GACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAarB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEzD"}
|
package/package.json
CHANGED
package/src/blocks/Blocks.ts
CHANGED
|
@@ -125,7 +125,7 @@ export class BlockModules {
|
|
|
125
125
|
* ```
|
|
126
126
|
*/
|
|
127
127
|
export function blockModules(
|
|
128
|
-
modules: Record<string,
|
|
128
|
+
modules: Record<string, (() => Promise<any>) | Module>,
|
|
129
129
|
opts: BlockModulesOptions = {},
|
|
130
130
|
): BlockModules {
|
|
131
131
|
return new BlockModules(modules, opts);
|
|
@@ -41,15 +41,33 @@ export default class BodyClass {
|
|
|
41
41
|
* it.
|
|
42
42
|
*/
|
|
43
43
|
toggle(cls: string, force?: boolean): void {
|
|
44
|
-
this.inner.toggle(cls, force);
|
|
45
|
-
this.store.set();
|
|
44
|
+
if (this.inner.toggle(cls, force)) this.store.set();
|
|
46
45
|
}
|
|
47
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Removes the given classes from the body
|
|
49
|
+
*/
|
|
48
50
|
remove(...classes: string[]): void {
|
|
49
51
|
this.inner.remove(...classes);
|
|
50
52
|
this.store.set();
|
|
51
53
|
}
|
|
52
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Sets the class for the given variant removing the old class for that
|
|
57
|
+
* variant, if cls is null it will remove the variant class
|
|
58
|
+
*
|
|
59
|
+
* If you just have like a dark or light mode and only for the dark mode a
|
|
60
|
+
* class, **prefer** `toggle('dark', isDarkMode)` over
|
|
61
|
+
* `setVariant('mode', isDarkMode ? 'dark' : null)`
|
|
62
|
+
*
|
|
63
|
+
* ## Note
|
|
64
|
+
* The variant name is only used for the internal state management
|
|
65
|
+
* and has no inpact on the actual class name
|
|
66
|
+
*/
|
|
67
|
+
setVariant(variant: string, cls: string | null): void {
|
|
68
|
+
if (this.inner.setVariant(variant, cls)) this.store.set();
|
|
69
|
+
}
|
|
70
|
+
|
|
53
71
|
/** @hidden */
|
|
54
72
|
z_toRequest(): BodyClass {
|
|
55
73
|
return new BodyClass(this.inner.toRequest(), this.store.stage());
|
|
@@ -65,8 +83,12 @@ export default class BodyClass {
|
|
|
65
83
|
export interface PlatformBodyClass {
|
|
66
84
|
contains(cls: string): boolean;
|
|
67
85
|
add(...classes: string[]): void;
|
|
68
|
-
|
|
86
|
+
// returns true if the value was changed (this is different to the
|
|
87
|
+
// DOMTokenList.toggle which returns true if the class is now present)
|
|
88
|
+
toggle(cls: string, force?: boolean): boolean;
|
|
69
89
|
remove(...classes: string[]): void;
|
|
90
|
+
// returns true if the value was changed
|
|
91
|
+
setVariant(variant: string, cls: string | null): boolean;
|
|
70
92
|
toRequest(): PlatformBodyClass;
|
|
71
93
|
render?: () => void;
|
|
72
94
|
}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
1
2
|
import { PlatformBodyClass } from './BodyClass.js';
|
|
3
|
+
import { ClassSet, ssrCacheToVariants, Variants } from './utils.js';
|
|
2
4
|
|
|
3
5
|
export default class ClientBodyClass implements PlatformBodyClass {
|
|
4
|
-
private
|
|
6
|
+
private variants: Variants;
|
|
7
|
+
// during the request store the classes here
|
|
8
|
+
private inner: ClassSet | null;
|
|
5
9
|
|
|
6
|
-
constructor(inner?:
|
|
10
|
+
constructor(variants: Variants, inner?: ClassSet) {
|
|
11
|
+
this.variants = variants;
|
|
7
12
|
this.inner = inner ?? null;
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
static fromSsrCache(ssrCache: SsrCache): ClientBodyClass {
|
|
16
|
+
const variants = ssrCacheToVariants(ssrCache);
|
|
17
|
+
return new ClientBodyClass(variants);
|
|
18
|
+
}
|
|
19
|
+
|
|
10
20
|
contains(cls: string): boolean {
|
|
11
21
|
if (this.inner) return this.inner.has(cls);
|
|
12
22
|
return cl().contains(cls);
|
|
@@ -17,16 +27,20 @@ export default class ClientBodyClass implements PlatformBodyClass {
|
|
|
17
27
|
else cl().add(...classes);
|
|
18
28
|
}
|
|
19
29
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
// returns true if the value was changed
|
|
31
|
+
toggle(cls: string, force?: boolean): boolean {
|
|
32
|
+
const exists = this.contains(cls);
|
|
33
|
+
const shouldExist = typeof force === 'boolean' ? force : !exists;
|
|
34
|
+
const changed = shouldExist !== exists;
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
if (this.inner) {
|
|
37
|
+
if (shouldExist) this.inner.add(cls);
|
|
26
38
|
else this.inner.delete(cls);
|
|
27
39
|
} else {
|
|
28
40
|
cl().toggle(cls, force);
|
|
29
41
|
}
|
|
42
|
+
|
|
43
|
+
return changed;
|
|
30
44
|
}
|
|
31
45
|
|
|
32
46
|
remove(...classes: string[]): void {
|
|
@@ -34,26 +48,29 @@ export default class ClientBodyClass implements PlatformBodyClass {
|
|
|
34
48
|
else cl().remove(...classes);
|
|
35
49
|
}
|
|
36
50
|
|
|
51
|
+
setVariant(variant: string, cls: string | null): boolean {
|
|
52
|
+
if (this.inner) return this.inner.setVariant(variant, cls);
|
|
53
|
+
|
|
54
|
+
const { remove, add } = this.variants.set(variant, cls);
|
|
55
|
+
|
|
56
|
+
if (remove) cl().remove(remove);
|
|
57
|
+
if (add) cl().add(add);
|
|
58
|
+
|
|
59
|
+
return !!remove || !!add;
|
|
60
|
+
}
|
|
61
|
+
|
|
37
62
|
toRequest(): ClientBodyClass {
|
|
38
|
-
const inner = new
|
|
39
|
-
return new ClientBodyClass(inner);
|
|
63
|
+
const inner = new ClassSet(cl(), this.variants.entries(), true);
|
|
64
|
+
return new ClientBodyClass(this.variants, inner);
|
|
40
65
|
}
|
|
41
66
|
|
|
42
67
|
render(): void {
|
|
43
68
|
if (!this.inner) throw new Error('call toRequest first');
|
|
44
|
-
const current = new Set(cl());
|
|
45
|
-
|
|
46
|
-
for (const cls of this.inner) {
|
|
47
|
-
const existed = current.delete(cls);
|
|
48
|
-
if (!existed) cl().add(cls);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// now lets remove all classes that still exist in current
|
|
52
|
-
for (const cls of current) {
|
|
53
|
-
cl().remove(cls);
|
|
54
|
-
}
|
|
55
69
|
|
|
70
|
+
const inner = this.inner;
|
|
56
71
|
this.inner = null;
|
|
72
|
+
|
|
73
|
+
inner.applyHistory(this);
|
|
57
74
|
}
|
|
58
75
|
}
|
|
59
76
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
1
2
|
import { PlatformBodyClass } from './BodyClass.js';
|
|
3
|
+
import { ClassSet, variantsToSsrCache } from './utils.js';
|
|
2
4
|
|
|
3
5
|
export default class ServerBodyClass implements PlatformBodyClass {
|
|
4
|
-
private inner:
|
|
6
|
+
private inner: ClassSet;
|
|
5
7
|
|
|
6
8
|
constructor() {
|
|
7
|
-
this.inner = new
|
|
9
|
+
this.inner = new ClassSet();
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
contains(cls: string): boolean {
|
|
@@ -16,7 +18,7 @@ export default class ServerBodyClass implements PlatformBodyClass {
|
|
|
16
18
|
classes.forEach(cls => this.inner.add(cls));
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
toggle(cls: string, force?: boolean):
|
|
21
|
+
toggle(cls: string, force?: boolean): boolean {
|
|
20
22
|
validate([cls]);
|
|
21
23
|
|
|
22
24
|
if (import.meta.env.DEV && typeof force !== 'boolean') {
|
|
@@ -27,10 +29,14 @@ export default class ServerBodyClass implements PlatformBodyClass {
|
|
|
27
29
|
);
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
const
|
|
32
|
+
const exists = this.inner.has(cls);
|
|
33
|
+
const shouldExist = typeof force === 'boolean' ? force : !exists;
|
|
34
|
+
const changed = shouldExist !== exists;
|
|
31
35
|
|
|
32
|
-
if (
|
|
36
|
+
if (shouldExist) this.inner.add(cls);
|
|
33
37
|
else this.inner.delete(cls);
|
|
38
|
+
|
|
39
|
+
return changed;
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
remove(...classes: string[]): void {
|
|
@@ -38,19 +44,34 @@ export default class ServerBodyClass implements PlatformBodyClass {
|
|
|
38
44
|
classes.forEach(cls => this.inner.delete(cls));
|
|
39
45
|
}
|
|
40
46
|
|
|
47
|
+
/**
|
|
48
|
+
* @returns Returns true if the value was changed
|
|
49
|
+
*/
|
|
50
|
+
setVariant(variant: string, cls: string | null): boolean {
|
|
51
|
+
return this.inner.setVariant(variant, cls);
|
|
52
|
+
}
|
|
53
|
+
|
|
41
54
|
toRequest(): ServerBodyClass {
|
|
55
|
+
// no second request should ever start on the server
|
|
42
56
|
return this;
|
|
43
57
|
}
|
|
44
58
|
|
|
59
|
+
z_populateSsrCache(ssrCache: SsrCache): void {
|
|
60
|
+
variantsToSsrCache(this.inner.z_variants, ssrCache);
|
|
61
|
+
}
|
|
62
|
+
|
|
45
63
|
z_processHtmlTemplate(html: string): string {
|
|
46
64
|
const SEARCH_STR = '<!--body-class-->';
|
|
47
|
-
if (this.inner.
|
|
65
|
+
if (this.inner.length && !html.includes(SEARCH_STR)) {
|
|
48
66
|
throw new Error(
|
|
49
67
|
'index.html needs to contain `class="<!--body-class-->"`',
|
|
50
68
|
);
|
|
51
69
|
}
|
|
52
70
|
|
|
53
|
-
return html.replace(
|
|
71
|
+
return html.replace(
|
|
72
|
+
SEARCH_STR,
|
|
73
|
+
Array.from(this.inner.classes()).join(' '),
|
|
74
|
+
);
|
|
54
75
|
}
|
|
55
76
|
}
|
|
56
77
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import SsrCache from '../ssr/SsrCache.js';
|
|
2
|
+
|
|
3
|
+
export type HistoryClassSet = {
|
|
4
|
+
add(cls: string): void;
|
|
5
|
+
remove(cls: string): void;
|
|
6
|
+
setVariant(variant: string, cls: string | null): void;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export class ClassSet {
|
|
10
|
+
private _classes: Set<string>;
|
|
11
|
+
/** @hidden */
|
|
12
|
+
z_variants: Variants;
|
|
13
|
+
private history: ((cl: HistoryClassSet) => void)[] | null;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
classes?: Iterable<string>,
|
|
17
|
+
variants?: Iterable<[string, string]>,
|
|
18
|
+
history: boolean = false,
|
|
19
|
+
) {
|
|
20
|
+
this._classes = new Set(classes);
|
|
21
|
+
this.z_variants = new Variants();
|
|
22
|
+
this.history = history ? [] : null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
classes(): Iterable<string> {
|
|
26
|
+
return this._classes;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get length(): number {
|
|
30
|
+
return this._classes.size;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
has(cls: string): boolean {
|
|
34
|
+
return this._classes.has(cls);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
add(cls: string): void {
|
|
38
|
+
this._classes.add(cls);
|
|
39
|
+
if (this.history) this.history.push(c => c.add(cls));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
delete(cls: string): void {
|
|
43
|
+
this._classes.delete(cls);
|
|
44
|
+
if (this.history) this.history.push(c => c.remove(cls));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @returns Returns true if the value was changed
|
|
49
|
+
*/
|
|
50
|
+
setVariant(variant: string, cls: string | null): boolean {
|
|
51
|
+
const { remove, add } = this.z_variants.set(variant, cls);
|
|
52
|
+
|
|
53
|
+
if (remove) this.delete(remove);
|
|
54
|
+
if (add) this.add(add);
|
|
55
|
+
|
|
56
|
+
const changed = !!remove || !!add;
|
|
57
|
+
|
|
58
|
+
if (this.history) this.history.push(c => c.setVariant(variant, cls));
|
|
59
|
+
|
|
60
|
+
return changed;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Fails if no history is active.
|
|
65
|
+
*/
|
|
66
|
+
applyHistory(cl: HistoryClassSet): void {
|
|
67
|
+
this.history!.forEach(fn => fn(cl));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type VariantSetReturn = {
|
|
72
|
+
remove?: string;
|
|
73
|
+
add?: string;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export class Variants {
|
|
77
|
+
// list of active variant classes
|
|
78
|
+
private inner: Map<string, string>;
|
|
79
|
+
|
|
80
|
+
constructor(entries?: Iterable<[string, string]>) {
|
|
81
|
+
this.inner = new Map(entries);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
set(variant: string, cls: string | null): VariantSetReturn {
|
|
85
|
+
const current = this.inner.get(variant) ?? null;
|
|
86
|
+
|
|
87
|
+
if (current === cls) return {};
|
|
88
|
+
|
|
89
|
+
const obj: VariantSetReturn = {};
|
|
90
|
+
|
|
91
|
+
if (current) obj.remove = current;
|
|
92
|
+
if (cls) {
|
|
93
|
+
obj.add = cls;
|
|
94
|
+
this.inner.set(variant, cls);
|
|
95
|
+
} else {
|
|
96
|
+
this.inner.delete(variant);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return obj;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
entries(): Iterable<[string, string]> {
|
|
103
|
+
return this.inner.entries();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// separate function for tree shaking
|
|
108
|
+
export function ssrCacheToVariants(ssrCache: SsrCache): Variants {
|
|
109
|
+
return new Variants(ssrCache.get('BODY_CLASS_VAR')!);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// separate function for tree shaking
|
|
113
|
+
export function variantsToSsrCache(
|
|
114
|
+
variants: Variants,
|
|
115
|
+
ssrCache: SsrCache,
|
|
116
|
+
): void {
|
|
117
|
+
ssrCache.set('BODY_CLASS_VAR', Array.from(variants.entries()));
|
|
118
|
+
}
|
package/src/crelte.ts
CHANGED
|
@@ -292,6 +292,9 @@ export function newCrelte({
|
|
|
292
292
|
cookies,
|
|
293
293
|
bodyClass,
|
|
294
294
|
|
|
295
|
+
// when adding a new helper function make sure to add it to
|
|
296
|
+
// onNewCrelteRequest if needed
|
|
297
|
+
|
|
295
298
|
getPlugin: name => plugins.get(name),
|
|
296
299
|
getEnv: key => ssrCache.get(key as any) as any,
|
|
297
300
|
frontendUrl: path => urlWithPath(ssrCache.get('FRONTEND_URL')!, path),
|
package/src/init/client.ts
CHANGED
|
@@ -88,7 +88,7 @@ export async function main(data: MainData) {
|
|
|
88
88
|
router: new Router(router),
|
|
89
89
|
queries,
|
|
90
90
|
cookies: new Cookies(new ClientCookies()),
|
|
91
|
-
bodyClass: new BodyClass(
|
|
91
|
+
bodyClass: new BodyClass(ClientBodyClass.fromSsrCache(ssrCache)),
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
const app = new InternalApp(data.app);
|
package/src/init/server.ts
CHANGED
package/src/init/shared.ts
CHANGED
|
@@ -74,6 +74,9 @@ export function onNewCrelteRequest(
|
|
|
74
74
|
cookies: crelte.cookies.z_toRequest(),
|
|
75
75
|
bodyClass: crelte.bodyClass.z_toRequest(),
|
|
76
76
|
};
|
|
77
|
+
// make sure helper funcitons link to the correct instances
|
|
78
|
+
nCrelte.getPlugin = name => nCrelte.plugins.get(name);
|
|
79
|
+
nCrelte.getGlobalStore = name => nCrelte.globals.getStore(name);
|
|
77
80
|
return crelteToRequest(nCrelte, req);
|
|
78
81
|
}
|
|
79
82
|
|
package/src/loadData/entry.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CrelteRequest } from '../index.js';
|
|
2
|
-
import { Query } from '../queries/Queries.js';
|
|
2
|
+
import { Query, QueryOptions } from '../queries/Queries.js';
|
|
3
3
|
|
|
4
4
|
export type Entry = {
|
|
5
5
|
sectionHandle: string;
|
|
@@ -31,12 +31,22 @@ export function entryQueryVars(cr: CrelteRequest): EntryQueryVars {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* ## Example
|
|
36
|
+
* `App.svelte`
|
|
37
|
+
* ```ts
|
|
38
|
+
* import entryQuery from '@/queries/entry.graphql';
|
|
39
|
+
*
|
|
40
|
+
* export const loadEntry => cr => queryEntry(cr, entryQuery, entryQueryVars(cr));
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
34
43
|
export async function queryEntry(
|
|
35
44
|
cr: CrelteRequest,
|
|
36
45
|
entryQuery: Query,
|
|
37
46
|
vars: EntryQueryVars,
|
|
47
|
+
opts?: QueryOptions,
|
|
38
48
|
): Promise<Entry> {
|
|
39
|
-
const page = await cr.query(entryQuery, vars);
|
|
49
|
+
const page = await cr.query(entryQuery, vars, opts);
|
|
40
50
|
return extractEntry(page) ?? ENTRY_ERROR_404;
|
|
41
51
|
}
|
|
42
52
|
|
package/src/queries/index.ts
CHANGED
|
@@ -81,7 +81,11 @@ export type TransformFn<
|
|
|
81
81
|
export type Transform<
|
|
82
82
|
T extends Record<string, QueryVar<any>> = Record<string, QueryVar<any>>,
|
|
83
83
|
F extends TransformFn<T> = TransformFn<T>,
|
|
84
|
-
> = (
|
|
84
|
+
> = (
|
|
85
|
+
response: any,
|
|
86
|
+
vars: InferVariableTypes<T>,
|
|
87
|
+
csr: CrelteServerRequest,
|
|
88
|
+
) => Awaited<ReturnType<F>>;
|
|
85
89
|
|
|
86
90
|
/** use {@link Handle} */
|
|
87
91
|
export type HandleFn<
|
|
@@ -97,10 +97,11 @@ export default class QueryGqlRoute {
|
|
|
97
97
|
private async transform(
|
|
98
98
|
jsonResp: Record<string, any>,
|
|
99
99
|
vars: Record<string, any>,
|
|
100
|
+
csr: CrelteServerRequest,
|
|
100
101
|
): Promise<void> {
|
|
101
102
|
if (!this.transformFn || !jsonResp.data) return;
|
|
102
103
|
|
|
103
|
-
const transformed = await this.transformFn(jsonResp.data, vars);
|
|
104
|
+
const transformed = await this.transformFn(jsonResp.data, vars, csr);
|
|
104
105
|
if (typeof transformed !== 'undefined') jsonResp.data = transformed;
|
|
105
106
|
}
|
|
106
107
|
|
|
@@ -195,7 +196,7 @@ export default class QueryGqlRoute {
|
|
|
195
196
|
jsonResp = await resp.json();
|
|
196
197
|
if (!jsonResp || typeof jsonResp !== 'object')
|
|
197
198
|
throw new Error('invalid json response');
|
|
198
|
-
await this.transform(jsonResp, vars);
|
|
199
|
+
await this.transform(jsonResp, vars, csr);
|
|
199
200
|
} catch (e) {
|
|
200
201
|
return newError(e, 500);
|
|
201
202
|
}
|