Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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