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.
Files changed (146) hide show
  1. package/README.md +215 -116
  2. package/dist/actions.d.ts +2 -0
  3. package/dist/actions.js +34 -0
  4. package/dist/cli.js +29 -5
  5. package/dist/commands/add.d.ts +54 -0
  6. package/dist/commands/add.js +16 -0
  7. package/dist/commands/check.d.ts +91 -0
  8. package/dist/commands/check.js +14 -0
  9. package/dist/commands/demo.d.ts +21 -0
  10. package/dist/commands/demo.js +8 -0
  11. package/dist/commands/docs-module-loader.d.ts +2 -0
  12. package/dist/commands/docs-module-loader.js +8 -0
  13. package/dist/commands/doctor.d.ts +2 -0
  14. package/dist/commands/doctor.js +13 -0
  15. package/dist/commands/init.d.ts +7 -0
  16. package/dist/commands/init.js +31 -0
  17. package/dist/commands/migrate-kit.d.ts +2 -0
  18. package/dist/commands/migrate-kit.js +15 -0
  19. package/dist/commands/repo.d.ts +3 -0
  20. package/dist/commands/repo.js +9 -0
  21. package/dist/commands/scaffold.d.ts +4 -0
  22. package/dist/commands/scaffold.js +31 -0
  23. package/dist/commands/shared-deps.d.ts +36 -0
  24. package/dist/commands/shared-deps.js +10 -0
  25. package/dist/commands/update-planner.d.ts +58 -0
  26. package/dist/commands/update-planner.js +8 -0
  27. package/dist/commands/update-workspace.d.ts +76 -0
  28. package/dist/commands/update-workspace.js +16 -0
  29. package/dist/commands/update.d.ts +113 -0
  30. package/dist/commands/update.js +21 -0
  31. package/dist/create/index.d.ts +5 -0
  32. package/dist/create/index.js +29 -0
  33. package/dist/create/planner.d.ts +3 -0
  34. package/dist/create/planner.js +21 -0
  35. package/dist/create/presets.d.ts +3 -0
  36. package/dist/create/presets.js +12 -0
  37. package/dist/create/types.d.ts +2 -0
  38. package/dist/create/types.js +1 -0
  39. package/dist/engine/blocks.d.ts +3 -0
  40. package/dist/engine/blocks.js +12 -0
  41. package/dist/engine/collector.d.ts +2 -0
  42. package/dist/engine/collector.js +8 -0
  43. package/dist/engine/config.d.ts +3 -0
  44. package/dist/engine/config.js +12 -0
  45. package/dist/engine/executor.d.ts +3 -0
  46. package/dist/engine/executor.js +16 -0
  47. package/dist/engine/index.d.ts +8 -0
  48. package/dist/engine/index.js +59 -0
  49. package/dist/engine/names.d.ts +2 -0
  50. package/dist/engine/names.js +16 -0
  51. package/dist/engine/post-scaffold.d.ts +3 -0
  52. package/dist/engine/post-scaffold.js +8 -0
  53. package/dist/engine/render-plan.d.ts +7 -0
  54. package/dist/engine/render-plan.js +9 -0
  55. package/dist/engine/template.d.ts +3 -0
  56. package/dist/engine/template.js +17 -0
  57. package/dist/engine/types.d.ts +2 -0
  58. package/dist/engine/types.js +8 -0
  59. package/dist/engine/workspace.d.ts +3 -0
  60. package/dist/engine/workspace.js +13 -0
  61. package/dist/index.d.ts +265 -50
  62. package/dist/index.js +157 -3
  63. package/dist/manifest.d.ts +71 -0
  64. package/dist/manifest.js +16 -0
  65. package/dist/output-mode.d.ts +2 -0
  66. package/dist/output-mode.js +10 -0
  67. package/dist/shared/chunk-b0y0cwkr.js +5533 -0
  68. package/dist/shared/outfitter-193jvzg4.d.ts +5 -0
  69. package/dist/shared/outfitter-1dd0k853.js +194 -0
  70. package/dist/shared/outfitter-1h7k8xxt.js +29 -0
  71. package/dist/shared/outfitter-1qwpjt6w.js +125 -0
  72. package/dist/shared/outfitter-2ngep1h2.d.ts +5 -0
  73. package/dist/shared/outfitter-2np85etz.js +95 -0
  74. package/dist/shared/outfitter-33w361tc.d.ts +18 -0
  75. package/dist/shared/outfitter-344t1r38.js +1 -0
  76. package/dist/shared/outfitter-3weh61w7.d.ts +25 -0
  77. package/dist/shared/outfitter-4s9meh3j.js +221 -0
  78. package/dist/shared/outfitter-6a4bq054.js +322 -0
  79. package/dist/shared/outfitter-6bkqjk86.d.ts +3 -0
  80. package/dist/shared/outfitter-6gc3g5wk.js +98 -0
  81. package/dist/shared/outfitter-7cv5fg1m.js +61 -0
  82. package/dist/shared/outfitter-7ha7p61k.d.ts +6 -0
  83. package/dist/shared/outfitter-7r12fj7f.js +30 -0
  84. package/dist/shared/outfitter-8y2dfx6n.js +11 -0
  85. package/dist/shared/outfitter-9c8edfsn.js +715 -0
  86. package/dist/shared/outfitter-9x1brcmq.js +184 -0
  87. package/dist/shared/outfitter-a79xrm12.d.ts +17 -0
  88. package/dist/shared/outfitter-amc4jbs1.d.ts +50 -0
  89. package/dist/shared/outfitter-ara3djt0.js +73 -0
  90. package/dist/shared/outfitter-avhm5z6w.js +82 -0
  91. package/dist/shared/outfitter-b5nd42y4.d.ts +45 -0
  92. package/dist/shared/outfitter-dd0btgec.d.ts +40 -0
  93. package/dist/shared/outfitter-e2zz5wv7.d.ts +51 -0
  94. package/dist/shared/outfitter-ehp18x1n.js +1 -0
  95. package/dist/shared/outfitter-fnsmx3xg.js +750 -0
  96. package/dist/shared/outfitter-gdvm5c0b.d.ts +4 -0
  97. package/dist/shared/outfitter-gp4v5gkf.js +322 -0
  98. package/dist/shared/outfitter-h1mnzzd1.d.ts +14 -0
  99. package/dist/shared/outfitter-hpymx4m9.js +184 -0
  100. package/dist/shared/outfitter-hvsaxgcp.js +1 -0
  101. package/dist/shared/outfitter-j8yc7294.d.ts +22 -0
  102. package/dist/shared/outfitter-jyxwznk1.js +404 -0
  103. package/dist/shared/outfitter-k112c427.js +21 -0
  104. package/dist/shared/outfitter-k56rmt24.d.ts +30 -0
  105. package/dist/shared/outfitter-ksa1pp4t.d.ts +4 -0
  106. package/dist/shared/outfitter-mdt37hqm.js +4 -0
  107. package/dist/shared/outfitter-mtbpabf3.js +91 -0
  108. package/dist/shared/outfitter-nm4m0v6x.d.ts +131 -0
  109. package/dist/shared/outfitter-nmeecf1b.js +531 -0
  110. package/dist/shared/outfitter-npyfbdmc.d.ts +6 -0
  111. package/dist/shared/outfitter-pxt58tsq.js +582 -0
  112. package/dist/shared/outfitter-q9agarmb.js +42 -0
  113. package/dist/shared/outfitter-qfgj5xpq.js +70 -0
  114. package/dist/shared/outfitter-qfh36ddg.d.ts +66 -0
  115. package/dist/shared/outfitter-s6k8y2p4.js +269 -0
  116. package/dist/shared/outfitter-sftf1s26.js +199 -0
  117. package/dist/shared/outfitter-sg7ncy4a.d.ts +51 -0
  118. package/dist/shared/outfitter-sgtq57qr.d.ts +5 -0
  119. package/dist/shared/outfitter-txre6cdn.d.ts +60 -0
  120. package/dist/shared/outfitter-vh4xgb93.js +35 -0
  121. package/dist/shared/outfitter-ya44h1km.js +191 -0
  122. package/dist/shared/outfitter-zwyvewr1.js +36 -0
  123. package/dist/targets/index.d.ts +4 -0
  124. package/dist/targets/index.js +29 -0
  125. package/dist/targets/registry.d.ts +3 -0
  126. package/dist/targets/registry.js +28 -0
  127. package/dist/targets/types.d.ts +2 -0
  128. package/dist/targets/types.js +1 -0
  129. package/package.json +182 -29
  130. package/templates/basic/.lefthook.yml.template +4 -5
  131. package/templates/basic/package.json.template +10 -5
  132. package/templates/cli/.lefthook.yml.template +4 -5
  133. package/templates/cli/biome.json.template +2 -15
  134. package/templates/cli/package.json.template +11 -7
  135. package/templates/daemon/.lefthook.yml.template +4 -5
  136. package/templates/daemon/biome.json.template +2 -15
  137. package/templates/daemon/package.json.template +11 -7
  138. package/templates/mcp/.lefthook.yml.template +4 -5
  139. package/templates/mcp/biome.json.template +2 -15
  140. package/templates/mcp/package.json.template +11 -7
  141. package/templates/minimal/.gitignore.template +30 -0
  142. package/templates/minimal/.lefthook.yml.template +26 -0
  143. package/templates/minimal/package.json.template +46 -0
  144. package/templates/minimal/src/index.ts.template +26 -0
  145. package/templates/minimal/tsconfig.json.template +34 -0
  146. 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
- } from "./shared/chunk-f3sch043.js";
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
- InitError
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 };
@@ -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
+ };
@@ -0,0 +1,2 @@
1
+ import { CliOutputMode, StructuredOutputMode, resolveOutputModeFromContext, resolveStructuredOutputMode } from "./shared/outfitter-a79xrm12";
2
+ export { resolveStructuredOutputMode, resolveOutputModeFromContext, StructuredOutputMode, CliOutputMode };
@@ -0,0 +1,10 @@
1
+ // @bun
2
+ import {
3
+ resolveOutputModeFromContext,
4
+ resolveStructuredOutputMode
5
+ } from "./shared/outfitter-7r12fj7f.js";
6
+ import"./shared/outfitter-mdt37hqm.js";
7
+ export {
8
+ resolveStructuredOutputMode,
9
+ resolveOutputModeFromContext
10
+ };