create-fumadocs-app 16.0.35 → 16.0.37

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/dist/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { n as getPackageManager, r as managers, t as create } from "./src-z4C6ZcL7.js";
3
- import { i as templates, n as isCI } from "./constants-DkM_O5ux.js";
2
+ import { i as templates, n as isCI } from "./constants-NGKLVn0G.js";
3
+ import { n as getPackageManager, r as managers, t as create } from "./src-BY2BFgAW.js";
4
4
  import fs from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
@@ -0,0 +1,1007 @@
1
+ import fs from "node:fs/promises";
2
+ import path, { join } from "node:path";
3
+ import { x } from "tinyexec";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ //#region rolldown:runtime
7
+ var __defProp = Object.defineProperty;
8
+ var __exportAll = (all, symbols) => {
9
+ let target = {};
10
+ for (var name$5 in all) {
11
+ __defProp(target, name$5, {
12
+ get: all[name$5],
13
+ enumerable: true
14
+ });
15
+ }
16
+ if (symbols) {
17
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
18
+ }
19
+ return target;
20
+ };
21
+
22
+ //#endregion
23
+ //#region src/utils.ts
24
+ async function writeFile(file, content) {
25
+ await fs.mkdir(path.dirname(file), { recursive: true });
26
+ await fs.writeFile(file, content);
27
+ }
28
+ async function copy(from, to, options = {}) {
29
+ const { rename = (s) => s, filterDir = () => true, filter = () => true } = options;
30
+ const stats = await fs.stat(from);
31
+ if (stats.isDirectory() && filterDir(from)) {
32
+ const files$5 = await fs.readdir(from);
33
+ await Promise.all(files$5.map((file) => copy(path.join(from, file), path.join(to, file), options)));
34
+ }
35
+ if (stats.isFile() && filter(from)) {
36
+ to = rename(to);
37
+ await fs.mkdir(path.dirname(to), { recursive: true });
38
+ await fs.copyFile(from, to);
39
+ }
40
+ }
41
+ async function isInGitRepository(cwd) {
42
+ const { exitCode } = await x("git", ["rev-parse", "--is-inside-work-tree"], { nodeOptions: { cwd } });
43
+ return exitCode === 0;
44
+ }
45
+ async function isDefaultBranchSet(cwd) {
46
+ const { exitCode } = await x("git", ["config", "init.defaultBranch"], { nodeOptions: { cwd } });
47
+ return exitCode === 0;
48
+ }
49
+ async function tryGitInit(cwd) {
50
+ const { exitCode } = await x("git", ["--version"]);
51
+ if (exitCode !== 0) return false;
52
+ if (await isInGitRepository(cwd)) return false;
53
+ try {
54
+ await x("git", ["init"], {
55
+ throwOnError: true,
56
+ nodeOptions: { cwd }
57
+ });
58
+ if (!await isDefaultBranchSet(cwd)) await x("git", [
59
+ "checkout",
60
+ "-b",
61
+ "main"
62
+ ], {
63
+ throwOnError: true,
64
+ nodeOptions: { cwd }
65
+ });
66
+ await x("git", ["add", "-A"], {
67
+ throwOnError: true,
68
+ nodeOptions: { cwd }
69
+ });
70
+ await x("git", [
71
+ "commit",
72
+ "-m",
73
+ "Initial commit from Create Fumadocs App"
74
+ ], {
75
+ throwOnError: true,
76
+ nodeOptions: { cwd }
77
+ });
78
+ return true;
79
+ } catch {
80
+ await fs.rmdir(join(cwd, ".git"), { recursive: true }).catch(() => null);
81
+ return false;
82
+ }
83
+ }
84
+ function pick(obj, keys) {
85
+ const result = {};
86
+ for (const key of keys) if (key in obj) result[key] = obj[key];
87
+ return result;
88
+ }
89
+
90
+ //#endregion
91
+ //#region ../create-app-versions/package.json
92
+ var dependencies$5 = {
93
+ "@biomejs/biome": "^2.3.11",
94
+ "@fumadocs/ui": "workspace:*",
95
+ "@orama/core": "^1.2.16",
96
+ "eslint": "^9.39.2",
97
+ "fumadocs-core": "workspace:*",
98
+ "fumadocs-mdx": "workspace:*",
99
+ "fumadocs-ui": "workspace:*"
100
+ };
101
+
102
+ //#endregion
103
+ //#region ../core/package.json
104
+ var package_exports$4 = /* @__PURE__ */ __exportAll({
105
+ author: () => author$4,
106
+ default: () => package_default$4,
107
+ dependencies: () => dependencies$4,
108
+ description: () => description$4,
109
+ devDependencies: () => devDependencies$4,
110
+ exports: () => exports$4,
111
+ files: () => files$4,
112
+ homepage: () => homepage$4,
113
+ keywords: () => keywords$4,
114
+ license: () => license$4,
115
+ name: () => name$4,
116
+ peerDependencies: () => peerDependencies$4,
117
+ peerDependenciesMeta: () => peerDependenciesMeta$4,
118
+ publishConfig: () => publishConfig$4,
119
+ repository: () => repository$4,
120
+ scripts: () => scripts$4,
121
+ type: () => type$4,
122
+ version: () => version$4
123
+ });
124
+ var name$4 = "fumadocs-core";
125
+ var version$4 = "16.4.4";
126
+ var description$4 = "The React.js library for building a documentation website";
127
+ var keywords$4 = ["Docs", "Fumadocs"];
128
+ var homepage$4 = "https://fumadocs.dev";
129
+ var license$4 = "MIT";
130
+ var author$4 = "Fuma Nama";
131
+ var repository$4 = "github:fuma-nama/fumadocs";
132
+ var files$4 = ["dist/*"];
133
+ var type$4 = "module";
134
+ var exports$4 = {
135
+ "./breadcrumb": {
136
+ "types": "./dist/breadcrumb.d.ts",
137
+ "import": "./dist/breadcrumb.js"
138
+ },
139
+ "./toc": {
140
+ "types": "./dist/toc.d.ts",
141
+ "import": "./dist/toc.js"
142
+ },
143
+ "./content": {
144
+ "types": "./dist/content/index.d.ts",
145
+ "import": "./dist/content/index.js"
146
+ },
147
+ "./content/*": {
148
+ "types": "./dist/content/*.d.ts",
149
+ "import": "./dist/content/*.js"
150
+ },
151
+ "./negotiation": {
152
+ "types": "./dist/negotiation/index.d.ts",
153
+ "import": "./dist/negotiation/index.js"
154
+ },
155
+ "./page-tree": {
156
+ "types": "./dist/page-tree/index.d.ts",
157
+ "import": "./dist/page-tree/index.js"
158
+ },
159
+ "./search": {
160
+ "types": "./dist/search/index.d.ts",
161
+ "import": "./dist/search/index.js"
162
+ },
163
+ "./search/*": {
164
+ "types": "./dist/search/*.d.ts",
165
+ "import": "./dist/search/*.js"
166
+ },
167
+ "./source": {
168
+ "types": "./dist/source/index.d.ts",
169
+ "import": "./dist/source/index.js"
170
+ },
171
+ "./source/client": {
172
+ "types": "./dist/source/client/index.d.ts",
173
+ "import": "./dist/source/client/index.js"
174
+ },
175
+ "./source/schema": {
176
+ "types": "./dist/source/schema.d.ts",
177
+ "import": "./dist/source/schema.js"
178
+ },
179
+ "./source/*": {
180
+ "types": "./dist/source/plugins/*.d.ts",
181
+ "import": "./dist/source/plugins/*.js"
182
+ },
183
+ "./utils/*": {
184
+ "types": "./dist/utils/*.d.ts",
185
+ "import": "./dist/utils/*.js"
186
+ },
187
+ "./link": {
188
+ "types": "./dist/link.d.ts",
189
+ "import": "./dist/link.js"
190
+ },
191
+ "./dynamic-link": {
192
+ "types": "./dist/dynamic-link.d.ts",
193
+ "import": "./dist/dynamic-link.js"
194
+ },
195
+ "./mdx-plugins": {
196
+ "types": "./dist/mdx-plugins/index.d.ts",
197
+ "import": "./dist/mdx-plugins/index.js"
198
+ },
199
+ "./mdx-plugins/*": {
200
+ "types": "./dist/mdx-plugins/*.d.ts",
201
+ "import": "./dist/mdx-plugins/*.js"
202
+ },
203
+ "./i18n": {
204
+ "types": "./dist/i18n/index.d.ts",
205
+ "import": "./dist/i18n/index.js"
206
+ },
207
+ "./i18n/middleware": {
208
+ "types": "./dist/i18n/middleware.d.ts",
209
+ "import": "./dist/i18n/middleware.js"
210
+ },
211
+ "./highlight": {
212
+ "types": "./dist/highlight/index.d.ts",
213
+ "import": "./dist/highlight/index.js"
214
+ },
215
+ "./highlight/client": {
216
+ "types": "./dist/highlight/client.d.ts",
217
+ "import": "./dist/highlight/client.js"
218
+ },
219
+ "./framework": {
220
+ "types": "./dist/framework/index.d.ts",
221
+ "import": "./dist/framework/index.js"
222
+ },
223
+ "./framework/*": {
224
+ "types": "./dist/framework/*.d.ts",
225
+ "import": "./dist/framework/*.js"
226
+ }
227
+ };
228
+ var publishConfig$4 = { "access": "public" };
229
+ var scripts$4 = {
230
+ "build": "tsdown",
231
+ "clean": "rimraf dist",
232
+ "dev": "tsdown --watch",
233
+ "lint": "eslint .",
234
+ "types:check": "tsc --noEmit"
235
+ };
236
+ var dependencies$4 = {
237
+ "@formatjs/intl-localematcher": "^0.7.4",
238
+ "@orama/orama": "^3.1.18",
239
+ "@shikijs/rehype": "^3.20.0",
240
+ "@shikijs/transformers": "^3.20.0",
241
+ "estree-util-value-to-estree": "^3.5.0",
242
+ "github-slugger": "^2.0.0",
243
+ "hast-util-to-estree": "^3.1.3",
244
+ "hast-util-to-jsx-runtime": "^2.3.6",
245
+ "image-size": "^2.0.2",
246
+ "negotiator": "^1.0.0",
247
+ "npm-to-yarn": "^3.0.1",
248
+ "path-to-regexp": "^8.3.0",
249
+ "remark": "^15.0.1",
250
+ "remark-gfm": "^4.0.1",
251
+ "remark-rehype": "^11.1.2",
252
+ "scroll-into-view-if-needed": "^3.1.0",
253
+ "shiki": "^3.20.0",
254
+ "tinyglobby": "^0.2.15",
255
+ "unist-util-visit": "^5.0.0"
256
+ };
257
+ var devDependencies$4 = {
258
+ "@mdx-js/mdx": "^3.1.1",
259
+ "@mixedbread/sdk": "^0.46.0",
260
+ "@orama/core": "^1.2.16",
261
+ "@oramacloud/client": "^2.1.4",
262
+ "@tanstack/react-router": "1.144.0",
263
+ "@types/estree-jsx": "^1.0.5",
264
+ "@types/hast": "^3.0.4",
265
+ "@types/mdast": "^4.0.4",
266
+ "@types/negotiator": "^0.6.4",
267
+ "@types/node": "24.10.2",
268
+ "@types/react": "^19.2.7",
269
+ "@types/react-dom": "^19.2.3",
270
+ "algoliasearch": "5.46.2",
271
+ "eslint-config-custom": "workspace:*",
272
+ "lucide-react": "^0.562.0",
273
+ "mdast-util-mdx-jsx": "^3.2.0",
274
+ "mdast-util-mdxjs-esm": "^2.0.1",
275
+ "next": "16.1.1",
276
+ "react-router": "^7.11.0",
277
+ "remark-directive": "^4.0.0",
278
+ "remark-mdx": "^3.1.1",
279
+ "remove-markdown": "^0.6.2",
280
+ "tsconfig": "workspace:*",
281
+ "tsdown": "^0.18.4",
282
+ "typescript": "^5.9.3",
283
+ "unified": "^11.0.5",
284
+ "vfile": "^6.0.3",
285
+ "waku": "1.0.0-alpha.0",
286
+ "zod": "^4.3.5"
287
+ };
288
+ var peerDependencies$4 = {
289
+ "@mixedbread/sdk": "^0.46.0",
290
+ "@orama/core": "1.x.x",
291
+ "@oramacloud/client": "2.x.x",
292
+ "@tanstack/react-router": "1.x.x",
293
+ "@types/react": "*",
294
+ "algoliasearch": "5.x.x",
295
+ "lucide-react": "*",
296
+ "next": "16.x.x",
297
+ "react": "^19.2.0",
298
+ "react-dom": "^19.2.0",
299
+ "react-router": "7.x.x",
300
+ "waku": "^0.26.0 || ^0.27.0",
301
+ "zod": "4.x.x"
302
+ };
303
+ var peerDependenciesMeta$4 = {
304
+ "@mixedbread/sdk": { "optional": true },
305
+ "@types/react": { "optional": true },
306
+ "@orama/core": { "optional": true },
307
+ "@oramacloud/client": { "optional": true },
308
+ "algoliasearch": { "optional": true },
309
+ "next": { "optional": true },
310
+ "react": { "optional": true },
311
+ "react-dom": { "optional": true },
312
+ "react-router": { "optional": true },
313
+ "waku": { "optional": true },
314
+ "@tanstack/react-router": { "optional": true },
315
+ "lucide-react": { "optional": true },
316
+ "zod": { "optional": true }
317
+ };
318
+ var package_default$4 = {
319
+ name: name$4,
320
+ version: version$4,
321
+ description: description$4,
322
+ keywords: keywords$4,
323
+ homepage: homepage$4,
324
+ license: license$4,
325
+ author: author$4,
326
+ repository: repository$4,
327
+ files: files$4,
328
+ type: type$4,
329
+ exports: exports$4,
330
+ publishConfig: publishConfig$4,
331
+ scripts: scripts$4,
332
+ dependencies: dependencies$4,
333
+ devDependencies: devDependencies$4,
334
+ peerDependencies: peerDependencies$4,
335
+ peerDependenciesMeta: peerDependenciesMeta$4
336
+ };
337
+
338
+ //#endregion
339
+ //#region ../ui/package.json
340
+ var package_exports$3 = /* @__PURE__ */ __exportAll({
341
+ author: () => author$3,
342
+ default: () => package_default$3,
343
+ dependencies: () => dependencies$3,
344
+ description: () => description$3,
345
+ devDependencies: () => devDependencies$3,
346
+ exports: () => exports$3,
347
+ files: () => files$3,
348
+ homepage: () => homepage$3,
349
+ keywords: () => keywords$3,
350
+ license: () => license$3,
351
+ name: () => name$3,
352
+ peerDependencies: () => peerDependencies$3,
353
+ peerDependenciesMeta: () => peerDependenciesMeta$3,
354
+ publishConfig: () => publishConfig$3,
355
+ repository: () => repository$3,
356
+ scripts: () => scripts$3,
357
+ type: () => type$3,
358
+ version: () => version$3
359
+ });
360
+ var name$3 = "@fumadocs/ui";
361
+ var version$3 = "16.4.4";
362
+ var description$3 = "The low-level primitives for Fumadocs UI.";
363
+ var keywords$3 = ["Docs", "Fumadocs"];
364
+ var homepage$3 = "https://fumadocs.dev";
365
+ var license$3 = "MIT";
366
+ var author$3 = "Fuma Nama";
367
+ var repository$3 = "github:fuma-nama/fumadocs";
368
+ var files$3 = ["css/*", "dist/*"];
369
+ var type$3 = "module";
370
+ var exports$3 = {
371
+ "./css/*": "./css/*",
372
+ "./*": {
373
+ "types": "./dist/*.d.ts",
374
+ "import": "./dist/*.js"
375
+ }
376
+ };
377
+ var publishConfig$3 = { "access": "public" };
378
+ var scripts$3 = {
379
+ "build": "tsdown",
380
+ "clean": "rimraf dist",
381
+ "dev": "tsdown --watch",
382
+ "lint": "eslint .",
383
+ "types:check": "tsc --noEmit"
384
+ };
385
+ var dependencies$3 = {
386
+ "fumadocs-core": "workspace:*",
387
+ "next-themes": "^0.4.6",
388
+ "postcss-selector-parser": "^7.1.1",
389
+ "tailwind-merge": "^3.4.0"
390
+ };
391
+ var devDependencies$3 = {
392
+ "@fumadocs/cli": "workspace:*",
393
+ "@types/bun": "^1.3.5",
394
+ "@types/lodash.merge": "^4.6.9",
395
+ "@types/node": "^24.10.2",
396
+ "@types/react": "^19.2.7",
397
+ "@types/react-dom": "^19.2.3",
398
+ "class-variance-authority": "^0.7.1",
399
+ "eslint-config-custom": "workspace:*",
400
+ "fumadocs-core": "workspace:*",
401
+ "lodash.merge": "^4.6.2",
402
+ "next": "16.1.1",
403
+ "tailwindcss": "^4.1.18",
404
+ "tsconfig": "workspace:*",
405
+ "tsdown": "^0.18.4"
406
+ };
407
+ var peerDependencies$3 = {
408
+ "@types/react": "*",
409
+ "next": "16.x.x",
410
+ "react": "^19.2.0",
411
+ "react-dom": "^19.2.0",
412
+ "tailwindcss": "^4.0.0"
413
+ };
414
+ var peerDependenciesMeta$3 = {
415
+ "next": { "optional": true },
416
+ "@types/react": { "optional": true },
417
+ "tailwindcss": { "optional": true }
418
+ };
419
+ var package_default$3 = {
420
+ name: name$3,
421
+ version: version$3,
422
+ description: description$3,
423
+ keywords: keywords$3,
424
+ homepage: homepage$3,
425
+ license: license$3,
426
+ author: author$3,
427
+ repository: repository$3,
428
+ files: files$3,
429
+ type: type$3,
430
+ exports: exports$3,
431
+ publishConfig: publishConfig$3,
432
+ scripts: scripts$3,
433
+ dependencies: dependencies$3,
434
+ devDependencies: devDependencies$3,
435
+ peerDependencies: peerDependencies$3,
436
+ peerDependenciesMeta: peerDependenciesMeta$3
437
+ };
438
+
439
+ //#endregion
440
+ //#region ../mdx/package.json
441
+ var package_exports$2 = /* @__PURE__ */ __exportAll({
442
+ author: () => author$2,
443
+ bin: () => bin,
444
+ default: () => package_default$2,
445
+ dependencies: () => dependencies$2,
446
+ description: () => description$2,
447
+ devDependencies: () => devDependencies$2,
448
+ exports: () => exports$2,
449
+ files: () => files$2,
450
+ homepage: () => homepage$2,
451
+ keywords: () => keywords$2,
452
+ license: () => license$2,
453
+ main: () => main,
454
+ name: () => name$2,
455
+ peerDependencies: () => peerDependencies$2,
456
+ peerDependenciesMeta: () => peerDependenciesMeta$2,
457
+ publishConfig: () => publishConfig$2,
458
+ repository: () => repository$2,
459
+ scripts: () => scripts$2,
460
+ type: () => type$2,
461
+ types: () => types,
462
+ version: () => version$2
463
+ });
464
+ var name$2 = "fumadocs-mdx";
465
+ var version$2 = "14.2.4";
466
+ var description$2 = "The built-in source for Fumadocs";
467
+ var keywords$2 = ["Docs", "NextJs"];
468
+ var homepage$2 = "https://fumadocs.dev";
469
+ var license$2 = "MIT";
470
+ var author$2 = "Fuma Nama";
471
+ var repository$2 = "github:fuma-nama/fumadocs";
472
+ var bin = "./dist/bin.js";
473
+ var files$2 = [
474
+ "loader-mdx.cjs",
475
+ "loader-meta.cjs",
476
+ "dist/*"
477
+ ];
478
+ var type$2 = "module";
479
+ var main = "./dist/index.js";
480
+ var types = "./dist/index.d.ts";
481
+ var exports$2 = {
482
+ "./loader-mdx": "./loader-mdx.cjs",
483
+ "./loader-meta": "./loader-meta.cjs",
484
+ "./config": {
485
+ "types": "./dist/config/index.d.ts",
486
+ "import": "./dist/config/index.js"
487
+ },
488
+ "./next": {
489
+ "types": "./dist/next/index.d.ts",
490
+ "import": "./dist/next/index.js",
491
+ "require": "./dist/next/index.cjs"
492
+ },
493
+ "./vite": {
494
+ "types": "./dist/vite/index.d.ts",
495
+ "import": "./dist/vite/index.js"
496
+ },
497
+ ".": {
498
+ "types": "./dist/index.d.ts",
499
+ "import": "./dist/index.js"
500
+ },
501
+ "./runtime/*": {
502
+ "types": "./dist/runtime/*.d.ts",
503
+ "import": "./dist/runtime/*.js"
504
+ },
505
+ "./node/loader": {
506
+ "types": "./dist/node/loader.d.ts",
507
+ "import": "./dist/node/loader.js"
508
+ },
509
+ "./bun": {
510
+ "types": "./dist/bun/index.d.ts",
511
+ "import": "./dist/bun/index.js"
512
+ },
513
+ "./plugins/*": {
514
+ "types": "./dist/plugins/*.d.ts",
515
+ "import": "./dist/plugins/*.js"
516
+ }
517
+ };
518
+ var publishConfig$2 = { "access": "public" };
519
+ var scripts$2 = {
520
+ "build": "tsdown",
521
+ "clean": "rimraf dist",
522
+ "dev": "tsdown --watch",
523
+ "lint": "eslint .",
524
+ "types:check": "tsc --noEmit"
525
+ };
526
+ var dependencies$2 = {
527
+ "@mdx-js/mdx": "^3.1.1",
528
+ "@standard-schema/spec": "^1.1.0",
529
+ "chokidar": "^5.0.0",
530
+ "esbuild": "^0.27.2",
531
+ "estree-util-value-to-estree": "^3.5.0",
532
+ "js-yaml": "^4.1.1",
533
+ "mdast-util-to-markdown": "^2.1.2",
534
+ "picocolors": "^1.1.1",
535
+ "picomatch": "^4.0.3",
536
+ "remark-mdx": "^3.1.1",
537
+ "tinyexec": "^1.0.2",
538
+ "tinyglobby": "^0.2.15",
539
+ "unified": "^11.0.5",
540
+ "unist-util-remove-position": "^5.0.0",
541
+ "unist-util-visit": "^5.0.0",
542
+ "vfile": "^6.0.3",
543
+ "zod": "^4.3.5"
544
+ };
545
+ var devDependencies$2 = {
546
+ "@fumadocs/mdx-remote": "workspace:*",
547
+ "@types/bun": "^1.3.5",
548
+ "@types/js-yaml": "^4.0.9",
549
+ "@types/mdast": "^4.0.4",
550
+ "@types/mdx": "^2.0.13",
551
+ "@types/node": "^24.10.2",
552
+ "@types/picomatch": "^4.0.2",
553
+ "@types/react": "^19.2.7",
554
+ "eslint-config-custom": "workspace:*",
555
+ "fumadocs-core": "workspace:*",
556
+ "mdast-util-directive": "^3.1.0",
557
+ "mdast-util-mdx-jsx": "^3.2.0",
558
+ "next": "16.1.1",
559
+ "react": "^19.2.3",
560
+ "remark": "^15.0.1",
561
+ "remark-directive": "^4.0.0",
562
+ "remark-stringify": "^11.0.0",
563
+ "rollup": "^4.55.1",
564
+ "tsconfig": "workspace:*",
565
+ "tsdown": "^0.18.4",
566
+ "vite": "^7.3.0",
567
+ "webpack": "^5.104.1"
568
+ };
569
+ var peerDependencies$2 = {
570
+ "@fumadocs/mdx-remote": "^1.4.0",
571
+ "@types/react": "*",
572
+ "fumadocs-core": "^15.0.0 || ^16.0.0",
573
+ "next": "^15.3.0 || ^16.0.0",
574
+ "react": "*",
575
+ "vite": "6.x.x || 7.x.x"
576
+ };
577
+ var peerDependenciesMeta$2 = {
578
+ "react": { "optional": true },
579
+ "@types/react": { "optional": true },
580
+ "next": { "optional": true },
581
+ "vite": { "optional": true },
582
+ "@fumadocs/mdx-remote": { "optional": true }
583
+ };
584
+ var package_default$2 = {
585
+ name: name$2,
586
+ version: version$2,
587
+ description: description$2,
588
+ keywords: keywords$2,
589
+ homepage: homepage$2,
590
+ license: license$2,
591
+ author: author$2,
592
+ repository: repository$2,
593
+ bin,
594
+ files: files$2,
595
+ type: type$2,
596
+ main,
597
+ types,
598
+ exports: exports$2,
599
+ publishConfig: publishConfig$2,
600
+ scripts: scripts$2,
601
+ dependencies: dependencies$2,
602
+ devDependencies: devDependencies$2,
603
+ peerDependencies: peerDependencies$2,
604
+ peerDependenciesMeta: peerDependenciesMeta$2
605
+ };
606
+
607
+ //#endregion
608
+ //#region ../radix-ui/package.json
609
+ var package_exports$1 = /* @__PURE__ */ __exportAll({
610
+ author: () => author$1,
611
+ default: () => package_default$1,
612
+ dependencies: () => dependencies$1,
613
+ description: () => description$1,
614
+ devDependencies: () => devDependencies$1,
615
+ exports: () => exports$1,
616
+ files: () => files$1,
617
+ homepage: () => homepage$1,
618
+ keywords: () => keywords$1,
619
+ license: () => license$1,
620
+ name: () => name$1,
621
+ peerDependencies: () => peerDependencies$1,
622
+ peerDependenciesMeta: () => peerDependenciesMeta$1,
623
+ publishConfig: () => publishConfig$1,
624
+ repository: () => repository$1,
625
+ scripts: () => scripts$1,
626
+ type: () => type$1,
627
+ version: () => version$1
628
+ });
629
+ var name$1 = "fumadocs-ui";
630
+ var version$1 = "16.4.4";
631
+ var description$1 = "The Radix UI version of Fumadocs UI";
632
+ var keywords$1 = ["Docs", "Fumadocs"];
633
+ var homepage$1 = "https://fumadocs.dev";
634
+ var license$1 = "MIT";
635
+ var author$1 = "Fuma Nama";
636
+ var repository$1 = "github:fuma-nama/fumadocs";
637
+ var files$1 = ["css/*", "dist/*"];
638
+ var type$1 = "module";
639
+ var exports$1 = {
640
+ "./style.css": "./dist/style.css",
641
+ "./css/*": "./css/*",
642
+ "./image-zoom.css": "./dist/image-zoom.css",
643
+ "./components/tabs.unstyled": {
644
+ "types": "./dist/components/ui/tabs.d.ts",
645
+ "import": "./dist/components/ui/tabs.js"
646
+ },
647
+ "./components/*": {
648
+ "types": "./dist/components/*.d.ts",
649
+ "import": "./dist/components/*.js",
650
+ "default": "./dist/components/*.js"
651
+ },
652
+ "./i18n": {
653
+ "types": "./dist/i18n.d.ts",
654
+ "import": "./dist/i18n.js"
655
+ },
656
+ "./layouts/home": {
657
+ "types": "./dist/layouts/home/index.d.ts",
658
+ "import": "./dist/layouts/home/index.js"
659
+ },
660
+ "./layouts/home/navbar": {
661
+ "types": "./dist/layouts/home/navbar.d.ts",
662
+ "import": "./dist/layouts/home/navbar.js"
663
+ },
664
+ "./layouts/docs": {
665
+ "types": "./dist/layouts/docs/index.d.ts",
666
+ "import": "./dist/layouts/docs/index.js"
667
+ },
668
+ "./layouts/docs/page": {
669
+ "types": "./dist/layouts/docs/page/index.d.ts",
670
+ "import": "./dist/layouts/docs/page/index.js"
671
+ },
672
+ "./layouts/notebook": {
673
+ "types": "./dist/layouts/notebook/index.d.ts",
674
+ "import": "./dist/layouts/notebook/index.js"
675
+ },
676
+ "./layouts/notebook/page": {
677
+ "types": "./dist/layouts/notebook/page/index.d.ts",
678
+ "import": "./dist/layouts/notebook/page/index.js"
679
+ },
680
+ "./layouts/shared": {
681
+ "types": "./dist/layouts/shared/index.d.ts",
682
+ "import": "./dist/layouts/shared/index.js"
683
+ },
684
+ "./page": {
685
+ "types": "./dist/page.d.ts",
686
+ "import": "./dist/page.js"
687
+ },
688
+ "./provider/*": {
689
+ "types": "./dist/provider/*.d.ts",
690
+ "import": "./dist/provider/*.js"
691
+ },
692
+ "./contexts/*": {
693
+ "types": "./dist/contexts/*.d.ts",
694
+ "import": "./dist/contexts/*.js"
695
+ },
696
+ "./mdx": {
697
+ "types": "./dist/mdx.d.ts",
698
+ "node": "./dist/mdx.server.js",
699
+ "import": "./dist/mdx.js"
700
+ },
701
+ "./og": {
702
+ "types": "./dist/og.d.ts",
703
+ "import": "./dist/og.js"
704
+ },
705
+ "./utils/get-sidebar-tabs": {
706
+ "types": "./dist/components/sidebar/tabs/index.d.ts",
707
+ "import": "./dist/components/sidebar/tabs/index.js"
708
+ },
709
+ "./utils/*": {
710
+ "types": "./dist/utils/*.d.ts",
711
+ "import": "./dist/utils/*.js"
712
+ }
713
+ };
714
+ var publishConfig$1 = { "access": "public" };
715
+ var scripts$1 = {
716
+ "build": "pnpm build:layout && pnpm build:tailwind",
717
+ "build:layout": "tsdown",
718
+ "build:tailwind": "tailwindcss -i css/style.css -o ./dist/style.css && tailwindcss -i src/components/image-zoom.css -o dist/components/image-zoom.css",
719
+ "clean": "rimraf dist",
720
+ "dev": "concurrently \"tsdown --watch\" \"tailwindcss -i css/style.css -o ./dist/style.css -w\" \"tailwindcss -i src/components/image-zoom.css -o dist/components/image-zoom.css -w\"",
721
+ "lint": "eslint .",
722
+ "types:check": "tsc --noEmit"
723
+ };
724
+ var dependencies$1 = {
725
+ "@fumadocs/ui": "workspace:*",
726
+ "@radix-ui/react-accordion": "^1.2.12",
727
+ "@radix-ui/react-collapsible": "^1.1.12",
728
+ "@radix-ui/react-dialog": "^1.1.15",
729
+ "@radix-ui/react-direction": "^1.1.1",
730
+ "@radix-ui/react-navigation-menu": "^1.2.14",
731
+ "@radix-ui/react-popover": "^1.1.15",
732
+ "@radix-ui/react-presence": "^1.1.5",
733
+ "@radix-ui/react-scroll-area": "^1.2.10",
734
+ "@radix-ui/react-slot": "^1.2.4",
735
+ "@radix-ui/react-tabs": "^1.1.13",
736
+ "class-variance-authority": "^0.7.1",
737
+ "fumadocs-core": "workspace:*",
738
+ "lucide-react": "^0.562.0",
739
+ "next-themes": "^0.4.6",
740
+ "react-medium-image-zoom": "^5.4.0",
741
+ "scroll-into-view-if-needed": "^3.1.0"
742
+ };
743
+ var devDependencies$1 = {
744
+ "@fumadocs/cli": "workspace:*",
745
+ "@tailwindcss/cli": "^4.1.18",
746
+ "@types/node": "^24.10.2",
747
+ "@types/react": "^19.2.7",
748
+ "@types/react-dom": "^19.2.3",
749
+ "eslint-config-custom": "workspace:*",
750
+ "tailwindcss": "^4.1.18",
751
+ "tsconfig": "workspace:*",
752
+ "tsdown": "^0.18.4"
753
+ };
754
+ var peerDependencies$1 = {
755
+ "@types/react": "*",
756
+ "react": "^19.2.0",
757
+ "react-dom": "^19.2.0",
758
+ "tailwindcss": "^4.0.0"
759
+ };
760
+ var peerDependenciesMeta$1 = {
761
+ "@types/react": { "optional": true },
762
+ "tailwindcss": { "optional": true }
763
+ };
764
+ var package_default$1 = {
765
+ name: name$1,
766
+ version: version$1,
767
+ description: description$1,
768
+ keywords: keywords$1,
769
+ homepage: homepage$1,
770
+ license: license$1,
771
+ author: author$1,
772
+ repository: repository$1,
773
+ files: files$1,
774
+ type: type$1,
775
+ exports: exports$1,
776
+ publishConfig: publishConfig$1,
777
+ scripts: scripts$1,
778
+ dependencies: dependencies$1,
779
+ devDependencies: devDependencies$1,
780
+ peerDependencies: peerDependencies$1,
781
+ peerDependenciesMeta: peerDependenciesMeta$1
782
+ };
783
+
784
+ //#endregion
785
+ //#region ../base-ui/package.json
786
+ var package_exports = /* @__PURE__ */ __exportAll({
787
+ author: () => author,
788
+ default: () => package_default,
789
+ dependencies: () => dependencies,
790
+ description: () => description,
791
+ devDependencies: () => devDependencies,
792
+ exports: () => exports,
793
+ files: () => files,
794
+ homepage: () => homepage,
795
+ keywords: () => keywords,
796
+ license: () => license,
797
+ name: () => name,
798
+ peerDependencies: () => peerDependencies,
799
+ peerDependenciesMeta: () => peerDependenciesMeta,
800
+ publishConfig: () => publishConfig,
801
+ repository: () => repository,
802
+ scripts: () => scripts,
803
+ type: () => type,
804
+ version: () => version
805
+ });
806
+ var name = "@fumadocs/base-ui";
807
+ var version = "16.4.4";
808
+ var description = "The Base UI version of Fumadocs UI";
809
+ var keywords = ["Docs", "Fumadocs"];
810
+ var homepage = "https://fumadocs.dev";
811
+ var license = "MIT";
812
+ var author = "Fuma Nama";
813
+ var repository = "github:fuma-nama/fumadocs";
814
+ var files = ["css/*", "dist/*"];
815
+ var type = "module";
816
+ var exports = {
817
+ "./style.css": "./dist/style.css",
818
+ "./css/*": "./css/*",
819
+ "./image-zoom.css": "./dist/image-zoom.css",
820
+ "./components/*": {
821
+ "types": "./dist/components/*.d.ts",
822
+ "import": "./dist/components/*.js",
823
+ "default": "./dist/components/*.js"
824
+ },
825
+ "./i18n": {
826
+ "types": "./dist/i18n.d.ts",
827
+ "import": "./dist/i18n.js"
828
+ },
829
+ "./layouts/home": {
830
+ "types": "./dist/layouts/home/index.d.ts",
831
+ "import": "./dist/layouts/home/index.js"
832
+ },
833
+ "./layouts/home/navbar": {
834
+ "types": "./dist/layouts/home/navbar.d.ts",
835
+ "import": "./dist/layouts/home/navbar.js"
836
+ },
837
+ "./layouts/docs": {
838
+ "types": "./dist/layouts/docs/index.d.ts",
839
+ "import": "./dist/layouts/docs/index.js"
840
+ },
841
+ "./layouts/docs/page": {
842
+ "types": "./dist/layouts/docs/page/index.d.ts",
843
+ "import": "./dist/layouts/docs/page/index.js"
844
+ },
845
+ "./layouts/notebook": {
846
+ "types": "./dist/layouts/notebook/index.d.ts",
847
+ "import": "./dist/layouts/notebook/index.js"
848
+ },
849
+ "./layouts/notebook/page": {
850
+ "types": "./dist/layouts/notebook/page/index.d.ts",
851
+ "import": "./dist/layouts/notebook/page/index.js"
852
+ },
853
+ "./layouts/shared": {
854
+ "types": "./dist/layouts/shared/index.d.ts",
855
+ "import": "./dist/layouts/shared/index.js"
856
+ },
857
+ "./page": {
858
+ "types": "./dist/page.d.ts",
859
+ "import": "./dist/page.js"
860
+ },
861
+ "./provider/*": {
862
+ "types": "./dist/provider/*.d.ts",
863
+ "import": "./dist/provider/*.js"
864
+ },
865
+ "./contexts/*": {
866
+ "types": "./dist/contexts/*.d.ts",
867
+ "import": "./dist/contexts/*.js"
868
+ },
869
+ "./mdx": {
870
+ "types": "./dist/mdx.d.ts",
871
+ "node": "./dist/mdx.server.js",
872
+ "import": "./dist/mdx.js"
873
+ },
874
+ "./og": {
875
+ "types": "./dist/og.d.ts",
876
+ "import": "./dist/og.js"
877
+ },
878
+ "./utils/*": {
879
+ "types": "./dist/utils/*.d.ts",
880
+ "import": "./dist/utils/*.js"
881
+ }
882
+ };
883
+ var publishConfig = { "access": "public" };
884
+ var scripts = {
885
+ "build": "pnpm build:layout && pnpm build:tailwind",
886
+ "build:layout": "tsdown",
887
+ "build:tailwind": "tailwindcss -i css/style.css -o ./dist/style.css && tailwindcss -i src/components/image-zoom.css -o dist/components/image-zoom.css",
888
+ "clean": "rimraf dist",
889
+ "dev": "concurrently \"tsdown --watch\" \"tailwindcss -i css/style.css -o ./dist/style.css -w\" \"tailwindcss -i src/components/image-zoom.css -o dist/components/image-zoom.css -w\"",
890
+ "lint": "eslint .",
891
+ "types:check": "tsc --noEmit"
892
+ };
893
+ var dependencies = {
894
+ "@base-ui/react": "^1.0.0",
895
+ "@fumadocs/ui": "workspace:*",
896
+ "class-variance-authority": "^0.7.1",
897
+ "fumadocs-core": "workspace:*",
898
+ "lucide-react": "^0.562.0",
899
+ "next-themes": "^0.4.6",
900
+ "react-medium-image-zoom": "^5.4.0",
901
+ "scroll-into-view-if-needed": "^3.1.0"
902
+ };
903
+ var devDependencies = {
904
+ "@fumadocs/cli": "workspace:*",
905
+ "@tailwindcss/cli": "^4.1.18",
906
+ "@types/node": "^24.10.2",
907
+ "@types/react": "^19.2.7",
908
+ "@types/react-dom": "^19.2.3",
909
+ "eslint-config-custom": "workspace:*",
910
+ "tailwindcss": "^4.1.18",
911
+ "tsconfig": "workspace:*",
912
+ "tsdown": "^0.18.4"
913
+ };
914
+ var peerDependencies = {
915
+ "@types/react": "*",
916
+ "react": "^19.2.0",
917
+ "react-dom": "^19.2.0",
918
+ "tailwindcss": "^4.0.0"
919
+ };
920
+ var peerDependenciesMeta = {
921
+ "@types/react": { "optional": true },
922
+ "tailwindcss": { "optional": true }
923
+ };
924
+ var package_default = {
925
+ name,
926
+ version,
927
+ description,
928
+ keywords,
929
+ homepage,
930
+ license,
931
+ author,
932
+ repository,
933
+ files,
934
+ type,
935
+ exports,
936
+ publishConfig,
937
+ scripts,
938
+ dependencies,
939
+ devDependencies,
940
+ peerDependencies,
941
+ peerDependenciesMeta
942
+ };
943
+
944
+ //#endregion
945
+ //#region src/constants.ts
946
+ const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
947
+ const isCI = Boolean(process.env.CI);
948
+ const templates = [
949
+ {
950
+ value: "+next+fuma-docs-mdx",
951
+ label: "Next.js: Fumadocs MDX",
952
+ hint: "recommended",
953
+ appDir: "",
954
+ rootProviderPath: "app/layout.tsx"
955
+ },
956
+ {
957
+ value: "+next+fuma-docs-mdx+static",
958
+ label: "Next.js Static: Fumadocs MDX",
959
+ appDir: "",
960
+ rootProviderPath: "components/provider.tsx"
961
+ },
962
+ {
963
+ value: "waku",
964
+ label: "Waku: Fumadocs MDX",
965
+ appDir: "src",
966
+ rootProviderPath: "components/provider.tsx"
967
+ },
968
+ {
969
+ value: "react-router",
970
+ label: "React Router: Fumadocs MDX (not RSC)",
971
+ appDir: "app",
972
+ rootProviderPath: "root.tsx"
973
+ },
974
+ {
975
+ value: "react-router-spa",
976
+ label: "React Router SPA: Fumadocs MDX (not RSC)",
977
+ hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
978
+ appDir: "app",
979
+ rootProviderPath: "root.tsx"
980
+ },
981
+ {
982
+ value: "tanstack-start",
983
+ label: "Tanstack Start: Fumadocs MDX (not RSC)",
984
+ appDir: "src",
985
+ rootProviderPath: "routes/__root.tsx"
986
+ },
987
+ {
988
+ value: "tanstack-start-spa",
989
+ label: "Tanstack Start SPA: Fumadocs MDX (not RSC)",
990
+ hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
991
+ appDir: "src",
992
+ rootProviderPath: "routes/__root.tsx"
993
+ }
994
+ ];
995
+ const workspaces = [
996
+ package_exports$4,
997
+ package_exports$3,
998
+ package_exports$2,
999
+ package_exports$1,
1000
+ package_exports
1001
+ ];
1002
+ const depVersions = dependencies$5;
1003
+ for (const workspace of workspaces) depVersions[workspace.name] = workspace.version;
1004
+
1005
+ //#endregion
1006
+ export { copy as a, writeFile as c, templates as i, isCI as n, pick as o, sourceDir as r, tryGitInit as s, depVersions as t };
1007
+ //# sourceMappingURL=constants-NGKLVn0G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants-NGKLVn0G.js","names":["files","result: Partial<T>","templates: TemplateInfo[]","corePkg","uiPkg","mdxPkg","radixPkg","basePkg","versionPkg.dependencies"],"sources":["../src/utils.ts","../../create-app-versions/package.json","../../core/package.json","../../ui/package.json","../../mdx/package.json","../../radix-ui/package.json","../../base-ui/package.json","../src/constants.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path, { join } from 'node:path';\nimport { x } from 'tinyexec';\n\nexport async function writeFile(file: string, content: string) {\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, content);\n}\n\nexport async function copy(\n from: string,\n to: string,\n options: {\n rename?: (s: string) => string;\n filter?: (s: string) => boolean;\n filterDir?: (dir: string) => boolean;\n } = {},\n): Promise<void> {\n const { rename = (s) => s, filterDir = () => true, filter = () => true } = options;\n const stats = await fs.stat(from);\n\n if (stats.isDirectory() && filterDir(from)) {\n const files = await fs.readdir(from);\n\n await Promise.all(\n files.map((file) => copy(path.join(from, file), path.join(to, file), options)),\n );\n }\n\n if (stats.isFile() && filter(from)) {\n to = rename(to);\n await fs.mkdir(path.dirname(to), { recursive: true });\n await fs.copyFile(from, to);\n }\n}\n\nasync function isInGitRepository(cwd: string) {\n const { exitCode } = await x('git', ['rev-parse', '--is-inside-work-tree'], {\n nodeOptions: { cwd },\n });\n\n return exitCode === 0;\n}\n\nasync function isDefaultBranchSet(cwd: string) {\n const { exitCode } = await x('git', ['config', 'init.defaultBranch'], {\n nodeOptions: { cwd },\n });\n\n return exitCode === 0;\n}\n\n/*\nInitialize a Git repo on the project.\n\nBased on https://github.com/vercel/next.js/blob/canary/packages/create-next-app/helpers/git.ts\n*/\nexport async function tryGitInit(cwd: string): Promise<boolean> {\n const { exitCode } = await x('git', ['--version']);\n if (exitCode !== 0) return false;\n\n if (await isInGitRepository(cwd)) return false;\n\n try {\n await x('git', ['init'], {\n throwOnError: true,\n nodeOptions: { cwd },\n });\n\n if (!(await isDefaultBranchSet(cwd))) {\n await x('git', ['checkout', '-b', 'main'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n }\n\n await x('git', ['add', '-A'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n\n await x('git', ['commit', '-m', 'Initial commit from Create Fumadocs App'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n return true;\n } catch {\n await fs.rmdir(join(cwd, '.git'), { recursive: true }).catch(() => null);\n\n return false;\n }\n}\n\nexport function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n const result: Partial<T> = {};\n\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n\n return result as Pick<T, K>;\n}\n","","","","","","","import { fileURLToPath } from 'node:url';\nimport versionPkg from '../../create-app-versions/package.json';\nimport * as corePkg from '../../core/package.json';\nimport * as uiPkg from '../../ui/package.json';\nimport * as mdxPkg from '../../mdx/package.json';\nimport * as radixPkg from '../../radix-ui/package.json';\nimport * as basePkg from '../../base-ui/package.json';\n\nexport const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);\n\nexport const isCI = Boolean(process.env.CI);\n\nexport interface TemplateInfo {\n value:\n | '+next+fuma-docs-mdx'\n | 'waku'\n | 'react-router'\n | 'react-router-spa'\n | 'tanstack-start'\n | 'tanstack-start-spa'\n | '+next+fuma-docs-mdx+static';\n label: string;\n appDir: string;\n /**\n * path to root provider, relative to `appDir``\n */\n rootProviderPath: string;\n hint?: string;\n /**\n * rename files when copying from template\n */\n rename?: (name: string) => string;\n}\n\nexport const templates: TemplateInfo[] = [\n {\n value: '+next+fuma-docs-mdx',\n label: 'Next.js: Fumadocs MDX',\n hint: 'recommended',\n appDir: '',\n rootProviderPath: 'app/layout.tsx',\n },\n {\n value: '+next+fuma-docs-mdx+static',\n label: 'Next.js Static: Fumadocs MDX',\n appDir: '',\n rootProviderPath: 'components/provider.tsx',\n },\n {\n value: 'waku',\n label: 'Waku: Fumadocs MDX',\n appDir: 'src',\n rootProviderPath: 'components/provider.tsx',\n },\n {\n value: 'react-router',\n label: 'React Router: Fumadocs MDX (not RSC)',\n appDir: 'app',\n rootProviderPath: 'root.tsx',\n },\n {\n value: 'react-router-spa',\n label: 'React Router SPA: Fumadocs MDX (not RSC)',\n hint: 'SPA mode allows you to host the site statically, compatible with a CDN.',\n appDir: 'app',\n rootProviderPath: 'root.tsx',\n },\n {\n value: 'tanstack-start',\n label: 'Tanstack Start: Fumadocs MDX (not RSC)',\n appDir: 'src',\n rootProviderPath: 'routes/__root.tsx',\n },\n {\n value: 'tanstack-start-spa',\n label: 'Tanstack Start SPA: Fumadocs MDX (not RSC)',\n hint: 'SPA mode allows you to host the site statically, compatible with a CDN.',\n appDir: 'src',\n rootProviderPath: 'routes/__root.tsx',\n },\n];\n\nconst workspaces = [corePkg, uiPkg, mdxPkg, radixPkg, basePkg];\n\nexport const depVersions = versionPkg.dependencies;\n\nfor (const workspace of workspaces) {\n depVersions[workspace.name as keyof typeof depVersions] = workspace.version;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-CulTgtuF.d.ts","names":[],"sources":["../src/auto-install.ts","../src/constants.ts","../src/index.ts"],"sourcesContent":[],"mappings":";KAEY,cAAA,WAAyB;AAAzB,cAEC,QAFa,EAAA,SAAW,CAAA,KAAQ,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,CAAA;;;AAEhC,UCGI,YAAA,CDH8C;;;;ECG9C;;;;ECAL,IAAA,CAAA,EAAA,MAAQ;EACH;;;EAcL,MAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;;;;AFlBC,KEGD,QAAA,GAAW,YFHwC,CAAA,OAAA,CAAA;UEI9C,OAAA;;YAEL;EDHK;;;;ACAjB;EACiB,cAAO,CAAA,EASL,cATK;EAEZ,WAAA,CAAA,EAAA,OAAA;EAOO,aAAA,CAAA,EAAA,OAAA;EAKP,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAc,OAAA,CAAA,EAAd,cAAc,EAAA;AAG1B;AAcY,UAdK,qBAAA,CAcU;EAIf,QAAA,EAjBA,YAiBA;EACK,GAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACG;;;EAGf,IAAA,EAAA,MAAS;EAAM;;;EAAW,MAAA,EAAA,MAAA;AAE/B;AAEe,KAbH,eAAA,GAaG;EAAL,IAAA,CAAA,EAAA,MAAA;EACA,OAAA,CAAA,EAAA,MAAA;EACc,OAAA,CAAA,EAAA,OAAA;EAAjB,OAAA,CAAA,EAXK,MAWL,CAAA,MAAA,EAAA,MAAA,CAAA;EAEG,YAAA,CAAA,EAZO,MAYP,CAAA,MAAA,EAAA,MAAA,CAAA;EACO,eAAA,CAAA,EAZG,MAYH,CAAA,MAAA,EAAA,MAAA,CAAA;CACO,GAZpB,MAYoB,CAAA,MAAA,EAAA,OAAA,CAAA;KAVnB,SAUE,CAAA,CAAA,CAAA,GAVa,CAUb,GAViB,OAUjB,CAVyB,CAUzB,CAAA;AACe,UATL,cAAA,CASK;EAA0B,QAAA,CAAA,EAAA,CAAA,IAAA,EAPtC,IAOsC,CAPjC,qBAOiC,EAAA,MAAA,CAAA,EAAA,IAAA,EANtC,YAMsC,EAAA,GALzC,SAKyC,CAAA,IAAA,GALxB,YAKwB,CAAA;EAC9B,WAAA,CAAA,EAAA,CAAA,IAAA,EAJR,qBAIQ,EAAA,WAAA,EAHD,eAGC,EAAA,GAFX,SAEW,CAAA,IAAA,GAFM,eAEN,CAAA;EAA2C,UAAA,CAAA,EAAA,CAAA,IAAA,EADvC,qBACuC,EAAA,GADb,SACa,CAAA,IAAA,CAAA;EAAS,MAAA,CAAA,EAAA,CAAA,IAAA,EAApD,qBAAoD,EAAA,OAAA,EAAA,MAAA,EAAA,GAAT,SAAS,CAAA,IAAA,GAAA,MAAA,CAAA;AAGtE;iBAAsB,MAAA,gBAAsB,UAAU"}
1
+ {"version":3,"file":"index-CulTgtuF.d.ts","names":[],"sources":["../src/auto-install.ts","../src/constants.ts","../src/index.ts"],"sourcesContent":[],"mappings":";KAEY,cAAA,WAAyB;AAAzB,cAEC,QAFa,EAAA,SAAW,CAAA,KAAQ,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,CAAA;;;AAEhC,UCQI,YAAA,CDR8C;;;;ECQ9C;;;;ECLL,IAAA,CAAA,EAAA,MAAQ;EACH;;;EAcL,MAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;;;;AFlBC,KEGD,QAAA,GAAW,YFHwC,CAAA,OAAA,CAAA;UEI9C,OAAA;;YAEL;EDEK;;;;ACLjB;EACiB,cAAO,CAAA,EASL,cATK;EAEZ,WAAA,CAAA,EAAA,OAAA;EAOO,aAAA,CAAA,EAAA,OAAA;EAKP,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAc,OAAA,CAAA,EAAd,cAAc,EAAA;AAG1B;AAcY,UAdK,qBAAA,CAcU;EAIf,QAAA,EAjBA,YAiBA;EACK,GAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EACG;;;EAGf,IAAA,EAAA,MAAS;EAAM;;;EAAW,MAAA,EAAA,MAAA;AAE/B;AAEe,KAbH,eAAA,GAaG;EAAL,IAAA,CAAA,EAAA,MAAA;EACA,OAAA,CAAA,EAAA,MAAA;EACc,OAAA,CAAA,EAAA,OAAA;EAAjB,OAAA,CAAA,EAXK,MAWL,CAAA,MAAA,EAAA,MAAA,CAAA;EAEG,YAAA,CAAA,EAZO,MAYP,CAAA,MAAA,EAAA,MAAA,CAAA;EACO,eAAA,CAAA,EAZG,MAYH,CAAA,MAAA,EAAA,MAAA,CAAA;CACO,GAZpB,MAYoB,CAAA,MAAA,EAAA,OAAA,CAAA;KAVnB,SAUE,CAAA,CAAA,CAAA,GAVa,CAUb,GAViB,OAUjB,CAVyB,CAUzB,CAAA;AACe,UATL,cAAA,CASK;EAA0B,QAAA,CAAA,EAAA,CAAA,IAAA,EAPtC,IAOsC,CAPjC,qBAOiC,EAAA,MAAA,CAAA,EAAA,IAAA,EANtC,YAMsC,EAAA,GALzC,SAKyC,CAAA,IAAA,GALxB,YAKwB,CAAA;EAC9B,WAAA,CAAA,EAAA,CAAA,IAAA,EAJR,qBAIQ,EAAA,WAAA,EAHD,eAGC,EAAA,GAFX,SAEW,CAAA,IAAA,GAFM,eAEN,CAAA;EAA2C,UAAA,CAAA,EAAA,CAAA,IAAA,EADvC,qBACuC,EAAA,GADb,SACa,CAAA,IAAA,CAAA;EAAS,MAAA,CAAA,EAAA,CAAA,IAAA,EAApD,qBAAoD,EAAA,OAAA,EAAA,MAAA,EAAA,GAAT,SAAS,CAAA,IAAA,GAAA,MAAA,CAAA;AAGtE;iBAAsB,MAAA,gBAAsB,UAAU"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as create } from "./src-z4C6ZcL7.js";
2
- import "./constants-DkM_O5ux.js";
1
+ import "./constants-NGKLVn0G.js";
2
+ import { t as create } from "./src-BY2BFgAW.js";
3
3
 
