outfitter 0.2.1 → 0.2.3
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 +215 -116
- package/dist/actions.d.ts +2 -0
- package/dist/actions.js +34 -0
- package/dist/cli.js +29 -5
- 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/update-planner.d.ts +58 -0
- package/dist/commands/update-planner.js +8 -0
- package/dist/commands/update-workspace.d.ts +76 -0
- package/dist/commands/update-workspace.js +16 -0
- package/dist/commands/update.d.ts +113 -0
- package/dist/commands/update.js +21 -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 +265 -50
- package/dist/index.js +157 -3
- 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-b0y0cwkr.js +5533 -0
- package/dist/shared/outfitter-193jvzg4.d.ts +5 -0
- package/dist/shared/outfitter-1dd0k853.js +194 -0
- package/dist/shared/outfitter-1h7k8xxt.js +29 -0
- package/dist/shared/outfitter-1qwpjt6w.js +125 -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-6a4bq054.js +322 -0
- package/dist/shared/outfitter-6bkqjk86.d.ts +3 -0
- package/dist/shared/outfitter-6gc3g5wk.js +98 -0
- package/dist/shared/outfitter-7cv5fg1m.js +61 -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-9c8edfsn.js +715 -0
- package/dist/shared/outfitter-9x1brcmq.js +184 -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-b5nd42y4.d.ts +45 -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-fnsmx3xg.js +750 -0
- package/dist/shared/outfitter-gdvm5c0b.d.ts +4 -0
- package/dist/shared/outfitter-gp4v5gkf.js +322 -0
- package/dist/shared/outfitter-h1mnzzd1.d.ts +14 -0
- package/dist/shared/outfitter-hpymx4m9.js +184 -0
- package/dist/shared/outfitter-hvsaxgcp.js +1 -0
- package/dist/shared/outfitter-j8yc7294.d.ts +22 -0
- package/dist/shared/outfitter-jyxwznk1.js +404 -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-mdt37hqm.js +4 -0
- package/dist/shared/outfitter-mtbpabf3.js +91 -0
- package/dist/shared/outfitter-nm4m0v6x.d.ts +131 -0
- package/dist/shared/outfitter-nmeecf1b.js +531 -0
- package/dist/shared/outfitter-npyfbdmc.d.ts +6 -0
- package/dist/shared/outfitter-pxt58tsq.js +582 -0
- package/dist/shared/outfitter-q9agarmb.js +42 -0
- package/dist/shared/outfitter-qfgj5xpq.js +70 -0
- package/dist/shared/outfitter-qfh36ddg.d.ts +66 -0
- package/dist/shared/outfitter-s6k8y2p4.js +269 -0
- package/dist/shared/outfitter-sftf1s26.js +199 -0
- package/dist/shared/outfitter-sg7ncy4a.d.ts +51 -0
- package/dist/shared/outfitter-sgtq57qr.d.ts +5 -0
- package/dist/shared/outfitter-txre6cdn.d.ts +60 -0
- package/dist/shared/outfitter-vh4xgb93.js +35 -0
- package/dist/shared/outfitter-ya44h1km.js +191 -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 +182 -29
- package/templates/basic/.lefthook.yml.template +4 -5
- package/templates/basic/package.json.template +10 -5
- package/templates/cli/.lefthook.yml.template +4 -5
- package/templates/cli/biome.json.template +2 -15
- package/templates/cli/package.json.template +11 -7
- package/templates/daemon/.lefthook.yml.template +4 -5
- package/templates/daemon/biome.json.template +2 -15
- package/templates/daemon/package.json.template +11 -7
- package/templates/mcp/.lefthook.yml.template +4 -5
- package/templates/mcp/biome.json.template +2 -15
- package/templates/mcp/package.json.template +11 -7
- package/templates/minimal/.gitignore.template +30 -0
- package/templates/minimal/.lefthook.yml.template +26 -0
- package/templates/minimal/package.json.template +46 -0
- package/templates/minimal/src/index.ts.template +26 -0
- package/templates/minimal/tsconfig.json.template +34 -0
- package/dist/shared/chunk-f3sch043.js +0 -1858
package/dist/index.js
CHANGED
|
@@ -1,18 +1,172 @@
|
|
|
1
1
|
import {
|
|
2
|
+
INIT_TARGET_IDS,
|
|
2
3
|
InitError,
|
|
4
|
+
MigrateKitError,
|
|
5
|
+
READY_TARGET_IDS,
|
|
6
|
+
SCAFFOLD_TARGET_IDS,
|
|
7
|
+
ScaffoldCommandError,
|
|
8
|
+
TARGET_IDS,
|
|
9
|
+
TARGET_REGISTRY,
|
|
10
|
+
createRepoCommand,
|
|
11
|
+
deriveBinName,
|
|
12
|
+
deriveProjectName,
|
|
3
13
|
doctorCommand,
|
|
14
|
+
getInitTarget,
|
|
15
|
+
getReadyTarget,
|
|
16
|
+
getScaffoldTarget,
|
|
17
|
+
getTarget,
|
|
4
18
|
initCommand,
|
|
19
|
+
listTargets,
|
|
20
|
+
migrateKitCommand,
|
|
5
21
|
outfitterActions,
|
|
6
22
|
printDoctorResults,
|
|
23
|
+
printInitResults,
|
|
24
|
+
printMigrateKitResults,
|
|
25
|
+
printScaffoldResults,
|
|
26
|
+
resolvePlacement,
|
|
7
27
|
runDoctor,
|
|
8
|
-
runInit
|
|
9
|
-
|
|
28
|
+
runInit,
|
|
29
|
+
runMigrateKit,
|
|
30
|
+
runScaffold,
|
|
31
|
+
scaffoldCommand
|
|
32
|
+
} from "./shared/chunk-b0y0cwkr.js";
|
|
33
|
+
// src/create/planner.ts
|
|
34
|
+
import { Result, ValidationError } from "@outfitter/contracts";
|
|
35
|
+
|
|
36
|
+
// src/create/presets.ts
|
|
37
|
+
var CREATE_PRESETS = {
|
|
38
|
+
basic: {
|
|
39
|
+
id: "basic",
|
|
40
|
+
template: "basic",
|
|
41
|
+
summary: "Minimal Bun + TypeScript project.",
|
|
42
|
+
defaultBlocks: ["scaffolding"]
|
|
43
|
+
},
|
|
44
|
+
cli: {
|
|
45
|
+
id: "cli",
|
|
46
|
+
template: "cli",
|
|
47
|
+
summary: "CLI starter with Outfitter command ergonomics.",
|
|
48
|
+
defaultBlocks: ["scaffolding"]
|
|
49
|
+
},
|
|
50
|
+
daemon: {
|
|
51
|
+
id: "daemon",
|
|
52
|
+
template: "daemon",
|
|
53
|
+
summary: "Daemon + control CLI starter.",
|
|
54
|
+
defaultBlocks: ["scaffolding"]
|
|
55
|
+
},
|
|
56
|
+
mcp: {
|
|
57
|
+
id: "mcp",
|
|
58
|
+
template: "mcp",
|
|
59
|
+
summary: "MCP server starter.",
|
|
60
|
+
defaultBlocks: ["scaffolding"]
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var CREATE_PRESET_IDS = Object.keys(CREATE_PRESETS);
|
|
64
|
+
function getCreatePreset(id) {
|
|
65
|
+
const presets = CREATE_PRESETS;
|
|
66
|
+
return presets[id];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// src/create/planner.ts
|
|
70
|
+
function derivePackageName(input) {
|
|
71
|
+
return (input.packageName ?? input.name).trim();
|
|
72
|
+
}
|
|
73
|
+
function planCreateProject(input) {
|
|
74
|
+
const packageName = derivePackageName(input);
|
|
75
|
+
if (packageName.length === 0) {
|
|
76
|
+
return Result.err(new ValidationError({
|
|
77
|
+
message: "Project name must not be empty",
|
|
78
|
+
field: "name"
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
const targetDir = input.targetDir.trim();
|
|
82
|
+
if (targetDir.length === 0) {
|
|
83
|
+
return Result.err(new ValidationError({
|
|
84
|
+
message: "Target directory must not be empty",
|
|
85
|
+
field: "targetDir"
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
if (packageName.startsWith("@") && !packageName.includes("/")) {
|
|
89
|
+
return Result.err(new ValidationError({
|
|
90
|
+
message: "Could not derive a project name from package name",
|
|
91
|
+
field: "packageName"
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
const projectName = deriveProjectName(packageName);
|
|
95
|
+
if (projectName.length === 0) {
|
|
96
|
+
return Result.err(new ValidationError({
|
|
97
|
+
message: "Could not derive a project name from package name",
|
|
98
|
+
field: "packageName"
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
const preset = getCreatePreset(input.preset);
|
|
102
|
+
if (!preset) {
|
|
103
|
+
return Result.err(new ValidationError({
|
|
104
|
+
message: `Unknown create preset '${input.preset}'`,
|
|
105
|
+
field: "preset"
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
const includeTooling = input.includeTooling ?? true;
|
|
109
|
+
const defaultBlocks = includeTooling ? [...preset.defaultBlocks] : [];
|
|
110
|
+
const changes = [
|
|
111
|
+
{
|
|
112
|
+
type: "copy-template",
|
|
113
|
+
template: preset.template,
|
|
114
|
+
targetDir,
|
|
115
|
+
overlayBaseTemplate: true
|
|
116
|
+
},
|
|
117
|
+
{ type: "inject-shared-config" }
|
|
118
|
+
];
|
|
119
|
+
if (input.local) {
|
|
120
|
+
changes.push({ type: "rewrite-local-dependencies", mode: "workspace" });
|
|
121
|
+
}
|
|
122
|
+
if (defaultBlocks.length > 0) {
|
|
123
|
+
changes.push({ type: "add-blocks", blocks: defaultBlocks });
|
|
124
|
+
}
|
|
125
|
+
const plan = {
|
|
126
|
+
preset,
|
|
127
|
+
values: {
|
|
128
|
+
packageName,
|
|
129
|
+
projectName,
|
|
130
|
+
version: input.version?.trim() || "0.1.0",
|
|
131
|
+
description: input.description?.trim() || "A new project created with Outfitter",
|
|
132
|
+
binName: deriveBinName(projectName),
|
|
133
|
+
year: input.year ?? String(new Date().getFullYear())
|
|
134
|
+
},
|
|
135
|
+
changes
|
|
136
|
+
};
|
|
137
|
+
return Result.ok(plan);
|
|
138
|
+
}
|
|
10
139
|
export {
|
|
140
|
+
scaffoldCommand,
|
|
141
|
+
runScaffold,
|
|
142
|
+
runMigrateKit,
|
|
11
143
|
runInit,
|
|
12
144
|
runDoctor,
|
|
145
|
+
resolvePlacement,
|
|
146
|
+
printScaffoldResults,
|
|
147
|
+
printMigrateKitResults,
|
|
148
|
+
printInitResults,
|
|
13
149
|
printDoctorResults,
|
|
150
|
+
planCreateProject,
|
|
14
151
|
outfitterActions,
|
|
152
|
+
migrateKitCommand,
|
|
153
|
+
listTargets,
|
|
15
154
|
initCommand,
|
|
155
|
+
getTarget,
|
|
156
|
+
getScaffoldTarget,
|
|
157
|
+
getReadyTarget,
|
|
158
|
+
getInitTarget,
|
|
159
|
+
getCreatePreset,
|
|
16
160
|
doctorCommand,
|
|
17
|
-
|
|
161
|
+
createRepoCommand,
|
|
162
|
+
TARGET_REGISTRY,
|
|
163
|
+
TARGET_IDS,
|
|
164
|
+
ScaffoldCommandError,
|
|
165
|
+
SCAFFOLD_TARGET_IDS,
|
|
166
|
+
READY_TARGET_IDS,
|
|
167
|
+
MigrateKitError,
|
|
168
|
+
InitError,
|
|
169
|
+
INIT_TARGET_IDS,
|
|
170
|
+
CREATE_PRESET_IDS,
|
|
171
|
+
CREATE_PRESETS
|
|
18
172
|
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { OutfitterError, Result } from "@outfitter/contracts";
|
|
2
|
+
import { ZodType } from "zod";
|
|
3
|
+
/** A single block entry in the manifest. */
|
|
4
|
+
interface BlockEntry {
|
|
5
|
+
/** Tooling version the block was installed from. */
|
|
6
|
+
installedFrom: string;
|
|
7
|
+
/** ISO 8601 timestamp of when the block was installed or last updated. */
|
|
8
|
+
installedAt: string;
|
|
9
|
+
}
|
|
10
|
+
/** The full manifest structure. */
|
|
11
|
+
interface Manifest {
|
|
12
|
+
/** Manifest format version. Currently always 1. */
|
|
13
|
+
version: 1;
|
|
14
|
+
/** Map of block name to install metadata. */
|
|
15
|
+
blocks: Record<string, BlockEntry>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Schema for a single block entry in the manifest.
|
|
19
|
+
*/
|
|
20
|
+
declare const BlockEntrySchema: ZodType<BlockEntry>;
|
|
21
|
+
/**
|
|
22
|
+
* Schema for the manifest file.
|
|
23
|
+
*/
|
|
24
|
+
declare const ManifestSchema: ZodType<Manifest>;
|
|
25
|
+
/**
|
|
26
|
+
* Reads and validates `.outfitter/manifest.json`.
|
|
27
|
+
*
|
|
28
|
+
* @param cwd - Working directory containing the `.outfitter/` folder
|
|
29
|
+
* @returns The parsed manifest, or `null` if the file does not exist
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const result = await readManifest(process.cwd());
|
|
34
|
+
* if (result.isOk() && result.value) {
|
|
35
|
+
* console.log(result.value.blocks);
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare function readManifest(cwd: string): Promise<Result<Manifest | null, OutfitterError>>;
|
|
40
|
+
/**
|
|
41
|
+
* Writes a manifest to `.outfitter/manifest.json`.
|
|
42
|
+
*
|
|
43
|
+
* Creates the `.outfitter/` directory if it does not exist.
|
|
44
|
+
* Writes atomically via `Bun.write`.
|
|
45
|
+
*
|
|
46
|
+
* @param cwd - Working directory to write the manifest into
|
|
47
|
+
* @param manifest - The manifest data to write
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* await writeManifest(process.cwd(), { version: 1, blocks: {} });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
declare function writeManifest(cwd: string, manifest: Manifest): Promise<Result<void, OutfitterError>>;
|
|
55
|
+
/**
|
|
56
|
+
* Adds or updates a block entry in the manifest (read-modify-write).
|
|
57
|
+
*
|
|
58
|
+
* If no manifest exists, creates a new one. If the block already exists,
|
|
59
|
+
* updates its `installedFrom` and `installedAt` fields.
|
|
60
|
+
*
|
|
61
|
+
* @param cwd - Working directory containing the project
|
|
62
|
+
* @param blockName - Name of the block to stamp
|
|
63
|
+
* @param toolingVersion - Version of the tooling package the block was installed from
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* await stampBlock(process.cwd(), "biome", "0.2.1");
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
declare function stampBlock(cwd: string, blockName: string, toolingVersion: string): Promise<Result<void, OutfitterError>>;
|
|
71
|
+
export { writeManifest, stampBlock, readManifest, ManifestSchema, Manifest, BlockEntrySchema, BlockEntry };
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
BlockEntrySchema,
|
|
4
|
+
ManifestSchema,
|
|
5
|
+
readManifest,
|
|
6
|
+
stampBlock,
|
|
7
|
+
writeManifest
|
|
8
|
+
} from "./shared/outfitter-mtbpabf3.js";
|
|
9
|
+
import"./shared/outfitter-mdt37hqm.js";
|
|
10
|
+
export {
|
|
11
|
+
writeManifest,
|
|
12
|
+
stampBlock,
|
|
13
|
+
readManifest,
|
|
14
|
+
ManifestSchema,
|
|
15
|
+
BlockEntrySchema
|
|
16
|
+
};
|