@voidhash/mimic-effect 1.0.0-beta.4 → 1.0.0-beta.5
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/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @voidhash/mimic-effect@1.0.0-beta.
|
|
2
|
+
> @voidhash/mimic-effect@1.0.0-beta.5 build /home/runner/work/mimic/mimic/packages/mimic-effect
|
|
3
3
|
> tsdown
|
|
4
4
|
|
|
5
5
|
[34mℹ[39m tsdown [2mv0.18.2[22m powered by rolldown [2mv1.0.0-beta.55[22m
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMetrics.cjs [2m 4.26 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
21
21
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.cjs [2m 4.23 kB[22m [2m│ gzip: 1.34 kB[22m
|
|
22
22
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.cjs [2m 3.78 kB[22m [2m│ gzip: 1.14 kB[22m
|
|
23
|
+
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/assertions.cjs [2m 3.74 kB[22m [2m│ gzip: 1.16 kB[22m
|
|
23
24
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mPresenceManager.cjs [2m 3.72 kB[22m [2m│ gzip: 1.00 kB[22m
|
|
24
25
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mHotStorage.cjs [2m 3.64 kB[22m [2m│ gzip: 1.21 kB[22m
|
|
25
|
-
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/assertions.cjs [2m 3.43 kB[22m [2m│ gzip: 1.04 kB[22m
|
|
26
26
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicAuthService.cjs [2m 2.27 kB[22m [2m│ gzip: 0.88 kB[22m
|
|
27
27
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mErrors.cjs [2m 1.98 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
28
28
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mColdStorage.cjs [2m 1.91 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs [2m 0.37 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
34
34
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m_virtual/rolldown_runtime.cjs [2m 0.36 kB[22m [2m│ gzip: 0.25 kB[22m
|
|
35
35
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mtesting/types.cjs [2m 0.34 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
36
|
-
[34mℹ[39m [33m[CJS][39m 25 files, total: 163.
|
|
36
|
+
[34mℹ[39m [33m[CJS][39m 25 files, total: 163.94 kB
|
|
37
37
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mProtocol.d.cts.map [2m1.57 kB[22m [2m│ gzip: 0.70 kB[22m
|
|
38
38
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mTypes.d.cts.map [2m1.41 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
39
39
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22mMimicServerEngine.d.cts.map [2m1.09 kB[22m [2m│ gzip: 0.50 kB[22m
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicClusterServerEngine.d.cts[39m [2m0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
72
72
|
[34mℹ[39m [33m[CJS][39m [2mdist/[22m[32mMimicServer.d.cts[39m [2m0.74 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
73
73
|
[34mℹ[39m [33m[CJS][39m 36 files, total: 56.62 kB
|
|
74
|
-
[32m✔[39m Build complete in [
|
|
74
|
+
[32m✔[39m Build complete in [32m6662ms[39m
|
|
75
75
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mindex.mjs[22m [2m 1.38 kB[22m [2m│ gzip: 0.35 kB[22m
|
|
76
76
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[1mtesting/index.mjs[22m [2m 0.60 kB[22m [2m│ gzip: 0.19 kB[22m
|
|
77
77
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/HotStorageTestSuite.mjs.map [2m63.35 kB[22m [2m│ gzip: 8.67 kB[22m
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicServer.mjs [2m 9.63 kB[22m [2m│ gzip: 2.78 kB[22m
|
|
92
92
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs.map [2m 9.18 kB[22m [2m│ gzip: 2.15 kB[22m
|
|
93
93
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs.map [2m 9.11 kB[22m [2m│ gzip: 2.27 kB[22m
|
|
94
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs.map [2m
|
|
94
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs.map [2m 7.31 kB[22m [2m│ gzip: 2.01 kB[22m
|
|
95
95
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/FailingStorage.mjs [2m 6.49 kB[22m [2m│ gzip: 1.52 kB[22m
|
|
96
96
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs.map [2m 6.13 kB[22m [2m│ gzip: 1.43 kB[22m
|
|
97
97
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs.map [2m 6.09 kB[22m [2m│ gzip: 1.85 kB[22m
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs.map [2m 4.00 kB[22m [2m│ gzip: 1.05 kB[22m
|
|
101
101
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMetrics.mjs [2m 3.63 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
102
102
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mHotStorage.mjs [2m 3.52 kB[22m [2m│ gzip: 1.22 kB[22m
|
|
103
|
+
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.46 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
103
104
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mPresenceManager.mjs [2m 3.39 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
104
105
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mProtocol.mjs [2m 3.35 kB[22m [2m│ gzip: 1.06 kB[22m
|
|
105
106
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/types.mjs.map [2m 3.22 kB[22m [2m│ gzip: 1.15 kB[22m
|
|
106
|
-
[34mℹ[39m [34m[ESM][39m [2mdist/[22mtesting/assertions.mjs [2m 3.14 kB[22m [2m│ gzip: 1.03 kB[22m
|
|
107
107
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mMimicAuthService.mjs [2m 2.23 kB[22m [2m│ gzip: 0.88 kB[22m
|
|
108
108
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mColdStorage.mjs [2m 1.85 kB[22m [2m│ gzip: 0.79 kB[22m
|
|
109
109
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22mErrors.mjs [2m 1.73 kB[22m [2m│ gzip: 0.61 kB[22m
|
|
@@ -150,5 +150,5 @@
|
|
|
150
150
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mtesting/StorageIntegrationTestSuite.d.mts[39m [2m 1.43 kB[22m [2m│ gzip: 0.57 kB[22m
|
|
151
151
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicClusterServerEngine.d.mts[39m [2m 0.82 kB[22m [2m│ gzip: 0.33 kB[22m
|
|
152
152
|
[34mℹ[39m [34m[ESM][39m [2mdist/[22m[32mMimicServer.d.mts[39m [2m 0.74 kB[22m [2m│ gzip: 0.31 kB[22m
|
|
153
|
-
[34mℹ[39m [34m[ESM][39m 78 files, total:
|
|
154
|
-
[32m✔[39m Build complete in [
|
|
153
|
+
[34mℹ[39m [34m[ESM][39m 78 files, total: 514.30 kB
|
|
154
|
+
[32m✔[39m Build complete in [32m6682ms[39m
|
|
@@ -9,12 +9,15 @@ let effect = require("effect");
|
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
11
|
* Deep equality check that handles objects, arrays, and primitives.
|
|
12
|
+
* Skips function properties since reconstructed objects (like OperationPath)
|
|
13
|
+
* will have new function instances even when the underlying data is identical.
|
|
12
14
|
*/
|
|
13
15
|
const isDeepEqual = (a, b) => {
|
|
14
16
|
if (a === b) return true;
|
|
15
17
|
if (a === null || b === null) return a === b;
|
|
16
18
|
if (a === void 0 || b === void 0) return a === b;
|
|
17
19
|
if (typeof a !== typeof b) return false;
|
|
20
|
+
if (typeof a === "function" && typeof b === "function") return true;
|
|
18
21
|
if (typeof a === "number" && typeof b === "number") {
|
|
19
22
|
if (Number.isNaN(a) && Number.isNaN(b)) return true;
|
|
20
23
|
return a === b;
|
|
@@ -27,8 +30,8 @@ const isDeepEqual = (a, b) => {
|
|
|
27
30
|
if (typeof a === "object" && typeof b === "object") {
|
|
28
31
|
const aObj = a;
|
|
29
32
|
const bObj = b;
|
|
30
|
-
const aKeys = Object.keys(aObj);
|
|
31
|
-
const bKeys = Object.keys(bObj);
|
|
33
|
+
const aKeys = Object.keys(aObj).filter((k) => typeof aObj[k] !== "function");
|
|
34
|
+
const bKeys = Object.keys(bObj).filter((k) => typeof bObj[k] !== "function");
|
|
32
35
|
if (aKeys.length !== bKeys.length) return false;
|
|
33
36
|
for (const key of aKeys) {
|
|
34
37
|
if (!Object.prototype.hasOwnProperty.call(bObj, key)) return false;
|
|
@@ -9,12 +9,15 @@ import { Effect } from "effect";
|
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
11
|
* Deep equality check that handles objects, arrays, and primitives.
|
|
12
|
+
* Skips function properties since reconstructed objects (like OperationPath)
|
|
13
|
+
* will have new function instances even when the underlying data is identical.
|
|
12
14
|
*/
|
|
13
15
|
const isDeepEqual = (a, b) => {
|
|
14
16
|
if (a === b) return true;
|
|
15
17
|
if (a === null || b === null) return a === b;
|
|
16
18
|
if (a === void 0 || b === void 0) return a === b;
|
|
17
19
|
if (typeof a !== typeof b) return false;
|
|
20
|
+
if (typeof a === "function" && typeof b === "function") return true;
|
|
18
21
|
if (typeof a === "number" && typeof b === "number") {
|
|
19
22
|
if (Number.isNaN(a) && Number.isNaN(b)) return true;
|
|
20
23
|
return a === b;
|
|
@@ -27,8 +30,8 @@ const isDeepEqual = (a, b) => {
|
|
|
27
30
|
if (typeof a === "object" && typeof b === "object") {
|
|
28
31
|
const aObj = a;
|
|
29
32
|
const bObj = b;
|
|
30
|
-
const aKeys = Object.keys(aObj);
|
|
31
|
-
const bKeys = Object.keys(bObj);
|
|
33
|
+
const aKeys = Object.keys(aObj).filter((k) => typeof aObj[k] !== "function");
|
|
34
|
+
const bKeys = Object.keys(bObj).filter((k) => typeof bObj[k] !== "function");
|
|
32
35
|
if (aKeys.length !== bKeys.length) return false;
|
|
33
36
|
for (const key of aKeys) {
|
|
34
37
|
if (!Object.prototype.hasOwnProperty.call(bObj, key)) return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.mjs","names":[],"sources":["../../src/testing/assertions.ts"],"sourcesContent":["/**\n * @voidhash/mimic-effect/testing - Assertion Helpers\n *\n * Internal assertion helpers used by the test suites.\n */\nimport { Effect } from \"effect\";\nimport { TestError } from \"./types\";\n\n// =============================================================================\n// Deep Equality\n// =============================================================================\n\n/**\n * Deep equality check that handles objects, arrays, and primitives.\n */\nexport const isDeepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n\n if (a === null || b === null) return a === b;\n if (a === undefined || b === undefined) return a === b;\n\n if (typeof a !== typeof b) return false;\n\n if (typeof a === \"number\" && typeof b === \"number\") {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\n return a === b;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isDeepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n if (typeof a === \"object\" && typeof b === \"object\") {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n\n if (aKeys.length !== bKeys.length) return false;\n\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(bObj, key)) return false;\n if (!isDeepEqual(aObj[key], bObj[key])) return false;\n }\n\n return true;\n }\n\n return false;\n};\n\n// =============================================================================\n// Assertion Helpers\n// =============================================================================\n\n/**\n * Assert that two values are deeply equal.\n */\nexport const assertEqual = <T>(\n actual: T,\n expected: T,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (!isDeepEqual(actual, expected)) {\n yield* Effect.fail(new TestError({ message, expected, actual }));\n }\n });\n\n/**\n * Assert that a condition is true.\n */\nexport const assertTrue = (\n condition: boolean,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (!condition) {\n yield* Effect.fail(new TestError({ message }));\n }\n });\n\n/**\n * Assert that a condition is false.\n */\nexport const assertFalse = (\n condition: boolean,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (condition) {\n yield* Effect.fail(new TestError({ message }));\n }\n });\n\n/**\n * Assert that a value is undefined.\n */\nexport const assertUndefined = (\n value: unknown,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (value !== undefined) {\n yield* Effect.fail(\n new TestError({ message, expected: undefined, actual: value })\n );\n }\n });\n\n/**\n * Assert that a value is defined (not undefined).\n */\nexport const assertDefined = <T>(\n value: T | undefined,\n message: string\n): Effect.Effect<T, TestError> =>\n Effect.gen(function* () {\n if (value === undefined) {\n yield* Effect.fail(\n new TestError({ message, expected: \"defined value\", actual: undefined })\n );\n }\n return value as T;\n });\n\n/**\n * Assert that an array has the expected length.\n */\nexport const assertLength = <T>(\n array: T[],\n expectedLength: number,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (array.length !== expectedLength) {\n yield* Effect.fail(\n new TestError({\n message,\n expected: expectedLength,\n actual: array.length,\n })\n );\n }\n });\n\n/**\n * Assert that an array is empty.\n */\nexport const assertEmpty = <T>(\n array: T[],\n message: string\n): Effect.Effect<void, TestError> => assertLength(array, 0, message);\n\n/**\n * Assert that an array is sorted by a key.\n */\nexport const assertSortedBy = <T>(\n array: T[],\n key: keyof T,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n for (let i = 1; i < array.length; i++) {\n const prev = array[i - 1]![key];\n const curr = array[i]![key];\n if (prev > curr) {\n yield* Effect.fail(\n new TestError({\n message,\n expected: `array sorted by ${String(key)}`,\n actual: `element at index ${i - 1} (${prev}) > element at index ${i} (${curr})`,\n })\n );\n }\n }\n });\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertions.mjs","names":[],"sources":["../../src/testing/assertions.ts"],"sourcesContent":["/**\n * @voidhash/mimic-effect/testing - Assertion Helpers\n *\n * Internal assertion helpers used by the test suites.\n */\nimport { Effect } from \"effect\";\nimport { TestError } from \"./types\";\n\n// =============================================================================\n// Deep Equality\n// =============================================================================\n\n/**\n * Deep equality check that handles objects, arrays, and primitives.\n * Skips function properties since reconstructed objects (like OperationPath)\n * will have new function instances even when the underlying data is identical.\n */\nexport const isDeepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n\n if (a === null || b === null) return a === b;\n if (a === undefined || b === undefined) return a === b;\n\n if (typeof a !== typeof b) return false;\n\n // Skip function comparison - functions with same behavior but different references should be considered equal\n if (typeof a === \"function\" && typeof b === \"function\") return true;\n\n if (typeof a === \"number\" && typeof b === \"number\") {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\n return a === b;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isDeepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n if (typeof a === \"object\" && typeof b === \"object\") {\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n\n // Filter out function properties for comparison\n const aKeys = Object.keys(aObj).filter(k => typeof aObj[k] !== \"function\");\n const bKeys = Object.keys(bObj).filter(k => typeof bObj[k] !== \"function\");\n\n if (aKeys.length !== bKeys.length) return false;\n\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(bObj, key)) return false;\n if (!isDeepEqual(aObj[key], bObj[key])) return false;\n }\n\n return true;\n }\n\n return false;\n};\n\n// =============================================================================\n// Assertion Helpers\n// =============================================================================\n\n/**\n * Assert that two values are deeply equal.\n */\nexport const assertEqual = <T>(\n actual: T,\n expected: T,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (!isDeepEqual(actual, expected)) {\n yield* Effect.fail(new TestError({ message, expected, actual }));\n }\n });\n\n/**\n * Assert that a condition is true.\n */\nexport const assertTrue = (\n condition: boolean,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (!condition) {\n yield* Effect.fail(new TestError({ message }));\n }\n });\n\n/**\n * Assert that a condition is false.\n */\nexport const assertFalse = (\n condition: boolean,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (condition) {\n yield* Effect.fail(new TestError({ message }));\n }\n });\n\n/**\n * Assert that a value is undefined.\n */\nexport const assertUndefined = (\n value: unknown,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (value !== undefined) {\n yield* Effect.fail(\n new TestError({ message, expected: undefined, actual: value })\n );\n }\n });\n\n/**\n * Assert that a value is defined (not undefined).\n */\nexport const assertDefined = <T>(\n value: T | undefined,\n message: string\n): Effect.Effect<T, TestError> =>\n Effect.gen(function* () {\n if (value === undefined) {\n yield* Effect.fail(\n new TestError({ message, expected: \"defined value\", actual: undefined })\n );\n }\n return value as T;\n });\n\n/**\n * Assert that an array has the expected length.\n */\nexport const assertLength = <T>(\n array: T[],\n expectedLength: number,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n if (array.length !== expectedLength) {\n yield* Effect.fail(\n new TestError({\n message,\n expected: expectedLength,\n actual: array.length,\n })\n );\n }\n });\n\n/**\n * Assert that an array is empty.\n */\nexport const assertEmpty = <T>(\n array: T[],\n message: string\n): Effect.Effect<void, TestError> => assertLength(array, 0, message);\n\n/**\n * Assert that an array is sorted by a key.\n */\nexport const assertSortedBy = <T>(\n array: T[],\n key: keyof T,\n message: string\n): Effect.Effect<void, TestError> =>\n Effect.gen(function* () {\n for (let i = 1; i < array.length; i++) {\n const prev = array[i - 1]![key];\n const curr = array[i]![key];\n if (prev > curr) {\n yield* Effect.fail(\n new TestError({\n message,\n expected: `array sorted by ${String(key)}`,\n actual: `element at index ${i - 1} (${prev}) > element at index ${i} (${curr})`,\n })\n );\n }\n }\n });\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAa,eAAe,GAAY,MAAwB;AAC9D,KAAI,MAAM,EAAG,QAAO;AAEpB,KAAI,MAAM,QAAQ,MAAM,KAAM,QAAO,MAAM;AAC3C,KAAI,MAAM,UAAa,MAAM,OAAW,QAAO,MAAM;AAErD,KAAI,OAAO,MAAM,OAAO,EAAG,QAAO;AAGlC,KAAI,OAAO,MAAM,cAAc,OAAO,MAAM,WAAY,QAAO;AAE/D,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAClD,MAAI,OAAO,MAAM,EAAE,IAAI,OAAO,MAAM,EAAE,CAAE,QAAO;AAC/C,SAAO,MAAM;;AAGf,KAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,EAAE;AACxC,MAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;AAClC,OAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,KAAI,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO;AAEvC,SAAO;;AAGT,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;EAClD,MAAM,OAAO;EACb,MAAM,OAAO;EAGb,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,QAAO,MAAK,OAAO,KAAK,OAAO,WAAW;EAC1E,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,QAAO,MAAK,OAAO,KAAK,OAAO,WAAW;AAE1E,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAE1C,OAAK,MAAM,OAAO,OAAO;AACvB,OAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,IAAI,CAAE,QAAO;AAC7D,OAAI,CAAC,YAAY,KAAK,MAAM,KAAK,KAAK,CAAE,QAAO;;AAGjD,SAAO;;AAGT,QAAO;;;;;AAUT,MAAa,eACX,QACA,UACA,YAEA,OAAO,IAAI,aAAa;AACtB,KAAI,CAAC,YAAY,QAAQ,SAAS,CAChC,QAAO,OAAO,KAAK,IAAI,UAAU;EAAE;EAAS;EAAU;EAAQ,CAAC,CAAC;EAElE;;;;AAKJ,MAAa,cACX,WACA,YAEA,OAAO,IAAI,aAAa;AACtB,KAAI,CAAC,UACH,QAAO,OAAO,KAAK,IAAI,UAAU,EAAE,SAAS,CAAC,CAAC;EAEhD;;;;AAkBJ,MAAa,mBACX,OACA,YAEA,OAAO,IAAI,aAAa;AACtB,KAAI,UAAU,OACZ,QAAO,OAAO,KACZ,IAAI,UAAU;EAAE;EAAS,UAAU;EAAW,QAAQ;EAAO,CAAC,CAC/D;EAEH;;;;AAKJ,MAAa,iBACX,OACA,YAEA,OAAO,IAAI,aAAa;AACtB,KAAI,UAAU,OACZ,QAAO,OAAO,KACZ,IAAI,UAAU;EAAE;EAAS,UAAU;EAAiB,QAAQ;EAAW,CAAC,CACzE;AAEH,QAAO;EACP;;;;AAKJ,MAAa,gBACX,OACA,gBACA,YAEA,OAAO,IAAI,aAAa;AACtB,KAAI,MAAM,WAAW,eACnB,QAAO,OAAO,KACZ,IAAI,UAAU;EACZ;EACA,UAAU;EACV,QAAQ,MAAM;EACf,CAAC,CACH;EAEH;;;;AAKJ,MAAa,eACX,OACA,YACmC,aAAa,OAAO,GAAG,QAAQ;;;;AAKpE,MAAa,kBACX,OACA,KACA,YAEA,OAAO,IAAI,aAAa;AACtB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,OAAO,MAAM,IAAI,GAAI;EAC3B,MAAM,OAAO,MAAM,GAAI;AACvB,MAAI,OAAO,KACT,QAAO,OAAO,KACZ,IAAI,UAAU;GACZ;GACA,UAAU,mBAAmB,OAAO,IAAI;GACxC,QAAQ,oBAAoB,IAAI,EAAE,IAAI,KAAK,uBAAuB,EAAE,IAAI,KAAK;GAC9E,CAAC,CACH;;EAGL"}
|
package/dist/testing/types.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
2
|
+
import * as effect_Types7 from "effect/Types";
|
|
3
|
+
import * as effect_Cause7 from "effect/Cause";
|
|
4
4
|
|
|
5
5
|
//#region src/testing/types.d.ts
|
|
6
6
|
|
|
7
|
-
declare const TestError_base: new <A extends Record<string, any> = {}>(args:
|
|
7
|
+
declare const TestError_base: new <A extends Record<string, any> = {}>(args: effect_Types7.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause7.YieldableError & {
|
|
8
8
|
readonly _tag: "TestError";
|
|
9
9
|
} & Readonly<A>;
|
|
10
10
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voidhash/mimic-effect",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,14 +26,14 @@
|
|
|
26
26
|
"typescript": "5.8.3",
|
|
27
27
|
"vite-tsconfig-paths": "^5.1.4",
|
|
28
28
|
"vitest": "^3.2.4",
|
|
29
|
-
"@voidhash/tsconfig": "1.0.0-beta.
|
|
29
|
+
"@voidhash/tsconfig": "1.0.0-beta.5"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@effect/platform": "^0.93.8",
|
|
33
33
|
"@effect/cluster": "^0.55.0",
|
|
34
34
|
"@effect/rpc": "^0.72.2",
|
|
35
35
|
"effect": "^3.19.12",
|
|
36
|
-
"@voidhash/mimic": "1.0.0-beta.
|
|
36
|
+
"@voidhash/mimic": "1.0.0-beta.5"
|
|
37
37
|
},
|
|
38
38
|
"peerDependenciesMeta": {
|
|
39
39
|
"@effect/cluster": {
|
|
@@ -12,6 +12,8 @@ import { TestError } from "./types";
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Deep equality check that handles objects, arrays, and primitives.
|
|
15
|
+
* Skips function properties since reconstructed objects (like OperationPath)
|
|
16
|
+
* will have new function instances even when the underlying data is identical.
|
|
15
17
|
*/
|
|
16
18
|
export const isDeepEqual = (a: unknown, b: unknown): boolean => {
|
|
17
19
|
if (a === b) return true;
|
|
@@ -21,6 +23,9 @@ export const isDeepEqual = (a: unknown, b: unknown): boolean => {
|
|
|
21
23
|
|
|
22
24
|
if (typeof a !== typeof b) return false;
|
|
23
25
|
|
|
26
|
+
// Skip function comparison - functions with same behavior but different references should be considered equal
|
|
27
|
+
if (typeof a === "function" && typeof b === "function") return true;
|
|
28
|
+
|
|
24
29
|
if (typeof a === "number" && typeof b === "number") {
|
|
25
30
|
if (Number.isNaN(a) && Number.isNaN(b)) return true;
|
|
26
31
|
return a === b;
|
|
@@ -37,8 +42,10 @@ export const isDeepEqual = (a: unknown, b: unknown): boolean => {
|
|
|
37
42
|
if (typeof a === "object" && typeof b === "object") {
|
|
38
43
|
const aObj = a as Record<string, unknown>;
|
|
39
44
|
const bObj = b as Record<string, unknown>;
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
|
|
46
|
+
// Filter out function properties for comparison
|
|
47
|
+
const aKeys = Object.keys(aObj).filter(k => typeof aObj[k] !== "function");
|
|
48
|
+
const bKeys = Object.keys(bObj).filter(k => typeof bObj[k] !== "function");
|
|
42
49
|
|
|
43
50
|
if (aKeys.length !== bKeys.length) return false;
|
|
44
51
|
|