From 9bd562804a794c41940db2477ed96ac3dc7e7404 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Sun, 5 Nov 2023 23:12:49 +0100 Subject: [PATCH 01/16] Add firefox extension build --- configs/tsconfig.base.json | 30 ++--- packages/extension/background/background.ts | 108 ++++++++++-------- packages/extension/content/content.ts | 2 +- packages/extension/content/debugger.ts | 6 +- packages/extension/content/detector.ts | 2 +- packages/extension/devtools/devtools.html | 18 ++- packages/extension/devtools/devtools.ts | 18 ++- packages/extension/env.d.ts | 1 + packages/extension/index.html | 26 ++--- packages/extension/manifest.ts | 42 ------- packages/extension/package.json | 10 +- packages/extension/popup/popup.html | 24 ++-- .../extension/popup/{index.tsx => popup.tsx} | 8 +- packages/extension/{src => shared}/bridge.ts | 8 +- packages/extension/{src => shared}/icons.ts | 2 - packages/extension/src/event-bus.ts | 12 -- .../extension/src/{index.tsx => panel.tsx} | 6 +- packages/extension/vite.config.ts | 99 ++++++++++++---- packages/extension/web_ext_run | 7 ++ packages/frontend/package.json | 2 +- pnpm-lock.yaml | 8 +- 21 files changed, 239 insertions(+), 200 deletions(-) delete mode 100644 packages/extension/manifest.ts rename packages/extension/popup/{index.tsx => popup.tsx} (96%) rename packages/extension/{src => shared}/bridge.ts (95%) rename packages/extension/{src => shared}/icons.ts (95%) delete mode 100644 packages/extension/src/event-bus.ts rename packages/extension/src/{index.tsx => panel.tsx} (97%) create mode 100755 packages/extension/web_ext_run diff --git a/configs/tsconfig.base.json b/configs/tsconfig.base.json index acb51c0b..e9422374 100644 --- a/configs/tsconfig.base.json +++ b/configs/tsconfig.base.json @@ -1,17 +1,17 @@ { - "compilerOptions": { - "strict": true, - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "noEmit": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "types": ["@total-typescript/ts-reset"] - } + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "noEmit": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "types": ["@total-typescript/ts-reset"] + } } diff --git a/packages/extension/background/background.ts b/packages/extension/background/background.ts index faf6062c..53b1e499 100644 --- a/packages/extension/background/background.ts +++ b/packages/extension/background/background.ts @@ -7,25 +7,11 @@ It has to coordinate the communication between the different scripts based on th */ import { error, log } from '@solid-devtools/shared/utils' -import { - ConnectionName, - DetectionState, - ForwardPayload, - OnMessageFn, - PostMessageFn, - Versions, - createPortMessanger, - isForwardMessage, - once, -} from '../src/bridge' -import { EventBus } from '../src/event-bus' -import icons from '../src/icons' +import * as bridge from '../shared/bridge' +import { icons } from '../shared/icons' log('Background script working.') -let activeTabId: number = -1 -chrome.tabs.onActivated.addListener(({ tabId }) => (activeTabId = tabId)) - type TabDataConfig = { toContent: TabData['toContent'] fromContent: TabData['fromContent'] @@ -33,18 +19,25 @@ type TabDataConfig = { forwardToClient: TabData['forwardToClient'] } +class EventBus extends Set<(payload: T) => void> { + emit(..._: void extends T ? [payload?: T] : [payload: T]): void + emit(payload?: any) { + for (const cb of this) cb(payload) + } +} + class TabData { public connected = true private disconnectBus = new EventBus() private connectListeners = new Set< - (toContent: PostMessageFn, fromContent: OnMessageFn) => void + (toContent: bridge.PostMessageFn, fromContent: bridge.OnMessageFn) => void >() - private toContent: PostMessageFn - private fromContent: OnMessageFn - public forwardToDevtools: (fn: (message: ForwardPayload) => void) => void - public forwardToClient: (message: ForwardPayload) => void + private toContent: bridge.PostMessageFn + private fromContent: bridge.OnMessageFn + public forwardToDevtools: (fn: (message: bridge.ForwardPayload) => void) => void + public forwardToClient: (message: bridge.ForwardPayload) => void constructor( public tabId: number, @@ -57,7 +50,7 @@ class TabData { } onContentScriptConnect( - fn: (toContent: PostMessageFn, fromContent: OnMessageFn) => void, + fn: (toContent: bridge.PostMessageFn, fromContent: bridge.OnMessageFn) => void, ): VoidFunction { if (this.connected) fn(this.toContent.bind(this), this.fromContent.bind(this)) this.connectListeners.add(fn) @@ -88,29 +81,29 @@ class TabData { this.forwardToDevtools = () => {} } - #versions: Versions | undefined - #versionsBus = new EventBus() - onVersions(fn: (versions: Versions) => void) { + #versions: bridge.Versions | undefined + #versionsBus = new EventBus() + onVersions(fn: (versions: bridge.Versions) => void) { if (this.#versions) fn(this.#versions) else this.#versionsBus.add(fn) } - setVersions(versions: Versions) { + setVersions(versions: bridge.Versions) { this.#versions = versions this.#versionsBus.emit(versions) this.#versionsBus.clear() } - #detected: DetectionState = { + #detected: bridge.DetectionState = { Solid: false, SolidDev: false, Devtools: false, } - #detectedListeners = new EventBus() - onDetected(fn: (state: DetectionState) => void) { + #detectedListeners = new EventBus() + onDetected(fn: (state: bridge.DetectionState) => void) { fn(this.#detected) this.#detectedListeners.add(fn) } - detected(state: DetectionState) { + detected(state: bridge.DetectionState) { this.#detected = state this.#detectedListeners.emit(state) } @@ -123,9 +116,10 @@ let lastDisconnectedTabData: TabData | undefined let lastDisconnectedTabId: number | undefined function handleContentScriptConnection(port: chrome.runtime.Port, tabId: number) { - const { onPortMessage: fromContent, postPortMessage: toContent } = createPortMessanger(port) + const { onPortMessage: fromContent, postPortMessage: toContent } = + bridge.createPortMessanger(port) - let forwardHandler: ((message: ForwardPayload) => void) | undefined + let forwardHandler: ((message: bridge.ForwardPayload) => void) | undefined let data: TabData const config: TabDataConfig = { @@ -150,7 +144,7 @@ function handleContentScriptConnection(port: chrome.runtime.Port, tabId: number) tabDataMap.set(tabId, data) // "Versions" from content-script - once(fromContent, 'Versions', v => { + bridge.once(fromContent, 'Versions', v => { data.setVersions(v) // Change the popup icon to indicate that Solid is present on the page @@ -167,29 +161,51 @@ function handleContentScriptConnection(port: chrome.runtime.Port, tabId: number) lastDisconnectedTabId = tabId }) - port.onMessage.addListener((message: ForwardPayload | any) => { + port.onMessage.addListener((message: bridge.ForwardPayload | any) => { // HANDLE FORWARDED MESSAGES FROM CLIENT (content-script) - forwardHandler && isForwardMessage(message) && forwardHandler(message) + forwardHandler && bridge.isForwardMessage(message) && forwardHandler(message) }) } -function withTabData( +const ACTIVE_TAB_QUERY = { active: true, currentWindow: true } as const +const queryActiveTabId = async (): Promise => { + try { + const tabs = await chrome.tabs.query(ACTIVE_TAB_QUERY) + if (tabs.length === 0) return new Error('No active tab') + const tab = tabs[0]! + if (!tab.id) return new Error('Active tab has no id') + return tab.id + } catch (e) { + return e instanceof Error ? e : new Error('Unknown error') + } +} + +const withTabData = async ( port: chrome.runtime.Port, - fn: (data: TabData, m: ReturnType) => void, -): void { - const data = tabDataMap.get(activeTabId) - if (!data) return error('No data for active tab', activeTabId) - const m = createPortMessanger(port) - fn(data, m) + callback: (data: TabData, m: ReturnType) => void, +): Promise => { + const active_tab_id = await queryActiveTabId() + if (active_tab_id instanceof Error) { + error(active_tab_id) + return + } + + const data = tabDataMap.get(active_tab_id) + if (!data) { + error('No data for active tab', active_tab_id, 'when connecing', port.name) + return + } + + callback(data, bridge.createPortMessanger(port)) } chrome.runtime.onConnect.addListener(port => { switch (port.name) { - case ConnectionName.Content: + case bridge.ConnectionName.Content: port.sender?.tab?.id && handleContentScriptConnection(port, port.sender.tab.id) break - case ConnectionName.Devtools: + case bridge.ConnectionName.Devtools: withTabData(port, (data, { postPortMessage: toDevtools }) => { data.onContentScriptConnect(toContent => { // "Versions" means the devtools client is present @@ -200,7 +216,7 @@ chrome.runtime.onConnect.addListener(port => { }) break - case ConnectionName.Panel: + case bridge.ConnectionName.Panel: withTabData(port, (data, { postPortMessage: toPanel, onForwardMessage }) => { data.onContentScriptConnect((toContent, fromContent) => { data.onVersions(v => { @@ -222,7 +238,7 @@ chrome.runtime.onConnect.addListener(port => { }) break - case ConnectionName.Popup: + case bridge.ConnectionName.Popup: withTabData(port, (data, { postPortMessage: toPopup }) => { data.onVersions(v => toPopup('Versions', v)) data.onDetected(state => toPopup('Detected', state)) diff --git a/packages/extension/content/content.ts b/packages/extension/content/content.ts index 7fb1a670..a9943b20 100644 --- a/packages/extension/content/content.ts +++ b/packages/extension/content/content.ts @@ -21,7 +21,7 @@ import { makeMessageListener, makePostMessage, startListeningWindowMessages, -} from '../src/bridge' +} from '../shared/bridge' import.meta.env.DEV && log('Content-Script working.') diff --git a/packages/extension/content/debugger.ts b/packages/extension/content/debugger.ts index d80994ec..f6c80ac4 100644 --- a/packages/extension/content/debugger.ts +++ b/packages/extension/content/debugger.ts @@ -8,7 +8,11 @@ Debugger Client injected into the inspected page import { useDebugger } from '@solid-devtools/debugger' import { Debugger } from '@solid-devtools/debugger/types' import { log, warn } from '@solid-devtools/shared/utils' -import { makeMessageListener, makePostMessage, startListeningWindowMessages } from '../src/bridge' +import { + makeMessageListener, + makePostMessage, + startListeningWindowMessages, +} from '../shared/bridge' import.meta.env.DEV && log('Debugger-Client loaded') diff --git a/packages/extension/content/detector.ts b/packages/extension/content/detector.ts index dd990bf0..f0044603 100644 --- a/packages/extension/content/detector.ts +++ b/packages/extension/content/detector.ts @@ -7,7 +7,7 @@ and notify the content script import '@solid-devtools/debugger/types' import { detectSolid, onSolidDevDetect, onSolidDevtoolsDetect } from '@solid-devtools/shared/detect' -import { DETECT_MESSAGE, DetectEvent, DetectionState } from '../src/bridge' +import { DETECT_MESSAGE, DetectEvent, DetectionState } from '../shared/bridge' const state: DetectionState = { Solid: false, diff --git a/packages/extension/devtools/devtools.html b/packages/extension/devtools/devtools.html index cb9b3e3d..52814b26 100644 --- a/packages/extension/devtools/devtools.html +++ b/packages/extension/devtools/devtools.html @@ -1,12 +1,10 @@ - + + + + - - - - - - - - - \ No newline at end of file + + + + diff --git a/packages/extension/devtools/devtools.ts b/packages/extension/devtools/devtools.ts index dae4c89e..b095ed64 100644 --- a/packages/extension/devtools/devtools.ts +++ b/packages/extension/devtools/devtools.ts @@ -8,8 +8,8 @@ It connects to the background script. */ import { error, log } from '@solid-devtools/shared/utils' -import { ConnectionName, createPortMessanger, once } from '../src/bridge' -import icons from '../src/icons' +import { ConnectionName, createPortMessanger, once } from '../shared/bridge' +import { icons } from '../shared/icons' log('Devtools-Script working.') @@ -35,8 +35,14 @@ once(fromBackground, 'Versions', async () => { const createPanel = () => new Promise((resolve, reject) => { - chrome.devtools.panels.create('Solid', icons.normal[32], 'index.html', newPanel => { - if (chrome.runtime.lastError) reject(chrome.runtime.lastError) - else resolve(newPanel) - }) + chrome.devtools.panels.create( + 'Solid', + /* firefox requires absolute paths */ + '/' + icons.disabled[32], + '/index.html', + newPanel => { + if (chrome.runtime.lastError) reject(chrome.runtime.lastError) + else resolve(newPanel) + }, + ) }) diff --git a/packages/extension/env.d.ts b/packages/extension/env.d.ts index 278a1497..5a8b3704 100644 --- a/packages/extension/env.d.ts +++ b/packages/extension/env.d.ts @@ -7,6 +7,7 @@ declare global { // import.meta.env.EXPECTED_CLIENT interface ImportMetaEnv { EXPECTED_CLIENT: string + BROWSER: 'chrome' | 'firefox' } } diff --git a/packages/extension/index.html b/packages/extension/index.html index bf92e56a..9d697a74 100644 --- a/packages/extension/index.html +++ b/packages/extension/index.html @@ -1,18 +1,16 @@ - + + + + + + Solid Devtools + - - - - - Solid Devtools - - - - -
- - - + + +
+ + diff --git a/packages/extension/manifest.ts b/packages/extension/manifest.ts deleted file mode 100644 index 522fbce4..00000000 --- a/packages/extension/manifest.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { defineManifest } from '@crxjs/vite-plugin' -import { version } from './package.json' -import icons from './src/icons' - -// Convert from Semver (example: 0.1.0-beta6) -const [major, minor, patch, label = '0'] = version - // can only contain digits, dots, or dash - .replace(/[^\d.-]+/g, '') - // split into version parts - .split(/[.-]/) - -export default defineManifest(env => ({ - manifest_version: 3, - name: `${env.mode === 'production' ? '' : '[DEV] '}Solid Devtools`, - description: 'Chrome Developer Tools extension for debugging SolidJS applications.', - homepage_url: 'https://github.com/thetarnav/solid-devtools', - // up to four numbers separated by dots - version: `${major}.${minor}.${patch}.${label}`, - // semver is OK in "version_name" - version_name: version, - author: 'Damian Tarnawski', - minimum_chrome_version: '94', - devtools_page: 'devtools/devtools.html', - content_scripts: [ - { - matches: ['*://*/*'], - js: ['content/content.ts'], - run_at: 'document_start', - }, - ], - background: { - service_worker: 'background/background.ts', - type: 'module', - }, - permissions: [], - action: { - default_icon: icons.disabled, - default_title: 'Solid Devtools', - default_popup: 'popup/popup.html', - }, - icons: icons.normal, -})) diff --git a/packages/extension/package.json b/packages/extension/package.json index e8f196df..c09991f1 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -4,17 +4,17 @@ "private": true, "license": "MIT", "author": "Damian Tarnawski ", - "contributors": [], "type": "module", "scripts": { - "dev": "vite --port 3333", - "build": "npm run clean && vite build && node scripts/zip.cjs", + "dev": "vite", + "build:chrome": "npm run clean && BROWSER=chrome vite build && node scripts/zip.cjs", + "build:firefox": "npm run clean && BROWSER=firefox vite build && node scripts/zip.cjs", "clean": "rimraf dist dist.zip", "test:unit": "vitest", "test:types": "tsc --noEmit --paths null" }, "devDependencies": { - "@crxjs/vite-plugin": "2.0.0-beta.17", + "@crxjs/vite-plugin": "2.0.0-beta.21", "@types/chrome": "^0.0.248", "rimraf": "^5.0.5", "zip-a-folder": "^3.1.3" @@ -32,5 +32,5 @@ "vite": "^4" } }, - "packageManager": "pnpm@8.6.0" + "packageManager": "pnpm@8.9.0" } diff --git a/packages/extension/popup/popup.html b/packages/extension/popup/popup.html index 7176d8dc..863cfc37 100644 --- a/packages/extension/popup/popup.html +++ b/packages/extension/popup/popup.html @@ -1,16 +1,14 @@ - + + + + + + Solid Devtools + - - - - - Solid Devtools - - - -
- - - + +
+ + diff --git a/packages/extension/popup/index.tsx b/packages/extension/popup/popup.tsx similarity index 96% rename from packages/extension/popup/index.tsx rename to packages/extension/popup/popup.tsx index 6aca8ba7..13dc7b02 100644 --- a/packages/extension/popup/index.tsx +++ b/packages/extension/popup/popup.tsx @@ -2,7 +2,13 @@ import { Accessor, Component, JSX, Show, createSignal } from 'solid-js' import { render } from 'solid-js/web' -import { ConnectionName, DetectionState, Versions, createPortMessanger, once } from '../src/bridge' +import { + ConnectionName, + DetectionState, + Versions, + createPortMessanger, + once, +} from '../shared/bridge' import './popup.css' diff --git a/packages/extension/src/bridge.ts b/packages/extension/shared/bridge.ts similarity index 95% rename from packages/extension/src/bridge.ts rename to packages/extension/shared/bridge.ts index a2b8481e..668a75ed 100644 --- a/packages/extension/src/bridge.ts +++ b/packages/extension/shared/bridge.ts @@ -26,6 +26,9 @@ export type DetectEvent = { state: DetectionState } +// const LOG_MESSAGES = import.meta.env.DEV +const LOG_MESSAGES: boolean = true + export function createPortMessanger< IM extends { [K in string]: any } = {}, OM extends { [K in string]: any } = {}, @@ -42,10 +45,9 @@ export function createPortMessanger< } = {} let connected = true - import.meta.env.DEV && log(`${port.name.replace(DEVTOOLS_ID_PREFIX, '')} port connected.`) + LOG_MESSAGES && log(`${port.name.replace(DEVTOOLS_ID_PREFIX, '')} port connected.`) port.onDisconnect.addListener(() => { - import.meta.env.DEV && - log(`${port.name.replace(DEVTOOLS_ID_PREFIX, '')} port disconnected.`) + LOG_MESSAGES && log(`${port.name.replace(DEVTOOLS_ID_PREFIX, '')} port disconnected.`) connected = false listeners = {} port.onMessage.removeListener(onMessage) diff --git a/packages/extension/src/icons.ts b/packages/extension/shared/icons.ts similarity index 95% rename from packages/extension/src/icons.ts rename to packages/extension/shared/icons.ts index 3a2f058c..da037ad9 100644 --- a/packages/extension/src/icons.ts +++ b/packages/extension/shared/icons.ts @@ -12,5 +12,3 @@ export const icons = { 128: 'assets/icons/solid-gray-128.png', }, } as const - -export default icons diff --git a/packages/extension/src/event-bus.ts b/packages/extension/src/event-bus.ts deleted file mode 100644 index 2c560483..00000000 --- a/packages/extension/src/event-bus.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type Listener = (payload: T) => void - -export type Listen = (listener: Listener) => VoidFunction - -export type Emit = (..._: void extends T ? [payload?: T] : [payload: T]) => void - -export class EventBus extends Set> { - emit(..._: void extends T ? [payload?: T] : [payload: T]): void - emit(payload?: any) { - for (const cb of this) cb(payload) - } -} diff --git a/packages/extension/src/index.tsx b/packages/extension/src/panel.tsx similarity index 97% rename from packages/extension/src/index.tsx rename to packages/extension/src/panel.tsx index 139ae7af..eb5ef0c4 100644 --- a/packages/extension/src/index.tsx +++ b/packages/extension/src/panel.tsx @@ -1,8 +1,12 @@ +/* + Devtools panel entry point +*/ + import { Debugger } from '@solid-devtools/debugger/types' import { createDevtools, MountIcons } from '@solid-devtools/frontend' import { createSignal } from 'solid-js' import { render } from 'solid-js/web' -import { ConnectionName, createPortMessanger, once, Versions } from './bridge' +import { ConnectionName, createPortMessanger, once, Versions } from '../shared/bridge' import '@solid-devtools/frontend/dist/styles.css' diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index 77fa7268..995313c8 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -1,25 +1,77 @@ -import { crx } from '@crxjs/vite-plugin' -import fs from 'fs' -import { createRequire } from 'node:module' -import path from 'path' +import * as crx from '@crxjs/vite-plugin' +import fs from 'node:fs' +import module from 'node:module' +import path from 'node:path' import solidPlugin from 'vite-plugin-solid' -import { defineConfig, UserConfig } from 'vitest/config' +import * as vi from 'vitest/config' import { testConfig } from '../../configs/vitest.config' -import manifest from './manifest' +import ext_pkg from './package.json' +import { icons } from './shared/icons' -const require = createRequire(import.meta.url) +const require = module.createRequire(import.meta.url) const cwd = process.cwd() -const solidDevtoolsPkg = JSON.parse( - fs.readFileSync(require.resolve('solid-devtools/package.json'), 'utf-8'), -) as { version: string } +const BROWSER = process.env.BROWSER +if (BROWSER !== 'chrome' && BROWSER !== 'firefox') { + throw new Error('BROWSER env must be "chrome" or "firefox"') +} +const is_chrome = BROWSER === 'chrome' -const solidDevtoolsVersion = JSON.stringify(solidDevtoolsPkg.version.match(/\d+.\d+.\d+/)![0]) +const manifest = crx.defineManifest(env => { + // Convert from Semver (example: 0.1.0-beta6) + const [major, minor, patch, label = '0'] = ext_pkg.version + // can only contain digits, dots, or dash + .replace(/[^\d.-]+/g, '') + // split into version parts + .split(/[.-]/) -export default defineConfig(config => { - const isDev = config.mode === 'development' + return { + manifest_version: 3, + name: `${env.mode === 'production' ? '' : '[DEV] '}Solid Devtools`, + description: 'Chrome Developer Tools extension for debugging SolidJS applications.', + homepage_url: 'https://github.com/thetarnav/solid-devtools', + version: `${major}.${minor}.${patch}.${label}`, + version_name: is_chrome ? ext_pkg.version : undefined, + author: 'Damian Tarnawski', + minimum_chrome_version: '94', + devtools_page: 'devtools/devtools.html', + content_scripts: [ + { + matches: ['*://*/*'], + js: ['content/content.ts'], + run_at: 'document_start', + }, + ], + background: is_chrome + ? { + service_worker: 'background/background.ts', + type: 'module', + } + : { + scripts: ['background/background.ts'], + type: 'module', + }, + permissions: [], + action: { + default_icon: icons.disabled, + default_title: 'Solid Devtools', + default_popup: 'popup/popup.html', + }, + icons: icons.normal, + } +}) + +export default vi.defineConfig(config => { + const is_dev = config.mode === 'development' + + const sdt_pkg = JSON.parse( + fs.readFileSync(require.resolve('solid-devtools/package.json'), 'utf-8'), + ) as { version: string } + + const sdt_version = JSON.stringify(sdt_pkg.version.match(/\d+.\d+.\d+/)![0]) return { + server: { port: 3333 }, resolve: { alias: { 'solid-js/web': path.resolve(cwd, 'node_modules/solid-js/web/dist/web.js'), @@ -28,29 +80,32 @@ export default defineConfig(config => { }, }, plugins: [ - solidPlugin({ dev: false, hot: false }) as any, - crx({ manifest }), + solidPlugin({ dev: false, hot: false }), + crx.crx({ + manifest: manifest, + browser: BROWSER, + }), { name: 'replace-version', enforce: 'pre', transform(code, id) { if (id.includes('solid-devtools')) { - return code.replace( - /import\.meta\.env\.EXPECTED_CLIENT/g, - solidDevtoolsVersion, - ) + code = code.replace(/import\.meta\.env\.EXPECTED_CLIENT/g, sdt_version) } return code }, }, ], + define: { + 'import.meta.env.BROWSER': JSON.stringify(BROWSER), + }, build: { - emptyOutDir: !isDev, + emptyOutDir: !is_dev, rollupOptions: { input: { panel: 'index.html' }, }, target: 'esnext', }, - test: testConfig as any, - } satisfies UserConfig + test: testConfig, + } }) diff --git a/packages/extension/web_ext_run b/packages/extension/web_ext_run new file mode 100755 index 00000000..35b6695b --- /dev/null +++ b/packages/extension/web_ext_run @@ -0,0 +1,7 @@ +#!/bin/bash + +# # Load environment variables +# source .env.local + +# Run the web extension +web-ext run -s dist -p dev "$@" diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 42b3771c..4ddaf58a 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -67,5 +67,5 @@ "peerDependencies": { "solid-js": "^1.8.0" }, - "packageManager": "pnpm@8.6.0" + "packageManager": "pnpm@8.9.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d54ac7c0..b6d168e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -221,8 +221,8 @@ importers: version: 1.8.5 devDependencies: '@crxjs/vite-plugin': - specifier: 2.0.0-beta.17 - version: 2.0.0-beta.17 + specifier: 2.0.0-beta.21 + version: 2.0.0-beta.21 '@types/chrome': specifier: ^0.0.248 version: 0.0.248 @@ -1781,8 +1781,8 @@ packages: prettier: 2.8.8 dev: true - /@crxjs/vite-plugin@2.0.0-beta.17: - resolution: {integrity: sha512-44CavnsY01jvF2uHfRdqA3j6bg6IcVc+ZrSayYS+H7eqb6BHWh619A2jJ3Y0eHVh9H65041ob4g6I1VMxWx4qw==} + /@crxjs/vite-plugin@2.0.0-beta.21: + resolution: {integrity: sha512-kSXgHHqCXASqJ8NmY94+KLGVwdtkJ0E7KsRQ+vbMpRliJ5ze0xnSk0l41p4txlUysmEoqaeo4Xb7rEFdcU2zjQ==} dependencies: '@rollup/pluginutils': 4.2.1 '@webcomponents/custom-elements': 1.6.0 From 4976097f45e3b9b0a12f96d1716a802e4d848a7b Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Mon, 6 Nov 2023 18:54:20 +0100 Subject: [PATCH 02/16] Extend a build script to build a Firefox extension --- configs/tsconfig.base.json | 1 - package.json | 8 ++- packages/debugger/src/main/types.ts | 23 ++++--- packages/extension/build.ts | 41 ++++++++++++ packages/extension/package.json | 5 +- packages/extension/tsconfig.build.json | 16 +++++ packages/extension/tsconfig.json | 3 +- packages/extension/vite.config.ts | 93 +++++++++++++------------- packages/extension/web_ext_run | 4 -- patches/solid-js@1.8.5.patch | 51 ++++++++++++++ pnpm-lock.yaml | 91 +++++++++++++------------ tsconfig.json | 19 +++--- 12 files changed, 239 insertions(+), 116 deletions(-) create mode 100644 packages/extension/build.ts create mode 100644 packages/extension/tsconfig.build.json create mode 100644 patches/solid-js@1.8.5.patch diff --git a/configs/tsconfig.base.json b/configs/tsconfig.base.json index e9422374..d7a7405c 100644 --- a/configs/tsconfig.base.json +++ b/configs/tsconfig.base.json @@ -7,7 +7,6 @@ "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "esModuleInterop": true, - "noEmit": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "noPropertyAccessFromIndexSignature": true, diff --git a/package.json b/package.json index f3654b69..e42073af 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build": "turbo run build --filter=./packages/*", "----------------------TEST----------------------": "", "test:unit": "turbo run test --filter=./packages/*", - "test:types": "turbo run typecheck --filter=./packages/*", + "test:types": "turbo run test:types --filter=./packages/*", "test:lint": "eslint --ignore-path .gitignore --max-warnings 0 packages/**/*.{js,ts,tsx,jsx} --rule \"@typescript-eslint/no-unnecessary-type-assertion: off\"", "test:e2e": "cross-env PW_CHROMIUM_ATTACH_TO_OTHER=1 playwright test -c playwright.config.ts", "----------------------UTILS----------------------": "", @@ -48,6 +48,7 @@ "solid-js": "^1.8.5", "tsup": "^7.2.0", "tsup-preset-solid": "^2.1.0", + "tsx": "^3.14.0", "turbo": "^1.10.16", "typescript": "^5.2.2", "unocss": "^0.57.1", @@ -59,5 +60,10 @@ "engines": { "node": ">=18", "pnpm": ">=8.6.0" + }, + "pnpm": { + "patchedDependencies": { + "solid-js@1.8.5": "patches/solid-js@1.8.5.patch" + } } } diff --git a/packages/debugger/src/main/types.ts b/packages/debugger/src/main/types.ts index 959e40d6..c225521c 100644 --- a/packages/debugger/src/main/types.ts +++ b/packages/debugger/src/main/types.ts @@ -74,14 +74,15 @@ export const getValueItemId = ( export type ValueUpdateListener = (newValue: unknown, oldValue: unknown) => void export namespace Solid { - export type OwnerBase = import('solid-js/types/reactive/signal').Owner - export type SourceMapValue = import('solid-js/types/reactive/signal').SourceMapValue - export type Signal = import('solid-js/types/reactive/signal').SignalState - export type Computation = import('solid-js/types/reactive/signal').Computation - export type Memo = import('solid-js/types/reactive/signal').Memo - export type RootFunction = import('solid-js/types/reactive/signal').RootFunction - export type EffectFunction = import('solid-js/types/reactive/signal').EffectFunction - export type Component = import('solid-js/types/reactive/signal').DevComponent<{ + export type OwnerBase = import('solid-js').Owner + export type SourceMapValue = import('solid-js/types/reactive/signal.d.ts').SourceMapValue + export type Signal = import('solid-js/types/reactive/signal.d.ts').SignalState + export type Computation = import('solid-js/types/reactive/signal.d.ts').Computation + export type Memo = import('solid-js/types/reactive/signal.d.ts').Memo + export type RootFunction = import('solid-js/types/reactive/signal.d.ts').RootFunction + export type EffectFunction = + import('solid-js/types/reactive/signal.d.ts').EffectFunction + export type Component = import('solid-js/types/reactive/signal.d.ts').DevComponent<{ [key: string]: unknown }> @@ -109,12 +110,12 @@ export namespace Solid { // export type StoreNode = import('solid-js/store').StoreNode - export type NotWrappable = import('solid-js/store/types/store').NotWrappable - export type OnStoreNodeUpdate = import('solid-js/store/types/store').OnStoreNodeUpdate + export type NotWrappable = import('solid-js/store').NotWrappable + export type OnStoreNodeUpdate = import('solid-js/store/types/store.d.ts').OnStoreNodeUpdate export type Store = SourceMapValue & { value: StoreNode } } -declare module 'solid-js/types/reactive/signal' { +declare module 'solid-js/types/reactive/signal.d.ts' { interface Owner { sdtType?: NodeType sdtSubRoots?: Solid.Owner[] | null diff --git a/packages/extension/build.ts b/packages/extension/build.ts new file mode 100644 index 00000000..6edb13de --- /dev/null +++ b/packages/extension/build.ts @@ -0,0 +1,41 @@ +import child_process from 'node:child_process' +import fs from 'node:fs' +import * as vite from 'vite' + +const cwd = process.cwd() +const args = process.argv.slice(2) + +type Browser = 'chrome' | 'firefox' + +/* +Parse args +*/ +const browsers: Browser[] = [] +for (const arg of args) { + if (!arg.startsWith('--browser=')) continue + + const browser = arg.slice('--browser='.length) + if (browser !== 'chrome' && browser !== 'firefox') { + throw new Error('browser arg must be "chrome" or "firefox", was ' + browser) + } + browsers.push(browser) +} +if (browsers.length === 0) { + throw new Error('No browsers specified') +} + +/* +Clear dist folder +*/ +const dist = `${cwd}/dist` +if (fs.existsSync(dist)) fs.rmSync(dist, { recursive: true }) + +/* +Build and zip +*/ +for (const browser of browsers) { + process.env['BROWSER'] = browser + await vite.build() + + child_process.exec(`zip -r ${dist}/${browser}.zip ${dist}/*`) +} diff --git a/packages/extension/package.json b/packages/extension/package.json index c09991f1..5478ac04 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -7,8 +7,9 @@ "type": "module", "scripts": { "dev": "vite", - "build:chrome": "npm run clean && BROWSER=chrome vite build && node scripts/zip.cjs", - "build:firefox": "npm run clean && BROWSER=firefox vite build && node scripts/zip.cjs", + "build:chrome": "tsx build.ts --browser=chrome", + "build:firefox": "tsx build.ts --browser=firefox", + "build": "tsx build.ts --browser=firefox --browser=chrome", "clean": "rimraf dist dist.zip", "test:unit": "vitest", "test:types": "tsc --noEmit --paths null" diff --git a/packages/extension/tsconfig.build.json b/packages/extension/tsconfig.build.json new file mode 100644 index 00000000..75a03120 --- /dev/null +++ b/packages/extension/tsconfig.build.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + "types": ["@types/node"], + "module": "NodeNext", + "moduleResolution": "NodeNext" + }, + "include": [ + "./build.ts", + "./vite.config.ts", + "./package.json", + "../../configs/vitest.config.ts", + "./shared/**/*" + ] +} diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index b9424c4d..a6f98ea8 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -14,5 +14,6 @@ "shared/**/*", "popup/**/*", "env.d.ts" - ] + ], + "references": [{ "path": "./tsconfig.build.json" }] } diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index 995313c8..f54b2d2e 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -2,22 +2,21 @@ import * as crx from '@crxjs/vite-plugin' import fs from 'node:fs' import module from 'node:module' import path from 'node:path' +import * as vite from 'vite' import solidPlugin from 'vite-plugin-solid' -import * as vi from 'vitest/config' -import { testConfig } from '../../configs/vitest.config' import ext_pkg from './package.json' -import { icons } from './shared/icons' +import { icons } from './shared/icons.js' const require = module.createRequire(import.meta.url) const cwd = process.cwd() -const BROWSER = process.env.BROWSER -if (BROWSER !== 'chrome' && BROWSER !== 'firefox') { - throw new Error('BROWSER env must be "chrome" or "firefox"') +const browser = process.env['BROWSER'] ?? 'chrome' +if (browser !== 'chrome' && browser !== 'firefox') { + throw new Error('browser arg must be "chrome" or "firefox", was ' + browser) } -const is_chrome = BROWSER === 'chrome' +const is_chrome = browser === 'chrome' -const manifest = crx.defineManifest(env => { +const manifest_version = (() => { // Convert from Semver (example: 0.1.0-beta6) const [major, minor, patch, label = '0'] = ext_pkg.version // can only contain digits, dots, or dash @@ -25,43 +24,45 @@ const manifest = crx.defineManifest(env => { // split into version parts .split(/[.-]/) - return { - manifest_version: 3, - name: `${env.mode === 'production' ? '' : '[DEV] '}Solid Devtools`, - description: 'Chrome Developer Tools extension for debugging SolidJS applications.', - homepage_url: 'https://github.com/thetarnav/solid-devtools', - version: `${major}.${minor}.${patch}.${label}`, - version_name: is_chrome ? ext_pkg.version : undefined, - author: 'Damian Tarnawski', - minimum_chrome_version: '94', - devtools_page: 'devtools/devtools.html', - content_scripts: [ - { - matches: ['*://*/*'], - js: ['content/content.ts'], - run_at: 'document_start', - }, - ], - background: is_chrome - ? { - service_worker: 'background/background.ts', - type: 'module', - } - : { - scripts: ['background/background.ts'], - type: 'module', - }, - permissions: [], - action: { - default_icon: icons.disabled, - default_title: 'Solid Devtools', - default_popup: 'popup/popup.html', + return `${major}.${minor}.${patch}.${label}` +})() + +const manifest = crx.defineManifest(env => ({ + manifest_version: 3, + name: `${env.mode === 'development' ? '[DEV] ' : ''}Solid Devtools`, + description: 'Chrome Developer Tools extension for debugging SolidJS applications.', + homepage_url: 'https://github.com/thetarnav/solid-devtools', + version: manifest_version, + version_name: is_chrome ? ext_pkg.version : undefined, + author: 'Damian Tarnawski', + minimum_chrome_version: '94', + devtools_page: 'devtools/devtools.html', + content_scripts: [ + { + matches: ['*://*/*'], + js: ['content/content.ts'], + run_at: 'document_start', }, - icons: icons.normal, - } -}) + ], + background: is_chrome + ? { + service_worker: 'background/background.ts', + type: 'module', + } + : { + scripts: ['background/background.ts'], + type: 'module', + }, + permissions: [], + action: { + default_icon: icons.disabled, + default_title: 'Solid Devtools', + default_popup: 'popup/popup.html', + }, + icons: icons.normal, +})) -export default vi.defineConfig(config => { +export default vite.defineConfig(config => { const is_dev = config.mode === 'development' const sdt_pkg = JSON.parse( @@ -83,7 +84,7 @@ export default vi.defineConfig(config => { solidPlugin({ dev: false, hot: false }), crx.crx({ manifest: manifest, - browser: BROWSER, + browser: browser, }), { name: 'replace-version', @@ -97,15 +98,15 @@ export default vi.defineConfig(config => { }, ], define: { - 'import.meta.env.BROWSER': JSON.stringify(BROWSER), + 'import.meta.env.BROWSER': JSON.stringify(browser), }, build: { emptyOutDir: !is_dev, + outDir: 'dist' + (is_dev ? '' : `/${browser}`), rollupOptions: { input: { panel: 'index.html' }, }, target: 'esnext', }, - test: testConfig, } }) diff --git a/packages/extension/web_ext_run b/packages/extension/web_ext_run index 35b6695b..02ab0613 100755 --- a/packages/extension/web_ext_run +++ b/packages/extension/web_ext_run @@ -1,7 +1,3 @@ #!/bin/bash -# # Load environment variables -# source .env.local - -# Run the web extension web-ext run -s dist -p dev "$@" diff --git a/patches/solid-js@1.8.5.patch b/patches/solid-js@1.8.5.patch new file mode 100644 index 00000000..ba41851a --- /dev/null +++ b/patches/solid-js@1.8.5.patch @@ -0,0 +1,51 @@ +diff --git a/package.json b/package.json +index 8d8d423a8bf6cf20d79f9e85e11ca6fd4ba58ce4..06007f7e7b1b35568a2ade2027a92810d514c20a 100644 +--- a/package.json ++++ b/package.json +@@ -80,6 +80,7 @@ + "require": "./dist/solid.cjs" + }, + "./dist/*": "./dist/*", ++ "./types/*": "./types/*", + "./jsx-runtime": { + "types": "./types/jsx.d.ts", + "default": "./dist/solid.js" +@@ -124,6 +125,7 @@ + "require": "./store/dist/store.cjs" + }, + "./store/dist/*": "./store/dist/*", ++ "./store/types/*": "./store/types/*", + "./web": { + "worker": { + "types": "./web/types/index.d.ts", +@@ -164,6 +166,7 @@ + "require": "./web/dist/storage.cjs" + }, + "./web/dist/*": "./web/dist/*", ++ "./web/types/*": "./web/types/*", + "./universal": { + "development": { + "types": "./universal/types/index.d.ts", +@@ -175,6 +178,7 @@ + "require": "./universal/dist/universal.cjs" + }, + "./universal/dist/*": "./universal/dist/*", ++ "./universal/types/*": "./universal/types/*", + "./h": { + "types": "./h/types/index.d.ts", + "import": "./h/dist/h.js", +@@ -191,12 +195,14 @@ + "require": "./h/jsx-runtime/dist/jsx.cjs" + }, + "./h/dist/*": "./h/dist/*", ++ "./h/types/*": "./h/types/*", + "./html": { + "types": "./html/types/index.d.ts", + "import": "./html/dist/html.js", + "require": "./html/dist/html.cjs" + }, + "./html/dist/*": "./html/dist/*", ++ "./html/types/*": "./html/types/*", + "./package.json": "./package.json" + }, + "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6d168e6..52d8898e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,11 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + solid-js@1.8.5: + hash: 5wlnmuw2un3mf7o7t467qraqci + path: patches/solid-js@1.8.5.patch + importers: .: @@ -61,13 +66,16 @@ importers: version: 3.2.3(prettier@3.0.3)(typescript@5.2.2) solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) tsup: specifier: ^7.2.0 version: 7.2.0(postcss@8.4.31)(typescript@5.2.2) tsup-preset-solid: specifier: ^2.1.0 version: 2.1.0(esbuild@0.19.5)(solid-js@1.8.5)(tsup@7.2.0) + tsx: + specifier: ^3.14.0 + version: 3.14.0 turbo: specifier: ^1.10.16 version: 1.10.16 @@ -197,7 +205,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) packages/extension: dependencies: @@ -218,7 +226,7 @@ importers: version: link:../main solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) devDependencies: '@crxjs/vite-plugin': specifier: 2.0.0-beta.21 @@ -307,7 +315,7 @@ importers: version: 0.57.1 solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) packages/logger: dependencies: @@ -326,7 +334,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) tsup: specifier: ^7.2.0 version: 7.2.0(postcss@8.4.31)(typescript@5.2.2) @@ -350,7 +358,7 @@ importers: version: link:../shared solid-js: specifier: ^1.8.0 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) vite: specifier: ^2.2.3 || ^3.0.0 || ^4.0.0 version: 4.5.0(@types/node@20.8.10) @@ -415,7 +423,7 @@ importers: version: 5.3.2 solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) tsx: specifier: ^3.14.0 version: 3.14.0 @@ -452,7 +460,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5 + version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) packages: @@ -2641,7 +2649,7 @@ packages: '@solid-primitives/resize-observer': 2.0.22(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/context@0.2.1(solid-js@1.8.5): @@ -2649,7 +2657,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/cursor@0.0.112(solid-js@1.8.5): @@ -2658,7 +2666,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/date@2.0.18(solid-js@1.8.5): @@ -2669,7 +2677,7 @@ packages: '@solid-primitives/memo': 1.3.5(solid-js@1.8.5) '@solid-primitives/timer': 1.3.7(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/event-bus@1.0.8(solid-js@1.8.5): @@ -2678,7 +2686,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/event-listener@2.3.0(solid-js@1.8.5): @@ -2687,7 +2695,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/jsx-tokenizer@1.0.7(solid-js@1.8.5): @@ -2696,7 +2704,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/keyboard@1.2.5(solid-js@1.8.5): @@ -2707,7 +2715,7 @@ packages: '@solid-primitives/event-listener': 2.3.0(solid-js@1.8.5) '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/keyed@1.2.0(solid-js@1.8.5): @@ -2715,7 +2723,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/media@2.2.5(solid-js@1.8.5): @@ -2727,7 +2735,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/memo@1.3.5(solid-js@1.8.5): @@ -2737,7 +2745,7 @@ packages: dependencies: '@solid-primitives/scheduled': 1.4.1(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/mouse@2.0.16(solid-js@1.8.5): @@ -2749,7 +2757,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/platform@0.1.0(solid-js@1.8.5): @@ -2757,7 +2765,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/props@3.1.8(solid-js@1.8.5): @@ -2766,7 +2774,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/range@0.1.15(solid-js@1.8.5): @@ -2775,7 +2783,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/refs@1.0.5(solid-js@1.8.5): @@ -2784,7 +2792,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/resize-observer@2.0.22(solid-js@1.8.5): @@ -2796,7 +2804,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/rootless@1.4.2(solid-js@1.8.5): @@ -2805,7 +2813,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/scheduled@1.4.1(solid-js@1.8.5): @@ -2813,7 +2821,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/static-store@0.0.5(solid-js@1.8.5): @@ -2822,7 +2830,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/styles@0.0.111(solid-js@1.8.5): @@ -2832,7 +2840,7 @@ packages: dependencies: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/timer@1.3.7(solid-js@1.8.5): @@ -2840,7 +2848,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solid-primitives/utils@6.2.1(solid-js@1.8.5): @@ -2848,7 +2856,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /@solidjs/meta@0.29.1(solid-js@1.8.5): @@ -2856,14 +2864,14 @@ packages: peerDependencies: solid-js: '>=1.8.4' dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) /@solidjs/router@0.8.3(solid-js@1.8.5): resolution: {integrity: sha512-oJuqQo10rVTiQYhe1qXIG1NyZIZ2YOwHnlLc8Xx+g/iJhFCJo1saLOIrD/Dkh2fpIaIny5ZMkz1cYYqoTYGJbg==} peerDependencies: solid-js: ^1.5.3 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -4381,7 +4389,7 @@ packages: '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2) babel-preset-solid: 1.8.4(@babel/core@7.23.2) esbuild: 0.17.19 - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) transitivePeerDependencies: - supports-color @@ -4395,7 +4403,7 @@ packages: '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2) babel-preset-solid: 1.8.4(@babel/core@7.23.2) esbuild: 0.19.5 - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) transitivePeerDependencies: - supports-color dev: true @@ -6675,15 +6683,16 @@ packages: peerDependencies: solid-js: ^1.2 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) solid-use: 0.6.2(solid-js@1.8.5) dev: false - /solid-js@1.8.5: + /solid-js@1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci): resolution: {integrity: sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==} dependencies: csstype: 3.1.2 seroval: 0.12.0 + patched: true /solid-refresh@0.5.3(solid-js@1.8.5): resolution: {integrity: sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==} @@ -6693,7 +6702,7 @@ packages: '@babel/generator': 7.23.0 '@babel/helper-module-imports': 7.22.15 '@babel/types': 7.23.0 - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) /solid-start-node@0.3.9(solid-start@0.3.9)(vite@4.5.0): resolution: {integrity: sha512-BWE4g2CqTzq3L2e4TX7kfFC++YiOUqbNFuReLW0gji091qb2sVKqaCBLInfsoLDNAdNdU2Fj659ZZn33b2JqUQ==} @@ -6778,7 +6787,7 @@ packages: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.3 - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) solid-start-node: 0.3.9(solid-start@0.3.9)(vite@4.5.0) terser: 5.24.0 undici: 5.27.0 @@ -6796,7 +6805,7 @@ packages: peerDependencies: solid-js: ^1.5 dependencies: - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) dev: false /source-map-js@1.0.2: @@ -7586,7 +7595,7 @@ packages: '@types/babel__core': 7.20.3 babel-preset-solid: 1.8.4(@babel/core@7.23.2) merge-anything: 5.1.7 - solid-js: 1.8.5 + solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) solid-refresh: 0.5.3(solid-js@1.8.5) vite: 4.5.0(@types/node@20.8.10) vitefu: 0.2.5(vite@4.5.0) diff --git a/tsconfig.json b/tsconfig.json index 3ae37e5d..77497a8e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,12 @@ { - "extends": "./configs/tsconfig.base.json", - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "jsx": "preserve", - "jsxImportSource": "solid-js", - "declarationMap": true, - "declaration": true - }, - "exclude": ["node_modules", "**/dist/**/*"] + "extends": "./configs/tsconfig.base.json", + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "jsx": "preserve", + "jsxImportSource": "solid-js", + "declarationMap": true, + "declaration": true, + "rootDir": "." + }, + "exclude": ["node_modules", "**/dist/**/*"] } From 8764293b8e08a99f878595a8458cf0ba34e0ad40 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Tue, 7 Nov 2023 18:01:40 +0100 Subject: [PATCH 03/16] Try disabling ci cache --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d8679e2e..6b625812 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18 - cache: pnpm + # cache: pnpm - name: Install dependencies run: pnpm install --no-frozen-lockfile --ignore-scripts From b2c53f5f1d17db88579279e4c169c76f2c4feba3 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Tue, 7 Nov 2023 18:59:05 +0100 Subject: [PATCH 04/16] Switch back to node moduleResolution --- .github/workflows/tests.yml | 2 +- configs/tsconfig.base.json | 2 +- package.json | 5 -- patches/solid-js@1.8.5.patch | 51 --------------------- pnpm-lock.yaml | 88 +++++++++++++++++------------------- 5 files changed, 43 insertions(+), 105 deletions(-) delete mode 100644 patches/solid-js@1.8.5.patch diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6b625812..d8679e2e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: 18 - # cache: pnpm + cache: pnpm - name: Install dependencies run: pnpm install --no-frozen-lockfile --ignore-scripts diff --git a/configs/tsconfig.base.json b/configs/tsconfig.base.json index d7a7405c..5752eb17 100644 --- a/configs/tsconfig.base.json +++ b/configs/tsconfig.base.json @@ -3,7 +3,7 @@ "strict": true, "target": "ESNext", "module": "ESNext", - "moduleResolution": "Bundler", + "moduleResolution": "node", "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "esModuleInterop": true, diff --git a/package.json b/package.json index e42073af..8c89c5f5 100644 --- a/package.json +++ b/package.json @@ -60,10 +60,5 @@ "engines": { "node": ">=18", "pnpm": ">=8.6.0" - }, - "pnpm": { - "patchedDependencies": { - "solid-js@1.8.5": "patches/solid-js@1.8.5.patch" - } } } diff --git a/patches/solid-js@1.8.5.patch b/patches/solid-js@1.8.5.patch deleted file mode 100644 index ba41851a..00000000 --- a/patches/solid-js@1.8.5.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/package.json b/package.json -index 8d8d423a8bf6cf20d79f9e85e11ca6fd4ba58ce4..06007f7e7b1b35568a2ade2027a92810d514c20a 100644 ---- a/package.json -+++ b/package.json -@@ -80,6 +80,7 @@ - "require": "./dist/solid.cjs" - }, - "./dist/*": "./dist/*", -+ "./types/*": "./types/*", - "./jsx-runtime": { - "types": "./types/jsx.d.ts", - "default": "./dist/solid.js" -@@ -124,6 +125,7 @@ - "require": "./store/dist/store.cjs" - }, - "./store/dist/*": "./store/dist/*", -+ "./store/types/*": "./store/types/*", - "./web": { - "worker": { - "types": "./web/types/index.d.ts", -@@ -164,6 +166,7 @@ - "require": "./web/dist/storage.cjs" - }, - "./web/dist/*": "./web/dist/*", -+ "./web/types/*": "./web/types/*", - "./universal": { - "development": { - "types": "./universal/types/index.d.ts", -@@ -175,6 +178,7 @@ - "require": "./universal/dist/universal.cjs" - }, - "./universal/dist/*": "./universal/dist/*", -+ "./universal/types/*": "./universal/types/*", - "./h": { - "types": "./h/types/index.d.ts", - "import": "./h/dist/h.js", -@@ -191,12 +195,14 @@ - "require": "./h/jsx-runtime/dist/jsx.cjs" - }, - "./h/dist/*": "./h/dist/*", -+ "./h/types/*": "./h/types/*", - "./html": { - "types": "./html/types/index.d.ts", - "import": "./html/dist/html.js", - "require": "./html/dist/html.cjs" - }, - "./html/dist/*": "./html/dist/*", -+ "./html/types/*": "./html/types/*", - "./package.json": "./package.json" - }, - "keywords": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52d8898e..76c65102 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - solid-js@1.8.5: - hash: 5wlnmuw2un3mf7o7t467qraqci - path: patches/solid-js@1.8.5.patch - importers: .: @@ -66,7 +61,7 @@ importers: version: 3.2.3(prettier@3.0.3)(typescript@5.2.2) solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 tsup: specifier: ^7.2.0 version: 7.2.0(postcss@8.4.31)(typescript@5.2.2) @@ -205,7 +200,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 packages/extension: dependencies: @@ -226,7 +221,7 @@ importers: version: link:../main solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 devDependencies: '@crxjs/vite-plugin': specifier: 2.0.0-beta.21 @@ -315,7 +310,7 @@ importers: version: 0.57.1 solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 packages/logger: dependencies: @@ -334,7 +329,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 tsup: specifier: ^7.2.0 version: 7.2.0(postcss@8.4.31)(typescript@5.2.2) @@ -358,7 +353,7 @@ importers: version: link:../shared solid-js: specifier: ^1.8.0 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 vite: specifier: ^2.2.3 || ^3.0.0 || ^4.0.0 version: 4.5.0(@types/node@20.8.10) @@ -423,7 +418,7 @@ importers: version: 5.3.2 solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 tsx: specifier: ^3.14.0 version: 3.14.0 @@ -460,7 +455,7 @@ importers: devDependencies: solid-js: specifier: ^1.8.5 - version: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + version: 1.8.5 packages: @@ -2649,7 +2644,7 @@ packages: '@solid-primitives/resize-observer': 2.0.22(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/context@0.2.1(solid-js@1.8.5): @@ -2657,7 +2652,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/cursor@0.0.112(solid-js@1.8.5): @@ -2666,7 +2661,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/date@2.0.18(solid-js@1.8.5): @@ -2677,7 +2672,7 @@ packages: '@solid-primitives/memo': 1.3.5(solid-js@1.8.5) '@solid-primitives/timer': 1.3.7(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/event-bus@1.0.8(solid-js@1.8.5): @@ -2686,7 +2681,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/event-listener@2.3.0(solid-js@1.8.5): @@ -2695,7 +2690,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/jsx-tokenizer@1.0.7(solid-js@1.8.5): @@ -2704,7 +2699,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/keyboard@1.2.5(solid-js@1.8.5): @@ -2715,7 +2710,7 @@ packages: '@solid-primitives/event-listener': 2.3.0(solid-js@1.8.5) '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/keyed@1.2.0(solid-js@1.8.5): @@ -2723,7 +2718,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/media@2.2.5(solid-js@1.8.5): @@ -2735,7 +2730,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/memo@1.3.5(solid-js@1.8.5): @@ -2745,7 +2740,7 @@ packages: dependencies: '@solid-primitives/scheduled': 1.4.1(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/mouse@2.0.16(solid-js@1.8.5): @@ -2757,7 +2752,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/platform@0.1.0(solid-js@1.8.5): @@ -2765,7 +2760,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/props@3.1.8(solid-js@1.8.5): @@ -2774,7 +2769,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/range@0.1.15(solid-js@1.8.5): @@ -2783,7 +2778,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/refs@1.0.5(solid-js@1.8.5): @@ -2792,7 +2787,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/resize-observer@2.0.22(solid-js@1.8.5): @@ -2804,7 +2799,7 @@ packages: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/static-store': 0.0.5(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/rootless@1.4.2(solid-js@1.8.5): @@ -2813,7 +2808,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/scheduled@1.4.1(solid-js@1.8.5): @@ -2821,7 +2816,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/static-store@0.0.5(solid-js@1.8.5): @@ -2830,7 +2825,7 @@ packages: solid-js: ^1.6.12 dependencies: '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/styles@0.0.111(solid-js@1.8.5): @@ -2840,7 +2835,7 @@ packages: dependencies: '@solid-primitives/rootless': 1.4.2(solid-js@1.8.5) '@solid-primitives/utils': 6.2.1(solid-js@1.8.5) - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/timer@1.3.7(solid-js@1.8.5): @@ -2848,7 +2843,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solid-primitives/utils@6.2.1(solid-js@1.8.5): @@ -2856,7 +2851,7 @@ packages: peerDependencies: solid-js: ^1.6.12 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /@solidjs/meta@0.29.1(solid-js@1.8.5): @@ -2864,14 +2859,14 @@ packages: peerDependencies: solid-js: '>=1.8.4' dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 /@solidjs/router@0.8.3(solid-js@1.8.5): resolution: {integrity: sha512-oJuqQo10rVTiQYhe1qXIG1NyZIZ2YOwHnlLc8Xx+g/iJhFCJo1saLOIrD/Dkh2fpIaIny5ZMkz1cYYqoTYGJbg==} peerDependencies: solid-js: ^1.5.3 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -4389,7 +4384,7 @@ packages: '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2) babel-preset-solid: 1.8.4(@babel/core@7.23.2) esbuild: 0.17.19 - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 transitivePeerDependencies: - supports-color @@ -4403,7 +4398,7 @@ packages: '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2) babel-preset-solid: 1.8.4(@babel/core@7.23.2) esbuild: 0.19.5 - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 transitivePeerDependencies: - supports-color dev: true @@ -6683,16 +6678,15 @@ packages: peerDependencies: solid-js: ^1.2 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 solid-use: 0.6.2(solid-js@1.8.5) dev: false - /solid-js@1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci): + /solid-js@1.8.5: resolution: {integrity: sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==} dependencies: csstype: 3.1.2 seroval: 0.12.0 - patched: true /solid-refresh@0.5.3(solid-js@1.8.5): resolution: {integrity: sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==} @@ -6702,7 +6696,7 @@ packages: '@babel/generator': 7.23.0 '@babel/helper-module-imports': 7.22.15 '@babel/types': 7.23.0 - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 /solid-start-node@0.3.9(solid-start@0.3.9)(vite@4.5.0): resolution: {integrity: sha512-BWE4g2CqTzq3L2e4TX7kfFC++YiOUqbNFuReLW0gji091qb2sVKqaCBLInfsoLDNAdNdU2Fj659ZZn33b2JqUQ==} @@ -6787,7 +6781,7 @@ packages: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.3 - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 solid-start-node: 0.3.9(solid-start@0.3.9)(vite@4.5.0) terser: 5.24.0 undici: 5.27.0 @@ -6805,7 +6799,7 @@ packages: peerDependencies: solid-js: ^1.5 dependencies: - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 dev: false /source-map-js@1.0.2: @@ -7595,7 +7589,7 @@ packages: '@types/babel__core': 7.20.3 babel-preset-solid: 1.8.4(@babel/core@7.23.2) merge-anything: 5.1.7 - solid-js: 1.8.5(patch_hash=5wlnmuw2un3mf7o7t467qraqci) + solid-js: 1.8.5 solid-refresh: 0.5.3(solid-js@1.8.5) vite: 4.5.0(@types/node@20.8.10) vitefu: 0.2.5(vite@4.5.0) From b26a6cbd8bb8438bfdfa9f394315773e4f7ccb18 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Thu, 9 Nov 2023 08:43:51 +0100 Subject: [PATCH 05/16] Move theme to own package --- package.json | 2 +- packages/frontend/package.json | 1 + packages/frontend/src/ui/index.ts | 2 +- packages/frontend/src/ui/styles.tsx | 2 +- packages/theme/package.json | 46 ++++++++++++++++++++++++++++ {configs => packages/theme}/theme.ts | 0 packages/theme/tsconfig.json | 4 +++ pnpm-lock.yaml | 22 +++++++++++-- uno.config.ts | 8 ++--- 9 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 packages/theme/package.json rename {configs => packages/theme}/theme.ts (100%) create mode 100644 packages/theme/tsconfig.json diff --git a/package.json b/package.json index 8c89c5f5..6c718dcb 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,8 @@ "publish": "pnpm run build && pnpm run changeset publish" }, "devDependencies": { + "@solid-devtools/theme": "file:packages/theme", "@changesets/cli": "^2.26.2", - "@nothing-but/utils": "~0.11.1", "@playwright/test": "^1.39.0", "@total-typescript/ts-reset": "^0.5.1", "@types/node": "^20.8.10", diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 4ddaf58a..c432b9f9 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -37,6 +37,7 @@ "test:types": "tsc --noEmit" }, "dependencies": { + "@solid-devtools/theme": "workspace:^", "@solid-devtools/debugger": "workspace:^", "@solid-devtools/shared": "workspace:^", "@solid-primitives/context": "^0.2.1", diff --git a/packages/frontend/src/ui/index.ts b/packages/frontend/src/ui/index.ts index d4bb5d9e..e38dc83a 100644 --- a/packages/frontend/src/ui/index.ts +++ b/packages/frontend/src/ui/index.ts @@ -1,4 +1,4 @@ -export * as theme from '../../../../configs/theme' +export * as theme from '@solid-devtools/theme' export * as styles from './styles' export * from './components/badge' diff --git a/packages/frontend/src/ui/styles.tsx b/packages/frontend/src/ui/styles.tsx index 494dc71d..72d5b8fc 100644 --- a/packages/frontend/src/ui/styles.tsx +++ b/packages/frontend/src/ui/styles.tsx @@ -1,7 +1,7 @@ import { value_node_styles } from '@/modules/inspector/value-node' import { owner_path_styles } from '@/modules/structure' import { theme } from '@/ui' -import { make_var_styles } from '../../../../configs/theme' +import { make_var_styles } from '@solid-devtools/theme' import { highlight_styles } from './components/highlight' import { custom_scrollbar_styles } from './components/scrollable' import { toggle_button_styles } from './components/toggle-button' diff --git a/packages/theme/package.json b/packages/theme/package.json new file mode 100644 index 00000000..818f5b0d --- /dev/null +++ b/packages/theme/package.json @@ -0,0 +1,46 @@ +{ + "name": "@solid-devtools/theme", + "version": "0.0.0", + "license": "MIT", + "author": "Damian Tarnawski ", + "contributors": [], + "homepage": "https://github.com/thetarnav/solid-devtools/tree/main/packages/theme#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/thetarnav/solid-devtools.git" + }, + "bugs": { + "url": "https://github.com/thetarnav/solid-devtools/issues" + }, + "private": false, + "publishConfig": { + "access": "public" + }, + "sideEffects": false, + "files": [ + "./theme.ts" + ], + "type": "module", + "module": "./theme.ts", + "types": "./theme.ts", + "exports": { + "types": "./theme.ts", + "import": "./theme.ts" + }, + "scripts": { + "dev": "echo \"No dev script\"", + "build": "echo \"No build script\"", + "test:unit": "echo \"No test:unit script\"", + "test:types": "tsc --noEmit" + }, + "dependencies": { + "@nothing-but/utils": "~0.11.1" + }, + "packageManager": "pnpm@8.9.0", + "keywords": [ + "solid", + "devtools", + "css", + "unocss" + ] +} diff --git a/configs/theme.ts b/packages/theme/theme.ts similarity index 100% rename from configs/theme.ts rename to packages/theme/theme.ts diff --git a/packages/theme/tsconfig.json b/packages/theme/tsconfig.json new file mode 100644 index 00000000..1cf62f72 --- /dev/null +++ b/packages/theme/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["./theme.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76c65102..1a8d4ae1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,12 +11,12 @@ importers: '@changesets/cli': specifier: ^2.26.2 version: 2.26.2 - '@nothing-but/utils': - specifier: ~0.11.1 - version: 0.11.1 '@playwright/test': specifier: ^1.39.0 version: 1.39.0 + '@solid-devtools/theme': + specifier: file:packages/theme + version: file:packages/theme '@total-typescript/ts-reset': specifier: ^0.5.1 version: 0.5.1 @@ -244,6 +244,9 @@ importers: '@solid-devtools/shared': specifier: workspace:^ version: link:../shared + '@solid-devtools/theme': + specifier: workspace:^ + version: link:../theme '@solid-primitives/context': specifier: ^0.2.1 version: 0.2.1(solid-js@1.8.5) @@ -457,6 +460,12 @@ importers: specifier: ^1.8.5 version: 1.8.5 + packages/theme: + dependencies: + '@nothing-but/utils': + specifier: ~0.11.1 + version: 0.11.1 + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -7994,3 +8003,10 @@ packages: compress-commons: 5.0.1 readable-stream: 3.6.2 dev: true + + file:packages/theme: + resolution: {directory: packages/theme, type: directory} + name: '@solid-devtools/theme' + dependencies: + '@nothing-but/utils': 0.11.1 + dev: true diff --git a/uno.config.ts b/uno.config.ts index 51d11ec8..0e93e730 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -1,8 +1,8 @@ -import { defineConfig, presetUno } from 'unocss' -import * as theme from './configs/theme' +import * as theme from '@solid-devtools/theme' +import * as uno from 'unocss' -export default defineConfig({ - presets: [presetUno({ dark: 'media' })], +export default uno.defineConfig({ + presets: [uno.presetUno({ dark: 'media' })], theme: { colors: theme.colors, From 4d316a50f3175fa40adb40ce3bbc6a8239a5aeea Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Thu, 9 Nov 2023 08:52:54 +0100 Subject: [PATCH 06/16] Add missing @nothing-but/utils dependency to frontend package.json --- packages/frontend/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/frontend/package.json b/packages/frontend/package.json index c432b9f9..7df86a0a 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -37,6 +37,7 @@ "test:types": "tsc --noEmit" }, "dependencies": { + "@nothing-but/utils": "~0.11.1", "@solid-devtools/theme": "workspace:^", "@solid-devtools/debugger": "workspace:^", "@solid-devtools/shared": "workspace:^", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a8d4ae1..f1333210 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -238,6 +238,9 @@ importers: packages/frontend: dependencies: + '@nothing-but/utils': + specifier: ~0.11.1 + version: 0.11.1 '@solid-devtools/debugger': specifier: workspace:^ version: link:../debugger From 32898c898a3a18d65da766086e7e0d842ba54c57 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Thu, 9 Nov 2023 09:22:38 +0100 Subject: [PATCH 07/16] Fix typechecks and add missing deps --- packages/extension/package.json | 2 +- packages/extension/tsconfig.build.json | 16 ---------------- packages/extension/tsconfig.json | 3 +-- packages/overlay/package.json | 1 + pnpm-lock.yaml | 3 +++ 5 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 packages/extension/tsconfig.build.json diff --git a/packages/extension/package.json b/packages/extension/package.json index 5478ac04..1a2847f7 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -11,7 +11,7 @@ "build:firefox": "tsx build.ts --browser=firefox", "build": "tsx build.ts --browser=firefox --browser=chrome", "clean": "rimraf dist dist.zip", - "test:unit": "vitest", + "test:unit": "echo \"No unit tests\"", "test:types": "tsc --noEmit --paths null" }, "devDependencies": { diff --git a/packages/extension/tsconfig.build.json b/packages/extension/tsconfig.build.json deleted file mode 100644 index 75a03120..00000000 --- a/packages/extension/tsconfig.build.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "composite": true, - "types": ["@types/node"], - "module": "NodeNext", - "moduleResolution": "NodeNext" - }, - "include": [ - "./build.ts", - "./vite.config.ts", - "./package.json", - "../../configs/vitest.config.ts", - "./shared/**/*" - ] -} diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index a6f98ea8..b9424c4d 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -14,6 +14,5 @@ "shared/**/*", "popup/**/*", "env.d.ts" - ], - "references": [{ "path": "./tsconfig.build.json" }] + ] } diff --git a/packages/overlay/package.json b/packages/overlay/package.json index 47d488ed..d0df366a 100644 --- a/packages/overlay/package.json +++ b/packages/overlay/package.json @@ -47,6 +47,7 @@ "test:types": "tsc --noEmit --paths null" }, "dependencies": { + "@nothing-but/utils": "~0.11.1", "@solid-devtools/debugger": "workspace:^", "@solid-devtools/frontend": "workspace:^", "@solid-devtools/shared": "workspace:^", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f1333210..61a2c023 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -391,6 +391,9 @@ importers: packages/overlay: dependencies: + '@nothing-but/utils': + specifier: ~0.11.1 + version: 0.11.1 '@solid-devtools/debugger': specifier: workspace:^ version: link:../debugger From eeea4b6ee117eab46877137c3c1fe31bbcfc241e Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Fri, 10 Nov 2023 13:27:06 +0100 Subject: [PATCH 08/16] Add a comment for the collapring algorytm --- .../src/modules/structure/structure-tree.tsx | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/frontend/src/modules/structure/structure-tree.tsx b/packages/frontend/src/modules/structure/structure-tree.tsx index 5e5af36f..767696db 100644 --- a/packages/frontend/src/modules/structure/structure-tree.tsx +++ b/packages/frontend/src/modules/structure/structure-tree.tsx @@ -253,20 +253,26 @@ const DisplayStructureTree: Component = () => { lastInspectedIndex, ) - const nodeList = structure.state().nodeList - const collapsedList: Structure.Node[] = [] + const all_nodes_list = structure.state().nodeList + const collapsed_list: Structure.Node[] = [] const set = collapsed() - let skip = 0 - for (const node of nodeList) { - const skipped = skip > 0 - if (skipped) skip-- - else collapsedList.push(node) + /* + Go over the list of all nodes + skip the ones that are in collapsed set + by increasing the skip counter by the number of children + */ + let skip_n = 0 + for (const node of all_nodes_list) { + const is_skipped = skip_n > 0 - if (skipped || set.has(node)) skip += node.children.length + if (is_skipped) skip_n-- + else collapsed_list.push(node) + + if (is_skipped || set.has(node)) skip_n += node.children.length } - return collapsedList + return collapsed_list }) const virtual = createMemo<{ From abcd6fcf549be1b10de1e7d5c7752213cda74a4d Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Fri, 10 Nov 2023 14:26:27 +0100 Subject: [PATCH 09/16] Fix chrome ext build --- .gitignore | 6 ++++-- examples/sandbox/vite.config.ts | 8 ++++---- packages/extension/build.ts | 5 ++++- packages/extension/devtools/devtools.ts | 26 +++++++++++++++---------- packages/extension/shared/bridge.ts | 4 ++-- packages/extension/vite.config.ts | 3 ++- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 057f7915..aa842b7b 100644 --- a/.gitignore +++ b/.gitignore @@ -32,10 +32,12 @@ tsup.config.bundled*.* .DS_Store Thumbs.db -# chrome extension private key file +# chrome extension +# private key file *.pem - +packages/extension/package packages/extension/dist.zip + **/vite.config.ts.timestamp-*.* /test-results/ diff --git a/examples/sandbox/vite.config.ts b/examples/sandbox/vite.config.ts index 95f4be9f..b78b2e94 100644 --- a/examples/sandbox/vite.config.ts +++ b/examples/sandbox/vite.config.ts @@ -5,10 +5,10 @@ import { defineConfig } from 'vite' import Inspect from 'vite-plugin-inspect' import solid from 'vite-plugin-solid' -const usingExtension = process.env['EXT'] === 'true' || process.env['EXT'] === '1' +const is_ext = process.env['EXT'] === 'true' || process.env['EXT'] === '1' export default defineConfig(mode => { - const isBuild = mode.command === 'build' + const is_build = mode.command === 'build' return { plugins: [ @@ -27,8 +27,8 @@ export default defineConfig(mode => { Inspect(), ], define: { - 'process.env.EXT': JSON.stringify(usingExtension), - 'process.env.BUILD': JSON.stringify(isBuild), + 'process.env.EXT': JSON.stringify(is_ext), + 'process.env.BUILD': JSON.stringify(is_build), }, mode: 'development', build: { diff --git a/packages/extension/build.ts b/packages/extension/build.ts index 6edb13de..5af0006c 100644 --- a/packages/extension/build.ts +++ b/packages/extension/build.ts @@ -33,9 +33,12 @@ if (fs.existsSync(dist)) fs.rmSync(dist, { recursive: true }) /* Build and zip */ +const package_dist = `${cwd}/package` +if (!fs.existsSync(package_dist)) fs.mkdirSync(package_dist) + for (const browser of browsers) { process.env['BROWSER'] = browser await vite.build() - child_process.exec(`zip -r ${dist}/${browser}.zip ${dist}/*`) + child_process.exec(`zip -r ${package_dist}/${browser}.zip ${dist}/*`) } diff --git a/packages/extension/devtools/devtools.ts b/packages/extension/devtools/devtools.ts index b095ed64..93b893bd 100644 --- a/packages/extension/devtools/devtools.ts +++ b/packages/extension/devtools/devtools.ts @@ -35,14 +35,20 @@ once(fromBackground, 'Versions', async () => { const createPanel = () => new Promise((resolve, reject) => { - chrome.devtools.panels.create( - 'Solid', - /* firefox requires absolute paths */ - '/' + icons.disabled[32], - '/index.html', - newPanel => { - if (chrome.runtime.lastError) reject(chrome.runtime.lastError) - else resolve(newPanel) - }, - ) + const onCreate = (newPanel: chrome.devtools.panels.ExtensionPanel) => { + if (chrome.runtime.lastError) reject(chrome.runtime.lastError) + else resolve(newPanel) + } + + if (import.meta.env.BROWSER === 'firefox') { + chrome.devtools.panels.create( + 'Solid', + /* firefox requires absolute paths */ + '/' + icons.disabled[32], + '/index.html', + onCreate, + ) + } else { + chrome.devtools.panels.create('Solid', icons.disabled[32], 'index.html', onCreate) + } }) diff --git a/packages/extension/shared/bridge.ts b/packages/extension/shared/bridge.ts index 668a75ed..95d5b0a3 100644 --- a/packages/extension/shared/bridge.ts +++ b/packages/extension/shared/bridge.ts @@ -26,8 +26,8 @@ export type DetectEvent = { state: DetectionState } -// const LOG_MESSAGES = import.meta.env.DEV -const LOG_MESSAGES: boolean = true +const LOG_MESSAGES = import.meta.env.DEV +// const LOG_MESSAGES: boolean = true export function createPortMessanger< IM extends { [K in string]: any } = {}, diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index f54b2d2e..5e66a7f3 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -101,8 +101,9 @@ export default vite.defineConfig(config => { 'import.meta.env.BROWSER': JSON.stringify(browser), }, build: { + minify: false, emptyOutDir: !is_dev, - outDir: 'dist' + (is_dev ? '' : `/${browser}`), + outDir: 'dist', rollupOptions: { input: { panel: 'index.html' }, }, From 7ce57dd7e3fffd597b54eaf9cf56aa522b9c0558 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Fri, 10 Nov 2023 15:35:16 +0100 Subject: [PATCH 10/16] Fix archiving of extension --- packages/extension/build.ts | 2 +- packages/extension/vite.config.ts | 77 ++++++++++++++++++------------- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/packages/extension/build.ts b/packages/extension/build.ts index 5af0006c..fb5f54bf 100644 --- a/packages/extension/build.ts +++ b/packages/extension/build.ts @@ -40,5 +40,5 @@ for (const browser of browsers) { process.env['BROWSER'] = browser await vite.build() - child_process.exec(`zip -r ${package_dist}/${browser}.zip ${dist}/*`) + child_process.exec(`cd ./dist && zip -r ../package/${browser}.zip .`) } diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index 5e66a7f3..b25c8785 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -27,40 +27,51 @@ const manifest_version = (() => { return `${major}.${minor}.${patch}.${label}` })() -const manifest = crx.defineManifest(env => ({ - manifest_version: 3, - name: `${env.mode === 'development' ? '[DEV] ' : ''}Solid Devtools`, - description: 'Chrome Developer Tools extension for debugging SolidJS applications.', - homepage_url: 'https://github.com/thetarnav/solid-devtools', - version: manifest_version, - version_name: is_chrome ? ext_pkg.version : undefined, - author: 'Damian Tarnawski', - minimum_chrome_version: '94', - devtools_page: 'devtools/devtools.html', - content_scripts: [ - { - matches: ['*://*/*'], - js: ['content/content.ts'], - run_at: 'document_start', +const manifest = crx.defineManifest(env => { + type Manifest = Exclude | ((...a: any[]) => any)> & { + browser_specific_settings?: Record> + } + + const manifest: Manifest = { + manifest_version: 3, + name: `${env.mode === 'development' ? '[DEV] ' : ''}Solid Devtools`, + description: 'Chrome Developer Tools extension for debugging SolidJS applications.', + homepage_url: 'https://github.com/thetarnav/solid-devtools', + version: manifest_version, + version_name: is_chrome ? ext_pkg.version : undefined, + browser_specific_settings: is_chrome + ? undefined + : { gecko: { id: '{abfd162e-9948-403a-a75c-6e61184e1d47}' } }, + author: 'Damian Tarnawski', + minimum_chrome_version: '94', + devtools_page: 'devtools/devtools.html', + content_scripts: [ + { + matches: ['*://*/*'], + js: ['content/content.ts'], + run_at: 'document_start', + }, + ], + background: is_chrome + ? { + service_worker: 'background/background.ts', + type: 'module', + } + : { + scripts: ['background/background.ts'], + type: 'module', + }, + permissions: [], + action: { + default_icon: icons.disabled, + default_title: 'Solid Devtools', + default_popup: 'popup/popup.html', }, - ], - background: is_chrome - ? { - service_worker: 'background/background.ts', - type: 'module', - } - : { - scripts: ['background/background.ts'], - type: 'module', - }, - permissions: [], - action: { - default_icon: icons.disabled, - default_title: 'Solid Devtools', - default_popup: 'popup/popup.html', - }, - icons: icons.normal, -})) + icons: icons.normal, + } + + return manifest as any +}) export default vite.defineConfig(config => { const is_dev = config.mode === 'development' From 8b6c2dae0fdb91b7df06db736cb08781d5831a9c Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Mon, 13 Nov 2023 15:26:53 +0100 Subject: [PATCH 11/16] Fix panel not loading data immediately on chrome --- packages/extension/background/background.ts | 129 ++++++++++---------- packages/extension/src/panel.tsx | 3 - packages/extension/vite.config.ts | 3 + 3 files changed, 70 insertions(+), 65 deletions(-) diff --git a/packages/extension/background/background.ts b/packages/extension/background/background.ts index 53b1e499..b3223234 100644 --- a/packages/extension/background/background.ts +++ b/packages/extension/background/background.ts @@ -111,62 +111,6 @@ class TabData { const tabDataMap = new Map() -// for reconnecting after page reload -let lastDisconnectedTabData: TabData | undefined -let lastDisconnectedTabId: number | undefined - -function handleContentScriptConnection(port: chrome.runtime.Port, tabId: number) { - const { onPortMessage: fromContent, postPortMessage: toContent } = - bridge.createPortMessanger(port) - - let forwardHandler: ((message: bridge.ForwardPayload) => void) | undefined - let data: TabData - - const config: TabDataConfig = { - toContent, - fromContent, - forwardToDevtools: fn => (forwardHandler = fn), - forwardToClient: message => port.postMessage(message), - } - - // Page was reloaded, so we need to reinitialize the tab data - if (tabId === lastDisconnectedTabId) { - data = lastDisconnectedTabData! - data.reconnected(config) - } - // A fresh page - else { - data = new TabData(tabId, config) - } - - lastDisconnectedTabId = undefined - lastDisconnectedTabId = undefined - tabDataMap.set(tabId, data) - - // "Versions" from content-script - bridge.once(fromContent, 'Versions', v => { - data.setVersions(v) - - // Change the popup icon to indicate that Solid is present on the page - chrome.action.setIcon({ tabId, path: icons.normal }) - }) - - // "DetectSolid" from content-script (realWorld) - fromContent('Detected', state => data.detected(state)) - - port.onDisconnect.addListener(() => { - data.disconnected() - tabDataMap.delete(tabId) - lastDisconnectedTabData = data - lastDisconnectedTabId = tabId - }) - - port.onMessage.addListener((message: bridge.ForwardPayload | any) => { - // HANDLE FORWARDED MESSAGES FROM CLIENT (content-script) - forwardHandler && bridge.isForwardMessage(message) && forwardHandler(message) - }) -} - const ACTIVE_TAB_QUERY = { active: true, currentWindow: true } as const const queryActiveTabId = async (): Promise => { try { @@ -199,11 +143,68 @@ const withTabData = async ( callback(data, bridge.createPortMessanger(port)) } +// for reconnecting after page reload +let lastDisconnectedTabData: TabData | undefined +let lastDisconnectedTabId: number | undefined + chrome.runtime.onConnect.addListener(port => { switch (port.name) { - case bridge.ConnectionName.Content: - port.sender?.tab?.id && handleContentScriptConnection(port, port.sender.tab.id) + case bridge.ConnectionName.Content: { + const tab_id = port.sender?.tab?.id + if (typeof tab_id !== 'number') break + + const { onPortMessage: fromContent, postPortMessage: toContent } = + bridge.createPortMessanger(port) + + let forwardHandler: ((message: bridge.ForwardPayload) => void) | undefined + let data: TabData + + const config: TabDataConfig = { + toContent, + fromContent, + forwardToDevtools: fn => (forwardHandler = fn), + forwardToClient: message => port.postMessage(message), + } + + // Page was reloaded, so we need to reinitialize the tab data + if (tab_id === lastDisconnectedTabId) { + data = lastDisconnectedTabData! + data.reconnected(config) + } + // A fresh page + else { + data = new TabData(tab_id, config) + } + + lastDisconnectedTabId = undefined + lastDisconnectedTabId = undefined + tabDataMap.set(tab_id, data) + + // "Versions" from content-script + bridge.once(fromContent, 'Versions', v => { + data.setVersions(v) + + // Change the popup icon to indicate that Solid is present on the page + chrome.action.setIcon({ tabId: tab_id, path: icons.normal }) + }) + + // "DetectSolid" from content-script (realWorld) + fromContent('Detected', state => data.detected(state)) + + port.onDisconnect.addListener(() => { + data.disconnected() + tabDataMap.delete(tab_id) + lastDisconnectedTabData = data + lastDisconnectedTabId = tab_id + }) + + port.onMessage.addListener((message: bridge.ForwardPayload | any) => { + // HANDLE FORWARDED MESSAGES FROM CLIENT (content-script) + forwardHandler && bridge.isForwardMessage(message) && forwardHandler(message) + }) + break + } case bridge.ConnectionName.Devtools: withTabData(port, (data, { postPortMessage: toDevtools }) => { @@ -228,11 +229,15 @@ chrome.runtime.onConnect.addListener(port => { fromContent('ResetPanel', () => toPanel('ResetPanel')) data.onContentScriptDisconnect(() => toPanel('ResetPanel')) - // FORWARD MESSAGES FROM and TO CLIENT - data.forwardToDevtools(message => { - // console.log('Forwarding to panel', message) - port.postMessage(message) + /* Force debugger to send state when panel conects */ + data.forwardToClient({ + name: 'ResetState', + details: undefined, + forwarding: true, // TODO: this shouldn't be a "forward", but not sure how to typesafe send a post to debugger from here }) + + // FORWARD MESSAGES FROM and TO CLIENT + data.forwardToDevtools(message => port.postMessage(message)) onForwardMessage(message => data.forwardToClient(message)) }) }) diff --git a/packages/extension/src/panel.tsx b/packages/extension/src/panel.tsx index eb5ef0c4..807d426d 100644 --- a/packages/extension/src/panel.tsx +++ b/packages/extension/src/panel.tsx @@ -16,9 +16,6 @@ const { postPortMessage: toBackground, onPortMessage: fromBackground } = createP Debugger.InputChannels >(port) -// Force debugger to send state on connect -toBackground('ResetState') - function App() { const [versions, setVersions] = createSignal({ solid: '', diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index b25c8785..11e6a01b 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -120,5 +120,8 @@ export default vite.defineConfig(config => { }, target: 'esnext', }, + optimizeDeps: { + exclude: ['@solid-devtools/debugger'], + }, } }) From 53c8eacf00c526765d0a24ccee40bae2596c6fb9 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Mon, 13 Nov 2023 15:29:40 +0100 Subject: [PATCH 12/16] Remove previous script for zipping the ext --- packages/extension/package.json | 5 +---- packages/extension/scripts/zip.cjs | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 packages/extension/scripts/zip.cjs diff --git a/packages/extension/package.json b/packages/extension/package.json index 1a2847f7..66da4071 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -10,15 +10,12 @@ "build:chrome": "tsx build.ts --browser=chrome", "build:firefox": "tsx build.ts --browser=firefox", "build": "tsx build.ts --browser=firefox --browser=chrome", - "clean": "rimraf dist dist.zip", "test:unit": "echo \"No unit tests\"", "test:types": "tsc --noEmit --paths null" }, "devDependencies": { "@crxjs/vite-plugin": "2.0.0-beta.21", - "@types/chrome": "^0.0.248", - "rimraf": "^5.0.5", - "zip-a-folder": "^3.1.3" + "@types/chrome": "^0.0.248" }, "dependencies": { "@solid-devtools/debugger": "workspace:^", diff --git a/packages/extension/scripts/zip.cjs b/packages/extension/scripts/zip.cjs deleted file mode 100644 index 179b4b4c..00000000 --- a/packages/extension/scripts/zip.cjs +++ /dev/null @@ -1 +0,0 @@ -require('zip-a-folder').zip('dist', 'dist.zip') From 738927681969372027a3bbf9704d1495de886171 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Tue, 14 Nov 2023 13:51:37 +0100 Subject: [PATCH 13/16] Use the correct output dir in e2e tests --- .gitignore | 5 +---- CONTRIBUTING.md | 2 +- e2e/fixtures.ts | 2 +- playwright.config.ts => e2e/playwright.config.ts | 2 +- package.json | 2 +- packages/extension/build.ts | 15 ++++++--------- packages/extension/vite.config.ts | 2 +- packages/extension/web_ext_run | 2 +- 8 files changed, 13 insertions(+), 19 deletions(-) rename playwright.config.ts => e2e/playwright.config.ts (98%) diff --git a/.gitignore b/.gitignore index aa842b7b..e8015bc7 100644 --- a/.gitignore +++ b/.gitignore @@ -32,11 +32,8 @@ tsup.config.bundled*.* .DS_Store Thumbs.db -# chrome extension -# private key file +# chrome extension private key file *.pem -packages/extension/package -packages/extension/dist.zip **/vite.config.ts.timestamp-*.* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c6274134..0298fba7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -74,7 +74,7 @@ This project uses [changesets](https://github.com/changesets/changesets) to mana ![image](https://user-images.githubusercontent.com/24491503/191084587-e53b1743-39ac-40e0-b3a6-cf6bcaca9d5d.png) -4. Click on the "Load unpacked" button and select the `packages/extension/dist` folder +4. Click on the "Load unpacked" button and select the `packages/extension/dist/chrome` directory (or `packages/extension/dist/firefox` if you are using firefox) ![image](https://user-images.githubusercontent.com/24491503/191084770-84577eb0-1c90-44a7-afa2-a2d03f728a66.png) diff --git a/e2e/fixtures.ts b/e2e/fixtures.ts index 4d35715a..9592d1f1 100644 --- a/e2e/fixtures.ts +++ b/e2e/fixtures.ts @@ -18,7 +18,7 @@ export const test = pw.test.extend<{ return } - const path_to_extension = path.resolve(__dirname, '../packages/extension/dist/') + const path_to_extension = path.resolve(__dirname, '../packages/extension/dist/chrome') const context = await pw.chromium.launchPersistentContext('', { args: [ '--headless=new', diff --git a/playwright.config.ts b/e2e/playwright.config.ts similarity index 98% rename from playwright.config.ts rename to e2e/playwright.config.ts index 20c6f64f..8d8d17ac 100644 --- a/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -6,7 +6,7 @@ const is_ci = !!process.env['CI'] * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - testDir: './e2e', + testDir: '.', /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ diff --git a/package.json b/package.json index 6c718dcb..e0203800 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "test:unit": "turbo run test --filter=./packages/*", "test:types": "turbo run test:types --filter=./packages/*", "test:lint": "eslint --ignore-path .gitignore --max-warnings 0 packages/**/*.{js,ts,tsx,jsx} --rule \"@typescript-eslint/no-unnecessary-type-assertion: off\"", - "test:e2e": "cross-env PW_CHROMIUM_ATTACH_TO_OTHER=1 playwright test -c playwright.config.ts", + "test:e2e": "cross-env PW_CHROMIUM_ATTACH_TO_OTHER=1 playwright test -c e2e/playwright.config.ts", "----------------------UTILS----------------------": "", "build-test:packages": "turbo run build test:unit test:types --filter=./packages/*", "build-test": "pnpm run build-test:packages && pnpm run test:lint && pnpm run test:e2e", diff --git a/packages/extension/build.ts b/packages/extension/build.ts index fb5f54bf..cd672ea1 100644 --- a/packages/extension/build.ts +++ b/packages/extension/build.ts @@ -24,21 +24,18 @@ if (browsers.length === 0) { throw new Error('No browsers specified') } -/* -Clear dist folder -*/ -const dist = `${cwd}/dist` -if (fs.existsSync(dist)) fs.rmSync(dist, { recursive: true }) - /* Build and zip */ -const package_dist = `${cwd}/package` -if (!fs.existsSync(package_dist)) fs.mkdirSync(package_dist) +const dist = `${cwd}/dist` for (const browser of browsers) { + const dist_dir = `${dist}/${browser}` + const dist_zip = `${dist}/${browser}.zip` + process.env['BROWSER'] = browser await vite.build() - child_process.exec(`cd ./dist && zip -r ../package/${browser}.zip .`) + if (fs.existsSync(dist_zip)) fs.rmSync(dist_zip) + child_process.exec(`cd ${dist_dir} && zip -r ${dist_zip} .`) } diff --git a/packages/extension/vite.config.ts b/packages/extension/vite.config.ts index 11e6a01b..bb0ac93b 100644 --- a/packages/extension/vite.config.ts +++ b/packages/extension/vite.config.ts @@ -114,7 +114,7 @@ export default vite.defineConfig(config => { build: { minify: false, emptyOutDir: !is_dev, - outDir: 'dist', + outDir: 'dist/' + browser, rollupOptions: { input: { panel: 'index.html' }, }, diff --git a/packages/extension/web_ext_run b/packages/extension/web_ext_run index 02ab0613..ed0eec9c 100755 --- a/packages/extension/web_ext_run +++ b/packages/extension/web_ext_run @@ -1,3 +1,3 @@ #!/bin/bash -web-ext run -s dist -p dev "$@" +web-ext run -s dist/firefox -p dev "$@" From 2ea68771bee491088afd9a8922b40ced4aa4c627 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Wed, 15 Nov 2023 21:44:48 +0100 Subject: [PATCH 14/16] Rename src to panel dir --- packages/extension/index.html | 2 +- packages/extension/{src => panel}/panel.tsx | 0 packages/extension/tsconfig.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename packages/extension/{src => panel}/panel.tsx (100%) diff --git a/packages/extension/index.html b/packages/extension/index.html index 9d697a74..8eaf6712 100644 --- a/packages/extension/index.html +++ b/packages/extension/index.html @@ -11,6 +11,6 @@
- + diff --git a/packages/extension/src/panel.tsx b/packages/extension/panel/panel.tsx similarity index 100% rename from packages/extension/src/panel.tsx rename to packages/extension/panel/panel.tsx diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index b9424c4d..32779884 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -7,7 +7,7 @@ } }, "include": [ - "src/**/*", + "panel/**/*", "background/**/*", "content/**/*", "devtools/**/*", From 6393f7734ec659d42acd37194ea01d5983fbb1f6 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Thu, 16 Nov 2023 14:28:20 +0100 Subject: [PATCH 15/16] Cleanup background.ts and hopefully fix e2e tests --- packages/extension/background/background.ts | 193 ++++++++++++-------- 1 file changed, 119 insertions(+), 74 deletions(-) diff --git a/packages/extension/background/background.ts b/packages/extension/background/background.ts index b3223234..abf9d0fd 100644 --- a/packages/extension/background/background.ts +++ b/packages/extension/background/background.ts @@ -19,6 +19,8 @@ type TabDataConfig = { forwardToClient: TabData['forwardToClient'] } +type PostMessanger = { post: bridge.PostMessageFn; on: bridge.OnMessageFn } + class EventBus extends Set<(payload: T) => void> { emit(..._: void extends T ? [payload?: T] : [payload: T]): void emit(payload?: any) { @@ -49,12 +51,16 @@ class TabData { this.forwardToClient = config.forwardToClient } - onContentScriptConnect( - fn: (toContent: bridge.PostMessageFn, fromContent: bridge.OnMessageFn) => void, - ): VoidFunction { - if (this.connected) fn(this.toContent.bind(this), this.fromContent.bind(this)) - this.connectListeners.add(fn) - return () => this.connectListeners.delete(fn) + untilContentScriptConnect(): Promise { + return new Promise(resolve => { + if (this.connected) { + resolve({ post: this.toContent.bind(this), on: this.fromContent.bind(this) }) + } else { + this.connectListeners.add((toContent, fromContent) => { + resolve({ post: toContent, on: fromContent }) + }) + } + }) } reconnected(config: TabDataConfig) { @@ -109,8 +115,6 @@ class TabData { } } -const tabDataMap = new Map() - const ACTIVE_TAB_QUERY = { active: true, currentWindow: true } as const const queryActiveTabId = async (): Promise => { try { @@ -124,51 +128,59 @@ const queryActiveTabId = async (): Promise => { } } -const withTabData = async ( - port: chrome.runtime.Port, - callback: (data: TabData, m: ReturnType) => void, -): Promise => { - const active_tab_id = await queryActiveTabId() - if (active_tab_id instanceof Error) { - error(active_tab_id) - return - } +let last_active_tab_id = -1 +if (import.meta.env.BROWSER === 'chrome') { + chrome.tabs.onActivated.addListener(info => { + last_active_tab_id = info.tabId + }) +} + +const tab_data_map = new Map() - const data = tabDataMap.get(active_tab_id) - if (!data) { - error('No data for active tab', active_tab_id, 'when connecing', port.name) - return +const getActiveTabData = async (): Promise => { + let active_tab_id = last_active_tab_id + + /* + quering for active data works on chrome too + but it breaks e2e tests for some reason + */ + if (import.meta.env.BROWSER === 'firefox') { + const result = await queryActiveTabId() + if (result instanceof Error) return result + active_tab_id = result } - callback(data, bridge.createPortMessanger(port)) + const data = tab_data_map.get(active_tab_id) + if (!data) return new Error(`No data for active tab "${active_tab_id}"`) + + return data } // for reconnecting after page reload -let lastDisconnectedTabData: TabData | undefined -let lastDisconnectedTabId: number | undefined +let last_disconnected_tab_data: TabData | undefined +let last_disconnected_tab_id: number | undefined -chrome.runtime.onConnect.addListener(port => { +chrome.runtime.onConnect.addListener(async port => { switch (port.name) { case bridge.ConnectionName.Content: { const tab_id = port.sender?.tab?.id if (typeof tab_id !== 'number') break - const { onPortMessage: fromContent, postPortMessage: toContent } = - bridge.createPortMessanger(port) + const content_messanger = bridge.createPortMessanger(port) let forwardHandler: ((message: bridge.ForwardPayload) => void) | undefined let data: TabData const config: TabDataConfig = { - toContent, - fromContent, + toContent: content_messanger.postPortMessage, + fromContent: content_messanger.onPortMessage, forwardToDevtools: fn => (forwardHandler = fn), forwardToClient: message => port.postMessage(message), } // Page was reloaded, so we need to reinitialize the tab data - if (tab_id === lastDisconnectedTabId) { - data = lastDisconnectedTabData! + if (tab_id === last_disconnected_tab_id) { + data = last_disconnected_tab_data! data.reconnected(config) } // A fresh page @@ -176,12 +188,12 @@ chrome.runtime.onConnect.addListener(port => { data = new TabData(tab_id, config) } - lastDisconnectedTabId = undefined - lastDisconnectedTabId = undefined - tabDataMap.set(tab_id, data) + last_disconnected_tab_id = undefined + last_disconnected_tab_id = undefined + tab_data_map.set(tab_id, data) // "Versions" from content-script - bridge.once(fromContent, 'Versions', v => { + bridge.once(content_messanger.onPortMessage, 'Versions', v => { data.setVersions(v) // Change the popup icon to indicate that Solid is present on the page @@ -189,13 +201,13 @@ chrome.runtime.onConnect.addListener(port => { }) // "DetectSolid" from content-script (realWorld) - fromContent('Detected', state => data.detected(state)) + content_messanger.onPortMessage('Detected', state => data.detected(state)) port.onDisconnect.addListener(() => { data.disconnected() - tabDataMap.delete(tab_id) - lastDisconnectedTabData = data - lastDisconnectedTabId = tab_id + tab_data_map.delete(tab_id) + last_disconnected_tab_data = data + last_disconnected_tab_id = tab_id }) port.onMessage.addListener((message: bridge.ForwardPayload | any) => { @@ -206,48 +218,81 @@ chrome.runtime.onConnect.addListener(port => { break } - case bridge.ConnectionName.Devtools: - withTabData(port, (data, { postPortMessage: toDevtools }) => { - data.onContentScriptConnect(toContent => { - // "Versions" means the devtools client is present - data.onVersions(v => toDevtools('Versions', v)) + case bridge.ConnectionName.Devtools: { + const data = await getActiveTabData() + if (data instanceof Error) { + error(data) + break + } + const devtools_messanger = bridge.createPortMessanger(port) + + const content_messanger = await data.untilContentScriptConnect() + + // "Versions" means the devtools client is present + data.onVersions(v => devtools_messanger.postPortMessage('Versions', v)) + + port.onDisconnect.addListener(() => content_messanger.post('DevtoolsClosed')) - port.onDisconnect.addListener(() => toContent('DevtoolsClosed')) - }) - }) break + } - case bridge.ConnectionName.Panel: - withTabData(port, (data, { postPortMessage: toPanel, onForwardMessage }) => { - data.onContentScriptConnect((toContent, fromContent) => { - data.onVersions(v => { - toPanel('Versions', v) - // notify the content script that the devtools panel is ready - toContent('DevtoolsOpened') - }) - - fromContent('ResetPanel', () => toPanel('ResetPanel')) - data.onContentScriptDisconnect(() => toPanel('ResetPanel')) - - /* Force debugger to send state when panel conects */ - data.forwardToClient({ - name: 'ResetState', - details: undefined, - forwarding: true, // TODO: this shouldn't be a "forward", but not sure how to typesafe send a post to debugger from here - }) - - // FORWARD MESSAGES FROM and TO CLIENT - data.forwardToDevtools(message => port.postMessage(message)) - onForwardMessage(message => data.forwardToClient(message)) - }) + case bridge.ConnectionName.Panel: { + const data = await getActiveTabData() + if (data instanceof Error) { + error(data) + break + } + const panel_messanger = bridge.createPortMessanger(port) + + const content_messanger = await data.untilContentScriptConnect() + + data.onVersions(v => { + panel_messanger.postPortMessage('Versions', v) + // notify the content script that the devtools panel is ready + content_messanger.post('DevtoolsOpened') + }) + + content_messanger.on('ResetPanel', () => { + panel_messanger.postPortMessage('ResetPanel') + }) + data.onContentScriptDisconnect(() => { + panel_messanger.postPortMessage('ResetPanel') + }) + + /* Force debugger to send state when panel conects */ + data.forwardToClient({ + name: 'ResetState', + details: undefined, + forwarding: true, // TODO: this shouldn't be a "forward", but not sure how to typesafe send a post to debugger from here + }) + + // FORWARD MESSAGES FROM and TO CLIENT + data.forwardToDevtools(message => { + port.postMessage(message) }) + panel_messanger.onForwardMessage(message => { + data.forwardToClient(message) + }) + break + } + + case bridge.ConnectionName.Popup: { + const data = await getActiveTabData() + if (data instanceof Error) { + error(data) + break + } + const popup_messanger = bridge.createPortMessanger(port) - case bridge.ConnectionName.Popup: - withTabData(port, (data, { postPortMessage: toPopup }) => { - data.onVersions(v => toPopup('Versions', v)) - data.onDetected(state => toPopup('Detected', state)) + data.onVersions(v => { + popup_messanger.postPortMessage('Versions', v) + }) + data.onDetected(state => { + popup_messanger.postPortMessage('Detected', state) }) + break + } } }) From b3ab38e81db3a47502325f5809fbc0b3ab42d726 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Thu, 16 Nov 2023 14:59:16 +0100 Subject: [PATCH 16/16] Add changesets --- .changeset/large-donuts-perform.md | 5 +++++ .changeset/young-baboons-compare.md | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/large-donuts-perform.md create mode 100644 .changeset/young-baboons-compare.md diff --git a/.changeset/large-donuts-perform.md b/.changeset/large-donuts-perform.md new file mode 100644 index 00000000..f9f21ea3 --- /dev/null +++ b/.changeset/large-donuts-perform.md @@ -0,0 +1,5 @@ +--- +'@solid-devtools/extension': minor +--- + +Support firefox (minor changes to background script) diff --git a/.changeset/young-baboons-compare.md b/.changeset/young-baboons-compare.md new file mode 100644 index 00000000..03894d72 --- /dev/null +++ b/.changeset/young-baboons-compare.md @@ -0,0 +1,6 @@ +--- +'@solid-devtools/frontend': patch +'@solid-devtools/overlay': patch +--- + +Add missing dependencies