@dungarees/qwik 0.11.4

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.
@@ -0,0 +1,5 @@
1
+ import type { ApplicationFactory, BehaviorsTools, RequiredApplicationConfig } from './type.ts';
2
+ export declare const createBehaviorsHook: <const APPLICATION extends RequiredApplicationConfig>({ application, identityTransform, }: {
3
+ application: ApplicationFactory<APPLICATION>;
4
+ identityTransform?: (identity: APPLICATION["identity"]) => APPLICATION["identity"];
5
+ }) => BehaviorsTools<APPLICATION>;
@@ -0,0 +1,57 @@
1
+ import { createCausedError } from '@dungarees/core/error.ts';
2
+ // An identity is any JSON value, so an object one has to be described rather than stringified.
3
+ const describeIdentity = (identity) => typeof identity === 'string' ? identity : JSON.stringify(identity);
4
+ // Held across calls so a component tree can reach a behaviour without running the application
5
+ // again on every render.
6
+ export const createBehaviorsHook = ({ application, identityTransform = (identity) => identity, }) => {
7
+ let storedBehaviors;
8
+ let storedExportState;
9
+ let storedImportState;
10
+ const loadFromApplication = (identity) => {
11
+ if (storedBehaviors !== undefined) {
12
+ return;
13
+ }
14
+ try {
15
+ const run = application().run(identityTransform(identity));
16
+ storedBehaviors = run.behaviors;
17
+ storedExportState = run.exportState;
18
+ storedImportState = run.importState;
19
+ }
20
+ catch (cause) {
21
+ throw createCausedError({
22
+ message: `Behaviors are not set for "${describeIdentity(identity)}"`,
23
+ cause,
24
+ });
25
+ }
26
+ };
27
+ const loadBehaviors = ((identity, name) => {
28
+ loadFromApplication(identity);
29
+ if (storedBehaviors === undefined) {
30
+ throw new Error('Could not load behaviors');
31
+ }
32
+ return name !== undefined ? storedBehaviors[name] : storedBehaviors;
33
+ // The two call shapes cannot be written as one implementation signature TypeScript accepts,
34
+ // which is what the overloaded LoadBehaviors type describes.
35
+ });
36
+ return {
37
+ loadBehaviors,
38
+ setServerBehaviors: ({ behaviors, exportState }) => {
39
+ storedBehaviors = behaviors;
40
+ storedExportState = exportState;
41
+ },
42
+ exportBehaviorsState: (identity) => {
43
+ loadFromApplication(identity);
44
+ if (storedExportState === undefined) {
45
+ throw new Error('Export state is not defined');
46
+ }
47
+ return storedExportState();
48
+ },
49
+ importBehaviorsState: ({ identity, state }) => {
50
+ loadFromApplication(identity);
51
+ if (storedImportState === undefined) {
52
+ throw new Error('Import state is not defined');
53
+ }
54
+ storedImportState(state);
55
+ },
56
+ };
57
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,129 @@
1
+ import { createBehaviorsHook } from './behaviors-hook.js';
2
+ import { createApplication } from '@dungarees/core/application.ts';
3
+ import { expect, expectTypeOf, test } from 'vitest';
4
+ const createGreeterApplication = (name = 'greeter1') => createApplication({
5
+ getBehaviors: [{ pattern: 'key', value: () => ({ greeter: { name } }) }],
6
+ });
7
+ test('loadBehaviors hands back one behaviour by name', () => {
8
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
9
+ expect(loadBehaviors('key', 'greeter').name).toBe('greeter1');
10
+ });
11
+ test('loadBehaviors types the behaviour it hands back', () => {
12
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
13
+ expectTypeOf(loadBehaviors('key', 'greeter')).toEqualTypeOf();
14
+ });
15
+ test('loadBehaviors hands back every behaviour when no name is given', () => {
16
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
17
+ expect(loadBehaviors('key')).toEqual({ greeter: { name: 'greeter1' } });
18
+ });
19
+ test('loadBehaviors types the whole set when no name is given', () => {
20
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
21
+ expectTypeOf(loadBehaviors('key')).toEqualTypeOf();
22
+ });
23
+ test('loadBehaviors reports an identity the application does not cover', () => {
24
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
25
+ // @ts-expect-error 'key2' is not an identity this application declares
26
+ expect(() => loadBehaviors('key2', 'greeter')).toThrow('Behaviors are not set for "key2"');
27
+ });
28
+ test('loadBehaviors hands back the same instance every time', () => {
29
+ const { loadBehaviors } = createBehaviorsHook({ application: () => createGreeterApplication() });
30
+ expect(loadBehaviors('key', 'greeter')).toBe(loadBehaviors('key', 'greeter'));
31
+ });
32
+ test('behaviours set for the server are used instead of running the application', () => {
33
+ const { loadBehaviors, setServerBehaviors } = createBehaviorsHook({
34
+ application: () => createGreeterApplication(),
35
+ });
36
+ setServerBehaviors({ behaviors: { greeter: { name: 'from-server' } } });
37
+ expect(loadBehaviors('key', 'greeter').name).toBe('from-server');
38
+ expect(loadBehaviors('key')).toEqual({ greeter: { name: 'from-server' } });
39
+ });
40
+ test('behaviours set for the server stop the application from running at all', () => {
41
+ const applicationRuns = [];
42
+ const { loadBehaviors, setServerBehaviors } = createBehaviorsHook({
43
+ application: () => {
44
+ applicationRuns.push(true);
45
+ return createGreeterApplication();
46
+ },
47
+ });
48
+ setServerBehaviors({ behaviors: { greeter: { name: 'from-server' } } });
49
+ loadBehaviors('key', 'greeter');
50
+ loadBehaviors('key', 'greeter');
51
+ expect(applicationRuns).toEqual([]);
52
+ });
53
+ test('exportBehaviorsState exports through the application', () => {
54
+ const application = createApplication({
55
+ exportState: () => 'state',
56
+ getBehaviors: [{ pattern: 'key', value: () => ({ greeter: { name: 'greeter' } }) }],
57
+ });
58
+ const { exportBehaviorsState } = createBehaviorsHook({ application: () => application });
59
+ expect(exportBehaviorsState('key')).toBe('state');
60
+ });
61
+ test('an export set for the server wins over the application', () => {
62
+ const application = createApplication({
63
+ exportState: () => 'state',
64
+ getBehaviors: [{ pattern: 'key', value: () => ({ greeter: { name: 'greeter' } }) }],
65
+ });
66
+ const { exportBehaviorsState, setServerBehaviors } = createBehaviorsHook({
67
+ application: () => application,
68
+ });
69
+ setServerBehaviors({
70
+ behaviors: { greeter: { name: 'greeter' } },
71
+ exportState: () => 'other-state',
72
+ });
73
+ expect(exportBehaviorsState('key')).toBe('other-state');
74
+ });
75
+ test('exportBehaviorsState fails when neither the application nor the server provides one', () => {
76
+ const { exportBehaviorsState, setServerBehaviors } = createBehaviorsHook({
77
+ application: () => createGreeterApplication(),
78
+ });
79
+ setServerBehaviors({ behaviors: { greeter: { name: 'greeter' } } });
80
+ expect(() => exportBehaviorsState('key')).toThrow('Export state is not defined');
81
+ });
82
+ test('importBehaviorsState imports through the application', () => {
83
+ const imported = [];
84
+ const application = createApplication({
85
+ importState: (_, state) => {
86
+ imported.push(state);
87
+ },
88
+ getBehaviors: [{ pattern: 'key', value: () => ({ greeter: { name: 'greeter' } }) }],
89
+ });
90
+ const { importBehaviorsState } = createBehaviorsHook({ application: () => application });
91
+ importBehaviorsState({ identity: 'key', state: 'state' });
92
+ expect(imported).toEqual(['state']);
93
+ });
94
+ test('the identity can be transformed before the application is run', () => {
95
+ const seenIdentities = [];
96
+ const runIdentities = [];
97
+ const application = createApplication({
98
+ getBehaviors: [
99
+ { pattern: 'frontend', value: () => ({ greeter: { name: 'frontend' } }) },
100
+ { pattern: 'ssr', value: () => ({ greeter: { name: 'ssr' } }) },
101
+ ],
102
+ main: (_, identity) => {
103
+ runIdentities.push(identity);
104
+ },
105
+ });
106
+ const { loadBehaviors } = createBehaviorsHook({
107
+ application: () => application,
108
+ identityTransform: (identity) => {
109
+ seenIdentities.push(identity);
110
+ return 'frontend';
111
+ },
112
+ });
113
+ loadBehaviors('ssr', 'greeter');
114
+ expect(seenIdentities).toEqual(['ssr']);
115
+ expect(runIdentities).toEqual(['frontend']);
116
+ });
117
+ test('the transformed identity is what selects the behaviours', () => {
118
+ const application = createApplication({
119
+ getBehaviors: [
120
+ { pattern: 'frontend', value: () => ({ greeter: { name: 'frontend' } }) },
121
+ { pattern: 'ssr', value: () => ({ greeter: { name: 'ssr' } }) },
122
+ ],
123
+ });
124
+ const { loadBehaviors } = createBehaviorsHook({
125
+ application: () => application,
126
+ identityTransform: () => 'frontend',
127
+ });
128
+ expect(loadBehaviors('ssr', 'greeter').name).toBe('frontend');
129
+ });
package/hooks.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { BehaviorByName, BehaviorName, BehaviorsTools, LoadBehaviorsByName, QwikApplicationConfig } from './type.ts';
2
+ import { type QRL, type Signal } from '@builder.io/qwik';
3
+ import type { Observable } from 'rxjs';
4
+ export type QwikHooks<APPLICATION extends QwikApplicationConfig> = {
5
+ useInitApp: (identity: APPLICATION['identity']) => void;
6
+ useObservableBehavior: <VALUE, NAME extends BehaviorName<APPLICATION>>(args: {
7
+ behaviorName: NAME;
8
+ get: (behavior: BehaviorByName<APPLICATION, NAME>) => Promise<Observable<VALUE>>;
9
+ startingValue: VALUE;
10
+ }) => Signal<VALUE>;
11
+ };
12
+ export declare const createQwikHooks: <APPLICATION extends QwikApplicationConfig>({ exportBehaviorsState, importBehaviorsState, loadBehaviors, }: {
13
+ exportBehaviorsState: QRL<BehaviorsTools<APPLICATION>["exportBehaviorsState"]>;
14
+ importBehaviorsState: QRL<BehaviorsTools<APPLICATION>["importBehaviorsState"]>;
15
+ loadBehaviors: QRL<LoadBehaviorsByName<APPLICATION>>;
16
+ }) => QwikHooks<APPLICATION>;
package/hooks.js ADDED
@@ -0,0 +1,38 @@
1
+ import { IdentityContext } from './identity-context.js';
2
+ import { useContext, useContextProvider, useSignal, useTask$, useVisibleTask$, } from '@builder.io/qwik';
3
+ export const createQwikHooks = ({ exportBehaviorsState, importBehaviorsState, loadBehaviors, }) => ({
4
+ // The state is exported while rendering and imported once the document is ready, which is what
5
+ // carries the server's state across to the browser without a second run of the application.
6
+ useInitApp: (identity) => {
7
+ useContextProvider(IdentityContext, { identity });
8
+ const appState = exportBehaviorsState(identity);
9
+ useVisibleTask$(async () => {
10
+ await importBehaviorsState({ identity, state: await appState });
11
+ }, { strategy: 'document-ready' });
12
+ },
13
+ useObservableBehavior: ({ behaviorName, get, startingValue, }) => {
14
+ const { identity } = useContext(IdentityContext);
15
+ const signal = useSignal(startingValue);
16
+ // Tracked so the subscription is set up again in the browser once hydration flips it, rather
17
+ // than being left with whatever the server rendered.
18
+ const hydrate = useSignal(false);
19
+ // The task context is used through itself rather than destructured, because track and cleanup
20
+ // are methods on it and lose their receiver when pulled off.
21
+ useTask$(async (taskContext) => {
22
+ taskContext.track(() => hydrate.value);
23
+ // QRL erases the generic parameter of the function it wraps, so the awaited value widens to
24
+ // the union of every behaviour. The name it was just looked up by is what makes it this one.
25
+ const behavior = (await loadBehaviors(identity, behaviorName));
26
+ const subscription = (await get(behavior)).subscribe((value) => {
27
+ signal.value = value;
28
+ });
29
+ taskContext.cleanup(() => {
30
+ subscription.unsubscribe();
31
+ });
32
+ });
33
+ useVisibleTask$(() => {
34
+ hydrate.value = true;
35
+ });
36
+ return signal;
37
+ },
38
+ });
@@ -0,0 +1 @@
1
+ export declare const IdentityContext: any;
@@ -0,0 +1,2 @@
1
+ import { createContextId } from '@builder.io/qwik';
2
+ export const IdentityContext = createContextId('identity');
package/identity.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export type QwikAppIdentity = {
2
+ entryPoint: 'dev' | 'preview' | 'server' | 'ssr' | 'frontend';
3
+ environment: 'prod' | 'test';
4
+ };
package/identity.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,456 @@
1
+ {
2
+ "name": "@dungarees/qwik",
3
+ "engines": {
4
+ "node": ">=22.0.0"
5
+ },
6
+ "scripts": {
7
+ "type-check": "tsc --noEmit"
8
+ },
9
+ "type": "module",
10
+ "dependencies": {
11
+ "@builder.io/qwik": "^1.20.0",
12
+ "@dungarees/core": "*",
13
+ "rxjs": "^7.8.1"
14
+ },
15
+ "devDependencies": {
16
+ "typescript": "^5.9.3",
17
+ "vitest": "^3.0.2"
18
+ },
19
+ "author": "info@productkind.com",
20
+ "license": "MIT",
21
+ "version": "0.11.4",
22
+ "exports": {
23
+ "./behaviors-hook.test.ts": {
24
+ "import": "./behaviors-hook.test.js",
25
+ "types": "./behaviors-hook.test.d.ts"
26
+ },
27
+ "./behaviors-hook.ts": {
28
+ "import": "./behaviors-hook.js",
29
+ "types": "./behaviors-hook.d.ts"
30
+ },
31
+ "./hooks.ts": {
32
+ "import": "./hooks.js",
33
+ "types": "./hooks.d.ts"
34
+ },
35
+ "./identity-context.ts": {
36
+ "import": "./identity-context.js",
37
+ "types": "./identity-context.d.ts"
38
+ },
39
+ "./identity.ts": {
40
+ "import": "./identity.js",
41
+ "types": "./identity.d.ts"
42
+ },
43
+ "./node_modules/typescript/lib/lib.d.ts": {
44
+ "import": "./node_modules/typescript/lib/lib.d.js",
45
+ "types": "./node_modules/typescript/lib/lib.d.d.ts"
46
+ },
47
+ "./node_modules/typescript/lib/lib.decorators.d.ts": {
48
+ "import": "./node_modules/typescript/lib/lib.decorators.d.js",
49
+ "types": "./node_modules/typescript/lib/lib.decorators.d.d.ts"
50
+ },
51
+ "./node_modules/typescript/lib/lib.decorators.legacy.d.ts": {
52
+ "import": "./node_modules/typescript/lib/lib.decorators.legacy.d.js",
53
+ "types": "./node_modules/typescript/lib/lib.decorators.legacy.d.d.ts"
54
+ },
55
+ "./node_modules/typescript/lib/lib.dom.asynciterable.d.ts": {
56
+ "import": "./node_modules/typescript/lib/lib.dom.asynciterable.d.js",
57
+ "types": "./node_modules/typescript/lib/lib.dom.asynciterable.d.d.ts"
58
+ },
59
+ "./node_modules/typescript/lib/lib.dom.d.ts": {
60
+ "import": "./node_modules/typescript/lib/lib.dom.d.js",
61
+ "types": "./node_modules/typescript/lib/lib.dom.d.d.ts"
62
+ },
63
+ "./node_modules/typescript/lib/lib.dom.iterable.d.ts": {
64
+ "import": "./node_modules/typescript/lib/lib.dom.iterable.d.js",
65
+ "types": "./node_modules/typescript/lib/lib.dom.iterable.d.d.ts"
66
+ },
67
+ "./node_modules/typescript/lib/lib.es2015.collection.d.ts": {
68
+ "import": "./node_modules/typescript/lib/lib.es2015.collection.d.js",
69
+ "types": "./node_modules/typescript/lib/lib.es2015.collection.d.d.ts"
70
+ },
71
+ "./node_modules/typescript/lib/lib.es2015.core.d.ts": {
72
+ "import": "./node_modules/typescript/lib/lib.es2015.core.d.js",
73
+ "types": "./node_modules/typescript/lib/lib.es2015.core.d.d.ts"
74
+ },
75
+ "./node_modules/typescript/lib/lib.es2015.d.ts": {
76
+ "import": "./node_modules/typescript/lib/lib.es2015.d.js",
77
+ "types": "./node_modules/typescript/lib/lib.es2015.d.d.ts"
78
+ },
79
+ "./node_modules/typescript/lib/lib.es2015.generator.d.ts": {
80
+ "import": "./node_modules/typescript/lib/lib.es2015.generator.d.js",
81
+ "types": "./node_modules/typescript/lib/lib.es2015.generator.d.d.ts"
82
+ },
83
+ "./node_modules/typescript/lib/lib.es2015.iterable.d.ts": {
84
+ "import": "./node_modules/typescript/lib/lib.es2015.iterable.d.js",
85
+ "types": "./node_modules/typescript/lib/lib.es2015.iterable.d.d.ts"
86
+ },
87
+ "./node_modules/typescript/lib/lib.es2015.promise.d.ts": {
88
+ "import": "./node_modules/typescript/lib/lib.es2015.promise.d.js",
89
+ "types": "./node_modules/typescript/lib/lib.es2015.promise.d.d.ts"
90
+ },
91
+ "./node_modules/typescript/lib/lib.es2015.proxy.d.ts": {
92
+ "import": "./node_modules/typescript/lib/lib.es2015.proxy.d.js",
93
+ "types": "./node_modules/typescript/lib/lib.es2015.proxy.d.d.ts"
94
+ },
95
+ "./node_modules/typescript/lib/lib.es2015.reflect.d.ts": {
96
+ "import": "./node_modules/typescript/lib/lib.es2015.reflect.d.js",
97
+ "types": "./node_modules/typescript/lib/lib.es2015.reflect.d.d.ts"
98
+ },
99
+ "./node_modules/typescript/lib/lib.es2015.symbol.d.ts": {
100
+ "import": "./node_modules/typescript/lib/lib.es2015.symbol.d.js",
101
+ "types": "./node_modules/typescript/lib/lib.es2015.symbol.d.d.ts"
102
+ },
103
+ "./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": {
104
+ "import": "./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.js",
105
+ "types": "./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.d.ts"
106
+ },
107
+ "./node_modules/typescript/lib/lib.es2016.array.include.d.ts": {
108
+ "import": "./node_modules/typescript/lib/lib.es2016.array.include.d.js",
109
+ "types": "./node_modules/typescript/lib/lib.es2016.array.include.d.d.ts"
110
+ },
111
+ "./node_modules/typescript/lib/lib.es2016.d.ts": {
112
+ "import": "./node_modules/typescript/lib/lib.es2016.d.js",
113
+ "types": "./node_modules/typescript/lib/lib.es2016.d.d.ts"
114
+ },
115
+ "./node_modules/typescript/lib/lib.es2016.full.d.ts": {
116
+ "import": "./node_modules/typescript/lib/lib.es2016.full.d.js",
117
+ "types": "./node_modules/typescript/lib/lib.es2016.full.d.d.ts"
118
+ },
119
+ "./node_modules/typescript/lib/lib.es2016.intl.d.ts": {
120
+ "import": "./node_modules/typescript/lib/lib.es2016.intl.d.js",
121
+ "types": "./node_modules/typescript/lib/lib.es2016.intl.d.d.ts"
122
+ },
123
+ "./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts": {
124
+ "import": "./node_modules/typescript/lib/lib.es2017.arraybuffer.d.js",
125
+ "types": "./node_modules/typescript/lib/lib.es2017.arraybuffer.d.d.ts"
126
+ },
127
+ "./node_modules/typescript/lib/lib.es2017.d.ts": {
128
+ "import": "./node_modules/typescript/lib/lib.es2017.d.js",
129
+ "types": "./node_modules/typescript/lib/lib.es2017.d.d.ts"
130
+ },
131
+ "./node_modules/typescript/lib/lib.es2017.date.d.ts": {
132
+ "import": "./node_modules/typescript/lib/lib.es2017.date.d.js",
133
+ "types": "./node_modules/typescript/lib/lib.es2017.date.d.d.ts"
134
+ },
135
+ "./node_modules/typescript/lib/lib.es2017.full.d.ts": {
136
+ "import": "./node_modules/typescript/lib/lib.es2017.full.d.js",
137
+ "types": "./node_modules/typescript/lib/lib.es2017.full.d.d.ts"
138
+ },
139
+ "./node_modules/typescript/lib/lib.es2017.intl.d.ts": {
140
+ "import": "./node_modules/typescript/lib/lib.es2017.intl.d.js",
141
+ "types": "./node_modules/typescript/lib/lib.es2017.intl.d.d.ts"
142
+ },
143
+ "./node_modules/typescript/lib/lib.es2017.object.d.ts": {
144
+ "import": "./node_modules/typescript/lib/lib.es2017.object.d.js",
145
+ "types": "./node_modules/typescript/lib/lib.es2017.object.d.d.ts"
146
+ },
147
+ "./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": {
148
+ "import": "./node_modules/typescript/lib/lib.es2017.sharedmemory.d.js",
149
+ "types": "./node_modules/typescript/lib/lib.es2017.sharedmemory.d.d.ts"
150
+ },
151
+ "./node_modules/typescript/lib/lib.es2017.string.d.ts": {
152
+ "import": "./node_modules/typescript/lib/lib.es2017.string.d.js",
153
+ "types": "./node_modules/typescript/lib/lib.es2017.string.d.d.ts"
154
+ },
155
+ "./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": {
156
+ "import": "./node_modules/typescript/lib/lib.es2017.typedarrays.d.js",
157
+ "types": "./node_modules/typescript/lib/lib.es2017.typedarrays.d.d.ts"
158
+ },
159
+ "./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts": {
160
+ "import": "./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.js",
161
+ "types": "./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.d.ts"
162
+ },
163
+ "./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts": {
164
+ "import": "./node_modules/typescript/lib/lib.es2018.asynciterable.d.js",
165
+ "types": "./node_modules/typescript/lib/lib.es2018.asynciterable.d.d.ts"
166
+ },
167
+ "./node_modules/typescript/lib/lib.es2018.d.ts": {
168
+ "import": "./node_modules/typescript/lib/lib.es2018.d.js",
169
+ "types": "./node_modules/typescript/lib/lib.es2018.d.d.ts"
170
+ },
171
+ "./node_modules/typescript/lib/lib.es2018.full.d.ts": {
172
+ "import": "./node_modules/typescript/lib/lib.es2018.full.d.js",
173
+ "types": "./node_modules/typescript/lib/lib.es2018.full.d.d.ts"
174
+ },
175
+ "./node_modules/typescript/lib/lib.es2018.intl.d.ts": {
176
+ "import": "./node_modules/typescript/lib/lib.es2018.intl.d.js",
177
+ "types": "./node_modules/typescript/lib/lib.es2018.intl.d.d.ts"
178
+ },
179
+ "./node_modules/typescript/lib/lib.es2018.promise.d.ts": {
180
+ "import": "./node_modules/typescript/lib/lib.es2018.promise.d.js",
181
+ "types": "./node_modules/typescript/lib/lib.es2018.promise.d.d.ts"
182
+ },
183
+ "./node_modules/typescript/lib/lib.es2018.regexp.d.ts": {
184
+ "import": "./node_modules/typescript/lib/lib.es2018.regexp.d.js",
185
+ "types": "./node_modules/typescript/lib/lib.es2018.regexp.d.d.ts"
186
+ },
187
+ "./node_modules/typescript/lib/lib.es2019.array.d.ts": {
188
+ "import": "./node_modules/typescript/lib/lib.es2019.array.d.js",
189
+ "types": "./node_modules/typescript/lib/lib.es2019.array.d.d.ts"
190
+ },
191
+ "./node_modules/typescript/lib/lib.es2019.d.ts": {
192
+ "import": "./node_modules/typescript/lib/lib.es2019.d.js",
193
+ "types": "./node_modules/typescript/lib/lib.es2019.d.d.ts"
194
+ },
195
+ "./node_modules/typescript/lib/lib.es2019.full.d.ts": {
196
+ "import": "./node_modules/typescript/lib/lib.es2019.full.d.js",
197
+ "types": "./node_modules/typescript/lib/lib.es2019.full.d.d.ts"
198
+ },
199
+ "./node_modules/typescript/lib/lib.es2019.intl.d.ts": {
200
+ "import": "./node_modules/typescript/lib/lib.es2019.intl.d.js",
201
+ "types": "./node_modules/typescript/lib/lib.es2019.intl.d.d.ts"
202
+ },
203
+ "./node_modules/typescript/lib/lib.es2019.object.d.ts": {
204
+ "import": "./node_modules/typescript/lib/lib.es2019.object.d.js",
205
+ "types": "./node_modules/typescript/lib/lib.es2019.object.d.d.ts"
206
+ },
207
+ "./node_modules/typescript/lib/lib.es2019.string.d.ts": {
208
+ "import": "./node_modules/typescript/lib/lib.es2019.string.d.js",
209
+ "types": "./node_modules/typescript/lib/lib.es2019.string.d.d.ts"
210
+ },
211
+ "./node_modules/typescript/lib/lib.es2019.symbol.d.ts": {
212
+ "import": "./node_modules/typescript/lib/lib.es2019.symbol.d.js",
213
+ "types": "./node_modules/typescript/lib/lib.es2019.symbol.d.d.ts"
214
+ },
215
+ "./node_modules/typescript/lib/lib.es2020.bigint.d.ts": {
216
+ "import": "./node_modules/typescript/lib/lib.es2020.bigint.d.js",
217
+ "types": "./node_modules/typescript/lib/lib.es2020.bigint.d.d.ts"
218
+ },
219
+ "./node_modules/typescript/lib/lib.es2020.d.ts": {
220
+ "import": "./node_modules/typescript/lib/lib.es2020.d.js",
221
+ "types": "./node_modules/typescript/lib/lib.es2020.d.d.ts"
222
+ },
223
+ "./node_modules/typescript/lib/lib.es2020.date.d.ts": {
224
+ "import": "./node_modules/typescript/lib/lib.es2020.date.d.js",
225
+ "types": "./node_modules/typescript/lib/lib.es2020.date.d.d.ts"
226
+ },
227
+ "./node_modules/typescript/lib/lib.es2020.full.d.ts": {
228
+ "import": "./node_modules/typescript/lib/lib.es2020.full.d.js",
229
+ "types": "./node_modules/typescript/lib/lib.es2020.full.d.d.ts"
230
+ },
231
+ "./node_modules/typescript/lib/lib.es2020.intl.d.ts": {
232
+ "import": "./node_modules/typescript/lib/lib.es2020.intl.d.js",
233
+ "types": "./node_modules/typescript/lib/lib.es2020.intl.d.d.ts"
234
+ },
235
+ "./node_modules/typescript/lib/lib.es2020.number.d.ts": {
236
+ "import": "./node_modules/typescript/lib/lib.es2020.number.d.js",
237
+ "types": "./node_modules/typescript/lib/lib.es2020.number.d.d.ts"
238
+ },
239
+ "./node_modules/typescript/lib/lib.es2020.promise.d.ts": {
240
+ "import": "./node_modules/typescript/lib/lib.es2020.promise.d.js",
241
+ "types": "./node_modules/typescript/lib/lib.es2020.promise.d.d.ts"
242
+ },
243
+ "./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts": {
244
+ "import": "./node_modules/typescript/lib/lib.es2020.sharedmemory.d.js",
245
+ "types": "./node_modules/typescript/lib/lib.es2020.sharedmemory.d.d.ts"
246
+ },
247
+ "./node_modules/typescript/lib/lib.es2020.string.d.ts": {
248
+ "import": "./node_modules/typescript/lib/lib.es2020.string.d.js",
249
+ "types": "./node_modules/typescript/lib/lib.es2020.string.d.d.ts"
250
+ },
251
+ "./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts": {
252
+ "import": "./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.js",
253
+ "types": "./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.d.ts"
254
+ },
255
+ "./node_modules/typescript/lib/lib.es2021.d.ts": {
256
+ "import": "./node_modules/typescript/lib/lib.es2021.d.js",
257
+ "types": "./node_modules/typescript/lib/lib.es2021.d.d.ts"
258
+ },
259
+ "./node_modules/typescript/lib/lib.es2021.full.d.ts": {
260
+ "import": "./node_modules/typescript/lib/lib.es2021.full.d.js",
261
+ "types": "./node_modules/typescript/lib/lib.es2021.full.d.d.ts"
262
+ },
263
+ "./node_modules/typescript/lib/lib.es2021.intl.d.ts": {
264
+ "import": "./node_modules/typescript/lib/lib.es2021.intl.d.js",
265
+ "types": "./node_modules/typescript/lib/lib.es2021.intl.d.d.ts"
266
+ },
267
+ "./node_modules/typescript/lib/lib.es2021.promise.d.ts": {
268
+ "import": "./node_modules/typescript/lib/lib.es2021.promise.d.js",
269
+ "types": "./node_modules/typescript/lib/lib.es2021.promise.d.d.ts"
270
+ },
271
+ "./node_modules/typescript/lib/lib.es2021.string.d.ts": {
272
+ "import": "./node_modules/typescript/lib/lib.es2021.string.d.js",
273
+ "types": "./node_modules/typescript/lib/lib.es2021.string.d.d.ts"
274
+ },
275
+ "./node_modules/typescript/lib/lib.es2021.weakref.d.ts": {
276
+ "import": "./node_modules/typescript/lib/lib.es2021.weakref.d.js",
277
+ "types": "./node_modules/typescript/lib/lib.es2021.weakref.d.d.ts"
278
+ },
279
+ "./node_modules/typescript/lib/lib.es2022.array.d.ts": {
280
+ "import": "./node_modules/typescript/lib/lib.es2022.array.d.js",
281
+ "types": "./node_modules/typescript/lib/lib.es2022.array.d.d.ts"
282
+ },
283
+ "./node_modules/typescript/lib/lib.es2022.d.ts": {
284
+ "import": "./node_modules/typescript/lib/lib.es2022.d.js",
285
+ "types": "./node_modules/typescript/lib/lib.es2022.d.d.ts"
286
+ },
287
+ "./node_modules/typescript/lib/lib.es2022.error.d.ts": {
288
+ "import": "./node_modules/typescript/lib/lib.es2022.error.d.js",
289
+ "types": "./node_modules/typescript/lib/lib.es2022.error.d.d.ts"
290
+ },
291
+ "./node_modules/typescript/lib/lib.es2022.full.d.ts": {
292
+ "import": "./node_modules/typescript/lib/lib.es2022.full.d.js",
293
+ "types": "./node_modules/typescript/lib/lib.es2022.full.d.d.ts"
294
+ },
295
+ "./node_modules/typescript/lib/lib.es2022.intl.d.ts": {
296
+ "import": "./node_modules/typescript/lib/lib.es2022.intl.d.js",
297
+ "types": "./node_modules/typescript/lib/lib.es2022.intl.d.d.ts"
298
+ },
299
+ "./node_modules/typescript/lib/lib.es2022.object.d.ts": {
300
+ "import": "./node_modules/typescript/lib/lib.es2022.object.d.js",
301
+ "types": "./node_modules/typescript/lib/lib.es2022.object.d.d.ts"
302
+ },
303
+ "./node_modules/typescript/lib/lib.es2022.regexp.d.ts": {
304
+ "import": "./node_modules/typescript/lib/lib.es2022.regexp.d.js",
305
+ "types": "./node_modules/typescript/lib/lib.es2022.regexp.d.d.ts"
306
+ },
307
+ "./node_modules/typescript/lib/lib.es2022.string.d.ts": {
308
+ "import": "./node_modules/typescript/lib/lib.es2022.string.d.js",
309
+ "types": "./node_modules/typescript/lib/lib.es2022.string.d.d.ts"
310
+ },
311
+ "./node_modules/typescript/lib/lib.es2023.array.d.ts": {
312
+ "import": "./node_modules/typescript/lib/lib.es2023.array.d.js",
313
+ "types": "./node_modules/typescript/lib/lib.es2023.array.d.d.ts"
314
+ },
315
+ "./node_modules/typescript/lib/lib.es2023.collection.d.ts": {
316
+ "import": "./node_modules/typescript/lib/lib.es2023.collection.d.js",
317
+ "types": "./node_modules/typescript/lib/lib.es2023.collection.d.d.ts"
318
+ },
319
+ "./node_modules/typescript/lib/lib.es2023.d.ts": {
320
+ "import": "./node_modules/typescript/lib/lib.es2023.d.js",
321
+ "types": "./node_modules/typescript/lib/lib.es2023.d.d.ts"
322
+ },
323
+ "./node_modules/typescript/lib/lib.es2023.full.d.ts": {
324
+ "import": "./node_modules/typescript/lib/lib.es2023.full.d.js",
325
+ "types": "./node_modules/typescript/lib/lib.es2023.full.d.d.ts"
326
+ },
327
+ "./node_modules/typescript/lib/lib.es2023.intl.d.ts": {
328
+ "import": "./node_modules/typescript/lib/lib.es2023.intl.d.js",
329
+ "types": "./node_modules/typescript/lib/lib.es2023.intl.d.d.ts"
330
+ },
331
+ "./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts": {
332
+ "import": "./node_modules/typescript/lib/lib.es2024.arraybuffer.d.js",
333
+ "types": "./node_modules/typescript/lib/lib.es2024.arraybuffer.d.d.ts"
334
+ },
335
+ "./node_modules/typescript/lib/lib.es2024.collection.d.ts": {
336
+ "import": "./node_modules/typescript/lib/lib.es2024.collection.d.js",
337
+ "types": "./node_modules/typescript/lib/lib.es2024.collection.d.d.ts"
338
+ },
339
+ "./node_modules/typescript/lib/lib.es2024.d.ts": {
340
+ "import": "./node_modules/typescript/lib/lib.es2024.d.js",
341
+ "types": "./node_modules/typescript/lib/lib.es2024.d.d.ts"
342
+ },
343
+ "./node_modules/typescript/lib/lib.es2024.full.d.ts": {
344
+ "import": "./node_modules/typescript/lib/lib.es2024.full.d.js",
345
+ "types": "./node_modules/typescript/lib/lib.es2024.full.d.d.ts"
346
+ },
347
+ "./node_modules/typescript/lib/lib.es2024.object.d.ts": {
348
+ "import": "./node_modules/typescript/lib/lib.es2024.object.d.js",
349
+ "types": "./node_modules/typescript/lib/lib.es2024.object.d.d.ts"
350
+ },
351
+ "./node_modules/typescript/lib/lib.es2024.promise.d.ts": {
352
+ "import": "./node_modules/typescript/lib/lib.es2024.promise.d.js",
353
+ "types": "./node_modules/typescript/lib/lib.es2024.promise.d.d.ts"
354
+ },
355
+ "./node_modules/typescript/lib/lib.es2024.regexp.d.ts": {
356
+ "import": "./node_modules/typescript/lib/lib.es2024.regexp.d.js",
357
+ "types": "./node_modules/typescript/lib/lib.es2024.regexp.d.d.ts"
358
+ },
359
+ "./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts": {
360
+ "import": "./node_modules/typescript/lib/lib.es2024.sharedmemory.d.js",
361
+ "types": "./node_modules/typescript/lib/lib.es2024.sharedmemory.d.d.ts"
362
+ },
363
+ "./node_modules/typescript/lib/lib.es2024.string.d.ts": {
364
+ "import": "./node_modules/typescript/lib/lib.es2024.string.d.js",
365
+ "types": "./node_modules/typescript/lib/lib.es2024.string.d.d.ts"
366
+ },
367
+ "./node_modules/typescript/lib/lib.es5.d.ts": {
368
+ "import": "./node_modules/typescript/lib/lib.es5.d.js",
369
+ "types": "./node_modules/typescript/lib/lib.es5.d.d.ts"
370
+ },
371
+ "./node_modules/typescript/lib/lib.es6.d.ts": {
372
+ "import": "./node_modules/typescript/lib/lib.es6.d.js",
373
+ "types": "./node_modules/typescript/lib/lib.es6.d.d.ts"
374
+ },
375
+ "./node_modules/typescript/lib/lib.esnext.array.d.ts": {
376
+ "import": "./node_modules/typescript/lib/lib.esnext.array.d.js",
377
+ "types": "./node_modules/typescript/lib/lib.esnext.array.d.d.ts"
378
+ },
379
+ "./node_modules/typescript/lib/lib.esnext.collection.d.ts": {
380
+ "import": "./node_modules/typescript/lib/lib.esnext.collection.d.js",
381
+ "types": "./node_modules/typescript/lib/lib.esnext.collection.d.d.ts"
382
+ },
383
+ "./node_modules/typescript/lib/lib.esnext.d.ts": {
384
+ "import": "./node_modules/typescript/lib/lib.esnext.d.js",
385
+ "types": "./node_modules/typescript/lib/lib.esnext.d.d.ts"
386
+ },
387
+ "./node_modules/typescript/lib/lib.esnext.decorators.d.ts": {
388
+ "import": "./node_modules/typescript/lib/lib.esnext.decorators.d.js",
389
+ "types": "./node_modules/typescript/lib/lib.esnext.decorators.d.d.ts"
390
+ },
391
+ "./node_modules/typescript/lib/lib.esnext.disposable.d.ts": {
392
+ "import": "./node_modules/typescript/lib/lib.esnext.disposable.d.js",
393
+ "types": "./node_modules/typescript/lib/lib.esnext.disposable.d.d.ts"
394
+ },
395
+ "./node_modules/typescript/lib/lib.esnext.error.d.ts": {
396
+ "import": "./node_modules/typescript/lib/lib.esnext.error.d.js",
397
+ "types": "./node_modules/typescript/lib/lib.esnext.error.d.d.ts"
398
+ },
399
+ "./node_modules/typescript/lib/lib.esnext.float16.d.ts": {
400
+ "import": "./node_modules/typescript/lib/lib.esnext.float16.d.js",
401
+ "types": "./node_modules/typescript/lib/lib.esnext.float16.d.d.ts"
402
+ },
403
+ "./node_modules/typescript/lib/lib.esnext.full.d.ts": {
404
+ "import": "./node_modules/typescript/lib/lib.esnext.full.d.js",
405
+ "types": "./node_modules/typescript/lib/lib.esnext.full.d.d.ts"
406
+ },
407
+ "./node_modules/typescript/lib/lib.esnext.intl.d.ts": {
408
+ "import": "./node_modules/typescript/lib/lib.esnext.intl.d.js",
409
+ "types": "./node_modules/typescript/lib/lib.esnext.intl.d.d.ts"
410
+ },
411
+ "./node_modules/typescript/lib/lib.esnext.iterator.d.ts": {
412
+ "import": "./node_modules/typescript/lib/lib.esnext.iterator.d.js",
413
+ "types": "./node_modules/typescript/lib/lib.esnext.iterator.d.d.ts"
414
+ },
415
+ "./node_modules/typescript/lib/lib.esnext.promise.d.ts": {
416
+ "import": "./node_modules/typescript/lib/lib.esnext.promise.d.js",
417
+ "types": "./node_modules/typescript/lib/lib.esnext.promise.d.d.ts"
418
+ },
419
+ "./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts": {
420
+ "import": "./node_modules/typescript/lib/lib.esnext.sharedmemory.d.js",
421
+ "types": "./node_modules/typescript/lib/lib.esnext.sharedmemory.d.d.ts"
422
+ },
423
+ "./node_modules/typescript/lib/lib.scripthost.d.ts": {
424
+ "import": "./node_modules/typescript/lib/lib.scripthost.d.js",
425
+ "types": "./node_modules/typescript/lib/lib.scripthost.d.d.ts"
426
+ },
427
+ "./node_modules/typescript/lib/lib.webworker.asynciterable.d.ts": {
428
+ "import": "./node_modules/typescript/lib/lib.webworker.asynciterable.d.js",
429
+ "types": "./node_modules/typescript/lib/lib.webworker.asynciterable.d.d.ts"
430
+ },
431
+ "./node_modules/typescript/lib/lib.webworker.d.ts": {
432
+ "import": "./node_modules/typescript/lib/lib.webworker.d.js",
433
+ "types": "./node_modules/typescript/lib/lib.webworker.d.d.ts"
434
+ },
435
+ "./node_modules/typescript/lib/lib.webworker.importscripts.d.ts": {
436
+ "import": "./node_modules/typescript/lib/lib.webworker.importscripts.d.js",
437
+ "types": "./node_modules/typescript/lib/lib.webworker.importscripts.d.d.ts"
438
+ },
439
+ "./node_modules/typescript/lib/lib.webworker.iterable.d.ts": {
440
+ "import": "./node_modules/typescript/lib/lib.webworker.iterable.d.js",
441
+ "types": "./node_modules/typescript/lib/lib.webworker.iterable.d.d.ts"
442
+ },
443
+ "./node_modules/typescript/lib/tsserverlibrary.d.ts": {
444
+ "import": "./node_modules/typescript/lib/tsserverlibrary.d.js",
445
+ "types": "./node_modules/typescript/lib/tsserverlibrary.d.d.ts"
446
+ },
447
+ "./node_modules/typescript/lib/typescript.d.ts": {
448
+ "import": "./node_modules/typescript/lib/typescript.d.js",
449
+ "types": "./node_modules/typescript/lib/typescript.d.d.ts"
450
+ },
451
+ "./type.ts": {
452
+ "import": "./type.js",
453
+ "types": "./type.d.ts"
454
+ }
455
+ }
456
+ }
package/type.d.ts ADDED
@@ -0,0 +1,28 @@
1
+ import type { QwikAppIdentity } from './identity.ts';
2
+ import type { Application, ApplicationRunReturn, ApplicationTypeConfig } from '@dungarees/core/application.ts';
3
+ import type { GetValueByKey, PartialBesides, RecordToEntries } from '@dungarees/core/type-util.ts';
4
+ export type RequiredApplicationConfig = PartialBesides<ApplicationTypeConfig, 'behaviors' | 'exportState' | 'identity'>;
5
+ export type QwikApplicationConfig = RequiredApplicationConfig & {
6
+ identity: QwikAppIdentity;
7
+ };
8
+ export type BehaviorName<APPLICATION extends RequiredApplicationConfig> = keyof APPLICATION['behaviors'] & string;
9
+ export type BehaviorByName<APPLICATION extends RequiredApplicationConfig, NAME extends BehaviorName<APPLICATION>> = GetValueByKey<RecordToEntries<APPLICATION['behaviors']>, NAME>;
10
+ export type LoadBehaviorsByName<APPLICATION extends RequiredApplicationConfig> = <NAME extends BehaviorName<APPLICATION>>(identity: APPLICATION['identity'], name: NAME) => BehaviorByName<APPLICATION, NAME>;
11
+ export type LoadBehaviors<APPLICATION extends RequiredApplicationConfig> = {
12
+ <NAME extends BehaviorName<APPLICATION>>(identity: APPLICATION['identity'], name: NAME): BehaviorByName<APPLICATION, NAME>;
13
+ (identity: APPLICATION['identity']): APPLICATION['behaviors'];
14
+ };
15
+ export type BehaviorsTools<APPLICATION extends RequiredApplicationConfig> = {
16
+ loadBehaviors: LoadBehaviors<APPLICATION>;
17
+ setServerBehaviors: (args: {
18
+ behaviors: APPLICATION['behaviors'];
19
+ exportState?: () => APPLICATION['exportState'];
20
+ }) => void;
21
+ exportBehaviorsState: (identity: APPLICATION['identity']) => APPLICATION['exportState'];
22
+ importBehaviorsState: (args: {
23
+ identity: APPLICATION['identity'];
24
+ state: APPLICATION['exportState'];
25
+ }) => void;
26
+ };
27
+ export type ApplicationFactory<APPLICATION extends RequiredApplicationConfig> = () => Application<APPLICATION>;
28
+ export type ApplicationRun<APPLICATION extends RequiredApplicationConfig> = ApplicationRunReturn<APPLICATION>;
package/type.js ADDED
@@ -0,0 +1 @@
1
+ export {};