@g3nomaly/core 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/installFromSources.d.ts +49 -0
- package/dist/cli/commands/installFromSources.d.ts.map +1 -0
- package/dist/cli/commands/installFromSources.js +138 -0
- package/dist/cli/commands/installFromSources.js.map +1 -0
- package/dist/cli/commands/ls.d.ts +11 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +43 -0
- package/dist/cli/commands/ls.js.map +1 -1
- package/dist/cli/commands/sources.d.ts +45 -0
- package/dist/cli/commands/sources.d.ts.map +1 -0
- package/dist/cli/commands/sources.js +89 -0
- package/dist/cli/commands/sources.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installDialogues.d.ts +15 -0
- package/dist/cli/installDialogues.d.ts.map +1 -0
- package/dist/cli/installDialogues.js +72 -0
- package/dist/cli/installDialogues.js.map +1 -0
- package/dist/cli/pick.d.ts +14 -0
- package/dist/cli/pick.d.ts.map +1 -0
- package/dist/cli/pick.js +35 -0
- package/dist/cli/pick.js.map +1 -0
- package/dist/cli/report.d.ts +34 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +71 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/config/types.d.ts +0 -16
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -2
- package/dist/config/types.js.map +1 -1
- package/dist/installer/files.d.ts +15 -0
- package/dist/installer/files.d.ts.map +1 -0
- package/dist/installer/files.js +22 -0
- package/dist/installer/files.js.map +1 -0
- package/dist/installer/index.d.ts +13 -0
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +7 -0
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/manifest.d.ts +59 -0
- package/dist/installer/manifest.d.ts.map +1 -0
- package/dist/installer/manifest.js +60 -0
- package/dist/installer/manifest.js.map +1 -0
- package/dist/installer/manifestSources.d.ts +21 -0
- package/dist/installer/manifestSources.d.ts.map +1 -0
- package/dist/installer/manifestSources.js +39 -0
- package/dist/installer/manifestSources.js.map +1 -0
- package/dist/installer/marketplace.d.ts +34 -0
- package/dist/installer/marketplace.d.ts.map +1 -0
- package/dist/installer/marketplace.js +64 -0
- package/dist/installer/marketplace.js.map +1 -0
- package/dist/installer/origin.d.ts +43 -0
- package/dist/installer/origin.d.ts.map +1 -0
- package/dist/installer/origin.js +22 -0
- package/dist/installer/origin.js.map +1 -0
- package/dist/installer/resolve.d.ts +78 -0
- package/dist/installer/resolve.d.ts.map +1 -0
- package/dist/installer/resolve.js +184 -0
- package/dist/installer/resolve.js.map +1 -0
- package/dist/installer/sourceRegistry.d.ts +59 -0
- package/dist/installer/sourceRegistry.d.ts.map +1 -0
- package/dist/installer/sourceRegistry.js +71 -0
- package/dist/installer/sourceRegistry.js.map +1 -0
- package/dist/sources/checkout.d.ts +14 -0
- package/dist/sources/checkout.d.ts.map +1 -0
- package/dist/sources/checkout.js +27 -0
- package/dist/sources/checkout.js.map +1 -0
- package/dist/sources/git.d.ts +9 -0
- package/dist/sources/git.d.ts.map +1 -0
- package/dist/sources/git.js +22 -0
- package/dist/sources/git.js.map +1 -0
- package/dist/sources/index.d.ts +5 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +6 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/local.d.ts +10 -0
- package/dist/sources/local.d.ts.map +1 -0
- package/dist/sources/local.js +20 -0
- package/dist/sources/local.js.map +1 -0
- package/dist/sources/npm.d.ts +13 -0
- package/dist/sources/npm.d.ts.map +1 -0
- package/dist/sources/npm.js +128 -0
- package/dist/sources/npm.js.map +1 -0
- package/dist/sources/packageJson.d.ts +3 -0
- package/dist/sources/packageJson.d.ts.map +1 -0
- package/dist/sources/packageJson.js +13 -0
- package/dist/sources/packageJson.js.map +1 -0
- package/dist/sources/parse.d.ts +34 -0
- package/dist/sources/parse.d.ts.map +1 -0
- package/dist/sources/parse.js +92 -0
- package/dist/sources/parse.js.map +1 -0
- package/dist/sources/process.d.ts +18 -0
- package/dist/sources/process.d.ts.map +1 -0
- package/dist/sources/process.js +43 -0
- package/dist/sources/process.js.map +1 -0
- package/dist/sources/register.d.ts +16 -0
- package/dist/sources/register.d.ts.map +1 -0
- package/dist/sources/register.js +37 -0
- package/dist/sources/register.js.map +1 -0
- package/dist/sources/types.d.ts +73 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +36 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/utils/errors.d.ts +3 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +6 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +5 -1
package/dist/cli/pick.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// packages/core/src/cli/pick.ts
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { guardCancel } from "../utils/prompt";
|
|
5
|
+
import { StepKind, runDialogueValue } from "./dialogue";
|
|
6
|
+
import { c } from "./theme";
|
|
7
|
+
const PicksSchema = z.array(z.string());
|
|
8
|
+
/** The multi-select `pickOffers` asks through, by step id `selectEntries`, for preset answers. */
|
|
9
|
+
export function selectEntriesDialogue(noun) {
|
|
10
|
+
return {
|
|
11
|
+
steps: {
|
|
12
|
+
selectEntries: {
|
|
13
|
+
kind: StepKind.MultiSelect,
|
|
14
|
+
message: `Select ${noun}s to install:`,
|
|
15
|
+
choices: (input) => input.keyChoices ?? [],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Asks which offers to install, each as `<key>@<source>`, so two sources
|
|
22
|
+
* offering one key stay apart. Exits when the prompt is cancelled.
|
|
23
|
+
*
|
|
24
|
+
* @returns the picked requests, e.g. `["emphasise@g3n-skills"]`
|
|
25
|
+
*/
|
|
26
|
+
export async function pickOffers(available, noun, answers) {
|
|
27
|
+
const keyChoices = [...available]
|
|
28
|
+
.sort((a, b) => a.key.localeCompare(b.key) || a.entry.origin.source.localeCompare(b.entry.origin.source))
|
|
29
|
+
.map(({ key, entry }) => ({
|
|
30
|
+
value: `${key}@${entry.origin.source}`,
|
|
31
|
+
label: `${c.key(key)} ${chalk.dim(`@${entry.origin.source}`)} ${chalk.dim("—")} ${chalk.dim(entry.description ?? entry.name)}`,
|
|
32
|
+
}));
|
|
33
|
+
return PicksSchema.parse(guardCancel(await runDialogueValue(selectEntriesDialogue(noun), { keyChoices }, answers)) ?? []);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=pick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAExC,kGAAkG;AAClG,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO;QACL,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,IAAI,EAAK,QAAQ,CAAC,WAAW;gBAC7B,OAAO,EAAE,UAAU,IAAI,eAAe;gBACtC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAwB,SAAoC,EAAE,IAAY,EAAE,OAAyB;IACnI,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;SAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACxG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;KACjI,CAAC,CAAC,CAAC;IACN,OAAO,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { OriginEntry } from "../installer/origin";
|
|
2
|
+
import type { SourceRegistry } from "../installer/sourceRegistry";
|
|
3
|
+
import type { Resolution } from "../installer/resolve";
|
|
4
|
+
import type { Dialogue, DialogueAnswers } from "./dialogue";
|
|
5
|
+
import type { InstallInput } from "./types";
|
|
6
|
+
/** Prints every warning of a source registry and every source it could not read. */
|
|
7
|
+
export declare function reportSourceRegistry<T extends OriginEntry>(registry: SourceRegistry<T>): void;
|
|
8
|
+
/** Runs `read`, and on a throw prints its message and exits with code 1. */
|
|
9
|
+
export declare function orExit<T>(read: () => T): T;
|
|
10
|
+
/** What `reportResolution` names in its messages. */
|
|
11
|
+
export interface ResolutionContext {
|
|
12
|
+
/** Installer binary, e.g. `g3n-skills` */
|
|
13
|
+
bin: string;
|
|
14
|
+
/** What one entry is called, e.g. `skill` */
|
|
15
|
+
noun: string;
|
|
16
|
+
}
|
|
17
|
+
/** The confirm step `reportResolution` asks through, by step id `entryNotFound`, for preset answers. */
|
|
18
|
+
export declare function entryNotFoundDialogue(noun: string): Dialogue<InstallInput>;
|
|
19
|
+
/**
|
|
20
|
+
* Prints what a resolution could not settle and why each unnamed entry is in
|
|
21
|
+
* it. Exits on an ambiguous name; on unknown names, asks whether to go on
|
|
22
|
+
* with the rest and exits when the answer is no or nothing is left.
|
|
23
|
+
*/
|
|
24
|
+
export declare function reportResolution<T extends OriginEntry>(resolution: Resolution<T>, context: ResolutionContext, answers?: DialogueAnswers): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* The sources narrowed to `only`, or all of them when it is absent. Exits
|
|
27
|
+
* naming the `source ls` command when no source has that name.
|
|
28
|
+
*
|
|
29
|
+
* @param bin - Installer binary for the hint, e.g. `g3n-skills`
|
|
30
|
+
*/
|
|
31
|
+
export declare function narrowSources<S extends {
|
|
32
|
+
name: string;
|
|
33
|
+
}>(sources: readonly S[], only: string | undefined, bin: string): S[];
|
|
34
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAG7F;AAED,4EAA4E;AAC5E,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAO1C;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,GAAG,EAAG,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAU1E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAC1D,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAQ3H"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { errorMessage } from "../utils/errors";
|
|
2
|
+
import { StepKind, runDialogueValue } from "./dialogue";
|
|
3
|
+
import { c, lineError, lineInfo, lineWarn } from "./theme";
|
|
4
|
+
/** Prints every warning of a source registry and every source it could not read. */
|
|
5
|
+
export function reportSourceRegistry(registry) {
|
|
6
|
+
for (const warning of registry.warnings)
|
|
7
|
+
console.log(lineWarn(warning));
|
|
8
|
+
for (const failed of registry.failed)
|
|
9
|
+
console.log(lineWarn(`${c.key(failed.name)} could not be read: ${failed.error}`));
|
|
10
|
+
}
|
|
11
|
+
/** Runs `read`, and on a throw prints its message and exits with code 1. */
|
|
12
|
+
export function orExit(read) {
|
|
13
|
+
try {
|
|
14
|
+
return read();
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error(lineError(errorMessage(error)));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** The confirm step `reportResolution` asks through, by step id `entryNotFound`, for preset answers. */
|
|
22
|
+
export function entryNotFoundDialogue(noun) {
|
|
23
|
+
return {
|
|
24
|
+
steps: {
|
|
25
|
+
entryNotFound: {
|
|
26
|
+
kind: StepKind.Confirm,
|
|
27
|
+
message: `Unknown ${noun}(s): {unknown}. Continue with the remaining selection?`,
|
|
28
|
+
initial: false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prints what a resolution could not settle and why each unnamed entry is in
|
|
35
|
+
* it. Exits on an ambiguous name; on unknown names, asks whether to go on
|
|
36
|
+
* with the rest and exits when the answer is no or nothing is left.
|
|
37
|
+
*/
|
|
38
|
+
export async function reportResolution(resolution, context, answers) {
|
|
39
|
+
if (resolution.ambiguous.length > 0) {
|
|
40
|
+
for (const message of resolution.ambiguous)
|
|
41
|
+
console.error(lineError(message));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
if (resolution.unknown.length > 0) {
|
|
45
|
+
const unknown = resolution.unknown.map((k) => c.key(k)).join(", ");
|
|
46
|
+
console.error(lineError(`Unknown ${context.noun}(s): ${unknown}. Run ${c.cmd(`${context.bin} ls`)} to see what the sources offer.`));
|
|
47
|
+
const proceed = resolution.entries.size > 0
|
|
48
|
+
&& (await runDialogueValue(entryNotFoundDialogue(context.noun), { unknown }, answers)) === true;
|
|
49
|
+
if (!proceed)
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
for (const [key, why] of Object.entries(resolution.notes))
|
|
53
|
+
console.log(lineInfo(`${c.key(key)}: ${why}`));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The sources narrowed to `only`, or all of them when it is absent. Exits
|
|
57
|
+
* naming the `source ls` command when no source has that name.
|
|
58
|
+
*
|
|
59
|
+
* @param bin - Installer binary for the hint, e.g. `g3n-skills`
|
|
60
|
+
*/
|
|
61
|
+
export function narrowSources(sources, only, bin) {
|
|
62
|
+
if (only === undefined)
|
|
63
|
+
return [...sources];
|
|
64
|
+
const narrowed = sources.filter((source) => source.name === only);
|
|
65
|
+
if (narrowed.length === 0) {
|
|
66
|
+
console.error(lineError(`No source named ${c.key(only)} is registered. Run ${c.cmd(`${bin} source ls`)} to see them.`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
return narrowed;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -3,10 +3,6 @@ export declare const G3nuiSettingsSchema: z.ZodObject<{
|
|
|
3
3
|
componentsDir: z.ZodDefault<z.ZodString>;
|
|
4
4
|
includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
|
|
5
5
|
includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
-
manifestFormat: z.ZodDefault<z.ZodEnum<{
|
|
7
|
-
json: "json";
|
|
8
|
-
ts: "ts";
|
|
9
|
-
}>>;
|
|
10
6
|
registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
11
7
|
}, z.core.$strip>;
|
|
12
8
|
export declare const G3nuiConfigSchema: z.ZodObject<{
|
|
@@ -14,10 +10,6 @@ export declare const G3nuiConfigSchema: z.ZodObject<{
|
|
|
14
10
|
componentsDir: z.ZodDefault<z.ZodString>;
|
|
15
11
|
includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
|
|
16
12
|
includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
|
|
17
|
-
manifestFormat: z.ZodDefault<z.ZodEnum<{
|
|
18
|
-
json: "json";
|
|
19
|
-
ts: "ts";
|
|
20
|
-
}>>;
|
|
21
13
|
registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
22
14
|
}, z.core.$strip>>;
|
|
23
15
|
}, z.core.$strip>;
|
|
@@ -68,10 +60,6 @@ export declare const G3nConfigFileSchema: z.ZodObject<{
|
|
|
68
60
|
componentsDir: z.ZodDefault<z.ZodString>;
|
|
69
61
|
includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
|
|
70
62
|
includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
|
|
71
|
-
manifestFormat: z.ZodDefault<z.ZodEnum<{
|
|
72
|
-
json: "json";
|
|
73
|
-
ts: "ts";
|
|
74
|
-
}>>;
|
|
75
63
|
registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
76
64
|
}, z.core.$strip>>;
|
|
77
65
|
}, z.core.$strip>>;
|
|
@@ -101,10 +89,6 @@ export declare const G3nConfigSchema: z.ZodObject<{
|
|
|
101
89
|
componentsDir: z.ZodDefault<z.ZodString>;
|
|
102
90
|
includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
|
|
103
91
|
includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
|
|
104
|
-
manifestFormat: z.ZodDefault<z.ZodEnum<{
|
|
105
|
-
json: "json";
|
|
106
|
-
ts: "ts";
|
|
107
|
-
}>>;
|
|
108
92
|
registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
109
93
|
}, z.core.$strip>>;
|
|
110
94
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;iBAS9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAE/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAE7D,eAAO,MAAM,uBAAuB;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAE7B,CAAC;AAMH,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAMH,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAK,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAU,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
package/dist/config/types.js
CHANGED
|
@@ -12,8 +12,6 @@ export const G3nuiSettingsSchema = z.object({
|
|
|
12
12
|
includeDebugFiles: z.boolean().default(false),
|
|
13
13
|
/** Whether to copy .meta.ts files alongside components */
|
|
14
14
|
includeMetaFiles: z.boolean().default(false),
|
|
15
|
-
/** Format of the user manifest file: json (default) or ts */
|
|
16
|
-
manifestFormat: z.enum(["json", "ts"]).default("json"),
|
|
17
15
|
/** External package adapters to load (e.g. ["shadcn"]) */
|
|
18
16
|
registeredPackages: z.array(z.string()).default([]),
|
|
19
17
|
});
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,0EAA0E;AAC1E,4EAA4E;AAC5E,uDAAuD;AACvD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,2DAA2D;IAC3D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACtD,2DAA2D;IAC3D,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,0DAA0D;IAC1D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** What `listFiles` leaves out. Folders always skipped: `node_modules` and `.git`. */
|
|
2
|
+
export interface FileFilter {
|
|
3
|
+
/** Folder names, or folder paths relative to the listed root, e.g. `tests` or `.claude-plugin/types` */
|
|
4
|
+
skipDirs?: readonly string[];
|
|
5
|
+
/** Tested against each file name, e.g. `/\.test\.tsx?$/` */
|
|
6
|
+
skipFiles?: RegExp;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Paths of every file below `dir`, relative to it and sorted, without the
|
|
10
|
+
* folders and files `filter` names.
|
|
11
|
+
*
|
|
12
|
+
* @param dir - Absolute folder to list
|
|
13
|
+
*/
|
|
14
|
+
export declare function listFiles(dir: string, filter?: FileFilter): string[];
|
|
15
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/installer/files.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,MAAM,WAAW,UAAU;IACzB,wGAAwG;IACxG,QAAQ,CAAC,EAAG,SAAS,MAAM,EAAE,CAAA;IAC7B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,EAAE,CAUxE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// packages/core/src/installer/files.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const ALWAYS_SKIPPED = ["node_modules", ".git"];
|
|
5
|
+
/**
|
|
6
|
+
* Paths of every file below `dir`, relative to it and sorted, without the
|
|
7
|
+
* folders and files `filter` names.
|
|
8
|
+
*
|
|
9
|
+
* @param dir - Absolute folder to list
|
|
10
|
+
*/
|
|
11
|
+
export function listFiles(dir, filter = {}) {
|
|
12
|
+
const skipDirs = new Set([...ALWAYS_SKIPPED, ...(filter.skipDirs ?? [])]);
|
|
13
|
+
const walk = (current) => fs.readdirSync(current, { withFileTypes: true }).flatMap((d) => {
|
|
14
|
+
const full = path.join(current, d.name);
|
|
15
|
+
const rel = path.relative(dir, full);
|
|
16
|
+
if (d.isDirectory())
|
|
17
|
+
return skipDirs.has(d.name) || skipDirs.has(rel) ? [] : walk(full);
|
|
18
|
+
return filter.skipFiles?.test(d.name) === true ? [] : [rel];
|
|
19
|
+
});
|
|
20
|
+
return walk(dir).sort();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/installer/files.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAU5B,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAM,GAAe,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,CAAC,OAAe,EAAY,EAAE,CACzC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,GAAG,GAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvF,OAAO,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -3,4 +3,17 @@ export { createInstallerIO } from "./io";
|
|
|
3
3
|
export { classifyFile, classifyFiles, recordedHashes } from "./classify";
|
|
4
4
|
export { applyClassifications, copySource } from "./install";
|
|
5
5
|
export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
|
|
6
|
+
export { EntryOriginSchema, OriginEntrySchema } from "./origin";
|
|
7
|
+
export type { EntryOrigin, OriginEntry, ReadContext } from "./origin";
|
|
8
|
+
export { listFiles } from "./files";
|
|
9
|
+
export type { FileFilter } from "./files";
|
|
10
|
+
export { MANIFEST_DIRS, manifestFile, readMarketplace, resolveInside } from "./marketplace";
|
|
11
|
+
export type { MarketplacePlugin } from "./marketplace";
|
|
12
|
+
export { installManifestSchema, loadInstallManifest, installedEntries, saveInstallManifest } from "./manifest";
|
|
13
|
+
export type { InstallManifest } from "./manifest";
|
|
14
|
+
export { manifestSources, registerSource, unregisterSource } from "./manifestSources";
|
|
15
|
+
export { loadSourceRegistry, offers, offerRegistry, entrySource } from "./sourceRegistry";
|
|
16
|
+
export type { SourceRegistry, SourceEntries, SourceOffer, ReadSource, FailedSource } from "./sourceRegistry";
|
|
17
|
+
export { parseRequest, formatRequest, resolveDependencies, resolveRequests, resolveInstalled, resolveUpdates, installedOrigins } from "./resolve";
|
|
18
|
+
export type { EntryRequest, Resolution, ResolvedDependencies } from "./resolve";
|
|
6
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC9G,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjJ,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/installer/index.js
CHANGED
|
@@ -4,4 +4,11 @@ export { createInstallerIO } from "./io";
|
|
|
4
4
|
export { classifyFile, classifyFiles, recordedHashes } from "./classify";
|
|
5
5
|
export { applyClassifications, copySource } from "./install";
|
|
6
6
|
export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
|
|
7
|
+
export { EntryOriginSchema, OriginEntrySchema } from "./origin";
|
|
8
|
+
export { listFiles } from "./files";
|
|
9
|
+
export { MANIFEST_DIRS, manifestFile, readMarketplace, resolveInside } from "./marketplace";
|
|
10
|
+
export { installManifestSchema, loadInstallManifest, installedEntries, saveInstallManifest } from "./manifest";
|
|
11
|
+
export { manifestSources, registerSource, unregisterSource } from "./manifestSources";
|
|
12
|
+
export { loadSourceRegistry, offers, offerRegistry, entrySource } from "./sourceRegistry";
|
|
13
|
+
export { parseRequest, formatRequest, resolveDependencies, resolveRequests, resolveInstalled, resolveUpdates, installedOrigins } from "./resolve";
|
|
7
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE9G,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type RegistryStore } from "../registry/registry.store";
|
|
3
|
+
import type { BaseRegistryEntry } from "../registry/types";
|
|
4
|
+
import { type SourceRecord } from "../sources/types";
|
|
5
|
+
/**
|
|
6
|
+
* One install manifest: the sources registered for an install target and
|
|
7
|
+
* the entries installed into it, as `{ "sources": {...}, "entries": {...} }`
|
|
8
|
+
* on disk.
|
|
9
|
+
*
|
|
10
|
+
* Created by `loadInstallManifest` in each installer's project setup
|
|
11
|
+
* (`skills.json`, `mods.json`, the g3nui manifest). The installer changes
|
|
12
|
+
* `sources` directly and hands `store` to the core `add`, `update` and
|
|
13
|
+
* `remove` commands; `saveInstallManifest` writes both back.
|
|
14
|
+
*/
|
|
15
|
+
export interface InstallManifest {
|
|
16
|
+
/** Absolute path of the file, e.g. `/home/me/app/.claude/skills.json` */
|
|
17
|
+
filePath: string;
|
|
18
|
+
sources: SourceRecord;
|
|
19
|
+
/** Installed entries by key */
|
|
20
|
+
store: RegistryStore<BaseRegistryEntry>;
|
|
21
|
+
}
|
|
22
|
+
/** Schema of a manifest file whose entries match `entrySchema`. */
|
|
23
|
+
export declare function installManifestSchema<S extends z.ZodType>(entrySchema: S): z.ZodObject<{
|
|
24
|
+
sources: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
25
|
+
kind: z.ZodLiteral<"git">;
|
|
26
|
+
url: z.ZodString;
|
|
27
|
+
ref: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
+
kind: z.ZodLiteral<"npm">;
|
|
30
|
+
package: z.ZodString;
|
|
31
|
+
version: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
33
|
+
kind: z.ZodLiteral<"local">;
|
|
34
|
+
path: z.ZodString;
|
|
35
|
+
}, z.core.$strip>], "kind">>>;
|
|
36
|
+
entries: z.ZodDefault<z.ZodRecord<z.ZodString, S>>;
|
|
37
|
+
}, z.core.$strict>;
|
|
38
|
+
/**
|
|
39
|
+
* Reads a manifest file and checks every entry against `entrySchema`; a
|
|
40
|
+
* missing file reads as no sources and no entries.
|
|
41
|
+
*
|
|
42
|
+
* @param filePath - Absolute path of the manifest
|
|
43
|
+
* @throws naming the file when it is not JSON or does not match the schema
|
|
44
|
+
*/
|
|
45
|
+
export declare function loadInstallManifest(filePath: string, entrySchema: z.ZodType<BaseRegistryEntry>): InstallManifest;
|
|
46
|
+
/**
|
|
47
|
+
* Installed entries of a manifest, each checked against `entrySchema`.
|
|
48
|
+
*
|
|
49
|
+
* @throws when an entry the install commands wrote does not match the schema
|
|
50
|
+
*/
|
|
51
|
+
export declare function installedEntries<T extends BaseRegistryEntry>(manifest: InstallManifest, entrySchema: z.ZodType<T>): Record<string, T>;
|
|
52
|
+
/**
|
|
53
|
+
* Writes sources and entries back, each sorted by name, after checking every
|
|
54
|
+
* entry against `entrySchema`.
|
|
55
|
+
*
|
|
56
|
+
* @throws when an entry does not match the schema; nothing is written then
|
|
57
|
+
*/
|
|
58
|
+
export declare function saveInstallManifest(manifest: InstallManifest, entrySchema: z.ZodType<BaseRegistryEntry>): void;
|
|
59
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/installer/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGxE;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAG,YAAY,CAAA;IACtB,+BAA+B;IAC/B,KAAK,EAAK,aAAa,CAAC,iBAAiB,CAAC,CAAA;CAC3C;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;;;;;;;;;;mBAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,eAAe,CAehH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAErI;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAK9G"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// packages/core/src/installer/manifest.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { createRegistryStore } from "../registry/registry.store";
|
|
6
|
+
import { entries } from "../registry/registry.selectors";
|
|
7
|
+
import { SourceRecordSchema } from "../sources/types";
|
|
8
|
+
import { errorMessage } from "../utils/errors";
|
|
9
|
+
/** Schema of a manifest file whose entries match `entrySchema`. */
|
|
10
|
+
export function installManifestSchema(entrySchema) {
|
|
11
|
+
return z.strictObject({
|
|
12
|
+
sources: SourceRecordSchema.default({}),
|
|
13
|
+
entries: z.record(z.string(), entrySchema).default({}),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Reads a manifest file and checks every entry against `entrySchema`; a
|
|
18
|
+
* missing file reads as no sources and no entries.
|
|
19
|
+
*
|
|
20
|
+
* @param filePath - Absolute path of the manifest
|
|
21
|
+
* @throws naming the file when it is not JSON or does not match the schema
|
|
22
|
+
*/
|
|
23
|
+
export function loadInstallManifest(filePath, entrySchema) {
|
|
24
|
+
const store = createRegistryStore();
|
|
25
|
+
if (!fs.existsSync(filePath))
|
|
26
|
+
return { filePath, sources: {}, store };
|
|
27
|
+
let raw;
|
|
28
|
+
try {
|
|
29
|
+
raw = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`${filePath} is not valid JSON: ${errorMessage(error)}`);
|
|
33
|
+
}
|
|
34
|
+
const parsed = installManifestSchema(entrySchema).safeParse(raw);
|
|
35
|
+
if (!parsed.success)
|
|
36
|
+
throw new Error(`${filePath} is not a valid install manifest:\n${z.prettifyError(parsed.error)}`);
|
|
37
|
+
store.store.setState(() => ({ ...parsed.data.entries }));
|
|
38
|
+
return { filePath, sources: parsed.data.sources, store };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Installed entries of a manifest, each checked against `entrySchema`.
|
|
42
|
+
*
|
|
43
|
+
* @throws when an entry the install commands wrote does not match the schema
|
|
44
|
+
*/
|
|
45
|
+
export function installedEntries(manifest, entrySchema) {
|
|
46
|
+
return z.record(z.string(), entrySchema).parse(entries(manifest.store));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Writes sources and entries back, each sorted by name, after checking every
|
|
50
|
+
* entry against `entrySchema`.
|
|
51
|
+
*
|
|
52
|
+
* @throws when an entry does not match the schema; nothing is written then
|
|
53
|
+
*/
|
|
54
|
+
export function saveInstallManifest(manifest, entrySchema) {
|
|
55
|
+
const sorted = (record) => Object.fromEntries(Object.entries(record).sort(([a], [b]) => a.localeCompare(b)));
|
|
56
|
+
const content = { sources: sorted(manifest.sources), entries: sorted(installedEntries(manifest, entrySchema)) };
|
|
57
|
+
fs.mkdirSync(path.dirname(manifest.filePath), { recursive: true });
|
|
58
|
+
fs.writeFileSync(manifest.filePath, JSON.stringify(content, null, 2) + "\n");
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/installer/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RegisteredSource, SourceRecord, SourceSpec } from "../sources/types";
|
|
2
|
+
import type { InstallManifest } from "./manifest";
|
|
3
|
+
/**
|
|
4
|
+
* Sources of one or more manifests plus the built-in ones, each name once and
|
|
5
|
+
* built-in sources first. When two manifests register one name for different
|
|
6
|
+
* places, the first manifest's spec is used.
|
|
7
|
+
*/
|
|
8
|
+
export declare function manifestSources(manifests: readonly InstallManifest[], builtins: SourceRecord): RegisteredSource[];
|
|
9
|
+
/**
|
|
10
|
+
* Registers a source in every manifest. Nothing changes unless every manifest accepts it.
|
|
11
|
+
*
|
|
12
|
+
* @throws when the name is built in, invalid, or already registered in any manifest
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerSource(manifests: readonly InstallManifest[], name: string, spec: SourceSpec, builtins: SourceRecord): void;
|
|
15
|
+
/**
|
|
16
|
+
* Unregisters a source from every manifest that has it.
|
|
17
|
+
*
|
|
18
|
+
* @throws when the name is built in or no manifest registers it
|
|
19
|
+
*/
|
|
20
|
+
export declare function unregisterSource(manifests: readonly InstallManifest[], name: string, builtins: SourceRecord): void;
|
|
21
|
+
//# sourceMappingURL=manifestSources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifestSources.d.ts","sourceRoot":"","sources":["../../src/installer/manifestSources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAMjH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAGlI;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAKlH"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// packages/core/src/installer/manifestSources.ts
|
|
2
|
+
import { addSource, listSources, removeSource } from "../sources/register";
|
|
3
|
+
/**
|
|
4
|
+
* Sources of one or more manifests plus the built-in ones, each name once and
|
|
5
|
+
* built-in sources first. When two manifests register one name for different
|
|
6
|
+
* places, the first manifest's spec is used.
|
|
7
|
+
*/
|
|
8
|
+
export function manifestSources(manifests, builtins) {
|
|
9
|
+
const byName = new Map();
|
|
10
|
+
for (const manifest of manifests) {
|
|
11
|
+
for (const source of listSources(manifest.sources, builtins))
|
|
12
|
+
if (!byName.has(source.name))
|
|
13
|
+
byName.set(source.name, source);
|
|
14
|
+
}
|
|
15
|
+
return [...byName.values()];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Registers a source in every manifest. Nothing changes unless every manifest accepts it.
|
|
19
|
+
*
|
|
20
|
+
* @throws when the name is built in, invalid, or already registered in any manifest
|
|
21
|
+
*/
|
|
22
|
+
export function registerSource(manifests, name, spec, builtins) {
|
|
23
|
+
const updated = manifests.map((manifest) => addSource(manifest.sources, name, spec, builtins));
|
|
24
|
+
manifests.forEach((manifest, index) => { manifest.sources = updated[index] ?? manifest.sources; });
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Unregisters a source from every manifest that has it.
|
|
28
|
+
*
|
|
29
|
+
* @throws when the name is built in or no manifest registers it
|
|
30
|
+
*/
|
|
31
|
+
export function unregisterSource(manifests, name, builtins) {
|
|
32
|
+
const holding = manifests.filter((manifest) => manifest.sources[name] !== undefined);
|
|
33
|
+
// With no manifest holding it, removeSource throws the reason: built in, or never registered.
|
|
34
|
+
if (holding.length === 0)
|
|
35
|
+
removeSource({}, name, builtins);
|
|
36
|
+
for (const manifest of holding)
|
|
37
|
+
manifest.sources = removeSource(manifest.sources, name, builtins);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=manifestSources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifestSources.js","sourceRoot":"","sources":["../../src/installer/manifestSources.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAI1E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAqC,EAAE,QAAsB;IAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAA;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7H,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAqC,EAAE,IAAY,EAAE,IAAgB,EAAE,QAAsB;IAC1H,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9F,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAqC,EAAE,IAAY,EAAE,QAAsB;IAC1G,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAA;IACpF,8FAA8F;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1D,KAAK,MAAM,QAAQ,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACnG,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Folders a plugin or marketplace manifest may sit in, in the order they are tried. */
|
|
2
|
+
export declare const MANIFEST_DIRS: string[];
|
|
3
|
+
/** One plugin a marketplace lists, by its folder inside the source. */
|
|
4
|
+
export interface MarketplacePlugin {
|
|
5
|
+
name: string;
|
|
6
|
+
/** Absolute plugin folder */
|
|
7
|
+
dir: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* First existing `<dir>/.claude-plugin/<file>` or `<dir>/.cursor-plugin/<file>`.
|
|
11
|
+
*
|
|
12
|
+
* @returns absolute path, or `null` when neither exists
|
|
13
|
+
*/
|
|
14
|
+
export declare function manifestFile(dir: string, file: string): string | null;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves `rel` against `base` and rejects a result outside `root`.
|
|
17
|
+
*
|
|
18
|
+
* @param root - Absolute folder nothing may leave, e.g. a source checkout
|
|
19
|
+
* @throws when the path points outside `root`
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveInside(root: string, base: string, rel: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* The plugins a source's `marketplace.json` lists. Plugins whose `source` is
|
|
24
|
+
* not a relative path (a git or npm reference) are skipped with a warning.
|
|
25
|
+
*
|
|
26
|
+
* @param root - Absolute root of the source
|
|
27
|
+
* @returns `null` when the source has no marketplace
|
|
28
|
+
* @throws when the marketplace is not valid JSON, or a plugin path leaves the source
|
|
29
|
+
*/
|
|
30
|
+
export declare function readMarketplace(root: string): {
|
|
31
|
+
plugins: MarketplacePlugin[];
|
|
32
|
+
warnings: string[];
|
|
33
|
+
} | null;
|
|
34
|
+
//# sourceMappingURL=marketplace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/installer/marketplace.ts"],"names":[],"mappings":"AAKA,wFAAwF;AACxF,eAAO,MAAM,aAAa,UAAuC,CAAA;AAWjE,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,GAAG,EAAG,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAezG"}
|