* Switch shared-components from yarn classic to pnpm Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch element-web from yarn classic to pnpm Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch CI to pnpm Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update docs & comments Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Hold back postcss to match yarn.lock & use workspace protocol Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Tweak CI Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Rid the world of `$(res)` Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch to type=module Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix module import Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Make knip happy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update playwright imports Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Make docker build happy Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Remove stale params Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix badly formatted logging Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch to lodash-es Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Make jest happier Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Switch element-web to ESM Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update testcontainers imports Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix modernizr cjs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix modernizr cjs ignore files Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Move modernizr sonar exclusion to exclude everything Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update playwright tests for esm compat Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add pnpm-link utility Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Test matrix-web-i18n Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Discard changes to src/vector/index.ts * Update playwright-common Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Use catalogs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve pnpm-link script Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Use pnpm import to regenerate lockfile from yarn.lock Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
59 lines
2.2 KiB
JavaScript
Executable File
59 lines
2.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/*
|
|
Copyright 2026 Element Creations Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
// Utility script to mimic yarn classic `link` behaviour
|
|
// to enable rapid development of libraries like matrix-js-sdk using symlinks/directory junctions
|
|
// reads .link-config file for DEPENDENCY=PATH values and removes those dependencies from node_modules,
|
|
// replacing them with a symlink/directory junction.
|
|
// This tool is a helpful substitute to `pnpm link` as that modifies the package.json & pnpm-lock.yaml files.
|
|
|
|
import fs from "node:fs/promises";
|
|
import { join, dirname } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { execSync } from "node:child_process";
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const configPath = join(__dirname, "..", ".link-config");
|
|
const nodeModulesPath = join(__dirname, "..", "node_modules");
|
|
|
|
try {
|
|
const configFile = await fs.readFile(configPath, "utf-8");
|
|
for (const line of configFile.trim().split("\n")) {
|
|
const [dependency, path] = line.split("=");
|
|
const dependencyPath = join(nodeModulesPath, dependency);
|
|
|
|
try {
|
|
const stat = await fs.stat(dependencyPath);
|
|
if (stat.isSymbolicLink()) {
|
|
const linkPath = await fs.readlink(dependencyPath);
|
|
if (linkPath === path) {
|
|
// already done
|
|
continue;
|
|
} else {
|
|
await fs.unlink(dependencyPath);
|
|
}
|
|
} else {
|
|
await fs.rm(dependencyPath, { recursive: true });
|
|
}
|
|
|
|
console.log(`Linking ${dependency} to ${path}`);
|
|
await fs.symlink(path, dependencyPath);
|
|
|
|
// pnpm install may have wiped out the `node_modules` dir so we have to restore it
|
|
execSync("pnpm i --ignore-scripts --frozen-lockfile", {
|
|
cwd: dependencyPath,
|
|
});
|
|
} catch (e) {
|
|
console.error(`Failed to link ${dependency}`, e);
|
|
}
|
|
}
|
|
} catch {
|
|
// Ignore config file not existing
|
|
}
|