lllink 1.1.436 → 1.1.438
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +28 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +30 -6
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { readdir, readFile, stat, rm, symlink } from "node:fs/promises";
|
|
2
|
+
import { readdir, readFile, stat, rm, symlink, rename, mkdir } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { join, relative, resolve } from "node:path";
|
|
5
5
|
typeof Bun > "u" && (console.error("Must run in Bun due to using ~ resolutions"), process.exit(1));
|
|
@@ -40,21 +40,38 @@ async function findLocalPackages(rootDir) {
|
|
|
40
40
|
return await recurse(rootDir), results;
|
|
41
41
|
}
|
|
42
42
|
async function linkPackages(localPackages) {
|
|
43
|
+
const backupDir = join(process.cwd(), "node_modules", ".cache", "lllink", "moved");
|
|
44
|
+
await mkdir(backupDir, { recursive: !0 });
|
|
43
45
|
for (const pkgName of Object.keys(localPackages)) {
|
|
44
46
|
const nmPath = join(process.cwd(), "node_modules", ...pkgName.split("/"));
|
|
45
47
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
48
|
+
const existingStat = await stat(nmPath);
|
|
49
|
+
existingStat && (existingStat.isDirectory() || existingStat.isSymbolicLink()) && await rename(nmPath, join(backupDir, pkgName.replace("/", "__")));
|
|
50
|
+
const localPath = localPackages[pkgName];
|
|
51
|
+
console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), "~")}`), await symlink(localPath, nmPath, "dir");
|
|
51
52
|
} catch {
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
}
|
|
56
|
+
async function undoLinks() {
|
|
57
|
+
const backupDir = join(process.cwd(), "node_modules", ".cache", "lllink", "moved");
|
|
58
|
+
let movedItems;
|
|
59
|
+
try {
|
|
60
|
+
movedItems = await readdir(backupDir);
|
|
61
|
+
} catch {
|
|
62
|
+
console.info("Nothing to undo.");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
for (const item of movedItems) {
|
|
66
|
+
const originalName = item.replace("__", "/"), nmPath = join(process.cwd(), "node_modules", ...originalName.split("/"));
|
|
67
|
+
await rm(nmPath, { recursive: !0, force: !0 }).catch(() => {
|
|
68
|
+
}), await rename(join(backupDir, item), nmPath).catch(() => {
|
|
69
|
+
}), console.info(`Restored: ${originalName}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
55
72
|
async function main() {
|
|
56
73
|
const args = process.argv.slice(2);
|
|
57
|
-
args.length === 0 && (console.info("No workspace directories provided."), process.exit(0));
|
|
74
|
+
args.includes("--unlink") && (await undoLinks(), process.exit(0)), args.length === 0 && (console.info("No workspace directories provided."), process.exit(0));
|
|
58
75
|
const allLocalPackages = {};
|
|
59
76
|
for (const workspaceDir of args) {
|
|
60
77
|
const resolved = resolve(workspaceDir), found = await findLocalPackages(resolved);
|
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";AAOA,SAAS,SAAS,UAAU,MAAM,IAAI,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import { readdir, readFile, stat, rm, symlink } from "node:fs/promises";
|
|
2
|
+
import { readdir, readFile, stat, rm, symlink, rename, mkdir } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { join, relative, resolve } from "node:path";
|
|
5
5
|
typeof Bun > "u" && (console.error("Must run in Bun due to using ~ resolutions"), process.exit(1));
|
|
@@ -39,23 +39,41 @@ async function findLocalPackages(rootDir) {
|
|
|
39
39
|
return await recurse(rootDir), results;
|
|
40
40
|
}
|
|
41
41
|
async function linkPackages(localPackages) {
|
|
42
|
+
const backupDir = join(process.cwd(), "node_modules", ".cache", "lllink", "moved");
|
|
43
|
+
await mkdir(backupDir, {
|
|
44
|
+
recursive: !0
|
|
45
|
+
});
|
|
42
46
|
for (const pkgName of Object.keys(localPackages)) {
|
|
43
47
|
const nmPath = join(process.cwd(), "node_modules", ...pkgName.split("/"));
|
|
44
48
|
try {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
-
const localPath = localPackages[pkgName];
|
|
51
|
-
console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), "~")}`), await symlink(localPath, nmPath, "dir");
|
|
52
|
-
}
|
|
49
|
+
const existingStat = await stat(nmPath);
|
|
50
|
+
existingStat && (existingStat.isDirectory() || existingStat.isSymbolicLink()) && (await rename(nmPath, join(backupDir, pkgName.replace("/", "__"))));
|
|
51
|
+
const localPath = localPackages[pkgName];
|
|
52
|
+
console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), "~")}`), await symlink(localPath, nmPath, "dir");
|
|
53
53
|
} catch {}
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
+
async function undoLinks() {
|
|
57
|
+
const backupDir = join(process.cwd(), "node_modules", ".cache", "lllink", "moved");
|
|
58
|
+
let movedItems;
|
|
59
|
+
try {
|
|
60
|
+
movedItems = await readdir(backupDir);
|
|
61
|
+
} catch {
|
|
62
|
+
console.info("Nothing to undo.");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
for (const item of movedItems) {
|
|
66
|
+
const originalName = item.replace("__", "/"),
|
|
67
|
+
nmPath = join(process.cwd(), "node_modules", ...originalName.split("/"));
|
|
68
|
+
await rm(nmPath, {
|
|
69
|
+
recursive: !0,
|
|
70
|
+
force: !0
|
|
71
|
+
}).catch(() => {}), await rename(join(backupDir, item), nmPath).catch(() => {}), console.info(`Restored: ${originalName}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
56
74
|
async function main() {
|
|
57
75
|
const args = process.argv.slice(2);
|
|
58
|
-
args.length === 0 && (console.info("No workspace directories provided."), process.exit(0));
|
|
76
|
+
args.includes("--unlink") && (await undoLinks(), process.exit(0)), args.length === 0 && (console.info("No workspace directories provided."), process.exit(0));
|
|
59
77
|
const allLocalPackages = {};
|
|
60
78
|
for (const workspaceDir of args) {
|
|
61
79
|
const resolved = resolve(workspaceDir),
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["readdir","readFile","stat","rm","symlink","homedir","join","relative","resolve","Bun","console","error","process","exit","IGNORE_DIR","findLocalPackages","rootDir","results","recurse","dir","entries","Promise","all","map","entry","fullPath","entryStat","isDirectory","pkgJsonPath","isFile","raw","pkgData","JSON","parse","name","linkPackages","localPackages","pkgName","Object","keys","nmPath","
|
|
1
|
+
{"version":3,"names":["readdir","readFile","stat","rm","symlink","rename","mkdir","homedir","join","relative","resolve","Bun","console","error","process","exit","IGNORE_DIR","findLocalPackages","rootDir","results","recurse","dir","entries","Promise","all","map","entry","fullPath","entryStat","isDirectory","pkgJsonPath","isFile","raw","pkgData","JSON","parse","name","linkPackages","localPackages","backupDir","cwd","recursive","pkgName","Object","keys","nmPath","split","existingStat","isSymbolicLink","replace","localPath","info","undoLinks","movedItems","item","originalName","force","catch","main","args","argv","slice","includes","length","allLocalPackages","workspaceDir","resolved","found","assign","err"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lllink",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.438",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "dist",
|
|
6
6
|
"exports": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@biomejs/biome": "^1.8.3",
|
|
26
|
-
"@tamagui/build": "^1.
|
|
26
|
+
"@tamagui/build": "^1.124.6"
|
|
27
27
|
},
|
|
28
28
|
"publishConfig": {
|
|
29
29
|
"access": "public"
|
package/src/index.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* bun run link-workspaces.ts <workspaceDir1> <workspaceDir2> ...
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { readdir, readFile, stat, rm, symlink } from 'node:fs/promises'
|
|
8
|
+
import { readdir, readFile, stat, rm, symlink, rename, mkdir } from 'node:fs/promises'
|
|
9
9
|
import { homedir } from 'node:os'
|
|
10
10
|
import { join, relative, resolve } from 'node:path'
|
|
11
11
|
|
|
@@ -63,22 +63,46 @@ async function findLocalPackages(rootDir: string): Promise<Record<string, string
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
async function linkPackages(localPackages: Record<string, string>) {
|
|
66
|
+
const backupDir = join(process.cwd(), 'node_modules', '.cache', 'lllink', 'moved')
|
|
67
|
+
await mkdir(backupDir, { recursive: true })
|
|
66
68
|
for (const pkgName of Object.keys(localPackages)) {
|
|
67
69
|
const nmPath = join(process.cwd(), 'node_modules', ...pkgName.split('/'))
|
|
68
70
|
try {
|
|
69
71
|
const existingStat = await stat(nmPath)
|
|
70
|
-
if (existingStat) {
|
|
71
|
-
await
|
|
72
|
-
const localPath = localPackages[pkgName]
|
|
73
|
-
console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), '~')}`)
|
|
74
|
-
await symlink(localPath, nmPath, 'dir')
|
|
72
|
+
if (existingStat && (existingStat.isDirectory() || existingStat.isSymbolicLink())) {
|
|
73
|
+
await rename(nmPath, join(backupDir, pkgName.replace('/', '__')))
|
|
75
74
|
}
|
|
75
|
+
const localPath = localPackages[pkgName]
|
|
76
|
+
console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), '~')}`)
|
|
77
|
+
await symlink(localPath, nmPath, 'dir')
|
|
76
78
|
} catch {}
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
|
|
82
|
+
async function undoLinks() {
|
|
83
|
+
const backupDir = join(process.cwd(), 'node_modules', '.cache', 'lllink', 'moved')
|
|
84
|
+
let movedItems: string[]
|
|
85
|
+
try {
|
|
86
|
+
movedItems = await readdir(backupDir)
|
|
87
|
+
} catch {
|
|
88
|
+
console.info('Nothing to undo.')
|
|
89
|
+
return
|
|
90
|
+
}
|
|
91
|
+
for (const item of movedItems) {
|
|
92
|
+
const originalName = item.replace('__', '/')
|
|
93
|
+
const nmPath = join(process.cwd(), 'node_modules', ...originalName.split('/'))
|
|
94
|
+
await rm(nmPath, { recursive: true, force: true }).catch(() => {})
|
|
95
|
+
await rename(join(backupDir, item), nmPath).catch(() => {})
|
|
96
|
+
console.info(`Restored: ${originalName}`)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
80
100
|
async function main() {
|
|
81
101
|
const args = process.argv.slice(2)
|
|
102
|
+
if (args.includes('--unlink')) {
|
|
103
|
+
await undoLinks()
|
|
104
|
+
process.exit(0)
|
|
105
|
+
}
|
|
82
106
|
if (args.length === 0) {
|
|
83
107
|
console.info('No workspace directories provided.')
|
|
84
108
|
process.exit(0)
|