@ticatec/omniflow-core 0.1.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/README.md +264 -0
- package/README_CN.md +265 -0
- package/dist/context/index.d.ts +27 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +62 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/storage.d.ts +8 -0
- package/dist/context/storage.d.ts.map +1 -0
- package/dist/context/storage.js +7 -0
- package/dist/context/storage.js.map +1 -0
- package/dist/context/types.d.ts +64 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +5 -0
- package/dist/context/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/primitives/docker.d.ts +41 -0
- package/dist/primitives/docker.d.ts.map +1 -0
- package/dist/primitives/docker.js +109 -0
- package/dist/primitives/docker.js.map +1 -0
- package/dist/primitives/git.d.ts +19 -0
- package/dist/primitives/git.d.ts.map +1 -0
- package/dist/primitives/git.js +84 -0
- package/dist/primitives/git.js.map +1 -0
- package/dist/primitives/index.d.ts +5 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +5 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/shell.d.ts +42 -0
- package/dist/primitives/shell.d.ts.map +1 -0
- package/dist/primitives/shell.js +141 -0
- package/dist/primitives/shell.js.map +1 -0
- package/dist/primitives/ssh.d.ts +41 -0
- package/dist/primitives/ssh.d.ts.map +1 -0
- package/dist/primitives/ssh.js +128 -0
- package/dist/primitives/ssh.js.map +1 -0
- package/dist/toolchain/index.d.ts +7 -0
- package/dist/toolchain/index.d.ts.map +1 -0
- package/dist/toolchain/index.js +7 -0
- package/dist/toolchain/index.js.map +1 -0
- package/dist/toolchain/providers/GradleToolchain.d.ts +15 -0
- package/dist/toolchain/providers/GradleToolchain.d.ts.map +1 -0
- package/dist/toolchain/providers/GradleToolchain.js +130 -0
- package/dist/toolchain/providers/GradleToolchain.js.map +1 -0
- package/dist/toolchain/providers/MavenToolchain.d.ts +12 -0
- package/dist/toolchain/providers/MavenToolchain.d.ts.map +1 -0
- package/dist/toolchain/providers/MavenToolchain.js +57 -0
- package/dist/toolchain/providers/MavenToolchain.js.map +1 -0
- package/dist/toolchain/providers/NodeToolchain.d.ts +15 -0
- package/dist/toolchain/providers/NodeToolchain.d.ts.map +1 -0
- package/dist/toolchain/providers/NodeToolchain.js +93 -0
- package/dist/toolchain/providers/NodeToolchain.js.map +1 -0
- package/dist/toolchain/providers/pom.d.ts +18 -0
- package/dist/toolchain/providers/pom.d.ts.map +1 -0
- package/dist/toolchain/providers/pom.js +112 -0
- package/dist/toolchain/providers/pom.js.map +1 -0
- package/dist/toolchain/registry.d.ts +48 -0
- package/dist/toolchain/registry.d.ts.map +1 -0
- package/dist/toolchain/registry.js +97 -0
- package/dist/toolchain/registry.js.map +1 -0
- package/dist/toolchain/types.d.ts +33 -0
- package/dist/toolchain/types.d.ts.map +1 -0
- package/dist/toolchain/types.js +5 -0
- package/dist/toolchain/types.js.map +1 -0
- package/dist/utils/mask.d.ts +15 -0
- package/dist/utils/mask.d.ts.map +1 -0
- package/dist/utils/mask.js +50 -0
- package/dist/utils/mask.js.map +1 -0
- package/dist/utils/template.d.ts +12 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +55 -0
- package/dist/utils/template.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface SshServerConfig {
|
|
2
|
+
host?: string;
|
|
3
|
+
server?: string;
|
|
4
|
+
user: string;
|
|
5
|
+
private_key_file?: string;
|
|
6
|
+
port?: number;
|
|
7
|
+
tty?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface SshAuthConfig {
|
|
10
|
+
user: string;
|
|
11
|
+
privateKey?: string;
|
|
12
|
+
privateKeyFile?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SshConnectionConfig extends SshAuthConfig {
|
|
15
|
+
host: string;
|
|
16
|
+
port?: number;
|
|
17
|
+
tty?: boolean;
|
|
18
|
+
connectTimeout?: number;
|
|
19
|
+
}
|
|
20
|
+
export type SshTarget = string | SshConnectionConfig;
|
|
21
|
+
export interface SshResult {
|
|
22
|
+
stdout: string;
|
|
23
|
+
stderr: string;
|
|
24
|
+
exitCode: number;
|
|
25
|
+
}
|
|
26
|
+
export interface SshOptions {
|
|
27
|
+
keyFile?: string;
|
|
28
|
+
remoteDir?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare class SshClient {
|
|
31
|
+
private readonly configMap;
|
|
32
|
+
constructor(configMap?: Record<string, SshServerConfig>);
|
|
33
|
+
exec(target: SshTarget, remoteCommand: string, remoteDir?: string): Promise<SshResult>;
|
|
34
|
+
cp(target: SshTarget, srcFile: string, targetFolder: string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export declare const ssh: {
|
|
37
|
+
exec: (target: SshTarget, command: string, remoteDir?: string) => Promise<SshResult>;
|
|
38
|
+
cp: (target: SshTarget, srcFile: string, targetFolder: string) => Promise<void>;
|
|
39
|
+
createClient: (configMap: Record<string, SshServerConfig>) => SshClient;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=ssh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAE/C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM;IAIrD,IAAI,CACR,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;IA6Cf,EAAE,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CA6BjB;AAKD,eAAO,MAAM,GAAG;mBACC,SAAS,WAAW,MAAM,cAAc,MAAM;iBAEhD,SAAS,WAAW,MAAM,gBAAgB,MAAM;8BAEnC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;CAE1D,CAAA"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { execa } from 'execa';
|
|
5
|
+
import { tryGetContext } from '../context/index.js';
|
|
6
|
+
function resolveTarget(target, configMap = {}) {
|
|
7
|
+
if (typeof target !== 'string') {
|
|
8
|
+
if (!target.host || !target.user) {
|
|
9
|
+
throw new Error('SSH target config requires both "host" and "user"');
|
|
10
|
+
}
|
|
11
|
+
return target;
|
|
12
|
+
}
|
|
13
|
+
const config = configMap[target];
|
|
14
|
+
if (!config) {
|
|
15
|
+
const known = Object.keys(configMap);
|
|
16
|
+
throw new Error(`SSH target configuration not found for key: "${target}". ` +
|
|
17
|
+
(known.length ? `Configured targets: ${known.join(', ')}` : 'No SSH targets configured.'));
|
|
18
|
+
}
|
|
19
|
+
const host = config.host || config.server;
|
|
20
|
+
if (!host) {
|
|
21
|
+
throw new Error(`SSH config '${target}' is missing host/server address`);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
host,
|
|
25
|
+
user: config.user,
|
|
26
|
+
privateKeyFile: config.private_key_file,
|
|
27
|
+
port: config.port,
|
|
28
|
+
tty: config.tty
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async function createTempKeyFile(keyContent) {
|
|
32
|
+
const dir = await fs.mkdtemp(path.join(tmpdir(), 'omniflow-ssh-'));
|
|
33
|
+
const keyFile = path.join(dir, 'id_rsa');
|
|
34
|
+
await fs.writeFile(keyFile, keyContent, { mode: 0o600 });
|
|
35
|
+
return keyFile;
|
|
36
|
+
}
|
|
37
|
+
function connectionArgs(config, keyFile, portFlag) {
|
|
38
|
+
const args = [
|
|
39
|
+
'-o', 'BatchMode=yes',
|
|
40
|
+
'-o', 'StrictHostKeyChecking=accept-new',
|
|
41
|
+
'-o', `ConnectTimeout=${config.connectTimeout ?? 15}`,
|
|
42
|
+
portFlag, String(config.port ?? 22)
|
|
43
|
+
];
|
|
44
|
+
if (keyFile) {
|
|
45
|
+
args.push('-i', keyFile);
|
|
46
|
+
}
|
|
47
|
+
return args;
|
|
48
|
+
}
|
|
49
|
+
function shellQuote(str) {
|
|
50
|
+
if (/^[a-zA-Z0-9_./-]+$/.test(str))
|
|
51
|
+
return str;
|
|
52
|
+
return `'${str.replace(/'/g, "'\\''")}'`;
|
|
53
|
+
}
|
|
54
|
+
export class SshClient {
|
|
55
|
+
configMap;
|
|
56
|
+
constructor(configMap = {}) {
|
|
57
|
+
this.configMap = configMap;
|
|
58
|
+
}
|
|
59
|
+
async exec(target, remoteCommand, remoteDir) {
|
|
60
|
+
const ctx = tryGetContext();
|
|
61
|
+
const config = resolveTarget(target, this.configMap);
|
|
62
|
+
if (ctx?.dryRun) {
|
|
63
|
+
ctx.logger.info(`[DRY-RUN] SSH to ${config.user}@${config.host}: ${remoteCommand} (remoteDir: ${remoteDir ?? '~'})`);
|
|
64
|
+
return { stdout: '[DRY-RUN] Remote command executed', stderr: '', exitCode: 0 };
|
|
65
|
+
}
|
|
66
|
+
let tempKeyFile;
|
|
67
|
+
try {
|
|
68
|
+
if (config.privateKey) {
|
|
69
|
+
tempKeyFile = await createTempKeyFile(config.privateKey);
|
|
70
|
+
}
|
|
71
|
+
const keyFile = tempKeyFile || config.privateKeyFile;
|
|
72
|
+
const args = connectionArgs(config, keyFile, '-p');
|
|
73
|
+
if (config.tty) {
|
|
74
|
+
args.push('-tt');
|
|
75
|
+
}
|
|
76
|
+
args.push(`${config.user}@${config.host}`);
|
|
77
|
+
const script = remoteDir
|
|
78
|
+
? `cd ${shellQuote(remoteDir)} || exit 1\n${remoteCommand}`
|
|
79
|
+
: remoteCommand;
|
|
80
|
+
args.push(script);
|
|
81
|
+
ctx?.logger.info(`SSH (${config.user}@${config.host}) $ ${remoteCommand}`);
|
|
82
|
+
const result = await execa('ssh', args, { reject: true });
|
|
83
|
+
return {
|
|
84
|
+
stdout: result.stdout ?? '',
|
|
85
|
+
stderr: result.stderr ?? '',
|
|
86
|
+
exitCode: result.exitCode ?? 0
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
if (tempKeyFile) {
|
|
91
|
+
await fs.rm(path.dirname(tempKeyFile), { recursive: true, force: true }).catch(() => { });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async cp(target, srcFile, targetFolder) {
|
|
96
|
+
const ctx = tryGetContext();
|
|
97
|
+
const config = resolveTarget(target, this.configMap);
|
|
98
|
+
if (ctx?.dryRun) {
|
|
99
|
+
ctx.logger.info(`[DRY-RUN] SCP: Copy ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
let tempKeyFile;
|
|
103
|
+
try {
|
|
104
|
+
if (config.privateKey) {
|
|
105
|
+
tempKeyFile = await createTempKeyFile(config.privateKey);
|
|
106
|
+
}
|
|
107
|
+
const keyFile = tempKeyFile || config.privateKeyFile;
|
|
108
|
+
const args = connectionArgs(config, keyFile, '-P');
|
|
109
|
+
args.push(srcFile);
|
|
110
|
+
args.push(`${config.user}@${config.host}:${targetFolder}`);
|
|
111
|
+
ctx?.logger.info(`SCP ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`);
|
|
112
|
+
await execa('scp', args, { reject: true });
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
if (tempKeyFile) {
|
|
116
|
+
await fs.rm(path.dirname(tempKeyFile), { recursive: true, force: true }).catch(() => { });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Default singleton instance helper */
|
|
122
|
+
const defaultClient = new SshClient();
|
|
123
|
+
export const ssh = {
|
|
124
|
+
exec: (target, command, remoteDir) => defaultClient.exec(target, command, remoteDir),
|
|
125
|
+
cp: (target, srcFile, targetFolder) => defaultClient.cp(target, srcFile, targetFolder),
|
|
126
|
+
createClient: (configMap) => new SshClient(configMap)
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=ssh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './registry.js';
|
|
3
|
+
export { MavenToolchain } from './providers/MavenToolchain.js';
|
|
4
|
+
export { GradleToolchain } from './providers/GradleToolchain.js';
|
|
5
|
+
export { NodeToolchain } from './providers/NodeToolchain.js';
|
|
6
|
+
export { readPom, parseXml } from './providers/pom.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/toolchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './registry.js';
|
|
3
|
+
export { MavenToolchain } from './providers/MavenToolchain.js';
|
|
4
|
+
export { GradleToolchain } from './providers/GradleToolchain.js';
|
|
5
|
+
export { NodeToolchain } from './providers/NodeToolchain.js';
|
|
6
|
+
export { readPom, parseXml } from './providers/pom.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/toolchain/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ToolchainProvider, DetectionResult, ProjectInfo } from '../types.js';
|
|
2
|
+
export declare class GradleToolchain implements ToolchainProvider {
|
|
3
|
+
readonly name = "gradle";
|
|
4
|
+
readonly priority = 10;
|
|
5
|
+
detect(projectDir: string): Promise<DetectionResult | null>;
|
|
6
|
+
projectInfo(projectDir: string): Promise<ProjectInfo>;
|
|
7
|
+
install(projectDir: string, _flags?: string[]): Promise<void>;
|
|
8
|
+
build(projectDir: string, flags?: string[]): Promise<void>;
|
|
9
|
+
run(projectDir: string, task: string, flags?: string[]): Promise<void>;
|
|
10
|
+
private getCommand;
|
|
11
|
+
private staticVersion;
|
|
12
|
+
private staticGroup;
|
|
13
|
+
private staticName;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=GradleToolchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradleToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8BlF,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,QAAQ,MAAK;IAEhB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAY3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,UAAU;YAUV,aAAa;YAgBb,WAAW;YAgBX,UAAU;CAUzB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { shell } from '../../primitives/shell.js';
|
|
4
|
+
const BUILD_FILES = ['build.gradle', 'build.gradle.kts'];
|
|
5
|
+
const SETTINGS_FILES = ['settings.gradle', 'settings.gradle.kts'];
|
|
6
|
+
async function readIfPresent(file) {
|
|
7
|
+
try {
|
|
8
|
+
return await fs.readFile(file, 'utf-8');
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function fromProperties(text, key) {
|
|
15
|
+
for (const line of text.split('\n')) {
|
|
16
|
+
const trimmed = line.trim();
|
|
17
|
+
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('!'))
|
|
18
|
+
continue;
|
|
19
|
+
const eq = trimmed.indexOf('=');
|
|
20
|
+
if (eq === -1)
|
|
21
|
+
continue;
|
|
22
|
+
if (trimmed.slice(0, eq).trim() !== key)
|
|
23
|
+
continue;
|
|
24
|
+
return trimmed.slice(eq + 1).trim() || undefined;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function fromBuildScript(text, key) {
|
|
29
|
+
const assignment = new RegExp(`^${key}\\s*=\\s*['"]([^'"]+)['"]`, 'm');
|
|
30
|
+
return assignment.exec(text)?.[1];
|
|
31
|
+
}
|
|
32
|
+
export class GradleToolchain {
|
|
33
|
+
name = 'gradle';
|
|
34
|
+
priority = 10;
|
|
35
|
+
async detect(projectDir) {
|
|
36
|
+
for (const file of BUILD_FILES) {
|
|
37
|
+
try {
|
|
38
|
+
await fs.access(path.join(projectDir, file));
|
|
39
|
+
return { name: 'gradle', reason: `found ${file}` };
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// continue
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
async projectInfo(projectDir) {
|
|
48
|
+
let name = await this.staticName(projectDir);
|
|
49
|
+
let version = await this.staticVersion(projectDir);
|
|
50
|
+
if (!name)
|
|
51
|
+
name = path.basename(projectDir);
|
|
52
|
+
if (!version || version === 'unspecified') {
|
|
53
|
+
version = '0.0.0';
|
|
54
|
+
}
|
|
55
|
+
const group = await this.staticGroup(projectDir);
|
|
56
|
+
return {
|
|
57
|
+
name,
|
|
58
|
+
version,
|
|
59
|
+
fullName: group ? `${group}:${name}` : name,
|
|
60
|
+
namespace: group
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async install(projectDir, _flags = []) {
|
|
64
|
+
// Gradle resolves dependencies as part of tasks, no dedicated install needed
|
|
65
|
+
}
|
|
66
|
+
async build(projectDir, flags = []) {
|
|
67
|
+
const cmd = await this.getCommand(projectDir);
|
|
68
|
+
await shell.run({ cwd: projectDir }) `${cmd} build ${flags}`;
|
|
69
|
+
}
|
|
70
|
+
async run(projectDir, task, flags = []) {
|
|
71
|
+
const cmd = await this.getCommand(projectDir);
|
|
72
|
+
await shell.run({ cwd: projectDir }) `${cmd} ${task} ${flags}`;
|
|
73
|
+
}
|
|
74
|
+
async getCommand(projectDir) {
|
|
75
|
+
const wrapper = path.join(projectDir, process.platform === 'win32' ? 'gradlew.bat' : 'gradlew');
|
|
76
|
+
try {
|
|
77
|
+
await fs.access(wrapper, fs.constants.X_OK);
|
|
78
|
+
return wrapper;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return 'gradle';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async staticVersion(projectDir) {
|
|
85
|
+
const props = await readIfPresent(path.join(projectDir, 'gradle.properties'));
|
|
86
|
+
if (props) {
|
|
87
|
+
const found = fromProperties(props, 'version');
|
|
88
|
+
if (found)
|
|
89
|
+
return found;
|
|
90
|
+
}
|
|
91
|
+
for (const file of BUILD_FILES) {
|
|
92
|
+
const text = await readIfPresent(path.join(projectDir, file));
|
|
93
|
+
if (text) {
|
|
94
|
+
const found = fromBuildScript(text, 'version');
|
|
95
|
+
if (found)
|
|
96
|
+
return found;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
async staticGroup(projectDir) {
|
|
102
|
+
const props = await readIfPresent(path.join(projectDir, 'gradle.properties'));
|
|
103
|
+
if (props) {
|
|
104
|
+
const found = fromProperties(props, 'group');
|
|
105
|
+
if (found)
|
|
106
|
+
return found;
|
|
107
|
+
}
|
|
108
|
+
for (const file of BUILD_FILES) {
|
|
109
|
+
const text = await readIfPresent(path.join(projectDir, file));
|
|
110
|
+
if (text) {
|
|
111
|
+
const found = fromBuildScript(text, 'group');
|
|
112
|
+
if (found)
|
|
113
|
+
return found;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
async staticName(projectDir) {
|
|
119
|
+
for (const file of SETTINGS_FILES) {
|
|
120
|
+
const text = await readIfPresent(path.join(projectDir, file));
|
|
121
|
+
if (text) {
|
|
122
|
+
const found = /rootProject\.name\s*=\s*['"]([^'"]+)['"]/.exec(text)?.[1];
|
|
123
|
+
if (found)
|
|
124
|
+
return found;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=GradleToolchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradleToolchain.js","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ToolchainProvider, DetectionResult, ProjectInfo } from '../types.js';
|
|
2
|
+
export declare class MavenToolchain implements ToolchainProvider {
|
|
3
|
+
readonly name = "maven";
|
|
4
|
+
readonly priority = 10;
|
|
5
|
+
detect(projectDir: string): Promise<DetectionResult | null>;
|
|
6
|
+
projectInfo(projectDir: string): Promise<ProjectInfo>;
|
|
7
|
+
install(projectDir: string, flags?: string[]): Promise<void>;
|
|
8
|
+
build(projectDir: string, flags?: string[]): Promise<void>;
|
|
9
|
+
run(projectDir: string, task: string, flags?: string[]): Promise<void>;
|
|
10
|
+
private getCommand;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=MavenToolchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MavenToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/MavenToolchain.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,IAAI,WAAU;IACvB,QAAQ,CAAC,QAAQ,MAAK;IAEhB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAS3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,UAAU;CASzB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { shell } from '../../primitives/shell.js';
|
|
4
|
+
import { readPom } from './pom.js';
|
|
5
|
+
export class MavenToolchain {
|
|
6
|
+
name = 'maven';
|
|
7
|
+
priority = 10;
|
|
8
|
+
async detect(projectDir) {
|
|
9
|
+
try {
|
|
10
|
+
await fs.access(path.join(projectDir, 'pom.xml'));
|
|
11
|
+
return { name: 'maven', reason: 'found pom.xml' };
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
async projectInfo(projectDir) {
|
|
18
|
+
const pomPath = path.join(projectDir, 'pom.xml');
|
|
19
|
+
const content = await fs.readFile(pomPath, 'utf-8');
|
|
20
|
+
const { groupId, artifactId, version } = readPom(content);
|
|
21
|
+
if (!artifactId) {
|
|
22
|
+
throw new Error(`Invalid pom.xml (missing <artifactId>): ${pomPath}`);
|
|
23
|
+
}
|
|
24
|
+
if (!version) {
|
|
25
|
+
throw new Error(`Invalid pom.xml (missing <version>): ${pomPath}`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
name: artifactId,
|
|
29
|
+
version,
|
|
30
|
+
fullName: groupId ? `${groupId}:${artifactId}` : artifactId,
|
|
31
|
+
namespace: groupId
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async install(projectDir, flags = []) {
|
|
35
|
+
const cmd = await this.getCommand(projectDir);
|
|
36
|
+
await shell.run({ cwd: projectDir }) `${cmd} -B dependency:go-offline ${flags}`;
|
|
37
|
+
}
|
|
38
|
+
async build(projectDir, flags = []) {
|
|
39
|
+
const cmd = await this.getCommand(projectDir);
|
|
40
|
+
await shell.run({ cwd: projectDir }) `${cmd} -B package ${flags}`;
|
|
41
|
+
}
|
|
42
|
+
async run(projectDir, task, flags = []) {
|
|
43
|
+
const cmd = await this.getCommand(projectDir);
|
|
44
|
+
await shell.run({ cwd: projectDir }) `${cmd} -B ${task} ${flags}`;
|
|
45
|
+
}
|
|
46
|
+
async getCommand(projectDir) {
|
|
47
|
+
const wrapper = path.join(projectDir, process.platform === 'win32' ? 'mvnw.cmd' : 'mvnw');
|
|
48
|
+
try {
|
|
49
|
+
await fs.access(wrapper, fs.constants.X_OK);
|
|
50
|
+
return wrapper;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return 'mvn';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=MavenToolchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MavenToolchain.js","sourceRoot":"","sources":["../../../src/toolchain/providers/MavenToolchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ToolchainProvider, DetectionResult, ProjectInfo } from '../types.js';
|
|
2
|
+
export type NodePackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';
|
|
3
|
+
export declare class NodeToolchain implements ToolchainProvider {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly priority = 10;
|
|
6
|
+
private explicitPm?;
|
|
7
|
+
constructor(pmName?: NodePackageManager);
|
|
8
|
+
detect(projectDir: string): Promise<DetectionResult | null>;
|
|
9
|
+
projectInfo(projectDir: string): Promise<ProjectInfo>;
|
|
10
|
+
install(projectDir: string, flags?: string[]): Promise<void>;
|
|
11
|
+
build(projectDir: string, flags?: string[]): Promise<void>;
|
|
12
|
+
run(projectDir: string, task: string, flags?: string[]): Promise<void>;
|
|
13
|
+
private resolvePm;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=NodeToolchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/NodeToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAElF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAmChE,qBAAa,aAAc,YAAW,iBAAiB;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,MAAK;IACtB,OAAO,CAAC,UAAU,CAAC,CAAoB;gBAE3B,MAAM,CAAC,EAAE,kBAAkB;IAKjC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAc3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,SAAS;CAKxB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { shell } from '../../primitives/shell.js';
|
|
4
|
+
const LOCKFILES = [
|
|
5
|
+
['pnpm-lock.yaml', 'pnpm'],
|
|
6
|
+
['bun.lockb', 'bun'],
|
|
7
|
+
['yarn.lock', 'yarn'],
|
|
8
|
+
['package-lock.json', 'npm']
|
|
9
|
+
];
|
|
10
|
+
async function detectPackageManager(dir) {
|
|
11
|
+
try {
|
|
12
|
+
const raw = await fs.readFile(path.join(dir, 'package.json'), 'utf-8');
|
|
13
|
+
const field = JSON.parse(raw)?.packageManager;
|
|
14
|
+
if (typeof field === 'string') {
|
|
15
|
+
const name = field.split('@')[0];
|
|
16
|
+
if (['npm', 'pnpm', 'yarn', 'bun'].includes(name)) {
|
|
17
|
+
return { pm: name, reason: `package.json packageManager (${field})` };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// continue
|
|
23
|
+
}
|
|
24
|
+
for (const [lockfile, pm] of LOCKFILES) {
|
|
25
|
+
try {
|
|
26
|
+
await fs.access(path.join(dir, lockfile));
|
|
27
|
+
return { pm, reason: lockfile };
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// continue
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { pm: 'npm', reason: 'default fallback' };
|
|
34
|
+
}
|
|
35
|
+
export class NodeToolchain {
|
|
36
|
+
name;
|
|
37
|
+
priority = 10;
|
|
38
|
+
explicitPm;
|
|
39
|
+
constructor(pmName) {
|
|
40
|
+
this.name = pmName ?? 'node';
|
|
41
|
+
this.explicitPm = pmName;
|
|
42
|
+
}
|
|
43
|
+
async detect(projectDir) {
|
|
44
|
+
try {
|
|
45
|
+
await fs.access(path.join(projectDir, 'package.json'));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const { pm, reason } = await detectPackageManager(projectDir);
|
|
51
|
+
return {
|
|
52
|
+
name: this.explicitPm ?? pm,
|
|
53
|
+
reason: `found package.json and ${reason}`
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async projectInfo(projectDir) {
|
|
57
|
+
const raw = await fs.readFile(path.join(projectDir, 'package.json'), 'utf-8');
|
|
58
|
+
const pkg = JSON.parse(raw);
|
|
59
|
+
const rawName = pkg.name || path.basename(projectDir);
|
|
60
|
+
let name = rawName;
|
|
61
|
+
let namespace;
|
|
62
|
+
if (rawName.startsWith('@') && rawName.includes('/')) {
|
|
63
|
+
const [scope, bare] = rawName.split('/');
|
|
64
|
+
namespace = scope.slice(1);
|
|
65
|
+
name = bare;
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
version: pkg.version || '0.0.0',
|
|
70
|
+
fullName: rawName,
|
|
71
|
+
namespace
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async install(projectDir, flags = []) {
|
|
75
|
+
const pm = await this.resolvePm(projectDir);
|
|
76
|
+
await shell.run({ cwd: projectDir }) `${pm} install ${flags}`;
|
|
77
|
+
}
|
|
78
|
+
async build(projectDir, flags = []) {
|
|
79
|
+
const pm = await this.resolvePm(projectDir);
|
|
80
|
+
await shell.run({ cwd: projectDir }) `${pm} run build ${flags}`;
|
|
81
|
+
}
|
|
82
|
+
async run(projectDir, task, flags = []) {
|
|
83
|
+
const pm = await this.resolvePm(projectDir);
|
|
84
|
+
await shell.run({ cwd: projectDir }) `${pm} run ${task} ${flags}`;
|
|
85
|
+
}
|
|
86
|
+
async resolvePm(projectDir) {
|
|
87
|
+
if (this.explicitPm)
|
|
88
|
+
return this.explicitPm;
|
|
89
|
+
const { pm } = await detectPackageManager(projectDir);
|
|
90
|
+
return pm;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=NodeToolchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeToolchain.js","sourceRoot":"","sources":["../../../src/toolchain/providers/NodeToolchain.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAKjD,MAAM,SAAS,GAAyD;IACtE,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,WAAW,EAAE,KAAK,CAAC;IACpB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,mBAAmB,EAAE,KAAK,CAAC;CAC7B,CAAA;AAED,KAAK,UAAU,oBAAoB,CAAC,GAAW;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,CAAA;QAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,OAAO,EAAE,EAAE,EAAE,IAA0B,EAAE,MAAM,EAAE,gCAAgC,KAAK,GAAG,EAAE,CAAA;YAC7F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;YACzC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,OAAO,aAAa;IACf,IAAI,CAAQ;IACZ,QAAQ,GAAG,EAAE,CAAA;IACd,UAAU,CAAqB;IAEvC,YAAY,MAA2B;QACrC,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,MAAM,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAA;QAC7D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YAC3B,MAAM,EAAE,0BAA0B,MAAM,EAAE;SAC3C,CAAA;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAA;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE3B,MAAM,OAAO,GAAW,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC7D,IAAI,IAAI,GAAG,OAAO,CAAA;QAClB,IAAI,SAA6B,CAAA;QAEjC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,GAAG,IAAI,CAAA;QACb,CAAC;QAED,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO;YAC/B,QAAQ,EAAE,OAAO;YACjB,SAAS;SACV,CAAA;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,QAAkB,EAAE;QACpD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC3C,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA,GAAG,EAAE,YAAY,KAAK,EAAE,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,QAAkB,EAAE;QAClD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC3C,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA,GAAG,EAAE,cAAc,KAAK,EAAE,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAE,QAAkB,EAAE;QAC9D,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC3C,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA,GAAG,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAA;IAClE,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,UAAkB;QACxC,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAA;QAC3C,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAA;QACrD,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML parsing helper for reading coordinates out of a pom.xml without general XML parser dependencies.
|
|
3
|
+
*/
|
|
4
|
+
export interface XmlNode {
|
|
5
|
+
text: string;
|
|
6
|
+
children: Record<string, XmlNode[]>;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseXml(xml: string): {
|
|
9
|
+
name: string;
|
|
10
|
+
node: XmlNode;
|
|
11
|
+
};
|
|
12
|
+
export interface PomCoordinates {
|
|
13
|
+
groupId?: string;
|
|
14
|
+
artifactId?: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function readPom(xml: string): PomCoordinates;
|
|
18
|
+
//# sourceMappingURL=pom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pom.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/pom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;CACpC;AA6BD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CA8CrE;AA8BD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYnD"}
|