outfitter 0.2.4 → 0.2.6
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 +8 -5
- package/dist/actions.d.ts +2 -0
- package/dist/actions.js +34 -0
- package/dist/cli.js +1 -1
- package/dist/commands/add.d.ts +54 -0
- package/dist/commands/add.js +16 -0
- package/dist/commands/check.d.ts +91 -0
- package/dist/commands/check.js +14 -0
- package/dist/commands/demo.d.ts +21 -0
- package/dist/commands/demo.js +8 -0
- package/dist/commands/docs-module-loader.d.ts +2 -0
- package/dist/commands/docs-module-loader.js +8 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +13 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.js +31 -0
- package/dist/commands/migrate-kit.d.ts +2 -0
- package/dist/commands/migrate-kit.js +15 -0
- package/dist/commands/repo.d.ts +3 -0
- package/dist/commands/repo.js +9 -0
- package/dist/commands/scaffold.d.ts +4 -0
- package/dist/commands/scaffold.js +31 -0
- package/dist/commands/shared-deps.d.ts +36 -0
- package/dist/commands/shared-deps.js +10 -0
- package/dist/commands/upgrade-codemods.d.ts +42 -0
- package/dist/commands/upgrade-codemods.js +15 -0
- package/dist/commands/upgrade-planner.d.ts +58 -0
- package/dist/commands/upgrade-planner.js +8 -0
- package/dist/commands/upgrade-workspace.d.ts +76 -0
- package/dist/commands/upgrade-workspace.js +16 -0
- package/dist/commands/upgrade.d.ts +214 -0
- package/dist/commands/upgrade.js +25 -0
- package/dist/create/index.d.ts +5 -0
- package/dist/create/index.js +29 -0
- package/dist/create/planner.d.ts +3 -0
- package/dist/create/planner.js +21 -0
- package/dist/create/presets.d.ts +3 -0
- package/dist/create/presets.js +12 -0
- package/dist/create/types.d.ts +2 -0
- package/dist/create/types.js +1 -0
- package/dist/engine/blocks.d.ts +3 -0
- package/dist/engine/blocks.js +12 -0
- package/dist/engine/collector.d.ts +2 -0
- package/dist/engine/collector.js +8 -0
- package/dist/engine/config.d.ts +3 -0
- package/dist/engine/config.js +12 -0
- package/dist/engine/executor.d.ts +3 -0
- package/dist/engine/executor.js +16 -0
- package/dist/engine/index.d.ts +8 -0
- package/dist/engine/index.js +59 -0
- package/dist/engine/names.d.ts +2 -0
- package/dist/engine/names.js +16 -0
- package/dist/engine/post-scaffold.d.ts +3 -0
- package/dist/engine/post-scaffold.js +8 -0
- package/dist/engine/render-plan.d.ts +7 -0
- package/dist/engine/render-plan.js +9 -0
- package/dist/engine/template.d.ts +3 -0
- package/dist/engine/template.js +17 -0
- package/dist/engine/types.d.ts +2 -0
- package/dist/engine/types.js +8 -0
- package/dist/engine/workspace.d.ts +3 -0
- package/dist/engine/workspace.js +13 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +1 -1
- package/dist/manifest.d.ts +71 -0
- package/dist/manifest.js +16 -0
- package/dist/output-mode.d.ts +2 -0
- package/dist/output-mode.js +10 -0
- package/dist/shared/{chunk-tpwtpa74.js → chunk-k59f60cp.js} +858 -396
- package/dist/shared/outfitter-193jvzg4.d.ts +5 -0
- package/dist/shared/outfitter-1dd0k853.js +194 -0
- package/dist/shared/outfitter-1dvma85c.js +322 -0
- package/dist/shared/outfitter-1h7k8xxt.js +29 -0
- package/dist/shared/outfitter-2ngep1h2.d.ts +5 -0
- package/dist/shared/outfitter-2np85etz.js +95 -0
- package/dist/shared/outfitter-33w361tc.d.ts +18 -0
- package/dist/shared/outfitter-344t1r38.js +1 -0
- package/dist/shared/outfitter-3weh61w7.d.ts +25 -0
- package/dist/shared/outfitter-4s9meh3j.js +221 -0
- package/dist/shared/outfitter-66b25bj8.js +125 -0
- package/dist/shared/outfitter-6bkqjk86.d.ts +3 -0
- package/dist/shared/outfitter-79vfxt6y.js +269 -0
- package/dist/shared/outfitter-7ha7p61k.d.ts +6 -0
- package/dist/shared/outfitter-7r12fj7f.js +30 -0
- package/dist/shared/outfitter-8y2dfx6n.js +11 -0
- package/dist/shared/outfitter-9x1brcmq.js +184 -0
- package/dist/shared/outfitter-9zqc2njf.js +859 -0
- package/dist/shared/outfitter-a79xrm12.d.ts +17 -0
- package/dist/shared/outfitter-amc4jbs1.d.ts +50 -0
- package/dist/shared/outfitter-ara3djt0.js +73 -0
- package/dist/shared/outfitter-avhm5z6w.js +82 -0
- package/dist/shared/outfitter-bkwpbkr9.d.ts +63 -0
- package/dist/shared/outfitter-bn9c8p2e.js +204 -0
- package/dist/shared/outfitter-bpr28y54.js +70 -0
- package/dist/shared/outfitter-cwq39bv4.d.ts +48 -0
- package/dist/shared/outfitter-d7pq7d0k.js +196 -0
- package/dist/shared/outfitter-dd0btgec.d.ts +40 -0
- package/dist/shared/outfitter-e2zz5wv7.d.ts +51 -0
- package/dist/shared/outfitter-ehp18x1n.js +1 -0
- package/dist/shared/outfitter-gdvm5c0b.d.ts +4 -0
- package/dist/shared/outfitter-h1mnzzd1.d.ts +14 -0
- package/dist/shared/outfitter-hvsaxgcp.js +1 -0
- package/dist/shared/outfitter-hws10ze7.js +532 -0
- package/dist/shared/outfitter-j833sxws.js +61 -0
- package/dist/shared/outfitter-j8yc7294.d.ts +22 -0
- package/dist/shared/outfitter-k112c427.js +21 -0
- package/dist/shared/outfitter-k56rmt24.d.ts +30 -0
- package/dist/shared/outfitter-ksa1pp4t.d.ts +4 -0
- package/dist/shared/outfitter-ksyvwmb5.js +191 -0
- package/dist/shared/outfitter-mdt37hqm.js +4 -0
- package/dist/shared/outfitter-mtbpabf3.js +91 -0
- package/dist/shared/outfitter-mxz69pgy.js +713 -0
- package/dist/shared/outfitter-npemy7ta.d.ts +53 -0
- package/dist/shared/outfitter-npyfbdmc.d.ts +6 -0
- package/dist/shared/outfitter-pyy1zkfh.d.ts +133 -0
- package/dist/shared/outfitter-q9agarmb.js +42 -0
- package/dist/shared/outfitter-qfh36ddg.d.ts +66 -0
- package/dist/shared/outfitter-qn864k6h.js +581 -0
- package/dist/shared/outfitter-rdc5v5ms.js +746 -0
- package/dist/shared/outfitter-sgtq57qr.d.ts +5 -0
- package/dist/shared/outfitter-ttjr95y9.js +98 -0
- package/dist/shared/outfitter-vh4xgb93.js +35 -0
- package/dist/shared/outfitter-yvksv5qb.js +322 -0
- package/dist/shared/outfitter-zwyvewr1.js +36 -0
- package/dist/targets/index.d.ts +4 -0
- package/dist/targets/index.js +29 -0
- package/dist/targets/registry.d.ts +3 -0
- package/dist/targets/registry.js +28 -0
- package/dist/targets/types.d.ts +2 -0
- package/dist/targets/types.js +1 -0
- package/package.json +21 -14
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
resolveStructuredOutputMode
|
|
4
|
+
} from "./outfitter-7r12fj7f.js";
|
|
5
|
+
|
|
6
|
+
// apps/outfitter/src/commands/doctor.ts
|
|
7
|
+
import { existsSync, readFileSync } from "fs";
|
|
8
|
+
import { join, resolve } from "path";
|
|
9
|
+
import { output } from "@outfitter/cli";
|
|
10
|
+
import { createTheme } from "@outfitter/tui/render";
|
|
11
|
+
var MIN_BUN_VERSION = "1.3.6";
|
|
12
|
+
function checkBunVersion() {
|
|
13
|
+
const required = MIN_BUN_VERSION;
|
|
14
|
+
const current = Bun.version;
|
|
15
|
+
const passed = Bun.semver.satisfies(current, `>=${required}`);
|
|
16
|
+
return {
|
|
17
|
+
passed,
|
|
18
|
+
version: current,
|
|
19
|
+
required,
|
|
20
|
+
...passed ? {} : {
|
|
21
|
+
error: `Bun version ${current} is below minimum required ${required}`
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function checkPackageJson(cwd) {
|
|
26
|
+
const packageJsonPath = join(cwd, "package.json");
|
|
27
|
+
if (!existsSync(packageJsonPath)) {
|
|
28
|
+
return {
|
|
29
|
+
passed: false,
|
|
30
|
+
error: "package.json not found in current directory"
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const content = readFileSync(packageJsonPath, "utf-8");
|
|
35
|
+
const parsed = JSON.parse(content);
|
|
36
|
+
if (typeof parsed["name"] !== "string" || parsed["name"].length === 0) {
|
|
37
|
+
return {
|
|
38
|
+
passed: false,
|
|
39
|
+
error: "package.json is missing required 'name' field"
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (typeof parsed["version"] !== "string" || parsed["version"].length === 0) {
|
|
43
|
+
return {
|
|
44
|
+
passed: false,
|
|
45
|
+
error: "package.json is missing required 'version' field"
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
passed: true,
|
|
50
|
+
name: parsed["name"],
|
|
51
|
+
version: parsed["version"]
|
|
52
|
+
};
|
|
53
|
+
} catch (error) {
|
|
54
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
55
|
+
return {
|
|
56
|
+
passed: false,
|
|
57
|
+
error: `package.json is invalid JSON: ${message}`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function checkDependencies(cwd) {
|
|
62
|
+
const packageJsonPath = join(cwd, "package.json");
|
|
63
|
+
if (!existsSync(packageJsonPath)) {
|
|
64
|
+
return { passed: true, count: 0 };
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const content = readFileSync(packageJsonPath, "utf-8");
|
|
68
|
+
const parsed = JSON.parse(content);
|
|
69
|
+
const dependencies = parsed["dependencies"];
|
|
70
|
+
const devDependencies = parsed["devDependencies"];
|
|
71
|
+
const allDeps = [
|
|
72
|
+
...Object.keys(dependencies ?? {}),
|
|
73
|
+
...Object.keys(devDependencies ?? {})
|
|
74
|
+
];
|
|
75
|
+
if (allDeps.length === 0) {
|
|
76
|
+
return { passed: true, count: 0 };
|
|
77
|
+
}
|
|
78
|
+
const nodeModulesPath = join(cwd, "node_modules");
|
|
79
|
+
if (!existsSync(nodeModulesPath)) {
|
|
80
|
+
return {
|
|
81
|
+
passed: false,
|
|
82
|
+
count: allDeps.length,
|
|
83
|
+
error: "node_modules not found. Run 'bun install' to install dependencies."
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const missing = [];
|
|
87
|
+
for (const dep of allDeps) {
|
|
88
|
+
const depPath = join(nodeModulesPath, dep);
|
|
89
|
+
if (!existsSync(depPath)) {
|
|
90
|
+
missing.push(dep);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (missing.length > 0) {
|
|
94
|
+
return {
|
|
95
|
+
passed: false,
|
|
96
|
+
count: allDeps.length,
|
|
97
|
+
missing,
|
|
98
|
+
error: `Missing dependencies: ${missing.join(", ")}. Run 'bun install' to install.`
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return { passed: true, count: allDeps.length };
|
|
102
|
+
} catch {
|
|
103
|
+
return { passed: true, count: 0 };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function checkConfigFiles(cwd) {
|
|
107
|
+
return {
|
|
108
|
+
tsconfig: existsSync(join(cwd, "tsconfig.json")),
|
|
109
|
+
biome: existsSync(join(cwd, "biome.json"))
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function checkDirectories(cwd) {
|
|
113
|
+
return {
|
|
114
|
+
src: existsSync(join(cwd, "src")),
|
|
115
|
+
tests: existsSync(join(cwd, "src", "__tests__")) || existsSync(join(cwd, "tests"))
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function runDoctor(options) {
|
|
119
|
+
const cwd = resolve(options.cwd);
|
|
120
|
+
const bunVersion = checkBunVersion();
|
|
121
|
+
const packageJson = checkPackageJson(cwd);
|
|
122
|
+
const dependencies = checkDependencies(cwd);
|
|
123
|
+
const configFiles = checkConfigFiles(cwd);
|
|
124
|
+
const directories = checkDirectories(cwd);
|
|
125
|
+
const checkResults = [
|
|
126
|
+
bunVersion.passed,
|
|
127
|
+
packageJson.passed,
|
|
128
|
+
dependencies.passed,
|
|
129
|
+
configFiles.tsconfig,
|
|
130
|
+
directories.src
|
|
131
|
+
];
|
|
132
|
+
const passed = checkResults.filter(Boolean).length;
|
|
133
|
+
const failed = checkResults.length - passed;
|
|
134
|
+
const total = checkResults.length;
|
|
135
|
+
return {
|
|
136
|
+
checks: {
|
|
137
|
+
bunVersion,
|
|
138
|
+
packageJson,
|
|
139
|
+
dependencies,
|
|
140
|
+
configFiles,
|
|
141
|
+
directories
|
|
142
|
+
},
|
|
143
|
+
summary: { passed, failed, total },
|
|
144
|
+
exitCode: failed > 0 ? 1 : 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async function printDoctorResults(result, options) {
|
|
148
|
+
const structuredMode = resolveStructuredOutputMode(options?.mode);
|
|
149
|
+
if (structuredMode) {
|
|
150
|
+
await output(result, { mode: structuredMode });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const theme = createTheme();
|
|
154
|
+
const lines = ["", "Outfitter Doctor", "", "=".repeat(50)];
|
|
155
|
+
const bunIcon = result.checks.bunVersion.passed ? theme.success("[PASS]") : theme.error("[FAIL]");
|
|
156
|
+
lines.push(`${bunIcon} Bun Version: ${result.checks.bunVersion.version} (requires ${result.checks.bunVersion.required})`);
|
|
157
|
+
if (result.checks.bunVersion.error) {
|
|
158
|
+
lines.push(` ${theme.muted(result.checks.bunVersion.error)}`);
|
|
159
|
+
}
|
|
160
|
+
const pkgIcon = result.checks.packageJson.passed ? theme.success("[PASS]") : theme.error("[FAIL]");
|
|
161
|
+
lines.push(`${pkgIcon} package.json`);
|
|
162
|
+
if (result.checks.packageJson.error) {
|
|
163
|
+
lines.push(` ${theme.muted(result.checks.packageJson.error)}`);
|
|
164
|
+
} else if (result.checks.packageJson.name) {
|
|
165
|
+
lines.push(` ${theme.muted(`${result.checks.packageJson.name}@${result.checks.packageJson.version}`)}`);
|
|
166
|
+
}
|
|
167
|
+
const depsIcon = result.checks.dependencies.passed ? theme.success("[PASS]") : theme.error("[FAIL]");
|
|
168
|
+
lines.push(`${depsIcon} Dependencies`);
|
|
169
|
+
if (result.checks.dependencies.error) {
|
|
170
|
+
lines.push(` ${theme.muted(result.checks.dependencies.error)}`);
|
|
171
|
+
} else if (result.checks.dependencies.count !== undefined) {
|
|
172
|
+
lines.push(` ${theme.muted(`${result.checks.dependencies.count} dependencies installed`)}`);
|
|
173
|
+
}
|
|
174
|
+
const tsconfigIcon = result.checks.configFiles.tsconfig ? theme.success("[PASS]") : theme.warning("[WARN]");
|
|
175
|
+
lines.push(`${tsconfigIcon} tsconfig.json`);
|
|
176
|
+
const srcIcon = result.checks.directories.src ? theme.success("[PASS]") : theme.warning("[WARN]");
|
|
177
|
+
lines.push(`${srcIcon} src/ directory`);
|
|
178
|
+
lines.push("", "=".repeat(50));
|
|
179
|
+
const summaryColor = result.exitCode === 0 ? theme.success : theme.error;
|
|
180
|
+
lines.push(summaryColor(`${result.summary.passed}/${result.summary.total} checks passed`));
|
|
181
|
+
if (result.exitCode !== 0) {
|
|
182
|
+
lines.push("", theme.muted("Run 'outfitter doctor' after fixing issues to verify."));
|
|
183
|
+
}
|
|
184
|
+
await output(lines, { mode: "human" });
|
|
185
|
+
}
|
|
186
|
+
function doctorCommand(program) {
|
|
187
|
+
program.command("doctor").description("Validate environment and dependencies").action(async (_flags, command) => {
|
|
188
|
+
const resolvedFlags = command.optsWithGlobals();
|
|
189
|
+
const outputOptions = resolvedFlags.json ? { mode: "json" } : undefined;
|
|
190
|
+
const result = await runDoctor({ cwd: process.cwd() });
|
|
191
|
+
await printDoctorResults(result, outputOptions);
|
|
192
|
+
process.exit(result.exitCode);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export { runDoctor, printDoctorResults, doctorCommand };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
type DocsMdxMode = "strict" | "lossy";
|
|
3
|
+
interface DocsBaseOptions {
|
|
4
|
+
readonly cwd?: string;
|
|
5
|
+
readonly workspaceRoot?: string;
|
|
6
|
+
readonly packagesDir?: string;
|
|
7
|
+
readonly outputDir?: string;
|
|
8
|
+
readonly excludedFilenames?: readonly string[];
|
|
9
|
+
readonly mdxMode?: DocsMdxMode;
|
|
10
|
+
}
|
|
11
|
+
interface ExecuteCheckCommandOptions extends DocsBaseOptions {}
|
|
12
|
+
interface ExecuteSyncCommandOptions extends DocsBaseOptions {}
|
|
13
|
+
type DocsExportTarget = "packages" | "llms" | "llms-full" | "all";
|
|
14
|
+
interface ExecuteExportCommandOptions extends DocsBaseOptions {
|
|
15
|
+
readonly llmsFile?: string;
|
|
16
|
+
readonly llmsFullFile?: string;
|
|
17
|
+
readonly target?: DocsExportTarget | string;
|
|
18
|
+
}
|
|
19
|
+
interface DocsCommandIo {
|
|
20
|
+
readonly out: (line: string) => void;
|
|
21
|
+
readonly err: (line: string) => void;
|
|
22
|
+
}
|
|
23
|
+
interface CreateDocsCommandOptions {
|
|
24
|
+
readonly commandName?: string;
|
|
25
|
+
readonly io?: {
|
|
26
|
+
readonly out?: (line: string) => void;
|
|
27
|
+
readonly err?: (line: string) => void;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
interface DocsModule {
|
|
31
|
+
createDocsCommand: (options?: CreateDocsCommandOptions) => Command;
|
|
32
|
+
executeCheckCommand: (options: ExecuteCheckCommandOptions, io: DocsCommandIo) => Promise<number>;
|
|
33
|
+
executeSyncCommand: (options: ExecuteSyncCommandOptions, io: DocsCommandIo) => Promise<number>;
|
|
34
|
+
executeExportCommand: (options: ExecuteExportCommandOptions, io: DocsCommandIo) => Promise<number>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load docs command module with source-first resolution in monorepo development.
|
|
38
|
+
*/
|
|
39
|
+
declare function loadDocsModule(): Promise<DocsModule>;
|
|
40
|
+
export { ExecuteCheckCommandOptions, ExecuteSyncCommandOptions, DocsExportTarget, ExecuteExportCommandOptions, DocsCommandIo, CreateDocsCommandOptions, loadDocsModule };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create planner types for kit-first project scaffolding.
|
|
3
|
+
*
|
|
4
|
+
* These types model preset intent separately from execution so future flows can
|
|
5
|
+
* consume a deterministic plan before mutating the filesystem.
|
|
6
|
+
*/
|
|
7
|
+
type CreatePresetId = "basic" | "cli" | "daemon" | "mcp";
|
|
8
|
+
interface CreatePresetDefinition {
|
|
9
|
+
readonly id: CreatePresetId;
|
|
10
|
+
readonly template: CreatePresetId;
|
|
11
|
+
readonly summary: string;
|
|
12
|
+
readonly defaultBlocks: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
interface CreateProjectInput {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly targetDir: string;
|
|
17
|
+
readonly preset: CreatePresetId;
|
|
18
|
+
readonly packageName?: string;
|
|
19
|
+
readonly description?: string;
|
|
20
|
+
readonly version?: string;
|
|
21
|
+
readonly includeTooling?: boolean;
|
|
22
|
+
readonly local?: boolean;
|
|
23
|
+
readonly year?: string;
|
|
24
|
+
}
|
|
25
|
+
type CreatePlanChange = {
|
|
26
|
+
readonly type: "copy-template";
|
|
27
|
+
readonly template: string;
|
|
28
|
+
readonly targetDir: string;
|
|
29
|
+
readonly overlayBaseTemplate: boolean;
|
|
30
|
+
} | {
|
|
31
|
+
readonly type: "inject-shared-config";
|
|
32
|
+
} | {
|
|
33
|
+
readonly type: "rewrite-local-dependencies";
|
|
34
|
+
readonly mode: "workspace";
|
|
35
|
+
} | {
|
|
36
|
+
readonly type: "add-blocks";
|
|
37
|
+
readonly blocks: readonly string[];
|
|
38
|
+
};
|
|
39
|
+
interface CreateProjectPlan {
|
|
40
|
+
readonly preset: CreatePresetDefinition;
|
|
41
|
+
readonly values: {
|
|
42
|
+
readonly packageName: string;
|
|
43
|
+
readonly projectName: string;
|
|
44
|
+
readonly version: string;
|
|
45
|
+
readonly description: string;
|
|
46
|
+
readonly binName: string;
|
|
47
|
+
readonly year: string;
|
|
48
|
+
};
|
|
49
|
+
readonly changes: readonly CreatePlanChange[];
|
|
50
|
+
}
|
|
51
|
+
export { CreatePresetId, CreatePresetDefinition, CreateProjectInput, CreatePlanChange, CreateProjectPlan };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @bun
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EngineOptions, ScaffoldError, ScaffoldPlan, ScaffoldResult } from "./outfitter-qfh36ddg";
|
|
2
|
+
import { Result } from "@outfitter/contracts";
|
|
3
|
+
declare function executePlan(plan: ScaffoldPlan, options: EngineOptions): Promise<Result<ScaffoldResult, ScaffoldError>>;
|
|
4
|
+
export { executePlan };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EngineOptions, PlaceholderValues, ScaffoldError } from "./outfitter-qfh36ddg";
|
|
2
|
+
import { Result } from "@outfitter/contracts";
|
|
3
|
+
declare function getTemplatesDir(): string;
|
|
4
|
+
declare function getOutputFilename(templateFilename: string): string;
|
|
5
|
+
declare function isBinaryFile(filename: string): boolean;
|
|
6
|
+
declare function replacePlaceholders(content: string, values: PlaceholderValues): string;
|
|
7
|
+
declare function copyTemplateFiles(templateDir: string, targetDir: string, values: PlaceholderValues, options: EngineOptions, copyOptions?: {
|
|
8
|
+
readonly allowOverwrite?: boolean;
|
|
9
|
+
readonly overwritablePaths?: ReadonlySet<string>;
|
|
10
|
+
readonly writtenPaths?: Set<string>;
|
|
11
|
+
readonly skipFilter?: (relativePath: string) => boolean;
|
|
12
|
+
readonly relativePrefix?: string;
|
|
13
|
+
}): Result<void, ScaffoldError>;
|
|
14
|
+
export { getTemplatesDir, getOutputFilename, isBinaryFile, replacePlaceholders, copyTemplateFiles };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @bun
|