tailar 0.2.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.
- package/LICENSE +22 -0
- package/README.md +183 -0
- package/README.npm.md +183 -0
- package/dist/api/client.d.ts +47 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +329 -0
- package/dist/api/client.js.map +1 -0
- package/dist/auth/browser.d.ts +11 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +46 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/flow.d.ts +28 -0
- package/dist/auth/flow.d.ts.map +1 -0
- package/dist/auth/flow.js +171 -0
- package/dist/auth/flow.js.map +1 -0
- package/dist/auth/storage.d.ts +30 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +112 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/commands/add.d.ts +8 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +285 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +230 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +176 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/installers/dependencies.d.ts +27 -0
- package/dist/installers/dependencies.d.ts.map +1 -0
- package/dist/installers/dependencies.js +185 -0
- package/dist/installers/dependencies.js.map +1 -0
- package/dist/installers/files.d.ts +50 -0
- package/dist/installers/files.d.ts.map +1 -0
- package/dist/installers/files.js +211 -0
- package/dist/installers/files.js.map +1 -0
- package/dist/installers/install-feature.d.ts +20 -0
- package/dist/installers/install-feature.d.ts.map +1 -0
- package/dist/installers/install-feature.js +169 -0
- package/dist/installers/install-feature.js.map +1 -0
- package/dist/installers/post-install.d.ts +18 -0
- package/dist/installers/post-install.d.ts.map +1 -0
- package/dist/installers/post-install.js +228 -0
- package/dist/installers/post-install.js.map +1 -0
- package/dist/installers/templates.d.ts +22 -0
- package/dist/installers/templates.d.ts.map +1 -0
- package/dist/installers/templates.js +62 -0
- package/dist/installers/templates.js.map +1 -0
- package/dist/registry/loader.d.ts +21 -0
- package/dist/registry/loader.d.ts.map +1 -0
- package/dist/registry/loader.js +83 -0
- package/dist/registry/loader.js.map +1 -0
- package/dist/registry/query.d.ts +55 -0
- package/dist/registry/query.d.ts.map +1 -0
- package/dist/registry/query.js +123 -0
- package/dist/registry/query.js.map +1 -0
- package/dist/types/config.d.ts +85 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/registry.d.ts +180 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +8 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/wizard.d.ts +43 -0
- package/dist/types/wizard.d.ts.map +1 -0
- package/dist/types/wizard.js +59 -0
- package/dist/types/wizard.js.map +1 -0
- package/dist/utils/clack-wizard.d.ts +9 -0
- package/dist/utils/clack-wizard.d.ts.map +1 -0
- package/dist/utils/clack-wizard.js +328 -0
- package/dist/utils/clack-wizard.js.map +1 -0
- package/dist/utils/config.d.ts +49 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +121 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +56 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +93 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-manager.d.ts +41 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +118 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/prompts.d.ts +22 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +142 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/validation.d.ts +50 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +108 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Storage Module
|
|
3
|
+
*
|
|
4
|
+
* Handles storing and retrieving CLI authentication tokens
|
|
5
|
+
* Platform-specific path resolution for credentials file
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, writeFile, mkdir, unlink } from "fs/promises";
|
|
8
|
+
import { existsSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { homedir } from "os";
|
|
11
|
+
import { logger } from "../utils/logger.js";
|
|
12
|
+
const CREDENTIALS_FILENAME = "credentials.json";
|
|
13
|
+
/**
|
|
14
|
+
* Get platform-specific credentials directory path
|
|
15
|
+
*/
|
|
16
|
+
function getCredentialsDir() {
|
|
17
|
+
const platform = process.platform;
|
|
18
|
+
if (platform === "win32") {
|
|
19
|
+
// Windows: %APPDATA%/tailar
|
|
20
|
+
const appData = process.env.APPDATA;
|
|
21
|
+
if (!appData) {
|
|
22
|
+
throw new Error("APPDATA environment variable not set");
|
|
23
|
+
}
|
|
24
|
+
return join(appData, "tailar");
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// macOS/Linux: ~/.tailar
|
|
28
|
+
return join(homedir(), ".tailar");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get full path to credentials file
|
|
33
|
+
*/
|
|
34
|
+
function getCredentialsPath() {
|
|
35
|
+
return join(getCredentialsDir(), CREDENTIALS_FILENAME);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read stored token from credentials file
|
|
39
|
+
*/
|
|
40
|
+
export async function getStoredToken() {
|
|
41
|
+
const credentialsPath = getCredentialsPath();
|
|
42
|
+
if (!existsSync(credentialsPath)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const content = await readFile(credentialsPath, "utf-8");
|
|
47
|
+
const tokenData = JSON.parse(content);
|
|
48
|
+
// Validate structure
|
|
49
|
+
if (!tokenData.accessToken ||
|
|
50
|
+
!tokenData.refreshToken ||
|
|
51
|
+
!tokenData.expiresAt) {
|
|
52
|
+
logger.warn("Invalid token data structure, clearing credentials");
|
|
53
|
+
await clearToken();
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return tokenData;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger.warn(`Failed to read credentials: ${error}`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Save token to credentials file
|
|
65
|
+
*/
|
|
66
|
+
export async function saveToken(tokenData) {
|
|
67
|
+
const credentialsDir = getCredentialsDir();
|
|
68
|
+
const credentialsPath = getCredentialsPath();
|
|
69
|
+
try {
|
|
70
|
+
// Ensure directory exists
|
|
71
|
+
if (!existsSync(credentialsDir)) {
|
|
72
|
+
await mkdir(credentialsDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
// Write token data
|
|
75
|
+
const content = JSON.stringify(tokenData, null, 2);
|
|
76
|
+
await writeFile(credentialsPath, content, "utf-8");
|
|
77
|
+
// Set restrictive permissions (owner read/write only)
|
|
78
|
+
if (process.platform !== "win32") {
|
|
79
|
+
await import("fs/promises").then((fs) => fs.chmod(credentialsPath, 0o600));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new Error(`Failed to save credentials: ${error}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Clear stored token (delete credentials file)
|
|
88
|
+
*/
|
|
89
|
+
export async function clearToken() {
|
|
90
|
+
const credentialsPath = getCredentialsPath();
|
|
91
|
+
if (existsSync(credentialsPath)) {
|
|
92
|
+
try {
|
|
93
|
+
await unlink(credentialsPath);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.warn(`Failed to delete credentials file: ${error}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if token exists and is not expired
|
|
102
|
+
*/
|
|
103
|
+
export function isTokenValid(tokenData) {
|
|
104
|
+
if (!tokenData) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
// Check if token is expired (with 5 minute buffer)
|
|
108
|
+
const now = Math.floor(Date.now() / 1000);
|
|
109
|
+
const buffer = 5 * 60; // 5 minutes in seconds
|
|
110
|
+
return tokenData.expiresAt > now + buffer;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/auth/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,eAAO,MAAM,UAAU,SAsKnB,CAAC"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add Command
|
|
3
|
+
*
|
|
4
|
+
* Add features, blocks, or components to the project.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import { logger } from "../utils/logger.js";
|
|
8
|
+
import { readConfig, writeConfig, isInstalled, addInstalledItem, } from "../utils/config.js";
|
|
9
|
+
import { detectPackageManager } from "../utils/package-manager.js";
|
|
10
|
+
import { detectProjectStructure } from "../utils/validation.js";
|
|
11
|
+
import { loadRegistry } from "../registry/loader.js";
|
|
12
|
+
import { getEntry, getVariant, } from "../registry/query.js";
|
|
13
|
+
import * as p from "@clack/prompts";
|
|
14
|
+
import { confirm, runPrompts } from "../utils/prompts.js";
|
|
15
|
+
import { installFiles } from "../installers/files.js";
|
|
16
|
+
import { mergeDependencies, runInstall, collectDependencies, } from "../installers/dependencies.js";
|
|
17
|
+
import { executePostInstallSteps } from "../installers/post-install.js";
|
|
18
|
+
import { collectTemplateVariables, extractVariablesFromAnswers, mergeVariables, } from "../installers/templates.js";
|
|
19
|
+
import { isAuthenticated, authenticate } from "../auth/flow.js";
|
|
20
|
+
import { checkSubscription } from "../api/client.js";
|
|
21
|
+
export const addCommand = new Command("add")
|
|
22
|
+
.description("Add a feature, block, or component")
|
|
23
|
+
.argument("<name>", "Name of the feature, block, or component to add")
|
|
24
|
+
.option("-y, --yes", "Skip prompts and use defaults")
|
|
25
|
+
.option("--variant <variant>", "Specify variant")
|
|
26
|
+
.option("--provider <provider>", "Specify provider")
|
|
27
|
+
.option("--force", "Force reinstall even if already installed")
|
|
28
|
+
.action(async (name, options) => {
|
|
29
|
+
try {
|
|
30
|
+
const projectPath = process.cwd();
|
|
31
|
+
// Check if initialized
|
|
32
|
+
const config = await readConfig(projectPath);
|
|
33
|
+
if (!config) {
|
|
34
|
+
logger.error("Tailar not initialized. Run `tailar init` first.");
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
// Detect project structure and package manager
|
|
38
|
+
const structure = detectProjectStructure(projectPath);
|
|
39
|
+
const packageManager = detectPackageManager(projectPath);
|
|
40
|
+
const context = {
|
|
41
|
+
root: projectPath,
|
|
42
|
+
packageManager,
|
|
43
|
+
structure,
|
|
44
|
+
config,
|
|
45
|
+
};
|
|
46
|
+
// Load registry
|
|
47
|
+
logger.info("Loading registry...");
|
|
48
|
+
const registry = await loadRegistry();
|
|
49
|
+
// Find entry
|
|
50
|
+
const entry = getEntry(registry, name);
|
|
51
|
+
if (!entry) {
|
|
52
|
+
logger.error(`Not found: ${name}`);
|
|
53
|
+
logger.info("Run `tailar list` to see available items");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
logger.header(`📦 Adding ${entry.label}`);
|
|
57
|
+
if (!options.yes) {
|
|
58
|
+
p.intro(`Tailar add — ${entry.label}`);
|
|
59
|
+
}
|
|
60
|
+
// Check if component requires subscription
|
|
61
|
+
const requiresSubscription = entry.requiresSubscription === true &&
|
|
62
|
+
(entry.subscriptionTier || 0) > 0;
|
|
63
|
+
// Always check subscription for paid components - no exceptions
|
|
64
|
+
if (requiresSubscription) {
|
|
65
|
+
// Check authentication first - this is mandatory for paid components
|
|
66
|
+
if (!(await isAuthenticated())) {
|
|
67
|
+
logger.info("Authentication required for this component.");
|
|
68
|
+
logger.break();
|
|
69
|
+
await authenticate();
|
|
70
|
+
logger.break();
|
|
71
|
+
}
|
|
72
|
+
// Verify subscription access via API
|
|
73
|
+
logger.info("Verifying subscription access...");
|
|
74
|
+
// Don't pass registry entry here - force API check with authentication
|
|
75
|
+
const accessCheck = await checkSubscription(entry.type, name);
|
|
76
|
+
if (!accessCheck.accessible) {
|
|
77
|
+
logger.error(`Access denied: ${accessCheck.reason || "Subscription required"}`);
|
|
78
|
+
logger.break();
|
|
79
|
+
logger.info("Visit https://tailar.dev/choose-plan to upgrade your subscription.");
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
logger.success("Subscription verified");
|
|
83
|
+
}
|
|
84
|
+
// Check if already installed
|
|
85
|
+
if (isInstalled(config, entry.type, name) && !options.force) {
|
|
86
|
+
logger.warn(`${entry.label} is already installed`);
|
|
87
|
+
const reinstall = options.yes || (await confirm("Reinstall?", false));
|
|
88
|
+
if (!reinstall) {
|
|
89
|
+
logger.info("Cancelled");
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check and install feature dependencies
|
|
94
|
+
const allPostInstallSteps = [];
|
|
95
|
+
let needsPackageInstall = false;
|
|
96
|
+
if (entry.featureDependencies && entry.featureDependencies.length > 0) {
|
|
97
|
+
logger.info("Checking dependencies...");
|
|
98
|
+
const missingDeps = entry.featureDependencies.filter((dep) => !isInstalled(config, "feature", dep));
|
|
99
|
+
if (missingDeps.length > 0) {
|
|
100
|
+
logger.warn(`Missing required features: ${missingDeps.join(", ")}`);
|
|
101
|
+
const installDeps = options.yes ||
|
|
102
|
+
(await confirm("Install missing dependencies?", true));
|
|
103
|
+
if (!installDeps) {
|
|
104
|
+
logger.error("Cannot proceed without dependencies");
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
// Install dependencies recursively and collect post-install steps
|
|
108
|
+
for (const depName of missingDeps) {
|
|
109
|
+
logger.info(`Installing dependency: ${depName}`);
|
|
110
|
+
const result = await installEntry(depName, context, registry, options);
|
|
111
|
+
allPostInstallSteps.push(...result.postInstallSteps);
|
|
112
|
+
if (result.hasDependencies) {
|
|
113
|
+
needsPackageInstall = true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Install the entry and collect its post-install steps
|
|
119
|
+
const entryResult = await installEntry(name, context, registry, options);
|
|
120
|
+
allPostInstallSteps.push(...entryResult.postInstallSteps);
|
|
121
|
+
if (entryResult.hasDependencies) {
|
|
122
|
+
needsPackageInstall = true;
|
|
123
|
+
}
|
|
124
|
+
// Run package manager install once if any dependencies were added
|
|
125
|
+
if (needsPackageInstall) {
|
|
126
|
+
logger.info("Installing packages...");
|
|
127
|
+
const installSpinner = logger.spinner(`Running ${context.packageManager} install...`);
|
|
128
|
+
await runInstall(context.root, context.packageManager, {
|
|
129
|
+
silent: true,
|
|
130
|
+
});
|
|
131
|
+
installSpinner.succeed("Packages installed");
|
|
132
|
+
}
|
|
133
|
+
// Execute all collected post-install steps together
|
|
134
|
+
if (allPostInstallSteps.length > 0) {
|
|
135
|
+
logger.info("Running post-install steps...");
|
|
136
|
+
await executePostInstallSteps(context.root, allPostInstallSteps, context);
|
|
137
|
+
}
|
|
138
|
+
logger.break();
|
|
139
|
+
logger.success(`✨ ${entry.label} added successfully!`);
|
|
140
|
+
logger.break();
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
logger.error(`Failed to add: ${error}`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* Install a single entry (feature, block, or component)
|
|
149
|
+
* Returns post-install steps and dependency info
|
|
150
|
+
*/
|
|
151
|
+
async function installEntry(name, context, registry, options) {
|
|
152
|
+
const entry = getEntry(registry, name);
|
|
153
|
+
if (!entry) {
|
|
154
|
+
throw new Error(`Entry not found: ${name}`);
|
|
155
|
+
}
|
|
156
|
+
// Run prompts if any
|
|
157
|
+
let answers = {};
|
|
158
|
+
if (entry.questions && entry.questions.length > 0 && !options.yes) {
|
|
159
|
+
logger.info("Configuration:");
|
|
160
|
+
answers = await runPrompts(entry.questions, {
|
|
161
|
+
skipPrompts: options.yes,
|
|
162
|
+
defaults: {
|
|
163
|
+
variant: options.variant,
|
|
164
|
+
provider: options.provider,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
// Determine variant using registry's variantResolver (data-driven)
|
|
169
|
+
let selectedVariant;
|
|
170
|
+
if (options.variant) {
|
|
171
|
+
// Explicit variant from command line
|
|
172
|
+
selectedVariant = options.variant;
|
|
173
|
+
}
|
|
174
|
+
else if (answers.variant) {
|
|
175
|
+
// Direct variant answer from prompts
|
|
176
|
+
selectedVariant = answers.variant;
|
|
177
|
+
}
|
|
178
|
+
else if (entry.variantResolver) {
|
|
179
|
+
// Use registry's variant resolver for generic resolution
|
|
180
|
+
const resolver = entry.variantResolver;
|
|
181
|
+
// Check if we should detect from installed features
|
|
182
|
+
if (resolver.detect && context.config) {
|
|
183
|
+
const featureToDetect = resolver.detect;
|
|
184
|
+
const installedFeature = context.config.installed.features.find((f) => f.name === featureToDetect);
|
|
185
|
+
if (installedFeature?.variant) {
|
|
186
|
+
// Apply mapping if exists, otherwise use variant directly
|
|
187
|
+
if (resolver.mapping) {
|
|
188
|
+
const mappedValue = resolver.mapping[installedFeature.variant];
|
|
189
|
+
selectedVariant = mappedValue || installedFeature.variant;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
selectedVariant = installedFeature.variant;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Fallback to answerKey if detect didn't work
|
|
197
|
+
if (!selectedVariant && resolver.answerKey) {
|
|
198
|
+
const answerValue = options.provider || answers[resolver.answerKey];
|
|
199
|
+
if (answerValue !== undefined) {
|
|
200
|
+
// Apply mapping if exists, otherwise use value directly
|
|
201
|
+
if (resolver.mapping) {
|
|
202
|
+
const mappedValue = resolver.mapping[String(answerValue)];
|
|
203
|
+
selectedVariant = mappedValue || String(answerValue);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
selectedVariant = String(answerValue);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Fallback to default variant
|
|
211
|
+
if (!selectedVariant && resolver.default) {
|
|
212
|
+
selectedVariant = resolver.default;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Get variant if applicable
|
|
216
|
+
const variant = selectedVariant
|
|
217
|
+
? getVariant(entry, selectedVariant)
|
|
218
|
+
: undefined;
|
|
219
|
+
// Collect template variables
|
|
220
|
+
let templateVars = {};
|
|
221
|
+
if (entry.templates && entry.templates.length > 0) {
|
|
222
|
+
templateVars = await collectTemplateVariables(entry.templates, {
|
|
223
|
+
skipPrompts: options.yes,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// Merge variables from answers
|
|
227
|
+
const answerVars = extractVariablesFromAnswers(answers);
|
|
228
|
+
const allVars = mergeVariables(templateVars, answerVars);
|
|
229
|
+
// Collect files (base + variant)
|
|
230
|
+
let files = [...entry.files];
|
|
231
|
+
if (variant?.files) {
|
|
232
|
+
files.push(...variant.files);
|
|
233
|
+
}
|
|
234
|
+
// Install files
|
|
235
|
+
logger.info("Installing files...");
|
|
236
|
+
const spinner = logger.spinner("Copying files...");
|
|
237
|
+
const result = await installFiles(context.root, files, context, allVars, {
|
|
238
|
+
overwrite: options.force || options.yes,
|
|
239
|
+
componentType: entry.type,
|
|
240
|
+
componentName: entry.name,
|
|
241
|
+
variant: selectedVariant,
|
|
242
|
+
registryEntry: entry, // Pass registry entry to skip auth for free components
|
|
243
|
+
});
|
|
244
|
+
if (result.conflicts.length > 0 && !options.force) {
|
|
245
|
+
spinner.fail("File conflicts detected");
|
|
246
|
+
logger.error("The following files already exist:");
|
|
247
|
+
result.conflicts.forEach((file) => logger.error(` ${file}`));
|
|
248
|
+
logger.info("Use --force to overwrite");
|
|
249
|
+
throw new Error("File conflicts detected");
|
|
250
|
+
}
|
|
251
|
+
spinner.succeed(`Installed ${result.installed.length} files`);
|
|
252
|
+
// Collect and merge dependencies (but don't run install yet)
|
|
253
|
+
const deps = collectDependencies(entry, selectedVariant);
|
|
254
|
+
let hasDependencies = false;
|
|
255
|
+
if (deps.length > 0) {
|
|
256
|
+
logger.info("Updating dependencies...");
|
|
257
|
+
const depResult = await mergeDependencies(context.root, deps);
|
|
258
|
+
logger.success(`Added ${depResult.added.dependencies.length} dependencies, ` +
|
|
259
|
+
`${depResult.added.devDependencies.length} devDependencies`);
|
|
260
|
+
if (depResult.conflicts.length > 0) {
|
|
261
|
+
logger.warn("Dependency version conflicts:");
|
|
262
|
+
depResult.conflicts.forEach((conflict) => logger.warn(` ${conflict}`));
|
|
263
|
+
}
|
|
264
|
+
hasDependencies = true;
|
|
265
|
+
}
|
|
266
|
+
// Collect post-install steps (don't execute yet)
|
|
267
|
+
const postInstallSteps = [
|
|
268
|
+
...(entry.postInstall || []),
|
|
269
|
+
...(variant?.postInstall || []),
|
|
270
|
+
];
|
|
271
|
+
// Update config
|
|
272
|
+
if (!context.config) {
|
|
273
|
+
throw new Error("Project config not found");
|
|
274
|
+
}
|
|
275
|
+
const updatedConfig = addInstalledItem(context.config, entry.type, name, {
|
|
276
|
+
variant: selectedVariant,
|
|
277
|
+
provider: options.provider || answers.emailProvider || answers.dbProvider,
|
|
278
|
+
});
|
|
279
|
+
await writeConfig(context.root, updatedConfig);
|
|
280
|
+
context.config = updatedConfig;
|
|
281
|
+
logger.success(`${entry.label} installed`);
|
|
282
|
+
// Return post-install steps and dependency info
|
|
283
|
+
return { postInstallSteps, hasDependencies };
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,eAAO,MAAM,WAAW,SAkSpB,CAAC"}
|