diff options
-rw-r--r-- | jest.config.js | 5 | ||||
-rw-r--r-- | packages/service-shared/esbuild.config.js | 21 | ||||
-rw-r--r-- | packages/service-shared/package.json | 2 | ||||
-rw-r--r-- | packages/shared/package.json | 1 | ||||
-rw-r--r-- | scripts/build.js | 21 | ||||
-rw-r--r-- | scripts/watch.js | 43 |
6 files changed, 62 insertions, 31 deletions
diff --git a/jest.config.js b/jest.config.js index 6943513..d0ba361 100644 --- a/jest.config.js +++ b/jest.config.js | |||
@@ -1,5 +1,7 @@ | |||
1 | // @ts-check | 1 | // @ts-check |
2 | 2 | ||
3 | const { join } = require('path'); | ||
4 | |||
3 | /** @type {import('ts-jest').InitialOptionsTsJest} */ | 5 | /** @type {import('ts-jest').InitialOptionsTsJest} */ |
4 | module.exports = { | 6 | module.exports = { |
5 | preset: 'ts-jest', | 7 | preset: 'ts-jest', |
@@ -8,6 +10,9 @@ module.exports = { | |||
8 | isolatedModules: true, | 10 | isolatedModules: true, |
9 | }, | 11 | }, |
10 | }, | 12 | }, |
13 | moduleNameMapper: { | ||
14 | '@sophie/(.+)': join(__dirname, 'packages/$1/src/index.ts'), | ||
15 | }, | ||
11 | resetMocks: true, | 16 | resetMocks: true, |
12 | restoreMocks: true, | 17 | restoreMocks: true, |
13 | testEnvironment: 'node', | 18 | testEnvironment: 'node', |
diff --git a/packages/service-shared/esbuild.config.js b/packages/service-shared/esbuild.config.js new file mode 100644 index 0000000..ce57cd7 --- /dev/null +++ b/packages/service-shared/esbuild.config.js | |||
@@ -0,0 +1,21 @@ | |||
1 | // @ts-check | ||
2 | |||
3 | const { chrome } = require('../../config/build-common'); | ||
4 | const { getConfig } = require('../../config/esbuild-config'); | ||
5 | |||
6 | module.exports = getConfig({ | ||
7 | absWorkingDir: __dirname, | ||
8 | entryPoints: [ | ||
9 | 'src/index.ts', | ||
10 | ], | ||
11 | outfile: 'dist/index.mjs', | ||
12 | format: 'esm', | ||
13 | // The package that includes this one will have a header comment, | ||
14 | // no need to have an additional one here. | ||
15 | banner: {}, | ||
16 | platform: 'node', | ||
17 | target: chrome, | ||
18 | external: [ | ||
19 | 'zod', | ||
20 | ], | ||
21 | }); | ||
diff --git a/packages/service-shared/package.json b/packages/service-shared/package.json index 6f34a9d..e812e4a 100644 --- a/packages/service-shared/package.json +++ b/packages/service-shared/package.json | |||
@@ -3,7 +3,7 @@ | |||
3 | "version": "0.1.0", | 3 | "version": "0.1.0", |
4 | "private": true, | 4 | "private": true, |
5 | "sideEffects": false, | 5 | "sideEffects": false, |
6 | "main": "src/index.ts", | 6 | "module": "dist/index.mjs", |
7 | "types": "dist/index.d.ts", | 7 | "types": "dist/index.d.ts", |
8 | "scripts": { | 8 | "scripts": { |
9 | "typecheck": "tsc" | 9 | "typecheck": "tsc" |
diff --git a/packages/shared/package.json b/packages/shared/package.json index e2b2c77..e4b57b0 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json | |||
@@ -3,7 +3,6 @@ | |||
3 | "version": "0.1.0", | 3 | "version": "0.1.0", |
4 | "private": true, | 4 | "private": true, |
5 | "sideEffects": false, | 5 | "sideEffects": false, |
6 | "main": "src/index.ts", | ||
7 | "module": "dist/index.mjs", | 6 | "module": "dist/index.mjs", |
8 | "types": "dist/index.d.ts", | 7 | "types": "dist/index.d.ts", |
9 | "scripts": { | 8 | "scripts": { |
diff --git a/scripts/build.js b/scripts/build.js index 416530d..5abcdab 100644 --- a/scripts/build.js +++ b/scripts/build.js | |||
@@ -18,16 +18,21 @@ function buildPackageVite(packageName) { | |||
18 | } | 18 | } |
19 | 19 | ||
20 | function buildAll() { | 20 | function buildAll() { |
21 | // Esbuild can natively load a typescript main file, | 21 | const buildServiceShared = buildPackageEsbuild('service-shared'); |
22 | // so we don't need to bundle `service-shared`. | ||
23 | // We onyl bundle `shared` for vite. | ||
24 | const buildShared = buildPackageEsbuild('shared'); | 22 | const buildShared = buildPackageEsbuild('shared'); |
25 | return Promise.all([ | 23 | return Promise.all([ |
26 | buildShared.then(() => buildPackageEsbuild('main')), | 24 | Promise.all([ |
27 | buildPackageEsbuild('service-inject'), | 25 | buildServiceShared, |
28 | buildPackageEsbuild('service-preload'), | 26 | buildShared, |
29 | buildPackageEsbuild('preload'), | 27 | ]).then(() => buildPackageEsbuild('main')), |
30 | buildPackageVite('renderer'), | 28 | buildServiceShared.then(() => Promise.all([ |
29 | buildPackageEsbuild('service-inject'), | ||
30 | buildPackageEsbuild('service-preload'), | ||
31 | ])), | ||
32 | buildShared.then(() => Promise.all([ | ||
33 | buildPackageEsbuild('preload'), | ||
34 | buildPackageVite('renderer'), | ||
35 | ])), | ||
31 | ]); | 36 | ]); |
32 | } | 37 | } |
33 | 38 | ||
diff --git a/scripts/watch.js b/scripts/watch.js index 367ab88..d4229e9 100644 --- a/scripts/watch.js +++ b/scripts/watch.js | |||
@@ -11,10 +11,10 @@ process.env.MODE = 'development'; | |||
11 | process.env.NODE_ENV = 'development'; | 11 | process.env.NODE_ENV = 'development'; |
12 | 12 | ||
13 | /** @type {string} */ | 13 | /** @type {string} */ |
14 | const sharedPackageSource = packageSource('shared'); | 14 | const sharedModule = join(__dirname, '../packages/shared/dist/index.mjs'); |
15 | 15 | ||
16 | /** @type {string} */ | 16 | /** @type {string} */ |
17 | const serviceSharedPackageSource = packageSource('service-shared'); | 17 | const serviceSharedModule = join(__dirname, '../packages/service-shared/dist/index.mjs'); |
18 | 18 | ||
19 | /** @type {RegExp[]} */ | 19 | /** @type {RegExp[]} */ |
20 | const stderrIgnorePatterns = [ | 20 | const stderrIgnorePatterns = [ |
@@ -29,14 +29,6 @@ const stderrIgnorePatterns = [ | |||
29 | 29 | ||
30 | /** | 30 | /** |
31 | * @param {string} packageName | 31 | * @param {string} packageName |
32 | * @returns {string} | ||
33 | */ | ||
34 | function packageSource(packageName) { | ||
35 | return join(__dirname, `../packages/${packageName}/src`); | ||
36 | } | ||
37 | |||
38 | /** | ||
39 | * @param {string} packageName | ||
40 | * @param {string[]} [extraPaths] | 32 | * @param {string[]} [extraPaths] |
41 | * @param {() => void} [callback] | 33 | * @param {() => void} [callback] |
42 | * @return {Promise<void>} | 34 | * @return {Promise<void>} |
@@ -47,7 +39,7 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
47 | config.incremental = true; | 39 | config.incremental = true; |
48 | const incrementalBuild = await esbuild.build(config); | 40 | const incrementalBuild = await esbuild.build(config); |
49 | const paths = [ | 41 | const paths = [ |
50 | packageSource(packageName), | 42 | join(__dirname, `../packages/${packageName}/src`), |
51 | ...(extraPaths || []), | 43 | ...(extraPaths || []), |
52 | ]; | 44 | ]; |
53 | const watcher = chokidar.watch(paths, { | 45 | const watcher = chokidar.watch(paths, { |
@@ -60,8 +52,8 @@ async function setupEsbuildWatcher(packageName, extraPaths, callback) { | |||
60 | } | 52 | } |
61 | watcher.on('change', () => { | 53 | watcher.on('change', () => { |
62 | incrementalBuild.rebuild().then(() => { | 54 | incrementalBuild.rebuild().then(() => { |
63 | console.log(`\u26a1 Reloading package ${packageName}`); | ||
64 | if (callback) { | 55 | if (callback) { |
56 | console.log(`\u26a1 Reloading package ${packageName}`); | ||
65 | callback(); | 57 | callback(); |
66 | } | 58 | } |
67 | }).catch((err) => { | 59 | }).catch((err) => { |
@@ -100,7 +92,7 @@ async function setupDevServer(packageName) { | |||
100 | * @return {Promise<void>} | 92 | * @return {Promise<void>} |
101 | */ | 93 | */ |
102 | function setupPreloadPackageWatcher(sendEvent) { | 94 | function setupPreloadPackageWatcher(sendEvent) { |
103 | return setupEsbuildWatcher('preload', [sharedPackageSource], () => { | 95 | return setupEsbuildWatcher('preload', [sharedModule], () => { |
104 | sendEvent({ | 96 | sendEvent({ |
105 | type: 'full-reload', | 97 | type: 'full-reload', |
106 | }); | 98 | }); |
@@ -113,7 +105,7 @@ function setupPreloadPackageWatcher(sendEvent) { | |||
113 | * @return {Promise<void>} | 105 | * @return {Promise<void>} |
114 | */ | 106 | */ |
115 | function setupServicePackageWatcher(packageName, sendEvent) { | 107 | function setupServicePackageWatcher(packageName, sendEvent) { |
116 | return setupEsbuildWatcher(packageName, [serviceSharedPackageSource], () => { | 108 | return setupEsbuildWatcher(packageName, [serviceSharedModule], () => { |
117 | sendEvent({ | 109 | sendEvent({ |
118 | type: 'custom', | 110 | type: 'custom', |
119 | event: 'sophie:reload-services', | 111 | event: 'sophie:reload-services', |
@@ -139,8 +131,8 @@ function setupMainPackageWatcher(viteDevServer) { | |||
139 | return setupEsbuildWatcher( | 131 | return setupEsbuildWatcher( |
140 | 'main', | 132 | 'main', |
141 | [ | 133 | [ |
142 | serviceSharedPackageSource, | 134 | serviceSharedModule, |
143 | sharedPackageSource | 135 | sharedModule, |
144 | ], | 136 | ], |
145 | () => { | 137 | () => { |
146 | if (spawnProcess !== null) { | 138 | if (spawnProcess !== null) { |
@@ -174,13 +166,22 @@ async function setupDevEnvironment() { | |||
174 | viteDevServer.ws.send(event); | 166 | viteDevServer.ws.send(event); |
175 | } | 167 | } |
176 | }; | 168 | }; |
169 | |||
170 | const sharedWatcher = setupEsbuildWatcher('shared'); | ||
171 | const serviceSharedWatcher = setupEsbuildWatcher('service-shared'); | ||
177 | await Promise.all([ | 172 | await Promise.all([ |
178 | setupEsbuildWatcher('shared'), | 173 | sharedWatcher.then(() => Promise.all([ |
179 | setupPreloadPackageWatcher(sendEvent), | 174 | setupPreloadPackageWatcher(sendEvent), |
180 | setupServicePackageWatcher('service-inject', sendEvent), | 175 | setupDevServer('renderer').then((devServer) => { |
181 | setupServicePackageWatcher('service-preload', sendEvent), | 176 | viteDevServer = devServer; |
177 | }), | ||
178 | ])), | ||
179 | serviceSharedWatcher.then(() => Promise.all([ | ||
180 | setupServicePackageWatcher('service-inject', sendEvent), | ||
181 | setupServicePackageWatcher('service-preload', sendEvent), | ||
182 | ])), | ||
182 | ]); | 183 | ]); |
183 | viteDevServer = await setupDevServer('renderer'); | 184 | |
184 | console.log('\ud83c\udf80 Sophie is starting up') | 185 | console.log('\ud83c\udf80 Sophie is starting up') |
185 | return setupMainPackageWatcher(viteDevServer); | 186 | return setupMainPackageWatcher(viteDevServer); |
186 | } | 187 | } |