create-fumadocs-app 16.2.25 → 16.2.26

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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { i as templates, n as isCI } from "./constants-MMR2kMq9.js";
3
- import { n as getPackageManager, r as managers, t as create } from "./src-BCES-2vX.js";
4
- import { t as feature } from "./feature-wcZdcZvw.js";
2
+ import { i as templates, n as isCI } from "./constants-qjur1Ohe.js";
3
+ import { n as getPackageManager, r as managers, t as create } from "./src-CQgZ1F0v.js";
4
+ import { t as feature } from "./feature-DVMsoTfq.js";
5
5
  import fs from "node:fs/promises";
6
6
  import path from "node:path";
7
7
  import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
@@ -13,7 +13,7 @@ var __exportAll = (all, no_symbols) => {
13
13
  //#endregion
14
14
  //#region ../create-app-versions/package.json
15
15
  var dependencies$3 = {
16
- "@biomejs/biome": "^2.5.15",
16
+ "@biomejs/biome": "^2.6.2",
17
17
  "@mixedbread/sdk": "^0.78.0",
18
18
  "@orama/core": "^1.2.19",
19
19
  "algoliasearch": "^5.60.0",
@@ -21,10 +21,10 @@ var dependencies$3 = {
21
21
  "fumadocs-mdx": "workspace:*",
22
22
  "fumadocs-ui": "workspace:*",
23
23
  "meilisearch": "^0.62.0",
24
- "oxlint": "^1.88.0",
24
+ "oxlint": "^1.89.0",
25
25
  "react": "^19.3.1",
26
- "takumi-js": "^2.17.0",
27
- "typesense": "^3.1.1",
26
+ "takumi-js": "^2.17.1",
27
+ "typesense": "^3.2.0",
28
28
  "typesense-fumadocs-adapter": "^0.5.0"
29
29
  };
30
30
  //#endregion
@@ -53,7 +53,7 @@ var package_exports$2 = /* @__PURE__ */ __exportAll({
53
53
  version: () => version$2
54
54
  });
55
55
  var name$2 = "fumadocs-core";
56
- var version$2 = "16.17.7";
56
+ var version$2 = "16.17.8";
57
57
  var description$2 = "The React.js library for building a documentation website";
58
58
  var keywords$2 = ["Docs", "Fumadocs"];
59
59
  var homepage$2 = "https://fumadocs.dev";
@@ -81,6 +81,7 @@ var exports$2 = {
81
81
  "./framework/waku": "./dist/framework/waku.js",
82
82
  "./highlight": "./dist/highlight/index.js",
83
83
  "./highlight/client": "./dist/highlight/client.js",
84
+ "./highlight/highlights": "./dist/highlight/highlights.js",
84
85
  "./highlight/shiki": "./dist/highlight/shiki/index.js",
85
86
  "./highlight/shiki/full": "./dist/highlight/shiki/full.js",
86
87
  "./highlight/shiki/react": "./dist/highlight/shiki/react.js",
@@ -101,6 +102,7 @@ var exports$2 = {
101
102
  "./mdx-plugins/remark-gfm": "./dist/mdx-plugins/remark-gfm.js",
102
103
  "./mdx-plugins/remark-heading": "./dist/mdx-plugins/remark-heading.js",
103
104
  "./mdx-plugins/remark-image": "./dist/mdx-plugins/remark-image.js",
105
+ "./mdx-plugins/remark-include": "./dist/mdx-plugins/remark-include.js",
104
106
  "./mdx-plugins/remark-llms": "./dist/mdx-plugins/remark-llms.js",
105
107
  "./mdx-plugins/remark-llms.runtime": "./dist/mdx-plugins/remark-llms.runtime.js",
106
108
  "./mdx-plugins/remark-mdx-files": "./dist/mdx-plugins/remark-mdx-files.js",
@@ -143,6 +145,7 @@ var exports$2 = {
143
145
  "./source/plugins/status-badges": "./dist/source/plugins/status-badges.js",
144
146
  "./source/schema": "./dist/source/schema.js",
145
147
  "./toc": "./dist/toc.js",
148
+ "./utils/hast-to-jsx": "./dist/utils/hast-to-jsx.js",
146
149
  "./utils/use-media-query": "./dist/utils/use-media-query.js",
147
150
  "./utils/use-on-change": "./dist/utils/use-on-change.js",
148
151
  "./package.json": "./package.json",
@@ -165,7 +168,6 @@ var dependencies$2 = {
165
168
  "github-slugger": "^2.0.0",
166
169
  "hast-util-from-dom": "^5.0.1",
167
170
  "hast-util-to-estree": "^3.1.3",
168
- "hast-util-to-jsx-runtime": "^2.3.6",
169
171
  "mdast-util-mdx": "^3.0.0",
170
172
  "micromark": "^4.0.3",
171
173
  "micromark-extension-gfm-table": "^2.1.2",
@@ -188,6 +190,7 @@ var devDependencies$2 = {
188
190
  "@modelcontextprotocol/server": "2.3.1",
189
191
  "@orama/core": "^1.2.19",
190
192
  "@oramacloud/client": "^2.1.4",
193
+ "@pierre/highlights": "^0.2.0",
191
194
  "@shikijs/transformers": "^4.5.0",
192
195
  "@tanstack/react-router": "1.170.45",
193
196
  "@types/estree-jsx": "^1.0.5",
@@ -198,7 +201,8 @@ var devDependencies$2 = {
198
201
  "@types/react-dom": "^19.3.0",
199
202
  "algoliasearch": "5.60.0",
200
203
  "flexsearch": "^0.8.212",
201
- "lucide-react": "^1.59.0",
204
+ "hast-util-to-jsx-runtime": "^2.3.6",
205
+ "lucide-react": "^1.61.0",
202
206
  "meilisearch": "0.62.0",
203
207
  "next": "16.4.2",
204
208
  "path-to-regexp": "^8.4.2",
@@ -209,7 +213,7 @@ var devDependencies$2 = {
209
213
  "tsconfig": "workspace:*",
210
214
  "tsdown": "0.23.1",
211
215
  "typescript": "^7.0.2",
212
- "waku": "1.0.0-rc.3",
216
+ "waku": "1.0.0-rc.4",
213
217
  "zod": "4.6.7"
214
218
  };
215
219
  var peerDependencies$2 = {
@@ -218,6 +222,7 @@ var peerDependencies$2 = {
218
222
  "@modelcontextprotocol/server": "2.x.x",
219
223
  "@orama/core": "1.x.x",
220
224
  "@oramacloud/client": "2.x.x",
225
+ "@pierre/highlights": "^0.2.0",
221
226
  "@tanstack/react-router": "1.x.x",
222
227
  "@types/estree-jsx": "*",
223
228
  "@types/hast": "*",
@@ -236,6 +241,7 @@ var peerDependencies$2 = {
236
241
  };
237
242
  var peerDependenciesMeta$2 = {
238
243
  "flexsearch": { "optional": true },
244
+ "@pierre/highlights": { "optional": true },
239
245
  "@mdx-js/mdx": { "optional": true },
240
246
  "@types/estree-jsx": { "optional": true },
241
247
  "@types/hast": { "optional": true },
@@ -310,7 +316,7 @@ var package_exports$1 = /* @__PURE__ */ __exportAll({
310
316
  version: () => version$1
311
317
  });
312
318
  var name$1 = "fumadocs-mdx";
313
- var version$1 = "15.4.9";
319
+ var version$1 = "15.4.10";
314
320
  var description$1 = "The built-in source for Fumadocs";
315
321
  var keywords$1 = ["Docs", "fumadocs"];
316
322
  var homepage$1 = "https://fumadocs.dev";
@@ -358,7 +364,7 @@ var scripts$1 = {
358
364
  var dependencies$1 = {
359
365
  "@mdx-js/mdx": "^3.1.1",
360
366
  "@standard-schema/spec": "^1.1.0",
361
- "chokidar": "^5.0.0",
367
+ "chokidar": "^6.0.0",
362
368
  "esbuild": "^0.28.2",
363
369
  "estree-util-value-to-estree": "^3.5.0",
364
370
  "github-slugger": "^2.0.0",
@@ -391,11 +397,11 @@ var devDependencies$1 = {
391
397
  "remark": "^15.0.1",
392
398
  "remark-directive": "^4.0.0",
393
399
  "remark-mdx": "^3.1.1",
394
- "rolldown": "^1.2.14",
400
+ "rolldown": "^1.2.15",
395
401
  "satteri": "^0.10.5",
396
402
  "tsconfig": "workspace:*",
397
403
  "tsdown": "0.23.1",
398
- "vite": "^8.3.4",
404
+ "vite": "^8.3.5",
399
405
  "webpack": "^5.112.0"
400
406
  };
401
407
  var peerDependencies$1 = {
@@ -403,7 +409,7 @@ var peerDependencies$1 = {
403
409
  "@types/mdast": "*",
404
410
  "@types/mdx": "*",
405
411
  "@types/react": "*",
406
- "fumadocs-core": "^16.17.0",
412
+ "fumadocs-core": "^16.17.8",
407
413
  "mdast-util-directive": "*",
408
414
  "next": "^15.3.0 || ^16.0.0",
409
415
  "react": "^19.2.0",
@@ -470,7 +476,7 @@ var package_exports = /* @__PURE__ */ __exportAll({
470
476
  version: () => version
471
477
  });
472
478
  var name = "@fumadocs/base-ui";
473
- var version = "16.17.7";
479
+ var version = "16.17.8";
474
480
  var description = "The Base UI version of Fumadocs UI";
475
481
  var keywords = ["Docs", "Fumadocs"];
476
482
  var homepage = "https://fumadocs.dev";
@@ -606,9 +612,8 @@ var dependencies = {
606
612
  "@fumadocs/tailwind": "workspace:*",
607
613
  "class-variance-authority": "^0.7.1",
608
614
  "cn": "^0.5.0",
609
- "hast-util-to-jsx-runtime": "^2.3.6",
610
- "lucide-react": "^1.59.0",
611
- "motion": "^14.4.0",
615
+ "lucide-react": "^1.61.0",
616
+ "motion": "^14.6.0",
612
617
  "next-themes": "^0.4.6",
613
618
  "react-remove-scroll": "^2.7.2",
614
619
  "scroll-into-view-if-needed": "^3.1.0",
@@ -737,4 +742,4 @@ depVersions["fumadocs-ui"] = `npm:${name}@${version}`;
737
742
  //#endregion
738
743
  export { templates as i, isCI as n, sourceDir as r, depVersions as t };
739
744
 
740
- //# sourceMappingURL=constants-MMR2kMq9.js.map
745
+ //# sourceMappingURL=constants-qjur1Ohe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants-MMR2kMq9.js","names":["corePkg","mdxPkg","basePkg","versionPkg.dependencies","basePkg.name","basePkg.version"],"sources":["../../create-app-versions/package.json","../../core/package.json","../../mdx/package.json","../../base-ui/package.json","../src/constants.ts"],"sourcesContent":["","","","","import { fileURLToPath } from 'node:url';\nimport versionPkg from '../../create-app-versions/package.json';\nimport * as corePkg from '../../core/package.json';\nimport * as mdxPkg from '../../mdx/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 | 'astro'\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: powerful and mature',\n appDir: '',\n rootProviderPath: 'app/layout.tsx',\n },\n {\n value: 'waku',\n label: 'Waku: Fumadocs MDX',\n hint: 'recommended: fast and simple',\n appDir: 'src',\n rootProviderPath: 'components/provider.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: '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 value: 'astro',\n label: 'Astro: React Islands',\n hint: 'partial support only, uses Astro Content Collections.',\n appDir: 'src',\n rootProviderPath: 'components/docs.tsx',\n },\n];\n\nconst workspaces = [corePkg, mdxPkg, 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\ndepVersions['fumadocs-ui'] = `npm:${basePkg.name}@${basePkg.version}`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AIMA,MAAa,YAAY,cAAc,IAAI,IAAI,OAAO,YAAY,GAAG,CAAC,CAAC,IAAI;AAE3E,MAAa,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAyB1C,MAAa,YAA4B;CACvC;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;AACF;AAEA,MAAM,aAAa;CAACA;CAASC;CAAQC;AAAO;AAE5C,MAAa,cAAcC;AAE3B,KAAK,MAAM,aAAa,YACtB,YAAY,UAAU,QAAoC,UAAU;AAGtE,YAAY,iBAAiB,OAAOC,KAAa,GAAGC"}
1
+ {"version":3,"file":"constants-qjur1Ohe.js","names":["corePkg","mdxPkg","basePkg","versionPkg.dependencies","basePkg.name","basePkg.version"],"sources":["../../create-app-versions/package.json","../../core/package.json","../../mdx/package.json","../../base-ui/package.json","../src/constants.ts"],"sourcesContent":["","","","","import { fileURLToPath } from 'node:url';\nimport versionPkg from '../../create-app-versions/package.json';\nimport * as corePkg from '../../core/package.json';\nimport * as mdxPkg from '../../mdx/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 | 'astro'\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: powerful and mature',\n appDir: '',\n rootProviderPath: 'app/layout.tsx',\n },\n {\n value: 'waku',\n label: 'Waku: Fumadocs MDX',\n hint: 'recommended: fast and simple',\n appDir: 'src',\n rootProviderPath: 'components/provider.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: '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 value: 'astro',\n label: 'Astro: React Islands',\n hint: 'partial support only, uses Astro Content Collections.',\n appDir: 'src',\n rootProviderPath: 'components/docs.tsx',\n },\n];\n\nconst workspaces = [corePkg, mdxPkg, 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\ndepVersions['fumadocs-ui'] = `npm:${basePkg.name}@${basePkg.version}`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AIMA,MAAa,YAAY,cAAc,IAAI,IAAI,OAAO,YAAY,GAAG,CAAC,CAAC,IAAI;AAE3E,MAAa,OAAO,QAAQ,QAAQ,IAAI,EAAE;AAyB1C,MAAa,YAA4B;CACvC;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;CACA;EACE,OAAO;EACP,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;CACpB;AACF;AAEA,MAAM,aAAa;CAACA;CAASC;CAAQC;AAAO;AAE5C,MAAa,cAAcC;AAE3B,KAAK,MAAM,aAAa,YACtB,YAAY,UAAU,QAAoC,UAAU;AAGtE,YAAY,iBAAiB,OAAOC,KAAa,GAAGC"}
@@ -1,4 +1,4 @@
1
- import { t as depVersions } from "./constants-MMR2kMq9.js";
1
+ import { t as depVersions } from "./constants-qjur1Ohe.js";
2
2
  import { HttpRegistryConnector } from "fuma-cli/registry/connector";
3
3
  import { getDefaultConfig } from "@fumadocs/cli/config";
4
4
  import { runFeature } from "@fumadocs/cli/features";
@@ -24,4 +24,4 @@ function feature(feature, options) {
24
24
  //#endregion
25
25
  export { feature as t };
26
26
 
27
- //# sourceMappingURL=feature-wcZdcZvw.js.map
27
+ //# sourceMappingURL=feature-DVMsoTfq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-wcZdcZvw.js","names":[],"sources":["../src/plugins/feature.ts"],"sourcesContent":["import type { TemplatePlugin } from '@/index';\nimport { HttpRegistryConnector } from 'fuma-cli/registry/connector';\nimport { getDefaultConfig } from '@fumadocs/cli/config';\nimport { type Feature, runFeature } from '@fumadocs/cli/features';\nimport { loadProject } from '@fumadocs/cli/project';\nimport { depVersions } from '@/constants';\n\n/** apply a Fumadocs CLI feature to the generated project */\nexport function feature<O extends object>(feature: Feature<O>, options: O): TemplatePlugin {\n return {\n async afterWrite() {\n const config = await getDefaultConfig(this.dest);\n const project = await loadProject(config, this.dest);\n\n await runFeature(feature, options, {\n project,\n connector: new HttpRegistryConnector('https://fumadocs.dev/registry'),\n versions: depVersions,\n io: { log: this.log, installDependencies: false, confirmOverwrite: async () => true },\n });\n },\n };\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,QAA0B,SAAqB,SAA4B;CACzF,OAAO,EACL,MAAM,aAAa;EACjB,MAAM,SAAS,MAAM,iBAAiB,KAAK,IAAI;EAC/C,MAAM,UAAU,MAAM,YAAY,QAAQ,KAAK,IAAI;EAEnD,MAAM,WAAW,SAAS,SAAS;GACjC;GACA,WAAW,IAAI,sBAAsB,+BAA+B;GACpE,UAAU;GACV,IAAI;IAAE,KAAK,KAAK;IAAK,qBAAqB;IAAO,kBAAkB,YAAY;GAAK;EACtF,CAAC;CACH,EACF;AACF"}
1
+ {"version":3,"file":"feature-DVMsoTfq.js","names":[],"sources":["../src/plugins/feature.ts"],"sourcesContent":["import type { TemplatePlugin } from '@/index';\nimport { HttpRegistryConnector } from 'fuma-cli/registry/connector';\nimport { getDefaultConfig } from '@fumadocs/cli/config';\nimport { type Feature, runFeature } from '@fumadocs/cli/features';\nimport { loadProject } from '@fumadocs/cli/project';\nimport { depVersions } from '@/constants';\n\n/** apply a Fumadocs CLI feature to the generated project */\nexport function feature<O extends object>(feature: Feature<O>, options: O): TemplatePlugin {\n return {\n async afterWrite() {\n const config = await getDefaultConfig(this.dest);\n const project = await loadProject(config, this.dest);\n\n await runFeature(feature, options, {\n project,\n connector: new HttpRegistryConnector('https://fumadocs.dev/registry'),\n versions: depVersions,\n io: { log: this.log, installDependencies: false, confirmOverwrite: async () => true },\n });\n },\n };\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,QAA0B,SAAqB,SAA4B;CACzF,OAAO,EACL,MAAM,aAAa;EACjB,MAAM,SAAS,MAAM,iBAAiB,KAAK,IAAI;EAC/C,MAAM,UAAU,MAAM,YAAY,QAAQ,KAAK,IAAI;EAEnD,MAAM,WAAW,SAAS,SAAS;GACjC;GACA,WAAW,IAAI,sBAAsB,+BAA+B;GACpE,UAAU;GACV,IAAI;IAAE,KAAK,KAAK;IAAK,qBAAqB;IAAO,kBAAkB,YAAY;GAAK;EACtF,CAAC;CACH,EACF;AACF"}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export { t as create } from "./src-BCES-2vX.js";
1
+ export { t as create } from "./src-CQgZ1F0v.js";
@@ -1 +1 @@
1
- export { t as feature } from "../feature-wcZdcZvw.js";
1
+ export { t as feature } from "../feature-DVMsoTfq.js";
@@ -1,4 +1,4 @@
1
- import { i as templates, r as sourceDir, t as depVersions } from "./constants-MMR2kMq9.js";
1
+ import { i as templates, r as sourceDir, t as depVersions } from "./constants-qjur1Ohe.js";
2
2
  import fs from "node:fs/promises";
3
3
  import path, { join } from "node:path";
4
4
  import { x } from "tinyexec";
@@ -145,4 +145,4 @@ async function initPackageJson(projectName, packageJsonPath) {
145
145
  //#endregion
146
146
  export { getPackageManager as n, managers as r, create as t };
147
147
 
148
- //# sourceMappingURL=src-BCES-2vX.js.map
148
+ //# sourceMappingURL=src-CQgZ1F0v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"src-BCES-2vX.js","names":[],"sources":["../src/auto-install.ts","../src/utils.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 fs from 'node:fs/promises';\nimport path, { join } from 'node:path';\nimport { x } from 'tinyexec';\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.rm(join(cwd, '.git'), { recursive: true, force: true });\n\n return false;\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, 'utf-8'));\n const dependencies = replaceWorkspaceDeps(packageJson.dependencies);\n const devDependencies = replaceWorkspaceDeps(packageJson.devDependencies);\n const scripts = { ...packageJson.scripts };\n\n return {\n ...packageJson,\n name: projectName,\n scripts,\n dependencies,\n devDependencies,\n };\n}\n"],"mappings":";;;;;AAIA,MAAa,WAAW;CAAC;CAAO;CAAQ;CAAO;AAAM;AAErD,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;CAEvD,IAAI,UAAU,WAAW,MAAM,GAC7B,OAAO;CAGT,IAAI,UAAU,WAAW,MAAM,GAC7B,OAAO;CAGT,IAAI,UAAU,WAAW,KAAK,GAC5B,OAAO;CAGT,OAAO;AACT;AAEA,eAAsB,YAAY,SAAyB,MAAc;CACvE,MAAM,EAAE,SAAS,CAAC,SAAS,GAAG;EAC5B,cAAc;EACd,aAAa;GACX,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;GAC1B;GACA,KAAK;EACP;CACF,CAAC;AACH;;;AChCA,eAAsB,KACpB,MACA,IACA,UAII,CAAC,GACU;CACf,MAAM,EAAE,UAAU,MAAM,GAAG,kBAAkB,MAAM,eAAe,SAAS;CAC3E,MAAM,QAAQ,MAAM,GAAG,KAAK,IAAI;CAEhC,IAAI,MAAM,YAAY,KAAK,UAAU,IAAI,GAAG;EAC1C,MAAM,QAAQ,MAAM,GAAG,QAAQ,IAAI;EAEnC,MAAM,QAAQ,IACZ,MAAM,KAAK,SAAS,KAAK,KAAK,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,CAC/E;CACF;CAEA,IAAI,MAAM,OAAO,KAAK,OAAO,IAAI,GAAG;EAClC,KAAK,OAAO,EAAE;EACd,MAAM,GAAG,MAAM,KAAK,QAAQ,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC;EACpD,MAAM,GAAG,SAAS,MAAM,EAAE;CAC5B;AACF;AAEA,eAAe,kBAAkB,KAAa;CAC5C,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO,CAAC,aAAa,uBAAuB,GAAG,EAC1E,aAAa,EAAE,IAAI,EACrB,CAAC;CAED,OAAO,aAAa;AACtB;AAEA,eAAe,mBAAmB,KAAa;CAC7C,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO,CAAC,UAAU,oBAAoB,GAAG,EACpE,aAAa,EAAE,IAAI,EACrB,CAAC;CAED,OAAO,aAAa;AACtB;AAOA,eAAsB,WAAW,KAA+B;CAC9D,MAAM,EAAE,aAAa,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC;CACjD,IAAI,aAAa,GAAG,OAAO;CAE3B,IAAI,MAAM,kBAAkB,GAAG,GAAG,OAAO;CAEzC,IAAI;EACF,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG;GACvB,cAAc;GACd,aAAa,EAAE,IAAI;EACrB,CAAC;EAED,IAAI,CAAE,MAAM,mBAAmB,GAAG,GAChC,MAAM,EAAE,OAAO;GAAC;GAAY;GAAM;EAAM,GAAG;GACzC,cAAc;GACd,aAAa,EACX,IACF;EACF,CAAC;EAGH,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,GAAG;GAC5B,cAAc;GACd,aAAa,EACX,IACF;EACF,CAAC;EAED,MAAM,EAAE,OAAO;GAAC;GAAU;GAAM;EAAyC,GAAG;GAC1E,cAAc;GACd,aAAa,EACX,IACF;EACF,CAAC;EACD,OAAO;CACT,QAAQ;EACN,MAAM,GAAG,GAAG,KAAK,KAAK,MAAM,GAAG;GAAE,WAAW;GAAM,OAAO;EAAK,CAAC;EAE/D,OAAO;CACT;AACF;;;AC7BA,eAAsB,OAAO,eAAuC;CAClE,MAAM,EACJ,WACA,UAAU,CAAC,GACX,iBAAiB,OACjB,gBAAgB,OAChB,cAAc,OACd,MAAM,QAAQ,QACZ;CAEJ,IAAI,WAAW,UAAU,MAAM,SAAS,KAAK,UAAU,cAAc,QAAQ;CAC7E,KAAK,MAAM,UAAU,SACnB,WAAY,MAAM,OAAO,UAAU,KAAK,EAAE,MAAM,UAAU,GAAG,QAAQ,KAAM;CAG7E,MAAM,SAAS,KAAK,KAAK,WAAW,SAAS,MAAM;CACnD,MAAM,cAAc,KAAK,SAAS,SAAS;CAC3C,MAAM,gBAAuC;EAC3C;EACA,MAAM;EACN;EACA;CACF;CAEA,MAAM,KAAK,KAAK,KAAK,WAAW,YAAY,SAAS,KAAK,GAAG,WAAW,EACtE,OAAO,MAAM;EACX,OAAO,KAAK,QAAQ,qBAAqB,YAAY;EAErD,OAAO,SAAS,SAAS,IAAI,KAAK;CACpC,EACF,CAAC;CAED,MAAM,kBAAkB,KAAK,KAAK,WAAW,cAAc;CAC3D,IAAI,cAAc,MAAM,gBAAgB,aAAa,eAAe;CACpE,KAAK,MAAM,UAAU,SACnB,cAAe,MAAM,OAAO,aAAa,KAAK,eAAe,WAAW,KAAM;CAEhF,MAAM,GAAG,UAAU,iBAAiB,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;CAExE,MAAM,aAAa,KAAK,KAAK,WAAW,WAAW;CACnD,IAAI,SAAS,KAAK,YAAY,MAAM,MAAM,GAAG,SAAS,UAAU;CAChE,KAAK,MAAM,UAAU,SACnB,SAAU,MAAM,OAAO,QAAQ,KAAK,eAAe,MAAM,KAAM;CAEjE,MAAM,GAAG,UAAU,YAAY,MAAM;CAErC,KAAK,MAAM,UAAU,SACnB,MAAM,OAAO,YAAY,KAAK,aAAa;CAG7C,IAAI,aACF,IAAI;EACF,MAAM,YAAY,gBAAgB,SAAS;EAC3C,IAAI,wBAAwB;CAC9B,SAAS,KAAK;EACZ,IAAI,mCAAmC,KAAK;CAC9C;CAGF,IAAI,iBAAkB,MAAM,WAAW,SAAS,GAC9C,IAAI,4BAA4B;AAEpC;AAEA,eAAe,gBACb,aACA,iBAC0B;CAC1B,SAAS,qBAAqB,OAA+B,CAAC,GAAG;EAC/D,KAAK,MAAM,KAAK,MACd,IAAI,KAAK,EAAE,CAAC,WAAW,YAAY,KAAK,KAAK,aAC3C,KAAK,KAAK,YAAY;EAI1B,OAAO;CACT;CAEA,MAAM,cAA+B,KAAK,MAAM,MAAM,GAAG,SAAS,iBAAiB,OAAO,CAAC;CAC3F,MAAM,eAAe,qBAAqB,YAAY,YAAY;CAClE,MAAM,kBAAkB,qBAAqB,YAAY,eAAe;CACxE,MAAM,UAAU,EAAE,GAAG,YAAY,QAAQ;CAEzC,OAAO;EACL,GAAG;EACH,MAAM;EACN;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"src-CQgZ1F0v.js","names":[],"sources":["../src/auto-install.ts","../src/utils.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 fs from 'node:fs/promises';\nimport path, { join } from 'node:path';\nimport { x } from 'tinyexec';\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.rm(join(cwd, '.git'), { recursive: true, force: true });\n\n return false;\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, 'utf-8'));\n const dependencies = replaceWorkspaceDeps(packageJson.dependencies);\n const devDependencies = replaceWorkspaceDeps(packageJson.devDependencies);\n const scripts = { ...packageJson.scripts };\n\n return {\n ...packageJson,\n name: projectName,\n scripts,\n dependencies,\n devDependencies,\n };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-fumadocs-app",
3
- "version": "16.2.25",
3
+ "version": "16.2.26",
4
4
  "description": "Create a new documentation site with Fumadocs",
5
5
  "keywords": [
6
6
  "Docs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "example-next",
3
- "version": "0.0.50",
3
+ "version": "0.0.51",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "build": "next build",
@@ -13,7 +13,7 @@
13
13
  "fumadocs-core": "workspace:*",
14
14
  "fumadocs-mdx": "workspace:*",
15
15
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
16
- "lucide-react": "^1.59.0",
16
+ "lucide-react": "^1.61.0",
17
17
  "next": "16.4.2",
18
18
  "react": "^19.3.1",
19
19
  "react-dom": "^19.3.1"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "example-next-static",
3
- "version": "0.0.50",
3
+ "version": "0.0.51",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "build": "next build",
@@ -13,7 +13,7 @@
13
13
  "fumadocs-core": "workspace:*",
14
14
  "fumadocs-mdx": "workspace:*",
15
15
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
16
- "lucide-react": "^1.59.0",
16
+ "lucide-react": "^1.61.0",
17
17
  "next": "16.4.2",
18
18
  "react": "^19.3.1",
19
19
  "react-dom": "^19.3.1"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "example-astro",
3
- "version": "0.0.46",
3
+ "version": "0.0.47",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -11,16 +11,16 @@
11
11
  "astro": "astro"
12
12
  },
13
13
  "dependencies": {
14
- "@astrojs/markdown-remark": "^7.3.3",
15
- "@astrojs/mdx": "^8.1.0",
16
- "@astrojs/react": "^7.1.0",
17
- "astro": "^7.4.0",
14
+ "@astrojs/markdown-remark": "^7.3.4",
15
+ "@astrojs/mdx": "^8.1.1",
16
+ "@astrojs/react": "^7.1.1",
17
+ "astro": "^7.4.2",
18
18
  "fumadocs-core": "workspace:*",
19
19
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
20
20
  "react": "^19.3.1",
21
21
  "react-dom": "^19.3.1",
22
22
  "sharp": "^0.35.5",
23
- "takumi-js": "^2.17.0"
23
+ "takumi-js": "^2.17.1"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@tailwindcss/vite": "^4.3.3",
@@ -16,11 +16,11 @@
16
16
  "fumadocs-mdx": "workspace:*",
17
17
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
18
18
  "isbot": "^5.2.2",
19
- "lucide-react": "^1.59.0",
19
+ "lucide-react": "^1.61.0",
20
20
  "react": "^19.3.1",
21
21
  "react-dom": "^19.3.1",
22
22
  "react-router": "^8.5.0",
23
- "takumi-js": "^2.17.0"
23
+ "takumi-js": "^2.17.1"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@react-router/dev": "^8.5.0",
@@ -32,6 +32,6 @@
32
32
  "react-router-devtools": "^6.2.3",
33
33
  "tailwindcss": "^4.3.3",
34
34
  "typescript": "^7.0.2",
35
- "vite": "^8.3.4"
35
+ "vite": "^8.3.5"
36
36
  }
37
37
  }
@@ -15,11 +15,11 @@
15
15
  "fumadocs-mdx": "workspace:*",
16
16
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
17
17
  "isbot": "^5.2.2",
18
- "lucide-react": "^1.59.0",
18
+ "lucide-react": "^1.61.0",
19
19
  "react": "^19.3.1",
20
20
  "react-dom": "^19.3.1",
21
21
  "react-router": "^8.5.0",
22
- "takumi-js": "^2.17.0"
22
+ "takumi-js": "^2.17.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@react-router/dev": "^8.5.0",
@@ -32,6 +32,6 @@
32
32
  "serve": "^14.2.6",
33
33
  "tailwindcss": "^4.3.3",
34
34
  "typescript": "^7.0.2",
35
- "vite": "^8.3.4"
35
+ "vite": "^8.3.5"
36
36
  }
37
37
  }
@@ -18,10 +18,10 @@
18
18
  "fumadocs-core": "workspace:*",
19
19
  "fumadocs-mdx": "workspace:*",
20
20
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
21
- "lucide-react": "^1.59.0",
21
+ "lucide-react": "^1.61.0",
22
22
  "react": "^19.3.1",
23
23
  "react-dom": "^19.3.1",
24
- "takumi-js": "^2.17.0"
24
+ "takumi-js": "^2.17.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@tailwindcss/vite": "^4.3.3",
@@ -33,6 +33,6 @@
33
33
  "nitro": "3.0.260903-beta",
34
34
  "tailwindcss": "^4.3.3",
35
35
  "typescript": "^7.0.2",
36
- "vite": "^8.3.4"
36
+ "vite": "^8.3.5"
37
37
  }
38
38
  }
@@ -19,10 +19,10 @@
19
19
  "fumadocs-core": "workspace:*",
20
20
  "fumadocs-mdx": "workspace:*",
21
21
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
22
- "lucide-react": "^1.59.0",
22
+ "lucide-react": "^1.61.0",
23
23
  "react": "^19.3.1",
24
24
  "react-dom": "^19.3.1",
25
- "takumi-js": "^2.17.0"
25
+ "takumi-js": "^2.17.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@tailwindcss/vite": "^4.3.3",
@@ -36,6 +36,6 @@
36
36
  "srvx": "^1.0.6",
37
37
  "tailwindcss": "^4.3.3",
38
38
  "typescript": "^7.0.2",
39
- "vite": "^8.3.4"
39
+ "vite": "^8.3.5"
40
40
  }
41
41
  }
@@ -14,12 +14,12 @@
14
14
  "fumadocs-core": "workspace:*",
15
15
  "fumadocs-mdx": "workspace:*",
16
16
  "fumadocs-ui": "workspace:@fumadocs/base-ui@*",
17
- "lucide-react": "^1.59.0",
17
+ "lucide-react": "^1.61.0",
18
18
  "react": "^19.3.1",
19
19
  "react-dom": "^19.3.1",
20
20
  "react-server-dom-webpack": "^19.3.1",
21
- "takumi-js": "^2.17.0",
22
- "waku": "1.0.0-rc.3"
21
+ "takumi-js": "^2.17.1",
22
+ "waku": "1.0.0-rc.4"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@tailwindcss/vite": "^4.3.3",
@@ -29,6 +29,6 @@
29
29
  "@types/react-dom": "^19.3.0",
30
30
  "tailwindcss": "^4.3.3",
31
31
  "typescript": "^7.0.2",
32
- "vite": "^8.3.4"
32
+ "vite": "^8.3.5"
33
33
  }
34
34
  }