From dd492c5ec32f01915a4e2694913e3b74718906c6 Mon Sep 17 00:00:00 2001 From: Ryan Carniato Date: Wed, 18 Oct 2023 00:16:54 -0700 Subject: [PATCH] fix #1917, fix #1918 error handling with serialization --- .changeset/spotty-rings-try.md | 6 +++ package.json | 10 ++--- packages/babel-preset-solid/package.json | 2 +- packages/solid/package.json | 2 +- packages/solid/src/reactive/signal.ts | 8 +++- packages/solid/src/server/rendering.ts | 11 +++-- pnpm-lock.yaml | 52 ++++++++++++------------ 7 files changed, 53 insertions(+), 38 deletions(-) create mode 100644 .changeset/spotty-rings-try.md diff --git a/.changeset/spotty-rings-try.md b/.changeset/spotty-rings-try.md new file mode 100644 index 000000000..6ead15334 --- /dev/null +++ b/.changeset/spotty-rings-try.md @@ -0,0 +1,6 @@ +--- +"babel-preset-solid": patch +"solid-js": patch +--- + +fix #1917, fix #1918 error handling with serialization diff --git a/package.json b/package.json index d7e71217e..f2a9c0c34 100644 --- a/package.json +++ b/package.json @@ -34,13 +34,13 @@ "@rollup/plugin-replace": "^5.0.2", "@types/node": "^18.11.19", "@vitest/coverage-c8": "^0.29.7", - "babel-plugin-jsx-dom-expressions": "^0.37.0", + "babel-plugin-jsx-dom-expressions": "^0.37.2", "coveralls": "^3.1.1", "csstype": "^3.1.0", - "dom-expressions": "0.37.1", - "hyper-dom-expressions": "0.37.1", + "dom-expressions": "0.37.3", + "hyper-dom-expressions": "0.37.3", "jsdom": "^21.1.1", - "lit-dom-expressions": "0.37.1", + "lit-dom-expressions": "0.37.3", "ncp": "^2.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.8.8", @@ -48,7 +48,7 @@ "rollup": "^3.7.5", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-copy": "^3.4.0", - "seroval": "^0.10.4", + "seroval": "^0.11.6", "simple-git-hooks": "^2.8.1", "symlink-dir": "^5.0.1", "tsconfig-replace-paths": "^0.0.11", diff --git a/packages/babel-preset-solid/package.json b/packages/babel-preset-solid/package.json index 406730d66..9d61a1058 100644 --- a/packages/babel-preset-solid/package.json +++ b/packages/babel-preset-solid/package.json @@ -14,7 +14,7 @@ "test": "node test.js" }, "dependencies": { - "babel-plugin-jsx-dom-expressions": "^0.37.0" + "babel-plugin-jsx-dom-expressions": "^0.37.2" }, "peerDependencies": { "@babel/core": "^7.0.0" diff --git a/packages/solid/package.json b/packages/solid/package.json index 2ff35b050..ba70878f8 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -227,6 +227,6 @@ ], "dependencies": { "csstype": "^3.1.0", - "seroval": "^0.10.4" + "seroval": "^0.11.6" } } diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index 9e6eb6887..06420a996 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -620,8 +620,7 @@ export function createResource( id = `${sharedConfig.context.id}${sharedConfig.context.count++}`; let v; if (options.ssrLoadFrom === "initial") initP = options.initialValue as T; - else if (sharedConfig.load && (v = sharedConfig.load(id))) - initP = isPromise(v) && "value" in v ? v.value : v; + else if (sharedConfig.load && (v = sharedConfig.load(id))) initP = v; } function loadEnd(p: Promise | null, v: T | undefined, error?: any, key?: S) { if (pr === p) { @@ -693,6 +692,11 @@ export function createResource( loadEnd(pr, p, undefined, lookup); return p; } + if ("value" in p) { + if ((p as any).status === "success") loadEnd(pr, p.value as T, undefined, lookup); + else loadEnd(pr, undefined, undefined, lookup); + return p; + } pr = p; scheduled = true; queueMicrotask(() => (scheduled = false)); diff --git a/packages/solid/src/server/rendering.ts b/packages/solid/src/server/rendering.ts index c74c8d9e3..853a355e3 100644 --- a/packages/solid/src/server/rendering.ts +++ b/packages/solid/src/server/rendering.ts @@ -424,8 +424,7 @@ export function createResource( if (p != undefined && typeof p === "object" && "then" in p) { read.loading = true; read.state = "pending"; - if (ctx.serialize) ctx.serialize(id, p, options.deferStream); - return p + p = p .then(res => { read.loading = false; read.state = "ready"; @@ -440,7 +439,10 @@ export function createResource( read.error = error = castError(err); p = null; notifySuspense(contexts); + throw error; }); + if (ctx.serialize) ctx.serialize(id, p, options.deferStream); + return p; } ctx.resources[id].data = p; if (ctx.serialize) ctx.serialize(id, p); @@ -592,7 +594,10 @@ export function Suspense(props: { fallback?: string; children: string }) { const res = runSuspense(); // never suspended - if (suspenseComplete(value)) return res; + if (suspenseComplete(value)) { + delete ctx.suspense[id]; + return res; + } done = ctx.async ? ctx.registerFragment(id) : undefined; return catchError(() => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d67d418ef..fccc3989d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^0.29.7 version: 0.29.7(vitest@0.29.3) babel-plugin-jsx-dom-expressions: - specifier: ^0.37.0 - version: 0.37.0(@babel/core@7.21.3) + specifier: ^0.37.2 + version: 0.37.2(@babel/core@7.21.3) coveralls: specifier: ^3.1.1 version: 3.1.1 @@ -57,17 +57,17 @@ importers: specifier: ^3.1.0 version: 3.1.0 dom-expressions: - specifier: 0.37.1 - version: 0.37.1(csstype@3.1.0)(seroval@0.10.4) + specifier: 0.37.3 + version: 0.37.3(csstype@3.1.0)(seroval@0.11.6) hyper-dom-expressions: - specifier: 0.37.1 - version: 0.37.1 + specifier: 0.37.3 + version: 0.37.3 jsdom: specifier: ^21.1.1 version: 21.1.1 lit-dom-expressions: - specifier: 0.37.1 - version: 0.37.1 + specifier: 0.37.3 + version: 0.37.3 ncp: specifier: ^2.0.0 version: 2.0.0 @@ -90,8 +90,8 @@ importers: specifier: ^3.4.0 version: 3.4.0 seroval: - specifier: ^0.10.4 - version: 0.10.4 + specifier: ^0.11.6 + version: 0.11.6 simple-git-hooks: specifier: ^2.8.1 version: 2.8.1 @@ -120,8 +120,8 @@ importers: specifier: ^7.0.0 version: 7.21.3 babel-plugin-jsx-dom-expressions: - specifier: ^0.37.0 - version: 0.37.0(@babel/core@7.21.3) + specifier: ^0.37.2 + version: 0.37.2(@babel/core@7.21.3) packages/solid: dependencies: @@ -129,8 +129,8 @@ importers: specifier: ^3.1.0 version: 3.1.0 seroval: - specifier: ^0.10.4 - version: 0.10.4 + specifier: ^0.11.6 + version: 0.11.6 packages/solid-element: dependencies: @@ -2284,8 +2284,8 @@ packages: - debug dev: true - /babel-plugin-jsx-dom-expressions@0.37.0(@babel/core@7.21.3): - resolution: {integrity: sha512-WLUY+Eaeej9fmRMRD2YSTskmdfBxmVdgeSRHHiZyWcHe+SQY0xqKTdX4Ilbmf/MxKcDPJhwkuq41OBe42P3EVg==} + /babel-plugin-jsx-dom-expressions@0.37.2(@babel/core@7.21.3): + resolution: {integrity: sha512-u3VKB+On86cYSLAbw9j0m0X8ZejL4MR7oG7TRlrMQ/y1mauR/ZpM2xkiOPZEUlzHLo1GYGlTdP9s5D3XuA6iSQ==} peerDependencies: '@babel/core': ^7.20.12 dependencies: @@ -2850,15 +2850,15 @@ packages: path-type: 4.0.0 dev: true - /dom-expressions@0.37.1(csstype@3.1.0)(seroval@0.10.4): - resolution: {integrity: sha512-+15+8QsinZDuplnmaC4WebLOQER0sU6+ArpjDuxwUUX91cTfeV8/8B6dBD5b49O9gCylNyAn0vXKZSlsAJyRaQ==} + /dom-expressions@0.37.3(csstype@3.1.0)(seroval@0.11.6): + resolution: {integrity: sha512-XUIuHLYdEibGVVXN09fd2krN07xHi1XKvJ/eozJH3TycKsMPjJOOcS9rCkglHvMnrOaw73ODjJEsvhzFnl7Rkw==} peerDependencies: csstype: ^3.0 - seroval: ^0.10.4 + seroval: ^0.11.4 dependencies: babel-plugin-transform-rename-import: 2.3.0 csstype: 3.1.0 - seroval: 0.10.4 + seroval: 0.11.6 dev: true /domexception@4.0.0: @@ -3598,8 +3598,8 @@ packages: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true - /hyper-dom-expressions@0.37.1: - resolution: {integrity: sha512-vtU5FUQblxWcKThYqFLrQgHmmbvqWseXM4HKVP7x5c7CA1gLO7WUsi417L5XGv/S0uTUnAMmU7iCiadiZN8X/A==} + /hyper-dom-expressions@0.37.3: + resolution: {integrity: sha512-YXvTiNCcdCAu51gT/h3a2AS5X1PUo4fR1srXiu6y7qWSU4J+f5mL9bjwjit8h/EiBAVG+Vhg8ZX123c5Aid5lg==} dev: true /iconv-lite@0.4.24: @@ -4040,8 +4040,8 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lit-dom-expressions@0.37.1: - resolution: {integrity: sha512-KmzsEl/0xv5x6lEXnW1Ahs97Ns8kxL1b7IIIxB05ejSsCHBJE8KVdIvseC02lla4C7owktU2YMofsW40ZYYwBA==} + /lit-dom-expressions@0.37.3: + resolution: {integrity: sha512-ubFMz5SGFlteSI2Gixr1eE+9feyH1zTePIFDLhqy9QJGmTZEhRY0wIHDDSK3CknE7UdsvHiLKihpJlyqeO9pSw==} dev: true /load-json-file@4.0.0: @@ -4997,8 +4997,8 @@ packages: - supports-color dev: true - /seroval@0.10.4: - resolution: {integrity: sha512-TdaE9JkoATjKu+vjwllieX8zWyBTUVxbgWDnOsDJFfmKbM7vLSukuCXuD3pO3kkCtX4daywOW8ps2VCdPhS8/w==} + /seroval@0.11.6: + resolution: {integrity: sha512-Lhy+94CNcNza6d0vM4sQKLsaLaX39q0ELqIBc7DkdiFljI8Q387Yb+xKgLxRWXs7uuHRu/ZcJ64xfVJ0Bj4LPg==} engines: {node: '>=10'} /serve-static@1.14.1: