trix-ui 0.0.5 → 0.1.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/commands/add/analysis.d.ts +4 -0
- package/dist/commands/add/analysis.js +51 -0
- package/dist/commands/add/analysis.js.map +1 -0
- package/dist/commands/add/command.d.ts +2 -0
- package/dist/commands/add/command.js +150 -0
- package/dist/commands/add/command.js.map +1 -0
- package/dist/commands/add/config.d.ts +2 -0
- package/dist/commands/add/config.js +12 -0
- package/dist/commands/add/config.js.map +1 -0
- package/dist/commands/add/install.d.ts +27 -0
- package/dist/commands/add/install.js +80 -0
- package/dist/commands/add/install.js.map +1 -0
- package/dist/commands/add/package-manager.d.ts +1 -0
- package/dist/commands/add/package-manager.js +5 -0
- package/dist/commands/add/package-manager.js.map +1 -0
- package/dist/commands/add/project-files.d.ts +2 -0
- package/dist/commands/add/project-files.js +16 -0
- package/dist/commands/add/project-files.js.map +1 -0
- package/dist/commands/add/prompts.d.ts +3 -0
- package/dist/commands/add/prompts.js +29 -0
- package/dist/commands/add/prompts.js.map +1 -0
- package/dist/commands/add/registry.d.ts +4 -0
- package/dist/commands/add/registry.js +7 -0
- package/dist/commands/add/registry.js.map +1 -0
- package/dist/commands/add/types.d.ts +31 -0
- package/dist/commands/add/types.js +2 -0
- package/dist/commands/add/types.js.map +1 -0
- package/dist/commands/add/ui.d.ts +4 -0
- package/dist/commands/add/ui.js +49 -0
- package/dist/commands/add/ui.js.map +1 -0
- package/dist/commands/add/validation.d.ts +3 -0
- package/dist/commands/add/validation.js +31 -0
- package/dist/commands/add/validation.js.map +1 -0
- package/dist/commands/add.d.ts +1 -2
- package/dist/commands/add.js +1 -52
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init/command.d.ts +2 -0
- package/dist/commands/init/command.js +121 -0
- package/dist/commands/init/command.js.map +1 -0
- package/dist/commands/init/config.d.ts +2 -0
- package/dist/commands/init/config.js +25 -0
- package/dist/commands/init/config.js.map +1 -0
- package/dist/commands/init/constants.d.ts +3 -0
- package/dist/commands/init/constants.js +106 -0
- package/dist/commands/init/constants.js.map +1 -0
- package/dist/commands/init/dependencies.d.ts +5 -0
- package/dist/commands/init/dependencies.js +53 -0
- package/dist/commands/init/dependencies.js.map +1 -0
- package/dist/commands/init/filesystem.d.ts +1 -0
- package/dist/commands/init/filesystem.js +11 -0
- package/dist/commands/init/filesystem.js.map +1 -0
- package/dist/commands/init/lockfile.d.ts +1 -0
- package/dist/commands/init/lockfile.js +2 -0
- package/dist/commands/init/lockfile.js.map +1 -0
- package/dist/commands/init/package-json.d.ts +6 -0
- package/dist/commands/init/package-json.js +19 -0
- package/dist/commands/init/package-json.js.map +1 -0
- package/dist/commands/init/project.d.ts +3 -0
- package/dist/commands/init/project.js +98 -0
- package/dist/commands/init/project.js.map +1 -0
- package/dist/commands/init/tailwind.d.ts +3 -0
- package/dist/commands/init/tailwind.js +35 -0
- package/dist/commands/init/tailwind.js.map +1 -0
- package/dist/commands/init/templates.d.ts +3 -0
- package/dist/commands/init/templates.js +16 -0
- package/dist/commands/init/templates.js.map +1 -0
- package/dist/commands/init/types.d.ts +33 -0
- package/dist/commands/init/types.js +2 -0
- package/dist/commands/init/types.js.map +1 -0
- package/dist/commands/init/ui.d.ts +3 -0
- package/dist/commands/init/ui.js +34 -0
- package/dist/commands/init/ui.js.map +1 -0
- package/dist/commands/init.d.ts +1 -2
- package/dist/commands/init.js +1 -43
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/remove-section.js +2 -2
- package/dist/commands/remove-wrapper.js +2 -2
- package/dist/commands/remove.js +2 -2
- package/dist/index.js +12 -23
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +29 -14
- package/dist/lib/config.js +73 -40
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/fs.d.ts +74 -4
- package/dist/lib/fs.js +280 -20
- package/dist/lib/fs.js.map +1 -1
- package/dist/lib/install.d.ts +4 -4
- package/dist/lib/install.js +6 -7
- package/dist/lib/install.js.map +1 -1
- package/dist/lib/lockfile.d.ts +57 -11
- package/dist/lib/lockfile.js +142 -31
- package/dist/lib/lockfile.js.map +1 -1
- package/dist/lib/logger.d.ts +9 -0
- package/dist/lib/logger.js +56 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/paths.d.ts +1 -1
- package/dist/lib/paths.js +1 -1
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/registry.d.ts +2 -2
- package/dist/lib/registry.js +3 -3
- package/dist/lib/registry.js.map +1 -1
- package/dist/schema/index.d.ts +3 -3
- package/package.json +4 -2
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Lockfile } from "../../lib/lockfile.js";
|
|
2
|
+
import type { RegistryIndex } from "../../lib/registry.js";
|
|
3
|
+
import type { DependencyAnalysis } from "./types.js";
|
|
4
|
+
export declare function analyzeDependencies(components: string[], registry: RegistryIndex, lockfile: Lockfile): DependencyAnalysis;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createComponentMap } from "./registry.js";
|
|
2
|
+
function collectLocalDependencies(entry) {
|
|
3
|
+
return entry.dependencies?.local ?? [];
|
|
4
|
+
}
|
|
5
|
+
function collectNpmDependencies(entry) {
|
|
6
|
+
return entry.dependencies?.npm ?? [];
|
|
7
|
+
}
|
|
8
|
+
export function analyzeDependencies(components, registry, lockfile) {
|
|
9
|
+
const componentMap = createComponentMap(registry);
|
|
10
|
+
const allComponents = new Set(components);
|
|
11
|
+
const dependencies = new Set();
|
|
12
|
+
const npmDependencies = new Set();
|
|
13
|
+
const visited = new Set();
|
|
14
|
+
const resolveDependencies = (componentName) => {
|
|
15
|
+
if (visited.has(componentName)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
visited.add(componentName);
|
|
19
|
+
const entry = componentMap.get(componentName);
|
|
20
|
+
if (!entry) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const dep of collectLocalDependencies(entry)) {
|
|
24
|
+
if (!allComponents.has(dep)) {
|
|
25
|
+
allComponents.add(dep);
|
|
26
|
+
dependencies.add(dep);
|
|
27
|
+
}
|
|
28
|
+
resolveDependencies(dep);
|
|
29
|
+
}
|
|
30
|
+
for (const dep of collectNpmDependencies(entry)) {
|
|
31
|
+
npmDependencies.add(dep);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
for (const component of components) {
|
|
35
|
+
resolveDependencies(component);
|
|
36
|
+
}
|
|
37
|
+
const conflicts = [];
|
|
38
|
+
for (const component of allComponents) {
|
|
39
|
+
if (lockfile.components[component]) {
|
|
40
|
+
conflicts.push(component);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
components: Array.from(allComponents),
|
|
45
|
+
dependencies,
|
|
46
|
+
npmDependencies,
|
|
47
|
+
conflicts,
|
|
48
|
+
totalToInstall: allComponents.size
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../src/commands/add/analysis.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,SAAS,wBAAwB,CAAC,KAAmB;IACnD,OAAO,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAA;AACxC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAmB;IACjD,OAAO,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAoB,EACpB,QAAuB,EACvB,QAAkB;IAElB,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACjD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IACtC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IAEjC,MAAM,mBAAmB,GAAG,CAAC,aAAqB,EAAQ,EAAE;QAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAE1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAM;QACR,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACtB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACvB,CAAC;YACD,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC,CAAA;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,YAAY;QACZ,eAAe;QACf,SAAS;QACT,cAAc,EAAE,aAAa,CAAC,IAAI;KACnC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import { loadConfig } from "../../lib/config.js";
|
|
5
|
+
import { loadLockfile, saveLockfile } from "../../lib/lockfile.js";
|
|
6
|
+
import { loadRegistry } from "../../lib/registry.js";
|
|
7
|
+
import { logger } from "../../lib/logger.js";
|
|
8
|
+
import { analyzeDependencies } from "./analysis.js";
|
|
9
|
+
import { ensureProjectFiles } from "./project-files.js";
|
|
10
|
+
import { confirmDependencyInstallation, confirmInstallation, confirmOverwrite } from "./prompts.js";
|
|
11
|
+
import { installComponents, installNpmDependencies, updateBarrelFile } from "./install.js";
|
|
12
|
+
import { getComponentNames } from "./registry.js";
|
|
13
|
+
import { displayInstallationPlan, displayManualInstallInstructions, displayResults } from "./ui.js";
|
|
14
|
+
import { validateComponents } from "./validation.js";
|
|
15
|
+
function normalizeComponents(components) {
|
|
16
|
+
return components.map((component) => component.trim()).filter(Boolean);
|
|
17
|
+
}
|
|
18
|
+
function toAddConfig(config) {
|
|
19
|
+
return config;
|
|
20
|
+
}
|
|
21
|
+
export const addCommand = new Command("add")
|
|
22
|
+
.description("Add components to your project")
|
|
23
|
+
.argument("<components...>", "component names (or 'all' to install everything)")
|
|
24
|
+
.option("-f, --force", "overwrite existing files", false)
|
|
25
|
+
.option("-y, --yes", "skip confirmation prompts", false)
|
|
26
|
+
.option("-s, --silent", "suppress output messages", false)
|
|
27
|
+
.option("--skip-deps", "skip npm dependency installation", false)
|
|
28
|
+
.action(async (components, options) => {
|
|
29
|
+
const spinner = options.silent ? null : ora();
|
|
30
|
+
try {
|
|
31
|
+
const cwd = process.cwd();
|
|
32
|
+
spinner?.start("Loading configuration...");
|
|
33
|
+
const config = toAddConfig(await loadConfig(cwd));
|
|
34
|
+
spinner?.succeed("Configuration loaded");
|
|
35
|
+
spinner?.start("Loading component registry...");
|
|
36
|
+
const registry = await loadRegistry(config, cwd);
|
|
37
|
+
const lockfile = await loadLockfile(cwd);
|
|
38
|
+
spinner?.succeed("Registry loaded");
|
|
39
|
+
let requestedComponents = normalizeComponents(components);
|
|
40
|
+
if (requestedComponents.includes("all")) {
|
|
41
|
+
const allComponents = getComponentNames(registry);
|
|
42
|
+
if (!options.silent) {
|
|
43
|
+
console.log(chalk.yellow(`\nThis will install ${allComponents.length} components:`));
|
|
44
|
+
console.log(chalk.gray(allComponents.join(", ")));
|
|
45
|
+
}
|
|
46
|
+
const shouldContinue = options.yes
|
|
47
|
+
? true
|
|
48
|
+
: await confirmInstallation(`all ${allComponents.length} components`);
|
|
49
|
+
if (!shouldContinue) {
|
|
50
|
+
logger.info("Installation cancelled");
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
requestedComponents = allComponents;
|
|
54
|
+
}
|
|
55
|
+
spinner?.start("Validating components...");
|
|
56
|
+
const validation = validateComponents(requestedComponents, registry);
|
|
57
|
+
spinner?.stop();
|
|
58
|
+
if (validation.invalid.length > 0) {
|
|
59
|
+
logger.error("The following components were not found:");
|
|
60
|
+
validation.invalid.forEach((name) => logger.error(` \u0007 ${name}`));
|
|
61
|
+
if (validation.suggestions.length > 0) {
|
|
62
|
+
console.log(chalk.yellow("\nDid you mean:"));
|
|
63
|
+
validation.suggestions.forEach((suggestion) => console.log(chalk.gray(` \u0007 ${suggestion}`)));
|
|
64
|
+
}
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
spinner?.start("Analyzing dependencies...");
|
|
68
|
+
const analysis = analyzeDependencies(validation.valid, registry, lockfile);
|
|
69
|
+
spinner?.stop();
|
|
70
|
+
if (!options.silent) {
|
|
71
|
+
displayInstallationPlan(analysis, options);
|
|
72
|
+
}
|
|
73
|
+
let forceInstall = Boolean(options.force);
|
|
74
|
+
if (analysis.conflicts.length > 0 && !forceInstall) {
|
|
75
|
+
logger.warn("The following components already exist:");
|
|
76
|
+
analysis.conflicts.forEach((name) => logger.warn(` \u0007 ${name}`));
|
|
77
|
+
const shouldOverwrite = options.yes
|
|
78
|
+
? true
|
|
79
|
+
: await confirmOverwrite();
|
|
80
|
+
if (!shouldOverwrite) {
|
|
81
|
+
logger.info("Installation cancelled");
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
forceInstall = true;
|
|
85
|
+
}
|
|
86
|
+
if (!options.yes && !options.silent && analysis.totalToInstall > 0) {
|
|
87
|
+
const shouldInstall = await confirmInstallation(`${analysis.totalToInstall} component${analysis.totalToInstall > 1 ? "s" : ""}`);
|
|
88
|
+
if (!shouldInstall) {
|
|
89
|
+
logger.info("Installation cancelled");
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
spinner?.start("Verifying project setup...");
|
|
94
|
+
await ensureProjectFiles(cwd, config);
|
|
95
|
+
spinner?.succeed("Project setup verified");
|
|
96
|
+
spinner?.start("Installing components...");
|
|
97
|
+
const result = await installComponents({
|
|
98
|
+
cwd,
|
|
99
|
+
config,
|
|
100
|
+
registry,
|
|
101
|
+
lockfile,
|
|
102
|
+
components: analysis.components,
|
|
103
|
+
conflicts: analysis.conflicts,
|
|
104
|
+
force: forceInstall,
|
|
105
|
+
spinner
|
|
106
|
+
});
|
|
107
|
+
spinner?.stop();
|
|
108
|
+
spinner?.start("Updating lockfile...");
|
|
109
|
+
await saveLockfile(cwd, lockfile);
|
|
110
|
+
spinner?.succeed("Lockfile updated");
|
|
111
|
+
if (config.barrel && result.installed.length > 0) {
|
|
112
|
+
spinner?.start("Updating barrel file...");
|
|
113
|
+
await updateBarrelFile({ cwd, config, lockfile });
|
|
114
|
+
spinner?.succeed("Barrel file updated");
|
|
115
|
+
}
|
|
116
|
+
if (result.npmDependencies.size > 0 && !options.skipDeps) {
|
|
117
|
+
const shouldInstallDeps = options.yes
|
|
118
|
+
? true
|
|
119
|
+
: await confirmDependencyInstallation(result.npmDependencies);
|
|
120
|
+
if (shouldInstallDeps) {
|
|
121
|
+
await installNpmDependencies({
|
|
122
|
+
cwd,
|
|
123
|
+
dependencies: result.npmDependencies,
|
|
124
|
+
spinner
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
await displayManualInstallInstructions(result.npmDependencies, cwd);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (result.npmDependencies.size > 0) {
|
|
132
|
+
await displayManualInstallInstructions(result.npmDependencies, cwd);
|
|
133
|
+
}
|
|
134
|
+
if (!options.silent) {
|
|
135
|
+
displayResults(result, { ...options, force: forceInstall });
|
|
136
|
+
}
|
|
137
|
+
if (result.failed.length > 0) {
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
spinner?.fail("Installation failed");
|
|
143
|
+
logger.error(error.message);
|
|
144
|
+
if (process.env.DEBUG) {
|
|
145
|
+
console.error(error);
|
|
146
|
+
}
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/add/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function inferScriptExtension(config) {
|
|
3
|
+
if (config.typescript) {
|
|
4
|
+
return "ts";
|
|
5
|
+
}
|
|
6
|
+
const ext = path.extname(config.paths.utils).toLowerCase();
|
|
7
|
+
if (ext === ".ts" || ext === ".tsx") {
|
|
8
|
+
return "ts";
|
|
9
|
+
}
|
|
10
|
+
return "js";
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/add/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1D,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Ora } from "ora";
|
|
2
|
+
import type { Lockfile } from "../../lib/lockfile.js";
|
|
3
|
+
import type { RegistryIndex } from "../../lib/registry.js";
|
|
4
|
+
import type { AddConfig, InstallationResult } from "./types.js";
|
|
5
|
+
export interface InstallComponentsOptions {
|
|
6
|
+
cwd: string;
|
|
7
|
+
config: AddConfig;
|
|
8
|
+
registry: RegistryIndex;
|
|
9
|
+
lockfile: Lockfile;
|
|
10
|
+
components: string[];
|
|
11
|
+
conflicts: string[];
|
|
12
|
+
force: boolean;
|
|
13
|
+
spinner: Ora | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function installComponents(options: InstallComponentsOptions): Promise<InstallationResult>;
|
|
16
|
+
export interface UpdateBarrelFileOptions {
|
|
17
|
+
cwd: string;
|
|
18
|
+
config: AddConfig;
|
|
19
|
+
lockfile: Lockfile;
|
|
20
|
+
}
|
|
21
|
+
export declare function updateBarrelFile(options: UpdateBarrelFileOptions): Promise<void>;
|
|
22
|
+
export interface InstallNpmDependenciesOptions {
|
|
23
|
+
cwd: string;
|
|
24
|
+
dependencies: Set<string>;
|
|
25
|
+
spinner: Ora | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function installNpmDependencies(options: InstallNpmDependenciesOptions): Promise<void>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { execa } from "execa";
|
|
3
|
+
import { installRegistryEntries } from "../../lib/install.js";
|
|
4
|
+
import { writeFileSafe } from "../../lib/fs.js";
|
|
5
|
+
import { logger } from "../../lib/logger.js";
|
|
6
|
+
import { inferScriptExtension } from "./config.js";
|
|
7
|
+
import { detectPackageManager } from "./package-manager.js";
|
|
8
|
+
export async function installComponents(options) {
|
|
9
|
+
const { cwd, config, registry, lockfile, components, conflicts, force, spinner } = options;
|
|
10
|
+
const installed = [];
|
|
11
|
+
const skipped = [];
|
|
12
|
+
const failed = [];
|
|
13
|
+
const npmDependencies = new Set();
|
|
14
|
+
let currentIndex = 0;
|
|
15
|
+
const total = components.length;
|
|
16
|
+
for (const componentName of components) {
|
|
17
|
+
currentIndex += 1;
|
|
18
|
+
try {
|
|
19
|
+
spinner.text = `Installing ${componentName} (${currentIndex}/${total})...`;
|
|
20
|
+
const result = await installRegistryEntries({
|
|
21
|
+
cwd,
|
|
22
|
+
config,
|
|
23
|
+
entries: registry.components,
|
|
24
|
+
names: [componentName],
|
|
25
|
+
lockEntries: lockfile.components,
|
|
26
|
+
force,
|
|
27
|
+
itemLabel: "component"
|
|
28
|
+
});
|
|
29
|
+
if (result.installed.length > 0) {
|
|
30
|
+
installed.push(...result.installed);
|
|
31
|
+
}
|
|
32
|
+
if (result.skipped.length > 0) {
|
|
33
|
+
skipped.push(...result.skipped);
|
|
34
|
+
}
|
|
35
|
+
result.npmDependencies.forEach((dep) => npmDependencies.add(dep));
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
failed.push(componentName);
|
|
39
|
+
logger.error(`Failed to install ${componentName}: ${error.message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
spinner?.succeed(`Installed ${installed.length} component${installed.length !== 1 ? "s" : ""}`);
|
|
43
|
+
return {
|
|
44
|
+
installed,
|
|
45
|
+
skipped,
|
|
46
|
+
failed,
|
|
47
|
+
npmDependencies,
|
|
48
|
+
conflicts
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function updateBarrelFile(options) {
|
|
52
|
+
const { cwd, config, lockfile } = options;
|
|
53
|
+
const ext = inferScriptExtension(config);
|
|
54
|
+
const barrelPath = path.resolve(cwd, config.paths.components, `index.${ext}`);
|
|
55
|
+
const components = Object.keys(lockfile.components).sort();
|
|
56
|
+
const exports = components
|
|
57
|
+
.map((name) => `export { ${name} } from "./${name}"`)
|
|
58
|
+
.join("\n");
|
|
59
|
+
const content = `// Auto-generated barrel file
|
|
60
|
+
// This file exports all components from this directory
|
|
61
|
+
|
|
62
|
+
${exports}
|
|
63
|
+
`;
|
|
64
|
+
await writeFileSafe(barrelPath, content, true);
|
|
65
|
+
}
|
|
66
|
+
export async function installNpmDependencies(options) {
|
|
67
|
+
const { cwd, dependencies, spinner } = options;
|
|
68
|
+
const packageManager = await detectPackageManager(cwd);
|
|
69
|
+
const installCmd = packageManager === "npm" ? "install" : "add";
|
|
70
|
+
try {
|
|
71
|
+
spinner?.start(`Installing ${dependencies.size} npm package${dependencies.size > 1 ? "s" : ""}...`);
|
|
72
|
+
await execa(packageManager, [installCmd, ...Array.from(dependencies)], { cwd });
|
|
73
|
+
spinner?.succeed("NPM packages installed");
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner?.fail("Failed to install npm packages");
|
|
77
|
+
throw new Error(`Failed to install dependencies: ${error.message}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/add/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function detectPackageManager(cwd: string): Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/commands/add/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,OAAO,CAAC,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { copyFileSafe, fileExists } from "../../lib/fs.js";
|
|
3
|
+
import { getTemplatePath } from "../../lib/paths.js";
|
|
4
|
+
import { inferScriptExtension } from "./config.js";
|
|
5
|
+
export async function ensureProjectFiles(cwd, config) {
|
|
6
|
+
const utilsPath = path.resolve(cwd, config.paths.utils);
|
|
7
|
+
if (!(await fileExists(utilsPath))) {
|
|
8
|
+
const ext = inferScriptExtension(config);
|
|
9
|
+
await copyFileSafe(getTemplatePath(`lib/utils.${ext}`), utilsPath, true);
|
|
10
|
+
}
|
|
11
|
+
const stylesPath = path.resolve(cwd, config.paths.styles);
|
|
12
|
+
if (!(await fileExists(stylesPath))) {
|
|
13
|
+
await copyFileSafe(getTemplatePath("styles/globals.css"), stylesPath, true);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=project-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../../src/commands/add/project-files.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,MAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,YAAY,CAChB,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,EACnC,SAAS,EACT,IAAI,CACL,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACzD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,YAAY,CAChB,eAAe,CAAC,oBAAoB,CAAC,EACrC,UAAU,EACV,IAAI,CACL,CAAA;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import prompts from "prompts";
|
|
2
|
+
export async function confirmInstallation(what) {
|
|
3
|
+
const { confirmed } = await prompts({
|
|
4
|
+
type: "confirm",
|
|
5
|
+
name: "confirmed",
|
|
6
|
+
message: `Install ${what}?`,
|
|
7
|
+
initial: true
|
|
8
|
+
});
|
|
9
|
+
return confirmed;
|
|
10
|
+
}
|
|
11
|
+
export async function confirmOverwrite() {
|
|
12
|
+
const { overwrite } = await prompts({
|
|
13
|
+
type: "confirm",
|
|
14
|
+
name: "overwrite",
|
|
15
|
+
message: "Overwrite existing components?",
|
|
16
|
+
initial: false
|
|
17
|
+
});
|
|
18
|
+
return overwrite;
|
|
19
|
+
}
|
|
20
|
+
export async function confirmDependencyInstallation(dependencies) {
|
|
21
|
+
const { shouldInstall } = await prompts({
|
|
22
|
+
type: "confirm",
|
|
23
|
+
name: "shouldInstall",
|
|
24
|
+
message: `Install ${dependencies.size} npm package${dependencies.size > 1 ? "s" : ""}?`,
|
|
25
|
+
initial: true
|
|
26
|
+
});
|
|
27
|
+
return shouldInstall;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/add/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;QAClC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,IAAI,GAAG;QAC3B,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;QAClC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,gCAAgC;QACzC,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,YAAyB;IAEzB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,CAAC;QACtC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,WAAW,YAAY,CAAC,IAAI,eAAe,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;QACvF,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,OAAO,aAAa,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RegistryIndex } from "../../lib/registry.js";
|
|
2
|
+
import type { ComponentMap } from "./types.js";
|
|
3
|
+
export declare function getComponentNames(registry: RegistryIndex): string[];
|
|
4
|
+
export declare function createComponentMap(registry: RegistryIndex): ComponentMap;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function getComponentNames(registry) {
|
|
2
|
+
return registry.components.map((component) => component.name);
|
|
3
|
+
}
|
|
4
|
+
export function createComponentMap(registry) {
|
|
5
|
+
return new Map(registry.components.map((component) => [component.name, component]));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/commands/add/registry.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,iBAAiB,CAAC,QAAuB;IACvD,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAuB;IACxD,OAAO,IAAI,GAAG,CACZ,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CACpE,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TrixUIConfig } from "../../lib/config.js";
|
|
2
|
+
import type { RegistryItem } from "../../lib/registry.js";
|
|
3
|
+
export interface AddOptions {
|
|
4
|
+
force?: boolean;
|
|
5
|
+
yes?: boolean;
|
|
6
|
+
silent?: boolean;
|
|
7
|
+
skipDeps?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface InstallationResult {
|
|
10
|
+
installed: string[];
|
|
11
|
+
skipped: string[];
|
|
12
|
+
failed: string[];
|
|
13
|
+
npmDependencies: Set<string>;
|
|
14
|
+
conflicts: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface ComponentValidation {
|
|
17
|
+
valid: string[];
|
|
18
|
+
invalid: string[];
|
|
19
|
+
suggestions: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface DependencyAnalysis {
|
|
22
|
+
components: string[];
|
|
23
|
+
dependencies: Set<string>;
|
|
24
|
+
npmDependencies: Set<string>;
|
|
25
|
+
conflicts: string[];
|
|
26
|
+
totalToInstall: number;
|
|
27
|
+
}
|
|
28
|
+
export type AddConfig = TrixUIConfig & {
|
|
29
|
+
typescript?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type ComponentMap = Map<string, RegistryItem>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/add/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AddOptions, DependencyAnalysis, InstallationResult } from "./types.js";
|
|
2
|
+
export declare function displayInstallationPlan(analysis: DependencyAnalysis, options: AddOptions): void;
|
|
3
|
+
export declare function displayManualInstallInstructions(dependencies: Set<string>, cwd: string): Promise<void>;
|
|
4
|
+
export declare function displayResults(result: InstallationResult, options: AddOptions): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { detectPackageManager } from "./package-manager.js";
|
|
3
|
+
export function displayInstallationPlan(analysis, options) {
|
|
4
|
+
console.log("\n" + chalk.bold("Installation Plan:"));
|
|
5
|
+
console.log(chalk.gray("\u00c4".repeat(50)));
|
|
6
|
+
console.log(`${chalk.cyan("Components to install:")} ${chalk.white(analysis.totalToInstall)}`);
|
|
7
|
+
if (analysis.dependencies.size > 0) {
|
|
8
|
+
console.log(`${chalk.cyan("Additional dependencies:")} ${chalk.white(analysis.dependencies.size)}`);
|
|
9
|
+
console.log(chalk.gray(` ${Array.from(analysis.dependencies).join(", ")}`));
|
|
10
|
+
}
|
|
11
|
+
if (analysis.npmDependencies.size > 0) {
|
|
12
|
+
console.log(`${chalk.cyan("NPM packages required:")} ${chalk.white(analysis.npmDependencies.size)}`);
|
|
13
|
+
console.log(chalk.gray(` ${Array.from(analysis.npmDependencies).join(", ")}`));
|
|
14
|
+
}
|
|
15
|
+
if (analysis.conflicts.length > 0 && !options.force) {
|
|
16
|
+
console.log(`${chalk.yellow("Conflicts detected:")} ${chalk.white(analysis.conflicts.length)}`);
|
|
17
|
+
console.log(chalk.gray(` ${analysis.conflicts.join(", ")}`));
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk.gray("\u00c4".repeat(50)) + "\n");
|
|
20
|
+
}
|
|
21
|
+
export async function displayManualInstallInstructions(dependencies, cwd) {
|
|
22
|
+
const packageManager = await detectPackageManager(cwd);
|
|
23
|
+
const installCmd = packageManager === "npm" ? "install" : "add";
|
|
24
|
+
console.log(chalk.yellow("\nPlease install the following dependencies:"));
|
|
25
|
+
console.log(chalk.cyan(`${packageManager} ${installCmd} ${Array.from(dependencies).join(" ")}`));
|
|
26
|
+
console.log();
|
|
27
|
+
}
|
|
28
|
+
export function displayResults(result, options) {
|
|
29
|
+
console.log("\n" + chalk.bold("Installation Results:"));
|
|
30
|
+
console.log(chalk.gray("\u00c4".repeat(50)));
|
|
31
|
+
if (result.installed.length > 0) {
|
|
32
|
+
console.log(chalk.green(`\u00fb Installed (${result.installed.length}):`));
|
|
33
|
+
result.installed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
|
|
34
|
+
}
|
|
35
|
+
if (result.skipped.length > 0 && !options.force) {
|
|
36
|
+
console.log(chalk.yellow(`? Skipped (${result.skipped.length}):`));
|
|
37
|
+
result.skipped.forEach((name) => console.log(chalk.gray(` \u0007 ${name} (already exists)`)));
|
|
38
|
+
}
|
|
39
|
+
if (result.failed.length > 0) {
|
|
40
|
+
console.log(chalk.red(`? Failed (${result.failed.length}):`));
|
|
41
|
+
result.failed.forEach((name) => console.log(chalk.gray(` \u0007 ${name}`)));
|
|
42
|
+
}
|
|
43
|
+
console.log(chalk.gray("\u00c4".repeat(50)));
|
|
44
|
+
if (result.installed.length > 0) {
|
|
45
|
+
console.log(chalk.green.bold(`\n\u00fb Successfully installed ${result.installed.length} component${result.installed.length !== 1 ? "s" : ""}!`));
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/commands/add/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createComponentMap, getComponentNames } from "./registry.js";
|
|
2
|
+
export function validateComponents(components, registry) {
|
|
3
|
+
const valid = [];
|
|
4
|
+
const invalid = [];
|
|
5
|
+
const suggestions = [];
|
|
6
|
+
const componentMap = createComponentMap(registry);
|
|
7
|
+
const availableComponents = getComponentNames(registry);
|
|
8
|
+
for (const component of components) {
|
|
9
|
+
const trimmed = component.trim();
|
|
10
|
+
if (!trimmed) {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
if (componentMap.has(trimmed)) {
|
|
14
|
+
valid.push(trimmed);
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
invalid.push(trimmed);
|
|
18
|
+
const lower = trimmed.toLowerCase();
|
|
19
|
+
const similar = availableComponents.filter((name) => {
|
|
20
|
+
const candidate = name.toLowerCase();
|
|
21
|
+
return candidate.includes(lower) || lower.includes(candidate);
|
|
22
|
+
});
|
|
23
|
+
suggestions.push(...similar);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
valid,
|
|
27
|
+
invalid,
|
|
28
|
+
suggestions: [...new Set(suggestions)]
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/commands/add/validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAErE,MAAM,UAAU,kBAAkB,CAChC,UAAoB,EACpB,QAAuB;IAEvB,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,WAAW,GAAa,EAAE,CAAA;IAEhC,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACjD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAEvD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAQ;QACV,CAAC;QAED,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnB,SAAQ;QACV,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAErB,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;YACpC,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QACF,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,KAAK;QACL,OAAO;QACP,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;KACvC,CAAA;AACH,CAAC"}
|
package/dist/commands/add.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const addCommand: Command;
|
|
1
|
+
export { addCommand } from "./add/command.js";
|