From f8940942d64940ff1fdefca77797c4109a43b52a Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Tue, 3 Mar 2026 23:10:43 +0100 Subject: [PATCH 1/7] conditional support for solid v1 and v2 --- packages/playground/package.json | 4 +- packages/playground/src/components/header.tsx | 10 + .../playground/src/components/setupSolid.ts | 15 - .../playground/src/components/setupSolidV1.ts | 27 + .../playground/src/components/setupSolidV2.ts | 27 + packages/playground/src/context.tsx | 10 +- packages/playground/src/index.tsx | 2 +- packages/playground/src/pages/edit.tsx | 109 +++- packages/playground/src/utils/exportFiles.tsx | 2 +- packages/solid-repl/build.ts | 4 +- packages/solid-repl/package.json | 7 - .../src/components/editor/monacoTabs.tsx | 2 +- packages/solid-repl/src/components/repl.tsx | 4 +- packages/solid-repl/src/index.ts | 5 +- packages/solid-repl/{repl => src}/main.css | 0 packages/solid-repl/src/types.d.ts | 14 +- packages/solid-v1-repl/build.ts | 13 + packages/solid-v1-repl/package.json | 43 ++ .../repl/compiler.ts | 0 .../repl/formatter.ts | 0 .../repl/linter.ts | 0 packages/solid-v1-repl/tsconfig.build.json | 22 + packages/solid-v1-repl/tsconfig.json | 21 + packages/solid-v1-repl/unocss.config.ts | 36 ++ packages/solid-v2-repl/build.ts | 13 + packages/solid-v2-repl/package.json | 59 ++ packages/solid-v2-repl/repl/compiler.ts | 172 ++++++ packages/solid-v2-repl/repl/formatter.ts | 25 + packages/solid-v2-repl/repl/linter.ts | 48 ++ packages/solid-v2-repl/repl/main.css | 30 ++ .../solid-v2-repl/src/components/repl.tsx | 506 ++++++++++++++++++ packages/solid-v2-repl/tsconfig.build.json | 22 + packages/solid-v2-repl/tsconfig.json | 21 + packages/solid-v2-repl/unocss.config.ts | 36 ++ pnpm-lock.yaml | 271 +++++++++- 35 files changed, 1512 insertions(+), 68 deletions(-) delete mode 100644 packages/playground/src/components/setupSolid.ts create mode 100644 packages/playground/src/components/setupSolidV1.ts create mode 100644 packages/playground/src/components/setupSolidV2.ts rename packages/solid-repl/{repl => src}/main.css (100%) create mode 100644 packages/solid-v1-repl/build.ts create mode 100644 packages/solid-v1-repl/package.json rename packages/{solid-repl => solid-v1-repl}/repl/compiler.ts (100%) rename packages/{solid-repl => solid-v1-repl}/repl/formatter.ts (100%) rename packages/{solid-repl => solid-v1-repl}/repl/linter.ts (100%) create mode 100644 packages/solid-v1-repl/tsconfig.build.json create mode 100644 packages/solid-v1-repl/tsconfig.json create mode 100644 packages/solid-v1-repl/unocss.config.ts create mode 100644 packages/solid-v2-repl/build.ts create mode 100644 packages/solid-v2-repl/package.json create mode 100644 packages/solid-v2-repl/repl/compiler.ts create mode 100644 packages/solid-v2-repl/repl/formatter.ts create mode 100644 packages/solid-v2-repl/repl/linter.ts create mode 100644 packages/solid-v2-repl/repl/main.css create mode 100644 packages/solid-v2-repl/src/components/repl.tsx create mode 100644 packages/solid-v2-repl/tsconfig.build.json create mode 100644 packages/solid-v2-repl/tsconfig.json create mode 100644 packages/solid-v2-repl/unocss.config.ts diff --git a/packages/playground/package.json b/packages/playground/package.json index 3993c59e..2d8026a6 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -15,7 +15,9 @@ "solid-dismiss": "^1.8.2", "solid-heroicons": "^3.2.4", "solid-js": "1.9.9", - "solid-repl": "workspace:*" + "solid-repl": "workspace:*", + "solid-v1-repl": "workspace:*", + "solid-v2-repl": "workspace:*" }, "devDependencies": { "@amoutonbrady/lz-string": "^0.1.0", diff --git a/packages/playground/src/components/header.tsx b/packages/playground/src/components/header.tsx index 15466c3a..75f13c42 100644 --- a/packages/playground/src/components/header.tsx +++ b/packages/playground/src/components/header.tsx @@ -62,6 +62,16 @@ export const Header: ParentComponent<{ setOpen={setShowMenu} show > +
+ +
+ + + )} + + + + + +
  • + +
  • + + + + + + + + + + { + if (props.current == 'import_map.json') { + const newImportMap = JSON.parse(code); + setImportMap(newImportMap); + } else { + compile(); + } + }} + formatter={formatter} + linter={linter} + isDark={props.dark} + withMinimap={false} + onEditorReady={props.onEditorReady} + displayErrors={displayErrors()} + /> + + + + setError('')} message={error()} /> + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + + + + + + +
    +
    +
    +
    +
    +
    + + ); +}; diff --git a/packages/solid-v2-repl/tsconfig.build.json b/packages/solid-v2-repl/tsconfig.build.json new file mode 100644 index 00000000..14486a51 --- /dev/null +++ b/packages/solid-v2-repl/tsconfig.build.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "esModuleInterop": true, + "moduleResolution": "node", + "jsx": "preserve", + "resolveJsonModule": true, + "strict": true, + "outDir": "dist", + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "jsxImportSource": "solid-js", + "rootDir": "src" + }, + "include": ["./src/**/*"], + "exclude": ["node_modules/"] +} diff --git a/packages/solid-v2-repl/tsconfig.json b/packages/solid-v2-repl/tsconfig.json new file mode 100644 index 00000000..7ac34fe9 --- /dev/null +++ b/packages/solid-v2-repl/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "esModuleInterop": true, + "moduleResolution": "node", + "jsx": "preserve", + "resolveJsonModule": true, + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "skipLibCheck": true, + "jsxImportSource": "solid-js" + }, + "include": ["./src/**/*", "repl/**/*"], + "exclude": ["node_modules/"] +} diff --git a/packages/solid-v2-repl/unocss.config.ts b/packages/solid-v2-repl/unocss.config.ts new file mode 100644 index 00000000..f9385782 --- /dev/null +++ b/packages/solid-v2-repl/unocss.config.ts @@ -0,0 +1,36 @@ +import { presetWind, theme } from '@unocss/preset-wind3'; +import { transformerDirectives, defineConfig } from 'unocss'; + +export default defineConfig({ + theme: { + colors: { + brand: { + default: '#2c4f7c', + dark: '#335d92', + medium: '#446b9e', + light: '#4f88c6', + }, + solid: { + default: '#2c4f7c', + darkbg: '#222222', + darkLighterBg: '#444444', + darkdefault: '#b8d7ff', + darkgray: '#252525', + gray: '#414042', + mediumgray: '#9d9d9d', + lightgray: '#f3f5f7', + dark: '#07254A', + medium: '#446b9e', + light: '#4f88c6', + accent: '#0cdc73', + secondaccent: '#0dfc85', + }, + other: '#1e1e1e', + }, + fontFamily: { + sans: 'Gordita, ' + theme.fontFamily!.sans, + }, + }, + presets: [presetWind()], + transformers: [transformerDirectives()], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c9c6f90..24f33aa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,12 @@ importers: solid-repl: specifier: workspace:* version: link:../solid-repl + solid-v1-repl: + specifier: workspace:* + version: link:../solid-v1-repl + solid-v2-repl: + specifier: workspace:* + version: link:../solid-v2-repl devDependencies: '@amoutonbrady/lz-string': specifier: ^0.1.0 @@ -131,6 +137,61 @@ importers: solid-heroicons: specifier: ^3.2.4 version: 3.2.4(solid-js@1.9.9) + devDependencies: + '@types/dedent': + specifier: ^0.7.2 + version: 0.7.2 + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 + '@unocss/cli': + specifier: ^66.5.3 + version: 66.5.3 + '@unocss/preset-wind3': + specifier: ^66.5.3 + version: 66.5.3 + '@unocss/reset': + specifier: ^66.5.3 + version: 66.5.3 + esbuild: + specifier: ^0.25.10 + version: 0.25.10 + eslint-solid-standalone: + specifier: <0.14.0 + version: 0.13.2(typescript@5.9.3) + fs-extra: + specifier: ^11.3.2 + version: 11.3.2 + jiti: + specifier: ^2.6.1 + version: 2.6.1 + monaco-editor: + specifier: ^0.54.0 + version: 0.54.0(patch_hash=c22608504f65b7be5744fa5a921967d57d4174214cca27331cd700777a8ec220) + prettier: + specifier: ^3.6.2 + version: 3.6.2 + solid-js: + specifier: 1.9.9 + version: 1.9.9 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + unocss: + specifier: ^66.5.3 + version: 66.5.3(postcss@8.5.6)(vite@7.1.9(@types/node@24.7.2)(jiti@2.6.1)(tsx@4.19.0)) + + packages/solid-v1-repl: + dependencies: + dedent: + specifier: ^1.7.0 + version: 1.7.0 + eslint-solid-standalone: + specifier: ^0.13.2 + version: 0.13.2(typescript@5.9.3) + solid-repl: + specifier: workspace:* + version: link:../solid-repl devDependencies: '@babel/core': specifier: ^7.28.4 @@ -156,6 +217,88 @@ importers: '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 + babel-preset-solid: + specifier: ^1.9.9 + version: 1.9.9(@babel/core@7.28.4)(solid-js@1.9.9) + esbuild: + specifier: ^0.25.10 + version: 0.25.10 + fs-extra: + specifier: ^11.3.2 + version: 11.3.2 + jiti: + specifier: ^2.6.1 + version: 2.6.1 + solid-js: + specifier: 1.9.9 + version: 1.9.9 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + packages/solid-v2-repl: + dependencies: + '@solid-primitives/media': + specifier: ^2.3.3 + version: 2.3.3(solid-js@2.0.0-experimental.16) + '@solid-primitives/platform': + specifier: ^0.2.1 + version: 0.2.1(solid-js@2.0.0-experimental.16) + '@solid-primitives/scheduled': + specifier: ^1.5.2 + version: 1.5.2(solid-js@2.0.0-experimental.16) + dedent: + specifier: ^1.7.0 + version: 1.7.0 + monaco-editor-textmate: + specifier: ^4.0.0 + version: 4.0.0(monaco-editor@0.54.0(patch_hash=c22608504f65b7be5744fa5a921967d57d4174214cca27331cd700777a8ec220))(monaco-textmate@3.0.1(onigasm@2.2.5)) + monaco-textmate: + specifier: ^3.0.1 + version: 3.0.1(onigasm@2.2.5) + onigasm: + specifier: ^2.2.5 + version: 2.2.5 + solid-dismiss: + specifier: ^1.8.2 + version: 1.8.2(solid-js@2.0.0-experimental.16) + solid-heroicons: + specifier: ^3.2.4 + version: 3.2.4(solid-js@2.0.0-experimental.16) + solid-repl: + specifier: workspace:* + version: link:../solid-repl + devDependencies: + '@babel/core': + specifier: ^7.28.4 + version: 7.28.4 + '@babel/plugin-syntax-jsx': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.28.4) + '@babel/preset-typescript': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.28.4) + '@babel/standalone': + specifier: ^7.28.4 + version: 7.28.4 + '@babel/types': + specifier: ^7.28.4 + version: 7.28.4 + '@solidjs/signals': + specifier: ^0.11.1 + version: 0.11.1 + '@solidjs/web': + specifier: 2.0.0-experimental.16 + version: 2.0.0-experimental.16(solid-js@2.0.0-experimental.16) + '@types/babel__standalone': + specifier: ^7.1.9 + version: 7.1.9 + '@types/dedent': + specifier: ^0.7.2 + version: 0.7.2 + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 '@unocss/cli': specifier: ^66.5.3 version: 66.5.3 @@ -166,13 +309,13 @@ importers: specifier: ^66.5.3 version: 66.5.3 babel-preset-solid: - specifier: ^1.9.9 - version: 1.9.9(@babel/core@7.28.4)(solid-js@1.9.9) + specifier: ^2.0.0-experimental.16 + version: 2.0.0-experimental.16(@babel/core@7.28.4)(solid-js@2.0.0-experimental.16) esbuild: specifier: ^0.25.10 version: 0.25.10 eslint-solid-standalone: - specifier: <0.14.0 + specifier: ^0.13.2 version: 0.13.2(typescript@5.9.3) fs-extra: specifier: ^11.3.2 @@ -187,8 +330,8 @@ importers: specifier: ^3.6.2 version: 3.6.2 solid-js: - specifier: 1.9.9 - version: 1.9.9 + specifier: ^2.0.0-experimental.16 + version: 2.0.0-experimental.16 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -917,6 +1060,14 @@ packages: peerDependencies: solid-js: ^1.8.6 + '@solidjs/signals@0.11.1': + resolution: {integrity: sha512-//nvM/Vjmp34utkMtf3l99+zuiT9gEF9709cGA5xHIsJgkKd4xhfU0getn8gujnypijddcS0VMTZrUhWsqoDfA==} + + '@solidjs/web@2.0.0-experimental.16': + resolution: {integrity: sha512-TcgvLKOYN2cIExX307SRxvd1aXj5eLaQUlGDLdQoQBqDHhuDdeZUfKLYrn/JOzWs1u5DYNOc+gR0SaG17vYsng==} + peerDependencies: + solid-js: ^2.0.0-experimental.16 + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1078,6 +1229,11 @@ packages: peerDependencies: '@babel/core': ^7.20.12 + babel-plugin-jsx-dom-expressions@0.41.0-next.9: + resolution: {integrity: sha512-6EZcgFC8AM2lM2jSe7W/5fuREMC/PErTUD2O5YNuV267p8xaLFpoJPlM8PL0NY2Pu0a49gb3JbYvt5/yv2Z7Ww==} + peerDependencies: + '@babel/core': ^7.20.12 + babel-preset-solid@1.9.9: resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==} peerDependencies: @@ -1087,6 +1243,15 @@ packages: solid-js: optional: true + babel-preset-solid@2.0.0-experimental.16: + resolution: {integrity: sha512-I8UfX7Er2i3XaqC8pr7klEHl/AWUUFmpgWDvzipQofthcBwrlWUk8pVbQZ6PuBOnr4XRBVF3ijzOicfzmj4uBA==} + peerDependencies: + '@babel/core': ^7.0.0 + solid-js: 2.0.0-experimental.16 + peerDependenciesMeta: + solid-js: + optional: true + baseline-browser-mapping@2.8.16: resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} hasBin: true @@ -1819,10 +1984,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.5.0: + resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.3.2: resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} engines: {node: '>=10'} + seroval@1.5.0: + resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} + engines: {node: '>=10'} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -1863,6 +2038,9 @@ packages: solid-js@1.9.9: resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} + solid-js@2.0.0-experimental.16: + resolution: {integrity: sha512-zZ1dU7cR0EnvLnrYiRLQbCFiDw5blLdlqmofgLzKUYE1TCMWDcisBlSwz0Ez8l4yXB4adbdhtaYCuynH4xSq9A==} + solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -2235,7 +2413,7 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 debug: 4.4.3 @@ -2700,6 +2878,11 @@ snapshots: '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) solid-js: 1.9.9 + '@solid-primitives/event-listener@2.4.3(solid-js@2.0.0-experimental.16)': + dependencies: + '@solid-primitives/utils': 6.3.2(solid-js@2.0.0-experimental.16) + solid-js: 2.0.0-experimental.16 + '@solid-primitives/media@2.3.3(solid-js@1.9.9)': dependencies: '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.9) @@ -2708,32 +2891,70 @@ snapshots: '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) solid-js: 1.9.9 + '@solid-primitives/media@2.3.3(solid-js@2.0.0-experimental.16)': + dependencies: + '@solid-primitives/event-listener': 2.4.3(solid-js@2.0.0-experimental.16) + '@solid-primitives/rootless': 1.5.2(solid-js@2.0.0-experimental.16) + '@solid-primitives/static-store': 0.1.2(solid-js@2.0.0-experimental.16) + '@solid-primitives/utils': 6.3.2(solid-js@2.0.0-experimental.16) + solid-js: 2.0.0-experimental.16 + '@solid-primitives/platform@0.2.1(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 + '@solid-primitives/platform@0.2.1(solid-js@2.0.0-experimental.16)': + dependencies: + solid-js: 2.0.0-experimental.16 + '@solid-primitives/rootless@1.5.2(solid-js@1.9.9)': dependencies: '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) solid-js: 1.9.9 + '@solid-primitives/rootless@1.5.2(solid-js@2.0.0-experimental.16)': + dependencies: + '@solid-primitives/utils': 6.3.2(solid-js@2.0.0-experimental.16) + solid-js: 2.0.0-experimental.16 + '@solid-primitives/scheduled@1.5.2(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 + '@solid-primitives/scheduled@1.5.2(solid-js@2.0.0-experimental.16)': + dependencies: + solid-js: 2.0.0-experimental.16 + '@solid-primitives/static-store@0.1.2(solid-js@1.9.9)': dependencies: '@solid-primitives/utils': 6.3.2(solid-js@1.9.9) solid-js: 1.9.9 + '@solid-primitives/static-store@0.1.2(solid-js@2.0.0-experimental.16)': + dependencies: + '@solid-primitives/utils': 6.3.2(solid-js@2.0.0-experimental.16) + solid-js: 2.0.0-experimental.16 + '@solid-primitives/utils@6.3.2(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 + '@solid-primitives/utils@6.3.2(solid-js@2.0.0-experimental.16)': + dependencies: + solid-js: 2.0.0-experimental.16 + '@solidjs/router@0.15.3(solid-js@1.9.9)': dependencies: solid-js: 1.9.9 + '@solidjs/signals@0.11.1': {} + + '@solidjs/web@2.0.0-experimental.16(solid-js@2.0.0-experimental.16)': + dependencies: + seroval: 1.5.0 + seroval-plugins: 1.5.0(seroval@1.5.0) + solid-js: 2.0.0-experimental.16 + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.4 @@ -2978,6 +3199,16 @@ snapshots: parse5: 7.3.0 validate-html-nesting: 1.2.3 + babel-plugin-jsx-dom-expressions@0.41.0-next.9(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.3 + babel-preset-solid@1.9.9(@babel/core@7.28.4)(solid-js@1.9.9): dependencies: '@babel/core': 7.28.4 @@ -2985,6 +3216,13 @@ snapshots: optionalDependencies: solid-js: 1.9.9 + babel-preset-solid@2.0.0-experimental.16(@babel/core@7.28.4)(solid-js@2.0.0-experimental.16): + dependencies: + '@babel/core': 7.28.4 + babel-plugin-jsx-dom-expressions: 0.41.0-next.9(@babel/core@7.28.4) + optionalDependencies: + solid-js: 2.0.0-experimental.16 + baseline-browser-mapping@2.8.16: {} better-path-resolve@1.0.0: @@ -3678,8 +3916,14 @@ snapshots: dependencies: seroval: 1.3.2 + seroval-plugins@1.5.0(seroval@1.5.0): + dependencies: + seroval: 1.5.0 + seroval@1.3.2: {} + seroval@1.5.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -3711,16 +3955,31 @@ snapshots: dependencies: solid-js: 1.9.9 + solid-dismiss@1.8.2(solid-js@2.0.0-experimental.16): + dependencies: + solid-js: 2.0.0-experimental.16 + solid-heroicons@3.2.4(solid-js@1.9.9): dependencies: solid-js: 1.9.9 + solid-heroicons@3.2.4(solid-js@2.0.0-experimental.16): + dependencies: + solid-js: 2.0.0-experimental.16 + solid-js@1.9.9: dependencies: csstype: 3.1.3 seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) + solid-js@2.0.0-experimental.16: + dependencies: + '@solidjs/signals': 0.11.1 + csstype: 3.1.3 + seroval: 1.5.0 + seroval-plugins: 1.5.0(seroval@1.5.0) + solid-refresh@0.6.3(solid-js@1.9.9): dependencies: '@babel/generator': 7.28.3 From b3197680d1bf0613204c65dc601ad2289c520ad4 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Tue, 3 Mar 2026 23:26:48 +0100 Subject: [PATCH 2/7] only have the shared main.css --- packages/solid-v2-repl/repl/main.css | 30 ---------------------------- 1 file changed, 30 deletions(-) delete mode 100644 packages/solid-v2-repl/repl/main.css diff --git a/packages/solid-v2-repl/repl/main.css b/packages/solid-v2-repl/repl/main.css deleted file mode 100644 index 3541769b..00000000 --- a/packages/solid-v2-repl/repl/main.css +++ /dev/null @@ -1,30 +0,0 @@ -@import url('@unocss/reset/tailwind.css'); - -@font-face { - font-family: 'Gordita'; - src: url('/Gordita-Regular.woff') format('woff'); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: 'Gordita'; - src: url('/Gordita-Bold.woff') format('woff'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Gordita'; - src: url('/Gordita-Medium.woff') format('woff'); - font-weight: 500; - font-style: normal; -} - -div[contenteditable='true']:focus { - outline: none !important; -} - -.dark { - color-scheme: dark; -} From e12dc31633e2b9011a62ce8737c041fbb2a17105 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Tue, 3 Mar 2026 23:28:04 +0100 Subject: [PATCH 3/7] delete unused repl --- .../solid-v2-repl/src/components/repl.tsx | 506 ------------------ 1 file changed, 506 deletions(-) delete mode 100644 packages/solid-v2-repl/src/components/repl.tsx diff --git a/packages/solid-v2-repl/src/components/repl.tsx b/packages/solid-v2-repl/src/components/repl.tsx deleted file mode 100644 index ed58a21e..00000000 --- a/packages/solid-v2-repl/src/components/repl.tsx +++ /dev/null @@ -1,506 +0,0 @@ -import { Show, For, createSignal, createEffect, batch, Match, Switch, onCleanup, createMemo } from 'solid-js'; -import { Icon } from 'solid-heroicons'; -import { arrowPath, commandLine, trash, inboxStack, bell, bellSlash } from 'solid-heroicons/outline'; -import { unwrap } from 'solid-js/store'; -import { Preview } from './preview'; -import { TabItem, TabList } from './tabs'; -import { GridResizer } from './gridResizer'; -import { Error } from './error'; -import { throttle } from '@solid-primitives/scheduled'; -import { createMediaQuery } from '@solid-primitives/media'; -import { editor, Uri } from 'monaco-editor'; -import { createMonacoTabs } from './editor/monacoTabs'; - -import Editor from './editor'; -import type { Repl as ReplProps } from 'solid-v1-repl/dist/repl'; -import type { Tab } from 'solid-v1-repl'; - -const compileMode = { - SSR: { generate: 'ssr', hydratable: true }, - DOM: { generate: 'dom', hydratable: false }, - HYDRATABLE: { generate: 'dom', hydratable: true }, - UNIVERSAL: { generate: 'universal', hydratable: false, moduleName: 'solid-universal-module' as string }, -} as const; - -const findExtension = (str: string): '.tsx' | '.jsx' => { - for (const ext of ['.tsx', '.jsx'] as const) { - if (str.endsWith(ext)) return ext; - } - return '.jsx'; -}; -const getImportMap = (tabs: Tab[]): Record => { - try { - const rawImportMap = tabs.find((tab) => tab.name === 'import_map.json'); - return JSON.parse(rawImportMap?.source ?? '{}'); - } catch (e) { - return {}; - } -}; - -export const Repl: ReplProps = (props) => { - const { compiler, formatter, linter } = props; - let now: number; - - const tabRefs = new Map(); - - const [error, setError] = createSignal(''); - const [output, setOutput] = createSignal(''); - const [universalModuleName, setUniversalModuleName] = createSignal('solid-universal-module'); - const [mode, setMode] = createSignal<(typeof compileMode)[keyof typeof compileMode]>(compileMode.DOM); - - const userTabs = () => props.tabs.filter((tab) => tab.name != 'import_map.json'); - const tabExtension = findExtension(props.tabs[0].name); - - function setCurrentTab(current: string) { - const idx = props.tabs.findIndex((tab) => tab.name === current); - if (idx < 0) return; - props.setCurrent(current); - } - function setCurrentName(newName: string) { - const tabs = props.tabs; - tabs.find((tab) => tab.name === props.current).name = newName; - batch(() => { - props.setTabs([...tabs]); - props.setCurrent(newName); - }); - } - function removeTab(name: string) { - const tabs = props.tabs; - const idx = tabs.findIndex((tab) => tab.name === name); - const tab = tabs[idx]; - - if (!tab) return; - - const confirmDeletion = confirm(`Are you sure you want to delete ${tab.name}?`); - if (!confirmDeletion) return; - - batch(() => { - props.setTabs([...tabs.slice(0, idx), ...tabs.slice(idx + 1)]); - // We want to redirect to another tab if we are deleting the current one - if (props.current === name) { - props.setCurrent(tabs[idx - 1].name); - } - }); - } - function addTab() { - const newTab = { - name: `tab${userTabs().length}${tabExtension}`, - source: '', - }; - batch(() => { - props.setTabs(props.tabs.concat(newTab)); - props.setCurrent(newTab.name); - }); - } - function resetTabs() { - const confirmReset = confirm('Are you sure you want to reset the editor?'); - if (!confirmReset) return; - props.reset(); - } - - const [edit, setEdit] = createSignal(-1); - const [outputTab, setOutputTab] = createSignal(0); - const [importMap, setImportMap] = createSignal(getImportMap(props.tabs), { - equals: (a, b) => JSON.stringify(a) === JSON.stringify(b), - }); - - const outputUri = Uri.parse(`file:///${props.id}/output_dont_import.ts`); - const outputModel = editor.createModel('', 'typescript', outputUri); - onCleanup(() => outputModel.dispose()); - - const onCompilerMessage = ({ data }: any) => { - const { event, compiled, error } = data; - if (event === 'ERROR') { - console.error(error); - return setError(error.message); - } else setError(''); - - if (event === 'BABEL') { - outputModel.setValue(compiled); - setOutput(''); - } - - if (event === 'ROLLUP') { - const currentMap = { ...importMap() }; - for (const file in currentMap) { - // Catch any `jspm.dev` URLs and migrate them to `esm.sh` - if (currentMap[file] === `https://jspm.dev/${file}`) { - currentMap[file] = `https://esm.sh/${file}`; - } - if (!(file in compiled) && currentMap[file] === `https://esm.sh/${file}`) { - delete currentMap[file]; - } - } - for (const file in compiled) { - if (!(file in currentMap) && !file.startsWith('./')) { - currentMap[file] = compiled[file]; - } - } - console.log(`Compilation took: ${performance.now() - now}ms`); - - batch(() => { - let tab = props.tabs.find((tab) => tab.name === 'import_map.json'); - if (!tab) { - tab = { - name: 'import_map.json', - source: JSON.stringify(currentMap, null, 2), - }; - props.setTabs(props.tabs.concat(tab)); - } else { - tab.source = JSON.stringify(currentMap, null, 2); - const { model } = monacoTabs().get(`file:///${props.id}/import_map.json`)!; - model.setValue(tab.source); - } - - setOutput(compiled['./main']); - setImportMap(currentMap); - }); - } - }; - compiler.addEventListener('message', onCompilerMessage); - onCleanup(() => compiler.removeEventListener('message', onCompilerMessage)); - - /** - * We need to debounce a bit the compilation because - * it takes ~15ms to compile with the web worker... - * Also, real time feedback can be stressful - */ - const applyCompilation = throttle((message: any) => { - now = performance.now(); - - compiler.postMessage(message); - }, 250); - - const compile = () => { - let compileOpts = mode(); - if (compileOpts === compileMode.UNIVERSAL) { - compileOpts = { generate: 'universal', hydratable: false, moduleName: universalModuleName() }; - } - applyCompilation( - outputTab() == 0 - ? { - event: 'ROLLUP', - tabs: unwrap(userTabs()), - } - : { - event: 'BABEL', - tab: unwrap(props.tabs.find((tab) => tab.name == props.current)), - compileOpts, - }, - ); - }; - - /** - * The heart of the playground. This recompile on - * every tab source changes. - */ - createEffect(() => { - if (!props.tabs.length) return; - - compile(); - }); - - const monacoTabs = createMonacoTabs(props.id, () => props.tabs); - const currentModel = createMemo(() => monacoTabs().get(`file:///${props.id}/${props.current}`)!.model); - - let grid!: HTMLDivElement; - let resizer!: HTMLDivElement; - const [left, setLeft] = createSignal(0.625); - - const isLarge = createMediaQuery('(min-width: 768px)'); - const isHorizontal = () => props.isHorizontal || !isLarge(); - - const changeLeft = (clientX: number, clientY: number) => { - let position: number; - let size: number; - - const rect = grid.getBoundingClientRect(); - - if (isHorizontal()) { - position = clientY - rect.top - resizer.offsetHeight / 2; - size = grid.offsetHeight - resizer.offsetHeight; - } else { - position = clientX - rect.left - resizer.offsetWidth / 2; - size = grid.offsetWidth - resizer.offsetWidth; - } - const percentage = position / size; - const percentageAdjusted = Math.min(Math.max(percentage, 0.25), 0.75); - - setLeft(percentageAdjusted); - }; - - const [reloadSignal, reload] = createSignal(false, { equals: false }); - const [devtoolsOpen, setDevtoolsOpen] = createSignal(!props.hideDevtools); - const [displayErrors, setDisplayErrors] = createSignal(true); - - return ( -
    -
    - - - {(tab, index) => ( - -
    tabRefs.set(index(), el)} - class="cursor-pointer select-none rounded border border-solid border-transparent px-3 py-2 transition" - classList={{ - 'border-transparent': edit() !== index(), - 'border-blue-600 outline-none': edit() === index(), - }} - contentEditable={edit() == index()} - onBlur={(e) => { - if (edit() !== index()) return; - setEdit(-1); - setCurrentName(e.currentTarget.textContent!); - }} - onKeyDown={(e) => { - if (e.code === 'Space') e.preventDefault(); - if (e.code !== 'Enter') return; - if (edit() === index()) { - setEdit(-1); - setCurrentName(e.currentTarget.textContent!); - e.currentTarget.blur(); - } else { - setCurrentTab(tab.name); - } - }} - onClick={() => setCurrentTab(tab.name)} - onDblClick={(e) => { - e.preventDefault(); - setEdit(index()); - tabRefs.get(index())?.focus(); - }} - title={tab.name} - role="button" - tabindex="0" - > - {tab.name} -
    - - 0}> - - -
    - )} -
    - - - - -
  • - -
  • - - - - - - -
    - - - { - if (props.current == 'import_map.json') { - const newImportMap = JSON.parse(code); - setImportMap(newImportMap); - } else { - compile(); - } - }} - formatter={formatter} - linter={linter} - isDark={props.dark} - withMinimap={false} - onEditorReady={props.onEditorReady} - displayErrors={displayErrors()} - /> - - - - setError('')} message={error()} /> - -
    - - - -
    - - - - - - - - - - - - - - - - - - - - -
    - - -
    - - -
    - - - - - - - -
    -
    -
    -
    -
    -
    -
    - ); -}; From 9fea92b16f6c85bc1ec30f6175a75ad915ca383c Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Tue, 3 Mar 2026 23:48:06 +0100 Subject: [PATCH 4/7] beta 0 - made sure works on load --- packages/playground/src/pages/edit.tsx | 17 ++++++++++++++--- packages/solid-v2-repl/package.json | 8 ++++---- packages/solid-v2-repl/repl/compiler.ts | 8 +++++--- pnpm-lock.yaml | 16 ++++++++-------- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/packages/playground/src/pages/edit.tsx b/packages/playground/src/pages/edit.tsx index 0ceb7364..c0c6d5c9 100644 --- a/packages/playground/src/pages/edit.tsx +++ b/packages/playground/src/pages/edit.tsx @@ -139,6 +139,9 @@ export const Edit = () => { createEffect(() => { const version = context.solidVersion(); + const isLoaded = !!resource(); + if (!isLoaded) return; + untrack(() => { const currentTabs = tabs(); const importMapTab = currentTabs.find(t => t.name === 'import_map.json'); @@ -148,10 +151,18 @@ export const Edit = () => { let changed = false; for (const key of Object.keys(map)) { if (map[key].startsWith('https://esm.sh/')) { - if (key === 'solid-js' || key.startsWith('solid-js/')) { + if (key === 'solid-js/web') { + const newValue = version === '2' + ? `https://esm.sh/@solidjs/web@2.0.0-beta.0` + : `https://esm.sh/solid-js/web`; + if (map[key] !== newValue) { + map[key] = newValue; + changed = true; + } + } else if (key === 'solid-js' || key.startsWith('solid-js/')) { const suffix = key === 'solid-js' ? '' : key.slice('solid-js'.length); const newValue = version === '2' - ? `https://esm.sh/solid-js@2.0.0-experimental.16${suffix}` + ? `https://esm.sh/solid-js@2.0.0-beta.0${suffix}` : `https://esm.sh/solid-js${suffix}`; if (map[key] !== newValue) { map[key] = newValue; @@ -160,7 +171,7 @@ export const Edit = () => { } else if (key === '@solidjs/web' || key.startsWith('@solidjs/web/')) { const suffix = key === '@solidjs/web' ? '' : key.slice('@solidjs/web'.length); const newValue = version === '2' - ? `https://esm.sh/@solidjs/web@2.0.0-experimental.16${suffix}` + ? `https://esm.sh/@solidjs/web@2.0.0-beta.0${suffix}` : `https://esm.sh/@solidjs/web${suffix}`; if (map[key] !== newValue) { map[key] = newValue; diff --git a/packages/solid-v2-repl/package.json b/packages/solid-v2-repl/package.json index 9afd01ca..b848453c 100644 --- a/packages/solid-v2-repl/package.json +++ b/packages/solid-v2-repl/package.json @@ -17,7 +17,7 @@ "build": "jiti build.ts" }, "peerDependencies": { - "solid-js": ">=2.0.0-experimental.16" + "solid-js": ">=2.0.0-beta.0" }, "devDependencies": { "@babel/core": "^7.28.4", @@ -26,21 +26,21 @@ "@babel/standalone": "^7.28.4", "@babel/types": "^7.28.4", "@solidjs/signals": "^0.11.1", - "@solidjs/web": "2.0.0-experimental.16", + "@solidjs/web": "2.0.0-beta.0", "@types/babel__standalone": "^7.1.9", "@types/dedent": "^0.7.2", "@types/fs-extra": "^11.0.4", "@unocss/cli": "^66.5.3", "@unocss/preset-wind3": "^66.5.3", "@unocss/reset": "^66.5.3", - "babel-preset-solid": "^2.0.0-experimental.16", + "babel-preset-solid": "^2.0.0-beta.0", "esbuild": "^0.25.10", "eslint-solid-standalone": "^0.13.2", "fs-extra": "^11.3.2", "jiti": "^2.6.1", "monaco-editor": "^0.54.0", "prettier": "^3.6.2", - "solid-js": "^2.0.0-experimental.16", + "solid-js": "^2.0.0-beta.0", "typescript": "^5.9.3", "unocss": "^66.5.3" }, diff --git a/packages/solid-v2-repl/repl/compiler.ts b/packages/solid-v2-repl/repl/compiler.ts index ee58f452..31389cb9 100644 --- a/packages/solid-v2-repl/repl/compiler.ts +++ b/packages/solid-v2-repl/repl/compiler.ts @@ -87,10 +87,12 @@ function transformImportee(fileName: string) { if (fileName.includes('://')) return fileName; else { let esmFileName = fileName; - if (fileName === 'solid-js' || fileName.startsWith('solid-js/')) { - esmFileName = fileName.replace('solid-js', 'solid-js@2.0.0-experimental.16'); + if (fileName === 'solid-js/web') { + esmFileName = '@solidjs/web@2.0.0-beta.0'; + } else if (fileName === 'solid-js' || fileName.startsWith('solid-js/')) { + esmFileName = fileName.replace('solid-js', 'solid-js@2.0.0-beta.0'); } else if (fileName === '@solidjs/web' || fileName.startsWith('@solidjs/web/')) { - esmFileName = fileName.replace('@solidjs/web', '@solidjs/web@2.0.0-experimental.16'); + esmFileName = fileName.replace('@solidjs/web', '@solidjs/web@2.0.0-beta.0'); } dataToReturn[fileName] = `https://esm.sh/${esmFileName}`; return fileName; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24f33aa2..a5a0b8ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,8 +288,8 @@ importers: specifier: ^0.11.1 version: 0.11.1 '@solidjs/web': - specifier: 2.0.0-experimental.16 - version: 2.0.0-experimental.16(solid-js@2.0.0-experimental.16) + specifier: 2.0.0-beta.0 + version: 2.0.0-beta.0(solid-js@2.0.0-experimental.16) '@types/babel__standalone': specifier: ^7.1.9 version: 7.1.9 @@ -309,7 +309,7 @@ importers: specifier: ^66.5.3 version: 66.5.3 babel-preset-solid: - specifier: ^2.0.0-experimental.16 + specifier: ^2.0.0-beta.0 version: 2.0.0-experimental.16(@babel/core@7.28.4)(solid-js@2.0.0-experimental.16) esbuild: specifier: ^0.25.10 @@ -330,7 +330,7 @@ importers: specifier: ^3.6.2 version: 3.6.2 solid-js: - specifier: ^2.0.0-experimental.16 + specifier: ^2.0.0-beta.0 version: 2.0.0-experimental.16 typescript: specifier: ^5.9.3 @@ -1063,10 +1063,10 @@ packages: '@solidjs/signals@0.11.1': resolution: {integrity: sha512-//nvM/Vjmp34utkMtf3l99+zuiT9gEF9709cGA5xHIsJgkKd4xhfU0getn8gujnypijddcS0VMTZrUhWsqoDfA==} - '@solidjs/web@2.0.0-experimental.16': - resolution: {integrity: sha512-TcgvLKOYN2cIExX307SRxvd1aXj5eLaQUlGDLdQoQBqDHhuDdeZUfKLYrn/JOzWs1u5DYNOc+gR0SaG17vYsng==} + '@solidjs/web@2.0.0-beta.0': + resolution: {integrity: sha512-eBmPNbzR6/GBrkNho2rQ89frd5Y/BKGqUQstM5mHBNs4s+pdHMn9Y7n6wcBbmfoSwJZRa4QxOl3K9Q7MkCZBNg==} peerDependencies: - solid-js: ^2.0.0-experimental.16 + solid-js: ^2.0.0-beta.0 '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2949,7 +2949,7 @@ snapshots: '@solidjs/signals@0.11.1': {} - '@solidjs/web@2.0.0-experimental.16(solid-js@2.0.0-experimental.16)': + '@solidjs/web@2.0.0-beta.0(solid-js@2.0.0-experimental.16)': dependencies: seroval: 1.5.0 seroval-plugins: 1.5.0(seroval@1.5.0) From a9de949ad95ec144ecd7b1a906e058f1315f0648 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Tue, 3 Mar 2026 23:58:53 +0100 Subject: [PATCH 5/7] load correct solid version from link --- packages/playground/src/pages/edit.tsx | 11 +++++++---- packages/playground/src/pages/home.tsx | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/playground/src/pages/edit.tsx b/packages/playground/src/pages/edit.tsx index c0c6d5c9..f5ef94c8 100644 --- a/packages/playground/src/pages/edit.tsx +++ b/packages/playground/src/pages/edit.tsx @@ -106,6 +106,7 @@ export const Edit = () => { name: x.name, content: x.source, })), + version: context.solidVersion(), } as APIRepl; localStorage.setItem('scratchpad', JSON.stringify(output)); } else { @@ -118,6 +119,8 @@ export const Edit = () => { } batch(() => { + const initialVersion = output.version?.startsWith('2') ? '2' : '1'; + context.setSolidVersion(initialVersion); setTabs( output.files.map((x) => { return { name: x.name, source: x.content }; @@ -194,12 +197,12 @@ export const Edit = () => { const files = tabs().map((x) => ({ name: x.name, content: x.source })); if (readonly()) { - localStorage.setItem('scratchpad', JSON.stringify({ files })); + localStorage.setItem('scratchpad', JSON.stringify({ files, version: context.solidVersion() })); disableFetch = true; navigate('/scratchpad'); return; } else if (scratchpad()) { - localStorage.setItem('scratchpad', JSON.stringify({ files })); + localStorage.setItem('scratchpad', JSON.stringify({ files, version: context.solidVersion() })); } const repl = resource.latest; @@ -215,7 +218,7 @@ export const Edit = () => { body: JSON.stringify({ ...(localStorage.getItem(params.repl) ? { write_token: localStorage.getItem(params.repl) } : {}), title: repl.title, - version: repl.version, + version: context.solidVersion(), public: repl.public, labels: repl.labels, files, @@ -237,7 +240,7 @@ export const Edit = () => { title: context.user()?.display ? `${context.user()!.display}'s Scratchpad` : 'Anonymous Scratchpad', public: true, labels: [], - version: '1.0', + version: context.solidVersion(), files: tabs().map((x) => ({ name: x.name, content: x.source })), }; const response = await fetch(`${API}/repl`, { diff --git a/packages/playground/src/pages/home.tsx b/packages/playground/src/pages/home.tsx index fcbd4bdd..fb058931 100644 --- a/packages/playground/src/pages/home.tsx +++ b/packages/playground/src/pages/home.tsx @@ -109,7 +109,7 @@ export const Home = () => { title: 'Counter Example', public: true, labels: [], - version: '1.0', + version: context.solidVersion(), files: defaultTabs.map((x) => ({ name: x.name, content: x.source })), }), }); From f891115b12ae8c6b087c37aa27314666ac37960a Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Wed, 4 Mar 2026 00:04:27 +0100 Subject: [PATCH 6/7] convert both ways --- packages/playground/src/pages/edit.tsx | 31 ++++++++++++++++++++++---- packages/playground/src/pages/home.tsx | 7 ++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/playground/src/pages/edit.tsx b/packages/playground/src/pages/edit.tsx index f5ef94c8..0e2fa07a 100644 --- a/packages/playground/src/pages/edit.tsx +++ b/packages/playground/src/pages/edit.tsx @@ -104,7 +104,7 @@ export const Edit = () => { output = { files: defaultTabs.map((x) => ({ name: x.name, - content: x.source, + content: context.solidVersion() === '2' ? x.source.replace('solid-js/web', '@solidjs/web') : x.source, })), version: context.solidVersion(), } as APIRepl; @@ -135,7 +135,11 @@ export const Edit = () => { const reset = () => { batch(() => { - setTabs(mapTabs(defaultTabs)); + const updatedTabs = defaultTabs.map(x => ({ + ...x, + source: context.solidVersion() === '2' ? x.source.replace('solid-js/web', '@solidjs/web') : x.source + })); + setTabs(mapTabs(updatedTabs)); setCurrent(defaultTabs[0].name); }); }; @@ -147,11 +151,11 @@ export const Edit = () => { untrack(() => { const currentTabs = tabs(); + let changed = false; const importMapTab = currentTabs.find(t => t.name === 'import_map.json'); if (importMapTab) { try { const map = JSON.parse(importMapTab.source); - let changed = false; for (const key of Object.keys(map)) { if (map[key].startsWith('https://esm.sh/')) { if (key === 'solid-js/web') { @@ -185,10 +189,29 @@ export const Edit = () => { } if (changed) { importMapTab.source = JSON.stringify(map, null, 2); - setTabs([...currentTabs]); // Trigger solid's reactivity } } catch (e) {} } + + currentTabs.forEach((tab) => { + if (!tab.name.endsWith('.json') && !tab.name.endsWith('.css')) { + if (version === '2') { + if (tab.source.includes('solid-js/web')) { + tab.source = tab.source.replaceAll('solid-js/web', '@solidjs/web'); + changed = true; + } + } else { + if (tab.source.includes('@solidjs/web')) { + tab.source = tab.source.replaceAll('@solidjs/web', 'solid-js/web'); + changed = true; + } + } + } + }); + + if (changed) { + setTabs([...currentTabs]); // Trigger solid's reactivity + } }); }); diff --git a/packages/playground/src/pages/home.tsx b/packages/playground/src/pages/home.tsx index fb058931..59b73681 100644 --- a/packages/playground/src/pages/home.tsx +++ b/packages/playground/src/pages/home.tsx @@ -53,7 +53,7 @@ export const Home = () => { JSON.stringify({ files: initialTabs.map((x) => ({ name: x.name, - content: x.source, + content: (initialTabs === defaultTabs && context.solidVersion() === '2') ? x.source.replace('solid-js/web', '@solidjs/web') : x.source, })), }), ); @@ -110,7 +110,10 @@ export const Home = () => { public: true, labels: [], version: context.solidVersion(), - files: defaultTabs.map((x) => ({ name: x.name, content: x.source })), + files: defaultTabs.map((x) => ({ + name: x.name, + content: context.solidVersion() === '2' ? x.source.replace('solid-js/web', '@solidjs/web') : x.source + })), }), }); if (!result.ok) { From 1f2b4aa675d803930932533851d17fe682b40568 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Wed, 4 Mar 2026 01:11:51 +0100 Subject: [PATCH 7/7] conditional loadign fo vite plugin solid --- packages/playground/src/components/header.tsx | 2 +- packages/playground/src/pages/edit.tsx | 29 +++++++++++---- packages/playground/src/utils/exportFiles.tsx | 32 ++++++++++++----- packages/solid-v2-repl/package.json | 3 ++ packages/solid-v2-repl/repl/compiler.ts | 15 ++++++-- pnpm-lock.yaml | 36 +++++++++++++++++++ 6 files changed, 100 insertions(+), 17 deletions(-) diff --git a/packages/playground/src/components/header.tsx b/packages/playground/src/components/header.tsx index 75f13c42..1872997a 100644 --- a/packages/playground/src/components/header.tsx +++ b/packages/playground/src/components/header.tsx @@ -90,7 +90,7 @@ export const Header: ParentComponent<{