mthds 0.0.7 → 0.0.9
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/LICENSE +1 -1
- package/README.md +56 -16
- package/dist/agent/commands/build.d.ts +35 -0
- package/dist/agent/commands/build.js +334 -0
- package/dist/agent/commands/build.js.map +1 -0
- package/dist/agent/commands/config.d.ts +6 -0
- package/dist/agent/commands/config.js +50 -0
- package/dist/agent/commands/config.js.map +1 -0
- package/dist/agent/commands/install.d.ts +14 -0
- package/dist/agent/commands/install.js +179 -0
- package/dist/agent/commands/install.js.map +1 -0
- package/dist/agent/commands/pipelex.d.ts +7 -0
- package/dist/agent/commands/pipelex.js +56 -0
- package/dist/agent/commands/pipelex.js.map +1 -0
- package/dist/agent/commands/plxt.d.ts +7 -0
- package/dist/agent/commands/plxt.js +27 -0
- package/dist/agent/commands/plxt.js.map +1 -0
- package/dist/agent/commands/validate.d.ts +15 -0
- package/dist/agent/commands/validate.js +118 -0
- package/dist/agent/commands/validate.js.map +1 -0
- package/dist/agent/output.d.ts +25 -0
- package/dist/agent/output.js +53 -0
- package/dist/agent/output.js.map +1 -0
- package/dist/agent/passthrough.d.ts +5 -0
- package/dist/agent/passthrough.js +19 -0
- package/dist/agent/passthrough.js.map +1 -0
- package/dist/agent-cli.d.ts +8 -0
- package/dist/agent-cli.js +237 -0
- package/dist/agent-cli.js.map +1 -0
- package/dist/cli/commands/build.d.ts +31 -0
- package/dist/cli/commands/build.js +305 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/{commands → cli/commands}/config.js +9 -6
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/index.js +58 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/install.js +276 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/package/init.d.ts +3 -0
- package/dist/cli/commands/package/init.js +108 -0
- package/dist/cli/commands/package/init.js.map +1 -0
- package/dist/cli/commands/package/list.d.ts +3 -0
- package/dist/cli/commands/package/list.js +58 -0
- package/dist/cli/commands/package/list.js.map +1 -0
- package/dist/cli/commands/package/validate.d.ts +3 -0
- package/dist/cli/commands/package/validate.js +76 -0
- package/dist/cli/commands/package/validate.js.map +1 -0
- package/dist/cli/commands/run.d.ts +12 -0
- package/dist/cli/commands/run.js +95 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.js +164 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/utils.d.ts +10 -0
- package/dist/cli/commands/utils.js +41 -0
- package/dist/cli/commands/utils.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +10 -0
- package/dist/cli/commands/validate.js +93 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli.js +236 -95
- package/dist/cli.js.map +1 -1
- package/dist/client/client.js +2 -2
- package/dist/client/client.js.map +1 -1
- package/dist/config/config.d.ts +5 -20
- package/dist/config/config.js +5 -78
- package/dist/config/config.js.map +1 -1
- package/dist/config/credentials.d.ts +25 -0
- package/dist/config/credentials.js +230 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/installer/agents/registry.d.ts +12 -0
- package/dist/installer/agents/registry.js +78 -0
- package/dist/installer/agents/registry.js.map +1 -0
- package/dist/installer/agents/types.d.ts +16 -0
- package/dist/installer/agents/types.js +6 -0
- package/dist/installer/agents/types.js.map +1 -0
- package/dist/installer/resolver/address.d.ts +2 -0
- package/dist/{resolver → installer/resolver}/address.js +6 -4
- package/dist/installer/resolver/address.js.map +1 -0
- package/dist/{resolver → installer/resolver}/github.d.ts +1 -1
- package/dist/{resolver → installer/resolver}/github.js +44 -27
- package/dist/installer/resolver/github.js.map +1 -0
- package/dist/installer/resolver/index.d.ts +6 -0
- package/dist/{resolver → installer/resolver}/index.js +1 -1
- package/dist/installer/resolver/index.js.map +1 -0
- package/dist/{resolver → installer/resolver}/local.d.ts +1 -1
- package/dist/{resolver → installer/resolver}/local.js +12 -19
- package/dist/installer/resolver/local.js.map +1 -0
- package/dist/installer/runtime/check.js.map +1 -0
- package/dist/installer/runtime/installer.js.map +1 -0
- package/dist/installer/runtime/spawn.js.map +1 -0
- package/dist/{telemetry → installer/telemetry}/posthog.d.ts +4 -6
- package/dist/installer/telemetry/posthog.js +56 -0
- package/dist/installer/telemetry/posthog.js.map +1 -0
- package/dist/package/bundle-metadata.d.ts +8 -0
- package/dist/package/bundle-metadata.js +2 -0
- package/dist/package/bundle-metadata.js.map +1 -0
- package/dist/package/bundle-scanner.d.ts +18 -0
- package/dist/package/bundle-scanner.js +77 -0
- package/dist/package/bundle-scanner.js.map +1 -0
- package/dist/package/dependency-resolver.d.ts +32 -0
- package/dist/package/dependency-resolver.js +298 -0
- package/dist/package/dependency-resolver.js.map +1 -0
- package/dist/package/discovery.d.ts +9 -0
- package/dist/package/discovery.js +32 -0
- package/dist/package/discovery.js.map +1 -0
- package/dist/package/exceptions.d.ts +36 -0
- package/dist/package/exceptions.js +73 -0
- package/dist/package/exceptions.js.map +1 -0
- package/dist/package/lock-file.d.ts +27 -0
- package/dist/package/lock-file.js +137 -0
- package/dist/package/lock-file.js.map +1 -0
- package/dist/package/manifest/convert.d.ts +14 -0
- package/dist/package/manifest/convert.js +83 -0
- package/dist/package/manifest/convert.js.map +1 -0
- package/dist/package/manifest/parser.d.ts +9 -0
- package/dist/package/manifest/parser.js +261 -0
- package/dist/package/manifest/parser.js.map +1 -0
- package/dist/package/manifest/schema.d.ts +71 -0
- package/dist/package/manifest/schema.js +73 -0
- package/dist/package/manifest/schema.js.map +1 -0
- package/dist/{resolver → package/manifest}/types.d.ts +4 -7
- package/dist/{resolver → package/manifest}/types.js.map +1 -1
- package/dist/{resolver → package/manifest}/validate.d.ts +0 -5
- package/dist/{resolver → package/manifest}/validate.js +25 -38
- package/dist/package/manifest/validate.js.map +1 -0
- package/dist/package/manifest/validation.d.ts +10 -0
- package/dist/package/manifest/validation.js +34 -0
- package/dist/package/manifest/validation.js.map +1 -0
- package/dist/package/package-cache.d.ts +24 -0
- package/dist/package/package-cache.js +92 -0
- package/dist/package/package-cache.js.map +1 -0
- package/dist/package/qualified-ref.d.ts +41 -0
- package/dist/package/qualified-ref.js +105 -0
- package/dist/package/qualified-ref.js.map +1 -0
- package/dist/package/semver.d.ts +33 -0
- package/dist/package/semver.js +77 -0
- package/dist/package/semver.js.map +1 -0
- package/dist/package/vcs-resolver.d.ts +19 -0
- package/dist/package/vcs-resolver.js +115 -0
- package/dist/package/vcs-resolver.js.map +1 -0
- package/dist/package/visibility.d.ts +25 -0
- package/dist/package/visibility.js +132 -0
- package/dist/package/visibility.js.map +1 -0
- package/dist/runners/api-runner.d.ts +3 -0
- package/dist/runners/api-runner.js +9 -1
- package/dist/runners/api-runner.js.map +1 -1
- package/dist/runners/pipelex-runner.d.ts +16 -2
- package/dist/runners/pipelex-runner.js +155 -41
- package/dist/runners/pipelex-runner.js.map +1 -1
- package/dist/runners/registry.d.ts +1 -1
- package/dist/runners/registry.js +5 -4
- package/dist/runners/registry.js.map +1 -1
- package/dist/runners/types.d.ts +17 -10
- package/dist/runners/types.js +6 -1
- package/dist/runners/types.js.map +1 -1
- package/package.json +7 -4
- package/dist/agents/claude-code.d.ts +0 -2
- package/dist/agents/claude-code.js +0 -36
- package/dist/agents/claude-code.js.map +0 -1
- package/dist/agents/cursor.d.ts +0 -2
- package/dist/agents/cursor.js +0 -11
- package/dist/agents/cursor.js.map +0 -1
- package/dist/agents/github-copilot.d.ts +0 -2
- package/dist/agents/github-copilot.js +0 -11
- package/dist/agents/github-copilot.js.map +0 -1
- package/dist/agents/registry.d.ts +0 -4
- package/dist/agents/registry.js +0 -24
- package/dist/agents/registry.js.map +0 -1
- package/dist/agents/types.d.ts +0 -25
- package/dist/agents/types.js +0 -11
- package/dist/agents/types.js.map +0 -1
- package/dist/agents/windsurf.d.ts +0 -2
- package/dist/agents/windsurf.js +0 -11
- package/dist/agents/windsurf.js.map +0 -1
- package/dist/commands/build.d.ts +0 -19
- package/dist/commands/build.js +0 -128
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/index.js +0 -63
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/install.js +0 -259
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/run.d.ts +0 -11
- package/dist/commands/run.js +0 -44
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/runner.d.ts +0 -2
- package/dist/commands/runner.js +0 -59
- package/dist/commands/runner.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -1
- package/dist/commands/setup.js +0 -45
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/telemetry.d.ts +0 -3
- package/dist/commands/telemetry.js +0 -49
- package/dist/commands/telemetry.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -6
- package/dist/commands/validate.js +0 -41
- package/dist/commands/validate.js.map +0 -1
- package/dist/resolver/address.d.ts +0 -2
- package/dist/resolver/address.js.map +0 -1
- package/dist/resolver/github.js.map +0 -1
- package/dist/resolver/index.d.ts +0 -6
- package/dist/resolver/index.js.map +0 -1
- package/dist/resolver/local.js.map +0 -1
- package/dist/resolver/validate.js.map +0 -1
- package/dist/runtime/check.js.map +0 -1
- package/dist/runtime/installer.js.map +0 -1
- package/dist/runtime/spawn.js.map +0 -1
- package/dist/supabase/client.d.ts +0 -4
- package/dist/supabase/client.js +0 -5
- package/dist/supabase/client.js.map +0 -1
- package/dist/supabase/methods.d.ts +0 -2
- package/dist/supabase/methods.js +0 -13
- package/dist/supabase/methods.js.map +0 -1
- package/dist/supabase/types.d.ts +0 -30
- package/dist/supabase/types.js +0 -2
- package/dist/supabase/types.js.map +0 -1
- package/dist/telemetry/posthog.js +0 -117
- package/dist/telemetry/posthog.js.map +0 -1
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/index.d.ts +0 -0
- /package/dist/{commands → cli/commands}/install.d.ts +0 -0
- /package/dist/{runtime → installer/runtime}/check.d.ts +0 -0
- /package/dist/{runtime → installer/runtime}/check.js +0 -0
- /package/dist/{runtime → installer/runtime}/installer.d.ts +0 -0
- /package/dist/{runtime → installer/runtime}/installer.js +0 -0
- /package/dist/{runtime → installer/runtime}/spawn.d.ts +0 -0
- /package/dist/{runtime → installer/runtime}/spawn.js +0 -0
- /package/dist/{resolver → package/manifest}/types.js +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const SNAKE_CASE_RE = /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/;
|
|
2
|
+
const PASCAL_CASE_RE = /^[A-Z][a-zA-Z0-9]*$/;
|
|
3
|
+
export function isSnakeCase(word) {
|
|
4
|
+
return SNAKE_CASE_RE.test(word);
|
|
5
|
+
}
|
|
6
|
+
export function isPascalCase(word) {
|
|
7
|
+
return PASCAL_CASE_RE.test(word);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if a domain code is valid.
|
|
11
|
+
* Accepts single-segment (e.g. "legal") and hierarchical dotted paths
|
|
12
|
+
* (e.g. "legal.contracts"). Each segment must be snake_case.
|
|
13
|
+
* Supports cross-package domain codes (e.g. "alias->scoring").
|
|
14
|
+
*/
|
|
15
|
+
export function isDomainCodeValid(code) {
|
|
16
|
+
if (!code)
|
|
17
|
+
return false;
|
|
18
|
+
if (code.includes("->")) {
|
|
19
|
+
const arrowIdx = code.indexOf("->");
|
|
20
|
+
const alias = code.slice(0, arrowIdx);
|
|
21
|
+
const remainder = code.slice(arrowIdx + 2);
|
|
22
|
+
if (!isSnakeCase(alias))
|
|
23
|
+
return false;
|
|
24
|
+
return isDomainCodeValid(remainder);
|
|
25
|
+
}
|
|
26
|
+
if (code.startsWith(".") || code.endsWith(".") || code.includes("..")) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return code.split(".").every((segment) => isSnakeCase(segment));
|
|
30
|
+
}
|
|
31
|
+
export function isPipeCodeValid(pipeCode) {
|
|
32
|
+
return isSnakeCase(pipeCode);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/package/manifest/validation.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,iCAAiC,CAAC;AACxD,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return the default cache root directory: ~/.mthds/packages
|
|
3
|
+
*/
|
|
4
|
+
export declare function getDefaultCacheRoot(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Compute the cache path for a package version.
|
|
7
|
+
* Includes path traversal protection.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getCachedPackagePath(address: string, version: string, cacheRoot?: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Check whether a package version exists in the cache.
|
|
12
|
+
* A directory is considered cached if it exists and is non-empty.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isCached(address: string, version: string, cacheRoot?: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Copy a package directory into the cache.
|
|
17
|
+
* Uses a staging directory + rename for safe writes. Removes .git/ from the cached copy.
|
|
18
|
+
*/
|
|
19
|
+
export declare function storeInCache(sourceDir: string, address: string, version: string, cacheRoot?: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Remove a cached package version.
|
|
22
|
+
* Returns true if the directory existed and was removed.
|
|
23
|
+
*/
|
|
24
|
+
export declare function removeCachedPackage(address: string, version: string, cacheRoot?: string): boolean;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, renameSync, rmSync, cpSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, resolve, sep } from "node:path";
|
|
4
|
+
import { PackageCacheError } from "./exceptions.js";
|
|
5
|
+
/**
|
|
6
|
+
* Return the default cache root directory: ~/.mthds/packages
|
|
7
|
+
*/
|
|
8
|
+
export function getDefaultCacheRoot() {
|
|
9
|
+
return join(homedir(), ".mthds", "packages");
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Compute the cache path for a package version.
|
|
13
|
+
* Includes path traversal protection.
|
|
14
|
+
*/
|
|
15
|
+
export function getCachedPackagePath(address, version, cacheRoot) {
|
|
16
|
+
const root = resolve(cacheRoot ?? getDefaultCacheRoot());
|
|
17
|
+
const resolved = resolve(root, address, version);
|
|
18
|
+
if (!resolved.startsWith(root + sep)) {
|
|
19
|
+
throw new PackageCacheError(`Path traversal detected: address '${address}' and version '${version}' resolve outside cache root`);
|
|
20
|
+
}
|
|
21
|
+
return resolved;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check whether a package version exists in the cache.
|
|
25
|
+
* A directory is considered cached if it exists and is non-empty.
|
|
26
|
+
*/
|
|
27
|
+
export function isCached(address, version, cacheRoot) {
|
|
28
|
+
const pkgPath = getCachedPackagePath(address, version, cacheRoot);
|
|
29
|
+
if (!existsSync(pkgPath))
|
|
30
|
+
return false;
|
|
31
|
+
try {
|
|
32
|
+
const entries = readdirSync(pkgPath);
|
|
33
|
+
return entries.length > 0;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Copy a package directory into the cache.
|
|
41
|
+
* Uses a staging directory + rename for safe writes. Removes .git/ from the cached copy.
|
|
42
|
+
*/
|
|
43
|
+
export function storeInCache(sourceDir, address, version, cacheRoot) {
|
|
44
|
+
const finalPath = getCachedPackagePath(address, version, cacheRoot);
|
|
45
|
+
const stagingPath = `${finalPath}.staging`;
|
|
46
|
+
try {
|
|
47
|
+
// Ensure parent directory exists before any file operations
|
|
48
|
+
const parentDir = resolve(finalPath, "..");
|
|
49
|
+
mkdirSync(parentDir, { recursive: true });
|
|
50
|
+
// Clean up any leftover staging dir
|
|
51
|
+
if (existsSync(stagingPath)) {
|
|
52
|
+
rmSync(stagingPath, { recursive: true, force: true });
|
|
53
|
+
}
|
|
54
|
+
// Copy source into staging
|
|
55
|
+
cpSync(sourceDir, stagingPath, { recursive: true });
|
|
56
|
+
// Remove .git/ from the staged copy
|
|
57
|
+
const gitDir = join(stagingPath, ".git");
|
|
58
|
+
if (existsSync(gitDir)) {
|
|
59
|
+
rmSync(gitDir, { recursive: true, force: true });
|
|
60
|
+
}
|
|
61
|
+
// Atomic rename into final location
|
|
62
|
+
if (existsSync(finalPath)) {
|
|
63
|
+
rmSync(finalPath, { recursive: true, force: true });
|
|
64
|
+
}
|
|
65
|
+
renameSync(stagingPath, finalPath);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// Clean up staging on failure
|
|
69
|
+
if (existsSync(stagingPath)) {
|
|
70
|
+
rmSync(stagingPath, { recursive: true, force: true });
|
|
71
|
+
}
|
|
72
|
+
throw new PackageCacheError(`Failed to store package '${address}@${version}' in cache: ${err.message}`);
|
|
73
|
+
}
|
|
74
|
+
return finalPath;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Remove a cached package version.
|
|
78
|
+
* Returns true if the directory existed and was removed.
|
|
79
|
+
*/
|
|
80
|
+
export function removeCachedPackage(address, version, cacheRoot) {
|
|
81
|
+
const pkgPath = getCachedPackagePath(address, version, cacheRoot);
|
|
82
|
+
if (!existsSync(pkgPath))
|
|
83
|
+
return false;
|
|
84
|
+
try {
|
|
85
|
+
rmSync(pkgPath, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
throw new PackageCacheError(`Failed to remove cached package '${address}@${version}' at '${pkgPath}': ${err.message}`);
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=package-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-cache.js","sourceRoot":"","sources":["../../src/package/package-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface QualifiedRef {
|
|
2
|
+
readonly domainPath: string | null;
|
|
3
|
+
readonly localCode: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Check if a ref is domain-qualified (has a domain path).
|
|
7
|
+
*/
|
|
8
|
+
export declare function isQualified(ref: QualifiedRef): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Get the full reference string.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fullRef(ref: QualifiedRef): string;
|
|
13
|
+
/**
|
|
14
|
+
* Parse a reference string by splitting on the last dot.
|
|
15
|
+
* No naming-convention check on localCode.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseRef(raw: string): QualifiedRef;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a concept ref. Validates domain_path segments are snake_case, localCode is PascalCase.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseConceptRef(raw: string): QualifiedRef;
|
|
22
|
+
/**
|
|
23
|
+
* Parse a pipe ref. Validates domain_path segments are snake_case, localCode is snake_case.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parsePipeRef(raw: string): QualifiedRef;
|
|
26
|
+
/**
|
|
27
|
+
* True if this ref belongs to the given domain (same domain or bare).
|
|
28
|
+
*/
|
|
29
|
+
export declare function isLocalTo(ref: QualifiedRef, domain: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* True if this ref belongs to a different domain.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isExternalTo(ref: QualifiedRef, domain: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a raw reference string contains the cross-package '->' prefix.
|
|
36
|
+
*/
|
|
37
|
+
export declare function hasCrossPackagePrefix(raw: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Split a cross-package reference into [alias, remainder].
|
|
40
|
+
*/
|
|
41
|
+
export declare function splitCrossPackageRef(raw: string): [string, string];
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { QualifiedRefError } from "./exceptions.js";
|
|
2
|
+
import { isSnakeCase, isPascalCase } from "./manifest/validation.js";
|
|
3
|
+
/**
|
|
4
|
+
* Check if a ref is domain-qualified (has a domain path).
|
|
5
|
+
*/
|
|
6
|
+
export function isQualified(ref) {
|
|
7
|
+
return ref.domainPath !== null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get the full reference string.
|
|
11
|
+
*/
|
|
12
|
+
export function fullRef(ref) {
|
|
13
|
+
if (ref.domainPath !== null) {
|
|
14
|
+
return `${ref.domainPath}.${ref.localCode}`;
|
|
15
|
+
}
|
|
16
|
+
return ref.localCode;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a reference string by splitting on the last dot.
|
|
20
|
+
* No naming-convention check on localCode.
|
|
21
|
+
*/
|
|
22
|
+
export function parseRef(raw) {
|
|
23
|
+
if (!raw) {
|
|
24
|
+
throw new QualifiedRefError("Qualified reference cannot be empty");
|
|
25
|
+
}
|
|
26
|
+
if (raw.startsWith(".") || raw.endsWith(".")) {
|
|
27
|
+
throw new QualifiedRefError(`Qualified reference '${raw}' must not start or end with a dot`);
|
|
28
|
+
}
|
|
29
|
+
if (raw.includes("..")) {
|
|
30
|
+
throw new QualifiedRefError(`Qualified reference '${raw}' must not contain consecutive dots`);
|
|
31
|
+
}
|
|
32
|
+
if (!raw.includes(".")) {
|
|
33
|
+
return { domainPath: null, localCode: raw };
|
|
34
|
+
}
|
|
35
|
+
const lastDot = raw.lastIndexOf(".");
|
|
36
|
+
const domainPath = raw.slice(0, lastDot);
|
|
37
|
+
const localCode = raw.slice(lastDot + 1);
|
|
38
|
+
return { domainPath, localCode };
|
|
39
|
+
}
|
|
40
|
+
function validateDomainPath(domainPath, raw) {
|
|
41
|
+
for (const segment of domainPath.split(".")) {
|
|
42
|
+
if (!isSnakeCase(segment)) {
|
|
43
|
+
throw new QualifiedRefError(`Domain segment '${segment}' in reference '${raw}' must be snake_case`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a concept ref. Validates domain_path segments are snake_case, localCode is PascalCase.
|
|
49
|
+
*/
|
|
50
|
+
export function parseConceptRef(raw) {
|
|
51
|
+
const ref = parseRef(raw);
|
|
52
|
+
if (!isPascalCase(ref.localCode)) {
|
|
53
|
+
throw new QualifiedRefError(`Concept code '${ref.localCode}' in reference '${raw}' must be PascalCase`);
|
|
54
|
+
}
|
|
55
|
+
if (ref.domainPath !== null) {
|
|
56
|
+
validateDomainPath(ref.domainPath, raw);
|
|
57
|
+
}
|
|
58
|
+
return ref;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse a pipe ref. Validates domain_path segments are snake_case, localCode is snake_case.
|
|
62
|
+
*/
|
|
63
|
+
export function parsePipeRef(raw) {
|
|
64
|
+
const ref = parseRef(raw);
|
|
65
|
+
if (!isSnakeCase(ref.localCode)) {
|
|
66
|
+
throw new QualifiedRefError(`Pipe code '${ref.localCode}' in reference '${raw}' must be snake_case`);
|
|
67
|
+
}
|
|
68
|
+
if (ref.domainPath !== null) {
|
|
69
|
+
validateDomainPath(ref.domainPath, raw);
|
|
70
|
+
}
|
|
71
|
+
return ref;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* True if this ref belongs to the given domain (same domain or bare).
|
|
75
|
+
*/
|
|
76
|
+
export function isLocalTo(ref, domain) {
|
|
77
|
+
if (ref.domainPath === null)
|
|
78
|
+
return true;
|
|
79
|
+
return ref.domainPath === domain;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* True if this ref belongs to a different domain.
|
|
83
|
+
*/
|
|
84
|
+
export function isExternalTo(ref, domain) {
|
|
85
|
+
if (ref.domainPath === null)
|
|
86
|
+
return false;
|
|
87
|
+
return ref.domainPath !== domain;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if a raw reference string contains the cross-package '->' prefix.
|
|
91
|
+
*/
|
|
92
|
+
export function hasCrossPackagePrefix(raw) {
|
|
93
|
+
return raw.includes("->");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Split a cross-package reference into [alias, remainder].
|
|
97
|
+
*/
|
|
98
|
+
export function splitCrossPackageRef(raw) {
|
|
99
|
+
if (!raw.includes("->")) {
|
|
100
|
+
throw new QualifiedRefError(`Reference '${raw}' is not a cross-package reference (no '->' found)`);
|
|
101
|
+
}
|
|
102
|
+
const idx = raw.indexOf("->");
|
|
103
|
+
return [raw.slice(0, idx), raw.slice(idx + 2)];
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=qualified-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-ref.js","sourceRoot":"","sources":["../../src/package/qualified-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOrE;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,OAAO,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAiB;IACvC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC,SAAS,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,iBAAiB,CAAC,qCAAqC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,iBAAiB,CACzB,wBAAwB,GAAG,oCAAoC,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAiB,CACzB,wBAAwB,GAAG,qCAAqC,CACjE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB,EAAE,GAAW;IACzD,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,iBAAiB,CACzB,mBAAmB,OAAO,mBAAmB,GAAG,sBAAsB,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,iBAAiB,CACzB,iBAAiB,GAAG,CAAC,SAAS,mBAAmB,GAAG,sBAAsB,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,iBAAiB,CACzB,cAAc,GAAG,CAAC,SAAS,mBAAmB,GAAG,sBAAsB,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC5B,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAiB,EAAE,MAAc;IACzD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAiB,EAAE,MAAc;IAC5D,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,iBAAiB,CACzB,cAAc,GAAG,oDAAoD,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import semver from "semver";
|
|
2
|
+
export declare class SemVerError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Parse a version string into a semver SemVer object.
|
|
7
|
+
* Strips a leading 'v' prefix if present (common in git tags like v1.2.3).
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseVersion(versionStr: string): semver.SemVer;
|
|
10
|
+
/**
|
|
11
|
+
* Parse a constraint string into a semver Range.
|
|
12
|
+
* Supports: "^1.0.0", "~1.0.0", ">=1.0.0 <2.0.0", "*", "1.*", etc.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseConstraint(constraintStr: string): semver.Range;
|
|
15
|
+
/**
|
|
16
|
+
* Check whether a version satisfies a constraint.
|
|
17
|
+
*/
|
|
18
|
+
export declare function versionSatisfies(version: semver.SemVer, constraint: semver.Range): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Select the minimum version that satisfies a constraint (MVS).
|
|
21
|
+
* Sorts versions ascending and returns the first match.
|
|
22
|
+
*/
|
|
23
|
+
export declare function selectMinimumVersion(availableVersions: semver.SemVer[], constraint: semver.Range): semver.SemVer | null;
|
|
24
|
+
/**
|
|
25
|
+
* Select the minimum version that satisfies ALL constraints simultaneously.
|
|
26
|
+
* Used for diamond dependency resolution.
|
|
27
|
+
*/
|
|
28
|
+
export declare function selectMinimumVersionForMultipleConstraints(availableVersions: semver.SemVer[], constraints: semver.Range[]): semver.SemVer | null;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a git tag into a SemVer, returning null if not a valid semver tag.
|
|
31
|
+
* Handles tags like "v1.2.3" and "1.2.3", gracefully ignores non-semver tags.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseVersionTag(tag: string): semver.SemVer | null;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import semver from "semver";
|
|
2
|
+
export class SemVerError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "SemVerError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parse a version string into a semver SemVer object.
|
|
10
|
+
* Strips a leading 'v' prefix if present (common in git tags like v1.2.3).
|
|
11
|
+
*/
|
|
12
|
+
export function parseVersion(versionStr) {
|
|
13
|
+
const cleaned = versionStr.startsWith("v") ? versionStr.slice(1) : versionStr;
|
|
14
|
+
const parsed = semver.parse(cleaned);
|
|
15
|
+
if (parsed === null) {
|
|
16
|
+
throw new SemVerError(`Invalid semver version: '${versionStr}'`);
|
|
17
|
+
}
|
|
18
|
+
return parsed;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse a constraint string into a semver Range.
|
|
22
|
+
* Supports: "^1.0.0", "~1.0.0", ">=1.0.0 <2.0.0", "*", "1.*", etc.
|
|
23
|
+
*/
|
|
24
|
+
export function parseConstraint(constraintStr) {
|
|
25
|
+
try {
|
|
26
|
+
const range = new semver.Range(constraintStr);
|
|
27
|
+
return range;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new SemVerError(`Invalid semver constraint: '${constraintStr}'`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check whether a version satisfies a constraint.
|
|
35
|
+
*/
|
|
36
|
+
export function versionSatisfies(version, constraint) {
|
|
37
|
+
return semver.satisfies(version, constraint);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Select the minimum version that satisfies a constraint (MVS).
|
|
41
|
+
* Sorts versions ascending and returns the first match.
|
|
42
|
+
*/
|
|
43
|
+
export function selectMinimumVersion(availableVersions, constraint) {
|
|
44
|
+
const sorted = [...availableVersions].sort(semver.compare);
|
|
45
|
+
for (const version of sorted) {
|
|
46
|
+
if (semver.satisfies(version, constraint)) {
|
|
47
|
+
return version;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Select the minimum version that satisfies ALL constraints simultaneously.
|
|
54
|
+
* Used for diamond dependency resolution.
|
|
55
|
+
*/
|
|
56
|
+
export function selectMinimumVersionForMultipleConstraints(availableVersions, constraints) {
|
|
57
|
+
const sorted = [...availableVersions].sort(semver.compare);
|
|
58
|
+
for (const version of sorted) {
|
|
59
|
+
if (constraints.every((constraint) => semver.satisfies(version, constraint))) {
|
|
60
|
+
return version;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Parse a git tag into a SemVer, returning null if not a valid semver tag.
|
|
67
|
+
* Handles tags like "v1.2.3" and "1.2.3", gracefully ignores non-semver tags.
|
|
68
|
+
*/
|
|
69
|
+
export function parseVersionTag(tag) {
|
|
70
|
+
try {
|
|
71
|
+
return parseVersion(tag);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=semver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.js","sourceRoot":"","sources":["../../src/package/semver.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,WAAW,CAAC,4BAA4B,UAAU,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB;IACnD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,+BAA+B,aAAa,GAAG,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB,EAAE,UAAwB;IAC/E,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,iBAAkC,EAClC,UAAwB;IAExB,MAAM,MAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0CAA0C,CACxD,iBAAkC,EAClC,WAA2B;IAE3B,MAAM,MAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;YAC7E,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SemVer } from "semver";
|
|
2
|
+
/**
|
|
3
|
+
* Map a package address to a git clone URL.
|
|
4
|
+
* Prepends https:// and appends .git (unless already present).
|
|
5
|
+
*/
|
|
6
|
+
export declare function addressToCloneUrl(address: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* List remote git tags that are valid semver versions.
|
|
9
|
+
* Runs `git ls-remote --tags <url>` and parses the output.
|
|
10
|
+
*/
|
|
11
|
+
export declare function listRemoteVersionTags(cloneUrl: string): Promise<Array<[SemVer, string]>>;
|
|
12
|
+
/**
|
|
13
|
+
* Select the minimum version matching a constraint from a list of tags (MVS).
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveVersionFromTags(versionTags: Array<[SemVer, string]>, versionConstraint: string): [SemVer, string];
|
|
16
|
+
/**
|
|
17
|
+
* Clone a git repository at a specific tag with depth 1.
|
|
18
|
+
*/
|
|
19
|
+
export declare function cloneAtVersion(cloneUrl: string, versionTag: string, destination: string): Promise<void>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { VCSFetchError, VersionResolutionError } from "./exceptions.js";
|
|
3
|
+
import { parseConstraint, parseVersionTag, selectMinimumVersion, SemVerError } from "./semver.js";
|
|
4
|
+
/**
|
|
5
|
+
* Map a package address to a git clone URL.
|
|
6
|
+
* Prepends https:// and appends .git (unless already present).
|
|
7
|
+
*/
|
|
8
|
+
export function addressToCloneUrl(address) {
|
|
9
|
+
let url = `https://${address}`;
|
|
10
|
+
if (!url.endsWith(".git")) {
|
|
11
|
+
url = `${url}.git`;
|
|
12
|
+
}
|
|
13
|
+
return url;
|
|
14
|
+
}
|
|
15
|
+
function execGit(args, timeoutMs) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
execFile("git", args, { timeout: timeoutMs }, (error, stdout, stderr) => {
|
|
18
|
+
if (error) {
|
|
19
|
+
if (error.code === "ENOENT") {
|
|
20
|
+
reject(new VCSFetchError("git is not installed or not found on PATH"));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (error.killed) {
|
|
24
|
+
reject(new VCSFetchError(`Timed out running: git ${args.join(" ")}`));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
reject(new VCSFetchError(`git ${args[0]} failed: ${stderr.trim()}`));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
resolve(stdout);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List remote git tags that are valid semver versions.
|
|
36
|
+
* Runs `git ls-remote --tags <url>` and parses the output.
|
|
37
|
+
*/
|
|
38
|
+
export async function listRemoteVersionTags(cloneUrl) {
|
|
39
|
+
let stdout;
|
|
40
|
+
try {
|
|
41
|
+
stdout = await execGit(["ls-remote", "--tags", cloneUrl], 60_000);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (err instanceof VCSFetchError)
|
|
45
|
+
throw err;
|
|
46
|
+
throw new VCSFetchError(`Failed to list remote tags from '${cloneUrl}': ${err.message}`);
|
|
47
|
+
}
|
|
48
|
+
const versionTags = [];
|
|
49
|
+
for (const line of stdout.trim().split("\n")) {
|
|
50
|
+
if (!line.trim())
|
|
51
|
+
continue;
|
|
52
|
+
const parts = line.split("\t");
|
|
53
|
+
if (parts.length < 2)
|
|
54
|
+
continue;
|
|
55
|
+
const ref = parts[1];
|
|
56
|
+
// Skip dereferenced tags
|
|
57
|
+
if (ref.endsWith("^{}"))
|
|
58
|
+
continue;
|
|
59
|
+
// Extract tag name from refs/tags/...
|
|
60
|
+
const tagName = ref.startsWith("refs/tags/") ? ref.slice("refs/tags/".length) : ref;
|
|
61
|
+
const version = parseVersionTag(tagName);
|
|
62
|
+
if (version !== null) {
|
|
63
|
+
versionTags.push([version, tagName]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return versionTags;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Select the minimum version matching a constraint from a list of tags (MVS).
|
|
70
|
+
*/
|
|
71
|
+
export function resolveVersionFromTags(versionTags, versionConstraint) {
|
|
72
|
+
if (versionTags.length === 0) {
|
|
73
|
+
throw new VersionResolutionError(`No version tags available to satisfy constraint '${versionConstraint}'`);
|
|
74
|
+
}
|
|
75
|
+
let constraint;
|
|
76
|
+
try {
|
|
77
|
+
constraint = parseConstraint(versionConstraint);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (err instanceof SemVerError) {
|
|
81
|
+
throw new VersionResolutionError(`Invalid version constraint '${versionConstraint}': ${err.message}`);
|
|
82
|
+
}
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
const versions = versionTags.map((entry) => entry[0]);
|
|
86
|
+
const selected = selectMinimumVersion(versions, constraint);
|
|
87
|
+
if (selected === null) {
|
|
88
|
+
const availableStr = versionTags
|
|
89
|
+
.map((entry) => entry[0])
|
|
90
|
+
.sort((a, b) => a.compare(b))
|
|
91
|
+
.map((ver) => ver.version)
|
|
92
|
+
.join(", ");
|
|
93
|
+
throw new VersionResolutionError(`No version satisfying '${versionConstraint}' found among: ${availableStr}`);
|
|
94
|
+
}
|
|
95
|
+
for (const [ver, tagName] of versionTags) {
|
|
96
|
+
if (ver.compare(selected) === 0) {
|
|
97
|
+
return [selected, tagName];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw new VersionResolutionError(`Internal error: selected version ${selected.version} not found in tag list`);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Clone a git repository at a specific tag with depth 1.
|
|
104
|
+
*/
|
|
105
|
+
export async function cloneAtVersion(cloneUrl, versionTag, destination) {
|
|
106
|
+
try {
|
|
107
|
+
await execGit(["clone", "--depth", "1", "--branch", versionTag, cloneUrl, destination], 120_000);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (err instanceof VCSFetchError)
|
|
111
|
+
throw err;
|
|
112
|
+
throw new VCSFetchError(`Failed to clone '${cloneUrl}' at tag '${versionTag}': ${err.message}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=vcs-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcs-resolver.js","sourceRoot":"","sources":["../../src/package/vcs-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BundleMetadata } from "./bundle-metadata.js";
|
|
2
|
+
import type { ParsedManifest } from "./manifest/schema.js";
|
|
3
|
+
import { parsePipeRef } from "./qualified-ref.js";
|
|
4
|
+
export interface VisibilityError {
|
|
5
|
+
readonly pipeRef: string;
|
|
6
|
+
readonly sourceDomain: string;
|
|
7
|
+
readonly targetDomain: string;
|
|
8
|
+
readonly context: string;
|
|
9
|
+
readonly message: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class PackageVisibilityChecker {
|
|
12
|
+
private readonly manifest;
|
|
13
|
+
private readonly bundleMetadatas;
|
|
14
|
+
private readonly exportedPipes;
|
|
15
|
+
private readonly mainPipes;
|
|
16
|
+
constructor(manifest: ParsedManifest | null, bundleMetadatas: BundleMetadata[]);
|
|
17
|
+
isPipeAccessibleFrom(pipeRef: ReturnType<typeof parsePipeRef>, sourceDomain: string): boolean;
|
|
18
|
+
validateAllPipeReferences(): VisibilityError[];
|
|
19
|
+
validateCrossPackageReferences(): VisibilityError[];
|
|
20
|
+
validateReservedDomains(): VisibilityError[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Convenience function: check visibility for a set of bundle metadatas.
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkVisibility(manifest: ParsedManifest | null, bundleMetadatas: BundleMetadata[]): VisibilityError[];
|