diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | package.json | 5 | ||||
-rw-r--r-- | packages/main/package.json | 3 | ||||
-rw-r--r-- | packages/main/src/index.ts | 15 | ||||
-rw-r--r-- | packages/main/tsconfig.json | 6 | ||||
-rw-r--r-- | packages/preload/package.json | 4 | ||||
-rw-r--r-- | packages/preload/src/index.ts | 12 | ||||
-rw-r--r-- | packages/preload/tsconfig.json | 8 | ||||
-rw-r--r-- | packages/renderer/package.json | 3 | ||||
-rw-r--r-- | packages/renderer/src/index.tsx | 5 | ||||
-rw-r--r-- | packages/renderer/tsconfig.json | 9 | ||||
-rw-r--r-- | packages/renderer/types/sophieRenderer.d.ts | 7 | ||||
-rw-r--r-- | packages/shared/package.json | 15 | ||||
-rw-r--r-- | packages/shared/src/contextBridge/SophieRenderer.ts | 3 | ||||
-rw-r--r-- | packages/shared/src/index.ts | 3 | ||||
-rw-r--r-- | packages/shared/src/ipc/RendererIpcMessage.ts | 3 | ||||
-rw-r--r-- | packages/shared/tsconfig.json | 13 | ||||
-rw-r--r-- | packages/shared/vite.config.js | 44 | ||||
-rw-r--r-- | scripts/watch.js | 20 | ||||
-rw-r--r-- | yarn.lock | 12 |
20 files changed, 177 insertions, 14 deletions
@@ -7,3 +7,4 @@ | |||
7 | !.yarn/releases | 7 | !.yarn/releases |
8 | !.yarn/versions | 8 | !.yarn/versions |
9 | dist/ | 9 | dist/ |
10 | *.tsbuildinfo | ||
diff --git a/package.json b/package.json index 143ecca..cf271bd 100644 --- a/package.json +++ b/package.json | |||
@@ -17,13 +17,14 @@ | |||
17 | "precompile": "cross-env MODE=production yarn run build", | 17 | "precompile": "cross-env MODE=production yarn run build", |
18 | "compile": "yarn precompile && electron-builder build --config .electron-builder.config.js --dir --config.asar=false", | 18 | "compile": "yarn precompile && electron-builder build --config .electron-builder.config.js --dir --config.asar=false", |
19 | "watch": "node scripts/watch.js", | 19 | "watch": "node scripts/watch.js", |
20 | "typecheck": "yarn workspaces foreach -vp run typecheck", | 20 | "typecheck": "yarn workspaces foreach -vpt run typecheck", |
21 | "update-electron-vendors": "node scripts/update-electron-vendors.js" | 21 | "update-electron-vendors": "node scripts/update-electron-vendors.js" |
22 | }, | 22 | }, |
23 | "workspaces": [ | 23 | "workspaces": [ |
24 | "packages/main", | 24 | "packages/main", |
25 | "packages/preload", | 25 | "packages/preload", |
26 | "packages/renderer" | 26 | "packages/renderer", |
27 | "packages/shared" | ||
27 | ], | 28 | ], |
28 | "devDependencies": { | 29 | "devDependencies": { |
29 | "@typescript-eslint/eslint-plugin": "5.8.0", | 30 | "@typescript-eslint/eslint-plugin": "5.8.0", |
diff --git a/packages/main/package.json b/packages/main/package.json index 11a6270..63da432 100644 --- a/packages/main/package.json +++ b/packages/main/package.json | |||
@@ -5,9 +5,10 @@ | |||
5 | "main": "dist/index.cjs", | 5 | "main": "dist/index.cjs", |
6 | "scripts": { | 6 | "scripts": { |
7 | "build": "vite build", | 7 | "build": "vite build", |
8 | "typecheck": "tsc --noEmit" | 8 | "typecheck": "tsc" |
9 | }, | 9 | }, |
10 | "dependencies": { | 10 | "dependencies": { |
11 | "@sophie/shared": "workspace:*", | ||
11 | "electron": "^16.0.5" | 12 | "electron": "^16.0.5" |
12 | }, | 13 | }, |
13 | "devDependencies": { | 14 | "devDependencies": { |
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts index ef954e1..cd04276 100644 --- a/packages/main/src/index.ts +++ b/packages/main/src/index.ts | |||
@@ -1,5 +1,6 @@ | |||
1 | import { app, BrowserWindow } from 'electron'; | 1 | import { app, BrowserWindow } from 'electron'; |
2 | import { join } from 'path'; | 2 | import { join } from 'path'; |
3 | import { RendererIpcMessage } from '@sophie/shared'; | ||
3 | import { URL } from 'url'; | 4 | import { URL } from 'url'; |
4 | 5 | ||
5 | const isSingleInstance = app.requestSingleInstanceLock(); | 6 | const isSingleInstance = app.requestSingleInstanceLock(); |
@@ -49,9 +50,10 @@ function createWindow(): Promise<void> { | |||
49 | } | 50 | } |
50 | }); | 51 | }); |
51 | 52 | ||
53 | const { webContents } = mainWindow; | ||
54 | |||
52 | // See https://github.com/MarshallOfSound/electron-devtools-installer/issues/195#issuecomment-998872878 | 55 | // See https://github.com/MarshallOfSound/electron-devtools-installer/issues/195#issuecomment-998872878 |
53 | if (isDevelopment) { | 56 | if (isDevelopment) { |
54 | const { webContents } = mainWindow; | ||
55 | webContents.once('dom-ready', () => { | 57 | webContents.once('dom-ready', () => { |
56 | webContents.once('devtools-opened', () => { | 58 | webContents.once('devtools-opened', () => { |
57 | mainWindow?.focus(); | 59 | mainWindow?.focus(); |
@@ -64,6 +66,17 @@ function createWindow(): Promise<void> { | |||
64 | mainWindow?.show(); | 66 | mainWindow?.show(); |
65 | }); | 67 | }); |
66 | 68 | ||
69 | webContents.on('ipc-message', (_event, channel, ...args) => { | ||
70 | switch (channel) { | ||
71 | case RendererIpcMessage.ButtonClicked: | ||
72 | console.log('Button clicked'); | ||
73 | break; | ||
74 | default: | ||
75 | console.warn('Unknown IPC message:', channel, args); | ||
76 | break; | ||
77 | } | ||
78 | }); | ||
79 | |||
67 | const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) | 80 | const pageUrl = (isDevelopment && import.meta.env.VITE_DEV_SERVER_URL !== undefined) |
68 | ? import.meta.env.VITE_DEV_SERVER_URL | 81 | ? import.meta.env.VITE_DEV_SERVER_URL |
69 | : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); | 82 | : new URL('../renderer/dist/index.html', `file://${__dirname}`).toString(); |
diff --git a/packages/main/tsconfig.json b/packages/main/tsconfig.json index 1a569d2..970215c 100644 --- a/packages/main/tsconfig.json +++ b/packages/main/tsconfig.json | |||
@@ -1,11 +1,17 @@ | |||
1 | { | 1 | { |
2 | "extends": "../../tsconfig.json", | 2 | "extends": "../../tsconfig.json", |
3 | "compilerOptions": { | 3 | "compilerOptions": { |
4 | "noEmit": true, | ||
4 | "types": [ | 5 | "types": [ |
5 | "node", | 6 | "node", |
6 | "vite/client" | 7 | "vite/client" |
7 | ] | 8 | ] |
8 | }, | 9 | }, |
10 | "references": [ | ||
11 | { | ||
12 | "path": "../shared" | ||
13 | } | ||
14 | ], | ||
9 | "include": [ | 15 | "include": [ |
10 | "src/**/*.ts", | 16 | "src/**/*.ts", |
11 | "types/**/*.d.ts" | 17 | "types/**/*.d.ts" |
diff --git a/packages/preload/package.json b/packages/preload/package.json index 5417ec0..5556c10 100644 --- a/packages/preload/package.json +++ b/packages/preload/package.json | |||
@@ -2,12 +2,14 @@ | |||
2 | "name": "@sophie/preload", | 2 | "name": "@sophie/preload", |
3 | "version": "0.1.0", | 3 | "version": "0.1.0", |
4 | "private": true, | 4 | "private": true, |
5 | "sideEffects": false, | ||
5 | "main": "dist/index.cjs", | 6 | "main": "dist/index.cjs", |
6 | "scripts": { | 7 | "scripts": { |
7 | "build": "vite build", | 8 | "build": "vite build", |
8 | "typecheck": "tsc --noEmit" | 9 | "typecheck": "tsc" |
9 | }, | 10 | }, |
10 | "dependencies": { | 11 | "dependencies": { |
12 | "@sophie/shared": "workspace:*", | ||
11 | "electron": "^16.0.5" | 13 | "electron": "^16.0.5" |
12 | }, | 14 | }, |
13 | "devDependencies": { | 15 | "devDependencies": { |
diff --git a/packages/preload/src/index.ts b/packages/preload/src/index.ts index 7d5eff5..830901a 100644 --- a/packages/preload/src/index.ts +++ b/packages/preload/src/index.ts | |||
@@ -1,4 +1,10 @@ | |||
1 | import { contextBridge } from 'electron'; | 1 | import { contextBridge, ipcRenderer } from 'electron'; |
2 | import { RendererIpcMessage, SophieRenderer } from '@sophie/shared'; | ||
2 | 3 | ||
3 | contextBridge.exposeInMainWorld('sophieRenderer', { | 4 | const sophieRenderer: SophieRenderer = { |
4 | }); | 5 | buttonClicked() { |
6 | ipcRenderer.send(RendererIpcMessage.ButtonClicked); | ||
7 | } | ||
8 | }; | ||
9 | |||
10 | contextBridge.exposeInMainWorld('sophieRenderer', sophieRenderer); | ||
diff --git a/packages/preload/tsconfig.json b/packages/preload/tsconfig.json index 6bb6145..8bfa0ec 100644 --- a/packages/preload/tsconfig.json +++ b/packages/preload/tsconfig.json | |||
@@ -1,5 +1,13 @@ | |||
1 | { | 1 | { |
2 | "extends": "../../tsconfig.json", | 2 | "extends": "../../tsconfig.json", |
3 | "compilerOptions": { | ||
4 | "noEmit": true | ||
5 | }, | ||
6 | "references": [ | ||
7 | { | ||
8 | "path": "../shared" | ||
9 | } | ||
10 | ], | ||
3 | "include": [ | 11 | "include": [ |
4 | "src/**/*.ts" | 12 | "src/**/*.ts" |
5 | ] | 13 | ] |
diff --git a/packages/renderer/package.json b/packages/renderer/package.json index b18b2fe..559e668 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json | |||
@@ -5,7 +5,7 @@ | |||
5 | "main": "dist/index.html", | 5 | "main": "dist/index.html", |
6 | "scripts": { | 6 | "scripts": { |
7 | "build": "vite build", | 7 | "build": "vite build", |
8 | "typecheck": "tsc --noEmit" | 8 | "typecheck": "tsc" |
9 | }, | 9 | }, |
10 | "dependencies": { | 10 | "dependencies": { |
11 | "@emotion/react": "^11.7.1", | 11 | "@emotion/react": "^11.7.1", |
@@ -13,6 +13,7 @@ | |||
13 | "@fontsource/roboto": "^4.5.1", | 13 | "@fontsource/roboto": "^4.5.1", |
14 | "@mui/icons-material": "^5.2.5", | 14 | "@mui/icons-material": "^5.2.5", |
15 | "@mui/material": "^5.2.5", | 15 | "@mui/material": "^5.2.5", |
16 | "@sophie/shared": "workspace:*", | ||
16 | "react": "^17.0.2", | 17 | "react": "^17.0.2", |
17 | "react-dom": "^17.0.2" | 18 | "react-dom": "^17.0.2" |
18 | }, | 19 | }, |
diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx index 67bdf93..452448c 100644 --- a/packages/renderer/src/index.tsx +++ b/packages/renderer/src/index.tsx | |||
@@ -22,7 +22,10 @@ function App() { | |||
22 | <React.StrictMode> | 22 | <React.StrictMode> |
23 | <ThemeProvider theme={theme}> | 23 | <ThemeProvider theme={theme}> |
24 | <CssBaseline enableColorScheme /> | 24 | <CssBaseline enableColorScheme /> |
25 | <Button variant="contained"> | 25 | <Button |
26 | variant="contained" | ||
27 | onClick={window.sophieRenderer.buttonClicked} | ||
28 | > | ||
26 | Hello Sophie! | 29 | Hello Sophie! |
27 | </Button> | 30 | </Button> |
28 | </ThemeProvider> | 31 | </ThemeProvider> |
diff --git a/packages/renderer/tsconfig.json b/packages/renderer/tsconfig.json index 4a80025..668356c 100644 --- a/packages/renderer/tsconfig.json +++ b/packages/renderer/tsconfig.json | |||
@@ -1,6 +1,7 @@ | |||
1 | { | 1 | { |
2 | "extends": "../../tsconfig.json", | 2 | "extends": "../../tsconfig.json", |
3 | "compilerOptions": { | 3 | "compilerOptions": { |
4 | "noEmit": true, | ||
4 | "jsx": "react", | 5 | "jsx": "react", |
5 | "lib": [ | 6 | "lib": [ |
6 | "dom", | 7 | "dom", |
@@ -8,8 +9,14 @@ | |||
8 | "esnext" | 9 | "esnext" |
9 | ] | 10 | ] |
10 | }, | 11 | }, |
12 | "references": [ | ||
13 | { | ||
14 | "path": "../shared" | ||
15 | } | ||
16 | ], | ||
11 | "include": [ | 17 | "include": [ |
12 | "src/**/*.ts", | 18 | "src/**/*.ts", |
13 | "src/**/*.tsx" | 19 | "src/**/*.tsx", |
20 | "types/**/*.d.ts" | ||
14 | ] | 21 | ] |
15 | } | 22 | } |
diff --git a/packages/renderer/types/sophieRenderer.d.ts b/packages/renderer/types/sophieRenderer.d.ts new file mode 100644 index 0000000..b5b5da1 --- /dev/null +++ b/packages/renderer/types/sophieRenderer.d.ts | |||
@@ -0,0 +1,7 @@ | |||
1 | import type { SophieRenderer } from '@sophie/shared'; | ||
2 | |||
3 | declare global { | ||
4 | interface Window { | ||
5 | readonly sophieRenderer: SophieRenderer; | ||
6 | } | ||
7 | } | ||
diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 0000000..ccde705 --- /dev/null +++ b/packages/shared/package.json | |||
@@ -0,0 +1,15 @@ | |||
1 | { | ||
2 | "name": "@sophie/shared", | ||
3 | "version": "0.1.0", | ||
4 | "private": true, | ||
5 | "main": "dist/index.cjs", | ||
6 | "types": "dist/index.d.ts", | ||
7 | "scripts": { | ||
8 | "build": "vite build", | ||
9 | "typecheck": "tsc" | ||
10 | }, | ||
11 | "devDependencies": { | ||
12 | "typescript": "^4.5.4", | ||
13 | "vite": "^2.7.6" | ||
14 | } | ||
15 | } | ||
diff --git a/packages/shared/src/contextBridge/SophieRenderer.ts b/packages/shared/src/contextBridge/SophieRenderer.ts new file mode 100644 index 0000000..91a0a3c --- /dev/null +++ b/packages/shared/src/contextBridge/SophieRenderer.ts | |||
@@ -0,0 +1,3 @@ | |||
1 | export interface SophieRenderer { | ||
2 | buttonClicked(): void; | ||
3 | } | ||
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 0000000..f95675d --- /dev/null +++ b/packages/shared/src/index.ts | |||
@@ -0,0 +1,3 @@ | |||
1 | export type { SophieRenderer } from './contextBridge/SophieRenderer'; | ||
2 | |||
3 | export { RendererIpcMessage } from './ipc/RendererIpcMessage'; | ||
diff --git a/packages/shared/src/ipc/RendererIpcMessage.ts b/packages/shared/src/ipc/RendererIpcMessage.ts new file mode 100644 index 0000000..cfb87ae --- /dev/null +++ b/packages/shared/src/ipc/RendererIpcMessage.ts | |||
@@ -0,0 +1,3 @@ | |||
1 | export enum RendererIpcMessage { | ||
2 | ButtonClicked = "button-clicked" | ||
3 | } | ||
diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json new file mode 100644 index 0000000..d441cc8 --- /dev/null +++ b/packages/shared/tsconfig.json | |||
@@ -0,0 +1,13 @@ | |||
1 | { | ||
2 | "extends": "../../tsconfig.json", | ||
3 | "compilerOptions": { | ||
4 | "composite": true, | ||
5 | "declaration": true, | ||
6 | "declarationDir": "dist", | ||
7 | "emitDeclarationOnly": true, | ||
8 | "rootDir": "src" | ||
9 | }, | ||
10 | "include": [ | ||
11 | "src/**/*.ts" | ||
12 | ] | ||
13 | } | ||
diff --git a/packages/shared/vite.config.js b/packages/shared/vite.config.js new file mode 100644 index 0000000..cbebb8a --- /dev/null +++ b/packages/shared/vite.config.js | |||
@@ -0,0 +1,44 @@ | |||
1 | // @ts-check | ||
2 | |||
3 | import { builtinModules } from 'module'; | ||
4 | |||
5 | // `resolveJsonModule` is disabled for this package, but vite will load the json nevertheless. | ||
6 | // @ts-expect-error | ||
7 | import { chrome, node } from '../../.electron-vendors.cache.json'; | ||
8 | |||
9 | /** @type string */ | ||
10 | const PACKAGE_ROOT = __dirname; | ||
11 | |||
12 | /** | ||
13 | * @type {import('vite').UserConfig} | ||
14 | * @see https://vitejs.dev/config/ | ||
15 | */ | ||
16 | const config = { | ||
17 | mode: process.env.MODE, | ||
18 | root: PACKAGE_ROOT, | ||
19 | envDir: process.cwd(), | ||
20 | build: { | ||
21 | sourcemap: 'inline', | ||
22 | target: [ | ||
23 | `chrome${chrome}`, | ||
24 | `node${node}` | ||
25 | ], | ||
26 | outDir: 'dist', | ||
27 | lib: { | ||
28 | entry: 'src/index.ts', | ||
29 | formats: ['cjs'], | ||
30 | }, | ||
31 | rollupOptions: { | ||
32 | external: [ | ||
33 | ...builtinModules, | ||
34 | ], | ||
35 | output: { | ||
36 | entryFileNames: '[name].cjs', | ||
37 | }, | ||
38 | }, | ||
39 | emptyOutDir: false, // Do not remove `.d.ts` files. | ||
40 | brotliSize: false, | ||
41 | }, | ||
42 | }; | ||
43 | |||
44 | export default config; | ||
diff --git a/scripts/watch.js b/scripts/watch.js index 7ec07ff..7f5f42c 100644 --- a/scripts/watch.js +++ b/scripts/watch.js | |||
@@ -37,10 +37,10 @@ const stderrFilterPatterns = [ | |||
37 | ]; | 37 | ]; |
38 | 38 | ||
39 | /** | 39 | /** |
40 | * @param {{name: string; configFile: string; writeBundle: import('rollup').OutputPlugin['writeBundle'] }} config | 40 | * @param {{name: string; configFile: string; writeBundle?: import('rollup').OutputPlugin['writeBundle'] }} config |
41 | * @returns {Promise<import('rollup').RollupOutput | Array<import('rollup').RollupOutput> | import('rollup').RollupWatcher>} | 41 | * @returns {Promise<import('rollup').RollupOutput | Array<import('rollup').RollupOutput> | import('rollup').RollupWatcher>} |
42 | */ | 42 | */ |
43 | function getWatcher({name, configFile, writeBundle}) { | 43 | function getWatcher({ name, configFile, writeBundle }) { |
44 | return build({ | 44 | return build({ |
45 | ...sharedConfig, | 45 | ...sharedConfig, |
46 | configFile, | 46 | configFile, |
@@ -110,7 +110,7 @@ function setupMainPackageWatcher(viteDevServer) { | |||
110 | } | 110 | } |
111 | 111 | ||
112 | /** | 112 | /** |
113 | * Start or restart App when source files are changed. | 113 | * Reload App when source files are changed. |
114 | * | 114 | * |
115 | * @param {import('vite').ViteDevServer} viteDevServer | 115 | * @param {import('vite').ViteDevServer} viteDevServer |
116 | * @returns {Promise<import('rollup').RollupOutput | Array<import('rollup').RollupOutput> | import('rollup').RollupWatcher>} | 116 | * @returns {Promise<import('rollup').RollupOutput | Array<import('rollup').RollupOutput> | import('rollup').RollupWatcher>} |
@@ -128,9 +128,23 @@ function setupPreloadPackageWatcher(viteDevServer) { | |||
128 | } | 128 | } |
129 | 129 | ||
130 | /** | 130 | /** |
131 | * Rebuild package when source files are changed. | ||
132 | * | ||
133 | * @returns {Promise<import('rollup').RollupOutput | Array<import('rollup').RollupOutput> | import('rollup').RollupWatcher>} | ||
134 | */ | ||
135 | function setupSharedPackageWatcher() { | ||
136 | return getWatcher({ | ||
137 | name: 'rebuild-package-on-shared-package-change', | ||
138 | configFile: 'packages/shared/vite.config.js', | ||
139 | }); | ||
140 | } | ||
141 | |||
142 | /** | ||
131 | * @returns Promise<void> | 143 | * @returns Promise<void> |
132 | */ | 144 | */ |
133 | async function setupDevEnvironment() { | 145 | async function setupDevEnvironment() { |
146 | await setupSharedPackageWatcher(); | ||
147 | |||
134 | const viteDevServer = await createServer({ | 148 | const viteDevServer = await createServer({ |
135 | ...sharedConfig, | 149 | ...sharedConfig, |
136 | configFile: 'packages/renderer/vite.config.js', | 150 | configFile: 'packages/renderer/vite.config.js', |
@@ -822,6 +822,7 @@ __metadata: | |||
822 | version: 0.0.0-use.local | 822 | version: 0.0.0-use.local |
823 | resolution: "@sophie/main@workspace:packages/main" | 823 | resolution: "@sophie/main@workspace:packages/main" |
824 | dependencies: | 824 | dependencies: |
825 | "@sophie/shared": "workspace:*" | ||
825 | "@types/electron-devtools-installer": ^2.2.0 | 826 | "@types/electron-devtools-installer": ^2.2.0 |
826 | "@types/node": ^16.11.15 | 827 | "@types/node": ^16.11.15 |
827 | electron: ^16.0.5 | 828 | electron: ^16.0.5 |
@@ -835,6 +836,7 @@ __metadata: | |||
835 | version: 0.0.0-use.local | 836 | version: 0.0.0-use.local |
836 | resolution: "@sophie/preload@workspace:packages/preload" | 837 | resolution: "@sophie/preload@workspace:packages/preload" |
837 | dependencies: | 838 | dependencies: |
839 | "@sophie/shared": "workspace:*" | ||
838 | electron: ^16.0.5 | 840 | electron: ^16.0.5 |
839 | typescript: ^4.5.4 | 841 | typescript: ^4.5.4 |
840 | vite: ^2.7.6 | 842 | vite: ^2.7.6 |
@@ -850,6 +852,7 @@ __metadata: | |||
850 | "@fontsource/roboto": ^4.5.1 | 852 | "@fontsource/roboto": ^4.5.1 |
851 | "@mui/icons-material": ^5.2.5 | 853 | "@mui/icons-material": ^5.2.5 |
852 | "@mui/material": ^5.2.5 | 854 | "@mui/material": ^5.2.5 |
855 | "@sophie/shared": "workspace:*" | ||
853 | "@types/react": ^17.0.37 | 856 | "@types/react": ^17.0.37 |
854 | "@types/react-dom": ^17.0.11 | 857 | "@types/react-dom": ^17.0.11 |
855 | "@vitejs/plugin-react": ^1.1.3 | 858 | "@vitejs/plugin-react": ^1.1.3 |
@@ -860,6 +863,15 @@ __metadata: | |||
860 | languageName: unknown | 863 | languageName: unknown |
861 | linkType: soft | 864 | linkType: soft |
862 | 865 | ||
866 | "@sophie/shared@workspace:*, @sophie/shared@workspace:packages/shared": | ||
867 | version: 0.0.0-use.local | ||
868 | resolution: "@sophie/shared@workspace:packages/shared" | ||
869 | dependencies: | ||
870 | typescript: ^4.5.4 | ||
871 | vite: ^2.7.6 | ||
872 | languageName: unknown | ||
873 | linkType: soft | ||
874 | |||
863 | "@szmarczak/http-timer@npm:^1.1.2": | 875 | "@szmarczak/http-timer@npm:^1.1.2": |
864 | version: 1.1.2 | 876 | version: 1.1.2 |
865 | resolution: "@szmarczak/http-timer@npm:1.1.2" | 877 | resolution: "@szmarczak/http-timer@npm:1.1.2" |