4
4
  export { create };
@@ -1,4 +1,4 @@
1
- import { c as writeFile, o as pick, t as depVersions } from "../constants-DkM_O5ux.js";
1
+ import { c as writeFile, o as pick, t as depVersions } from "../constants-NGKLVn0G.js";
2
2
  import biome_base_default from "./biome.base.js";
3
3
  import biome_next_default from "./biome.next.js";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import { c as writeFile, o as pick, t as depVersions } from "../constants-DkM_O5ux.js";
1
+ import { c as writeFile, o as pick, t as depVersions } from "../constants-NGKLVn0G.js";
2
2
  import path from "node:path";
3
3
 
4
4
  //#region src/plugins/eslint.ts
@@ -1,4 +1,4 @@
1
- import { a as copy, c as writeFile, o as pick, r as sourceDir, t as depVersions } from "../constants-DkM_O5ux.js";
1
+ import { a as copy, c as writeFile, o as pick, r as sourceDir, t as depVersions } from "../constants-NGKLVn0G.js";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { IndentationText, Project, QuoteKind, StructureKind, SyntaxKind, ts } from "ts-morph";
@@ -1,4 +1,4 @@
1
- import { a as copy, i as templates, r as sourceDir, s as tryGitInit, t as depVersions } from "./constants-DkM_O5ux.js";
1
+ import { a as copy, i as templates, r as sourceDir, s as tryGitInit, t as depVersions } from "./constants-NGKLVn0G.js";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { x } from "tinyexec";
@@ -86,4 +86,4 @@ async function initPackageJson(projectName, packageJsonPath) {
86
86
 
87
87
  //#endregion
88
88
  export { getPackageManager as n, managers as r, create as t };
89
- //# sourceMappingURL=src-z4C6ZcL7.js.map
89
+ //# sourceMappingURL=src-BY2BFgAW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src-z4C6ZcL7.js","names":["pluginContext: TemplatePluginContext","packageJson: PackageJsonType"],"sources":["../src/auto-install.ts","../src/index.ts"],"sourcesContent":["import { x } from 'tinyexec';\n\nexport type PackageManager = (typeof managers)[number];\n\nexport const managers = ['npm', 'yarn', 'bun', 'pnpm'] as const;\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun';\n }\n\n return 'npm';\n}\n\nexport async function autoInstall(manager: PackageManager, dest: string) {\n await x(manager, ['install'], {\n throwOnError: true,\n nodeOptions: {\n env: {\n ...process.env,\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n cwd: dest,\n },\n });\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { copy, tryGitInit } from '@/utils';\nimport type { PackageManager } from './auto-install';\nimport { autoInstall } from './auto-install';\nimport { depVersions, sourceDir, type TemplateInfo, templates } from './constants';\n\nexport type Template = TemplateInfo['value'];\nexport interface Options {\n outputDir: string;\n template: Template;\n\n /**\n * the package manager to use\n *\n * @defaultValue 'npm'\n */\n packageManager?: PackageManager;\n\n installDeps?: boolean;\n initializeGit?: boolean;\n log?: (message: string) => void;\n plugins?: TemplatePlugin[];\n}\n\nexport interface TemplatePluginContext {\n template: TemplateInfo;\n log: (message: string) => void;\n /**\n * output directory\n */\n dest: string;\n\n /**\n * output directory for app code (e.g. under `/src`)\n */\n appDir: string;\n}\n\nexport type PackageJsonType = {\n name?: string;\n version?: string;\n private?: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n} & Record<string, unknown>;\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TemplatePlugin {\n template?: (\n this: Pick<TemplatePluginContext, 'dest'>,\n info: TemplateInfo,\n ) => Awaitable<void | TemplateInfo>;\n packageJson?: (\n this: TemplatePluginContext,\n packageJson: PackageJsonType,\n ) => Awaitable<void | PackageJsonType>;\n afterWrite?: (this: TemplatePluginContext) => Awaitable<void>;\n readme?: (this: TemplatePluginContext, content: string) => Awaitable<void | string>;\n}\n\nexport async function create(createOptions: Options): Promise<void> {\n const {\n outputDir,\n plugins = [],\n packageManager = 'npm',\n initializeGit = false,\n installDeps = false,\n log = console.log,\n } = createOptions;\n\n let template = templates.find((item) => item.value === createOptions.template)!;\n for (const plugin of plugins) {\n template = (await plugin.template?.call({ dest: outputDir }, template)) ?? template;\n }\n\n const appDir = path.join(outputDir, template.appDir);\n const projectName = path.basename(outputDir);\n const pluginContext: TemplatePluginContext = {\n template,\n dest: outputDir,\n log,\n appDir,\n };\n\n await copy(path.join(sourceDir, 'template', template.value), outputDir, {\n rename(file) {\n file = file.replace('example.gitignore', '.gitignore');\n\n return template.rename?.(file) ?? file;\n },\n });\n\n const packageJsonPath = path.join(outputDir, 'package.json');\n let packageJson = await initPackageJson(projectName, packageJsonPath);\n for (const plugin of plugins) {\n packageJson = (await plugin.packageJson?.call(pluginContext, packageJson)) ?? packageJson;\n }\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n\n const readmePath = path.join(outputDir, 'README.md');\n let readme = `# ${projectName}\\n\\n${await fs.readFile(readmePath)}`;\n for (const plugin of plugins) {\n readme = (await plugin.readme?.call(pluginContext, readme)) ?? readme;\n }\n await fs.writeFile(readmePath, readme);\n\n for (const plugin of plugins) {\n await plugin.afterWrite?.call(pluginContext);\n }\n\n if (installDeps) {\n try {\n await autoInstall(packageManager, outputDir);\n log('Installed dependencies');\n } catch (err) {\n log(`Failed to install dependencies: ${err}`);\n }\n }\n\n if (initializeGit && (await tryGitInit(outputDir))) {\n log('Initialized Git repository');\n }\n}\n\nasync function initPackageJson(\n projectName: string,\n packageJsonPath: string,\n): Promise<PackageJsonType> {\n function replaceWorkspaceDeps(deps: Record<string, string> = {}) {\n for (const k in deps) {\n if (deps[k].startsWith('workspace:') && k in depVersions) {\n deps[k] = depVersions[k as keyof typeof depVersions];\n }\n }\n\n return deps;\n }\n\n const packageJson: PackageJsonType = JSON.parse((await fs.readFile(packageJsonPath)).toString());\n\n return {\n ...packageJson,\n name: projectName,\n scripts: {\n ...packageJson.scripts,\n postinstall: 'fumadocs-mdx',\n },\n dependencies: replaceWorkspaceDeps(packageJson.dependencies),\n devDependencies: replaceWorkspaceDeps(packageJson.devDependencies),\n };\n}\n"],"mappings":";;;;;;AAIA,MAAa,WAAW;CAAC;CAAO;CAAQ;CAAO;CAAO;AAEtD,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;AAEvD,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,MAAM,CAC7B,QAAO;AAGT,QAAO;;AAGT,eAAsB,YAAY,SAAyB,MAAc;AACvE,OAAM,EAAE,SAAS,CAAC,UAAU,EAAE;EAC5B,cAAc;EACd,aAAa;GACX,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;IACzB;GACD,KAAK;GACN;EACF,CAAC;;;;;AC4BJ,eAAsB,OAAO,eAAuC;CAClE,MAAM,EACJ,WACA,UAAU,EAAE,EACZ,iBAAiB,OACjB,gBAAgB,OAChB,cAAc,OACd,MAAM,QAAQ,QACZ;CAEJ,IAAI,WAAW,UAAU,MAAM,SAAS,KAAK,UAAU,cAAc,SAAS;AAC9E,MAAK,MAAM,UAAU,QACnB,YAAY,MAAM,OAAO,UAAU,KAAK,EAAE,MAAM,WAAW,EAAE,SAAS,IAAK;CAG7E,MAAM,SAAS,KAAK,KAAK,WAAW,SAAS,OAAO;CACpD,MAAM,cAAc,KAAK,SAAS,UAAU;CAC5C,MAAMA,gBAAuC;EAC3C;EACA,MAAM;EACN;EACA;EACD;AAED,OAAM,KAAK,KAAK,KAAK,WAAW,YAAY,SAAS,MAAM,EAAE,WAAW,EACtE,OAAO,MAAM;AACX,SAAO,KAAK,QAAQ,qBAAqB,aAAa;AAEtD,SAAO,SAAS,SAAS,KAAK,IAAI;IAErC,CAAC;CAEF,MAAM,kBAAkB,KAAK,KAAK,WAAW,eAAe;CAC5D,IAAI,cAAc,MAAM,gBAAgB,aAAa,gBAAgB;AACrE,MAAK,MAAM,UAAU,QACnB,eAAe,MAAM,OAAO,aAAa,KAAK,eAAe,YAAY,IAAK;AAEhF,OAAM,GAAG,UAAU,iBAAiB,KAAK,UAAU,aAAa,MAAM,EAAE,CAAC;CAEzE,MAAM,aAAa,KAAK,KAAK,WAAW,YAAY;CACpD,IAAI,SAAS,KAAK,YAAY,MAAM,MAAM,GAAG,SAAS,WAAW;AACjE,MAAK,MAAM,UAAU,QACnB,UAAU,MAAM,OAAO,QAAQ,KAAK,eAAe,OAAO,IAAK;AAEjE,OAAM,GAAG,UAAU,YAAY,OAAO;AAEtC,MAAK,MAAM,UAAU,QACnB,OAAM,OAAO,YAAY,KAAK,cAAc;AAG9C,KAAI,YACF,KAAI;AACF,QAAM,YAAY,gBAAgB,UAAU;AAC5C,MAAI,yBAAyB;UACtB,KAAK;AACZ,MAAI,mCAAmC,MAAM;;AAIjD,KAAI,iBAAkB,MAAM,WAAW,UAAU,CAC/C,KAAI,6BAA6B;;AAIrC,eAAe,gBACb,aACA,iBAC0B;CAC1B,SAAS,qBAAqB,OAA+B,EAAE,EAAE;AAC/D,OAAK,MAAM,KAAK,KACd,KAAI,KAAK,GAAG,WAAW,aAAa,IAAI,KAAK,YAC3C,MAAK,KAAK,YAAY;AAI1B,SAAO;;CAGT,MAAMC,cAA+B,KAAK,OAAO,MAAM,GAAG,SAAS,gBAAgB,EAAE,UAAU,CAAC;AAEhG,QAAO;EACL,GAAG;EACH,MAAM;EACN,SAAS;GACP,GAAG,YAAY;GACf,aAAa;GACd;EACD,cAAc,qBAAqB,YAAY,aAAa;EAC5D,iBAAiB,qBAAqB,YAAY,gBAAgB;EACnE"}
1
+ {"version":3,"file":"src-BY2BFgAW.js","names":["pluginContext: TemplatePluginContext","packageJson: PackageJsonType"],"sources":["../src/auto-install.ts","../src/index.ts"],"sourcesContent":["import { x } from 'tinyexec';\n\nexport type PackageManager = (typeof managers)[number];\n\nexport const managers = ['npm', 'yarn', 'bun', 'pnpm'] as const;\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun';\n }\n\n return 'npm';\n}\n\nexport async function autoInstall(manager: PackageManager, dest: string) {\n await x(manager, ['install'], {\n throwOnError: true,\n nodeOptions: {\n env: {\n ...process.env,\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n cwd: dest,\n },\n });\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { copy, tryGitInit } from '@/utils';\nimport type { PackageManager } from './auto-install';\nimport { autoInstall } from './auto-install';\nimport { depVersions, sourceDir, type TemplateInfo, templates } from './constants';\n\nexport type Template = TemplateInfo['value'];\nexport interface Options {\n outputDir: string;\n template: Template;\n\n /**\n * the package manager to use\n *\n * @defaultValue 'npm'\n */\n packageManager?: PackageManager;\n\n installDeps?: boolean;\n initializeGit?: boolean;\n log?: (message: string) => void;\n plugins?: TemplatePlugin[];\n}\n\nexport interface TemplatePluginContext {\n template: TemplateInfo;\n log: (message: string) => void;\n /**\n * output directory\n */\n dest: string;\n\n /**\n * output directory for app code (e.g. under `/src`)\n */\n appDir: string;\n}\n\nexport type PackageJsonType = {\n name?: string;\n version?: string;\n private?: boolean;\n scripts?: Record<string, string>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n} & Record<string, unknown>;\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TemplatePlugin {\n template?: (\n this: Pick<TemplatePluginContext, 'dest'>,\n info: TemplateInfo,\n ) => Awaitable<void | TemplateInfo>;\n packageJson?: (\n this: TemplatePluginContext,\n packageJson: PackageJsonType,\n ) => Awaitable<void | PackageJsonType>;\n afterWrite?: (this: TemplatePluginContext) => Awaitable<void>;\n readme?: (this: TemplatePluginContext, content: string) => Awaitable<void | string>;\n}\n\nexport async function create(createOptions: Options): Promise<void> {\n const {\n outputDir,\n plugins = [],\n packageManager = 'npm',\n initializeGit = false,\n installDeps = false,\n log = console.log,\n } = createOptions;\n\n let template = templates.find((item) => item.value === createOptions.template)!;\n for (const plugin of plugins) {\n template = (await plugin.template?.call({ dest: outputDir }, template)) ?? template;\n }\n\n const appDir = path.join(outputDir, template.appDir);\n const projectName = path.basename(outputDir);\n const pluginContext: TemplatePluginContext = {\n template,\n dest: outputDir,\n log,\n appDir,\n };\n\n await copy(path.join(sourceDir, 'template', template.value), outputDir, {\n rename(file) {\n file = file.replace('example.gitignore', '.gitignore');\n\n return template.rename?.(file) ?? file;\n },\n });\n\n const packageJsonPath = path.join(outputDir, 'package.json');\n let packageJson = await initPackageJson(projectName, packageJsonPath);\n for (const plugin of plugins) {\n packageJson = (await plugin.packageJson?.call(pluginContext, packageJson)) ?? packageJson;\n }\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n\n const readmePath = path.join(outputDir, 'README.md');\n let readme = `# ${projectName}\\n\\n${await fs.readFile(readmePath)}`;\n for (const plugin of plugins) {\n readme = (await plugin.readme?.call(pluginContext, readme)) ?? readme;\n }\n await fs.writeFile(readmePath, readme);\n\n for (const plugin of plugins) {\n await plugin.afterWrite?.call(pluginContext);\n }\n\n if (installDeps) {\n try {\n await autoInstall(packageManager, outputDir);\n log('Installed dependencies');\n } catch (err) {\n log(`Failed to install dependencies: ${err}`);\n }\n }\n\n if (initializeGit && (await tryGitInit(outputDir))) {\n log('Initialized Git repository');\n }\n}\n\nasync function initPackageJson(\n projectName: string,\n packageJsonPath: string,\n): Promise<PackageJsonType> {\n function replaceWorkspaceDeps(deps: Record<string, string> = {}) {\n for (const k in deps) {\n if (deps[k].startsWith('workspace:') && k in depVersions) {\n deps[k] = depVersions[k as keyof typeof depVersions];\n }\n }\n\n return deps;\n }\n\n const packageJson: PackageJsonType = JSON.parse((await fs.readFile(packageJsonPath)).toString());\n\n return {\n ...packageJson,\n name: projectName,\n scripts: {\n ...packageJson.scripts,\n postinstall: 'fumadocs-mdx',\n },\n dependencies: replaceWorkspaceDeps(packageJson.dependencies),\n devDependencies: replaceWorkspaceDeps(packageJson.devDependencies),\n };\n}\n"],"mappings":";;;;;;AAIA,MAAa,WAAW;CAAC;CAAO;CAAQ;CAAO;CAAO;AAEtD,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;AAEvD,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,MAAM,CAC7B,QAAO;AAGT,QAAO;;AAGT,eAAsB,YAAY,SAAyB,MAAc;AACvE,OAAM,EAAE,SAAS,CAAC,UAAU,EAAE;EAC5B,cAAc;EACd,aAAa;GACX,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;IACzB;GACD,KAAK;GACN;EACF,CAAC;;;;;AC4BJ,eAAsB,OAAO,eAAuC;CAClE,MAAM,EACJ,WACA,UAAU,EAAE,EACZ,iBAAiB,OACjB,gBAAgB,OAChB,cAAc,OACd,MAAM,QAAQ,QACZ;CAEJ,IAAI,WAAW,UAAU,MAAM,SAAS,KAAK,UAAU,cAAc,SAAS;AAC9E,MAAK,MAAM,UAAU,QACnB,YAAY,MAAM,OAAO,UAAU,KAAK,EAAE,MAAM,WAAW,EAAE,SAAS,IAAK;CAG7E,MAAM,SAAS,KAAK,KAAK,WAAW,SAAS,OAAO;CACpD,MAAM,cAAc,KAAK,SAAS,UAAU;CAC5C,MAAMA,gBAAuC;EAC3C;EACA,MAAM;EACN;EACA;EACD;AAED,OAAM,KAAK,KAAK,KAAK,WAAW,YAAY,SAAS,MAAM,EAAE,WAAW,EACtE,OAAO,MAAM;AACX,SAAO,KAAK,QAAQ,qBAAqB,aAAa;AAEtD,SAAO,SAAS,SAAS,KAAK,IAAI;IAErC,CAAC;CAEF,MAAM,kBAAkB,KAAK,KAAK,WAAW,eAAe;CAC5D,IAAI,cAAc,MAAM,gBAAgB,aAAa,gBAAgB;AACrE,MAAK,MAAM,UAAU,QACnB,eAAe,MAAM,OAAO,aAAa,KAAK,eAAe,YAAY,IAAK;AAEhF,OAAM,GAAG,UAAU,iBAAiB,KAAK,UAAU,aAAa,MAAM,EAAE,CAAC;CAEzE,MAAM,aAAa,KAAK,KAAK,WAAW,YAAY;CACpD,IAAI,SAAS,KAAK,YAAY,MAAM,MAAM,GAAG,SAAS,WAAW;AACjE,MAAK,MAAM,UAAU,QACnB,UAAU,MAAM,OAAO,QAAQ,KAAK,eAAe,OAAO,IAAK;AAEjE,OAAM,GAAG,UAAU,YAAY,OAAO;AAEtC,MAAK,MAAM,UAAU,QACnB,OAAM,OAAO,YAAY,KAAK,cAAc;AAG9C,KAAI,YACF,KAAI;AACF,QAAM,YAAY,gBAAgB,UAAU;AAC5C,MAAI,yBAAyB;UACtB,KAAK;AACZ,MAAI,mCAAmC,MAAM;;AAIjD,KAAI,iBAAkB,MAAM,WAAW,UAAU,CAC/C,KAAI,6BAA6B;;AAIrC,eAAe,gBACb,aACA,iBAC0B;CAC1B,SAAS,qBAAqB,OAA+B,EAAE,EAAE;AAC/D,OAAK,MAAM,KAAK,KACd,KAAI,KAAK,GAAG,WAAW,aAAa,IAAI,KAAK,YAC3C,MAAK,KAAK,YAAY;AAI1B,SAAO;;CAGT,MAAMC,cAA+B,KAAK,OAAO,MAAM,GAAG,SAAS,gBAAgB,EAAE,UAAU,CAAC;AAEhG,QAAO;EACL,GAAG;EACH,MAAM;EACN,SAAS;GACP,GAAG,YAAY;GACf,aAAa;GACd;EACD,cAAc,qBAAqB,YAAY,aAAa;EAC5D,iBAAiB,qBAAqB,YAAY,gBAAgB;EACnE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fumadocs-app",
3
- "version": "16.0.35",
3
+ "version": "16.0.37",
4
4
  "description": "Create a new documentation site with Fumadocs",
5
5
  "keywords": [
6
6
  "Docs",
@@ -1,140 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import path, { join } from "node:path";
3
- import { x } from "tinyexec";
4
- import { fileURLToPath } from "node:url";
5
-
6
- //#region src/utils.ts
7
- async function writeFile(file, content) {
8
- await fs.mkdir(path.dirname(file), { recursive: true });
9
- await fs.writeFile(file, content);
10
- }
11
- async function copy(from, to, options = {}) {
12
- const { rename = (s) => s, filterDir = () => true, filter = () => true } = options;
13
- const stats = await fs.stat(from);
14
- if (stats.isDirectory() && filterDir(from)) {
15
- const files = await fs.readdir(from);
16
- await Promise.all(files.map((file) => copy(path.join(from, file), path.join(to, file), options)));
17
- }
18
- if (stats.isFile() && filter(from)) {
19
- to = rename(to);
20
- await fs.mkdir(path.dirname(to), { recursive: true });
21
- await fs.copyFile(from, to);
22
- }
23
- }
24
- async function isInGitRepository(cwd) {
25
- const { exitCode } = await x("git", ["rev-parse", "--is-inside-work-tree"], { nodeOptions: { cwd } });
26
- return exitCode === 0;
27
- }
28
- async function isDefaultBranchSet(cwd) {
29
- const { exitCode } = await x("git", ["config", "init.defaultBranch"], { nodeOptions: { cwd } });
30
- return exitCode === 0;
31
- }
32
- async function tryGitInit(cwd) {
33
- const { exitCode } = await x("git", ["--version"]);
34
- if (exitCode !== 0) return false;
35
- if (await isInGitRepository(cwd)) return false;
36
- try {
37
- await x("git", ["init"], {
38
- throwOnError: true,
39
- nodeOptions: { cwd }
40
- });
41
- if (!await isDefaultBranchSet(cwd)) await x("git", [
42
- "checkout",
43
- "-b",
44
- "main"
45
- ], {
46
- throwOnError: true,
47
- nodeOptions: { cwd }
48
- });
49
- await x("git", ["add", "-A"], {
50
- throwOnError: true,
51
- nodeOptions: { cwd }
52
- });
53
- await x("git", [
54
- "commit",
55
- "-m",
56
- "Initial commit from Create Fumadocs App"
57
- ], {
58
- throwOnError: true,
59
- nodeOptions: { cwd }
60
- });
61
- return true;
62
- } catch {
63
- await fs.rmdir(join(cwd, ".git"), { recursive: true }).catch(() => null);
64
- return false;
65
- }
66
- }
67
- function pick(obj, keys) {
68
- const result = {};
69
- for (const key of keys) if (key in obj) result[key] = obj[key];
70
- return result;
71
- }
72
-
73
- //#endregion
74
- //#region ../create-app-versions/package.json
75
- var dependencies = {
76
- "@biomejs/biome": "^2.3.10",
77
- "@fumadocs/ui": "workspace:*",
78
- "@orama/core": "^1.2.16",
79
- "eslint": "^9.39.2",
80
- "fumadocs-core": "workspace:*",
81
- "fumadocs-mdx": "workspace:*",
82
- "fumadocs-ui": "workspace:*"
83
- };
84
-
85
- //#endregion
86
- //#region src/constants.ts
87
- const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
88
- const isCI = Boolean(process.env.CI);
89
- const templates = [
90
- {
91
- value: "+next+fuma-docs-mdx",
92
- label: "Next.js: Fumadocs MDX",
93
- hint: "recommended",
94
- appDir: "",
95
- rootProviderPath: "app/layout.tsx"
96
- },
97
- {
98
- value: "+next+fuma-docs-mdx+static",
99
- label: "Next.js Static: Fumadocs MDX",
100
- appDir: "",
101
- rootProviderPath: "components/provider.tsx"
102
- },
103
- {
104
- value: "waku",
105
- label: "Waku: Fumadocs MDX",
106
- appDir: "src",
107
- rootProviderPath: "components/provider.tsx"
108
- },
109
- {
110
- value: "react-router",
111
- label: "React Router: Fumadocs MDX (not RSC)",
112
- appDir: "app",
113
- rootProviderPath: "root.tsx"
114
- },
115
- {
116
- value: "react-router-spa",
117
- label: "React Router SPA: Fumadocs MDX (not RSC)",
118
- hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
119
- appDir: "app",
120
- rootProviderPath: "root.tsx"
121
- },
122
- {
123
- value: "tanstack-start",
124
- label: "Tanstack Start: Fumadocs MDX (not RSC)",
125
- appDir: "src",
126
- rootProviderPath: "routes/__root.tsx"
127
- },
128
- {
129
- value: "tanstack-start-spa",
130
- label: "Tanstack Start SPA: Fumadocs MDX (not RSC)",
131
- hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
132
- appDir: "src",
133
- rootProviderPath: "routes/__root.tsx"
134
- }
135
- ];
136
- const depVersions = dependencies;
137
-
138
- //#endregion
139
- export { copy as a, writeFile as c, templates as i, isCI as n, pick as o, sourceDir as r, tryGitInit as s, depVersions as t };
140
- //# sourceMappingURL=constants-DkM_O5ux.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants-DkM_O5ux.js","names":["result: Partial<T>","templates: TemplateInfo[]","versionPkg.dependencies"],"sources":["../src/utils.ts","../../create-app-versions/package.json","../src/constants.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path, { join } from 'node:path';\nimport { x } from 'tinyexec';\n\nexport async function writeFile(file: string, content: string) {\n await fs.mkdir(path.dirname(file), { recursive: true });\n await fs.writeFile(file, content);\n}\n\nexport async function copy(\n from: string,\n to: string,\n options: {\n rename?: (s: string) => string;\n filter?: (s: string) => boolean;\n filterDir?: (dir: string) => boolean;\n } = {},\n): Promise<void> {\n const { rename = (s) => s, filterDir = () => true, filter = () => true } = options;\n const stats = await fs.stat(from);\n\n if (stats.isDirectory() && filterDir(from)) {\n const files = await fs.readdir(from);\n\n await Promise.all(\n files.map((file) => copy(path.join(from, file), path.join(to, file), options)),\n );\n }\n\n if (stats.isFile() && filter(from)) {\n to = rename(to);\n await fs.mkdir(path.dirname(to), { recursive: true });\n await fs.copyFile(from, to);\n }\n}\n\nasync function isInGitRepository(cwd: string) {\n const { exitCode } = await x('git', ['rev-parse', '--is-inside-work-tree'], {\n nodeOptions: { cwd },\n });\n\n return exitCode === 0;\n}\n\nasync function isDefaultBranchSet(cwd: string) {\n const { exitCode } = await x('git', ['config', 'init.defaultBranch'], {\n nodeOptions: { cwd },\n });\n\n return exitCode === 0;\n}\n\n/*\nInitialize a Git repo on the project.\n\nBased on https://github.com/vercel/next.js/blob/canary/packages/create-next-app/helpers/git.ts\n*/\nexport async function tryGitInit(cwd: string): Promise<boolean> {\n const { exitCode } = await x('git', ['--version']);\n if (exitCode !== 0) return false;\n\n if (await isInGitRepository(cwd)) return false;\n\n try {\n await x('git', ['init'], {\n throwOnError: true,\n nodeOptions: { cwd },\n });\n\n if (!(await isDefaultBranchSet(cwd))) {\n await x('git', ['checkout', '-b', 'main'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n }\n\n await x('git', ['add', '-A'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n\n await x('git', ['commit', '-m', 'Initial commit from Create Fumadocs App'], {\n throwOnError: true,\n nodeOptions: {\n cwd,\n },\n });\n return true;\n } catch {\n await fs.rmdir(join(cwd, '.git'), { recursive: true }).catch(() => null);\n\n return false;\n }\n}\n\nexport function pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n const result: Partial<T> = {};\n\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n\n return result as Pick<T, K>;\n}\n","","import { fileURLToPath } from 'node:url';\nimport versionPkg from '../../create-app-versions/package.json';\n\nexport const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);\n\nexport const isCI = Boolean(process.env.CI);\n\nexport interface TemplateInfo {\n value:\n | '+next+fuma-docs-mdx'\n | 'waku'\n | 'react-router'\n | 'react-router-spa'\n | 'tanstack-start'\n | 'tanstack-start-spa'\n | '+next+fuma-docs-mdx+static';\n label: string;\n appDir: string;\n /**\n * path to root provider, relative to `appDir``\n */\n rootProviderPath: string;\n hint?: string;\n /**\n * rename files when copying from template\n */\n rename?: (name: string) => string;\n}\n\nexport const templates: TemplateInfo[] = [\n {\n value: '+next+fuma-docs-mdx',\n label: 'Next.js: Fumadocs MDX',\n hint: 'recommended',\n appDir: '',\n rootProviderPath: 'app/layout.tsx',\n },\n {\n value: '+next+fuma-docs-mdx+static',\n label: 'Next.js Static: Fumadocs MDX',\n appDir: '',\n rootProviderPath: 'components/provider.tsx',\n },\n {\n value: 'waku',\n label: 'Waku: Fumadocs MDX',\n appDir: 'src',\n rootProviderPath: 'components/provider.tsx',\n },\n {\n value: 'react-router',\n label: 'React Router: Fumadocs MDX (not RSC)',\n appDir: 'app',\n rootProviderPath: 'root.tsx',\n },\n {\n value: 'react-router-spa',\n label: 'React Router SPA: Fumadocs MDX (not RSC)',\n hint: 'SPA mode allows you to host the site statically, compatible with a CDN.',\n appDir: 'app',\n rootProviderPath: 'root.tsx',\n },\n {\n value: 'tanstack-start',\n label: 'Tanstack Start: Fumadocs MDX (not RSC)',\n appDir: 'src',\n rootProviderPath: 'routes/__root.tsx',\n },\n {\n value: 'tanstack-start-spa',\n label: 'Tanstack Start SPA: Fumadocs MDX (not RSC)',\n hint: 'SPA mode allows you to host the site statically, compatible with a CDN.',\n appDir: 'src',\n rootProviderPath: 'routes/__root.tsx',\n },\n];\n\nexport const depVersions = versionPkg.dependencies;\n"],"mappings":"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"}