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 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
- if (await stat(nmPath)) {
47
- await rm(nmPath, { recursive: !0, force: !0 });
48
- const localPath = localPackages[pkgName];
49
- console.info(`${relative(process.cwd(), nmPath)} -> ${localPath.replace(homedir(), "~")}`), await symlink(localPath, nmPath, "dir");
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,eAAe;AACrD,SAAS,eAAe;AACxB,SAAS,MAAM,UAAU,eAAe;AAIpC,OAAO,MAAQ,QACjB,QAAQ,MAAM,4CAA4C,GAC1D,QAAQ,KAAK,CAAC;AAGhB,MAAM,aAAa;AAEnB,eAAe,kBAAkB,SAAkD;AACjF,QAAM,UAAkC,CAAC;AAEzC,iBAAe,QAAQ,KAAa;AAClC,QAAI;AACJ,QAAI;AACF,gBAAU,MAAM,QAAQ,GAAG;AAAA,IAC7B,QAAQ;AACN;AAAA,IACF;AAEA,UAAM,QAAQ;AAAA,MACZ,QAAQ,IAAI,OAAO,UAAU;AAC3B,YAAI,UAAU,WAAY;AAC1B,cAAM,WAAW,KAAK,KAAK,KAAK;AAChC,YAAI;AACJ,YAAI;AACF,sBAAY,MAAM,KAAK,QAAQ;AAAA,QACjC,QAAQ;AACN;AAAA,QACF;AACA,YAAI,UAAU,YAAY,GAAG;AAC3B,gBAAM,cAAc,KAAK,UAAU,cAAc;AACjD,cAAI;AAEF,iBADoB,MAAM,KAAK,WAAW,GAC1B,OAAO,GAAG;AACxB,oBAAM,MAAM,MAAM,SAAS,aAAa,OAAO,GACzC,UAAU,KAAK,MAAM,GAAG;AAC9B,cAAI,QAAQ,SACV,QAAQ,QAAQ,IAAI,IAAI;AAAA,YAE5B;AAAA,UACF,QAAQ;AACN,kBAAM,QAAQ,QAAQ;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,eAAM,QAAQ,OAAO,GACd;AACT;AAEA,eAAe,aAAa,eAAuC;AACjE,aAAW,WAAW,OAAO,KAAK,aAAa,GAAG;AAChD,UAAM,SAAS,KAAK,QAAQ,IAAI,GAAG,gBAAgB,GAAG,QAAQ,MAAM,GAAG,CAAC;AACxE,QAAI;AAEF,UADqB,MAAM,KAAK,MAAM,GACpB;AAChB,cAAM,GAAG,QAAQ,EAAE,WAAW,IAAM,OAAO,GAAK,CAAC;AACjD,cAAM,YAAY,cAAc,OAAO;AACvC,gBAAQ,KAAK,GAAG,SAAS,QAAQ,IAAI,GAAG,MAAM,CAAC,OAAO,UAAU,QAAQ,QAAQ,GAAG,GAAG,CAAC,EAAE,GACzF,MAAM,QAAQ,WAAW,QAAQ,KAAK;AAAA,MACxC;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEA,eAAe,OAAO;AACpB,QAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,EAAI,KAAK,WAAW,MAClB,QAAQ,KAAK,oCAAoC,GACjD,QAAQ,KAAK,CAAC;AAEhB,QAAM,mBAA2C,CAAC;AAClD,aAAW,gBAAgB,MAAM;AAC/B,UAAM,WAAW,QAAQ,YAAY,GAC/B,QAAQ,MAAM,kBAAkB,QAAQ;AAC9C,WAAO,OAAO,kBAAkB,KAAK;AAAA,EACvC;AACA,QAAM,aAAa,gBAAgB,GACnC,QAAQ,KAAK;AAAA,iBAAe,OAAO,KAAK,gBAAgB,EAAE,MAAM,WAAW;AAC7E;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,UAAU,GAAG,GAC3B,QAAQ,KAAK,CAAC;AAChB,CAAC;",
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
- if (await stat(nmPath)) {
46
- await rm(nmPath, {
47
- recursive: !0,
48
- force: !0
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),
@@ -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","cwd","split","recursive","force","localPath","info","replace","main","args","argv","slice","length","allLocalPackages","workspaceDir","resolved","found","assign","catch","err"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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.436",
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.123.14"
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 rm(nmPath, { recursive: true, force: true })
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)