@kamaras/venpm 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/actions/publish-index/action.yml +50 -0
  4. package/dist/cli/config-cmd.d.ts +3 -0
  5. package/dist/cli/config-cmd.d.ts.map +1 -0
  6. package/dist/cli/config-cmd.js +100 -0
  7. package/dist/cli/config-cmd.js.map +1 -0
  8. package/dist/cli/context.d.ts +6 -0
  9. package/dist/cli/context.d.ts.map +1 -0
  10. package/dist/cli/context.js +149 -0
  11. package/dist/cli/context.js.map +1 -0
  12. package/dist/cli/create.d.ts +23 -0
  13. package/dist/cli/create.d.ts.map +1 -0
  14. package/dist/cli/create.js +238 -0
  15. package/dist/cli/create.js.map +1 -0
  16. package/dist/cli/doctor.d.ts +3 -0
  17. package/dist/cli/doctor.d.ts.map +1 -0
  18. package/dist/cli/doctor.js +67 -0
  19. package/dist/cli/doctor.js.map +1 -0
  20. package/dist/cli/info.d.ts +5 -0
  21. package/dist/cli/info.d.ts.map +1 -0
  22. package/dist/cli/info.js +105 -0
  23. package/dist/cli/info.js.map +1 -0
  24. package/dist/cli/install.d.ts +5 -0
  25. package/dist/cli/install.d.ts.map +1 -0
  26. package/dist/cli/install.js +252 -0
  27. package/dist/cli/install.js.map +1 -0
  28. package/dist/cli/list.d.ts +5 -0
  29. package/dist/cli/list.d.ts.map +1 -0
  30. package/dist/cli/list.js +41 -0
  31. package/dist/cli/list.js.map +1 -0
  32. package/dist/cli/rebuild.d.ts +3 -0
  33. package/dist/cli/rebuild.d.ts.map +1 -0
  34. package/dist/cli/rebuild.js +74 -0
  35. package/dist/cli/rebuild.js.map +1 -0
  36. package/dist/cli/repo.d.ts +3 -0
  37. package/dist/cli/repo.d.ts.map +1 -0
  38. package/dist/cli/repo.js +93 -0
  39. package/dist/cli/repo.js.map +1 -0
  40. package/dist/cli/search.d.ts +5 -0
  41. package/dist/cli/search.d.ts.map +1 -0
  42. package/dist/cli/search.js +50 -0
  43. package/dist/cli/search.js.map +1 -0
  44. package/dist/cli/uninstall.d.ts +5 -0
  45. package/dist/cli/uninstall.d.ts.map +1 -0
  46. package/dist/cli/uninstall.js +69 -0
  47. package/dist/cli/uninstall.js.map +1 -0
  48. package/dist/cli/update.d.ts +5 -0
  49. package/dist/cli/update.d.ts.map +1 -0
  50. package/dist/cli/update.js +161 -0
  51. package/dist/cli/update.js.map +1 -0
  52. package/dist/cli/validate.d.ts +3 -0
  53. package/dist/cli/validate.d.ts.map +1 -0
  54. package/dist/cli/validate.js +99 -0
  55. package/dist/cli/validate.js.map +1 -0
  56. package/dist/core/builder.d.ts +31 -0
  57. package/dist/core/builder.d.ts.map +1 -0
  58. package/dist/core/builder.js +65 -0
  59. package/dist/core/builder.js.map +1 -0
  60. package/dist/core/cache.d.ts +17 -0
  61. package/dist/core/cache.d.ts.map +1 -0
  62. package/dist/core/cache.js +36 -0
  63. package/dist/core/cache.js.map +1 -0
  64. package/dist/core/config.d.ts +7 -0
  65. package/dist/core/config.d.ts.map +1 -0
  66. package/dist/core/config.js +32 -0
  67. package/dist/core/config.js.map +1 -0
  68. package/dist/core/detect.d.ts +28 -0
  69. package/dist/core/detect.d.ts.map +1 -0
  70. package/dist/core/detect.js +100 -0
  71. package/dist/core/detect.js.map +1 -0
  72. package/dist/core/fetcher.d.ts +21 -0
  73. package/dist/core/fetcher.d.ts.map +1 -0
  74. package/dist/core/fetcher.js +92 -0
  75. package/dist/core/fetcher.js.map +1 -0
  76. package/dist/core/json.d.ts +9 -0
  77. package/dist/core/json.d.ts.map +1 -0
  78. package/dist/core/json.js +10 -0
  79. package/dist/core/json.js.map +1 -0
  80. package/dist/core/lockfile.d.ts +9 -0
  81. package/dist/core/lockfile.d.ts.map +1 -0
  82. package/dist/core/lockfile.js +30 -0
  83. package/dist/core/lockfile.js.map +1 -0
  84. package/dist/core/log.d.ts +8 -0
  85. package/dist/core/log.d.ts.map +1 -0
  86. package/dist/core/log.js +24 -0
  87. package/dist/core/log.js.map +1 -0
  88. package/dist/core/paths.d.ts +4 -0
  89. package/dist/core/paths.d.ts.map +1 -0
  90. package/dist/core/paths.js +33 -0
  91. package/dist/core/paths.js.map +1 -0
  92. package/dist/core/prompt.d.ts +5 -0
  93. package/dist/core/prompt.d.ts.map +1 -0
  94. package/dist/core/prompt.js +67 -0
  95. package/dist/core/prompt.js.map +1 -0
  96. package/dist/core/registry.d.ts +52 -0
  97. package/dist/core/registry.d.ts.map +1 -0
  98. package/dist/core/registry.js +134 -0
  99. package/dist/core/registry.js.map +1 -0
  100. package/dist/core/resolver.d.ts +47 -0
  101. package/dist/core/resolver.d.ts.map +1 -0
  102. package/dist/core/resolver.js +153 -0
  103. package/dist/core/resolver.js.map +1 -0
  104. package/dist/core/schema.d.ts +8 -0
  105. package/dist/core/schema.d.ts.map +1 -0
  106. package/dist/core/schema.js +47 -0
  107. package/dist/core/schema.js.map +1 -0
  108. package/dist/core/types.d.ts +206 -0
  109. package/dist/core/types.d.ts.map +1 -0
  110. package/dist/core/types.js +3 -0
  111. package/dist/core/types.js.map +1 -0
  112. package/dist/index.d.ts +3 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +37 -0
  115. package/dist/index.js.map +1 -0
  116. package/package.json +42 -6
  117. package/schemas/v1/config.schema.json +53 -0
  118. package/schemas/v1/lockfile.schema.json +43 -0
  119. package/schemas/v1/plugins.schema.json +69 -0
