@xylabs/ts-scripts-pnpm 7.5.0
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.d.ts +19 -0
- package/dist/index.mjs +68 -0
- package/dist/index.mjs.map +1 -0
- package/dist/pm/index.mjs +62 -0
- package/dist/pm/index.mjs.map +1 -0
- package/dist/pm/pnpmPackageManager.mjs +62 -0
- package/dist/pm/pnpmPackageManager.mjs.map +1 -0
- package/package.json +55 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PackageManager, ScriptStep, Workspace, WorkspaceForeachOptions } from '@xylabs/ts-scripts-common';
|
|
2
|
+
|
|
3
|
+
declare class PnpmPackageManager implements PackageManager {
|
|
4
|
+
readonly command = "pnpm";
|
|
5
|
+
readonly lockfile = "pnpm-lock.yaml";
|
|
6
|
+
readonly name: "pnpm";
|
|
7
|
+
dedupe(): ScriptStep;
|
|
8
|
+
findWorkspace(name: string): Workspace | undefined;
|
|
9
|
+
foreachWorkspace(script: string, args?: string[], options?: WorkspaceForeachOptions): ScriptStep;
|
|
10
|
+
install(): ScriptStep;
|
|
11
|
+
listWorkspaces(): Workspace[];
|
|
12
|
+
outdated(): ScriptStep;
|
|
13
|
+
runInWorkspace(pkg: string, script: string, args?: string[]): ScriptStep;
|
|
14
|
+
runXy(args: string[]): ScriptStep;
|
|
15
|
+
versionApply(): ScriptStep;
|
|
16
|
+
versionBump(type: 'major' | 'minor' | 'patch' | 'prerelease'): ScriptStep[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { PnpmPackageManager };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { registerPackageManager } from "@xylabs/ts-scripts-common";
|
|
3
|
+
|
|
4
|
+
// src/pm/pnpmPackageManager.ts
|
|
5
|
+
import { spawnSync } from "child_process";
|
|
6
|
+
var PnpmPackageManager = class {
|
|
7
|
+
command = "pnpm";
|
|
8
|
+
lockfile = "pnpm-lock.yaml";
|
|
9
|
+
name = "pnpm";
|
|
10
|
+
dedupe() {
|
|
11
|
+
return ["pnpm", ["dedupe"]];
|
|
12
|
+
}
|
|
13
|
+
findWorkspace(name) {
|
|
14
|
+
return this.listWorkspaces().find((ws) => ws.name === name);
|
|
15
|
+
}
|
|
16
|
+
foreachWorkspace(script, args = [], options) {
|
|
17
|
+
const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : [];
|
|
18
|
+
const filter = options?.incremental ? ["--filter", "...[HEAD~1]"] : [];
|
|
19
|
+
return ["pnpm", ["-r", ...concurrency, ...filter, "run", script, ...args]];
|
|
20
|
+
}
|
|
21
|
+
install() {
|
|
22
|
+
return ["pnpm", ["install"]];
|
|
23
|
+
}
|
|
24
|
+
listWorkspaces() {
|
|
25
|
+
const result = spawnSync("pnpm", ["list", "--recursive", "--json", "--depth=0"], {
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
shell: true
|
|
28
|
+
});
|
|
29
|
+
if (result.error) {
|
|
30
|
+
throw result.error;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(result.stdout);
|
|
34
|
+
if (Array.isArray(parsed)) {
|
|
35
|
+
return parsed.map((pkg) => ({
|
|
36
|
+
location: pkg.path,
|
|
37
|
+
name: pkg.name
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
} catch {
|
|
41
|
+
}
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
outdated() {
|
|
45
|
+
return ["pnpm", ["outdated", "-r"]];
|
|
46
|
+
}
|
|
47
|
+
runInWorkspace(pkg, script, args = []) {
|
|
48
|
+
return ["pnpm", ["--filter", pkg, "run", script, ...args]];
|
|
49
|
+
}
|
|
50
|
+
runXy(args) {
|
|
51
|
+
return ["pnpm", ["xy", ...args]];
|
|
52
|
+
}
|
|
53
|
+
versionApply() {
|
|
54
|
+
return ["pnpm", ["install", "--lockfile-only"]];
|
|
55
|
+
}
|
|
56
|
+
versionBump(type) {
|
|
57
|
+
return [
|
|
58
|
+
["pnpm", ["-r", "exec", "--", "npm", "version", type, "--no-git-tag-version"]]
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/index.ts
|
|
64
|
+
registerPackageManager(new PnpmPackageManager());
|
|
65
|
+
export {
|
|
66
|
+
PnpmPackageManager
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/pm/pnpmPackageManager.ts"],"sourcesContent":["import { registerPackageManager } from '@xylabs/ts-scripts-common'\n\nimport { PnpmPackageManager } from './pm/index.ts'\n\nexport { PnpmPackageManager } from './pm/index.ts'\n\n// Auto-register on import\nregisterPackageManager(new PnpmPackageManager())\n","import { spawnSync } from 'node:child_process'\n\nimport type {\n PackageManager, ScriptStep, Workspace, WorkspaceForeachOptions,\n} from '@xylabs/ts-scripts-common'\n\nexport class PnpmPackageManager implements PackageManager {\n readonly command = 'pnpm'\n readonly lockfile = 'pnpm-lock.yaml'\n readonly name = 'pnpm' as const\n\n dedupe(): ScriptStep {\n return ['pnpm', ['dedupe']]\n }\n\n findWorkspace(name: string): Workspace | undefined {\n return this.listWorkspaces().find(ws => ws.name === name)\n }\n\n foreachWorkspace(script: string, args: string[] = [], options?: WorkspaceForeachOptions): ScriptStep {\n const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : []\n const filter = options?.incremental ? ['--filter', '...[HEAD~1]'] : []\n return ['pnpm', ['-r', ...concurrency, ...filter, 'run', script, ...args]]\n }\n\n install(): ScriptStep {\n return ['pnpm', ['install']]\n }\n\n listWorkspaces(): Workspace[] {\n const result = spawnSync('pnpm', ['list', '--recursive', '--json', '--depth=0'], {\n encoding: 'utf8',\n shell: true,\n })\n if (result.error) {\n throw result.error\n }\n try {\n const parsed = JSON.parse(result.stdout)\n if (Array.isArray(parsed)) {\n return parsed.map((pkg: { name: string; path: string }) => ({\n location: pkg.path,\n name: pkg.name,\n }))\n }\n } catch {\n // fallback for unexpected output\n }\n return []\n }\n\n outdated(): ScriptStep {\n return ['pnpm', ['outdated', '-r']]\n }\n\n runInWorkspace(pkg: string, script: string, args: string[] = []): ScriptStep {\n return ['pnpm', ['--filter', pkg, 'run', script, ...args]]\n }\n\n runXy(args: string[]): ScriptStep {\n return ['pnpm', ['xy', ...args]]\n }\n\n versionApply(): ScriptStep {\n // pnpm doesn't have a deferred version apply — versions are applied in bump\n return ['pnpm', ['install', '--lockfile-only']]\n }\n\n versionBump(type: 'major' | 'minor' | 'patch' | 'prerelease'): ScriptStep[] {\n return [\n ['pnpm', ['-r', 'exec', '--', 'npm', 'version', type, '--no-git-tag-version']],\n ]\n }\n}\n"],"mappings":";AAAA,SAAS,8BAA8B;;;ACAvC,SAAS,iBAAiB;AAMnB,IAAM,qBAAN,MAAmD;AAAA,EAC/C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EAEhB,SAAqB;AACnB,WAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAA,EAC5B;AAAA,EAEA,cAAc,MAAqC;AACjD,WAAO,KAAK,eAAe,EAAE,KAAK,QAAM,GAAG,SAAS,IAAI;AAAA,EAC1D;AAAA,EAEA,iBAAiB,QAAgB,OAAiB,CAAC,GAAG,SAA+C;AACnG,UAAM,cAAc,SAAS,OAAO,CAAC,2BAA2B,QAAQ,IAAI,EAAE,IAAI,CAAC;AACnF,UAAM,SAAS,SAAS,cAAc,CAAC,YAAY,aAAa,IAAI,CAAC;AACrE,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,QAAQ,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3E;AAAA,EAEA,UAAsB;AACpB,WAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAA,EAC7B;AAAA,EAEA,iBAA8B;AAC5B,UAAM,SAAS,UAAU,QAAQ,CAAC,QAAQ,eAAe,UAAU,WAAW,GAAG;AAAA,MAC/E,UAAU;AAAA,MACV,OAAO;AAAA,IACT,CAAC;AACD,QAAI,OAAO,OAAO;AAChB,YAAM,OAAO;AAAA,IACf;AACA,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,OAAO,MAAM;AACvC,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,eAAO,OAAO,IAAI,CAAC,SAAyC;AAAA,UAC1D,UAAU,IAAI;AAAA,UACd,MAAM,IAAI;AAAA,QACZ,EAAE;AAAA,MACJ;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,WAAuB;AACrB,WAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC;AAAA,EACpC;AAAA,EAEA,eAAe,KAAa,QAAgB,OAAiB,CAAC,GAAe;AAC3E,WAAO,CAAC,QAAQ,CAAC,YAAY,KAAK,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,MAA4B;AAChC,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAAA,EACjC;AAAA,EAEA,eAA2B;AAEzB,WAAO,CAAC,QAAQ,CAAC,WAAW,iBAAiB,CAAC;AAAA,EAChD;AAAA,EAEA,YAAY,MAAgE;AAC1E,WAAO;AAAA,MACL,CAAC,QAAQ,CAAC,MAAM,QAAQ,MAAM,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAAA,IAC/E;AAAA,EACF;AACF;;;ADlEA,uBAAuB,IAAI,mBAAmB,CAAC;","names":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// src/pm/pnpmPackageManager.ts
|
|
2
|
+
import { spawnSync } from "child_process";
|
|
3
|
+
var PnpmPackageManager = class {
|
|
4
|
+
command = "pnpm";
|
|
5
|
+
lockfile = "pnpm-lock.yaml";
|
|
6
|
+
name = "pnpm";
|
|
7
|
+
dedupe() {
|
|
8
|
+
return ["pnpm", ["dedupe"]];
|
|
9
|
+
}
|
|
10
|
+
findWorkspace(name) {
|
|
11
|
+
return this.listWorkspaces().find((ws) => ws.name === name);
|
|
12
|
+
}
|
|
13
|
+
foreachWorkspace(script, args = [], options) {
|
|
14
|
+
const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : [];
|
|
15
|
+
const filter = options?.incremental ? ["--filter", "...[HEAD~1]"] : [];
|
|
16
|
+
return ["pnpm", ["-r", ...concurrency, ...filter, "run", script, ...args]];
|
|
17
|
+
}
|
|
18
|
+
install() {
|
|
19
|
+
return ["pnpm", ["install"]];
|
|
20
|
+
}
|
|
21
|
+
listWorkspaces() {
|
|
22
|
+
const result = spawnSync("pnpm", ["list", "--recursive", "--json", "--depth=0"], {
|
|
23
|
+
encoding: "utf8",
|
|
24
|
+
shell: true
|
|
25
|
+
});
|
|
26
|
+
if (result.error) {
|
|
27
|
+
throw result.error;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(result.stdout);
|
|
31
|
+
if (Array.isArray(parsed)) {
|
|
32
|
+
return parsed.map((pkg) => ({
|
|
33
|
+
location: pkg.path,
|
|
34
|
+
name: pkg.name
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
outdated() {
|
|
42
|
+
return ["pnpm", ["outdated", "-r"]];
|
|
43
|
+
}
|
|
44
|
+
runInWorkspace(pkg, script, args = []) {
|
|
45
|
+
return ["pnpm", ["--filter", pkg, "run", script, ...args]];
|
|
46
|
+
}
|
|
47
|
+
runXy(args) {
|
|
48
|
+
return ["pnpm", ["xy", ...args]];
|
|
49
|
+
}
|
|
50
|
+
versionApply() {
|
|
51
|
+
return ["pnpm", ["install", "--lockfile-only"]];
|
|
52
|
+
}
|
|
53
|
+
versionBump(type) {
|
|
54
|
+
return [
|
|
55
|
+
["pnpm", ["-r", "exec", "--", "npm", "version", type, "--no-git-tag-version"]]
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
PnpmPackageManager
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pm/pnpmPackageManager.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process'\n\nimport type {\n PackageManager, ScriptStep, Workspace, WorkspaceForeachOptions,\n} from '@xylabs/ts-scripts-common'\n\nexport class PnpmPackageManager implements PackageManager {\n readonly command = 'pnpm'\n readonly lockfile = 'pnpm-lock.yaml'\n readonly name = 'pnpm' as const\n\n dedupe(): ScriptStep {\n return ['pnpm', ['dedupe']]\n }\n\n findWorkspace(name: string): Workspace | undefined {\n return this.listWorkspaces().find(ws => ws.name === name)\n }\n\n foreachWorkspace(script: string, args: string[] = [], options?: WorkspaceForeachOptions): ScriptStep {\n const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : []\n const filter = options?.incremental ? ['--filter', '...[HEAD~1]'] : []\n return ['pnpm', ['-r', ...concurrency, ...filter, 'run', script, ...args]]\n }\n\n install(): ScriptStep {\n return ['pnpm', ['install']]\n }\n\n listWorkspaces(): Workspace[] {\n const result = spawnSync('pnpm', ['list', '--recursive', '--json', '--depth=0'], {\n encoding: 'utf8',\n shell: true,\n })\n if (result.error) {\n throw result.error\n }\n try {\n const parsed = JSON.parse(result.stdout)\n if (Array.isArray(parsed)) {\n return parsed.map((pkg: { name: string; path: string }) => ({\n location: pkg.path,\n name: pkg.name,\n }))\n }\n } catch {\n // fallback for unexpected output\n }\n return []\n }\n\n outdated(): ScriptStep {\n return ['pnpm', ['outdated', '-r']]\n }\n\n runInWorkspace(pkg: string, script: string, args: string[] = []): ScriptStep {\n return ['pnpm', ['--filter', pkg, 'run', script, ...args]]\n }\n\n runXy(args: string[]): ScriptStep {\n return ['pnpm', ['xy', ...args]]\n }\n\n versionApply(): ScriptStep {\n // pnpm doesn't have a deferred version apply — versions are applied in bump\n return ['pnpm', ['install', '--lockfile-only']]\n }\n\n versionBump(type: 'major' | 'minor' | 'patch' | 'prerelease'): ScriptStep[] {\n return [\n ['pnpm', ['-r', 'exec', '--', 'npm', 'version', type, '--no-git-tag-version']],\n ]\n }\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAMnB,IAAM,qBAAN,MAAmD;AAAA,EAC/C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EAEhB,SAAqB;AACnB,WAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAA,EAC5B;AAAA,EAEA,cAAc,MAAqC;AACjD,WAAO,KAAK,eAAe,EAAE,KAAK,QAAM,GAAG,SAAS,IAAI;AAAA,EAC1D;AAAA,EAEA,iBAAiB,QAAgB,OAAiB,CAAC,GAAG,SAA+C;AACnG,UAAM,cAAc,SAAS,OAAO,CAAC,2BAA2B,QAAQ,IAAI,EAAE,IAAI,CAAC;AACnF,UAAM,SAAS,SAAS,cAAc,CAAC,YAAY,aAAa,IAAI,CAAC;AACrE,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,QAAQ,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3E;AAAA,EAEA,UAAsB;AACpB,WAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAA,EAC7B;AAAA,EAEA,iBAA8B;AAC5B,UAAM,SAAS,UAAU,QAAQ,CAAC,QAAQ,eAAe,UAAU,WAAW,GAAG;AAAA,MAC/E,UAAU;AAAA,MACV,OAAO;AAAA,IACT,CAAC;AACD,QAAI,OAAO,OAAO;AAChB,YAAM,OAAO;AAAA,IACf;AACA,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,OAAO,MAAM;AACvC,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,eAAO,OAAO,IAAI,CAAC,SAAyC;AAAA,UAC1D,UAAU,IAAI;AAAA,UACd,MAAM,IAAI;AAAA,QACZ,EAAE;AAAA,MACJ;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,WAAuB;AACrB,WAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC;AAAA,EACpC;AAAA,EAEA,eAAe,KAAa,QAAgB,OAAiB,CAAC,GAAe;AAC3E,WAAO,CAAC,QAAQ,CAAC,YAAY,KAAK,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,MAA4B;AAChC,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAAA,EACjC;AAAA,EAEA,eAA2B;AAEzB,WAAO,CAAC,QAAQ,CAAC,WAAW,iBAAiB,CAAC;AAAA,EAChD;AAAA,EAEA,YAAY,MAAgE;AAC1E,WAAO;AAAA,MACL,CAAC,QAAQ,CAAC,MAAM,QAAQ,MAAM,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAAA,IAC/E;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// src/pm/pnpmPackageManager.ts
|
|
2
|
+
import { spawnSync } from "child_process";
|
|
3
|
+
var PnpmPackageManager = class {
|
|
4
|
+
command = "pnpm";
|
|
5
|
+
lockfile = "pnpm-lock.yaml";
|
|
6
|
+
name = "pnpm";
|
|
7
|
+
dedupe() {
|
|
8
|
+
return ["pnpm", ["dedupe"]];
|
|
9
|
+
}
|
|
10
|
+
findWorkspace(name) {
|
|
11
|
+
return this.listWorkspaces().find((ws) => ws.name === name);
|
|
12
|
+
}
|
|
13
|
+
foreachWorkspace(script, args = [], options) {
|
|
14
|
+
const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : [];
|
|
15
|
+
const filter = options?.incremental ? ["--filter", "...[HEAD~1]"] : [];
|
|
16
|
+
return ["pnpm", ["-r", ...concurrency, ...filter, "run", script, ...args]];
|
|
17
|
+
}
|
|
18
|
+
install() {
|
|
19
|
+
return ["pnpm", ["install"]];
|
|
20
|
+
}
|
|
21
|
+
listWorkspaces() {
|
|
22
|
+
const result = spawnSync("pnpm", ["list", "--recursive", "--json", "--depth=0"], {
|
|
23
|
+
encoding: "utf8",
|
|
24
|
+
shell: true
|
|
25
|
+
});
|
|
26
|
+
if (result.error) {
|
|
27
|
+
throw result.error;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(result.stdout);
|
|
31
|
+
if (Array.isArray(parsed)) {
|
|
32
|
+
return parsed.map((pkg) => ({
|
|
33
|
+
location: pkg.path,
|
|
34
|
+
name: pkg.name
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
} catch {
|
|
38
|
+
}
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
outdated() {
|
|
42
|
+
return ["pnpm", ["outdated", "-r"]];
|
|
43
|
+
}
|
|
44
|
+
runInWorkspace(pkg, script, args = []) {
|
|
45
|
+
return ["pnpm", ["--filter", pkg, "run", script, ...args]];
|
|
46
|
+
}
|
|
47
|
+
runXy(args) {
|
|
48
|
+
return ["pnpm", ["xy", ...args]];
|
|
49
|
+
}
|
|
50
|
+
versionApply() {
|
|
51
|
+
return ["pnpm", ["install", "--lockfile-only"]];
|
|
52
|
+
}
|
|
53
|
+
versionBump(type) {
|
|
54
|
+
return [
|
|
55
|
+
["pnpm", ["-r", "exec", "--", "npm", "version", type, "--no-git-tag-version"]]
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
PnpmPackageManager
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=pnpmPackageManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/pm/pnpmPackageManager.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process'\n\nimport type {\n PackageManager, ScriptStep, Workspace, WorkspaceForeachOptions,\n} from '@xylabs/ts-scripts-common'\n\nexport class PnpmPackageManager implements PackageManager {\n readonly command = 'pnpm'\n readonly lockfile = 'pnpm-lock.yaml'\n readonly name = 'pnpm' as const\n\n dedupe(): ScriptStep {\n return ['pnpm', ['dedupe']]\n }\n\n findWorkspace(name: string): Workspace | undefined {\n return this.listWorkspaces().find(ws => ws.name === name)\n }\n\n foreachWorkspace(script: string, args: string[] = [], options?: WorkspaceForeachOptions): ScriptStep {\n const concurrency = options?.jobs ? [`--workspace-concurrency=${options.jobs}`] : []\n const filter = options?.incremental ? ['--filter', '...[HEAD~1]'] : []\n return ['pnpm', ['-r', ...concurrency, ...filter, 'run', script, ...args]]\n }\n\n install(): ScriptStep {\n return ['pnpm', ['install']]\n }\n\n listWorkspaces(): Workspace[] {\n const result = spawnSync('pnpm', ['list', '--recursive', '--json', '--depth=0'], {\n encoding: 'utf8',\n shell: true,\n })\n if (result.error) {\n throw result.error\n }\n try {\n const parsed = JSON.parse(result.stdout)\n if (Array.isArray(parsed)) {\n return parsed.map((pkg: { name: string; path: string }) => ({\n location: pkg.path,\n name: pkg.name,\n }))\n }\n } catch {\n // fallback for unexpected output\n }\n return []\n }\n\n outdated(): ScriptStep {\n return ['pnpm', ['outdated', '-r']]\n }\n\n runInWorkspace(pkg: string, script: string, args: string[] = []): ScriptStep {\n return ['pnpm', ['--filter', pkg, 'run', script, ...args]]\n }\n\n runXy(args: string[]): ScriptStep {\n return ['pnpm', ['xy', ...args]]\n }\n\n versionApply(): ScriptStep {\n // pnpm doesn't have a deferred version apply — versions are applied in bump\n return ['pnpm', ['install', '--lockfile-only']]\n }\n\n versionBump(type: 'major' | 'minor' | 'patch' | 'prerelease'): ScriptStep[] {\n return [\n ['pnpm', ['-r', 'exec', '--', 'npm', 'version', type, '--no-git-tag-version']],\n ]\n }\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAMnB,IAAM,qBAAN,MAAmD;AAAA,EAC/C,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EAEhB,SAAqB;AACnB,WAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAA,EAC5B;AAAA,EAEA,cAAc,MAAqC;AACjD,WAAO,KAAK,eAAe,EAAE,KAAK,QAAM,GAAG,SAAS,IAAI;AAAA,EAC1D;AAAA,EAEA,iBAAiB,QAAgB,OAAiB,CAAC,GAAG,SAA+C;AACnG,UAAM,cAAc,SAAS,OAAO,CAAC,2BAA2B,QAAQ,IAAI,EAAE,IAAI,CAAC;AACnF,UAAM,SAAS,SAAS,cAAc,CAAC,YAAY,aAAa,IAAI,CAAC;AACrE,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,GAAG,QAAQ,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3E;AAAA,EAEA,UAAsB;AACpB,WAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAA,EAC7B;AAAA,EAEA,iBAA8B;AAC5B,UAAM,SAAS,UAAU,QAAQ,CAAC,QAAQ,eAAe,UAAU,WAAW,GAAG;AAAA,MAC/E,UAAU;AAAA,MACV,OAAO;AAAA,IACT,CAAC;AACD,QAAI,OAAO,OAAO;AAChB,YAAM,OAAO;AAAA,IACf;AACA,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,OAAO,MAAM;AACvC,UAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,eAAO,OAAO,IAAI,CAAC,SAAyC;AAAA,UAC1D,UAAU,IAAI;AAAA,UACd,MAAM,IAAI;AAAA,QACZ,EAAE;AAAA,MACJ;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,WAAuB;AACrB,WAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC;AAAA,EACpC;AAAA,EAEA,eAAe,KAAa,QAAgB,OAAiB,CAAC,GAAe;AAC3E,WAAO,CAAC,QAAQ,CAAC,YAAY,KAAK,OAAO,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,MAA4B;AAChC,WAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAAA,EACjC;AAAA,EAEA,eAA2B;AAEzB,WAAO,CAAC,QAAQ,CAAC,WAAW,iBAAiB,CAAC;AAAA,EAChD;AAAA,EAEA,YAAY,MAAgE;AAC1E,WAAO;AAAA,MACL,CAAC,QAAQ,CAAC,MAAM,QAAQ,MAAM,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAAA,IAC/E;AAAA,EACF;AACF;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xylabs/ts-scripts-pnpm",
|
|
3
|
+
"version": "7.5.0",
|
|
4
|
+
"description": "pnpm package manager implementation for XY Labs TypeScript project scripts",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"xylabs",
|
|
7
|
+
"utility",
|
|
8
|
+
"typescript",
|
|
9
|
+
"pnpm"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://xylabs.com",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "git+https://github.com/xylabs/config/issues",
|
|
14
|
+
"email": "support@xylabs.com"
|
|
15
|
+
},
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "git+https://github.com/xylabs/config.git"
|
|
19
|
+
},
|
|
20
|
+
"license": "LGPL-3.0-only",
|
|
21
|
+
"author": {
|
|
22
|
+
"name": "XY Labs Development Team",
|
|
23
|
+
"email": "support@xylabs.com",
|
|
24
|
+
"url": "https://xylabs.com"
|
|
25
|
+
},
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"type": "module",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"default": "./dist/index.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./package.json": "./package.json"
|
|
34
|
+
},
|
|
35
|
+
"module": "dist/index.mjs",
|
|
36
|
+
"types": "dist/index.d.ts",
|
|
37
|
+
"files": [
|
|
38
|
+
"dist"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"package-compile": "tsup && publint"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@xylabs/ts-scripts-common": "~7.5.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@xylabs/tsconfig": "~7.5.0",
|
|
48
|
+
"publint": "~0.3.18",
|
|
49
|
+
"tsup": "~8.5.1",
|
|
50
|
+
"typescript": "^5.9.3"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public"
|
|
54
|
+
}
|
|
55
|
+
}
|