outfitter 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +8 -5
  2. package/dist/actions.d.ts +2 -0
  3. package/dist/actions.js +34 -0
  4. package/dist/cli.js +1 -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/upgrade-codemods.d.ts +42 -0
  26. package/dist/commands/upgrade-codemods.js +15 -0
  27. package/dist/commands/upgrade-planner.d.ts +58 -0
  28. package/dist/commands/upgrade-planner.js +8 -0
  29. package/dist/commands/upgrade-workspace.d.ts +76 -0
  30. package/dist/commands/upgrade-workspace.js +16 -0
  31. package/dist/commands/upgrade.d.ts +214 -0
  32. package/dist/commands/upgrade.js +25 -0
  33. package/dist/create/index.d.ts +5 -0
  34. package/dist/create/index.js +29 -0
  35. package/dist/create/planner.d.ts +3 -0
  36. package/dist/create/planner.js +21 -0
  37. package/dist/create/presets.d.ts +3 -0
  38. package/dist/create/presets.js +12 -0
  39. package/dist/create/types.d.ts +2 -0
  40. package/dist/create/types.js +1 -0
  41. package/dist/engine/blocks.d.ts +3 -0
  42. package/dist/engine/blocks.js +12 -0
  43. package/dist/engine/collector.d.ts +2 -0
  44. package/dist/engine/collector.js +8 -0
  45. package/dist/engine/config.d.ts +3 -0
  46. package/dist/engine/config.js +12 -0
  47. package/dist/engine/executor.d.ts +3 -0
  48. package/dist/engine/executor.js +16 -0
  49. package/dist/engine/index.d.ts +8 -0
  50. package/dist/engine/index.js +59 -0
  51. package/dist/engine/names.d.ts +2 -0
  52. package/dist/engine/names.js +16 -0
  53. package/dist/engine/post-scaffold.d.ts +3 -0
  54. package/dist/engine/post-scaffold.js +8 -0
  55. package/dist/engine/render-plan.d.ts +7 -0
  56. package/dist/engine/render-plan.js +9 -0
  57. package/dist/engine/template.d.ts +3 -0
  58. package/dist/engine/template.js +17 -0
  59. package/dist/engine/types.d.ts +2 -0
  60. package/dist/engine/types.js +8 -0
  61. package/dist/engine/workspace.d.ts +3 -0
  62. package/dist/engine/workspace.js +13 -0
  63. package/dist/index.d.ts +10 -0
  64. package/dist/index.js +1 -1
  65. package/dist/manifest.d.ts +71 -0
  66. package/dist/manifest.js +16 -0
  67. package/dist/output-mode.d.ts +2 -0
  68. package/dist/output-mode.js +10 -0
  69. package/dist/shared/{chunk-tpwtpa74.js → chunk-k59f60cp.js} +858 -396
  70. package/dist/shared/outfitter-193jvzg4.d.ts +5 -0
  71. package/dist/shared/outfitter-1dd0k853.js +194 -0
  72. package/dist/shared/outfitter-1dvma85c.js +322 -0
  73. package/dist/shared/outfitter-1h7k8xxt.js +29 -0
  74. package/dist/shared/outfitter-2ngep1h2.d.ts +5 -0
  75. package/dist/shared/outfitter-2np85etz.js +95 -0
  76. package/dist/shared/outfitter-33w361tc.d.ts +18 -0
  77. package/dist/shared/outfitter-344t1r38.js +1 -0
  78. package/dist/shared/outfitter-3weh61w7.d.ts +25 -0
  79. package/dist/shared/outfitter-4s9meh3j.js +221 -0
  80. package/dist/shared/outfitter-66b25bj8.js +125 -0
  81. package/dist/shared/outfitter-6bkqjk86.d.ts +3 -0
  82. package/dist/shared/outfitter-79vfxt6y.js +269 -0
  83. package/dist/shared/outfitter-7ha7p61k.d.ts +6 -0
  84. package/dist/shared/outfitter-7r12fj7f.js +30 -0
  85. package/dist/shared/outfitter-8y2dfx6n.js +11 -0
  86. package/dist/shared/outfitter-9x1brcmq.js +184 -0
  87. package/dist/shared/outfitter-9zqc2njf.js +859 -0
  88. package/dist/shared/outfitter-a79xrm12.d.ts +17 -0
  89. package/dist/shared/outfitter-amc4jbs1.d.ts +50 -0
  90. package/dist/shared/outfitter-ara3djt0.js +73 -0
  91. package/dist/shared/outfitter-avhm5z6w.js +82 -0
  92. package/dist/shared/outfitter-bkwpbkr9.d.ts +63 -0
  93. package/dist/shared/outfitter-bn9c8p2e.js +204 -0
  94. package/dist/shared/outfitter-bpr28y54.js +70 -0
  95. package/dist/shared/outfitter-cwq39bv4.d.ts +48 -0
  96. package/dist/shared/outfitter-d7pq7d0k.js +196 -0
  97. package/dist/shared/outfitter-dd0btgec.d.ts +40 -0
  98. package/dist/shared/outfitter-e2zz5wv7.d.ts +51 -0
  99. package/dist/shared/outfitter-ehp18x1n.js +1 -0
  100. package/dist/shared/outfitter-gdvm5c0b.d.ts +4 -0
  101. package/dist/shared/outfitter-h1mnzzd1.d.ts +14 -0
  102. package/dist/shared/outfitter-hvsaxgcp.js +1 -0
  103. package/dist/shared/outfitter-hws10ze7.js +532 -0
  104. package/dist/shared/outfitter-j833sxws.js +61 -0
  105. package/dist/shared/outfitter-j8yc7294.d.ts +22 -0
  106. package/dist/shared/outfitter-k112c427.js +21 -0
  107. package/dist/shared/outfitter-k56rmt24.d.ts +30 -0
  108. package/dist/shared/outfitter-ksa1pp4t.d.ts +4 -0
  109. package/dist/shared/outfitter-ksyvwmb5.js +191 -0
  110. package/dist/shared/outfitter-mdt37hqm.js +4 -0
  111. package/dist/shared/outfitter-mtbpabf3.js +91 -0
  112. package/dist/shared/outfitter-mxz69pgy.js +713 -0
  113. package/dist/shared/outfitter-npemy7ta.d.ts +53 -0
  114. package/dist/shared/outfitter-npyfbdmc.d.ts +6 -0
  115. package/dist/shared/outfitter-pyy1zkfh.d.ts +133 -0
  116. package/dist/shared/outfitter-q9agarmb.js +42 -0
  117. package/dist/shared/outfitter-qfh36ddg.d.ts +66 -0
  118. package/dist/shared/outfitter-qn864k6h.js +581 -0
  119. package/dist/shared/outfitter-rdc5v5ms.js +746 -0
  120. package/dist/shared/outfitter-sgtq57qr.d.ts +5 -0
  121. package/dist/shared/outfitter-ttjr95y9.js +98 -0
  122. package/dist/shared/outfitter-vh4xgb93.js +35 -0
  123. package/dist/shared/outfitter-yvksv5qb.js +322 -0
  124. package/dist/shared/outfitter-zwyvewr1.js +36 -0
  125. package/dist/targets/index.d.ts +4 -0
  126. package/dist/targets/index.js +29 -0
  127. package/dist/targets/registry.d.ts +3 -0
  128. package/dist/targets/registry.js +28 -0
  129. package/dist/targets/types.d.ts +2 -0
  130. package/dist/targets/types.js +1 -0
  131. package/package.json +19 -12