@@ -0,0 +1,134 @@
1
+ import { getCachedEntry, setCachedEntry } from "./cache.js";
2
+ /**
3
+ * Fetch a single plugin index from `url` using `http`.
4
+ * If a cached entry is provided, sends conditional request headers.
5
+ * On 304 Not Modified, returns the cached body.
6
+ * On 200, updates the cache entry with new ETag/Last-Modified.
7
+ * Throws on HTTP error or invalid JSON.
8
+ */
9
+ export async function fetchIndex(http, url, options) {
10
+ const cached = options?.cached;
11
+ const headers = {};
12
+ if (cached?.etag) {
13
+ headers["If-None-Match"] = cached.etag;
14
+ }
15
+ if (cached?.lastModified) {
16
+ headers["If-Modified-Since"] = cached.lastModified;
17
+ }
18
+ const response = await http.fetch(url, Object.keys(headers).length > 0 ? { headers } : undefined);
19
+ // 304 Not Modified — use cached body
20
+ if (response.status === 304 && cached) {
21
+ let parsed;
22
+ try {
23
+ parsed = JSON.parse(cached.body);
24
+ }
25
+ catch {
26
+ throw new Error(`Invalid JSON in cache for ${url}`);
27
+ }
28
+ return { index: parsed };
29
+ }
30
+ if (!response.ok) {
31
+ throw new Error(`HTTP ${response.status} fetching ${url}`);
32
+ }
33
+ const text = await response.text();
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(text);
37
+ }
38
+ catch {
39
+ throw new Error(`Invalid JSON from ${url}`);
40
+ }
41
+ // Build updated cache entry from response headers
42
+ const etag = response.headers?.get("etag") ?? response.headers?.get("ETag") ?? undefined;
43
+ const lastModified = response.headers?.get("last-modified") ?? response.headers?.get("Last-Modified") ?? undefined;
44
+ const updatedEntry = {
45
+ url,
46
+ etag: etag ?? undefined,
47
+ lastModified: lastModified ?? undefined,
48
+ body: text,
49
+ cachedAt: new Date().toISOString(),
50
+ };
51
+ return { index: parsed, updatedEntry };
52
+ }
53
+ /**
54
+ * Fetch all indexes in parallel, capturing errors into FetchedIndex.error (never throwing).
55
+ * Accepts an optional cache; returns an updated cache with any new/refreshed entries.
56
+ */
57
+ export async function fetchAllIndexes(http, repos, options) {
58
+ const inputCache = options?.cache ?? { entries: {} };
59
+ const pairs = await Promise.all(repos.map(async (repo) => {
60
+ const cached = getCachedEntry(inputCache, repo.url);
61
+ try {
62
+ const result = await fetchIndex(http, repo.url, cached ? { cached } : undefined);
63
+ return {
64
+ fi: { repoName: repo.name, index: result.index },
65
+ updatedEntry: result.updatedEntry,
66
+ url: repo.url,
67
+ };
68
+ }
69
+ catch (err) {
70
+ return {
71
+ fi: {
72
+ repoName: repo.name,
73
+ error: err instanceof Error ? err.message : String(err),
74
+ },
75
+ url: repo.url,
76
+ };
77
+ }
78
+ }));
79
+ let updatedCache = inputCache;
80
+ for (const { updatedEntry, url } of pairs) {
81
+ if (updatedEntry) {
82
+ updatedCache = setCachedEntry(updatedCache, url, updatedEntry);
83
+ }
84
+ }
85
+ return {
86
+ results: pairs.map(p => p.fi),
87
+ updatedCache,
88
+ };
89
+ }
90
+ /**
91
+ * Find a plugin by name across fetched indexes.
92
+ * If `fromRepo` is given, only that repo is searched.
93
+ * Returns `undefined` when not found.
94
+ */
95
+ export function resolvePlugin(indexes, pluginName, fromRepo) {
96
+ const candidates = fromRepo
97
+ ? indexes.filter(fi => fi.repoName === fromRepo)
98
+ : indexes;
99
+ for (const fi of candidates) {
100
+ if (!fi.index)
101
+ continue;
102
+ const entry = fi.index.plugins[pluginName];
103
+ if (entry) {
104
+ return { name: pluginName, repoName: fi.repoName, entry };
105
+ }
106
+ }
107
+ return undefined;
108
+ }
109
+ /**
110
+ * Fuzzy search plugins by name and description across all fetched indexes.
111
+ * Name matches are returned before description-only matches.
112
+ * Case-insensitive substring match.
113
+ */
114
+ export function searchPlugins(indexes, query) {
115
+ const q = query.toLowerCase();
116
+ const nameMatches = [];
117
+ const descMatches = [];
118
+ for (const fi of indexes) {
119
+ if (!fi.index)
120
+ continue;
121
+ for (const [name, entry] of Object.entries(fi.index.plugins)) {
122
+ const nameHit = name.toLowerCase().includes(q);
123
+ const descHit = entry.description?.toLowerCase().includes(q) ?? false;
124
+ if (nameHit) {
125
+ nameMatches.push({ name, repoName: fi.repoName, entry });
126
+ }
127
+ else if (descHit) {
128
+ descMatches.push({ name, repoName: fi.repoName, entry });
129
+ }
130
+ }
131
+ }
132
+ return [...nameMatches, ...descMatches];
133
+ }
134
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { FetchMethod, InstallPlan, LockfileData, PluginEntry, PluginIndex } from "./types.js";
2
+ export declare class ResolverError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export interface ResolveOptions {
6
+ gitAvailable: boolean;
7
+ forceMethod?: FetchMethod;
8
+ version?: string;
9
+ fromRepo?: string;
10
+ }
11
+ /**
12
+ * Find a plugin by name across all indexes, optionally filtered by repo name.
13
+ * Returns the first match found. If `fromRepo` is given, only that repo is searched.
14
+ */
15
+ export declare function findPlugin(indexes: PluginIndex[], name: string, fromRepo?: string): {
16
+ repoName: string;
17
+ entry: PluginEntry;
18
+ } | null;
19
+ /**
20
+ * Resolve a version string for a plugin entry.
21
+ *
22
+ * - No constraint → return the entry's latest `version` field.
23
+ * - Constraint provided → look up in the entry's `versions` map and return it.
24
+ * - Version not found → throw ResolverError.
25
+ */
26
+ export declare function resolveVersion(entry: PluginEntry, constraint?: string): string;
27
+ /**
28
+ * Build a topologically-sorted install order for `pluginName` and all its
29
+ * transitive dependencies. Circular dependencies are detected and will throw
30
+ * a ResolverError. Missing dependencies also throw.
31
+ *
32
+ * Returns an array of plugin names in dependency-first order (deps before dependents).
33
+ */
34
+ export declare function buildDependencyGraph(indexes: PluginIndex[], pluginName: string): string[];
35
+ export declare function selectMethodFromSource(source: PluginEntry["source"], gitAvailable: boolean): FetchMethod;
36
+ /**
37
+ * Collect optional dependencies that are not currently installed.
38
+ * These are surfaced as warnings, not auto-installed.
39
+ */
40
+ export declare function collectMissingOptionalDeps(indexes: PluginIndex[], pluginName: string, lockfile: LockfileData): string[];
41
+ /**
42
+ * Generate a full install plan for `pluginName`, resolving dependencies and
43
+ * skipping already-installed plugins. Returns an InstallPlan with entries in
44
+ * dependency-first order, plus any missing optional deps as warnings.
45
+ */
46
+ export declare function generateInstallPlan(indexes: PluginIndex[], pluginName: string, lockfile: LockfileData, options: ResolveOptions): InstallPlan;
47
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,WAAW,EACX,WAAW,EAEX,YAAY,EACZ,WAAW,EACX,WAAW,EACd,MAAM,YAAY,CAAC;AAIpB,qBAAa,aAAc,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI9B;AAID,MAAM,WAAW,cAAc;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,UAAU,CACtB,OAAO,EAAE,WAAW,EAAE,EACtB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,IAAI,CAQjD;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9E;AAID;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CA8BzF;AAID,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC7B,YAAY,EAAE,OAAO,GACtB,WAAW,CAOb;AA+BD;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,YAAY,GACvB,MAAM,EAAE,CAMV;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,cAAc,GACxB,WAAW,CAqCb"}
@@ -0,0 +1,153 @@
1
+ // ─── Errors ───────────────────────────────────────────────────────────────────
2
+ export class ResolverError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "ResolverError";
6
+ }
7
+ }
8
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
9
+ /**
10
+ * Find a plugin by name across all indexes, optionally filtered by repo name.
11
+ * Returns the first match found. If `fromRepo` is given, only that repo is searched.
12
+ */
13
+ export function findPlugin(indexes, name, fromRepo) {
14
+ for (const index of indexes) {
15
+ if (fromRepo !== undefined && index.name !== fromRepo)
16
+ continue;
17
+ if (Object.prototype.hasOwnProperty.call(index.plugins, name)) {
18
+ return { repoName: index.name, entry: index.plugins[name] };
19
+ }
20
+ }
21
+ return null;
22
+ }
23
+ // ─── Version Resolution ───────────────────────────────────────────────────────
24
+ /**
25
+ * Resolve a version string for a plugin entry.
26
+ *
27
+ * - No constraint → return the entry's latest `version` field.
28
+ * - Constraint provided → look up in the entry's `versions` map and return it.
29
+ * - Version not found → throw ResolverError.
30
+ */
31
+ export function resolveVersion(entry, constraint) {
32
+ if (constraint === undefined || constraint === null) {
33
+ return entry.version;
34
+ }
35
+ const versions = entry.versions ?? {};
36
+ if (!Object.prototype.hasOwnProperty.call(versions, constraint)) {
37
+ throw new ResolverError(`Version "${constraint}" not found. Available versions: ${Object.keys(versions).join(", ") || "(none)"}`);
38
+ }
39
+ return constraint;
40
+ }
41
+ // ─── Dependency Graph ─────────────────────────────────────────────────────────
42
+ /**
43
+ * Build a topologically-sorted install order for `pluginName` and all its
44
+ * transitive dependencies. Circular dependencies are detected and will throw
45
+ * a ResolverError. Missing dependencies also throw.
46
+ *
47
+ * Returns an array of plugin names in dependency-first order (deps before dependents).
48
+ */
49
+ export function buildDependencyGraph(indexes, pluginName) {
50
+ const order = [];
51
+ const visited = new Set();
52
+ const inStack = new Set();
53
+ function visit(name) {
54
+ if (inStack.has(name)) {
55
+ throw new ResolverError(`Circular dependency detected involving "${name}"`);
56
+ }
57
+ if (visited.has(name))
58
+ return;
59
+ inStack.add(name);
60
+ const found = findPlugin(indexes, name);
61
+ if (!found) {
62
+ throw new ResolverError(`Dependency "${name}" not found in any index`);
63
+ }
64
+ const deps = found.entry.dependencies ?? [];
65
+ for (const dep of deps) {
66
+ visit(dep);
67
+ }
68
+ inStack.delete(name);
69
+ visited.add(name);
70
+ order.push(name);
71
+ }
72
+ visit(pluginName);
73
+ return order;
74
+ }
75
+ // ─── Method Selection ─────────────────────────────────────────────────────────
76
+ export function selectMethodFromSource(source, gitAvailable) {
77
+ if (gitAvailable && source.git)
78
+ return "git";
79
+ if (source.tarball)
80
+ return "tarball";
81
+ if (source.local)
82
+ return "local";
83
+ throw new ResolverError(`No suitable fetch method available (git available: ${gitAvailable}, source: ${JSON.stringify(source)})`);
84
+ }
85
+ function selectMethod(entry, gitAvailable, forceMethod) {
86
+ const { source } = entry;
87
+ if (forceMethod !== undefined) {
88
+ // Validate that the forced method is actually available
89
+ if (forceMethod === "git" && source.git)
90
+ return "git";
91
+ if (forceMethod === "tarball" && source.tarball)
92
+ return "tarball";
93
+ if (forceMethod === "local" && source.local)
94
+ return "local";
95
+ throw new ResolverError(`Forced method "${forceMethod}" is not available for this plugin (source has: ${Object.keys(source).join(", ")})`);
96
+ }
97
+ // Default selection: git > tarball > local
98
+ if (gitAvailable && source.git)
99
+ return "git";
100
+ if (source.tarball)
101
+ return "tarball";
102
+ if (source.local)
103
+ return "local";
104
+ throw new ResolverError(`No suitable fetch method available for plugin (git available: ${gitAvailable}, source: ${JSON.stringify(source)})`);
105
+ }
106
+ // ─── Install Plan ─────────────────────────────────────────────────────────────
107
+ /**
108
+ * Collect optional dependencies that are not currently installed.
109
+ * These are surfaced as warnings, not auto-installed.
110
+ */
111
+ export function collectMissingOptionalDeps(indexes, pluginName, lockfile) {
112
+ const found = findPlugin(indexes, pluginName);
113
+ if (!found)
114
+ return [];
115
+ const optDeps = found.entry.optionalDependencies ?? [];
116
+ return optDeps.filter(dep => !Object.prototype.hasOwnProperty.call(lockfile.installed, dep));
117
+ }
118
+ /**
119
+ * Generate a full install plan for `pluginName`, resolving dependencies and
120
+ * skipping already-installed plugins. Returns an InstallPlan with entries in
121
+ * dependency-first order, plus any missing optional deps as warnings.
122
+ */
123
+ export function generateInstallPlan(indexes, pluginName, lockfile, options) {
124
+ const order = buildDependencyGraph(indexes, pluginName);
125
+ const entries = [];
126
+ for (const name of order) {
127
+ const alreadyInstalled = Object.prototype.hasOwnProperty.call(lockfile.installed, name);
128
+ if (alreadyInstalled)
129
+ continue;
130
+ const found = findPlugin(indexes, name, options.fromRepo);
131
+ // findPlugin without fromRepo will never return null here since buildDependencyGraph
132
+ // already validated all deps, but we fall back to searching all indexes.
133
+ const result = found ?? findPlugin(indexes, name);
134
+ const { repoName, entry } = result;
135
+ // For the root plugin, apply the version constraint; deps get their latest.
136
+ const constraint = name === pluginName ? options.version : undefined;
137
+ const version = resolveVersion(entry, constraint);
138
+ const method = selectMethod(entry, options.gitAvailable, options.forceMethod);
139
+ const isDependency = name !== pluginName;
140
+ entries.push({
141
+ name,
142
+ version,
143
+ repo: repoName,
144
+ source: entry.source,
145
+ method,
146
+ isDependency,
147
+ versionEntry: entry.versions?.[version],
148
+ });
149
+ }
150
+ const missingOptional = collectMissingOptionalDeps(indexes, pluginName, lockfile);
151
+ return { entries, missingOptional };
152
+ }
153
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ValidationResult {
2
+ valid: boolean;
3
+ errors: string[];
4
+ }
5
+ export declare function validateIndex(data: unknown): ValidationResult;
6
+ export declare function validateConfig(data: unknown): ValidationResult;
7
+ export declare function validateLockfile(data: unknown): ValidationResult;
8
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAE7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAEhE"}
@@ -0,0 +1,47 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
2
+ import Ajv2020Module from "ajv/dist/2020.js";
3
+ import addFormatsModule from "ajv-formats";
4
+ import { readFileSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
+ import { dirname, join } from "node:path";
7
+ // Handle CJS/ESM interop
8
+ const Ajv2020 = Ajv2020Module.default ?? Ajv2020Module;
9
+ const addFormats = addFormatsModule.default ?? addFormatsModule;
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const schemasDir = join(__dirname, "..", "..", "schemas", "v1");
12
+ function createValidator() {
13
+ // @ts-expect-error — ajv CJS/ESM interop
14
+ const ajv = new Ajv2020({ allErrors: true });
15
+ // @ts-expect-error — ajv-formats CJS/ESM interop
16
+ addFormats(ajv);
17
+ return ajv;
18
+ }
19
+ function loadSchema(filename) {
20
+ const raw = readFileSync(join(schemasDir, filename), "utf-8");
21
+ return JSON.parse(raw);
22
+ }
23
+ function validate(data, schemaFile) {
24
+ if (data === null || data === undefined) {
25
+ return { valid: false, errors: ["Input is null or undefined"] };
26
+ }
27
+ const ajv = createValidator();
28
+ const schema = loadSchema(schemaFile);
29
+ const valid = ajv.validate(schema, data);
30
+ if (valid)
31
+ return { valid: true, errors: [] };
32
+ const errors = (ajv.errors ?? []).map((e) => {
33
+ const path = e.instancePath || "/";
34
+ return `${path}: ${e.message}`;
35
+ });
36
+ return { valid: false, errors };
37
+ }
38
+ export function validateIndex(data) {
39
+ return validate(data, "plugins.schema.json");
40
+ }
41
+ export function validateConfig(data) {
42
+ return validate(data, "config.schema.json");
43
+ }
44
+ export function validateLockfile(data) {
45
+ return validate(data, "lockfile.schema.json");
46
+ }
47
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,yBAAyB;AACzB,MAAM,OAAO,GAAI,aAAkD,CAAC,OAAO,IAAI,aAAa,CAAC;AAC7F,MAAM,UAAU,GAAI,gBAAqD,CAAC,OAAO,IAAI,gBAAgB,CAAC;AAEtG,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAOhE,SAAS,eAAe;IACpB,yCAAyC;IACzC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,iDAAiD;IACjD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAChC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,UAAkB;IAC/C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,4BAA4B,CAAC,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAA8C,EAAE,EAAE;QACrF,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC;QACnC,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACvC,OAAO,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAa;IACxC,OAAO,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC1C,OAAO,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,206 @@
1
+ export interface PluginAuthor {
2
+ name: string;
3
+ id: string;
4
+ }
5
+ /** Source location for a plugin — at least one of git/tarball must be present. */
6
+ export interface PluginSource {
7
+ /** Git repository URL */
8
+ git?: string;
9
+ /** Path within the git repo to the plugin folder */
10
+ path?: string;
11
+ /** Direct tarball download URL */
12
+ tarball?: string;
13
+ /** Local filesystem path (for development / local repos) */
14
+ local?: string;
15
+ }
16
+ export interface VersionEntry {
17
+ git_tag?: string;
18
+ tarball?: string;
19
+ }
20
+ export interface PluginEntry {
21
+ version: string;
22
+ description: string;
23
+ authors: PluginAuthor[];
24
+ license?: string;
25
+ dependencies?: string[];
26
+ optionalDependencies?: string[];
27
+ /** Semver range for required Discord build */
28
+ discord?: string;
29
+ /** Semver range for required Vencord version */
30
+ vencord?: string;
31
+ source: PluginSource;
32
+ /** Named version history (version string → VersionEntry) */
33
+ versions?: Record<string, VersionEntry>;
34
+ }
35
+ export interface PluginIndex {
36
+ name: string;
37
+ description?: string;
38
+ /** Plugin name → PluginEntry */
39
+ plugins: Record<string, PluginEntry>;
40
+ }
41
+ /** How venpm handles rebuilding Vencord after install/remove */
42
+ export type RebuildMode = "ask" | "always" | "never";
43
+ /** How venpm handles restarting Discord */
44
+ export type RestartMode = "ask" | "always" | "never";
45
+ export interface RepoEntry {
46
+ name: string;
47
+ url: string;
48
+ }
49
+ export interface Config {
50
+ repos: RepoEntry[];
51
+ vencord: {
52
+ /** Absolute path to the Vencord source checkout, or null if not yet configured */
53
+ path: string | null;
54
+ };
55
+ rebuild: RebuildMode;
56
+ discord: {
57
+ restart: RestartMode;
58
+ /** Path to the Discord binary, or null to auto-detect */
59
+ binary: string | null;
60
+ };
61
+ }
62
+ export type FetchMethod = "git" | "tarball" | "local";
63
+ export interface InstalledPlugin {
64
+ version: string;
65
+ repo: string;
66
+ method: FetchMethod;
67
+ pinned: boolean;
68
+ /** Git commit hash (when method === "git") */
69
+ git_ref?: string;
70
+ installed_at: string;
71
+ /** Override path relative to userplugins dir */
72
+ path?: string;
73
+ }
74
+ export interface LockfileData {
75
+ installed: Record<string, InstalledPlugin>;
76
+ }
77
+ export interface InstallPlanEntry {
78
+ name: string;
79
+ version: string;
80
+ repo: string;
81
+ source: PluginSource;
82
+ method: FetchMethod;
83
+ /** True if this entry was added to satisfy a dependency */
84
+ isDependency: boolean;
85
+ /** Current installed version, if upgrading */
86
+ currentVersion?: string;
87
+ /** Version metadata from the index (git_tag, tarball URL) */
88
+ versionEntry?: VersionEntry;
89
+ }
90
+ export interface InstallPlan {
91
+ entries: InstallPlanEntry[];
92
+ /** Optional deps that aren't installed — surfaced as warnings */
93
+ missingOptional?: string[];
94
+ }
95
+ export interface FileSystem {
96
+ readFile(path: string, encoding: BufferEncoding): Promise<string>;
97
+ writeFile(path: string, data: string, encoding?: BufferEncoding): Promise<void>;
98
+ exists(path: string): Promise<boolean>;
99
+ mkdir(path: string, options?: {
100
+ recursive?: boolean;
101
+ }): Promise<void>;
102
+ rm(path: string, options?: {
103
+ recursive?: boolean;
104
+ force?: boolean;
105
+ }): Promise<void>;
106
+ symlink(target: string, path: string): Promise<void>;
107
+ readlink(path: string): Promise<string>;
108
+ readdir(path: string): Promise<string[]>;
109
+ stat(path: string): Promise<{
110
+ isDirectory(): boolean;
111
+ isFile(): boolean;
112
+ size: number;
113
+ }>;
114
+ lstat(path: string): Promise<{
115
+ isDirectory(): boolean;
116
+ isFile(): boolean;
117
+ isSymbolicLink(): boolean;
118
+ }>;
119
+ copyDir(src: string, dest: string): Promise<void>;
120
+ }
121
+ export interface HttpResponseHeaders {
122
+ get(name: string): string | null;
123
+ }
124
+ export interface HttpClient {
125
+ fetch(url: string, options?: {
126
+ headers?: Record<string, string>;
127
+ }): Promise<{
128
+ ok: boolean;
129
+ status: number;
130
+ headers?: HttpResponseHeaders;
131
+ text(): Promise<string>;
132
+ json(): Promise<unknown>;
133
+ arrayBuffer(): Promise<ArrayBuffer>;
134
+ }>;
135
+ }
136
+ export interface GitClient {
137
+ available(): Promise<boolean>;
138
+ clone(url: string, dest: string, options?: {
139
+ sparse?: string[];
140
+ branch?: string;
141
+ depth?: number;
142
+ }): Promise<void>;
143
+ pull(repoPath: string): Promise<void>;
144
+ revParse(repoPath: string, ref: string): Promise<string>;
145
+ checkout(repoPath: string, ref: string): Promise<void>;
146
+ }
147
+ export interface ShellRunner {
148
+ exec(cmd: string, args: string[], options?: {
149
+ cwd?: string;
150
+ env?: Record<string, string>;
151
+ }): Promise<{
152
+ stdout: string;
153
+ stderr: string;
154
+ exitCode: number;
155
+ }>;
156
+ spawn(cmd: string, args: string[], options?: {
157
+ cwd?: string;
158
+ detached?: boolean;
159
+ env?: Record<string, string>;
160
+ }): Promise<void>;
161
+ }
162
+ export interface Prompter {
163
+ confirm(message: string, defaultValue?: boolean): Promise<boolean>;
164
+ input(message: string, defaultValue?: string): Promise<string>;
165
+ select<T extends string>(message: string, choices: {
166
+ value: T;
167
+ label: string;
168
+ }[]): Promise<T>;
169
+ }
170
+ export interface Logger {
171
+ info(message: string): void;
172
+ warn(message: string): void;
173
+ error(message: string): void;
174
+ verbose(message: string): void;
175
+ success(message: string): void;
176
+ }
177
+ export interface IOContext {
178
+ fs: FileSystem;
179
+ http: HttpClient;
180
+ git: GitClient;
181
+ shell: ShellRunner;
182
+ prompter: Prompter;
183
+ logger: Logger;
184
+ }
185
+ export interface GlobalOptions {
186
+ config?: string;
187
+ verbose?: boolean;
188
+ json?: boolean;
189
+ }
190
+ export interface InstallOptions extends GlobalOptions {
191
+ version?: string;
192
+ from?: string;
193
+ local?: string;
194
+ git?: boolean;
195
+ tarball?: boolean;
196
+ noBuild?: boolean;
197
+ rebuild?: boolean;
198
+ }
199
+ export interface CreateOptions extends GlobalOptions {
200
+ output?: string;
201
+ force?: boolean;
202
+ }
203
+ export interface ValidateOptions extends GlobalOptions {
204
+ strict?: boolean;
205
+ }
206
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACd;AAED,kFAAkF;AAClF,MAAM,WAAW,YAAY;IACzB,yBAAyB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACxC;AAID,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,2CAA2C;AAC3C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE;QACL,kFAAkF;QAClF,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;KACvB,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE;QACL,OAAO,EAAE,WAAW,CAAC;QACrB,yDAAyD;QACzD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACL;AAID,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAID,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,2DAA2D;IAC3D,YAAY,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAID,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,IAAI,OAAO,CAAC;QAAC,MAAM,IAAI,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,IAAI,OAAO,CAAC;QAAC,MAAM,IAAI,OAAO,CAAC;QAAC,cAAc,IAAI,OAAO,CAAA;KAAE,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QACxE,EAAE,EAAE,OAAO,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,mBAAmB,CAAC;QAC9B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;KACvC,CAAC,CAAC;CACN;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClH,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QACjG,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnI;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjG;AAED,MAAM,WAAW,MAAM;IACnB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ // ─── Plugin Index (plugins.json) ─────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}