outfitter 0.2.7 → 0.3.2
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 +1 -2
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.js +8 -7
- package/dist/shared/{chunk-x6644tk8.js → chunk-3pwh8ys4.js} +124 -154
- package/package.json +15 -11
- package/dist/actions.d.ts +0 -2
- package/dist/actions.js +0 -35
- package/dist/commands/add.d.ts +0 -54
- package/dist/commands/add.js +0 -16
- package/dist/commands/check-tsdoc.d.ts +0 -22
- package/dist/commands/check-tsdoc.js +0 -8
- package/dist/commands/check.d.ts +0 -91
- package/dist/commands/check.js +0 -14
- package/dist/commands/demo.d.ts +0 -21
- package/dist/commands/demo.js +0 -8
- package/dist/commands/docs-module-loader.d.ts +0 -2
- package/dist/commands/docs-module-loader.js +0 -8
- package/dist/commands/doctor.d.ts +0 -2
- package/dist/commands/doctor.js +0 -25
- package/dist/commands/init.d.ts +0 -7
- package/dist/commands/init.js +0 -32
- package/dist/commands/repo.d.ts +0 -3
- package/dist/commands/repo.js +0 -9
- package/dist/commands/scaffold.d.ts +0 -4
- package/dist/commands/scaffold.js +0 -32
- package/dist/commands/shared-deps.d.ts +0 -21
- package/dist/commands/shared-deps.js +0 -11
- package/dist/commands/upgrade-codemods.d.ts +0 -42
- package/dist/commands/upgrade-codemods.js +0 -15
- package/dist/commands/upgrade-planner.d.ts +0 -58
- package/dist/commands/upgrade-planner.js +0 -8
- package/dist/commands/upgrade-workspace.d.ts +0 -2
- package/dist/commands/upgrade-workspace.js +0 -16
- package/dist/commands/upgrade.d.ts +0 -221
- package/dist/commands/upgrade.js +0 -25
- package/dist/create/index.d.ts +0 -5
- package/dist/create/index.js +0 -30
- package/dist/create/planner.d.ts +0 -3
- package/dist/create/planner.js +0 -22
- package/dist/create/presets.d.ts +0 -3
- package/dist/create/presets.js +0 -12
- package/dist/create/types.d.ts +0 -2
- package/dist/create/types.js +0 -1
- package/dist/engine/blocks.d.ts +0 -3
- package/dist/engine/blocks.js +0 -12
- package/dist/engine/collector.d.ts +0 -2
- package/dist/engine/collector.js +0 -8
- package/dist/engine/config.d.ts +0 -3
- package/dist/engine/config.js +0 -15
- package/dist/engine/dependency-versions.d.ts +0 -12
- package/dist/engine/dependency-versions.js +0 -12
- package/dist/engine/executor.d.ts +0 -3
- package/dist/engine/executor.js +0 -19
- package/dist/engine/index.d.ts +0 -8
- package/dist/engine/index.js +0 -68
- package/dist/engine/names.d.ts +0 -2
- package/dist/engine/names.js +0 -24
- package/dist/engine/post-scaffold.d.ts +0 -3
- package/dist/engine/post-scaffold.js +0 -8
- package/dist/engine/render-plan.d.ts +0 -7
- package/dist/engine/render-plan.js +0 -9
- package/dist/engine/template.d.ts +0 -3
- package/dist/engine/template.js +0 -17
- package/dist/engine/types.d.ts +0 -2
- package/dist/engine/types.js +0 -8
- package/dist/engine/workspace.d.ts +0 -3
- package/dist/engine/workspace.js +0 -20
- package/dist/manifest.d.ts +0 -71
- package/dist/manifest.js +0 -16
- package/dist/output-mode.d.ts +0 -2
- package/dist/output-mode.js +0 -10
- package/dist/shared/outfitter-109s75x0.d.ts +0 -76
- package/dist/shared/outfitter-1fy7byz5.js +0 -170
- package/dist/shared/outfitter-1h7k8xxt.js +0 -29
- package/dist/shared/outfitter-20f6a2n4.js +0 -35
- package/dist/shared/outfitter-344t1r38.js +0 -1
- package/dist/shared/outfitter-4q1zfmvc.js +0 -154
- package/dist/shared/outfitter-4s9meh3j.js +0 -221
- package/dist/shared/outfitter-5akzvppx.js +0 -125
- package/dist/shared/outfitter-5y646xzk.js +0 -301
- package/dist/shared/outfitter-5yjr404v.d.ts +0 -22
- package/dist/shared/outfitter-63gse8fv.js +0 -316
- package/dist/shared/outfitter-6bkqjk86.d.ts +0 -3
- package/dist/shared/outfitter-6fgk6adm.d.ts +0 -40
- package/dist/shared/outfitter-79vfxt6y.js +0 -269
- package/dist/shared/outfitter-7ch26yq8.js +0 -885
- package/dist/shared/outfitter-7r12fj7f.js +0 -30
- package/dist/shared/outfitter-8y2dfx6n.js +0 -11
- package/dist/shared/outfitter-9x1brcmq.js +0 -184
- package/dist/shared/outfitter-a79xrm12.d.ts +0 -17
- package/dist/shared/outfitter-amc4jbs1.d.ts +0 -50
- package/dist/shared/outfitter-bn9c8p2e.js +0 -204
- package/dist/shared/outfitter-bpr28y54.js +0 -70
- package/dist/shared/outfitter-dpj9erew.d.ts +0 -4
- package/dist/shared/outfitter-e9rrfekb.d.ts +0 -51
- package/dist/shared/outfitter-ehp18x1n.js +0 -1
- package/dist/shared/outfitter-f9znfhkn.d.ts +0 -5
- package/dist/shared/outfitter-fhnjpjwc.d.ts +0 -18
- package/dist/shared/outfitter-fn20r49x.d.ts +0 -5
- package/dist/shared/outfitter-h3q6ae6d.d.ts +0 -48
- package/dist/shared/outfitter-ha89qf8q.js +0 -132
- package/dist/shared/outfitter-hsp8vy5m.d.ts +0 -146
- package/dist/shared/outfitter-hvsaxgcp.js +0 -1
- package/dist/shared/outfitter-j833sxws.js +0 -61
- package/dist/shared/outfitter-ksyvwmb5.js +0 -191
- package/dist/shared/outfitter-m3ehh37q.d.ts +0 -22
- package/dist/shared/outfitter-m44n0qzw.js +0 -161
- package/dist/shared/outfitter-mdt37hqm.js +0 -4
- package/dist/shared/outfitter-mt7d1ek2.js +0 -698
- package/dist/shared/outfitter-mtbpabf3.js +0 -91
- package/dist/shared/outfitter-n9g1zk4x.d.ts +0 -66
- package/dist/shared/outfitter-p71qb0f0.js +0 -82
- package/dist/shared/outfitter-pcj9gg2g.js +0 -909
- package/dist/shared/outfitter-pj9vp00r.js +0 -601
- package/dist/shared/outfitter-qakwgrrh.d.ts +0 -4
- package/dist/shared/outfitter-r419zfgs.d.ts +0 -30
- package/dist/shared/outfitter-s7jetkge.d.ts +0 -18
- package/dist/shared/outfitter-ttjr95y9.js +0 -98
- package/dist/shared/outfitter-vh4xgb93.js +0 -35
- package/dist/shared/outfitter-w1j80j1r.js +0 -326
- package/dist/shared/outfitter-xe5mzgdc.js +0 -208
- package/dist/shared/outfitter-ybbazsxq.d.ts +0 -14
- package/dist/shared/outfitter-yraebrmw.d.ts +0 -5
- package/dist/shared/outfitter-yvksv5qb.js +0 -322
- package/dist/shared/outfitter-z0we32cp.d.ts +0 -63
- package/dist/shared/outfitter-z5sx06qe.d.ts +0 -25
- package/dist/shared/outfitter-zwyvewr1.js +0 -36
- package/dist/targets/index.d.ts +0 -4
- package/dist/targets/index.js +0 -29
- package/dist/targets/registry.d.ts +0 -3
- package/dist/targets/registry.js +0 -28
- package/dist/targets/types.d.ts +0 -2
- package/dist/targets/types.js +0 -1
- package/template-versions.json +0 -22
- package/templates/.gitkeep +0 -0
- package/templates/basic/.gitignore.template +0 -30
- package/templates/basic/.lefthook.yml.template +0 -26
- package/templates/basic/package.json.template +0 -46
- package/templates/basic/src/index.ts.template +0 -26
- package/templates/basic/tsconfig.json.template +0 -34
- package/templates/cli/.gitignore.template +0 -4
- package/templates/cli/.lefthook.yml.template +0 -26
- package/templates/cli/README.md.template +0 -35
- package/templates/cli/biome.json.template +0 -4
- package/templates/cli/package.json.template +0 -53
- package/templates/cli/src/cli.ts.template +0 -8
- package/templates/cli/src/index.ts.template +0 -7
- package/templates/cli/src/program.ts.template +0 -31
- package/templates/cli/tsconfig.json.template +0 -34
- package/templates/daemon/.gitignore.template +0 -4
- package/templates/daemon/.lefthook.yml.template +0 -26
- package/templates/daemon/README.md.template +0 -67
- package/templates/daemon/biome.json.template +0 -4
- package/templates/daemon/package.json.template +0 -56
- package/templates/daemon/src/cli.ts.template +0 -96
- package/templates/daemon/src/daemon-main.ts.template +0 -79
- package/templates/daemon/src/daemon.ts.template +0 -11
- package/templates/daemon/src/index.ts.template +0 -7
- package/templates/daemon/tsconfig.json.template +0 -23
- package/templates/full-stack/.gitignore.template +0 -30
- package/templates/full-stack/README.md.template +0 -30
- package/templates/full-stack/apps/cli/package.json.template +0 -39
- package/templates/full-stack/apps/cli/src/cli.ts.template +0 -24
- package/templates/full-stack/apps/cli/src/index.test.ts.template +0 -18
- package/templates/full-stack/apps/cli/src/index.ts.template +0 -5
- package/templates/full-stack/apps/cli/tsconfig.json.template +0 -37
- package/templates/full-stack/apps/mcp/package.json.template +0 -40
- package/templates/full-stack/apps/mcp/src/index.test.ts.template +0 -18
- package/templates/full-stack/apps/mcp/src/index.ts.template +0 -6
- package/templates/full-stack/apps/mcp/src/mcp.ts.template +0 -22
- package/templates/full-stack/apps/mcp/src/server.ts.template +0 -10
- package/templates/full-stack/apps/mcp/tsconfig.json.template +0 -37
- package/templates/full-stack/package.json.template +0 -16
- package/templates/full-stack/packages/core/package.json.template +0 -36
- package/templates/full-stack/packages/core/src/handlers.ts.template +0 -31
- package/templates/full-stack/packages/core/src/index.test.ts.template +0 -30
- package/templates/full-stack/packages/core/src/index.ts.template +0 -8
- package/templates/full-stack/packages/core/src/types.ts.template +0 -13
- package/templates/full-stack/packages/core/tsconfig.json.template +0 -34
- package/templates/library/.gitignore.template +0 -30
- package/templates/library/README.md.template +0 -29
- package/templates/library/bunup.config.ts.template +0 -20
- package/templates/library/package.json.template +0 -55
- package/templates/library/src/handlers.ts.template +0 -31
- package/templates/library/src/index.test.ts.template +0 -35
- package/templates/library/src/index.ts.template +0 -8
- package/templates/library/src/types.ts.template +0 -13
- package/templates/library/tsconfig.json.template +0 -34
- package/templates/mcp/.gitignore.template +0 -4
- package/templates/mcp/.lefthook.yml.template +0 -26
- package/templates/mcp/README.md.template +0 -54
- package/templates/mcp/biome.json.template +0 -4
- package/templates/mcp/package.json.template +0 -53
- package/templates/mcp/src/index.ts.template +0 -7
- package/templates/mcp/src/mcp.ts.template +0 -33
- package/templates/mcp/src/server.ts.template +0 -8
- package/templates/mcp/tsconfig.json.template +0 -23
- package/templates/minimal/.gitignore.template +0 -30
- package/templates/minimal/.lefthook.yml.template +0 -26
- package/templates/minimal/package.json.template +0 -53
- package/templates/minimal/src/index.ts.template +0 -26
- package/templates/minimal/tsconfig.json.template +0 -34
|
@@ -1,885 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import {
|
|
3
|
-
printScaffoldResults,
|
|
4
|
-
runScaffold
|
|
5
|
-
} from "./outfitter-pj9vp00r.js";
|
|
6
|
-
import {
|
|
7
|
-
printInitResults,
|
|
8
|
-
runInit
|
|
9
|
-
} from "./outfitter-mt7d1ek2.js";
|
|
10
|
-
import {
|
|
11
|
-
runDemo
|
|
12
|
-
} from "./outfitter-ksyvwmb5.js";
|
|
13
|
-
import {
|
|
14
|
-
printCheckResults,
|
|
15
|
-
runCheck
|
|
16
|
-
} from "./outfitter-w1j80j1r.js";
|
|
17
|
-
import {
|
|
18
|
-
printDoctorResults,
|
|
19
|
-
runDoctor
|
|
20
|
-
} from "./outfitter-5y646xzk.js";
|
|
21
|
-
import {
|
|
22
|
-
runCheckTsdoc
|
|
23
|
-
} from "./outfitter-63gse8fv.js";
|
|
24
|
-
import {
|
|
25
|
-
printUpgradeResults,
|
|
26
|
-
runUpgrade
|
|
27
|
-
} from "./outfitter-pcj9gg2g.js";
|
|
28
|
-
import {
|
|
29
|
-
listBlocks,
|
|
30
|
-
printAddResults,
|
|
31
|
-
runAdd
|
|
32
|
-
} from "./outfitter-79vfxt6y.js";
|
|
33
|
-
import {
|
|
34
|
-
resolveOutputModeFromContext,
|
|
35
|
-
resolveStructuredOutputMode
|
|
36
|
-
} from "./outfitter-7r12fj7f.js";
|
|
37
|
-
|
|
38
|
-
// apps/outfitter/src/actions.ts
|
|
39
|
-
import { resolve } from "path";
|
|
40
|
-
import { output } from "@outfitter/cli";
|
|
41
|
-
import { actionCliPresets } from "@outfitter/cli/actions";
|
|
42
|
-
import {
|
|
43
|
-
booleanFlagPreset,
|
|
44
|
-
cwdPreset,
|
|
45
|
-
dryRunPreset,
|
|
46
|
-
forcePreset,
|
|
47
|
-
interactionPreset,
|
|
48
|
-
verbosePreset
|
|
49
|
-
} from "@outfitter/cli/flags";
|
|
50
|
-
import { jqPreset, outputModePreset } from "@outfitter/cli/query";
|
|
51
|
-
import {
|
|
52
|
-
createActionRegistry,
|
|
53
|
-
defineAction,
|
|
54
|
-
InternalError,
|
|
55
|
-
Result,
|
|
56
|
-
ValidationError
|
|
57
|
-
} from "@outfitter/contracts";
|
|
58
|
-
import { z } from "zod";
|
|
59
|
-
var outputModeSchema = z.enum(["human", "json", "jsonl"]).default("human");
|
|
60
|
-
var initPresetValues = [
|
|
61
|
-
"minimal",
|
|
62
|
-
"cli",
|
|
63
|
-
"mcp",
|
|
64
|
-
"daemon",
|
|
65
|
-
"library",
|
|
66
|
-
"full-stack",
|
|
67
|
-
"lib"
|
|
68
|
-
];
|
|
69
|
-
function normalizeInitPreset(preset) {
|
|
70
|
-
if (preset === undefined) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
return preset === "lib" ? "library" : preset;
|
|
74
|
-
}
|
|
75
|
-
var initInputSchema = z.object({
|
|
76
|
-
targetDir: z.string(),
|
|
77
|
-
name: z.string().optional(),
|
|
78
|
-
bin: z.string().optional(),
|
|
79
|
-
preset: z.enum(initPresetValues).optional(),
|
|
80
|
-
template: z.string().optional(),
|
|
81
|
-
structure: z.enum(["single", "workspace"]).optional(),
|
|
82
|
-
workspaceName: z.string().optional(),
|
|
83
|
-
local: z.boolean().optional(),
|
|
84
|
-
force: z.boolean(),
|
|
85
|
-
with: z.string().optional(),
|
|
86
|
-
noTooling: z.boolean().optional(),
|
|
87
|
-
yes: z.boolean().optional(),
|
|
88
|
-
dryRun: z.boolean().optional(),
|
|
89
|
-
skipInstall: z.boolean().optional(),
|
|
90
|
-
skipGit: z.boolean().optional(),
|
|
91
|
-
skipCommit: z.boolean().optional(),
|
|
92
|
-
installTimeout: z.number().optional(),
|
|
93
|
-
outputMode: outputModeSchema
|
|
94
|
-
});
|
|
95
|
-
var scaffoldInputSchema = z.object({
|
|
96
|
-
target: z.string(),
|
|
97
|
-
name: z.string().optional(),
|
|
98
|
-
force: z.boolean(),
|
|
99
|
-
skipInstall: z.boolean(),
|
|
100
|
-
dryRun: z.boolean(),
|
|
101
|
-
with: z.string().optional(),
|
|
102
|
-
noTooling: z.boolean().optional(),
|
|
103
|
-
local: z.boolean().optional(),
|
|
104
|
-
installTimeout: z.number().optional(),
|
|
105
|
-
cwd: z.string(),
|
|
106
|
-
outputMode: outputModeSchema
|
|
107
|
-
});
|
|
108
|
-
var doctorInputSchema = z.object({
|
|
109
|
-
cwd: z.string(),
|
|
110
|
-
outputMode: outputModeSchema
|
|
111
|
-
});
|
|
112
|
-
function resolveStringFlag(value) {
|
|
113
|
-
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
114
|
-
}
|
|
115
|
-
function resolveNoToolingFlag(flags) {
|
|
116
|
-
if (typeof flags.noTooling === "boolean") {
|
|
117
|
-
return !flags.noTooling;
|
|
118
|
-
}
|
|
119
|
-
if (typeof flags.tooling === "boolean") {
|
|
120
|
-
if (!flags.tooling) {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
return process.argv.includes("--tooling") ? false : undefined;
|
|
124
|
-
}
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
function resolveLocalFlag(flags) {
|
|
128
|
-
if (flags.local === true || flags.workspace === true) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
function resolveInitOptions(context, presetOverride) {
|
|
134
|
-
const flags = context.flags;
|
|
135
|
-
const { force, dryRun, yes } = initSharedFlags.resolve(context);
|
|
136
|
-
const targetDir = context.args[0] ?? process.cwd();
|
|
137
|
-
const name = resolveStringFlag(flags.name);
|
|
138
|
-
const bin = resolveStringFlag(flags.bin);
|
|
139
|
-
const preset = normalizeInitPreset(presetOverride ?? resolveStringFlag(flags.preset));
|
|
140
|
-
const template = resolveStringFlag(flags.template);
|
|
141
|
-
const structure = resolveStringFlag(flags.structure);
|
|
142
|
-
const workspaceName = resolveStringFlag(flags.workspaceName);
|
|
143
|
-
const local = resolveLocalFlag(flags);
|
|
144
|
-
const withBlocks = resolveStringFlag(flags.with);
|
|
145
|
-
const noTooling = resolveNoToolingFlag(flags);
|
|
146
|
-
const skipInstall = Boolean(flags.skipInstall ?? context.flags["skip-install"]);
|
|
147
|
-
const skipGit = Boolean(flags.skipGit ?? context.flags["skip-git"]);
|
|
148
|
-
const skipCommit = Boolean(flags.skipCommit ?? context.flags["skip-commit"]);
|
|
149
|
-
const installTimeoutValue = flags.installTimeout;
|
|
150
|
-
let installTimeout;
|
|
151
|
-
if (typeof installTimeoutValue === "string") {
|
|
152
|
-
installTimeout = Number.parseInt(installTimeoutValue, 10);
|
|
153
|
-
} else if (typeof installTimeoutValue === "number") {
|
|
154
|
-
installTimeout = installTimeoutValue;
|
|
155
|
-
}
|
|
156
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
157
|
-
return {
|
|
158
|
-
targetDir,
|
|
159
|
-
name,
|
|
160
|
-
...preset ? { preset } : {},
|
|
161
|
-
...template ? { template } : {},
|
|
162
|
-
...structure ? { structure } : {},
|
|
163
|
-
...workspaceName ? { workspaceName } : {},
|
|
164
|
-
force,
|
|
165
|
-
...local !== undefined ? { local } : {},
|
|
166
|
-
...withBlocks ? { with: withBlocks } : {},
|
|
167
|
-
...noTooling !== undefined ? { noTooling } : {},
|
|
168
|
-
...bin ? { bin } : {},
|
|
169
|
-
...yes ? { yes } : {},
|
|
170
|
-
...dryRun ? { dryRun } : {},
|
|
171
|
-
...skipInstall ? { skipInstall } : {},
|
|
172
|
-
...skipGit ? { skipGit } : {},
|
|
173
|
-
...skipCommit ? { skipCommit } : {},
|
|
174
|
-
...installTimeout !== undefined ? { installTimeout } : {},
|
|
175
|
-
outputMode
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
function resolveScaffoldOptions(context) {
|
|
179
|
-
const flags = context.flags;
|
|
180
|
-
const { force, dryRun } = scaffoldSharedFlags.resolve(context);
|
|
181
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
182
|
-
const noTooling = resolveNoToolingFlag(flags);
|
|
183
|
-
const local = resolveLocalFlag(flags);
|
|
184
|
-
const installTimeoutValue = flags.installTimeout;
|
|
185
|
-
let installTimeout;
|
|
186
|
-
if (typeof installTimeoutValue === "string") {
|
|
187
|
-
installTimeout = Number.parseInt(installTimeoutValue, 10);
|
|
188
|
-
} else if (typeof installTimeoutValue === "number") {
|
|
189
|
-
installTimeout = installTimeoutValue;
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
target: String(context.args[0] ?? ""),
|
|
193
|
-
name: resolveStringFlag(context.args[1]),
|
|
194
|
-
force,
|
|
195
|
-
skipInstall: Boolean(flags.skipInstall ?? context.flags["skip-install"]),
|
|
196
|
-
dryRun,
|
|
197
|
-
...local !== undefined ? { local } : {},
|
|
198
|
-
with: resolveStringFlag(flags.with),
|
|
199
|
-
...noTooling !== undefined ? { noTooling } : {},
|
|
200
|
-
...installTimeout !== undefined ? { installTimeout } : {},
|
|
201
|
-
cwd: process.cwd(),
|
|
202
|
-
outputMode
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
var commonInitOptions = [
|
|
206
|
-
{
|
|
207
|
-
flags: "-n, --name <name>",
|
|
208
|
-
description: "Package name (defaults to directory name)"
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
flags: "-b, --bin <name>",
|
|
212
|
-
description: "Binary name (defaults to project name)"
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
flags: "--local",
|
|
216
|
-
description: "Use workspace:* for @outfitter dependencies"
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
flags: "--workspace",
|
|
220
|
-
description: "Alias for --local"
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
flags: "--with <blocks>",
|
|
224
|
-
description: "Tooling to add (comma-separated: scaffolding, claude, biome, lefthook, bootstrap)"
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
flags: "--no-tooling",
|
|
228
|
-
description: "Skip tooling setup"
|
|
229
|
-
}
|
|
230
|
-
];
|
|
231
|
-
var templateOption = {
|
|
232
|
-
flags: "-t, --template <template>",
|
|
233
|
-
description: "Template to use (deprecated, use --preset)"
|
|
234
|
-
};
|
|
235
|
-
var initSharedFlags = actionCliPresets(forcePreset(), dryRunPreset(), booleanFlagPreset({
|
|
236
|
-
id: "initYes",
|
|
237
|
-
key: "yes",
|
|
238
|
-
flags: "-y, --yes",
|
|
239
|
-
description: "Skip prompts and use defaults for missing values"
|
|
240
|
-
}));
|
|
241
|
-
function createInitAction(options) {
|
|
242
|
-
const presetOption = {
|
|
243
|
-
flags: "-p, --preset <preset>",
|
|
244
|
-
description: "Preset to use (minimal, cli, mcp, daemon, library, full-stack, lib)"
|
|
245
|
-
};
|
|
246
|
-
const initOptions = [...commonInitOptions];
|
|
247
|
-
initOptions.push(...initSharedFlags.options);
|
|
248
|
-
initOptions.push({
|
|
249
|
-
flags: "-s, --structure <mode>",
|
|
250
|
-
description: "Project structure (single|workspace)"
|
|
251
|
-
});
|
|
252
|
-
initOptions.push({
|
|
253
|
-
flags: "--workspace-name <name>",
|
|
254
|
-
description: "Workspace root package name"
|
|
255
|
-
});
|
|
256
|
-
initOptions.push({
|
|
257
|
-
flags: "--skip-install",
|
|
258
|
-
description: "Skip bun install",
|
|
259
|
-
defaultValue: false
|
|
260
|
-
});
|
|
261
|
-
initOptions.push({
|
|
262
|
-
flags: "--skip-git",
|
|
263
|
-
description: "Skip git init and initial commit",
|
|
264
|
-
defaultValue: false
|
|
265
|
-
});
|
|
266
|
-
initOptions.push({
|
|
267
|
-
flags: "--skip-commit",
|
|
268
|
-
description: "Skip initial commit only",
|
|
269
|
-
defaultValue: false
|
|
270
|
-
});
|
|
271
|
-
initOptions.push({
|
|
272
|
-
flags: "--install-timeout <ms>",
|
|
273
|
-
description: "bun install timeout in milliseconds"
|
|
274
|
-
});
|
|
275
|
-
if (options.includePresetOption) {
|
|
276
|
-
initOptions.push(presetOption);
|
|
277
|
-
}
|
|
278
|
-
if (options.includeTemplateOption) {
|
|
279
|
-
initOptions.push(templateOption);
|
|
280
|
-
}
|
|
281
|
-
return defineAction({
|
|
282
|
-
id: options.id,
|
|
283
|
-
description: options.description,
|
|
284
|
-
surfaces: ["cli"],
|
|
285
|
-
input: initInputSchema,
|
|
286
|
-
cli: {
|
|
287
|
-
group: "init",
|
|
288
|
-
command: options.command,
|
|
289
|
-
description: options.description,
|
|
290
|
-
options: initOptions,
|
|
291
|
-
mapInput: (context) => resolveInitOptions(context, options.presetOverride)
|
|
292
|
-
},
|
|
293
|
-
handler: async (input) => {
|
|
294
|
-
const { outputMode, ...initInput } = input;
|
|
295
|
-
const result = await runInit(initInput);
|
|
296
|
-
if (result.isErr()) {
|
|
297
|
-
return Result.err(new InternalError({
|
|
298
|
-
message: result.error.message,
|
|
299
|
-
context: { action: options.id }
|
|
300
|
-
}));
|
|
301
|
-
}
|
|
302
|
-
await printInitResults(result.value, { mode: outputMode });
|
|
303
|
-
return Result.ok(result.value);
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
var scaffoldSharedFlags = actionCliPresets(forcePreset(), dryRunPreset());
|
|
308
|
-
var addSharedFlags = actionCliPresets(forcePreset(), dryRunPreset());
|
|
309
|
-
var createAction = defineAction({
|
|
310
|
-
id: "create",
|
|
311
|
-
description: "Removed - use 'outfitter init' instead",
|
|
312
|
-
surfaces: ["cli"],
|
|
313
|
-
input: z.object({}).passthrough(),
|
|
314
|
-
cli: {
|
|
315
|
-
command: "create [directory]",
|
|
316
|
-
description: "Removed - use 'outfitter init' instead",
|
|
317
|
-
options: [],
|
|
318
|
-
mapInput: () => ({})
|
|
319
|
-
},
|
|
320
|
-
handler: async () => Result.err(new InternalError({
|
|
321
|
-
message: [
|
|
322
|
-
"The 'create' command has been removed.",
|
|
323
|
-
"",
|
|
324
|
-
"Use 'outfitter init' instead. It supports everything 'create' did:",
|
|
325
|
-
"",
|
|
326
|
-
" Interactive mode: outfitter init my-project",
|
|
327
|
-
" With preset: outfitter init my-project --preset cli",
|
|
328
|
-
" Skip prompts: outfitter init my-project --preset cli --yes",
|
|
329
|
-
" Workspace: outfitter init my-project --preset cli --structure workspace",
|
|
330
|
-
"",
|
|
331
|
-
"See 'outfitter init --help' for full options."
|
|
332
|
-
].join("\\n"),
|
|
333
|
-
context: { action: "create" }
|
|
334
|
-
}))
|
|
335
|
-
});
|
|
336
|
-
var scaffoldAction = defineAction({
|
|
337
|
-
id: "scaffold",
|
|
338
|
-
description: "Add a capability to an existing project",
|
|
339
|
-
surfaces: ["cli"],
|
|
340
|
-
input: scaffoldInputSchema,
|
|
341
|
-
cli: {
|
|
342
|
-
command: "scaffold <target> [name]",
|
|
343
|
-
description: "Add a capability (cli, mcp, daemon, lib, ...) to an existing project",
|
|
344
|
-
options: [
|
|
345
|
-
...scaffoldSharedFlags.options,
|
|
346
|
-
{
|
|
347
|
-
flags: "--skip-install",
|
|
348
|
-
description: "Skip bun install",
|
|
349
|
-
defaultValue: false
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
flags: "--with <blocks>",
|
|
353
|
-
description: "Comma-separated tooling blocks to add"
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
flags: "--no-tooling",
|
|
357
|
-
description: "Skip default tooling blocks"
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
flags: "--local",
|
|
361
|
-
description: "Use workspace:* for @outfitter dependencies"
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
flags: "--install-timeout <ms>",
|
|
365
|
-
description: "bun install timeout in milliseconds"
|
|
366
|
-
}
|
|
367
|
-
],
|
|
368
|
-
mapInput: resolveScaffoldOptions
|
|
369
|
-
},
|
|
370
|
-
handler: async (input) => {
|
|
371
|
-
const { outputMode, ...scaffoldInput } = input;
|
|
372
|
-
const result = await runScaffold(scaffoldInput);
|
|
373
|
-
if (result.isErr()) {
|
|
374
|
-
return Result.err(new InternalError({
|
|
375
|
-
message: result.error.message,
|
|
376
|
-
context: { action: "scaffold" }
|
|
377
|
-
}));
|
|
378
|
-
}
|
|
379
|
-
await printScaffoldResults(result.value, { mode: outputMode });
|
|
380
|
-
return Result.ok(result.value);
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
var demoInputSchema = z.object({
|
|
384
|
-
section: z.string().optional(),
|
|
385
|
-
list: z.boolean().optional(),
|
|
386
|
-
animate: z.boolean().optional(),
|
|
387
|
-
outputMode: outputModeSchema
|
|
388
|
-
});
|
|
389
|
-
var demoAction = defineAction({
|
|
390
|
-
id: "demo",
|
|
391
|
-
description: "Run the CLI demo app",
|
|
392
|
-
surfaces: ["cli"],
|
|
393
|
-
input: demoInputSchema,
|
|
394
|
-
cli: {
|
|
395
|
-
command: "demo [section]",
|
|
396
|
-
description: "Run the CLI demo app",
|
|
397
|
-
options: [
|
|
398
|
-
{
|
|
399
|
-
flags: "-l, --list",
|
|
400
|
-
description: "List available demo sections",
|
|
401
|
-
defaultValue: false
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
flags: "-a, --animate",
|
|
405
|
-
description: "Run animated demo (spinners only)",
|
|
406
|
-
defaultValue: false
|
|
407
|
-
}
|
|
408
|
-
],
|
|
409
|
-
mapInput: (context) => {
|
|
410
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
411
|
-
return {
|
|
412
|
-
section: context.args[0],
|
|
413
|
-
list: Boolean(context.flags["list"]),
|
|
414
|
-
animate: Boolean(context.flags["animate"]),
|
|
415
|
-
outputMode
|
|
416
|
-
};
|
|
417
|
-
}
|
|
418
|
-
},
|
|
419
|
-
handler: async (input) => {
|
|
420
|
-
const { outputMode, ...demoInput } = input;
|
|
421
|
-
try {
|
|
422
|
-
const result = await runDemo({ ...demoInput, outputMode });
|
|
423
|
-
if (result.exitCode !== 0) {
|
|
424
|
-
process.exit(result.exitCode);
|
|
425
|
-
}
|
|
426
|
-
return Result.ok(result);
|
|
427
|
-
} catch (error) {
|
|
428
|
-
return Result.err(new InternalError({
|
|
429
|
-
message: error instanceof Error ? error.message : "Failed to run demo",
|
|
430
|
-
context: { action: "demo" }
|
|
431
|
-
}));
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
var doctorCwd = cwdPreset();
|
|
436
|
-
var doctorAction = defineAction({
|
|
437
|
-
id: "doctor",
|
|
438
|
-
description: "Validate environment and dependencies",
|
|
439
|
-
surfaces: ["cli"],
|
|
440
|
-
input: doctorInputSchema,
|
|
441
|
-
cli: {
|
|
442
|
-
command: "doctor",
|
|
443
|
-
description: "Validate environment and dependencies",
|
|
444
|
-
options: [...doctorCwd.options],
|
|
445
|
-
mapInput: (context) => {
|
|
446
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
447
|
-
const { cwd: rawCwd } = doctorCwd.resolve(context.flags);
|
|
448
|
-
const cwd = resolve(process.cwd(), rawCwd);
|
|
449
|
-
return {
|
|
450
|
-
cwd,
|
|
451
|
-
outputMode
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
},
|
|
455
|
-
handler: async (input) => {
|
|
456
|
-
const { outputMode, ...doctorInput } = input;
|
|
457
|
-
const result = await runDoctor(doctorInput);
|
|
458
|
-
await printDoctorResults(result, { mode: outputMode });
|
|
459
|
-
if (result.exitCode !== 0) {
|
|
460
|
-
process.exit(result.exitCode);
|
|
461
|
-
}
|
|
462
|
-
return Result.ok(result);
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
var addInputSchema = z.object({
|
|
466
|
-
block: z.string(),
|
|
467
|
-
force: z.boolean(),
|
|
468
|
-
dryRun: z.boolean(),
|
|
469
|
-
cwd: z.string().optional(),
|
|
470
|
-
outputMode: outputModeSchema
|
|
471
|
-
});
|
|
472
|
-
var addCwd = cwdPreset();
|
|
473
|
-
var addAction = defineAction({
|
|
474
|
-
id: "add",
|
|
475
|
-
description: "Add a block from the registry to your project",
|
|
476
|
-
surfaces: ["cli"],
|
|
477
|
-
input: addInputSchema,
|
|
478
|
-
cli: {
|
|
479
|
-
group: "add",
|
|
480
|
-
command: "<block>",
|
|
481
|
-
description: "Add a block from the registry (claude, biome, lefthook, bootstrap, scaffolding)",
|
|
482
|
-
options: [...addSharedFlags.options, ...addCwd.options],
|
|
483
|
-
mapInput: (context) => {
|
|
484
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
485
|
-
const { force, dryRun } = addSharedFlags.resolve(context);
|
|
486
|
-
const { cwd: rawCwd } = addCwd.resolve(context.flags);
|
|
487
|
-
const cwd = resolve(process.cwd(), rawCwd);
|
|
488
|
-
return {
|
|
489
|
-
block: context.args[0],
|
|
490
|
-
force,
|
|
491
|
-
dryRun,
|
|
492
|
-
cwd,
|
|
493
|
-
outputMode
|
|
494
|
-
};
|
|
495
|
-
}
|
|
496
|
-
},
|
|
497
|
-
handler: async (input) => {
|
|
498
|
-
const { outputMode, ...addInput } = input;
|
|
499
|
-
const result = await runAdd(addInput);
|
|
500
|
-
if (result.isErr()) {
|
|
501
|
-
return Result.err(new InternalError({
|
|
502
|
-
message: result.error.message,
|
|
503
|
-
context: { action: "add" }
|
|
504
|
-
}));
|
|
505
|
-
}
|
|
506
|
-
await printAddResults(result.value, addInput.dryRun, { mode: outputMode });
|
|
507
|
-
return Result.ok(result.value);
|
|
508
|
-
}
|
|
509
|
-
});
|
|
510
|
-
var listBlocksAction = defineAction({
|
|
511
|
-
id: "add.list",
|
|
512
|
-
description: "List available blocks",
|
|
513
|
-
surfaces: ["cli"],
|
|
514
|
-
input: z.object({ outputMode: outputModeSchema }),
|
|
515
|
-
cli: {
|
|
516
|
-
group: "add",
|
|
517
|
-
command: "list",
|
|
518
|
-
description: "List available blocks",
|
|
519
|
-
mapInput: (context) => {
|
|
520
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
521
|
-
return {
|
|
522
|
-
outputMode
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
},
|
|
526
|
-
handler: async (input) => {
|
|
527
|
-
const result = listBlocks();
|
|
528
|
-
if (result.isErr()) {
|
|
529
|
-
return Result.err(new InternalError({
|
|
530
|
-
message: result.error.message,
|
|
531
|
-
context: { action: "add.list" }
|
|
532
|
-
}));
|
|
533
|
-
}
|
|
534
|
-
const structuredMode = resolveStructuredOutputMode(input.outputMode);
|
|
535
|
-
if (structuredMode) {
|
|
536
|
-
await output({ blocks: result.value }, { mode: structuredMode });
|
|
537
|
-
} else {
|
|
538
|
-
const lines = [
|
|
539
|
-
"Available blocks:",
|
|
540
|
-
...result.value.map((block) => ` - ${block}`)
|
|
541
|
-
];
|
|
542
|
-
await output(lines, { mode: "human" });
|
|
543
|
-
}
|
|
544
|
-
return Result.ok({ blocks: result.value });
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
var checkInputSchema = z.object({
|
|
548
|
-
cwd: z.string(),
|
|
549
|
-
verbose: z.boolean(),
|
|
550
|
-
block: z.string().optional(),
|
|
551
|
-
outputMode: outputModeSchema
|
|
552
|
-
});
|
|
553
|
-
var checkVerbose = verbosePreset();
|
|
554
|
-
var checkCwd = cwdPreset();
|
|
555
|
-
var checkOutputMode = outputModePreset();
|
|
556
|
-
var checkVerboseOptions = checkVerbose.options.map((option) => option.flags === "-v, --verbose" ? { ...option, description: "Show diffs for drifted files" } : option);
|
|
557
|
-
var checkAction = defineAction({
|
|
558
|
-
id: "check",
|
|
559
|
-
description: "Compare local config blocks against the registry for drift detection",
|
|
560
|
-
surfaces: ["cli"],
|
|
561
|
-
input: checkInputSchema,
|
|
562
|
-
cli: {
|
|
563
|
-
group: "check",
|
|
564
|
-
description: "Compare local config blocks against the registry for drift detection",
|
|
565
|
-
options: [
|
|
566
|
-
...checkVerboseOptions,
|
|
567
|
-
{
|
|
568
|
-
flags: "-b, --block <name>",
|
|
569
|
-
description: "Check a specific block only"
|
|
570
|
-
},
|
|
571
|
-
{
|
|
572
|
-
flags: "--ci",
|
|
573
|
-
description: "Deprecated: use --output json instead",
|
|
574
|
-
defaultValue: false
|
|
575
|
-
},
|
|
576
|
-
...checkOutputMode.options,
|
|
577
|
-
...checkCwd.options
|
|
578
|
-
],
|
|
579
|
-
mapInput: (context) => {
|
|
580
|
-
const { outputMode: presetOutputMode } = checkOutputMode.resolve(context.flags);
|
|
581
|
-
const explicitOutput = typeof context.flags["output"] === "string";
|
|
582
|
-
let outputMode;
|
|
583
|
-
if (explicitOutput) {
|
|
584
|
-
outputMode = resolveStructuredOutputMode(presetOutputMode) ?? "human";
|
|
585
|
-
} else if (context.flags["ci"]) {
|
|
586
|
-
outputMode = "json";
|
|
587
|
-
} else if (process.env["OUTFITTER_JSONL"] === "1") {
|
|
588
|
-
outputMode = "jsonl";
|
|
589
|
-
} else if (process.env["OUTFITTER_JSON"] === "1") {
|
|
590
|
-
outputMode = "json";
|
|
591
|
-
} else {
|
|
592
|
-
outputMode = "human";
|
|
593
|
-
}
|
|
594
|
-
const { verbose } = checkVerbose.resolve(context.flags);
|
|
595
|
-
const { cwd: rawCwd } = checkCwd.resolve(context.flags);
|
|
596
|
-
const cwd = resolve(process.cwd(), rawCwd);
|
|
597
|
-
const block = resolveStringFlag(context.flags["block"]);
|
|
598
|
-
return {
|
|
599
|
-
cwd,
|
|
600
|
-
verbose,
|
|
601
|
-
...block !== undefined ? { block } : {},
|
|
602
|
-
outputMode
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
},
|
|
606
|
-
handler: async (input) => {
|
|
607
|
-
const { outputMode, ...checkInput } = input;
|
|
608
|
-
const result = await runCheck(checkInput);
|
|
609
|
-
if (result.isErr()) {
|
|
610
|
-
return Result.err(new InternalError({
|
|
611
|
-
message: result.error.message,
|
|
612
|
-
context: { action: "check" }
|
|
613
|
-
}));
|
|
614
|
-
}
|
|
615
|
-
await printCheckResults(result.value, {
|
|
616
|
-
mode: outputMode,
|
|
617
|
-
verbose: checkInput.verbose
|
|
618
|
-
});
|
|
619
|
-
if (result.value.driftedCount > 0 || result.value.missingCount > 0) {
|
|
620
|
-
process.exit(1);
|
|
621
|
-
}
|
|
622
|
-
return Result.ok(result.value);
|
|
623
|
-
}
|
|
624
|
-
});
|
|
625
|
-
var checkTsdocInputSchema = z.object({
|
|
626
|
-
strict: z.boolean(),
|
|
627
|
-
minCoverage: z.number(),
|
|
628
|
-
cwd: z.string(),
|
|
629
|
-
outputMode: outputModeSchema,
|
|
630
|
-
jq: z.string().optional(),
|
|
631
|
-
summary: z.boolean(),
|
|
632
|
-
level: z.enum(["documented", "partial", "undocumented"]).optional(),
|
|
633
|
-
packages: z.array(z.string())
|
|
634
|
-
});
|
|
635
|
-
var checkTsdocOutputSchema = z.object({
|
|
636
|
-
ok: z.boolean(),
|
|
637
|
-
packages: z.array(z.object({
|
|
638
|
-
name: z.string(),
|
|
639
|
-
path: z.string(),
|
|
640
|
-
declarations: z.array(z.object({
|
|
641
|
-
name: z.string(),
|
|
642
|
-
kind: z.string(),
|
|
643
|
-
level: z.enum(["documented", "partial", "undocumented"]),
|
|
644
|
-
file: z.string(),
|
|
645
|
-
line: z.number()
|
|
646
|
-
})),
|
|
647
|
-
documented: z.number(),
|
|
648
|
-
partial: z.number(),
|
|
649
|
-
undocumented: z.number(),
|
|
650
|
-
total: z.number(),
|
|
651
|
-
percentage: z.number()
|
|
652
|
-
})),
|
|
653
|
-
summary: z.object({
|
|
654
|
-
documented: z.number(),
|
|
655
|
-
partial: z.number(),
|
|
656
|
-
undocumented: z.number(),
|
|
657
|
-
total: z.number(),
|
|
658
|
-
percentage: z.number()
|
|
659
|
-
})
|
|
660
|
-
});
|
|
661
|
-
var checkTsdocOutputMode = outputModePreset({ includeJsonl: true });
|
|
662
|
-
var checkTsdocJq = jqPreset();
|
|
663
|
-
var checkTsdocAction = defineAction({
|
|
664
|
-
id: "check.tsdoc",
|
|
665
|
-
description: "Check TSDoc coverage on exported declarations",
|
|
666
|
-
surfaces: ["cli"],
|
|
667
|
-
input: checkTsdocInputSchema,
|
|
668
|
-
output: checkTsdocOutputSchema,
|
|
669
|
-
cli: {
|
|
670
|
-
group: "check",
|
|
671
|
-
command: "tsdoc",
|
|
672
|
-
description: "Check TSDoc coverage on exported declarations",
|
|
673
|
-
options: [
|
|
674
|
-
{
|
|
675
|
-
flags: "--strict",
|
|
676
|
-
description: "Fail if coverage is below the minimum threshold",
|
|
677
|
-
defaultValue: false
|
|
678
|
-
},
|
|
679
|
-
{
|
|
680
|
-
flags: "--min-coverage <percent>",
|
|
681
|
-
description: "Minimum coverage percentage (used with --strict)"
|
|
682
|
-
},
|
|
683
|
-
{
|
|
684
|
-
flags: "--summary",
|
|
685
|
-
description: "Omit per-declaration detail for compact output (~2KB vs ~64KB)",
|
|
686
|
-
defaultValue: false
|
|
687
|
-
},
|
|
688
|
-
{
|
|
689
|
-
flags: "--level <level>",
|
|
690
|
-
description: "Filter declarations by coverage level (undocumented, partial, documented)"
|
|
691
|
-
},
|
|
692
|
-
{
|
|
693
|
-
flags: "--package <name>",
|
|
694
|
-
description: "Filter to specific package(s) by name (repeatable)"
|
|
695
|
-
},
|
|
696
|
-
...checkTsdocOutputMode.options,
|
|
697
|
-
...checkTsdocJq.options
|
|
698
|
-
],
|
|
699
|
-
mapInput: (context) => {
|
|
700
|
-
const { outputMode: presetOutputMode } = checkTsdocOutputMode.resolve(context.flags);
|
|
701
|
-
const { jq } = checkTsdocJq.resolve(context.flags);
|
|
702
|
-
const explicitOutput = typeof context.flags["output"] === "string";
|
|
703
|
-
let outputMode;
|
|
704
|
-
if (explicitOutput) {
|
|
705
|
-
outputMode = resolveStructuredOutputMode(presetOutputMode) ?? "human";
|
|
706
|
-
} else if (process.env["OUTFITTER_JSONL"] === "1") {
|
|
707
|
-
outputMode = "jsonl";
|
|
708
|
-
} else if (process.env["OUTFITTER_JSON"] === "1") {
|
|
709
|
-
outputMode = "json";
|
|
710
|
-
} else {
|
|
711
|
-
outputMode = "human";
|
|
712
|
-
}
|
|
713
|
-
const minCoverageRaw = context.flags["minCoverage"] ?? context.flags["min-coverage"];
|
|
714
|
-
let minCoverage = 0;
|
|
715
|
-
if (typeof minCoverageRaw === "string") {
|
|
716
|
-
minCoverage = Number.parseInt(minCoverageRaw, 10);
|
|
717
|
-
} else if (typeof minCoverageRaw === "number") {
|
|
718
|
-
minCoverage = minCoverageRaw;
|
|
719
|
-
}
|
|
720
|
-
const levelRaw = context.flags["level"];
|
|
721
|
-
const validLevels = new Set(["documented", "partial", "undocumented"]);
|
|
722
|
-
const level = typeof levelRaw === "string" && validLevels.has(levelRaw) ? levelRaw : undefined;
|
|
723
|
-
const pkgRaw = context.flags["package"];
|
|
724
|
-
let packages = [];
|
|
725
|
-
if (Array.isArray(pkgRaw)) {
|
|
726
|
-
packages = pkgRaw.filter((v) => typeof v === "string");
|
|
727
|
-
} else if (typeof pkgRaw === "string") {
|
|
728
|
-
packages = [pkgRaw];
|
|
729
|
-
}
|
|
730
|
-
return {
|
|
731
|
-
strict: Boolean(context.flags["strict"]),
|
|
732
|
-
minCoverage,
|
|
733
|
-
cwd: process.cwd(),
|
|
734
|
-
outputMode,
|
|
735
|
-
jq,
|
|
736
|
-
summary: Boolean(context.flags["summary"]),
|
|
737
|
-
level,
|
|
738
|
-
packages
|
|
739
|
-
};
|
|
740
|
-
}
|
|
741
|
-
},
|
|
742
|
-
handler: async (input) => {
|
|
743
|
-
const result = await runCheckTsdoc(input);
|
|
744
|
-
if (result.isErr()) {
|
|
745
|
-
if (result.error instanceof ValidationError) {
|
|
746
|
-
return Result.err(result.error);
|
|
747
|
-
}
|
|
748
|
-
return Result.err(new InternalError({
|
|
749
|
-
message: result.error.message,
|
|
750
|
-
context: { action: "check.tsdoc" }
|
|
751
|
-
}));
|
|
752
|
-
}
|
|
753
|
-
if (!result.value.ok) {
|
|
754
|
-
process.exitCode = 1;
|
|
755
|
-
}
|
|
756
|
-
return Result.ok(result.value);
|
|
757
|
-
}
|
|
758
|
-
});
|
|
759
|
-
var upgradeInputSchema = z.object({
|
|
760
|
-
cwd: z.string(),
|
|
761
|
-
guide: z.boolean(),
|
|
762
|
-
guidePackages: z.array(z.string()).optional(),
|
|
763
|
-
dryRun: z.boolean(),
|
|
764
|
-
yes: z.boolean(),
|
|
765
|
-
interactive: z.boolean(),
|
|
766
|
-
all: z.boolean(),
|
|
767
|
-
noCodemods: z.boolean(),
|
|
768
|
-
outputMode: outputModeSchema
|
|
769
|
-
});
|
|
770
|
-
var upgradeCwd = cwdPreset();
|
|
771
|
-
var upgradeDryRun = dryRunPreset();
|
|
772
|
-
var upgradeInteraction = interactionPreset();
|
|
773
|
-
var upgradeAll = booleanFlagPreset({
|
|
774
|
-
id: "upgradeAll",
|
|
775
|
-
key: "all",
|
|
776
|
-
flags: "--all",
|
|
777
|
-
description: "Include breaking changes in the upgrade"
|
|
778
|
-
});
|
|
779
|
-
var upgradeNoCodemods = booleanFlagPreset({
|
|
780
|
-
id: "upgradeNoCodemods",
|
|
781
|
-
key: "noCodemods",
|
|
782
|
-
flags: "--no-codemods",
|
|
783
|
-
description: "Skip automatic codemod execution during upgrade",
|
|
784
|
-
sources: ["noCodemods", "no-codemods"],
|
|
785
|
-
negatedSources: ["codemods"]
|
|
786
|
-
});
|
|
787
|
-
var upgradeGuide = booleanFlagPreset({
|
|
788
|
-
id: "upgradeGuide",
|
|
789
|
-
key: "guide",
|
|
790
|
-
flags: "--guide",
|
|
791
|
-
description: "Show migration instructions for available updates. Pass package names to filter."
|
|
792
|
-
});
|
|
793
|
-
var upgradeFlags = actionCliPresets(upgradeCwd, upgradeDryRun, upgradeInteraction, upgradeAll, upgradeNoCodemods, upgradeGuide);
|
|
794
|
-
var upgradeAction = defineAction({
|
|
795
|
-
id: "upgrade",
|
|
796
|
-
description: "Check for @outfitter/* package updates and migration guidance",
|
|
797
|
-
surfaces: ["cli"],
|
|
798
|
-
input: upgradeInputSchema,
|
|
799
|
-
cli: {
|
|
800
|
-
command: "upgrade [packages...]",
|
|
801
|
-
description: "Check for @outfitter/* package updates and migration guidance",
|
|
802
|
-
options: [...upgradeFlags.options],
|
|
803
|
-
mapInput: (context) => {
|
|
804
|
-
const outputMode = resolveOutputModeFromContext(context.flags);
|
|
805
|
-
const {
|
|
806
|
-
cwd: rawCwd,
|
|
807
|
-
dryRun,
|
|
808
|
-
interactive,
|
|
809
|
-
yes,
|
|
810
|
-
all,
|
|
811
|
-
noCodemods,
|
|
812
|
-
guide
|
|
813
|
-
} = upgradeFlags.resolve(context);
|
|
814
|
-
const cwd = resolve(process.cwd(), rawCwd);
|
|
815
|
-
const guidePackages = context.args.length > 0 ? context.args : undefined;
|
|
816
|
-
return {
|
|
817
|
-
cwd,
|
|
818
|
-
guide,
|
|
819
|
-
...guidePackages !== undefined ? { guidePackages } : {},
|
|
820
|
-
dryRun,
|
|
821
|
-
yes,
|
|
822
|
-
interactive,
|
|
823
|
-
all,
|
|
824
|
-
noCodemods,
|
|
825
|
-
outputMode
|
|
826
|
-
};
|
|
827
|
-
}
|
|
828
|
-
},
|
|
829
|
-
handler: async (input) => {
|
|
830
|
-
const { outputMode, guidePackages, ...upgradeInput } = input;
|
|
831
|
-
const result = await runUpgrade({
|
|
832
|
-
...upgradeInput,
|
|
833
|
-
outputMode,
|
|
834
|
-
...guidePackages !== undefined ? { guidePackages } : {}
|
|
835
|
-
});
|
|
836
|
-
if (result.isErr()) {
|
|
837
|
-
return Result.err(new InternalError({
|
|
838
|
-
message: result.error.message,
|
|
839
|
-
context: { action: "upgrade" }
|
|
840
|
-
}));
|
|
841
|
-
}
|
|
842
|
-
await printUpgradeResults(result.value, {
|
|
843
|
-
mode: outputMode,
|
|
844
|
-
guide: upgradeInput.guide,
|
|
845
|
-
cwd: upgradeInput.cwd,
|
|
846
|
-
dryRun: upgradeInput.dryRun,
|
|
847
|
-
all: upgradeInput.all
|
|
848
|
-
});
|
|
849
|
-
return Result.ok(result.value);
|
|
850
|
-
}
|
|
851
|
-
});
|
|
852
|
-
var outfitterActions = createActionRegistry().add(createAction).add(scaffoldAction).add(createInitAction({
|
|
853
|
-
id: "init",
|
|
854
|
-
description: "Create a new Outfitter project",
|
|
855
|
-
command: "[directory]",
|
|
856
|
-
includePresetOption: true,
|
|
857
|
-
includeTemplateOption: true
|
|
858
|
-
})).add(createInitAction({
|
|
859
|
-
id: "init.cli",
|
|
860
|
-
description: "Create a new CLI project",
|
|
861
|
-
command: "cli [directory]",
|
|
862
|
-
presetOverride: "cli"
|
|
863
|
-
})).add(createInitAction({
|
|
864
|
-
id: "init.mcp",
|
|
865
|
-
description: "Create a new MCP server",
|
|
866
|
-
command: "mcp [directory]",
|
|
867
|
-
presetOverride: "mcp"
|
|
868
|
-
})).add(createInitAction({
|
|
869
|
-
id: "init.daemon",
|
|
870
|
-
description: "Create a new daemon project",
|
|
871
|
-
command: "daemon [directory]",
|
|
872
|
-
presetOverride: "daemon"
|
|
873
|
-
})).add(createInitAction({
|
|
874
|
-
id: "init.library",
|
|
875
|
-
description: "Create a new library project",
|
|
876
|
-
command: "library [directory]",
|
|
877
|
-
presetOverride: "library"
|
|
878
|
-
})).add(createInitAction({
|
|
879
|
-
id: "init.full-stack",
|
|
880
|
-
description: "Create a full-stack workspace",
|
|
881
|
-
command: "full-stack [directory]",
|
|
882
|
-
presetOverride: "full-stack"
|
|
883
|
-
})).add(demoAction).add(doctorAction).add(addAction).add(listBlocksAction).add(checkAction).add(checkTsdocAction).add(upgradeAction);
|
|
884
|
-
|
|
885
|
-
export { outfitterActions };
|