From d663c5406fe2ce719e029efcb93875b45040524f Mon Sep 17 00:00:00 2001 From: Ryan Carniato Date: Mon, 14 Jun 2021 01:19:49 -0700 Subject: [PATCH] fix ssr escaping, fetcher tracking --- package-lock.json | 62 ++++++++++++------------ package.json | 8 +-- packages/babel-preset-solid/package.json | 2 +- packages/solid/src/reactive/signal.ts | 15 +++--- 4 files changed, 46 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5feba5f0..fb77d23e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,15 +27,15 @@ "@types/jest": "^26.0.23", "@types/shelljs": "^0.8.8", "babel-jest": "^26.6.3", - "babel-plugin-jsx-dom-expressions": "^0.28.3", + "babel-plugin-jsx-dom-expressions": "^0.28.5", "coveralls": "^3.1.0", - "dom-expressions": "0.28.4", + "dom-expressions": "0.28.5", "gitly": "^2.1.0", - "hyper-dom-expressions": "0.28.4", + "hyper-dom-expressions": "0.28.5", "jest": "~26.6.3", "jest-ts-webcompat-resolver": "^1.0.0", "lerna": "^4.0.0", - "lit-dom-expressions": "0.28.4", + "lit-dom-expressions": "0.28.5", "ncp": "2.0.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", @@ -5733,9 +5733,9 @@ } }, "node_modules/babel-plugin-jsx-dom-expressions": { - "version": "0.28.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.28.3.tgz", - "integrity": "sha512-AUGiR6c2bVTyrwIuxXR730JrA7f1lpHsVaob5GoccquZPKK/JqC2GA0nubFJctjDw4aw5H65vrl+dz2/gN9Riw==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.28.5.tgz", + "integrity": "sha512-7zM3SSA7qhvg6TDaTfbN4fR4FCdMAc+2wj711BCiOg6rPY9bK2ZIZw8dQlDhxH2LLnAqN35CcYuoJx7OBxW3aw==", "dev": true, "license": "MIT", "dependencies": { @@ -7524,9 +7524,9 @@ } }, "node_modules/dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/dom-expressions/-/dom-expressions-0.28.4.tgz", - "integrity": "sha512-rf+l9e4y87VYZVUx1G/bdPryXz0ssanOT1QdYelahXfQzJD5e6DpOGoYQ9OvAhBGawmXxo47LJSRqTBLQ6HAyw==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/dom-expressions/-/dom-expressions-0.28.5.tgz", + "integrity": "sha512-KmETnardQ8Bp0Asbzvx11KBpVXrKgpSwu6moAKLqdA7Uuh2RTSWqEoi5rVD7bnneDTez7HTaQaNBolY978+Nbg==", "dev": true, "license": "MIT", "dependencies": { @@ -9238,10 +9238,11 @@ } }, "node_modules/hyper-dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/hyper-dom-expressions/-/hyper-dom-expressions-0.28.4.tgz", - "integrity": "sha512-5PdDO7FVW2IHoLsEkAQM5ThI2z6CP7fmq6TZUiursdLN/qsb9Bw0GxMTNfre9aJ/UAlVp0mRpbI7Ea9zdNnGUA==", - "dev": true + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/hyper-dom-expressions/-/hyper-dom-expressions-0.28.5.tgz", + "integrity": "sha512-AWkvaznCT5W1HPo0I03scoCIZx9IF/wELQEODXPEhyqd2wbTiYiEtUoy4MRBgBRNxOartYQzRmL5XEMMsaPMyA==", + "dev": true, + "license": "MIT" }, "node_modules/iconv-lite": { "version": "0.4.24", @@ -12398,10 +12399,11 @@ "dev": true }, "node_modules/lit-dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/lit-dom-expressions/-/lit-dom-expressions-0.28.4.tgz", - "integrity": "sha512-aqqk6I6O6DhQ5ejl1vf4agPcwtiNnRSFvThorUw55Hl0wCXPQWTmu6zuPDHGTMsZto0kqfd7Irh7VSjGGMyKKw==", - "dev": true + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/lit-dom-expressions/-/lit-dom-expressions-0.28.5.tgz", + "integrity": "sha512-YOo4f/j7daX1OTHqkN88SRq8BPVvvzcV2Wq0In+5IlVBXYqVsRdxVt0utwcLQmQOzAkfs6YB70V8HWitwanEzw==", + "dev": true, + "license": "MIT" }, "node_modules/load-json-file": { "version": "6.2.0", @@ -22040,9 +22042,9 @@ } }, "babel-plugin-jsx-dom-expressions": { - "version": "0.28.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.28.3.tgz", - "integrity": "sha512-AUGiR6c2bVTyrwIuxXR730JrA7f1lpHsVaob5GoccquZPKK/JqC2GA0nubFJctjDw4aw5H65vrl+dz2/gN9Riw==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.28.5.tgz", + "integrity": "sha512-7zM3SSA7qhvg6TDaTfbN4fR4FCdMAc+2wj711BCiOg6rPY9bK2ZIZw8dQlDhxH2LLnAqN35CcYuoJx7OBxW3aw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", @@ -23495,9 +23497,9 @@ } }, "dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/dom-expressions/-/dom-expressions-0.28.4.tgz", - "integrity": "sha512-rf+l9e4y87VYZVUx1G/bdPryXz0ssanOT1QdYelahXfQzJD5e6DpOGoYQ9OvAhBGawmXxo47LJSRqTBLQ6HAyw==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/dom-expressions/-/dom-expressions-0.28.5.tgz", + "integrity": "sha512-KmETnardQ8Bp0Asbzvx11KBpVXrKgpSwu6moAKLqdA7Uuh2RTSWqEoi5rVD7bnneDTez7HTaQaNBolY978+Nbg==", "dev": true, "requires": { "babel-plugin-transform-rename-import": "^2.3.0", @@ -24865,9 +24867,9 @@ } }, "hyper-dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/hyper-dom-expressions/-/hyper-dom-expressions-0.28.4.tgz", - "integrity": "sha512-5PdDO7FVW2IHoLsEkAQM5ThI2z6CP7fmq6TZUiursdLN/qsb9Bw0GxMTNfre9aJ/UAlVp0mRpbI7Ea9zdNnGUA==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/hyper-dom-expressions/-/hyper-dom-expressions-0.28.5.tgz", + "integrity": "sha512-AWkvaznCT5W1HPo0I03scoCIZx9IF/wELQEODXPEhyqd2wbTiYiEtUoy4MRBgBRNxOartYQzRmL5XEMMsaPMyA==", "dev": true }, "iconv-lite": { @@ -27366,9 +27368,9 @@ "dev": true }, "lit-dom-expressions": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/lit-dom-expressions/-/lit-dom-expressions-0.28.4.tgz", - "integrity": "sha512-aqqk6I6O6DhQ5ejl1vf4agPcwtiNnRSFvThorUw55Hl0wCXPQWTmu6zuPDHGTMsZto0kqfd7Irh7VSjGGMyKKw==", + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/lit-dom-expressions/-/lit-dom-expressions-0.28.5.tgz", + "integrity": "sha512-YOo4f/j7daX1OTHqkN88SRq8BPVvvzcV2Wq0In+5IlVBXYqVsRdxVt0utwcLQmQOzAkfs6YB70V8HWitwanEzw==", "dev": true }, "load-json-file": { diff --git a/package.json b/package.json index ed80b9c99..b8398af46 100644 --- a/package.json +++ b/package.json @@ -33,15 +33,15 @@ "@types/jest": "^26.0.23", "@types/shelljs": "^0.8.8", "babel-jest": "^26.6.3", - "babel-plugin-jsx-dom-expressions": "^0.28.3", + "babel-plugin-jsx-dom-expressions": "^0.28.5", "coveralls": "^3.1.0", - "dom-expressions": "0.28.4", + "dom-expressions": "0.28.5", "gitly": "^2.1.0", - "hyper-dom-expressions": "0.28.4", + "hyper-dom-expressions": "0.28.5", "jest": "~26.6.3", "jest-ts-webcompat-resolver": "^1.0.0", "lerna": "^4.0.0", - "lit-dom-expressions": "0.28.4", + "lit-dom-expressions": "0.28.5", "ncp": "2.0.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", diff --git a/packages/babel-preset-solid/package.json b/packages/babel-preset-solid/package.json index 8f69a98bc..0daaa977a 100644 --- a/packages/babel-preset-solid/package.json +++ b/packages/babel-preset-solid/package.json @@ -14,6 +14,6 @@ "test": "node test.js" }, "dependencies": { - "babel-plugin-jsx-dom-expressions": "^0.28.3" + "babel-plugin-jsx-dom-expressions": "^0.28.5" } } diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index d11643a0d..a5e14c9f8 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -107,11 +107,11 @@ export function createSignal(): [ ]; export function createSignal( value: T, - options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; } + options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string } ): [get: Accessor, set: (v: T) => T]; export function createSignal( value?: T, - options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; } + options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string } ): [get: Accessor, set: (v: T) => T] { options = options ? Object.assign({}, signalOptions, options) : signalOptions; const s: Signal = { @@ -306,7 +306,10 @@ export function createResource( } if (Transition && pr) Transition.promises.delete(pr); const p = - initP || (fetcher as (k: U, getPrev: Accessor) => T | Promise)(lookup, s); + initP || + untrack(() => + (fetcher as (k: U, getPrev: Accessor) => T | Promise)(lookup, s) + ); initP = null; if (typeof p !== "object" || !("then" in p)) { loadEnd(pr, p); @@ -405,7 +408,7 @@ export function createSelector( export function batch(fn: () => T): T { if (Pending) return fn(); let result; - const q: Signal[] = Pending = []; + const q: Signal[] = (Pending = []); try { result = fn(); } finally { @@ -985,10 +988,10 @@ function resolveChildren(children: any): unknown { function createProvider(id: symbol) { return function provider(props: { value: unknown; children: any }) { - return (createMemo(() => { + return createMemo(() => { Owner!.context = { [id]: props.value }; return children(() => props.children); - }) as unknown) as JSX.Element; + }) as unknown as JSX.Element; }; }