Skip to content

Commit dfa6994

Browse files
authored
chore: add sync to compass script (#113)
1 parent ae15c97 commit dfa6994

File tree

3 files changed

+242
-4
lines changed

3 files changed

+242
-4
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
"coverage": "vitest run --coverage",
4646
"storybook": "storybook dev -p 6006",
4747
"build-storybook": "storybook build",
48-
"deploy-storybook": "gh-pages -d storybook-static"
48+
"deploy-storybook": "gh-pages -d storybook-static",
49+
"sync-to-compass": "ts-node scripts/sync-to-compass.ts"
4950
},
5051
"dependencies": {
5152
"@emotion/react": "^11.14.0",
@@ -94,6 +95,7 @@
9495
"jsdom": "20.0.3",
9596
"prettier": "3.6.2",
9697
"storybook": "^9.0.10",
98+
"ts-node": "^10.9.2",
9799
"typescript": "^5.7.3",
98100
"vite": "6.3.5",
99101
"vite-plugin-css-injected-by-js": "^3.5.2",

scripts/sync-to-compass.ts

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/usr/bin/env ts-node
2+
3+
/* eslint-disable no-console */
4+
const fs = require('fs');
5+
const path = require('path');
6+
const child_process = require('child_process');
7+
8+
// This script is used to sync the built diagramming package
9+
// to the local Compass to test while developing.
10+
11+
// For why we don't use npm link see:
12+
// https://github.com/mongodb-js/compass/blob/117c32f8ddd5d2bf4f8fceec5b324bf9866de66e/packages/compass-web/scripts/sync-dist-to-mms.js#L47-L52
13+
14+
if (!process.env.COMPASS_HOME) {
15+
throw new Error('Missing required environment variable $COMPASS_HOME.');
16+
}
17+
18+
const packageDir = path.resolve(__dirname, '..');
19+
const srcDir = path.resolve(__dirname, '..', 'src');
20+
const libDir = path.resolve(__dirname, '..', 'dist');
21+
22+
const destDir = path.dirname(
23+
child_process.execFileSync('node', ['-p', "require.resolve('@mongodb-js/diagramming')"], {
24+
cwd: process.env.COMPASS_HOME,
25+
encoding: 'utf-8',
26+
}),
27+
);
28+
29+
console.log({ packageDir, srcDir, libDir, destDir });
30+
31+
function debounce<T extends () => void>(
32+
fn: T,
33+
delay: number,
34+
options: { leading?: boolean; trailing?: boolean } = {},
35+
): () => void {
36+
let timeoutId: NodeJS.Timeout | null = null;
37+
let lastArgs: Parameters<T> | null = null;
38+
39+
return function (this: ThisParameterType<T>, ...args: Parameters<T>) {
40+
lastArgs = args;
41+
42+
const executeCall = () => {
43+
fn.apply(this, lastArgs as Parameters<T>);
44+
timeoutId = null;
45+
};
46+
47+
if (timeoutId === null && options.leading) {
48+
executeCall();
49+
}
50+
51+
if (timeoutId) {
52+
clearTimeout(timeoutId);
53+
}
54+
55+
if (options.trailing !== false) {
56+
timeoutId = setTimeout(executeCall, delay);
57+
}
58+
};
59+
}
60+
61+
const compileAndCopy = debounce(
62+
() => {
63+
try {
64+
child_process.execFileSync('yarn', ['build'], {
65+
cwd: packageDir,
66+
encoding: 'utf-8',
67+
});
68+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
69+
} catch (err: any) {
70+
if (err.code) {
71+
// Spawning child process failed.
72+
console.error(err.code);
73+
} else {
74+
// Child was spawned but exited with non-zero exit code.
75+
// Error contains any stdout and stderr from the child.
76+
const { stdout, stderr } = err;
77+
78+
console.log(stdout);
79+
console.error(stderr);
80+
}
81+
}
82+
fs.cpSync(libDir, destDir, { recursive: true });
83+
console.log('done.');
84+
},
85+
1_000,
86+
{
87+
leading: true,
88+
trailing: true,
89+
},
90+
);
91+
92+
const srcWatcher = fs.watch(srcDir, { recursive: true }, (eventType: string, filename: string) => {
93+
console.log(eventType, filename);
94+
compileAndCopy();
95+
});
96+
97+
function cleanup() {
98+
srcWatcher.close();
99+
}
100+
101+
for (const evt of ['SIGINT', 'SIGTERM']) {
102+
process.on(evt, cleanup);
103+
}
104+
105+
// Run an initial copy on startup.
106+
compileAndCopy();

yarn.lock

Lines changed: 133 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,15 @@ __metadata:
255255
languageName: node
256256
linkType: hard
257257

258+
"@cspotcode/source-map-support@npm:^0.8.0":
259+
version: 0.8.1
260+
resolution: "@cspotcode/source-map-support@npm:0.8.1"
261+
dependencies:
262+
"@jridgewell/trace-mapping": "npm:0.3.9"
263+
checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6
264+
languageName: node
265+
linkType: hard
266+
258267
"@cush/relative@npm:^1.0.0":
259268
version: 1.0.0
260269
resolution: "@cush/relative@npm:1.0.0"
@@ -1072,7 +1081,7 @@ __metadata:
10721081
languageName: node
10731082
linkType: hard
10741083

1075-
"@jridgewell/resolve-uri@npm:^3.1.0":
1084+
"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0":
10761085
version: 3.1.2
10771086
resolution: "@jridgewell/resolve-uri@npm:3.1.2"
10781087
checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e
@@ -1093,6 +1102,16 @@ __metadata:
10931102
languageName: node
10941103
linkType: hard
10951104

1105+
"@jridgewell/trace-mapping@npm:0.3.9":
1106+
version: 0.3.9
1107+
resolution: "@jridgewell/trace-mapping@npm:0.3.9"
1108+
dependencies:
1109+
"@jridgewell/resolve-uri": "npm:^3.0.3"
1110+
"@jridgewell/sourcemap-codec": "npm:^1.4.10"
1111+
checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b
1112+
languageName: node
1113+
linkType: hard
1114+
10961115
"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
10971116
version: 0.3.25
10981117
resolution: "@jridgewell/trace-mapping@npm:0.3.25"
@@ -1341,6 +1360,7 @@ __metadata:
13411360
react: "npm:17.0.2"
13421361
react-dom: "npm:17.0.2"
13431362
storybook: "npm:^9.0.10"
1363+
ts-node: "npm:^10.9.2"
13441364
typescript: "npm:^5.7.3"
13451365
vite: "npm:6.3.5"
13461366
vite-plugin-css-injected-by-js: "npm:^3.5.2"
@@ -2144,6 +2164,34 @@ __metadata:
21442164
languageName: node
21452165
linkType: hard
21462166

2167+
"@tsconfig/node10@npm:^1.0.7":
2168+
version: 1.0.11
2169+
resolution: "@tsconfig/node10@npm:1.0.11"
2170+
checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c
2171+
languageName: node
2172+
linkType: hard
2173+
2174+
"@tsconfig/node12@npm:^1.0.7":
2175+
version: 1.0.11
2176+
resolution: "@tsconfig/node12@npm:1.0.11"
2177+
checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9
2178+
languageName: node
2179+
linkType: hard
2180+
2181+
"@tsconfig/node14@npm:^1.0.0":
2182+
version: 1.0.3
2183+
resolution: "@tsconfig/node14@npm:1.0.3"
2184+
checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44
2185+
languageName: node
2186+
linkType: hard
2187+
2188+
"@tsconfig/node16@npm:^1.0.2":
2189+
version: 1.0.4
2190+
resolution: "@tsconfig/node16@npm:1.0.4"
2191+
checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb
2192+
languageName: node
2193+
linkType: hard
2194+
21472195
"@tybys/wasm-util@npm:^0.9.0":
21482196
version: 0.9.0
21492197
resolution: "@tybys/wasm-util@npm:0.9.0"
@@ -3214,7 +3262,7 @@ __metadata:
32143262
languageName: node
32153263
linkType: hard
32163264

3217-
"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.2.0":
3265+
"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0":
32183266
version: 8.3.4
32193267
resolution: "acorn-walk@npm:8.3.4"
32203268
dependencies:
@@ -3232,6 +3280,15 @@ __metadata:
32323280
languageName: node
32333281
linkType: hard
32343282

3283+
"acorn@npm:^8.4.1":
3284+
version: 8.15.0
3285+
resolution: "acorn@npm:8.15.0"
3286+
bin:
3287+
acorn: bin/acorn
3288+
checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec
3289+
languageName: node
3290+
linkType: hard
3291+
32353292
"agent-base@npm:6":
32363293
version: 6.0.2
32373294
resolution: "agent-base@npm:6.0.2"
@@ -3373,6 +3430,13 @@ __metadata:
33733430
languageName: node
33743431
linkType: hard
33753432

3433+
"arg@npm:^4.1.0":
3434+
version: 4.1.3
3435+
resolution: "arg@npm:4.1.3"
3436+
checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a
3437+
languageName: node
3438+
linkType: hard
3439+
33763440
"argparse@npm:^2.0.1":
33773441
version: 2.0.1
33783442
resolution: "argparse@npm:2.0.1"
@@ -4155,7 +4219,7 @@ __metadata:
41554219
languageName: node
41564220
linkType: hard
41574221

4158-
"create-require@npm:^1.1.1":
4222+
"create-require@npm:^1.1.0, create-require@npm:^1.1.1":
41594223
version: 1.1.1
41604224
resolution: "create-require@npm:1.1.1"
41614225
checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91
@@ -4512,6 +4576,13 @@ __metadata:
45124576
languageName: node
45134577
linkType: hard
45144578

4579+
"diff@npm:^4.0.1":
4580+
version: 4.0.2
4581+
resolution: "diff@npm:4.0.2"
4582+
checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1
4583+
languageName: node
4584+
linkType: hard
4585+
45154586
"diffie-hellman@npm:^5.0.3":
45164587
version: 5.0.3
45174588
resolution: "diffie-hellman@npm:5.0.3"
@@ -7004,6 +7075,13 @@ __metadata:
70047075
languageName: node
70057076
linkType: hard
70067077

7078+
"make-error@npm:^1.1.1":
7079+
version: 1.3.6
7080+
resolution: "make-error@npm:1.3.6"
7081+
checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f
7082+
languageName: node
7083+
linkType: hard
7084+
70077085
"make-fetch-happen@npm:^14.0.3":
70087086
version: 14.0.3
70097087
resolution: "make-fetch-happen@npm:14.0.3"
@@ -9329,6 +9407,44 @@ __metadata:
93299407
languageName: node
93309408
linkType: hard
93319409

9410+
"ts-node@npm:^10.9.2":
9411+
version: 10.9.2
9412+
resolution: "ts-node@npm:10.9.2"
9413+
dependencies:
9414+
"@cspotcode/source-map-support": "npm:^0.8.0"
9415+
"@tsconfig/node10": "npm:^1.0.7"
9416+
"@tsconfig/node12": "npm:^1.0.7"
9417+
"@tsconfig/node14": "npm:^1.0.0"
9418+
"@tsconfig/node16": "npm:^1.0.2"
9419+
acorn: "npm:^8.4.1"
9420+
acorn-walk: "npm:^8.1.1"
9421+
arg: "npm:^4.1.0"
9422+
create-require: "npm:^1.1.0"
9423+
diff: "npm:^4.0.1"
9424+
make-error: "npm:^1.1.1"
9425+
v8-compile-cache-lib: "npm:^3.0.1"
9426+
yn: "npm:3.1.1"
9427+
peerDependencies:
9428+
"@swc/core": ">=1.2.50"
9429+
"@swc/wasm": ">=1.2.50"
9430+
"@types/node": "*"
9431+
typescript: ">=2.7"
9432+
peerDependenciesMeta:
9433+
"@swc/core":
9434+
optional: true
9435+
"@swc/wasm":
9436+
optional: true
9437+
bin:
9438+
ts-node: dist/bin.js
9439+
ts-node-cwd: dist/bin-cwd.js
9440+
ts-node-esm: dist/bin-esm.js
9441+
ts-node-script: dist/bin-script.js
9442+
ts-node-transpile-only: dist/bin-transpile.js
9443+
ts-script: dist/bin-script-deprecated.js
9444+
checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2
9445+
languageName: node
9446+
linkType: hard
9447+
93329448
"tsconfig-paths@npm:^3.15.0":
93339449
version: 3.15.0
93349450
resolution: "tsconfig-paths@npm:3.15.0"
@@ -9707,6 +9823,13 @@ __metadata:
97079823
languageName: node
97089824
linkType: hard
97099825

9826+
"v8-compile-cache-lib@npm:^3.0.1":
9827+
version: 3.0.1
9828+
resolution: "v8-compile-cache-lib@npm:3.0.1"
9829+
checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391
9830+
languageName: node
9831+
linkType: hard
9832+
97109833
"vite-node@npm:0.34.6":
97119834
version: 0.34.6
97129835
resolution: "vite-node@npm:0.34.6"
@@ -10241,6 +10364,13 @@ __metadata:
1024110364
languageName: node
1024210365
linkType: hard
1024310366

10367+
"yn@npm:3.1.1":
10368+
version: 3.1.1
10369+
resolution: "yn@npm:3.1.1"
10370+
checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443
10371+
languageName: node
10372+
linkType: hard
10373+
1024410374
"yocto-queue@npm:^0.1.0":
1024510375
version: 0.1.0
1024610376
resolution: "yocto-queue@npm:0.1.0"

0 commit comments

Comments
 (0)