aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jest.config.js5
-rw-r--r--packages/service-shared/esbuild.config.js21
-rw-r--r--packages/service-shared/package.json2
-rw-r--r--packages/shared/package.json1
-rw-r--r--scripts/build.js21
-rw-r--r--scripts/watch.js43
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
3const { join } = require('path');
4
3/** @type {import('ts-jest').InitialOptionsTsJest} */ 5/** @type {import('ts-jest').InitialOptionsTsJest} */
4module.exports = { 6module.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
3const { chrome } = require('../../config/build-common');
4const { getConfig } = require('../../config/esbuild-config');
5
6module.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
20function buildAll() { 20function 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';
11process.env.NODE_ENV = 'development'; 11process.env.NODE_ENV = 'development';
12 12
13/** @type {string} */ 13/** @type {string} */
14const sharedPackageSource = packageSource('shared'); 14const sharedModule = join(__dirname, '../packages/shared/dist/index.mjs');
15 15
16/** @type {string} */ 16/** @type {string} */
17const serviceSharedPackageSource = packageSource('service-shared'); 17const serviceSharedModule = join(__dirname, '../packages/service-shared/dist/index.mjs');
18 18
19/** @type {RegExp[]} */ 19/** @type {RegExp[]} */
20const stderrIgnorePatterns = [ 20const stderrIgnorePatterns = [
@@ -29,14 +29,6 @@ const stderrIgnorePatterns = [
29 29
30/** 30/**
31 * @param {string} packageName 31 * @param {string} packageName
32 * @returns {string}
33 */
34function 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 */
102function setupPreloadPackageWatcher(sendEvent) { 94function 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 */
115function setupServicePackageWatcher(packageName, sendEvent) { 107function 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}