@unlimitechcloud/devlink 1.0.2
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/AGENTS.md +880 -0
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/__tests__/e2e.spec.d.ts +8 -0
- package/dist/__tests__/e2e.spec.d.ts.map +1 -0
- package/dist/__tests__/e2e.spec.js +253 -0
- package/dist/__tests__/e2e.spec.js.map +1 -0
- package/dist/__tests__/integration.spec.d.ts +8 -0
- package/dist/__tests__/integration.spec.d.ts.map +1 -0
- package/dist/__tests__/integration.spec.js +274 -0
- package/dist/__tests__/integration.spec.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +610 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/consumers.d.ts +37 -0
- package/dist/commands/consumers.d.ts.map +1 -0
- package/dist/commands/consumers.js +107 -0
- package/dist/commands/consumers.js.map +1 -0
- package/dist/commands/docs.d.ts +59 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +262 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/docs.spec.d.ts +5 -0
- package/dist/commands/docs.spec.d.ts.map +1 -0
- package/dist/commands/docs.spec.js +213 -0
- package/dist/commands/docs.spec.js.map +1 -0
- package/dist/commands/index.d.ts +13 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/install.d.ts +31 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +234 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +22 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/list.spec.d.ts +5 -0
- package/dist/commands/list.spec.d.ts.map +1 -0
- package/dist/commands/list.spec.js +95 -0
- package/dist/commands/list.spec.js.map +1 -0
- package/dist/commands/prune.d.ts +27 -0
- package/dist/commands/prune.d.ts.map +1 -0
- package/dist/commands/prune.js +74 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/publish.d.ts +16 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +225 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/publish.spec.d.ts +5 -0
- package/dist/commands/publish.spec.d.ts.map +1 -0
- package/dist/commands/publish.spec.js +98 -0
- package/dist/commands/publish.spec.js.map +1 -0
- package/dist/commands/push.d.ts +16 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +164 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/remove.d.ts +24 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +80 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/remove.spec.d.ts +5 -0
- package/dist/commands/remove.spec.d.ts.map +1 -0
- package/dist/commands/remove.spec.js +87 -0
- package/dist/commands/remove.spec.js.map +1 -0
- package/dist/commands/resolve.d.ts +20 -0
- package/dist/commands/resolve.d.ts.map +1 -0
- package/dist/commands/resolve.js +52 -0
- package/dist/commands/resolve.js.map +1 -0
- package/dist/commands/resolve.spec.d.ts +5 -0
- package/dist/commands/resolve.spec.d.ts.map +1 -0
- package/dist/commands/resolve.spec.js +87 -0
- package/dist/commands/resolve.spec.js.map +1 -0
- package/dist/commands/verify.d.ts +32 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +127 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +65 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +116 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.spec.d.ts +5 -0
- package/dist/constants.spec.d.ts.map +1 -0
- package/dist/constants.spec.js +72 -0
- package/dist/constants.spec.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/installations.d.ts +79 -0
- package/dist/core/installations.d.ts.map +1 -0
- package/dist/core/installations.js +207 -0
- package/dist/core/installations.js.map +1 -0
- package/dist/core/installations.spec.d.ts +5 -0
- package/dist/core/installations.spec.d.ts.map +1 -0
- package/dist/core/installations.spec.js +261 -0
- package/dist/core/installations.spec.js.map +1 -0
- package/dist/core/lock.d.ts +37 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +198 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/lock.spec.d.ts +5 -0
- package/dist/core/lock.spec.d.ts.map +1 -0
- package/dist/core/lock.spec.js +161 -0
- package/dist/core/lock.spec.js.map +1 -0
- package/dist/core/registry.d.ts +80 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +231 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/registry.spec.d.ts +5 -0
- package/dist/core/registry.spec.d.ts.map +1 -0
- package/dist/core/registry.spec.js +281 -0
- package/dist/core/registry.spec.js.map +1 -0
- package/dist/core/resolver.d.ts +55 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +127 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/resolver.spec.d.ts +5 -0
- package/dist/core/resolver.spec.d.ts.map +1 -0
- package/dist/core/resolver.spec.js +202 -0
- package/dist/core/resolver.spec.js.map +1 -0
- package/dist/core/store.d.ts +65 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +245 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/store.spec.d.ts +5 -0
- package/dist/core/store.spec.d.ts.map +1 -0
- package/dist/core/store.spec.js +195 -0
- package/dist/core/store.spec.js.map +1 -0
- package/dist/formatters/flat.d.ts +41 -0
- package/dist/formatters/flat.d.ts.map +1 -0
- package/dist/formatters/flat.js +131 -0
- package/dist/formatters/flat.js.map +1 -0
- package/dist/formatters/flat.spec.d.ts +5 -0
- package/dist/formatters/flat.spec.d.ts.map +1 -0
- package/dist/formatters/flat.spec.js +130 -0
- package/dist/formatters/flat.spec.js.map +1 -0
- package/dist/formatters/index.d.ts +6 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +6 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/tree.d.ts +29 -0
- package/dist/formatters/tree.d.ts.map +1 -0
- package/dist/formatters/tree.js +256 -0
- package/dist/formatters/tree.js.map +1 -0
- package/dist/formatters/tree.spec.d.ts +5 -0
- package/dist/formatters/tree.spec.d.ts.map +1 -0
- package/dist/formatters/tree.spec.js +127 -0
- package/dist/formatters/tree.spec.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/installer.d.ts +13 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +171 -0
- package/dist/installer.js.map +1 -0
- package/dist/store.d.ts +78 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +344 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +235 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/README.md +68 -0
- package/docs/inspection/consumers.md +178 -0
- package/docs/inspection/list.md +182 -0
- package/docs/inspection/resolve.md +172 -0
- package/docs/installation/configuration.md +238 -0
- package/docs/installation/install.md +184 -0
- package/docs/maintenance/prune.md +159 -0
- package/docs/maintenance/remove.md +174 -0
- package/docs/maintenance/verify.md +174 -0
- package/docs/publishing/publish.md +146 -0
- package/docs/publishing/push.md +146 -0
- package/docs/store/locking.md +118 -0
- package/docs/store/namespaces.md +141 -0
- package/docs/store/structure.md +163 -0
- package/package.json +58 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove Command - Eliminar paquetes del store
|
|
3
|
+
*/
|
|
4
|
+
import { withStoreLock } from "../core/lock.js";
|
|
5
|
+
import { readRegistry, writeRegistry, removePackageFromRegistry, removeNamespaceFromRegistry, getPackageFromRegistry, namespaceExistsInRegistry, } from "../core/registry.js";
|
|
6
|
+
import { deletePackageVersion, deletePackage, deleteNamespace, } from "../core/store.js";
|
|
7
|
+
import { parsePackageSpec } from "../core/resolver.js";
|
|
8
|
+
import { DEFAULT_NAMESPACE } from "../constants.js";
|
|
9
|
+
/**
|
|
10
|
+
* Remove a package version, package, or namespace
|
|
11
|
+
*/
|
|
12
|
+
export async function removeFromStore(target, options = {}) {
|
|
13
|
+
const namespace = options.namespace || DEFAULT_NAMESPACE;
|
|
14
|
+
return withStoreLock(async () => {
|
|
15
|
+
const registry = await readRegistry();
|
|
16
|
+
// Check if target is a namespace
|
|
17
|
+
if (!target.includes("@") && !target.includes("/")) {
|
|
18
|
+
// Could be a namespace or a simple package name
|
|
19
|
+
if (namespaceExistsInRegistry(registry, target) && !options.namespace) {
|
|
20
|
+
// It's a namespace - remove it
|
|
21
|
+
if (target === DEFAULT_NAMESPACE) {
|
|
22
|
+
throw new Error(`Cannot delete reserved namespace '${DEFAULT_NAMESPACE}'`);
|
|
23
|
+
}
|
|
24
|
+
removeNamespaceFromRegistry(registry, target);
|
|
25
|
+
await deleteNamespace(target);
|
|
26
|
+
await writeRegistry(registry);
|
|
27
|
+
return { type: "namespace", name: target };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Parse as package spec
|
|
31
|
+
const parsed = parsePackageSpec(target);
|
|
32
|
+
if (parsed) {
|
|
33
|
+
// Remove specific version
|
|
34
|
+
const { name, version } = parsed;
|
|
35
|
+
const pkgEntry = getPackageFromRegistry(registry, namespace, name);
|
|
36
|
+
if (!pkgEntry || !pkgEntry.versions[version]) {
|
|
37
|
+
throw new Error(`Package ${name}@${version} not found in namespace '${namespace}'`);
|
|
38
|
+
}
|
|
39
|
+
removePackageFromRegistry(registry, namespace, name, version);
|
|
40
|
+
await deletePackageVersion(namespace, name, version);
|
|
41
|
+
await writeRegistry(registry);
|
|
42
|
+
return { type: "version", name, version, namespace };
|
|
43
|
+
}
|
|
44
|
+
// Remove entire package
|
|
45
|
+
const pkgEntry = getPackageFromRegistry(registry, namespace, target);
|
|
46
|
+
if (!pkgEntry) {
|
|
47
|
+
throw new Error(`Package ${target} not found in namespace '${namespace}'`);
|
|
48
|
+
}
|
|
49
|
+
removePackageFromRegistry(registry, namespace, target);
|
|
50
|
+
await deletePackage(namespace, target);
|
|
51
|
+
await writeRegistry(registry);
|
|
52
|
+
return { type: "package", name: target, namespace };
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* CLI handler for remove command
|
|
57
|
+
*/
|
|
58
|
+
export async function handleRemove(args) {
|
|
59
|
+
try {
|
|
60
|
+
const result = await removeFromStore(args.target, {
|
|
61
|
+
namespace: args.namespace,
|
|
62
|
+
});
|
|
63
|
+
switch (result.type) {
|
|
64
|
+
case "namespace":
|
|
65
|
+
console.log(`✓ Removed namespace '${result.name}'`);
|
|
66
|
+
break;
|
|
67
|
+
case "package":
|
|
68
|
+
console.log(`✓ Removed package '${result.name}' from namespace '${result.namespace}'`);
|
|
69
|
+
break;
|
|
70
|
+
case "version":
|
|
71
|
+
console.log(`✓ Removed ${result.name}@${result.version} from namespace '${result.namespace}'`);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error(`✗ Remove failed: ${error.message}`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.spec.d.ts","sourceRoot":"","sources":["../../src/commands/remove.spec.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove Command - Unit tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
5
|
+
import fs from "fs/promises";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import os from "os";
|
|
8
|
+
import { removeFromStore } from "./remove.js";
|
|
9
|
+
import { writeRegistry, createEmptyRegistry, addPackageToRegistry, readRegistry, } from "../core/registry.js";
|
|
10
|
+
import { ensureNamespace } from "../core/store.js";
|
|
11
|
+
const TEST_STORE_PATH = path.join(os.tmpdir(), "devlink-remove-test-" + Date.now());
|
|
12
|
+
vi.mock("../constants.js", async () => {
|
|
13
|
+
const actual = await vi.importActual("../constants.js");
|
|
14
|
+
return {
|
|
15
|
+
...actual,
|
|
16
|
+
getStorePath: () => TEST_STORE_PATH,
|
|
17
|
+
getNamespacesPath: () => path.join(TEST_STORE_PATH, "namespaces"),
|
|
18
|
+
getNamespacePath: (ns) => path.join(TEST_STORE_PATH, "namespaces", ns),
|
|
19
|
+
getPackagePath: (ns, pkg, ver) => path.join(TEST_STORE_PATH, "namespaces", ns, pkg, ver),
|
|
20
|
+
getRegistryPath: () => path.join(TEST_STORE_PATH, "registry.json"),
|
|
21
|
+
getLockPath: () => path.join(TEST_STORE_PATH, ".lock"),
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
describe("Remove Command", () => {
|
|
25
|
+
beforeEach(async () => {
|
|
26
|
+
await fs.mkdir(TEST_STORE_PATH, { recursive: true });
|
|
27
|
+
const registry = createEmptyRegistry();
|
|
28
|
+
addPackageToRegistry(registry, "global", "@test/pkg", "1.0.0", {
|
|
29
|
+
signature: "abc12345",
|
|
30
|
+
published: "2026-02-12T10:00:00Z",
|
|
31
|
+
files: 5,
|
|
32
|
+
});
|
|
33
|
+
addPackageToRegistry(registry, "global", "@test/pkg", "2.0.0", {
|
|
34
|
+
signature: "def67890",
|
|
35
|
+
published: "2026-02-12T11:00:00Z",
|
|
36
|
+
files: 5,
|
|
37
|
+
});
|
|
38
|
+
addPackageToRegistry(registry, "feature", "@test/pkg", "1.0.0-beta", {
|
|
39
|
+
signature: "ghi11111",
|
|
40
|
+
published: "2026-02-12T12:00:00Z",
|
|
41
|
+
files: 5,
|
|
42
|
+
});
|
|
43
|
+
await writeRegistry(registry);
|
|
44
|
+
await ensureNamespace("global");
|
|
45
|
+
await ensureNamespace("feature");
|
|
46
|
+
const v1Path = path.join(TEST_STORE_PATH, "namespaces/global/@test/pkg/1.0.0");
|
|
47
|
+
const v2Path = path.join(TEST_STORE_PATH, "namespaces/global/@test/pkg/2.0.0");
|
|
48
|
+
const betaPath = path.join(TEST_STORE_PATH, "namespaces/feature/@test/pkg/1.0.0-beta");
|
|
49
|
+
await fs.mkdir(v1Path, { recursive: true });
|
|
50
|
+
await fs.mkdir(v2Path, { recursive: true });
|
|
51
|
+
await fs.mkdir(betaPath, { recursive: true });
|
|
52
|
+
await fs.writeFile(path.join(v1Path, "package.json"), "{}");
|
|
53
|
+
await fs.writeFile(path.join(v2Path, "package.json"), "{}");
|
|
54
|
+
await fs.writeFile(path.join(betaPath, "package.json"), "{}");
|
|
55
|
+
});
|
|
56
|
+
afterEach(async () => {
|
|
57
|
+
await fs.rm(TEST_STORE_PATH, { recursive: true, force: true });
|
|
58
|
+
});
|
|
59
|
+
it("should remove specific version", async () => {
|
|
60
|
+
const result = await removeFromStore("@test/pkg@1.0.0", { namespace: "global" });
|
|
61
|
+
expect(result.type).toBe("version");
|
|
62
|
+
expect(result.name).toBe("@test/pkg");
|
|
63
|
+
expect(result.version).toBe("1.0.0");
|
|
64
|
+
const registry = await readRegistry();
|
|
65
|
+
expect(registry.namespaces.global.packages["@test/pkg"].versions["1.0.0"]).toBeUndefined();
|
|
66
|
+
expect(registry.namespaces.global.packages["@test/pkg"].versions["2.0.0"]).toBeDefined();
|
|
67
|
+
});
|
|
68
|
+
it("should remove entire package", async () => {
|
|
69
|
+
const result = await removeFromStore("@test/pkg", { namespace: "global" });
|
|
70
|
+
expect(result.type).toBe("package");
|
|
71
|
+
const registry = await readRegistry();
|
|
72
|
+
expect(registry.namespaces.global.packages["@test/pkg"]).toBeUndefined();
|
|
73
|
+
});
|
|
74
|
+
it("should remove namespace", async () => {
|
|
75
|
+
const result = await removeFromStore("feature");
|
|
76
|
+
expect(result.type).toBe("namespace");
|
|
77
|
+
const registry = await readRegistry();
|
|
78
|
+
expect(registry.namespaces.feature).toBeUndefined();
|
|
79
|
+
});
|
|
80
|
+
it("should throw when removing global namespace", async () => {
|
|
81
|
+
await expect(removeFromStore("global")).rejects.toThrow("Cannot delete reserved namespace 'global'");
|
|
82
|
+
});
|
|
83
|
+
it("should throw for non-existent package", async () => {
|
|
84
|
+
await expect(removeFromStore("nonexistent@1.0.0", { namespace: "global" })).rejects.toThrow("not found");
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=remove.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.spec.js","sourceRoot":"","sources":["../../src/commands/remove.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Command - Resolver paquetes en namespaces
|
|
3
|
+
*/
|
|
4
|
+
export interface ResolveOptions {
|
|
5
|
+
namespaces?: string[];
|
|
6
|
+
flat?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolve packages in namespaces
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolvePackagesCommand(specs: string[], options?: ResolveOptions): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* CLI handler for resolve command
|
|
14
|
+
*/
|
|
15
|
+
export declare function handleResolve(args: {
|
|
16
|
+
specs: string[];
|
|
17
|
+
namespaces?: string[];
|
|
18
|
+
flat?: boolean;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/commands/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Command - Resolver paquetes en namespaces
|
|
3
|
+
*/
|
|
4
|
+
import { readRegistry } from "../core/registry.js";
|
|
5
|
+
import { resolvePackages, parsePackageSpecs, formatResolutionResults, } from "../core/resolver.js";
|
|
6
|
+
import { formatResolutionFlat } from "../formatters/flat.js";
|
|
7
|
+
import { DEFAULT_NAMESPACE } from "../constants.js";
|
|
8
|
+
/**
|
|
9
|
+
* Resolve packages in namespaces
|
|
10
|
+
*/
|
|
11
|
+
export async function resolvePackagesCommand(specs, options = {}) {
|
|
12
|
+
const registry = await readRegistry();
|
|
13
|
+
const packages = parsePackageSpecs(specs);
|
|
14
|
+
if (packages.length === 0) {
|
|
15
|
+
throw new Error("No valid package specifications provided. Use format: pkg@version");
|
|
16
|
+
}
|
|
17
|
+
const namespaces = options.namespaces && options.namespaces.length > 0
|
|
18
|
+
? options.namespaces
|
|
19
|
+
: [DEFAULT_NAMESPACE];
|
|
20
|
+
const results = resolvePackages(packages, namespaces, registry);
|
|
21
|
+
if (options.flat) {
|
|
22
|
+
return formatResolutionFlat(results);
|
|
23
|
+
}
|
|
24
|
+
return formatResolutionResults(results);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* CLI handler for resolve command
|
|
28
|
+
*/
|
|
29
|
+
export async function handleResolve(args) {
|
|
30
|
+
try {
|
|
31
|
+
const output = await resolvePackagesCommand(args.specs, {
|
|
32
|
+
namespaces: args.namespaces,
|
|
33
|
+
flat: args.flat,
|
|
34
|
+
});
|
|
35
|
+
console.log(output);
|
|
36
|
+
// Exit with error if any package not found
|
|
37
|
+
const registry = await readRegistry();
|
|
38
|
+
const packages = parsePackageSpecs(args.specs);
|
|
39
|
+
const namespaces = args.namespaces && args.namespaces.length > 0
|
|
40
|
+
? args.namespaces
|
|
41
|
+
: [DEFAULT_NAMESPACE];
|
|
42
|
+
const results = resolvePackages(packages, namespaces, registry);
|
|
43
|
+
if (results.some(r => !r.found)) {
|
|
44
|
+
process.exit(2);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error(`✗ Resolve failed: ${error.message}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/commands/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAOpD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAe,EACf,UAA0B,EAAE;IAE5B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,UAAU;QACpB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAExB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEhE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAInC;IACC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE;YACtD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEhE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.spec.d.ts","sourceRoot":"","sources":["../../src/commands/resolve.spec.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Command - Integration tests
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
5
|
+
import fs from "fs/promises";
|
|
6
|
+
import path from "path";
|
|
7
|
+
import os from "os";
|
|
8
|
+
import { resolvePackagesCommand } from "./resolve.js";
|
|
9
|
+
import { writeRegistry, createEmptyRegistry, addPackageToRegistry } from "../core/registry.js";
|
|
10
|
+
const TEST_STORE_PATH = path.join(os.tmpdir(), "devlink-resolve-test-" + Date.now());
|
|
11
|
+
vi.mock("../constants.js", async () => {
|
|
12
|
+
const actual = await vi.importActual("../constants.js");
|
|
13
|
+
return {
|
|
14
|
+
...actual,
|
|
15
|
+
getStorePath: () => TEST_STORE_PATH,
|
|
16
|
+
getNamespacesPath: () => path.join(TEST_STORE_PATH, "namespaces"),
|
|
17
|
+
getNamespacePath: (ns) => path.join(TEST_STORE_PATH, "namespaces", ns),
|
|
18
|
+
getPackagePath: (ns, pkg, ver) => path.join(TEST_STORE_PATH, "namespaces", ns, pkg, ver),
|
|
19
|
+
getRegistryPath: () => path.join(TEST_STORE_PATH, "registry.json"),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
describe("Resolve Command", () => {
|
|
23
|
+
beforeEach(async () => {
|
|
24
|
+
await fs.mkdir(TEST_STORE_PATH, { recursive: true });
|
|
25
|
+
const registry = createEmptyRegistry();
|
|
26
|
+
addPackageToRegistry(registry, "global", "@webforgeai/core", "1.0.0", {
|
|
27
|
+
signature: "global-v1",
|
|
28
|
+
published: "2026-02-12T10:00:00Z",
|
|
29
|
+
files: 10,
|
|
30
|
+
});
|
|
31
|
+
addPackageToRegistry(registry, "global", "@webforgeai/core", "2.0.0", {
|
|
32
|
+
signature: "global-v2",
|
|
33
|
+
published: "2026-02-12T11:00:00Z",
|
|
34
|
+
files: 12,
|
|
35
|
+
});
|
|
36
|
+
addPackageToRegistry(registry, "feature", "@webforgeai/core", "1.0.0", {
|
|
37
|
+
signature: "feature-v1",
|
|
38
|
+
published: "2026-02-12T12:00:00Z",
|
|
39
|
+
files: 11,
|
|
40
|
+
});
|
|
41
|
+
await writeRegistry(registry);
|
|
42
|
+
});
|
|
43
|
+
afterEach(async () => {
|
|
44
|
+
await fs.rm(TEST_STORE_PATH, { recursive: true, force: true });
|
|
45
|
+
});
|
|
46
|
+
it("should resolve package from global namespace", async () => {
|
|
47
|
+
const output = await resolvePackagesCommand(["@webforgeai/core@1.0.0"]);
|
|
48
|
+
expect(output).toContain("✓");
|
|
49
|
+
expect(output).toContain("@webforgeai/core@1.0.0");
|
|
50
|
+
expect(output).toContain("global");
|
|
51
|
+
});
|
|
52
|
+
it("should resolve from first matching namespace", async () => {
|
|
53
|
+
const output = await resolvePackagesCommand(["@webforgeai/core@1.0.0"], { namespaces: ["feature", "global"] });
|
|
54
|
+
expect(output).toContain("feature");
|
|
55
|
+
// Signature is truncated to 8 chars in output
|
|
56
|
+
expect(output).toContain("feature-");
|
|
57
|
+
});
|
|
58
|
+
it("should fall back to later namespaces", async () => {
|
|
59
|
+
const output = await resolvePackagesCommand(["@webforgeai/core@2.0.0"], { namespaces: ["feature", "global"] });
|
|
60
|
+
expect(output).toContain("global");
|
|
61
|
+
// Signature is truncated to 8 chars in output
|
|
62
|
+
expect(output).toContain("global-v");
|
|
63
|
+
});
|
|
64
|
+
it("should show not found for missing packages", async () => {
|
|
65
|
+
const output = await resolvePackagesCommand(["nonexistent@1.0.0"]);
|
|
66
|
+
expect(output).toContain("✗");
|
|
67
|
+
expect(output).toContain("not found");
|
|
68
|
+
});
|
|
69
|
+
it("should resolve multiple packages", async () => {
|
|
70
|
+
const output = await resolvePackagesCommand([
|
|
71
|
+
"@webforgeai/core@1.0.0",
|
|
72
|
+
"@webforgeai/core@2.0.0",
|
|
73
|
+
]);
|
|
74
|
+
expect(output).toContain("@webforgeai/core@1.0.0");
|
|
75
|
+
expect(output).toContain("@webforgeai/core@2.0.0");
|
|
76
|
+
});
|
|
77
|
+
it("should support flat format", async () => {
|
|
78
|
+
const output = await resolvePackagesCommand(["@webforgeai/core@1.0.0"], { flat: true });
|
|
79
|
+
expect(output).toContain("@webforgeai/core@1.0.0");
|
|
80
|
+
expect(output).toContain("global");
|
|
81
|
+
expect(output).not.toContain("✓");
|
|
82
|
+
});
|
|
83
|
+
it("should throw for invalid specs", async () => {
|
|
84
|
+
await expect(resolvePackagesCommand(["invalid"])).rejects.toThrow("No valid package specifications");
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=resolve.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.spec.js","sourceRoot":"","sources":["../../src/commands/resolve.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Command - Verificar integridad del store
|
|
3
|
+
*/
|
|
4
|
+
export interface VerifyResult {
|
|
5
|
+
orphansInRegistry: {
|
|
6
|
+
namespace: string;
|
|
7
|
+
package: string;
|
|
8
|
+
version: string;
|
|
9
|
+
}[];
|
|
10
|
+
orphansOnDisk: {
|
|
11
|
+
namespace: string;
|
|
12
|
+
package: string;
|
|
13
|
+
version: string;
|
|
14
|
+
}[];
|
|
15
|
+
signatureMismatches: {
|
|
16
|
+
namespace: string;
|
|
17
|
+
package: string;
|
|
18
|
+
version: string;
|
|
19
|
+
}[];
|
|
20
|
+
fixed: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Verify store integrity
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyStore(fix?: boolean): Promise<VerifyResult>;
|
|
26
|
+
/**
|
|
27
|
+
* CLI handler for verify command
|
|
28
|
+
*/
|
|
29
|
+
export declare function handleVerify(args: {
|
|
30
|
+
fix?: boolean;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuBH,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7E,aAAa,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,mBAAmB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAiF7E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CzE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify Command - Verificar integridad del store
|
|
3
|
+
*/
|
|
4
|
+
import { withStoreLock } from "../core/lock.js";
|
|
5
|
+
import { readRegistry, writeRegistry, getNamespacesFromRegistry, getPackagesInNamespace, getVersionsInNamespace, removePackageFromRegistry, } from "../core/registry.js";
|
|
6
|
+
import { listNamespaces, packageVersionExists, readPackageSignature, findOrphanedPackages, deletePackageVersion, } from "../core/store.js";
|
|
7
|
+
/**
|
|
8
|
+
* Verify store integrity
|
|
9
|
+
*/
|
|
10
|
+
export async function verifyStore(fix = false) {
|
|
11
|
+
const result = {
|
|
12
|
+
orphansInRegistry: [],
|
|
13
|
+
orphansOnDisk: [],
|
|
14
|
+
signatureMismatches: [],
|
|
15
|
+
fixed: false,
|
|
16
|
+
};
|
|
17
|
+
const registry = await readRegistry();
|
|
18
|
+
// Check for orphans in registry (entries without files on disk)
|
|
19
|
+
const registryNamespaces = getNamespacesFromRegistry(registry);
|
|
20
|
+
for (const ns of registryNamespaces) {
|
|
21
|
+
const packages = getPackagesInNamespace(registry, ns);
|
|
22
|
+
for (const pkg of packages) {
|
|
23
|
+
const versions = getVersionsInNamespace(registry, ns, pkg);
|
|
24
|
+
for (const version of versions) {
|
|
25
|
+
const exists = await packageVersionExists(ns, pkg, version);
|
|
26
|
+
if (!exists) {
|
|
27
|
+
result.orphansInRegistry.push({ namespace: ns, package: pkg, version });
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Check signature
|
|
31
|
+
const diskSig = await readPackageSignature(ns, pkg, version);
|
|
32
|
+
const regEntry = registry.namespaces[ns]?.packages[pkg]?.versions[version];
|
|
33
|
+
if (diskSig && regEntry && diskSig !== regEntry.signature) {
|
|
34
|
+
result.signatureMismatches.push({ namespace: ns, package: pkg, version });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Check for orphans on disk (files without registry entries)
|
|
41
|
+
const diskNamespaces = await listNamespaces();
|
|
42
|
+
for (const ns of diskNamespaces) {
|
|
43
|
+
const registeredPackages = new Set();
|
|
44
|
+
const nsEntry = registry.namespaces[ns];
|
|
45
|
+
if (nsEntry) {
|
|
46
|
+
for (const [pkg, pkgEntry] of Object.entries(nsEntry.packages)) {
|
|
47
|
+
for (const version of Object.keys(pkgEntry.versions)) {
|
|
48
|
+
registeredPackages.add(`${pkg}@${version}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const orphans = await findOrphanedPackages(ns, registeredPackages);
|
|
53
|
+
for (const orphan of orphans) {
|
|
54
|
+
result.orphansOnDisk.push({
|
|
55
|
+
namespace: ns,
|
|
56
|
+
package: orphan.packageName,
|
|
57
|
+
version: orphan.version,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Fix issues if requested
|
|
62
|
+
if (fix && (result.orphansInRegistry.length > 0 || result.orphansOnDisk.length > 0)) {
|
|
63
|
+
await withStoreLock(async () => {
|
|
64
|
+
const registry = await readRegistry();
|
|
65
|
+
// Remove orphans from registry
|
|
66
|
+
for (const orphan of result.orphansInRegistry) {
|
|
67
|
+
removePackageFromRegistry(registry, orphan.namespace, orphan.package, orphan.version);
|
|
68
|
+
}
|
|
69
|
+
// Remove orphans from disk
|
|
70
|
+
for (const orphan of result.orphansOnDisk) {
|
|
71
|
+
await deletePackageVersion(orphan.namespace, orphan.package, orphan.version);
|
|
72
|
+
}
|
|
73
|
+
await writeRegistry(registry);
|
|
74
|
+
result.fixed = true;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* CLI handler for verify command
|
|
81
|
+
*/
|
|
82
|
+
export async function handleVerify(args) {
|
|
83
|
+
try {
|
|
84
|
+
console.log("🔍 Verifying store integrity...\n");
|
|
85
|
+
const result = await verifyStore(args.fix);
|
|
86
|
+
let hasIssues = false;
|
|
87
|
+
if (result.orphansInRegistry.length > 0) {
|
|
88
|
+
hasIssues = true;
|
|
89
|
+
console.log(`⚠️ Registry entries without files (${result.orphansInRegistry.length}):`);
|
|
90
|
+
for (const o of result.orphansInRegistry) {
|
|
91
|
+
console.log(` - ${o.namespace}/${o.package}@${o.version}`);
|
|
92
|
+
}
|
|
93
|
+
console.log();
|
|
94
|
+
}
|
|
95
|
+
if (result.orphansOnDisk.length > 0) {
|
|
96
|
+
hasIssues = true;
|
|
97
|
+
console.log(`⚠️ Files without registry entries (${result.orphansOnDisk.length}):`);
|
|
98
|
+
for (const o of result.orphansOnDisk) {
|
|
99
|
+
console.log(` - ${o.namespace}/${o.package}@${o.version}`);
|
|
100
|
+
}
|
|
101
|
+
console.log();
|
|
102
|
+
}
|
|
103
|
+
if (result.signatureMismatches.length > 0) {
|
|
104
|
+
hasIssues = true;
|
|
105
|
+
console.log(`⚠️ Signature mismatches (${result.signatureMismatches.length}):`);
|
|
106
|
+
for (const o of result.signatureMismatches) {
|
|
107
|
+
console.log(` - ${o.namespace}/${o.package}@${o.version}`);
|
|
108
|
+
}
|
|
109
|
+
console.log();
|
|
110
|
+
}
|
|
111
|
+
if (result.fixed) {
|
|
112
|
+
console.log("✓ Issues fixed");
|
|
113
|
+
}
|
|
114
|
+
else if (hasIssues && !args.fix) {
|
|
115
|
+
console.log("Run with --fix to repair issues");
|
|
116
|
+
process.exit(5);
|
|
117
|
+
}
|
|
118
|
+
else if (!hasIssues) {
|
|
119
|
+
console.log("✓ Store is healthy");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`✗ Verify failed: ${error.message}`);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config - Carga y gestión de configuración
|
|
3
|
+
*/
|
|
4
|
+
import type { DevLinkConfig, FactoryContext, ModeConfig, PackageVersions } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Crea el contexto para las factories
|
|
7
|
+
*/
|
|
8
|
+
export declare function createContext(packages: Record<string, PackageVersions>): FactoryContext;
|
|
9
|
+
/**
|
|
10
|
+
* Detecta el modo basado en la configuración o defaults
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectMode(config: DevLinkConfig, ctx: FactoryContext): "dev" | "prod";
|
|
13
|
+
/**
|
|
14
|
+
* Carga y normaliza la configuración
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadConfig(configPath: string): Promise<{
|
|
17
|
+
config: DevLinkConfig;
|
|
18
|
+
ctx: FactoryContext;
|
|
19
|
+
mode: "dev" | "prod";
|
|
20
|
+
modeConfig: ModeConfig;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GACxC,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,cAAc,GAClB,KAAK,GAAG,MAAM,CAYhB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC,CAqCD"}
|