outfitter 0.2.2 → 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 (135) 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 +3 -1
  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 +228 -152
  62. package/dist/index.js +144 -14
  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 +154 -37
  130. package/templates/minimal/.gitignore.template +30 -0
  131. package/templates/minimal/.lefthook.yml.template +26 -0
  132. package/templates/minimal/package.json.template +46 -0
  133. package/templates/minimal/src/index.ts.template +26 -0
  134. package/templates/minimal/tsconfig.json.template +34 -0
  135. package/dist/shared/chunk-sak1tt33.js +0 -3457
@@ -0,0 +1,191 @@
1
+ // @bun
2
+ // apps/outfitter/src/commands/demo.ts
3
+ import { fileURLToPath } from "url";
4
+ import { output } from "@outfitter/cli/output";
5
+ import {
6
+ getPrimitiveIds,
7
+ isPrimitiveId,
8
+ renderAllDemos,
9
+ renderDemo
10
+ } from "@outfitter/tui/demo";
11
+ var EMBEDDED_DEMO_FLAG = "--__outfitter-embedded-demo";
12
+ function isCommandNotFound(error) {
13
+ if (!(error instanceof Error)) {
14
+ return false;
15
+ }
16
+ return /ENOENT|not found|spawn/i.test(error.message);
17
+ }
18
+ async function tryRun(cmd) {
19
+ try {
20
+ const proc = Bun.spawn({
21
+ cmd,
22
+ stdin: "inherit",
23
+ stdout: "inherit",
24
+ stderr: "inherit"
25
+ });
26
+ return await proc.exited;
27
+ } catch (error) {
28
+ if (isCommandNotFound(error)) {
29
+ return;
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ async function localDemoCmds(args) {
35
+ const localDistPath = fileURLToPath(new URL("../../../cli-demo/dist/cli.js", import.meta.url));
36
+ const localSrcPath = fileURLToPath(new URL("../../../cli-demo/src/cli.ts", import.meta.url));
37
+ const cmds = [];
38
+ if (await Bun.file(localDistPath).exists()) {
39
+ cmds.push([process.execPath, localDistPath, ...args]);
40
+ }
41
+ if (await Bun.file(localSrcPath).exists()) {
42
+ cmds.push([process.execPath, localSrcPath, ...args]);
43
+ }
44
+ return cmds;
45
+ }
46
+ function embeddedDemoCmd(args) {
47
+ return [
48
+ process.execPath,
49
+ fileURLToPath(import.meta.url),
50
+ EMBEDDED_DEMO_FLAG,
51
+ ...args
52
+ ];
53
+ }
54
+ function toCliArgs(options) {
55
+ const args = [];
56
+ if (options.section) {
57
+ args.push(options.section);
58
+ }
59
+ if (options.list) {
60
+ args.push("--list");
61
+ }
62
+ if (options.animate) {
63
+ args.push("--animate");
64
+ }
65
+ if (options.outputMode === "json") {
66
+ args.push("--json");
67
+ } else if (options.outputMode === "jsonl") {
68
+ args.push("--jsonl");
69
+ }
70
+ return args;
71
+ }
72
+ function toOutputMode(mode) {
73
+ return mode;
74
+ }
75
+ function renderListSections() {
76
+ const sections = getPrimitiveIds();
77
+ return [
78
+ "Available demo sections:",
79
+ ...sections.map((s) => `- ${s}`),
80
+ "- all"
81
+ ].join(`
82
+ `);
83
+ }
84
+ function renderUnknownSection(section) {
85
+ const sections = getPrimitiveIds();
86
+ return [
87
+ `Unknown section: ${section}`,
88
+ "",
89
+ `Available sections: ${sections.join(", ")}, all`,
90
+ "",
91
+ "For app-specific sections (for example `errors`), run `outfitter-demo`."
92
+ ].join(`
93
+ `);
94
+ }
95
+ function parseEmbeddedOptions(argv) {
96
+ let section;
97
+ let list = false;
98
+ let animate = false;
99
+ let outputMode = "human";
100
+ for (const arg of argv) {
101
+ if (arg === "--list" || arg === "-l") {
102
+ list = true;
103
+ continue;
104
+ }
105
+ if (arg === "--animate" || arg === "-a") {
106
+ animate = true;
107
+ continue;
108
+ }
109
+ if (arg === "--json") {
110
+ outputMode = "json";
111
+ continue;
112
+ }
113
+ if (arg === "--jsonl") {
114
+ outputMode = "jsonl";
115
+ continue;
116
+ }
117
+ if (arg.startsWith("-")) {
118
+ throw new Error(`Unknown option: ${arg}`);
119
+ }
120
+ if (section !== undefined) {
121
+ throw new Error(`Unexpected argument: ${arg}`);
122
+ }
123
+ section = arg;
124
+ }
125
+ return { section, list, animate, outputMode };
126
+ }
127
+ async function runEmbeddedDemo(options) {
128
+ const mode = toOutputMode(options.outputMode);
129
+ if (options.list) {
130
+ await output(renderListSections(), { mode });
131
+ return 0;
132
+ }
133
+ if (options.animate) {
134
+ await output(renderDemo("spinner"), { mode });
135
+ return 0;
136
+ }
137
+ if (options.section === undefined || options.section === "all") {
138
+ await output(renderAllDemos(), { mode });
139
+ return 0;
140
+ }
141
+ if (!isPrimitiveId(options.section)) {
142
+ await output(renderUnknownSection(options.section), { mode });
143
+ return 1;
144
+ }
145
+ await output(renderDemo(options.section), { mode });
146
+ return 0;
147
+ }
148
+ async function runEmbeddedFromArgv() {
149
+ if (process.argv[2] !== EMBEDDED_DEMO_FLAG) {
150
+ return;
151
+ }
152
+ const options = parseEmbeddedOptions(process.argv.slice(3));
153
+ const exitCode = await runEmbeddedDemo(options);
154
+ process.exit(exitCode);
155
+ }
156
+ if (import.meta.main) {
157
+ runEmbeddedFromArgv().catch((error) => {
158
+ const message = error instanceof Error ? error.message : String(error);
159
+ process.stderr.write(`${message}
160
+ `);
161
+ process.exit(1);
162
+ });
163
+ }
164
+ async function runDemo(options) {
165
+ const args = toCliArgs(options);
166
+ const commandCandidates = [
167
+ ["outfitter-demo", ...args],
168
+ ["cli-demo", ...args],
169
+ ...await localDemoCmds(args),
170
+ embeddedDemoCmd(args)
171
+ ];
172
+ for (const cmd of commandCandidates) {
173
+ const exitCode = await tryRun(cmd);
174
+ if (exitCode !== undefined) {
175
+ return { exitCode };
176
+ }
177
+ }
178
+ throw new Error([
179
+ "Demo functionality moved to the dedicated demo app.",
180
+ "",
181
+ "Run one of:",
182
+ " outfitter-demo --help",
183
+ " cli-demo --help",
184
+ "",
185
+ "In this monorepo, you can also run:",
186
+ " bun run apps/cli-demo/src/cli.ts --help"
187
+ ].join(`
188
+ `));
189
+ }
190
+
191
+ export { runDemo };
@@ -0,0 +1,36 @@
1
+ // @bun
2
+ // apps/outfitter/src/commands/docs-module-loader.ts
3
+ import { existsSync } from "fs";
4
+ import { createRequire } from "module";
5
+ import { dirname, join } from "path";
6
+ import { pathToFileURL } from "url";
7
+ var require2 = createRequire(import.meta.url);
8
+ function resolveDocsEntrypoint() {
9
+ const packageJsonPath = require2.resolve("@outfitter/docs/package.json");
10
+ const packageRoot = dirname(packageJsonPath);
11
+ const srcEntrypoint = join(packageRoot, "src", "index.ts");
12
+ if (existsSync(srcEntrypoint)) {
13
+ return srcEntrypoint;
14
+ }
15
+ const distEntrypoint = join(packageRoot, "dist", "index.js");
16
+ if (existsSync(distEntrypoint)) {
17
+ return distEntrypoint;
18
+ }
19
+ throw new Error("Unable to resolve @outfitter/docs entrypoint (expected src/index.ts or dist/index.js).");
20
+ }
21
+ var docsModulePromise;
22
+ async function loadDocsModule() {
23
+ if (!docsModulePromise) {
24
+ docsModulePromise = (async () => {
25
+ const entrypoint = resolveDocsEntrypoint();
26
+ const module = await import(pathToFileURL(entrypoint).href);
27
+ if (typeof module.createDocsCommand !== "function" || typeof module.executeCheckCommand !== "function" || typeof module.executeSyncCommand !== "function" || typeof module.executeExportCommand !== "function") {
28
+ throw new Error("Resolved @outfitter/docs entrypoint does not export required docs functions.");
29
+ }
30
+ return module;
31
+ })();
32
+ }
33
+ return await docsModulePromise;
34
+ }
35
+
36
+ export { loadDocsModule };
@@ -0,0 +1,4 @@
1
+ import "../shared/outfitter-y784nh31";
2
+ import { INIT_TARGET_IDS, READY_TARGET_IDS, SCAFFOLD_TARGET_IDS, TARGET_IDS, TARGET_REGISTRY, getInitTarget, getReadyTarget, getScaffoldTarget, getTarget, listTargets, resolvePlacement } from "../shared/outfitter-33w361tc";
3
+ import { TargetCategory, TargetDefinition, TargetId, TargetScope, TargetStatus } from "../shared/outfitter-k56rmt24";
4
+ export { resolvePlacement, listTargets, getTarget, getScaffoldTarget, getReadyTarget, getInitTarget, TargetStatus, TargetScope, TargetId, TargetDefinition, TargetCategory, TARGET_REGISTRY, TARGET_IDS, SCAFFOLD_TARGET_IDS, READY_TARGET_IDS, INIT_TARGET_IDS };
@@ -0,0 +1,29 @@
1
+ // @bun
2
+ import"../shared/outfitter-ehp18x1n.js";
3
+ import {
4
+ INIT_TARGET_IDS,
5
+ READY_TARGET_IDS,
6
+ SCAFFOLD_TARGET_IDS,
7
+ TARGET_IDS,
8
+ TARGET_REGISTRY,
9
+ getInitTarget,
10
+ getReadyTarget,
11
+ getScaffoldTarget,
12
+ getTarget,
13
+ listTargets,
14
+ resolvePlacement
15
+ } from "../shared/outfitter-1dd0k853.js";
16
+ import"../shared/outfitter-mdt37hqm.js";
17
+ export {
18
+ resolvePlacement,
19
+ listTargets,
20
+ getTarget,
21
+ getScaffoldTarget,
22
+ getReadyTarget,
23
+ getInitTarget,
24
+ TARGET_REGISTRY,
25
+ TARGET_IDS,
26
+ SCAFFOLD_TARGET_IDS,
27
+ READY_TARGET_IDS,
28
+ INIT_TARGET_IDS
29
+ };
@@ -0,0 +1,3 @@
1
+ import { INIT_TARGET_IDS, READY_TARGET_IDS, SCAFFOLD_TARGET_IDS, TARGET_IDS, TARGET_REGISTRY, getInitTarget, getReadyTarget, getScaffoldTarget, getTarget, listTargets, resolvePlacement } from "../shared/outfitter-33w361tc";
2
+ import "../shared/outfitter-k56rmt24";
3
+ export { resolvePlacement, listTargets, getTarget, getScaffoldTarget, getReadyTarget, getInitTarget, TARGET_REGISTRY, TARGET_IDS, SCAFFOLD_TARGET_IDS, READY_TARGET_IDS, INIT_TARGET_IDS };
@@ -0,0 +1,28 @@
1
+ // @bun
2
+ import {
3
+ INIT_TARGET_IDS,
4
+ READY_TARGET_IDS,
5
+ SCAFFOLD_TARGET_IDS,
6
+ TARGET_IDS,
7
+ TARGET_REGISTRY,
8
+ getInitTarget,
9
+ getReadyTarget,
10
+ getScaffoldTarget,
11
+ getTarget,
12
+ listTargets,
13
+ resolvePlacement
14
+ } from "../shared/outfitter-1dd0k853.js";
15
+ import"../shared/outfitter-mdt37hqm.js";
16
+ export {
17
+ resolvePlacement,
18
+ listTargets,
19
+ getTarget,
20
+ getScaffoldTarget,
21
+ getReadyTarget,
22
+ getInitTarget,
23
+ TARGET_REGISTRY,
24
+ TARGET_IDS,
25
+ SCAFFOLD_TARGET_IDS,
26
+ READY_TARGET_IDS,
27
+ INIT_TARGET_IDS
28
+ };
@@ -0,0 +1,2 @@
1
+ import { TargetCategory, TargetDefinition, TargetId, TargetScope, TargetStatus } from "../shared/outfitter-k56rmt24";
2
+ export { TargetStatus, TargetScope, TargetId, TargetDefinition, TargetCategory };
@@ -0,0 +1 @@
1
+ // @bun
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "outfitter",
3
3
  "description": "Outfitter umbrella CLI for scaffolding and project management",
4
- "version": "0.2.2",
4
+ "version": "0.2.3",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -16,22 +16,34 @@
16
16
  "default": "./dist/index.js"
17
17
  }
18
18
  },
19
- "./commands/demo/errors": {
19
+ "./actions": {
20
20
  "import": {
21
- "types": "./dist/commands/demo/errors.d.ts",
22
- "default": "./dist/commands/demo/errors.js"
21
+ "types": "./dist/actions.d.ts",
22
+ "default": "./dist/actions.js"
23
23
  }
24
24
  },
25
- "./commands/update": {
25
+ "./commands/add": {
26
26
  "import": {
27
- "types": "./dist/commands/update.d.ts",
28
- "default": "./dist/commands/update.js"
27
+ "types": "./dist/commands/add.d.ts",
28
+ "default": "./dist/commands/add.js"
29
29
  }
30
30
  },
31
- "./commands/shared-deps": {
31
+ "./commands/check": {
32
32
  "import": {
33
- "types": "./dist/commands/shared-deps.d.ts",
34
- "default": "./dist/commands/shared-deps.js"
33
+ "types": "./dist/commands/check.d.ts",
34
+ "default": "./dist/commands/check.js"
35
+ }
36
+ },
37
+ "./commands/demo": {
38
+ "import": {
39
+ "types": "./dist/commands/demo.d.ts",
40
+ "default": "./dist/commands/demo.js"
41
+ }
42
+ },
43
+ "./commands/docs-module-loader": {
44
+ "import": {
45
+ "types": "./dist/commands/docs-module-loader.d.ts",
46
+ "default": "./dist/commands/docs-module-loader.js"
35
47
  }
36
48
  },
37
49
  "./commands/doctor": {
@@ -40,46 +52,52 @@
40
52
  "default": "./dist/commands/doctor.js"
41
53
  }
42
54
  },
55
+ "./commands/init": {
56
+ "import": {
57
+ "types": "./dist/commands/init.d.ts",
58
+ "default": "./dist/commands/init.js"
59
+ }
60
+ },
43
61
  "./commands/migrate-kit": {
44
62
  "import": {
45
63
  "types": "./dist/commands/migrate-kit.d.ts",
46
64
  "default": "./dist/commands/migrate-kit.js"
47
65
  }
48
66
  },
49
- "./commands/add": {
67
+ "./commands/repo": {
50
68
  "import": {
51
- "types": "./dist/commands/add.d.ts",
52
- "default": "./dist/commands/add.js"
69
+ "types": "./dist/commands/repo.d.ts",
70
+ "default": "./dist/commands/repo.js"
53
71
  }
54
72
  },
55
- "./commands/init": {
73
+ "./commands/scaffold": {
56
74
  "import": {
57
- "types": "./dist/commands/init.d.ts",
58
- "default": "./dist/commands/init.js"
75
+ "types": "./dist/commands/scaffold.d.ts",
76
+ "default": "./dist/commands/scaffold.js"
59
77
  }
60
78
  },
61
- "./commands/demo": {
79
+ "./commands/shared-deps": {
62
80
  "import": {
63
- "types": "./dist/commands/demo/index.d.ts",
64
- "default": "./dist/commands/demo/index.js"
81
+ "types": "./dist/commands/shared-deps.d.ts",
82
+ "default": "./dist/commands/shared-deps.js"
65
83
  }
66
84
  },
67
- "./actions": {
85
+ "./commands/update": {
68
86
  "import": {
69
- "types": "./dist/actions.d.ts",
70
- "default": "./dist/actions.js"
87
+ "types": "./dist/commands/update.d.ts",
88
+ "default": "./dist/commands/update.js"
71
89
  }
72
90
  },
73
- "./create/planner": {
91
+ "./commands/update-planner": {
74
92
  "import": {
75
- "types": "./dist/create/planner.d.ts",
76
- "default": "./dist/create/planner.js"
93
+ "types": "./dist/commands/update-planner.d.ts",
94
+ "default": "./dist/commands/update-planner.js"
77
95
  }
78
96
  },
79
- "./create/presets": {
97
+ "./commands/update-workspace": {
80
98
  "import": {
81
- "types": "./dist/create/presets.d.ts",
82
- "default": "./dist/create/presets.js"
99
+ "types": "./dist/commands/update-workspace.d.ts",
100
+ "default": "./dist/commands/update-workspace.js"
83
101
  }
84
102
  },
85
103
  "./create": {
@@ -88,19 +106,115 @@
88
106
  "default": "./dist/create/index.js"
89
107
  }
90
108
  },
109
+ "./create/planner": {
110
+ "import": {
111
+ "types": "./dist/create/planner.d.ts",
112
+ "default": "./dist/create/planner.js"
113
+ }
114
+ },
115
+ "./create/presets": {
116
+ "import": {
117
+ "types": "./dist/create/presets.d.ts",
118
+ "default": "./dist/create/presets.js"
119
+ }
120
+ },
91
121
  "./create/types": {
92
122
  "import": {
93
123
  "types": "./dist/create/types.d.ts",
94
124
  "default": "./dist/create/types.js"
95
125
  }
96
126
  },
97
- "./commands/create": {
127
+ "./engine": {
128
+ "import": {
129
+ "types": "./dist/engine/index.d.ts",
130
+ "default": "./dist/engine/index.js"
131
+ }
132
+ },
133
+ "./engine/blocks": {
134
+ "import": {
135
+ "types": "./dist/engine/blocks.d.ts",
136
+ "default": "./dist/engine/blocks.js"
137
+ }
138
+ },
139
+ "./engine/collector": {
140
+ "import": {
141
+ "types": "./dist/engine/collector.d.ts",
142
+ "default": "./dist/engine/collector.js"
143
+ }
144
+ },
145
+ "./engine/config": {
146
+ "import": {
147
+ "types": "./dist/engine/config.d.ts",
148
+ "default": "./dist/engine/config.js"
149
+ }
150
+ },
151
+ "./engine/executor": {
152
+ "import": {
153
+ "types": "./dist/engine/executor.d.ts",
154
+ "default": "./dist/engine/executor.js"
155
+ }
156
+ },
157
+ "./engine/names": {
158
+ "import": {
159
+ "types": "./dist/engine/names.d.ts",
160
+ "default": "./dist/engine/names.js"
161
+ }
162
+ },
163
+ "./engine/post-scaffold": {
98
164
  "import": {
99
- "types": "./dist/commands/create.d.ts",
100
- "default": "./dist/commands/create.js"
165
+ "types": "./dist/engine/post-scaffold.d.ts",
166
+ "default": "./dist/engine/post-scaffold.js"
101
167
  }
102
168
  },
103
- "./package.json": "./package.json"
169
+ "./engine/render-plan": {
170
+ "import": {
171
+ "types": "./dist/engine/render-plan.d.ts",
172
+ "default": "./dist/engine/render-plan.js"
173
+ }
174
+ },
175
+ "./engine/template": {
176
+ "import": {
177
+ "types": "./dist/engine/template.d.ts",
178
+ "default": "./dist/engine/template.js"
179
+ }
180
+ },
181
+ "./engine/types": {
182
+ "import": {
183
+ "types": "./dist/engine/types.d.ts",
184
+ "default": "./dist/engine/types.js"
185
+ }
186
+ },
187
+ "./engine/workspace": {
188
+ "import": {
189
+ "types": "./dist/engine/workspace.d.ts",
190
+ "default": "./dist/engine/workspace.js"
191
+ }
192
+ },
193
+ "./manifest": {
194
+ "import": {
195
+ "types": "./dist/manifest.d.ts",
196
+ "default": "./dist/manifest.js"
197
+ }
198
+ },
199
+ "./package.json": "./package.json",
200
+ "./targets": {
201
+ "import": {
202
+ "types": "./dist/targets/index.d.ts",
203
+ "default": "./dist/targets/index.js"
204
+ }
205
+ },
206
+ "./targets/registry": {
207
+ "import": {
208
+ "types": "./dist/targets/registry.d.ts",
209
+ "default": "./dist/targets/registry.js"
210
+ }
211
+ },
212
+ "./targets/types": {
213
+ "import": {
214
+ "types": "./dist/targets/types.d.ts",
215
+ "default": "./dist/targets/types.js"
216
+ }
217
+ }
104
218
  },
105
219
  "bin": {
106
220
  "outfitter": "./dist/cli.js",
@@ -115,6 +229,7 @@
115
229
  "test:watch": "bun test --watch",
116
230
  "lint": "biome lint ./src",
117
231
  "lint:fix": "biome lint --write ./src",
232
+ "pretypecheck": "bun run --filter @outfitter/logging build && bun run --filter @outfitter/cli build",
118
233
  "typecheck": "tsc --noEmit",
119
234
  "sync:templates": "bun run ../../scripts/sync-templates.ts",
120
235
  "prepack": "bun run sync:templates",
@@ -122,11 +237,13 @@
122
237
  },
123
238
  "dependencies": {
124
239
  "@clack/prompts": "^0.10.0",
125
- "@outfitter/cli": "0.3.0",
126
- "@outfitter/config": "0.3.0",
127
- "@outfitter/contracts": "0.2.0",
128
- "@outfitter/logging": "0.3.0",
129
- "@outfitter/tooling": "0.2.2",
240
+ "@outfitter/cli": "0.4.0",
241
+ "@outfitter/tui": "0.2.0",
242
+ "@outfitter/config": "0.3.1",
243
+ "@outfitter/contracts": "0.3.0",
244
+ "@outfitter/docs": "0.1.1",
245
+ "@outfitter/logging": "0.4.0",
246
+ "@outfitter/tooling": "0.2.3",
130
247
  "commander": "^14.0.2",
131
248
  "typescript": "^5.9.3",
132
249
  "zod": "^4.3.5"
@@ -0,0 +1,30 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Build output
5
+ dist/
6
+
7
+ # IDE
8
+ .idea/
9
+ .vscode/
10
+ *.swp
11
+ *.swo
12
+
13
+ # OS
14
+ .DS_Store
15
+ Thumbs.db
16
+
17
+ # Logs
18
+ *.log
19
+ npm-debug.log*
20
+
21
+ # Environment
22
+ .env
23
+ .env.local
24
+ .env.*.local
25
+
26
+ # Test coverage
27
+ coverage/
28
+
29
+ # Bun
30
+ bun.lockb
@@ -0,0 +1,26 @@
1
+ # Lefthook configuration
2
+ # https://github.com/evilmartians/lefthook
3
+
4
+ pre-commit:
5
+ parallel: true
6
+ commands:
7
+ format:
8
+ glob: "*.{js,ts,tsx,json,md}"
9
+ run: bunx biome format --no-errors-on-unmatched {staged_files}
10
+ stage_fixed: true
11
+
12
+ lint:
13
+ glob: "*.{js,ts,tsx}"
14
+ run: bunx biome lint --no-errors-on-unmatched {staged_files}
15
+
16
+ typecheck:
17
+ glob: "*.{ts,tsx}"
18
+ run: bun run typecheck
19
+
20
+ pre-push:
21
+ parallel: false
22
+ commands:
23
+ verify:
24
+ # TDD-aware strict verification with RED-phase branch carveout
25
+ # (*-tests, */tests, *_tests).
26
+ run: bunx @outfitter/tooling pre-push
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "{{packageName}}",
3
+ "version": "{{version}}",
4
+ "description": "{{description}}",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": {
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ }
17
+ }
18
+ },
19
+ "scripts": {
20
+ "build": "bun build ./src/index.ts --outdir=dist --format=esm",
21
+ "dev": "bun run --watch src/index.ts",
22
+ "test": "bun test",
23
+ "test:watch": "bun test --watch",
24
+ "typecheck": "tsc --noEmit",
25
+ "check": "ultracite check",
26
+ "verify:ci": "bun run typecheck && bun run check && bun run build && bun run test",
27
+ "lint": "biome check .",
28
+ "lint:fix": "biome check . --write",
29
+ "format": "biome format --write .",
30
+ "clean:artifacts": "rm -rf dist .turbo",
31
+ "clean": "rm -rf dist"
32
+ },
33
+ "devDependencies": {
34
+ "@biomejs/biome": "^2.3.12",
35
+ "@outfitter/tooling": "^0.2.1",
36
+ "@types/bun": "^1.3.7",
37
+ "lefthook": "^2.0.16",
38
+ "typescript": "^5.9.3",
39
+ "ultracite": "^7.1.1"
40
+ },
41
+ "engines": {
42
+ "bun": ">=1.3.7"
43
+ },
44
+ "keywords": [],
45
+ "license": "MIT"
46
+ }