@@ -0,0 +1,184 @@
1
+ // @bun
2
+ import {
3
+ ScaffoldError
4
+ } from "./outfitter-8y2dfx6n.js";
5
+
6
+ // apps/outfitter/src/engine/template.ts
7
+ import {
8
+ existsSync,
9
+ mkdirSync,
10
+ readdirSync,
11
+ readFileSync,
12
+ statSync,
13
+ writeFileSync
14
+ } from "fs";
15
+ import { dirname, extname, join } from "path";
16
+ import { fileURLToPath } from "url";
17
+ import { Result } from "@outfitter/contracts";
18
+ var BINARY_EXTENSIONS = new Set([
19
+ ".png",
20
+ ".jpg",
21
+ ".jpeg",
22
+ ".gif",
23
+ ".ico",
24
+ ".webp",
25
+ ".bmp",
26
+ ".tiff",
27
+ ".svg",
28
+ ".woff",
29
+ ".woff2",
30
+ ".ttf",
31
+ ".otf",
32
+ ".eot",
33
+ ".mp3",
34
+ ".mp4",
35
+ ".wav",
36
+ ".ogg",
37
+ ".webm",
38
+ ".zip",
39
+ ".tar",
40
+ ".gz",
41
+ ".bz2",
42
+ ".7z",
43
+ ".pdf",
44
+ ".exe",
45
+ ".dll",
46
+ ".so",
47
+ ".dylib",
48
+ ".node",
49
+ ".wasm",
50
+ ".bin",
51
+ ".dat",
52
+ ".db",
53
+ ".sqlite",
54
+ ".sqlite3"
55
+ ]);
56
+ function hasOutfitterPackage(dir) {
57
+ const packageJsonPath = join(dir, "package.json");
58
+ if (!existsSync(packageJsonPath)) {
59
+ return false;
60
+ }
61
+ try {
62
+ const content = readFileSync(packageJsonPath, "utf-8");
63
+ const parsed = JSON.parse(content);
64
+ return parsed.name === "outfitter";
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
69
+ function getTemplatesDir() {
70
+ let currentDir = dirname(fileURLToPath(import.meta.url));
71
+ for (let i = 0;i < 10; i++) {
72
+ const templatesPath = join(currentDir, "templates");
73
+ if (existsSync(templatesPath) && hasOutfitterPackage(currentDir)) {
74
+ return templatesPath;
75
+ }
76
+ currentDir = dirname(currentDir);
77
+ }
78
+ const fallback = join(process.cwd(), "apps/outfitter/templates");
79
+ if (existsSync(fallback)) {
80
+ return fallback;
81
+ }
82
+ return join(process.cwd(), "templates");
83
+ }
84
+ function getOutputFilename(templateFilename) {
85
+ return templateFilename.endsWith(".template") ? templateFilename.slice(0, -".template".length) : templateFilename;
86
+ }
87
+ function isBinaryFile(filename) {
88
+ return BINARY_EXTENSIONS.has(extname(filename).toLowerCase());
89
+ }
90
+ function replacePlaceholders(content, values) {
91
+ return content.replace(/\{\{(\w+)\}\}/g, (match, key) => {
92
+ if (Object.hasOwn(values, key)) {
93
+ return values[key];
94
+ }
95
+ return match;
96
+ });
97
+ }
98
+ function copyTemplateFiles(templateDir, targetDir, values, options, copyOptions) {
99
+ const allowOverwrite = copyOptions?.allowOverwrite ?? false;
100
+ const relativePrefix = copyOptions?.relativePrefix ?? "";
101
+ try {
102
+ if (!existsSync(targetDir)) {
103
+ if (options.collector) {
104
+ options.collector.add({
105
+ type: "dir-create",
106
+ path: targetDir
107
+ });
108
+ } else {
109
+ mkdirSync(targetDir, { recursive: true });
110
+ }
111
+ }
112
+ const entries = readdirSync(templateDir);
113
+ for (const entry of entries) {
114
+ const sourcePath = join(templateDir, entry);
115
+ const sourceStat = statSync(sourcePath);
116
+ const relativePath = relativePrefix ? `${relativePrefix}/${entry}` : entry;
117
+ if (copyOptions?.skipFilter?.(relativePath)) {
118
+ continue;
119
+ }
120
+ if (sourceStat.isDirectory()) {
121
+ const targetSubDir = join(targetDir, entry);
122
+ const nestedResult = copyTemplateFiles(sourcePath, targetSubDir, values, options, {
123
+ ...copyOptions,
124
+ relativePrefix: relativePath
125
+ });
126
+ if (nestedResult.isErr()) {
127
+ return nestedResult;
128
+ }
129
+ continue;
130
+ }
131
+ if (!sourceStat.isFile()) {
132
+ continue;
133
+ }
134
+ const outputFilename = getOutputFilename(entry);
135
+ const targetPath = join(targetDir, outputFilename);
136
+ const targetExists = existsSync(targetPath);
137
+ const canOverlay = allowOverwrite && (!targetExists || Boolean(copyOptions?.overwritablePaths?.has(targetPath)));
138
+ if (targetExists && !options.force && !canOverlay) {
139
+ if (options.collector) {
140
+ options.collector.add({
141
+ type: "file-skip",
142
+ path: targetPath,
143
+ reason: "exists"
144
+ });
145
+ continue;
146
+ }
147
+ return Result.err(new ScaffoldError(`File '${targetPath}' already exists. Use --force to overwrite.`));
148
+ }
149
+ if (options.collector) {
150
+ if (targetExists) {
151
+ options.collector.add({
152
+ type: "file-overwrite",
153
+ path: targetPath,
154
+ source: "template"
155
+ });
156
+ } else {
157
+ options.collector.add({
158
+ type: "file-create",
159
+ path: targetPath,
160
+ source: "template"
161
+ });
162
+ }
163
+ copyOptions?.writtenPaths?.add(targetPath);
164
+ continue;
165
+ }
166
+ if (isBinaryFile(outputFilename)) {
167
+ const buffer = readFileSync(sourcePath);
168
+ writeFileSync(targetPath, buffer);
169
+ copyOptions?.writtenPaths?.add(targetPath);
170
+ continue;
171
+ }
172
+ const content = readFileSync(sourcePath, "utf-8");
173
+ const processedContent = replacePlaceholders(content, values);
174
+ writeFileSync(targetPath, processedContent, "utf-8");
175
+ copyOptions?.writtenPaths?.add(targetPath);
176
+ }
177
+ return Result.ok(undefined);
178
+ } catch (error) {
179
+ const message = error instanceof Error ? error.message : "Unknown error";
180
+ return Result.err(new ScaffoldError(`Failed to copy template files: ${message}`));
181
+ }
182
+ }
183
+
184
+ export { getTemplatesDir, getOutputFilename, isBinaryFile, replacePlaceholders, copyTemplateFiles };