Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@
"coverage": "vitest run --coverage",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"deploy-storybook": "gh-pages -d storybook-static"
"deploy-storybook": "gh-pages -d storybook-static",
"sync-to-compass": "ts-node scripts/sync-to-compass.ts"
},
"dependencies": {
"@emotion/react": "^11.14.0",
Expand Down Expand Up @@ -94,6 +95,7 @@
"jsdom": "20.0.3",
"prettier": "3.6.2",
"storybook": "^9.0.10",
"ts-node": "^10.9.2",
"typescript": "^5.7.3",
"vite": "6.3.5",
"vite-plugin-css-injected-by-js": "^3.5.2",
Expand Down
106 changes: 106 additions & 0 deletions scripts/sync-to-compass.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/usr/bin/env ts-node

/* eslint-disable no-console */
const fs = require('fs');
const path = require('path');
const child_process = require('child_process');

// This script is used to sync the built diagramming package
// to the local Compass to test while developing.

// For why we don't use npm link see:
// https://github.com/mongodb-js/compass/blob/117c32f8ddd5d2bf4f8fceec5b324bf9866de66e/packages/compass-web/scripts/sync-dist-to-mms.js#L47-L52

if (!process.env.COMPASS_HOME) {
throw new Error('Missing required environment variable $COMPASS_HOME.');
}

const packageDir = path.resolve(__dirname, '..');
const srcDir = path.resolve(__dirname, '..', 'src');
const libDir = path.resolve(__dirname, '..', 'dist');

const destDir = path.dirname(
child_process.execFileSync('node', ['-p', "require.resolve('@mongodb-js/diagramming')"], {
cwd: process.env.COMPASS_HOME,
encoding: 'utf-8',
}),
);

console.log({ packageDir, srcDir, libDir, destDir });
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

leftover?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found it a bit useful as a way to double check what was changed. Happy to remove it if you find it to be some extra noise.


function debounce<T extends () => void>(
fn: T,
delay: number,
options: { leading?: boolean; trailing?: boolean } = {},
): () => void {
let timeoutId: NodeJS.Timeout | null = null;
let lastArgs: Parameters<T> | null = null;

return function (this: ThisParameterType<T>, ...args: Parameters<T>) {
lastArgs = args;

const executeCall = () => {
fn.apply(this, lastArgs as Parameters<T>);
timeoutId = null;
};

if (timeoutId === null && options.leading) {
executeCall();
}

if (timeoutId) {
clearTimeout(timeoutId);
}

if (options.trailing !== false) {
timeoutId = setTimeout(executeCall, delay);
}
};
}

const compileAndCopy = debounce(
() => {
try {
child_process.execFileSync('yarn', ['build'], {
cwd: packageDir,
encoding: 'utf-8',
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (err: any) {
if (err.code) {
// Spawning child process failed.
console.error(err.code);
} else {
// Child was spawned but exited with non-zero exit code.
// Error contains any stdout and stderr from the child.
const { stdout, stderr } = err;

console.log(stdout);
console.error(stderr);
}
}
fs.cpSync(libDir, destDir, { recursive: true });
console.log('done.');
},
1_000,
{
leading: true,
trailing: true,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why both?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why-not-both-why-not

Copy link
Member Author

@Anemy Anemy Aug 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a bit quicker when updating one file and then also covers when updating a lot quickly. If we find it refreshing Compass twice we can move it to only be trailing, I'm thinking let's keep an eye on it.

},
);

const srcWatcher = fs.watch(srcDir, { recursive: true }, (eventType: string, filename: string) => {
console.log(eventType, filename);
compileAndCopy();
});

function cleanup() {
srcWatcher.close();
}

for (const evt of ['SIGINT', 'SIGTERM']) {
process.on(evt, cleanup);
}

// Run an initial copy on startup.
compileAndCopy();
136 changes: 133 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,15 @@ __metadata:
languageName: node
linkType: hard

"@cspotcode/source-map-support@npm:^0.8.0":
version: 0.8.1
resolution: "@cspotcode/source-map-support@npm:0.8.1"
dependencies:
"@jridgewell/trace-mapping": "npm:0.3.9"
checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6
languageName: node
linkType: hard

"@cush/relative@npm:^1.0.0":
version: 1.0.0
resolution: "@cush/relative@npm:1.0.0"
Expand Down Expand Up @@ -1072,7 +1081,7 @@ __metadata:
languageName: node
linkType: hard

"@jridgewell/resolve-uri@npm:^3.1.0":
"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0":
version: 3.1.2
resolution: "@jridgewell/resolve-uri@npm:3.1.2"
checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e
Expand All @@ -1093,6 +1102,16 @@ __metadata:
languageName: node
linkType: hard

"@jridgewell/trace-mapping@npm:0.3.9":
version: 0.3.9
resolution: "@jridgewell/trace-mapping@npm:0.3.9"
dependencies:
"@jridgewell/resolve-uri": "npm:^3.0.3"
"@jridgewell/sourcemap-codec": "npm:^1.4.10"
checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b
languageName: node
linkType: hard

"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
version: 0.3.25
resolution: "@jridgewell/trace-mapping@npm:0.3.25"
Expand Down Expand Up @@ -1341,6 +1360,7 @@ __metadata:
react: "npm:17.0.2"
react-dom: "npm:17.0.2"
storybook: "npm:^9.0.10"
ts-node: "npm:^10.9.2"
typescript: "npm:^5.7.3"
vite: "npm:6.3.5"
vite-plugin-css-injected-by-js: "npm:^3.5.2"
Expand Down Expand Up @@ -2144,6 +2164,34 @@ __metadata:
languageName: node
linkType: hard

"@tsconfig/node10@npm:^1.0.7":
version: 1.0.11
resolution: "@tsconfig/node10@npm:1.0.11"
checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c
languageName: node
linkType: hard

"@tsconfig/node12@npm:^1.0.7":
version: 1.0.11
resolution: "@tsconfig/node12@npm:1.0.11"
checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9
languageName: node
linkType: hard

"@tsconfig/node14@npm:^1.0.0":
version: 1.0.3
resolution: "@tsconfig/node14@npm:1.0.3"
checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44
languageName: node
linkType: hard

"@tsconfig/node16@npm:^1.0.2":
version: 1.0.4
resolution: "@tsconfig/node16@npm:1.0.4"
checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb
languageName: node
linkType: hard

"@tybys/wasm-util@npm:^0.9.0":
version: 0.9.0
resolution: "@tybys/wasm-util@npm:0.9.0"
Expand Down Expand Up @@ -3214,7 +3262,7 @@ __metadata:
languageName: node
linkType: hard

"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.2.0":
"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0":
version: 8.3.4
resolution: "acorn-walk@npm:8.3.4"
dependencies:
Expand All @@ -3232,6 +3280,15 @@ __metadata:
languageName: node
linkType: hard

"acorn@npm:^8.4.1":
version: 8.15.0
resolution: "acorn@npm:8.15.0"
bin:
acorn: bin/acorn
checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec
languageName: node
linkType: hard

"agent-base@npm:6":
version: 6.0.2
resolution: "agent-base@npm:6.0.2"
Expand Down Expand Up @@ -3373,6 +3430,13 @@ __metadata:
languageName: node
linkType: hard

"arg@npm:^4.1.0":
version: 4.1.3
resolution: "arg@npm:4.1.3"
checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a
languageName: node
linkType: hard

"argparse@npm:^2.0.1":
version: 2.0.1
resolution: "argparse@npm:2.0.1"
Expand Down Expand Up @@ -4155,7 +4219,7 @@ __metadata:
languageName: node
linkType: hard

"create-require@npm:^1.1.1":
"create-require@npm:^1.1.0, create-require@npm:^1.1.1":
version: 1.1.1
resolution: "create-require@npm:1.1.1"
checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91
Expand Down Expand Up @@ -4512,6 +4576,13 @@ __metadata:
languageName: node
linkType: hard

"diff@npm:^4.0.1":
version: 4.0.2
resolution: "diff@npm:4.0.2"
checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1
languageName: node
linkType: hard

"diffie-hellman@npm:^5.0.3":
version: 5.0.3
resolution: "diffie-hellman@npm:5.0.3"
Expand Down Expand Up @@ -7004,6 +7075,13 @@ __metadata:
languageName: node
linkType: hard

"make-error@npm:^1.1.1":
version: 1.3.6
resolution: "make-error@npm:1.3.6"
checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f
languageName: node
linkType: hard

"make-fetch-happen@npm:^14.0.3":
version: 14.0.3
resolution: "make-fetch-happen@npm:14.0.3"
Expand Down Expand Up @@ -9329,6 +9407,44 @@ __metadata:
languageName: node
linkType: hard

"ts-node@npm:^10.9.2":
version: 10.9.2
resolution: "ts-node@npm:10.9.2"
dependencies:
"@cspotcode/source-map-support": "npm:^0.8.0"
"@tsconfig/node10": "npm:^1.0.7"
"@tsconfig/node12": "npm:^1.0.7"
"@tsconfig/node14": "npm:^1.0.0"
"@tsconfig/node16": "npm:^1.0.2"
acorn: "npm:^8.4.1"
acorn-walk: "npm:^8.1.1"
arg: "npm:^4.1.0"
create-require: "npm:^1.1.0"
diff: "npm:^4.0.1"
make-error: "npm:^1.1.1"
v8-compile-cache-lib: "npm:^3.0.1"
yn: "npm:3.1.1"
peerDependencies:
"@swc/core": ">=1.2.50"
"@swc/wasm": ">=1.2.50"
"@types/node": "*"
typescript: ">=2.7"
peerDependenciesMeta:
"@swc/core":
optional: true
"@swc/wasm":
optional: true
bin:
ts-node: dist/bin.js
ts-node-cwd: dist/bin-cwd.js
ts-node-esm: dist/bin-esm.js
ts-node-script: dist/bin-script.js
ts-node-transpile-only: dist/bin-transpile.js
ts-script: dist/bin-script-deprecated.js
checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2
languageName: node
linkType: hard

"tsconfig-paths@npm:^3.15.0":
version: 3.15.0
resolution: "tsconfig-paths@npm:3.15.0"
Expand Down Expand Up @@ -9707,6 +9823,13 @@ __metadata:
languageName: node
linkType: hard

"v8-compile-cache-lib@npm:^3.0.1":
version: 3.0.1
resolution: "v8-compile-cache-lib@npm:3.0.1"
checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391
languageName: node
linkType: hard

"vite-node@npm:0.34.6":
version: 0.34.6
resolution: "vite-node@npm:0.34.6"
Expand Down Expand Up @@ -10241,6 +10364,13 @@ __metadata:
languageName: node
linkType: hard

"yn@npm:3.1.1":
version: 3.1.1
resolution: "yn@npm:3.1.1"
checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443
languageName: node
linkType: hard

"yocto-queue@npm:^0.1.0":
version: 0.1.0
resolution: "yocto-queue@npm:0.1.0"
Expand Down