tailar 0.3.0 → 0.4.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/README.md +35 -0
- package/README.npm.md +35 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +40 -16
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +82 -28
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/playground.d.ts +9 -0
- package/dist/commands/playground.d.ts.map +1 -0
- package/dist/commands/playground.js +159 -0
- package/dist/commands/playground.js.map +1 -0
- package/dist/commands/sync.d.ts +9 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +59 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/files.d.ts +3 -3
- package/dist/installers/files.d.ts.map +1 -1
- package/dist/installers/files.js +17 -11
- package/dist/installers/files.js.map +1 -1
- package/dist/installers/install-feature.d.ts +5 -0
- package/dist/installers/install-feature.d.ts.map +1 -1
- package/dist/installers/install-feature.js +28 -2
- package/dist/installers/install-feature.js.map +1 -1
- package/dist/installers/post-install.d.ts +4 -1
- package/dist/installers/post-install.d.ts.map +1 -1
- package/dist/installers/post-install.js +7 -3
- package/dist/installers/post-install.js.map +1 -1
- package/dist/registry/loader.d.ts +4 -0
- package/dist/registry/loader.d.ts.map +1 -1
- package/dist/registry/loader.js +28 -8
- package/dist/registry/loader.js.map +1 -1
- package/dist/registry/local-mode.d.ts +30 -0
- package/dist/registry/local-mode.d.ts.map +1 -0
- package/dist/registry/local-mode.js +81 -0
- package/dist/registry/local-mode.js.map +1 -0
- package/dist/utils/clack-wizard.d.ts +6 -0
- package/dist/utils/clack-wizard.d.ts.map +1 -1
- package/dist/utils/clack-wizard.js +5 -2
- package/dist/utils/clack-wizard.js.map +1 -1
- package/dist/utils/init-flags.d.ts +27 -0
- package/dist/utils/init-flags.d.ts.map +1 -0
- package/dist/utils/init-flags.js +102 -0
- package/dist/utils/init-flags.js.map +1 -0
- package/dist/utils/local-options.d.ts +7 -0
- package/dist/utils/local-options.d.ts.map +1 -0
- package/dist/utils/local-options.js +10 -0
- package/dist/utils/local-options.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playground Command
|
|
3
|
+
*
|
|
4
|
+
* Create a long-lived app once, with a local Postgres compose file and .env.
|
|
5
|
+
* Later edits use `tailar sync` and do not rebuild this setup.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, readdirSync, writeFileSync } from "fs";
|
|
8
|
+
import { basename, dirname, isAbsolute, join, resolve } from "path";
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
import { addLocalOptions } from "../utils/local-options.js";
|
|
12
|
+
import { enableLocalRegistry } from "../registry/local-mode.js";
|
|
13
|
+
import { runGenerationFromWizardConfig } from "../utils/clack-wizard.js";
|
|
14
|
+
import { buildWizardStateFromFlags } from "../utils/init-flags.js";
|
|
15
|
+
const COMPOSE_FILE = `services:
|
|
16
|
+
postgres:
|
|
17
|
+
image: postgres:16
|
|
18
|
+
environment:
|
|
19
|
+
POSTGRES_USER: postgres
|
|
20
|
+
POSTGRES_PASSWORD: postgres
|
|
21
|
+
POSTGRES_DB: tailar
|
|
22
|
+
ports:
|
|
23
|
+
- "5432:5432"
|
|
24
|
+
volumes:
|
|
25
|
+
- tailar_pg:/var/lib/postgresql/data
|
|
26
|
+
|
|
27
|
+
volumes:
|
|
28
|
+
tailar_pg:
|
|
29
|
+
`;
|
|
30
|
+
const ENV_EXAMPLES = [
|
|
31
|
+
"features/db/shared/env.example",
|
|
32
|
+
"features/emails/resend/env.example",
|
|
33
|
+
"features/auth/organization-based/env.example",
|
|
34
|
+
"features/payments/stripe/shared/env.example",
|
|
35
|
+
];
|
|
36
|
+
function buildEnvFile(componentsPath) {
|
|
37
|
+
const chunks = [
|
|
38
|
+
"# Generated once by `tailar playground`.",
|
|
39
|
+
"# `tailar sync` does not overwrite this file.",
|
|
40
|
+
"",
|
|
41
|
+
];
|
|
42
|
+
for (const relativePath of ENV_EXAMPLES) {
|
|
43
|
+
const full = join(componentsPath, relativePath);
|
|
44
|
+
if (!existsSync(full))
|
|
45
|
+
continue;
|
|
46
|
+
chunks.push(readFileSync(full, "utf-8").trim(), "");
|
|
47
|
+
}
|
|
48
|
+
let body = chunks.join("\n");
|
|
49
|
+
body = body.replace(/DATABASE_URL\s*=\s*.*/g, 'DATABASE_URL="postgresql://postgres:postgres@localhost:5432/tailar"');
|
|
50
|
+
body = body.replace(/BETTER_AUTH_SECRET\s*=\s*.*/g, 'BETTER_AUTH_SECRET="dev-only-tailar-playground-secret"');
|
|
51
|
+
body = body
|
|
52
|
+
.split("\n")
|
|
53
|
+
.map((line) => {
|
|
54
|
+
const trimmed = line.trim();
|
|
55
|
+
if (trimmed.startsWith("#") || !trimmed)
|
|
56
|
+
return line;
|
|
57
|
+
if (/^(RESEND_API_KEY|POSTMARK_|SENDGRID_|STRIPE_)/.test(trimmed)) {
|
|
58
|
+
return `# ${trimmed} # optional — pages render without this`;
|
|
59
|
+
}
|
|
60
|
+
return line;
|
|
61
|
+
})
|
|
62
|
+
.join("\n");
|
|
63
|
+
return body.trim() + "\n";
|
|
64
|
+
}
|
|
65
|
+
function writeSupportFiles(projectRoot, componentsPath) {
|
|
66
|
+
const envPath = join(projectRoot, ".env");
|
|
67
|
+
if (!existsSync(envPath)) {
|
|
68
|
+
writeFileSync(envPath, buildEnvFile(componentsPath), "utf-8");
|
|
69
|
+
logger.success("Wrote .env (local Postgres URL and a dev auth secret)");
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
logger.info(".env already exists — left it unchanged");
|
|
73
|
+
}
|
|
74
|
+
const composePath = join(projectRoot, "docker-compose.yml");
|
|
75
|
+
if (!existsSync(composePath)) {
|
|
76
|
+
writeFileSync(composePath, COMPOSE_FILE, "utf-8");
|
|
77
|
+
logger.success("Wrote docker-compose.yml (Postgres)");
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
logger.info("docker-compose.yml already exists — left it unchanged");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export const playgroundCommand = addLocalOptions(new Command("playground")
|
|
84
|
+
.description("Create a one-time local app for visually checking registry changes")
|
|
85
|
+
.argument("[dir]", "Directory to create", "playground")
|
|
86
|
+
.option("--skip-install", "Skip npm install and post-install commands")
|
|
87
|
+
.option("--verbose", "Show npm install output")).action(async (dir, options) => {
|
|
88
|
+
try {
|
|
89
|
+
const componentsPath = enableLocalRegistry(options.componentsPath);
|
|
90
|
+
const absoluteDir = isAbsolute(dir) ? dir : resolve(process.cwd(), dir);
|
|
91
|
+
const parent = dirname(absoluteDir);
|
|
92
|
+
const projectName = basename(absoluteDir);
|
|
93
|
+
logger.header("Tailar playground");
|
|
94
|
+
logger.info(`Components: ${componentsPath}`);
|
|
95
|
+
const configPath = join(absoluteDir, ".tailar.json");
|
|
96
|
+
if (existsSync(configPath)) {
|
|
97
|
+
logger.info("Playground already exists. Ensuring .env and Postgres compose file.");
|
|
98
|
+
writeSupportFiles(absoluteDir, componentsPath);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
if (existsSync(absoluteDir)) {
|
|
102
|
+
const existing = readdirSync(absoluteDir).filter((name) => name !== ".git");
|
|
103
|
+
if (existing.length > 0) {
|
|
104
|
+
logger.error(`${absoluteDir} exists and is not a Tailar project. Choose another directory.`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const { state, autoNotes } = buildWizardStateFromFlags({
|
|
109
|
+
projectName,
|
|
110
|
+
modules: "database,email,auth,payments",
|
|
111
|
+
db: "postgres",
|
|
112
|
+
email: "resend",
|
|
113
|
+
auth: "organization-based",
|
|
114
|
+
});
|
|
115
|
+
for (const note of autoNotes) {
|
|
116
|
+
logger.info(note);
|
|
117
|
+
}
|
|
118
|
+
await runGenerationFromWizardConfig(parent, state, {
|
|
119
|
+
verbose: options.verbose,
|
|
120
|
+
skipInstall: options.skipInstall,
|
|
121
|
+
skipNextSteps: true,
|
|
122
|
+
beforePostInstall: async (projectRoot) => {
|
|
123
|
+
writeSupportFiles(projectRoot, componentsPath);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
const pm = existsSync(join(absoluteDir, "pnpm-lock.yaml"))
|
|
128
|
+
? "pnpm"
|
|
129
|
+
: existsSync(join(absoluteDir, "yarn.lock"))
|
|
130
|
+
? "yarn"
|
|
131
|
+
: existsSync(join(absoluteDir, "bun.lockb"))
|
|
132
|
+
? "bun"
|
|
133
|
+
: "npm";
|
|
134
|
+
const dev = pm === "yarn"
|
|
135
|
+
? "yarn dev"
|
|
136
|
+
: pm === "pnpm"
|
|
137
|
+
? "pnpm dev"
|
|
138
|
+
: pm === "bun"
|
|
139
|
+
? "bun dev"
|
|
140
|
+
: "npm run dev";
|
|
141
|
+
logger.break();
|
|
142
|
+
logger.success("Playground is ready.");
|
|
143
|
+
logger.info("Start Postgres once, then the app:");
|
|
144
|
+
logger.log(` cd ${projectName}`);
|
|
145
|
+
logger.log(" docker compose up -d");
|
|
146
|
+
logger.log(" npx prisma db push");
|
|
147
|
+
logger.log(` ${dev}`);
|
|
148
|
+
logger.break();
|
|
149
|
+
logger.info("After you edit a feature or component:");
|
|
150
|
+
logger.log(" tailar sync <name> --local --components-path " + componentsPath);
|
|
151
|
+
logger.info("That recopies files into this app and leaves .env alone.");
|
|
152
|
+
logger.break();
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
logger.error(`Playground setup failed: ${error}`);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=playground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.js","sourceRoot":"","sources":["../../src/commands/playground.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Command
|
|
3
|
+
*
|
|
4
|
+
* Recopy one registry entry into an existing project without re-running
|
|
5
|
+
* init, rewriting .env, installing packages that did not change, or Prisma.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
export declare const syncCommand: Command;
|
|
9
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SAuDtB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Command
|
|
3
|
+
*
|
|
4
|
+
* Recopy one registry entry into an existing project without re-running
|
|
5
|
+
* init, rewriting .env, installing packages that did not change, or Prisma.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
9
|
+
import { readConfig } from "../utils/config.js";
|
|
10
|
+
import { detectPackageManager } from "../utils/package-manager.js";
|
|
11
|
+
import { installFeature } from "../installers/install-feature.js";
|
|
12
|
+
import { runInstall } from "../installers/dependencies.js";
|
|
13
|
+
import { addLocalOptions } from "../utils/local-options.js";
|
|
14
|
+
import { enableLocalRegistry, getLocalRegistry, } from "../registry/local-mode.js";
|
|
15
|
+
export const syncCommand = addLocalOptions(new Command("sync")
|
|
16
|
+
.description("Recopy a feature, block, or component into the current project")
|
|
17
|
+
.argument("<name>", "Registry entry to recopy")
|
|
18
|
+
.option("--variant <variant>", "Variant to install")
|
|
19
|
+
.option("--provider <provider>", "Provider answer used to pick a variant")
|
|
20
|
+
.option("--skip-install", "Do not run the package manager even if dependencies changed")).action(async (name, options) => {
|
|
21
|
+
try {
|
|
22
|
+
if (!getLocalRegistry()?.enabled) {
|
|
23
|
+
try {
|
|
24
|
+
enableLocalRegistry(options.componentsPath);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// No sibling components repo: fall back to the API.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const projectPath = process.cwd();
|
|
31
|
+
const config = await readConfig(projectPath);
|
|
32
|
+
if (!config) {
|
|
33
|
+
logger.error("Tailar not initialized. Run `tailar init` first.");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
logger.header(`Syncing ${name}`);
|
|
37
|
+
const result = await installFeature(projectPath, name, {
|
|
38
|
+
yes: true,
|
|
39
|
+
force: true,
|
|
40
|
+
variant: options.variant,
|
|
41
|
+
provider: options.provider,
|
|
42
|
+
});
|
|
43
|
+
if (result.dependenciesChanged && !options.skipInstall) {
|
|
44
|
+
const packageManager = detectPackageManager(projectPath);
|
|
45
|
+
logger.info("Installing new packages...");
|
|
46
|
+
await runInstall(projectPath, packageManager, { silent: true });
|
|
47
|
+
logger.success("Packages installed");
|
|
48
|
+
}
|
|
49
|
+
logger.break();
|
|
50
|
+
logger.success(`Synced ${name} (${result.postInstallSteps.length} post-install steps skipped).`);
|
|
51
|
+
logger.info(".env was left unchanged.");
|
|
52
|
+
logger.break();
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.error(`Sync failed: ${error}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CACxC,IAAI,OAAO,CAAC,MAAM,CAAC;KAChB,WAAW,CACV,gEAAgE,CACjE;KACA,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;KAC9C,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,wCAAwC,CAAC;KACzE,MAAM,CACL,gBAAgB,EAChB,6DAA6D,CAC9D,CACJ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAO,EAAE,EAAE;IACvC,IAAI,CAAC;QACH,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE;YACrD,GAAG,EAAE,IAAI;YACT,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC1C,MAAM,UAAU,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CACZ,UAAU,IAAI,KAAK,MAAM,CAAC,gBAAgB,CAAC,MAAM,+BAA+B,CACjF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,9 @@ import { Command } from "commander";
|
|
|
57
57
|
import { initCommand } from "./commands/init.js";
|
|
58
58
|
import { addCommand } from "./commands/add.js";
|
|
59
59
|
import { listCommand } from "./commands/list.js";
|
|
60
|
+
import { syncCommand } from "./commands/sync.js";
|
|
61
|
+
import { playgroundCommand } from "./commands/playground.js";
|
|
62
|
+
import { enableLocalRegistry } from "./registry/local-mode.js";
|
|
60
63
|
// Get package.json for version
|
|
61
64
|
const __filename = fileURLToPath(import.meta.url);
|
|
62
65
|
const __dirname = dirname(__filename);
|
|
@@ -66,10 +69,21 @@ program
|
|
|
66
69
|
.name("tailar")
|
|
67
70
|
.description("CLI tool for scaffolding Next.js features and components")
|
|
68
71
|
.version(packageJson.version);
|
|
72
|
+
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
73
|
+
const opts = actionCommand.opts();
|
|
74
|
+
if (opts.local || opts.componentsPath) {
|
|
75
|
+
const resolved = enableLocalRegistry(opts.componentsPath);
|
|
76
|
+
if (process.env.TAILAR_QUIET !== "1") {
|
|
77
|
+
console.log(`Using local components: ${resolved}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
69
81
|
// Register commands
|
|
70
82
|
program.addCommand(initCommand);
|
|
71
83
|
program.addCommand(addCommand);
|
|
72
84
|
program.addCommand(listCommand);
|
|
85
|
+
program.addCommand(syncCommand);
|
|
86
|
+
program.addCommand(playgroundCommand);
|
|
73
87
|
// Global error handler
|
|
74
88
|
process.on("unhandledRejection", (err) => {
|
|
75
89
|
console.error("Unhandled error:", err);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* File Installer
|
|
3
3
|
*
|
|
4
4
|
* Handles file installation, template substitution, and path resolution.
|
|
5
|
-
*
|
|
5
|
+
* Files come from the API, or from disk when local registry mode is on.
|
|
6
6
|
*/
|
|
7
7
|
import { FileMapping, ProjectContext } from "../types/index.js";
|
|
8
8
|
/**
|
|
@@ -29,8 +29,8 @@ export declare function installFile(sourceContent: string, projectPath: string,
|
|
|
29
29
|
strategy?: "override" | "merge";
|
|
30
30
|
}): Promise<void>;
|
|
31
31
|
/**
|
|
32
|
-
* Install multiple files from file mappings
|
|
33
|
-
*
|
|
32
|
+
* Install multiple files from file mappings.
|
|
33
|
+
* Local registry mode reads sources from disk and skips purchase checks.
|
|
34
34
|
*/
|
|
35
35
|
export declare function installFiles(projectPath: string, fileMappings: FileMapping[], context: ProjectContext, variables: Record<string, string> | undefined, options: {
|
|
36
36
|
overwrite?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/installers/files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/installers/files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKhE;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACrC,MAAM,CAuBR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR;AA8BD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAGT;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACtC,OAAO,GAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;CAC5B,GACL,OAAO,CAAC,IAAI,CAAC,CAmCf;AA0BD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAK,EACtC,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QACd,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,GACA,OAAO,CAAC;IACT,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC,CA2HD"}
|
package/dist/installers/files.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* File Installer
|
|
3
3
|
*
|
|
4
4
|
* Handles file installation, template substitution, and path resolution.
|
|
5
|
-
*
|
|
5
|
+
* Files come from the API, or from disk when local registry mode is on.
|
|
6
6
|
*/
|
|
7
7
|
import { readFile, writeFile, mkdir } from "fs/promises";
|
|
8
8
|
import { existsSync } from "fs";
|
|
9
9
|
import { join, dirname } from "path";
|
|
10
10
|
import { fetchComponentFile, checkSubscription } from "../api/client.js";
|
|
11
|
+
import { getLocalRegistry, readLocalComponentFile } from "../registry/local-mode.js";
|
|
11
12
|
/**
|
|
12
13
|
* Resolve template variables in a path
|
|
13
14
|
*/
|
|
@@ -135,22 +136,23 @@ async function fetchFileFromAPI(type, name, filePath, variant, requireAuth) {
|
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
138
|
/**
|
|
138
|
-
* Install multiple files from file mappings
|
|
139
|
-
*
|
|
139
|
+
* Install multiple files from file mappings.
|
|
140
|
+
* Local registry mode reads sources from disk and skips purchase checks.
|
|
140
141
|
*/
|
|
141
142
|
export async function installFiles(projectPath, fileMappings, context, variables = {}, options) {
|
|
142
143
|
const installed = [];
|
|
143
144
|
const skipped = [];
|
|
144
145
|
const conflicts = [];
|
|
146
|
+
const local = getLocalRegistry();
|
|
145
147
|
// Determine if authentication is required based on registry entry
|
|
146
148
|
// This prevents repeated authentication prompts for paid components
|
|
147
|
-
const requireAuth =
|
|
149
|
+
const requireAuth = !local?.enabled &&
|
|
150
|
+
options.registryEntry?.requiresSubscription === true &&
|
|
148
151
|
(options.registryEntry.subscriptionTier || 0) > 0;
|
|
149
|
-
// Check subscription before installing
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
|
|
153
|
-
if (options.componentType && options.componentName) {
|
|
152
|
+
// Check subscription before installing.
|
|
153
|
+
// Local mode is for development and CI and does not talk to the API.
|
|
154
|
+
// If registryEntry is provided and component is free, skip the check.
|
|
155
|
+
if (!local?.enabled && options.componentType && options.componentName) {
|
|
154
156
|
try {
|
|
155
157
|
const accessCheck = await checkSubscription(options.componentType, options.componentName, options.registryEntry);
|
|
156
158
|
if (!accessCheck.accessible) {
|
|
@@ -202,8 +204,12 @@ export async function installFiles(projectPath, fileMappings, context, variables
|
|
|
202
204
|
mapping.providers.db[dbFeature.variant] ?? mapping.source;
|
|
203
205
|
}
|
|
204
206
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
+
if (local?.enabled) {
|
|
208
|
+
sourceContent = await readLocalComponentFile(local.componentsPath, options.componentType, options.componentName, effectiveSource);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
sourceContent = await fetchFileFromAPI(options.componentType, options.componentName, effectiveSource, options.variant, requireAuth);
|
|
212
|
+
}
|
|
207
213
|
// Install file
|
|
208
214
|
await installFile(sourceContent, projectPath, targetPath, variables, {
|
|
209
215
|
overwrite: effectiveOverwrite,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/installers/files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/installers/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Programmatic install of a registry feature (same pipeline as tailar add).
|
|
3
3
|
*/
|
|
4
|
+
import type { ProjectConfig } from '../types/index.js';
|
|
4
5
|
export interface InstallFeatureOptions {
|
|
5
6
|
yes?: boolean;
|
|
6
7
|
force?: boolean;
|
|
@@ -17,7 +18,11 @@ export interface InstallFeatureOptions {
|
|
|
17
18
|
export interface InstallFeatureResult {
|
|
18
19
|
postInstallSteps: unknown[];
|
|
19
20
|
hasDependencies: boolean;
|
|
21
|
+
/** True when package.json contents changed. */
|
|
22
|
+
dependenciesChanged: boolean;
|
|
20
23
|
}
|
|
24
|
+
/** Variant already recorded in .tailar.json, if this entry was installed before. */
|
|
25
|
+
export declare function installedVariantFor(config: ProjectConfig | null | undefined, name: string): string | undefined;
|
|
21
26
|
/**
|
|
22
27
|
* Install a single registry entry by name. Caller must install dependencies first if needed.
|
|
23
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-feature.d.ts","sourceRoot":"","sources":["../../src/installers/install-feature.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"install-feature.d.ts","sourceRoot":"","sources":["../../src/installers/install-feature.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,mBAAmB,CAAC;AAMvE,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACxC,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CASpB;AAYD;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA4K/B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Programmatic install of a registry feature (same pipeline as tailar add).
|
|
3
3
|
*/
|
|
4
|
+
import { readFile } from 'fs/promises';
|
|
5
|
+
import { join } from 'path';
|
|
4
6
|
import { readConfig, writeConfig, addInstalledItem, } from '../utils/config.js';
|
|
5
7
|
import { detectPackageManager } from '../utils/package-manager.js';
|
|
6
8
|
import { detectProjectStructure } from '../utils/validation.js';
|
|
@@ -12,7 +14,20 @@ import { mergeDependencies, collectDependencies } from './dependencies.js';
|
|
|
12
14
|
import { collectTemplateVariables, extractVariablesFromAnswers, mergeVariables, } from './templates.js';
|
|
13
15
|
import { isAuthenticated, authenticate } from '../auth/flow.js';
|
|
14
16
|
import { checkSubscription } from '../api/client.js';
|
|
17
|
+
import { getLocalRegistry } from '../registry/local-mode.js';
|
|
15
18
|
import { logger } from '../utils/logger.js';
|
|
19
|
+
/** Variant already recorded in .tailar.json, if this entry was installed before. */
|
|
20
|
+
export function installedVariantFor(config, name) {
|
|
21
|
+
if (!config)
|
|
22
|
+
return undefined;
|
|
23
|
+
const items = [
|
|
24
|
+
...config.installed.features,
|
|
25
|
+
...config.installed.blocks,
|
|
26
|
+
...config.installed.components,
|
|
27
|
+
...(config.installed.templates ?? []),
|
|
28
|
+
];
|
|
29
|
+
return items.find((item) => item.name === name)?.variant;
|
|
30
|
+
}
|
|
16
31
|
function defaultAnswersFromQuestions(questions) {
|
|
17
32
|
const out = {};
|
|
18
33
|
for (const q of questions) {
|
|
@@ -43,7 +58,7 @@ export async function installFeature(projectPath, name, options = {}) {
|
|
|
43
58
|
throw new Error(`Entry not found: ${name}`);
|
|
44
59
|
}
|
|
45
60
|
const requiresSubscription = entry.requiresSubscription === true && (entry.subscriptionTier || 0) > 0;
|
|
46
|
-
if (requiresSubscription) {
|
|
61
|
+
if (requiresSubscription && !getLocalRegistry()?.enabled) {
|
|
47
62
|
if (!(await isAuthenticated())) {
|
|
48
63
|
await authenticate();
|
|
49
64
|
}
|
|
@@ -83,10 +98,16 @@ export async function installFeature(projectPath, name, options = {}) {
|
|
|
83
98
|
}
|
|
84
99
|
if (options.variant)
|
|
85
100
|
answers.variant = options.variant;
|
|
101
|
+
const rememberedVariant = !options.variant && !options.provider && !options.presetAnswers
|
|
102
|
+
? installedVariantFor(context.config, name)
|
|
103
|
+
: undefined;
|
|
86
104
|
let selectedVariant;
|
|
87
105
|
if (options.variant) {
|
|
88
106
|
selectedVariant = options.variant;
|
|
89
107
|
}
|
|
108
|
+
else if (rememberedVariant) {
|
|
109
|
+
selectedVariant = rememberedVariant;
|
|
110
|
+
}
|
|
90
111
|
else if (typeof answers.variant === 'string') {
|
|
91
112
|
selectedVariant = answers.variant;
|
|
92
113
|
}
|
|
@@ -145,8 +166,13 @@ export async function installFeature(projectPath, name, options = {}) {
|
|
|
145
166
|
logger.success(`Installed ${result.installed.length} files for ${entry.label}`);
|
|
146
167
|
const deps = collectDependencies(entry, selectedVariant);
|
|
147
168
|
let hasDependencies = false;
|
|
169
|
+
let dependenciesChanged = false;
|
|
148
170
|
if (deps.length > 0) {
|
|
171
|
+
const packagePath = join(context.root, 'package.json');
|
|
172
|
+
const before = await readFile(packagePath, 'utf-8');
|
|
149
173
|
await mergeDependencies(context.root, deps);
|
|
174
|
+
const after = await readFile(packagePath, 'utf-8');
|
|
175
|
+
dependenciesChanged = before !== after;
|
|
150
176
|
hasDependencies = true;
|
|
151
177
|
}
|
|
152
178
|
const postInstallSteps = [
|
|
@@ -164,6 +190,6 @@ export async function installFeature(projectPath, name, options = {}) {
|
|
|
164
190
|
});
|
|
165
191
|
await writeConfig(context.root, updatedConfig);
|
|
166
192
|
context.config = updatedConfig;
|
|
167
|
-
return { postInstallSteps, hasDependencies };
|
|
193
|
+
return { postInstallSteps, hasDependencies, dependenciesChanged };
|
|
168
194
|
}
|
|
169
195
|
//# sourceMappingURL=install-feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-feature.js","sourceRoot":"","sources":["../../src/installers/install-feature.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"install-feature.js","sourceRoot":"","sources":["../../src/installers/install-feature.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,8 @@ export declare function executePostInstallStep(projectPath: string, step: PostIn
|
|
|
14
14
|
* 1. Run commands (deduplicated)
|
|
15
15
|
* 2. Display next steps section
|
|
16
16
|
*/
|
|
17
|
-
export declare function executePostInstallSteps(projectPath: string, steps: PostInstallStep[], context?: ProjectContext
|
|
17
|
+
export declare function executePostInstallSteps(projectPath: string, steps: PostInstallStep[], context?: ProjectContext, options?: {
|
|
18
|
+
skipCommands?: boolean;
|
|
19
|
+
skipNextSteps?: boolean;
|
|
20
|
+
}): Promise<void>;
|
|
18
21
|
//# sourceMappingURL=post-install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-install.d.ts","sourceRoot":"","sources":["../../src/installers/post-install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,CAAC,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"post-install.d.ts","sourceRoot":"","sources":["../../src/installers/post-install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,CAAC,EAAE,cAAc,EACxB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAChE,OAAO,CAAC,IAAI,CAAC,CAoFf"}
|
|
@@ -40,7 +40,7 @@ export async function executePostInstallStep(projectPath, step) {
|
|
|
40
40
|
* 1. Run commands (deduplicated)
|
|
41
41
|
* 2. Display next steps section
|
|
42
42
|
*/
|
|
43
|
-
export async function executePostInstallSteps(projectPath, steps, context) {
|
|
43
|
+
export async function executePostInstallSteps(projectPath, steps, context, options = {}) {
|
|
44
44
|
// Separate steps by type
|
|
45
45
|
const runCommands = [];
|
|
46
46
|
const envSteps = [];
|
|
@@ -72,9 +72,12 @@ export async function executePostInstallSteps(projectPath, steps, context) {
|
|
|
72
72
|
throw error;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
// Execute run-command steps (deduplicated)
|
|
75
|
+
// Execute run-command steps (deduplicated).
|
|
76
|
+
// Skipped in install smoke and `tailar sync` so Prisma is not reset.
|
|
76
77
|
const executedCommands = new Set();
|
|
77
78
|
for (const step of runCommands) {
|
|
79
|
+
if (options.skipCommands)
|
|
80
|
+
continue;
|
|
78
81
|
if (!step.command)
|
|
79
82
|
continue;
|
|
80
83
|
// Skip if we've already run this exact command
|
|
@@ -92,7 +95,8 @@ export async function executePostInstallSteps(projectPath, steps, context) {
|
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
// Display next steps section
|
|
95
|
-
if (
|
|
98
|
+
if (!options.skipNextSteps &&
|
|
99
|
+
(envSteps.length > 0 || instructionSteps.length > 0)) {
|
|
96
100
|
logger.info("\n");
|
|
97
101
|
logger.success("Next steps:\n");
|
|
98
102
|
let stepNumber = 1;
|