@effect-app/vue 4.0.0-beta.19 → 4.0.0-beta.191
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/CHANGELOG.md +1398 -0
- package/dist/commander.d.ts +620 -0
- package/dist/commander.d.ts.map +1 -0
- package/dist/commander.js +1056 -0
- package/dist/confirm.d.ts +19 -0
- package/dist/confirm.d.ts.map +1 -0
- package/dist/confirm.js +24 -0
- package/dist/errorReporter.d.ts +4 -4
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +12 -18
- package/dist/form.d.ts +14 -5
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +41 -12
- package/dist/index.d.ts +1 -1
- package/dist/intl.d.ts +15 -0
- package/dist/intl.d.ts.map +1 -0
- package/dist/intl.js +9 -0
- package/dist/lib.d.ts +6 -8
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +34 -7
- package/dist/makeClient.d.ts +191 -292
- package/dist/makeClient.d.ts.map +1 -1
- package/dist/makeClient.js +217 -369
- package/dist/makeContext.d.ts +1 -1
- package/dist/makeContext.d.ts.map +1 -1
- package/dist/makeIntl.d.ts +1 -1
- package/dist/makeIntl.d.ts.map +1 -1
- package/dist/makeUseCommand.d.ts +8 -0
- package/dist/makeUseCommand.d.ts.map +1 -0
- package/dist/makeUseCommand.js +13 -0
- package/dist/mutate.d.ts +56 -25
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +132 -33
- package/dist/query.d.ts +24 -16
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +119 -37
- package/dist/routeParams.d.ts +1 -1
- package/dist/runtime.d.ts +7 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +27 -17
- package/dist/toast.d.ts +46 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +32 -0
- package/dist/withToast.d.ts +26 -0
- package/dist/withToast.d.ts.map +1 -0
- package/dist/withToast.js +54 -0
- package/examples/streamMutation.ts +70 -0
- package/package.json +47 -49
- package/src/commander.ts +3378 -0
- package/src/{experimental/confirm.ts → confirm.ts} +10 -14
- package/src/errorReporter.ts +62 -74
- package/src/form.ts +56 -17
- package/src/intl.ts +12 -0
- package/src/lib.ts +46 -13
- package/src/makeClient.ts +623 -1043
- package/src/{experimental/makeUseCommand.ts → makeUseCommand.ts} +6 -4
- package/src/mutate.ts +273 -72
- package/src/query.ts +181 -68
- package/src/runtime.ts +41 -20
- package/src/{experimental/toast.ts → toast.ts} +11 -25
- package/src/{experimental/withToast.ts → withToast.ts} +28 -10
- package/test/Mutation.test.ts +176 -23
- package/test/dist/form.test.d.ts.map +1 -1
- package/test/dist/lib.test.d.ts.map +1 -0
- package/test/dist/streamFinal.test.d.ts.map +1 -0
- package/test/dist/streamFn.test.d.ts.map +1 -0
- package/test/dist/stubs.d.ts +3294 -115
- package/test/dist/stubs.d.ts.map +1 -1
- package/test/dist/stubs.js +177 -31
- package/test/form-validation-errors.test.ts +23 -19
- package/test/form.test.ts +20 -2
- package/test/lib.test.ts +240 -0
- package/test/makeClient.test.ts +286 -38
- package/test/streamFinal.test.ts +63 -0
- package/test/streamFn.test.ts +455 -0
- package/test/stubs.ts +213 -42
- package/tsconfig.examples.json +20 -0
- package/tsconfig.json +0 -1
- package/tsconfig.json.bak +5 -2
- package/tsconfig.src.json +34 -34
- package/tsconfig.test.json +2 -2
- package/vitest.config.ts +5 -5
- package/dist/experimental/commander.d.ts +0 -359
- package/dist/experimental/commander.d.ts.map +0 -1
- package/dist/experimental/commander.js +0 -557
- package/dist/experimental/confirm.d.ts +0 -19
- package/dist/experimental/confirm.d.ts.map +0 -1
- package/dist/experimental/confirm.js +0 -28
- package/dist/experimental/intl.d.ts +0 -16
- package/dist/experimental/intl.d.ts.map +0 -1
- package/dist/experimental/intl.js +0 -5
- package/dist/experimental/makeUseCommand.d.ts +0 -8
- package/dist/experimental/makeUseCommand.d.ts.map +0 -1
- package/dist/experimental/makeUseCommand.js +0 -13
- package/dist/experimental/toast.d.ts +0 -47
- package/dist/experimental/toast.d.ts.map +0 -1
- package/dist/experimental/toast.js +0 -41
- package/dist/experimental/withToast.d.ts +0 -25
- package/dist/experimental/withToast.d.ts.map +0 -1
- package/dist/experimental/withToast.js +0 -45
- package/eslint.config.mjs +0 -24
- package/src/experimental/commander.ts +0 -1835
- package/src/experimental/intl.ts +0 -9
package/test/dist/stubs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../stubs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../stubs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAG9E,OAAO,EAAE,MAAM,EAAE,KAAK,EAA0B,CAAC,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAiB,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAI9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAqD/C,eAAO,MAAM,YAAY,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,KAe/F,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,aAAa,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,oCAC/B,CAAA;AAExE,eAAO,MAAM,eAAe,aAChB;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE,gGASxG,CAAA;AAKD,eAAO,MAAM,gBAAgB,aACjB;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE,6HASxG,CAAA;;;;;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAAyB;CAAG;AACnE,eAAO,MAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqC,CAAA;AAEpE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCxG,CAAA"}
|
package/test/dist/stubs.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import * as Intl from "@formatjs/intl";
|
|
2
|
+
import { QueryClient, VueQueryPlugin } from "@tanstack/vue-query";
|
|
2
3
|
import { Effect, Layer, ManagedRuntime, Option, S } from "effect-app";
|
|
3
4
|
import { ApiClientFactory, makeRpcClient } from "effect-app/client";
|
|
4
5
|
import { RpcContextMap } from "effect-app/rpc";
|
|
6
|
+
import * as Exit from "effect/Exit";
|
|
5
7
|
import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
|
|
6
|
-
import { ref } from "vue";
|
|
7
|
-
import { Commander } from "../src/
|
|
8
|
-
import { I18n } from "../src/
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
8
|
+
import { createApp, ref } from "vue";
|
|
9
|
+
import { Commander } from "../src/commander.js";
|
|
10
|
+
import { I18n } from "../src/intl.js";
|
|
11
|
+
import { makeClient } from "../src/makeClient.js";
|
|
12
|
+
import { makeUseCommand } from "../src/makeUseCommand.js";
|
|
13
|
+
import * as Toast from "../src/toast.js";
|
|
14
|
+
import { WithToast } from "../src/withToast.js";
|
|
13
15
|
const fakeToastLayer = (toasts = []) => Layer.effect(Toast.Toast, Effect.sync(() => {
|
|
14
16
|
const dismiss = (id) => {
|
|
15
17
|
const idx = toasts.findIndex((_) => _.id === id);
|
|
@@ -19,33 +21,41 @@ const fakeToastLayer = (toasts = []) => Layer.effect(Toast.Toast, Effect.sync(()
|
|
|
19
21
|
toasts.splice(idx, 1);
|
|
20
22
|
}
|
|
21
23
|
};
|
|
22
|
-
const
|
|
24
|
+
const scheduleAutoDismiss = (toast, timeout) => {
|
|
25
|
+
// Treat Infinity / undefined as "stays until explicitly replaced/dismissed".
|
|
26
|
+
// Node's setTimeout silently clamps Infinity to 1ms which would otherwise
|
|
27
|
+
// cause the toast to disappear before assertions can observe it.
|
|
28
|
+
if (timeout === undefined || !Number.isFinite(timeout))
|
|
29
|
+
return;
|
|
30
|
+
toast.timeoutId = setTimeout(() => {
|
|
31
|
+
const i = toasts.indexOf(toast);
|
|
32
|
+
if (i > -1)
|
|
33
|
+
toasts.splice(i, 1);
|
|
34
|
+
}, timeout);
|
|
35
|
+
};
|
|
36
|
+
const fakeToast = (type) => (message, options) => {
|
|
23
37
|
const id = options?.id ?? Math.random().toString(36).substring(2, 15);
|
|
24
|
-
console.log(`Toast [${id}]: ${message}`, options);
|
|
38
|
+
console.log(`Toast [${type}][${id}]: ${message}`, options);
|
|
25
39
|
options = { ...options, id };
|
|
26
40
|
const idx = toasts.findIndex((_) => _.id === id);
|
|
27
41
|
if (idx > -1) {
|
|
28
42
|
const toast = toasts[idx];
|
|
29
43
|
clearTimeout(toast.timeoutId);
|
|
30
|
-
Object.assign(toast, { message, options });
|
|
31
|
-
toast
|
|
32
|
-
toasts.splice(idx, 1);
|
|
33
|
-
}, options?.timeout ?? 3000);
|
|
44
|
+
Object.assign(toast, { type, message, options });
|
|
45
|
+
scheduleAutoDismiss(toast, options?.timeout ?? 3000);
|
|
34
46
|
}
|
|
35
47
|
else {
|
|
36
|
-
const toast = { id, message, options };
|
|
37
|
-
toast.timeoutId = setTimeout(() => {
|
|
38
|
-
toasts.splice(idx, 1);
|
|
39
|
-
}, options?.timeout ?? 3000);
|
|
48
|
+
const toast = { id, type, message, options };
|
|
40
49
|
toasts.push(toast);
|
|
50
|
+
scheduleAutoDismiss(toast, options?.timeout ?? 3000);
|
|
41
51
|
}
|
|
42
52
|
return id;
|
|
43
53
|
};
|
|
44
54
|
return Toast.Toast.of(Toast.wrap({
|
|
45
|
-
error: fakeToast,
|
|
46
|
-
warning: fakeToast,
|
|
47
|
-
success: fakeToast,
|
|
48
|
-
info: fakeToast,
|
|
55
|
+
error: fakeToast("error"),
|
|
56
|
+
warning: fakeToast("warning"),
|
|
57
|
+
success: fakeToast("success"),
|
|
58
|
+
info: fakeToast("info"),
|
|
49
59
|
dismiss
|
|
50
60
|
}));
|
|
51
61
|
}));
|
|
@@ -74,31 +84,167 @@ export const useExperimental = (options) => {
|
|
|
74
84
|
const layers = Layer.mergeAll(CommanderLayer, WithToastLayer, FakeToastLayer, FakeIntlLayer);
|
|
75
85
|
return Effect.runSync(makeUseCommand(Layer.empty).pipe(Effect.provide(layers)));
|
|
76
86
|
};
|
|
87
|
+
// Effect-returning variant: keeps the caller's runtime context (e.g. a TestClock
|
|
88
|
+
// provided by `it.effect`) so virtual-time advances reach the runtime captured
|
|
89
|
+
// inside Commander.
|
|
90
|
+
export const useExperimentalE = (options) => {
|
|
91
|
+
const FakeIntlLayer = fakeIntlLayer(options?.messages);
|
|
92
|
+
const FakeToastLayer = fakeToastLayer(options?.toasts);
|
|
93
|
+
const CommanderLayer = Commander.Default.pipe(Layer.provide([FakeIntlLayer, FakeToastLayer]));
|
|
94
|
+
const WithToastLayer = WithToast.Default.pipe(Layer.provide(FakeToastLayer));
|
|
95
|
+
const layers = Layer.mergeAll(CommanderLayer, WithToastLayer, FakeToastLayer, FakeIntlLayer);
|
|
96
|
+
return makeUseCommand(Layer.empty).pipe(Effect.provide(layers));
|
|
97
|
+
};
|
|
77
98
|
export class RequestContextMap extends RpcContextMap.makeMap({}) {
|
|
78
99
|
}
|
|
79
|
-
export const {
|
|
80
|
-
export
|
|
100
|
+
export const { TaggedRequestFor } = makeRpcClient(RequestContextMap);
|
|
101
|
+
export const SomethingReq = TaggedRequestFor("Something");
|
|
102
|
+
const SomethingQuery = SomethingReq.Query;
|
|
103
|
+
const SomethingCommand = SomethingReq.Command;
|
|
104
|
+
const SomethingStream = SomethingReq.Stream;
|
|
105
|
+
class SomethingGetSomething2 extends SomethingQuery()("GetSomething2", {
|
|
81
106
|
id: S.String
|
|
82
|
-
}, { success: S.
|
|
107
|
+
}, { success: S.FiniteFromString }) {
|
|
108
|
+
}
|
|
109
|
+
class SomethingGetSomething3 extends SomethingQuery()("GetSomething3", {
|
|
110
|
+
id: S.NullOr(S.String).withDefault
|
|
111
|
+
}, { success: S.FiniteFromString }) {
|
|
112
|
+
}
|
|
113
|
+
class SomethingGetSomething4 extends SomethingQuery()("GetSomething4", {}, { success: S.FiniteFromString }) {
|
|
83
114
|
}
|
|
84
|
-
|
|
115
|
+
class SomethingGetSomething2WithDependencies extends SomethingQuery()("GetSomething2", {
|
|
85
116
|
id: S.String
|
|
86
117
|
}, {
|
|
87
118
|
// this is intentilally fake, to simulate a codec that requires a dependency
|
|
88
|
-
success: S.
|
|
119
|
+
success: S.FiniteFromString,
|
|
89
120
|
error: S.String
|
|
90
121
|
}) {
|
|
91
122
|
}
|
|
92
|
-
|
|
123
|
+
// command stubs covering the input-shape matrix
|
|
124
|
+
class SomethingDoNoProps extends SomethingCommand()("DoNoProps", {}) {
|
|
125
|
+
}
|
|
126
|
+
class SomethingDoOptionalOnly extends SomethingCommand()("DoOptionalOnly", {
|
|
127
|
+
name: S.optional(S.String)
|
|
128
|
+
}) {
|
|
129
|
+
}
|
|
130
|
+
class SomethingDoRequiredOnly extends SomethingCommand()("DoRequiredOnly", {
|
|
131
|
+
id: S.String
|
|
132
|
+
}) {
|
|
133
|
+
}
|
|
134
|
+
class SomethingDoMixed extends SomethingCommand()("DoMixed", {
|
|
135
|
+
id: S.String,
|
|
136
|
+
name: S.optional(S.String)
|
|
137
|
+
}) {
|
|
138
|
+
}
|
|
139
|
+
class SomethingDoSomething extends SomethingCommand()("DoSomething", {
|
|
140
|
+
id: S.String
|
|
141
|
+
}, {
|
|
142
|
+
success: S.FiniteFromString
|
|
143
|
+
}, (queryKey, { Something }, input, output) => {
|
|
144
|
+
return [
|
|
145
|
+
{ filters: { queryKey } },
|
|
146
|
+
{
|
|
147
|
+
filters: {
|
|
148
|
+
queryKey: [
|
|
149
|
+
Something["GetSomething2"].id,
|
|
150
|
+
input.id,
|
|
151
|
+
Exit.isSuccess(output) ? output.value.toString() : "failed"
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
];
|
|
156
|
+
}) {
|
|
157
|
+
}
|
|
158
|
+
// success schema has encoded shape { a: string | null } — used to test projection constraints
|
|
159
|
+
class SomethingGetStructNullable extends SomethingQuery()("GetStructNullable", {}, {
|
|
160
|
+
success: S.Struct({ a: S.NullOr(S.String) })
|
|
161
|
+
}) {
|
|
162
|
+
}
|
|
163
|
+
/** Stream event: intermediate progress update. */
|
|
164
|
+
export class OperationProgress extends S.TaggedClass()("OperationProgress", {
|
|
165
|
+
completed: S.NonNegativeInt,
|
|
166
|
+
total: S.NonNegativeInt
|
|
167
|
+
}) {
|
|
168
|
+
}
|
|
169
|
+
/** Stream event: final completion result. */
|
|
170
|
+
export class ExportComplete extends S.TaggedClass()("ExportComplete", {
|
|
171
|
+
fileUrl: S.NonEmptyString
|
|
172
|
+
}) {
|
|
173
|
+
}
|
|
174
|
+
/** Stream with no `final` schema — execute resolves with `void`. */
|
|
175
|
+
class SomethingStreamWithoutFinal extends SomethingStream()("StreamWithoutFinal", {
|
|
176
|
+
id: S.String
|
|
177
|
+
}, {
|
|
178
|
+
success: S.Union([OperationProgress, ExportComplete])
|
|
179
|
+
}) {
|
|
180
|
+
}
|
|
181
|
+
/** Stream with a `final` schema — execute resolves with `ExportComplete`. */
|
|
182
|
+
class SomethingStreamWithFinal extends SomethingStream()("StreamWithFinal", {
|
|
183
|
+
id: S.String
|
|
184
|
+
}, {
|
|
185
|
+
success: S.Union([OperationProgress, ExportComplete]),
|
|
186
|
+
final: ExportComplete
|
|
187
|
+
}) {
|
|
188
|
+
}
|
|
189
|
+
export const Something = {
|
|
190
|
+
GetSomething2: SomethingGetSomething2,
|
|
191
|
+
GetSomething2WithDependencies: SomethingGetSomething2WithDependencies,
|
|
192
|
+
GetSomething3: SomethingGetSomething3,
|
|
193
|
+
GetSomething4: SomethingGetSomething4,
|
|
194
|
+
DoNoProps: SomethingDoNoProps,
|
|
195
|
+
DoOptionalOnly: SomethingDoOptionalOnly,
|
|
196
|
+
DoRequiredOnly: SomethingDoRequiredOnly,
|
|
197
|
+
DoMixed: SomethingDoMixed,
|
|
198
|
+
DoSomething: SomethingDoSomething,
|
|
199
|
+
GetStructNullable: SomethingGetStructNullable,
|
|
200
|
+
StreamWithoutFinal: SomethingStreamWithoutFinal,
|
|
201
|
+
StreamWithFinal: SomethingStreamWithFinal
|
|
202
|
+
};
|
|
203
|
+
export const SomethingElseReq = TaggedRequestFor("SomethingElse");
|
|
204
|
+
const SomethingElseQuery = SomethingElseReq.Query;
|
|
205
|
+
class SomethingElseGetSomething2 extends SomethingElseQuery()("GetSomething2", {
|
|
206
|
+
id: S.String
|
|
207
|
+
}, { success: S.FiniteFromString }) {
|
|
208
|
+
}
|
|
209
|
+
class SomethingElseGetSomething2WithDependencies extends SomethingElseQuery()("GetSomething2", {
|
|
210
|
+
id: S.String
|
|
211
|
+
}, {
|
|
212
|
+
success: S.FiniteFromString,
|
|
213
|
+
error: S.String
|
|
214
|
+
}) {
|
|
215
|
+
}
|
|
216
|
+
export const SomethingElse = {
|
|
217
|
+
GetSomething2: SomethingElseGetSomething2,
|
|
218
|
+
GetSomething2WithDependencies: SomethingElseGetSomething2WithDependencies
|
|
219
|
+
};
|
|
93
220
|
export const useClient = (options) => {
|
|
94
221
|
const FakeIntlLayer = fakeIntlLayer(options?.messages);
|
|
95
222
|
const FakeToastLayer = fakeToastLayer(options?.toasts);
|
|
96
223
|
const CommanderLayer = Commander.Default.pipe(Layer.provide([FakeIntlLayer, FakeToastLayer]));
|
|
97
224
|
const WithToastLayer = WithToast.Default.pipe(Layer.provide(FakeToastLayer));
|
|
98
225
|
const api = ApiClientFactory.layer({ url: "bogus", headers: Option.none() }).pipe(Layer.provide(FetchHttpClient.layer));
|
|
99
|
-
const
|
|
100
|
-
const layers = Layer.mergeAll(CommanderLayer, WithToastLayer, FakeToastLayer, FakeIntlLayer, api, lm);
|
|
226
|
+
const layers = Layer.mergeAll(CommanderLayer, WithToastLayer, FakeToastLayer, FakeIntlLayer, api);
|
|
101
227
|
const clientFor_ = ApiClientFactory.makeFor(Layer.empty);
|
|
102
|
-
|
|
228
|
+
const rawClient = makeClient(() => ManagedRuntime.make(layers), clientFor_, Layer.empty);
|
|
229
|
+
// Provide a Vue injection context so that composition-API hooks (e.g. useQueryClient)
|
|
230
|
+
// called during client initialisation work outside a component setup() function.
|
|
231
|
+
const vueApp = createApp({});
|
|
232
|
+
const testQueryClientConfig = { defaultOptions: { queries: { retry: false }, mutations: { retry: false } } };
|
|
233
|
+
vueApp.use(VueQueryPlugin, { queryClient: new QueryClient(testQueryClientConfig) });
|
|
234
|
+
const origClientFor = rawClient.clientFor;
|
|
235
|
+
const clientFor = function (m, ...args) {
|
|
236
|
+
const proxy = origClientFor(m, ...args);
|
|
237
|
+
// Warm up lazy mutation-hook initialisation inside the Vue injection context.
|
|
238
|
+
// After the first property access, useMutation() is cached and subsequent
|
|
239
|
+
// accesses outside the context succeed.
|
|
240
|
+
const firstPropertyName = Object.keys(m)[0];
|
|
241
|
+
if (firstPropertyName !== undefined) {
|
|
242
|
+
vueApp.runWithContext(() => {
|
|
243
|
+
void proxy[firstPropertyName];
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return proxy;
|
|
247
|
+
};
|
|
248
|
+
return { ...rawClient, clientFor };
|
|
103
249
|
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R1YnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zdHVicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDOUMsT0FBTyxLQUFLLGVBQWUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBQ3RFLE9BQU8sS0FBSyxLQUFLLE1BQU0sOEJBQThCLENBQUE7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFHakUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFnQixFQUFFLEVBQUUsRUFBRSxDQUM1QyxLQUFLLENBQUMsTUFBTSxDQUNWLEtBQUssQ0FBQyxLQUFLLEVBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDZixNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQWlCLEVBQUUsRUFBRTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxL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
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R1YnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zdHVicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM5QyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLEtBQUssZUFBZSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN6RCxPQUFPLEtBQUssS0FBSyxNQUFNLGlCQUFpQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUvQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sR0FBVSxFQUFFLEVBQUUsRUFBRSxDQUM1QyxLQUFLLENBQUMsTUFBTSxDQUNWLEtBQUssQ0FBQyxLQUFLLEVBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDZixNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQWlC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
|
|
@@ -4,7 +4,7 @@ import { buildFieldInfoFromFieldsRoot, translate } from "../src/form.js"
|
|
|
4
4
|
// test schema with integer field
|
|
5
5
|
class TestSchema extends S.Class<TestSchema>("TestSchema")({
|
|
6
6
|
integerField: S.Int,
|
|
7
|
-
numberField: S.
|
|
7
|
+
numberField: S.Finite,
|
|
8
8
|
stringField: S.String
|
|
9
9
|
}) {}
|
|
10
10
|
|
|
@@ -137,22 +137,26 @@ it("validates integer field with valid integer", () =>
|
|
|
137
137
|
.pipe(Effect.runPromise))
|
|
138
138
|
|
|
139
139
|
it("error message format matches regex pattern", () => {
|
|
140
|
-
// test the actual error message format from Effect Schema
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
expect(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
expect(
|
|
157
|
-
expect(
|
|
140
|
+
// test the actual error message format from Effect Schema (both old "actual" and new "got" formats)
|
|
141
|
+
const errorMessageOld = `Expected an integer, actual 59.5`
|
|
142
|
+
const errorMessageNew = `SchemaError(Expected an integer, got 59.5)`
|
|
143
|
+
|
|
144
|
+
const oldMatch = errorMessageOld.match(/Expected.*integer.*(?:actual|got)\s+([^)]+)/i)
|
|
145
|
+
expect(oldMatch).toBeTruthy()
|
|
146
|
+
expect(oldMatch![1]).toBe("59.5")
|
|
147
|
+
|
|
148
|
+
const newMatch = errorMessageNew.match(/Expected.*integer.*(?:actual|got)\s+([^)]+)/i)
|
|
149
|
+
expect(newMatch).toBeTruthy()
|
|
150
|
+
expect(newMatch![1]).toBe("59.5")
|
|
151
|
+
|
|
152
|
+
const numberErrorOld = `Expected a number, actual "not-a-number"`
|
|
153
|
+
const numberErrorNew = `SchemaError(Expected a finite number, got "not-a-number")`
|
|
154
|
+
|
|
155
|
+
const numOldMatch = numberErrorOld.match(/Expected.*number.*(?:actual|got)\s+([^)]+)/i)
|
|
156
|
+
expect(numOldMatch).toBeTruthy()
|
|
157
|
+
expect(numOldMatch![1]).toBe("\"not-a-number\"")
|
|
158
|
+
|
|
159
|
+
const numNewMatch = numberErrorNew.match(/Expected.*number.*(?:actual|got)\s+([^)]+)/i)
|
|
160
|
+
expect(numNewMatch).toBeTruthy()
|
|
161
|
+
expect(numNewMatch![1]).toBe("\"not-a-number\"")
|
|
158
162
|
})
|
package/test/form.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, S } from "effect-app"
|
|
2
|
-
import { buildFieldInfoFromFieldsRoot, type DiscriminatedUnionFieldInfo, type FieldInfo, type NestedFieldInfo, type UnionFieldInfo } from "../src/form.js"
|
|
2
|
+
import { buildFieldInfoFromFieldsRoot, type DiscriminatedUnionFieldInfo, type FieldInfo, getMetadataFromSchema, type NestedFieldInfo, type UnionFieldInfo } from "../src/form.js"
|
|
3
3
|
|
|
4
4
|
export class NestedSchema extends S.Class<NestedSchema>("NestedSchema")({
|
|
5
5
|
shallow: S.String,
|
|
@@ -9,7 +9,11 @@ export class NestedSchema extends S.Class<NestedSchema>("NestedSchema")({
|
|
|
9
9
|
deepest: S.Number
|
|
10
10
|
})
|
|
11
11
|
}),
|
|
12
|
-
age: S.Struct({ nfs: S.NumberFromString.pipe(S.decodeTo(S.PositiveInt)) })
|
|
12
|
+
age: S.Struct({ nfs: S.NumberFromString.pipe(S.decodeTo(S.PositiveInt)) }),
|
|
13
|
+
testNumber: S.Number,
|
|
14
|
+
testFinite: S.Finite,
|
|
15
|
+
testNullableNummber: S.NullOr(S.Number),
|
|
16
|
+
testOptionalNumber: S.optional(S.Number)
|
|
13
17
|
}) {}
|
|
14
18
|
|
|
15
19
|
export class SchemaContainsClass extends S.Class<SchemaContainsClass>("SchemaContainsClass")({
|
|
@@ -156,6 +160,15 @@ function testDiscriminatedUnionFieldInfo<T extends Record<PropertyKey, any>>(duf
|
|
|
156
160
|
)
|
|
157
161
|
}
|
|
158
162
|
|
|
163
|
+
it("getMetadataFromSchema handles composed numeric schemas", () => {
|
|
164
|
+
expect(getMetadataFromSchema(S.Number.ast).type).toBe("float")
|
|
165
|
+
expect(getMetadataFromSchema(S.Finite.ast).type).toBe("float")
|
|
166
|
+
expect(getMetadataFromSchema(S.PositiveNumber.ast).type).toBe("float")
|
|
167
|
+
expect(getMetadataFromSchema(S.Int.ast).type).toBe("int")
|
|
168
|
+
expect(getMetadataFromSchema(S.PositiveInt.ast).type).toBe("int")
|
|
169
|
+
expect(getMetadataFromSchema(S.NullOr(S.Number).ast).type).toBe("float")
|
|
170
|
+
})
|
|
171
|
+
|
|
159
172
|
it("buildFieldInfo", () =>
|
|
160
173
|
Effect
|
|
161
174
|
.gen(function*() {
|
|
@@ -176,6 +189,11 @@ it("buildFieldInfo", () =>
|
|
|
176
189
|
testNestedFieldInfo(nestedFieldinfo)
|
|
177
190
|
testNestedFieldInfo(nestedFieldinfo.fields.nested)
|
|
178
191
|
testNestedFieldInfo(nestedFieldinfo.fields.age)
|
|
192
|
+
|
|
193
|
+
expect(nestedFieldinfo.fields.testNumber.type).toBe("float")
|
|
194
|
+
expect(nestedFieldinfo.fields.testFinite.type).toBe("float")
|
|
195
|
+
expect(nestedFieldinfo.fields.testNullableNummber.type).toBe("float")
|
|
196
|
+
expect(nestedFieldinfo.fields.testOptionalNumber.type).toBe("float")
|
|
179
197
|
})
|
|
180
198
|
.pipe(Effect.runPromise))
|
|
181
199
|
|
package/test/lib.test.ts
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest"
|
|
2
|
+
import { computed, isProxy, isReactive, isRef, reactive, ref } from "vue"
|
|
3
|
+
import { deepToRaw } from "../src/lib.js"
|
|
4
|
+
|
|
5
|
+
type DeepMapKey = { id: string } | "list"
|
|
6
|
+
type DeepMapValue = { nestedSet: Set<{ ok: boolean } | Date> } | Array<{ count: number }>
|
|
7
|
+
type DeepSetValue = Map<string, { value: number }> | Array<{ value: number }>
|
|
8
|
+
|
|
9
|
+
const expectPlainDeep = (value: unknown): void => {
|
|
10
|
+
expect(isRef(value)).toBe(false)
|
|
11
|
+
expect(isReactive(value)).toBe(false)
|
|
12
|
+
expect(isProxy(value)).toBe(false)
|
|
13
|
+
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
value.forEach(expectPlainDeep)
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (value instanceof Map) {
|
|
20
|
+
value.forEach((entryValue, entryKey) => {
|
|
21
|
+
expectPlainDeep(entryKey)
|
|
22
|
+
expectPlainDeep(entryValue)
|
|
23
|
+
})
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (value instanceof Set) {
|
|
28
|
+
value.forEach((entry) => {
|
|
29
|
+
expectPlainDeep(entry)
|
|
30
|
+
})
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (value instanceof Date) {
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (value && typeof value === "object") {
|
|
39
|
+
Object.values(value).forEach(expectPlainDeep)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
describe("deepToRaw", () => {
|
|
44
|
+
it("supports non-object root inputs", () => {
|
|
45
|
+
expect(deepToRaw(1)).toBe(1)
|
|
46
|
+
expect(deepToRaw("x")).toBe("x")
|
|
47
|
+
expect(deepToRaw(null)).toBe(null)
|
|
48
|
+
expect(deepToRaw(undefined)).toBe(undefined)
|
|
49
|
+
expect(deepToRaw(ref(123))).toBe(123)
|
|
50
|
+
|
|
51
|
+
const rootArray = deepToRaw(reactive([reactive({ n: 1 }), ref(2)]))
|
|
52
|
+
expect(rootArray).toEqual([{ n: 1 }, 2])
|
|
53
|
+
expect(Array.isArray(rootArray)).toBe(true)
|
|
54
|
+
|
|
55
|
+
const rootMap = deepToRaw(
|
|
56
|
+
reactive(new Map<string, unknown>([["k", reactive({ n: 1 })], ["r", ref(2)]]))
|
|
57
|
+
)
|
|
58
|
+
expect(rootMap).toBeInstanceOf(Map)
|
|
59
|
+
expect(rootMap.get("k")).toEqual({ n: 1 })
|
|
60
|
+
expect(rootMap.get("r")).toBe(2)
|
|
61
|
+
|
|
62
|
+
const rootSet = deepToRaw(reactive(new Set([reactive({ n: 1 }), ref(2)])))
|
|
63
|
+
expect(rootSet).toBeInstanceOf(Set)
|
|
64
|
+
expect(Array.from(rootSet)).toEqual([{ n: 1 }, 2])
|
|
65
|
+
|
|
66
|
+
const date = new Date("2024-02-03T00:00:00.000Z")
|
|
67
|
+
const rootDate = deepToRaw(date)
|
|
68
|
+
expect(rootDate).toBeInstanceOf(Date)
|
|
69
|
+
expect(rootDate).not.toBe(date)
|
|
70
|
+
expect(rootDate.toISOString()).toBe(date.toISOString())
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it("unwraps nested objects and arrays without leaving vue proxies behind", () => {
|
|
74
|
+
const source = reactive({
|
|
75
|
+
list: [
|
|
76
|
+
reactive({
|
|
77
|
+
nested: reactive({
|
|
78
|
+
count: 1,
|
|
79
|
+
items: [reactive({ label: "a" }), reactive({ label: "b" })]
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
],
|
|
83
|
+
plain: reactive({ ok: true })
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const result = deepToRaw(source)
|
|
87
|
+
|
|
88
|
+
expect(Array.isArray(result.list)).toBe(true)
|
|
89
|
+
expect(Array.isArray(result.list[0]?.nested.items)).toBe(true)
|
|
90
|
+
expect(result).toEqual({
|
|
91
|
+
list: [{ nested: { count: 1, items: [{ label: "a" }, { label: "b" }] } }],
|
|
92
|
+
plain: { ok: true }
|
|
93
|
+
})
|
|
94
|
+
expectPlainDeep(result)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it("preserves maps and sets while deeply unwrapping nested entries", () => {
|
|
98
|
+
const key = reactive({ id: "key" })
|
|
99
|
+
const nestedDate = new Date("2024-01-02T03:04:05.000Z")
|
|
100
|
+
const map = reactive(
|
|
101
|
+
new Map<DeepMapKey, DeepMapValue>([
|
|
102
|
+
[key, reactive({ nestedSet: reactive(new Set([{ ok: true }, nestedDate])) })],
|
|
103
|
+
["list", reactive([{ count: 2 }])]
|
|
104
|
+
])
|
|
105
|
+
)
|
|
106
|
+
const set = reactive(
|
|
107
|
+
new Set<DeepSetValue>([
|
|
108
|
+
reactive(new Map([["deep", reactive({ value: 3 })]])),
|
|
109
|
+
reactive([{ value: 4 }])
|
|
110
|
+
])
|
|
111
|
+
)
|
|
112
|
+
const source = reactive({
|
|
113
|
+
map,
|
|
114
|
+
set
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
const result = deepToRaw(source)
|
|
118
|
+
|
|
119
|
+
expect(result.map).toBeInstanceOf(Map)
|
|
120
|
+
expect(result.set).toBeInstanceOf(Set)
|
|
121
|
+
|
|
122
|
+
const entries = Array.from(result.map.entries())
|
|
123
|
+
expect(entries[0]?.[0]).toEqual({ id: "key" })
|
|
124
|
+
expect(entries[0]?.[0]).not.toBe(key)
|
|
125
|
+
expect(entries[0]?.[1]).toEqual({ nestedSet: new Set([{ ok: true }, nestedDate]) })
|
|
126
|
+
expect(entries[1]?.[1]).toEqual([{ count: 2 }])
|
|
127
|
+
|
|
128
|
+
const setValues = Array.from(result.set.values())
|
|
129
|
+
expect(setValues[0]).toBeInstanceOf(Map)
|
|
130
|
+
expect(setValues[1]).toEqual([{ value: 4 }])
|
|
131
|
+
expect((setValues[0] as Map<string, { value: number }>).get("deep")).toEqual({ value: 3 })
|
|
132
|
+
|
|
133
|
+
expectPlainDeep(result)
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
it("keeps nested dates as dates, including dates reached through refs", () => {
|
|
137
|
+
const date = new Date("2025-06-07T08:09:10.000Z")
|
|
138
|
+
const source = reactive({
|
|
139
|
+
createdAt: date,
|
|
140
|
+
nested: reactive({
|
|
141
|
+
updatedAt: ref(date),
|
|
142
|
+
list: [ref(date)],
|
|
143
|
+
map: reactive(new Map([["at", ref(date)]])),
|
|
144
|
+
set: reactive(new Set([ref(date)]))
|
|
145
|
+
})
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
const result = deepToRaw(source)
|
|
149
|
+
|
|
150
|
+
expect(result.createdAt).toBeInstanceOf(Date)
|
|
151
|
+
expect(result.nested.updatedAt).toBeInstanceOf(Date)
|
|
152
|
+
expect(result.nested.list[0]).toBeInstanceOf(Date)
|
|
153
|
+
expect(result.nested.map).toBeInstanceOf(Map)
|
|
154
|
+
expect(result.nested.set).toBeInstanceOf(Set)
|
|
155
|
+
|
|
156
|
+
const updatedAt = result.nested.updatedAt
|
|
157
|
+
const firstListDate = result.nested.list[0]
|
|
158
|
+
const mappedDate = result.nested.map.get("at")
|
|
159
|
+
const firstSetDate = Array.from(result.nested.set)[0]
|
|
160
|
+
|
|
161
|
+
if (!(updatedAt instanceof Date)) {
|
|
162
|
+
throw new Error("expected updatedAt to be a Date")
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (!(firstListDate instanceof Date)) {
|
|
166
|
+
throw new Error("expected first list item to be a Date")
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!(mappedDate instanceof Date)) {
|
|
170
|
+
throw new Error("expected mapped date to be a Date")
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!(firstSetDate instanceof Date)) {
|
|
174
|
+
throw new Error("expected first set item to be a Date")
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
expect(result.createdAt.toISOString()).toBe(date.toISOString())
|
|
178
|
+
expect(updatedAt.toISOString()).toBe(date.toISOString())
|
|
179
|
+
expect(firstListDate.toISOString()).toBe(date.toISOString())
|
|
180
|
+
expect(mappedDate.toISOString()).toBe(date.toISOString())
|
|
181
|
+
expect(firstSetDate.toISOString()).toBe(date.toISOString())
|
|
182
|
+
|
|
183
|
+
expectPlainDeep(result)
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
it("unwraps computed values nested in refs/plain objects and deepToRawes the computed result", () => {
|
|
187
|
+
const source = {
|
|
188
|
+
innerRef: ref({
|
|
189
|
+
computedValue: computed(() =>
|
|
190
|
+
reactive({
|
|
191
|
+
list: [reactive({ n: 1 }), reactive({ n: 2 })],
|
|
192
|
+
map: reactive(new Map([["k", reactive({ nested: true })]])),
|
|
193
|
+
set: reactive(new Set([reactive({ fromSet: true })]))
|
|
194
|
+
})
|
|
195
|
+
)
|
|
196
|
+
}),
|
|
197
|
+
plainComputed: computed(() => reactive({ date: ref(new Date("2025-01-01T00:00:00.000Z")) }))
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const result = deepToRaw(source)
|
|
201
|
+
|
|
202
|
+
expect(result).toEqual({
|
|
203
|
+
innerRef: {
|
|
204
|
+
computedValue: {
|
|
205
|
+
list: [{ n: 1 }, { n: 2 }],
|
|
206
|
+
map: new Map([["k", { nested: true }]]),
|
|
207
|
+
set: new Set([{ fromSet: true }])
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
plainComputed: {
|
|
211
|
+
date: new Date("2025-01-01T00:00:00.000Z")
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
const innerRefValue = Reflect.get(result, "innerRef")
|
|
216
|
+
if (!innerRefValue || typeof innerRefValue !== "object") {
|
|
217
|
+
throw new Error("expected innerRef to be an object")
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const computedValue = Reflect.get(innerRefValue, "computedValue")
|
|
221
|
+
if (!computedValue || typeof computedValue !== "object") {
|
|
222
|
+
throw new Error("expected computedValue to be an object")
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const computedMap = Reflect.get(computedValue, "map")
|
|
226
|
+
const computedSet = Reflect.get(computedValue, "set")
|
|
227
|
+
|
|
228
|
+
const plainComputedValue = Reflect.get(result, "plainComputed")
|
|
229
|
+
if (!plainComputedValue || typeof plainComputedValue !== "object") {
|
|
230
|
+
throw new Error("expected plainComputed to be an object")
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const computedDate = Reflect.get(plainComputedValue, "date")
|
|
234
|
+
|
|
235
|
+
expect(computedMap).toBeInstanceOf(Map)
|
|
236
|
+
expect(computedSet).toBeInstanceOf(Set)
|
|
237
|
+
expect(computedDate).toBeInstanceOf(Date)
|
|
238
|
+
expectPlainDeep(result)
|
|
239
|
+
})
|
|
240
|
+
})
|