create-fumadocs-app 16.0.33 → 16.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/bin.d.ts +1 -1
  2. package/dist/bin.js +155 -206
  3. package/dist/bin.js.map +1 -0
  4. package/dist/constants-CReWPhck.js +150 -0
  5. package/dist/constants-CReWPhck.js.map +1 -0
  6. package/dist/index-CC4EFQ5p.d.ts +67 -0
  7. package/dist/index-CC4EFQ5p.d.ts.map +1 -0
  8. package/dist/index.d.ts +2 -63
  9. package/dist/index.js +4 -7
  10. package/dist/plugins/biome.base.d.ts +40 -45
  11. package/dist/plugins/biome.base.d.ts.map +1 -0
  12. package/dist/plugins/biome.base.js +37 -17
  13. package/dist/plugins/biome.base.js.map +1 -0
  14. package/dist/plugins/biome.d.ts +4 -2
  15. package/dist/plugins/biome.d.ts.map +1 -0
  16. package/dist/plugins/biome.js +30 -40
  17. package/dist/plugins/biome.js.map +1 -0
  18. package/dist/plugins/biome.next.d.ts +41 -49
  19. package/dist/plugins/biome.next.d.ts.map +1 -0
  20. package/dist/plugins/biome.next.js +43 -17
  21. package/dist/plugins/biome.next.js.map +1 -0
  22. package/dist/plugins/eslint.d.ts +4 -2
  23. package/dist/plugins/eslint.d.ts.map +1 -0
  24. package/dist/plugins/eslint.js +30 -33
  25. package/dist/plugins/eslint.js.map +1 -0
  26. package/dist/plugins/next-use-src.d.ts +5 -2
  27. package/dist/plugins/next-use-src.d.ts.map +1 -0
  28. package/dist/plugins/next-use-src.js +33 -35
  29. package/dist/plugins/next-use-src.js.map +1 -0
  30. package/dist/plugins/orama-cloud.d.ts +4 -2
  31. package/dist/plugins/orama-cloud.d.ts.map +1 -0
  32. package/dist/plugins/orama-cloud.js +210 -276
  33. package/dist/plugins/orama-cloud.js.map +1 -0
  34. package/dist/src-DWqRvlfn.js +89 -0
  35. package/dist/src-DWqRvlfn.js.map +1 -0
  36. package/package.json +19 -18
  37. package/template/+next+fuma-docs-mdx/app/docs/[[...slug]]/page.tsx +2 -9
  38. package/template/+next+fuma-docs-mdx/app/docs/layout.tsx +1 -1
  39. package/template/+next+fuma-docs-mdx/app/og/docs/[...slug]/route.tsx +2 -9
  40. package/template/+next+fuma-docs-mdx/package.json +2 -2
  41. package/template/+next+fuma-docs-mdx/source.config.ts +1 -6
  42. package/template/+orama-cloud/@app/components/search.tsx +1 -6
  43. package/template/react-router/app/docs/page.tsx +1 -6
  44. package/template/react-router/app/root.tsx +1 -3
  45. package/template/react-router/package.json +6 -6
  46. package/template/react-router/tsconfig.json +1 -6
  47. package/template/react-router-spa/app/components/search.tsx +1 -6
  48. package/template/react-router-spa/app/docs/page.tsx +2 -7
  49. package/template/react-router-spa/app/root.tsx +1 -3
  50. package/template/react-router-spa/package.json +6 -6
  51. package/template/react-router-spa/tsconfig.json +1 -6
  52. package/template/tanstack-start/content/docs/index.mdx +1 -4
  53. package/template/tanstack-start/package.json +4 -4
  54. package/template/tanstack-start/src/components/not-found.tsx +2 -2
  55. package/template/tanstack-start/src/routes/__root.tsx +1 -6
  56. package/template/tanstack-start/src/routes/docs/$.tsx +1 -6
  57. package/template/tanstack-start/src/routes/index.tsx +1 -3
  58. package/template/tanstack-start-spa/content/docs/index.mdx +1 -4
  59. package/template/tanstack-start-spa/package.json +5 -5
  60. package/template/tanstack-start-spa/src/components/not-found.tsx +2 -2
  61. package/template/tanstack-start-spa/src/components/search.tsx +1 -6
  62. package/template/tanstack-start-spa/src/routes/__root.tsx +1 -6
  63. package/template/tanstack-start-spa/src/routes/docs/$.tsx +2 -7
  64. package/template/waku/package.json +4 -4
  65. package/template/waku/src/pages/docs/[...slugs].tsx +2 -9
  66. package/template/waku/src/pages/docs/_layout.tsx +1 -1
  67. package/dist/chunk-7QPQHHV2.js +0 -179
  68. package/dist/chunk-BEZTHMLF.js +0 -51
  69. package/dist/chunk-EM5SN2F4.js +0 -130
  70. package/dist/chunk-JCFTHRDR.js +0 -50
package/dist/bin.d.ts CHANGED
@@ -1 +1 @@
1
- #!/usr/bin/env node
1
+ export { };
package/dist/bin.js CHANGED
@@ -1,215 +1,164 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- create,
4
- getPackageManager,
5
- managers
6
- } from "./chunk-EM5SN2F4.js";
7
- import {
8
- isCI,
9
- templates
10
- } from "./chunk-7QPQHHV2.js";
11
-
12
- // src/bin.ts
13
- import fs from "fs/promises";
14
- import path from "path";
15
- import {
16
- cancel,
17
- confirm,
18
- group,
19
- intro,
20
- isCancel,
21
- outro,
22
- select,
23
- spinner,
24
- text
25
- } from "@clack/prompts";
2
+ import { n as getPackageManager, r as managers, t as create } from "./src-DWqRvlfn.js";
3
+ import { i as templates, n as isCI } from "./constants-CReWPhck.js";
4
+ import fs from "node:fs/promises";
5
+ import path from "node:path";
6
+ import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
26
7
  import pc from "picocolors";
27
8
  import { Option, program } from "@commander-js/extra-typings";
28
- var command = program.argument("[name]", "the project name").option("--src", "(Next.js only) enable `src/` directory").option("--install", "install packages automatically").option("--no-git", "disable auto Git repository initialization").addOption(
29
- new Option(
30
- "--linter <name>",
31
- "configure a linter/formatter, ESLint is currently Next.js only."
32
- ).choices(["eslint", "biome"])
33
- ).addOption(
34
- new Option("--search <name>", "configure a search solution").choices([
35
- "orama",
36
- "orama-cloud"
37
- ])
38
- ).addOption(
39
- new Option("--template <name>", "choose a template").choices(
40
- templates.map((item) => item.value)
41
- )
42
- ).addOption(
43
- new Option("--pm <name>", "choose a package manager").choices(managers).default(getPackageManager())
44
- );
9
+
10
+ //#region src/bin.ts
11
+ const command = program.argument("[name]", "the project name").option("--src", "(Next.js only) enable `src/` directory").option("--install", "install packages automatically").option("--no-git", "disable auto Git repository initialization").addOption(new Option("--linter <name>", "configure a linter/formatter, ESLint is currently Next.js only.").choices(["eslint", "biome"])).addOption(new Option("--search <name>", "configure a search solution").choices(["orama", "orama-cloud"])).addOption(new Option("--template <name>", "choose a template").choices(templates.map((item) => item.value))).addOption(new Option("--pm <name>", "choose a package manager").choices(managers).default(getPackageManager()));
45
12
  async function main() {
46
- command.parse(process.argv);
47
- const defaultName = command.args[0];
48
- const config = command.opts();
49
- intro(pc.bgCyan(pc.bold("Create Fumadocs App")));
50
- const options = await group(
51
- {
52
- name: async () => {
53
- if (defaultName) return defaultName;
54
- if (isCI) return "untitled";
55
- return text({
56
- message: "Project name",
57
- placeholder: "my-app",
58
- defaultValue: "my-app"
59
- });
60
- },
61
- template: async () => {
62
- if (config.template) return config.template;
63
- if (isCI) return "+next+fuma-docs-mdx";
64
- return select({
65
- message: "Choose a template",
66
- initialValue: "+next+fuma-docs-mdx",
67
- options: templates
68
- });
69
- },
70
- src: async ({ results }) => {
71
- if (config.src !== void 0) return config.src;
72
- if (isCI || !results.template?.startsWith("+next")) return false;
73
- return confirm({
74
- message: "Use `/src` directory?",
75
- initialValue: false
76
- });
77
- },
78
- lint: async ({ results }) => {
79
- if (config.linter !== void 0) return config.linter;
80
- if (isCI) return "disabled";
81
- return select({
82
- message: "Configure linter?",
83
- options: results.template === "+next+fuma-docs-mdx" ? [
84
- {
85
- value: "disabled",
86
- label: "Disabled"
87
- },
88
- {
89
- value: "eslint",
90
- label: "ESLint"
91
- },
92
- {
93
- value: "biome",
94
- label: "Biome"
95
- }
96
- ] : [
97
- {
98
- value: "disabled",
99
- label: "Disabled"
100
- },
101
- {
102
- value: "biome",
103
- label: "Biome"
104
- }
105
- ]
106
- });
107
- },
108
- search: async () => {
109
- if (config.search !== void 0) return config.search;
110
- if (isCI) return "orama";
111
- return select({
112
- message: "Choose a search solution?",
113
- options: [
114
- {
115
- value: "orama",
116
- label: "Default",
117
- hint: "local search powered by Orama, recommended"
118
- },
119
- {
120
- value: "orama-cloud",
121
- label: "Orama Cloud",
122
- hint: "3rd party search solution, signup needed"
123
- }
124
- ]
125
- });
126
- },
127
- installDeps: async () => {
128
- if (config.install !== void 0) return config.install;
129
- if (isCI) return false;
130
- return confirm({
131
- message: `Do you want to install packages automatically? (detected as ${config.pm})`
132
- });
133
- }
134
- },
135
- {
136
- onCancel: () => {
137
- cancel("Installation Stopped.");
138
- process.exit(0);
139
- }
140
- }
141
- );
142
- const projectName = options.name.toLowerCase().replace(/\s/, "-");
143
- if (!isCI) await checkDir(projectName);
144
- const info = spinner();
145
- info.start(`Generating Project`);
146
- const plugins = [];
147
- if (options.src) {
148
- const { nextUseSrc } = await import("./plugins/next-use-src.js");
149
- plugins.push(nextUseSrc());
150
- }
151
- if (options.search === "orama-cloud") {
152
- const { oramaCloud } = await import("./plugins/orama-cloud.js");
153
- plugins.push(oramaCloud());
154
- }
155
- if (options.lint === "eslint") {
156
- const { eslint } = await import("./plugins/eslint.js");
157
- plugins.push(eslint());
158
- }
159
- if (options.lint === "biome") {
160
- const { biome } = await import("./plugins/biome.js");
161
- plugins.push(biome());
162
- }
163
- await create({
164
- packageManager: config.pm,
165
- template: options.template,
166
- outputDir: projectName,
167
- installDeps: options.installDeps,
168
- initializeGit: config.git,
169
- plugins,
170
- log: (message) => {
171
- info.message(message);
172
- }
173
- });
174
- info.stop("Project Generated");
175
- outro(pc.bgGreen(pc.bold("Done")));
176
- console.log(pc.bold("\nOpen the project"));
177
- console.log(pc.cyan(`cd ${projectName}`));
178
- console.log(pc.bold("\nRun Development Server"));
179
- if (config.pm === "npm" || config.pm === "bun") {
180
- console.log(pc.cyan(`${config.pm} run dev`));
181
- } else {
182
- console.log(pc.cyan(`${config.pm} dev`));
183
- }
184
- console.log(
185
- pc.bold("\nYou can now open the project and start writing documents")
186
- );
187
- process.exit(0);
13
+ command.parse(process.argv);
14
+ const defaultName = command.args[0];
15
+ const config = command.opts();
16
+ intro(pc.bgCyan(pc.bold("Create Fumadocs App")));
17
+ const options = await group({
18
+ name: async () => {
19
+ if (defaultName) return defaultName;
20
+ if (isCI) return "untitled";
21
+ return text({
22
+ message: "Project name",
23
+ placeholder: "my-app",
24
+ defaultValue: "my-app"
25
+ });
26
+ },
27
+ template: async () => {
28
+ if (config.template) return config.template;
29
+ if (isCI) return "+next+fuma-docs-mdx";
30
+ return select({
31
+ message: "Choose a template",
32
+ initialValue: "+next+fuma-docs-mdx",
33
+ options: templates
34
+ });
35
+ },
36
+ src: async ({ results }) => {
37
+ if (config.src !== void 0) return config.src;
38
+ if (isCI || !results.template?.startsWith("+next")) return false;
39
+ return confirm({
40
+ message: "Use `/src` directory?",
41
+ initialValue: false
42
+ });
43
+ },
44
+ lint: async ({ results }) => {
45
+ if (config.linter !== void 0) return config.linter;
46
+ if (isCI) return "disabled";
47
+ return select({
48
+ message: "Configure linter?",
49
+ options: results.template === "+next+fuma-docs-mdx" ? [
50
+ {
51
+ value: "disabled",
52
+ label: "Disabled"
53
+ },
54
+ {
55
+ value: "eslint",
56
+ label: "ESLint"
57
+ },
58
+ {
59
+ value: "biome",
60
+ label: "Biome"
61
+ }
62
+ ] : [{
63
+ value: "disabled",
64
+ label: "Disabled"
65
+ }, {
66
+ value: "biome",
67
+ label: "Biome"
68
+ }]
69
+ });
70
+ },
71
+ search: async () => {
72
+ if (config.search !== void 0) return config.search;
73
+ if (isCI) return "orama";
74
+ return select({
75
+ message: "Choose a search solution?",
76
+ options: [{
77
+ value: "orama",
78
+ label: "Default",
79
+ hint: "local search powered by Orama, recommended"
80
+ }, {
81
+ value: "orama-cloud",
82
+ label: "Orama Cloud",
83
+ hint: "3rd party search solution, signup needed"
84
+ }]
85
+ });
86
+ },
87
+ installDeps: async () => {
88
+ if (config.install !== void 0) return config.install;
89
+ if (isCI) return false;
90
+ return confirm({ message: `Do you want to install packages automatically? (detected as ${config.pm})` });
91
+ }
92
+ }, { onCancel: () => {
93
+ cancel("Installation Stopped.");
94
+ process.exit(0);
95
+ } });
96
+ const projectName = options.name.toLowerCase().replace(/\s/, "-");
97
+ if (!isCI) await checkDir(projectName);
98
+ const info = spinner();
99
+ info.start(`Generating Project`);
100
+ const plugins = [];
101
+ if (options.src) {
102
+ const { nextUseSrc } = await import("./plugins/next-use-src.js");
103
+ plugins.push(nextUseSrc());
104
+ }
105
+ if (options.search === "orama-cloud") {
106
+ const { oramaCloud } = await import("./plugins/orama-cloud.js");
107
+ plugins.push(oramaCloud());
108
+ }
109
+ if (options.lint === "eslint") {
110
+ const { eslint } = await import("./plugins/eslint.js");
111
+ plugins.push(eslint());
112
+ }
113
+ if (options.lint === "biome") {
114
+ const { biome } = await import("./plugins/biome.js");
115
+ plugins.push(biome());
116
+ }
117
+ await create({
118
+ packageManager: config.pm,
119
+ template: options.template,
120
+ outputDir: projectName,
121
+ installDeps: options.installDeps,
122
+ initializeGit: config.git,
123
+ plugins,
124
+ log: (message) => {
125
+ info.message(message);
126
+ }
127
+ });
128
+ info.stop("Project Generated");
129
+ outro(pc.bgGreen(pc.bold("Done")));
130
+ console.log(pc.bold("\nOpen the project"));
131
+ console.log(pc.cyan(`cd ${projectName}`));
132
+ console.log(pc.bold("\nRun Development Server"));
133
+ if (config.pm === "npm" || config.pm === "bun") console.log(pc.cyan(`${config.pm} run dev`));
134
+ else console.log(pc.cyan(`${config.pm} dev`));
135
+ console.log(pc.bold("\nYou can now open the project and start writing documents"));
136
+ process.exit(0);
188
137
  }
189
138
  async function checkDir(outputDir) {
190
- const destDir = await fs.readdir(outputDir).catch(() => null);
191
- if (!destDir || destDir.length === 0) return;
192
- const del = await confirm({
193
- message: `directory ${outputDir} already exists, do you want to delete its files?`
194
- });
195
- if (isCancel(del)) {
196
- cancel();
197
- process.exit(1);
198
- }
199
- if (!del) return;
200
- const info = spinner();
201
- info.start(`Deleting files in ${outputDir}`);
202
- await Promise.all(
203
- destDir.map((item) => {
204
- return fs.rm(path.join(outputDir, item), {
205
- recursive: true,
206
- force: true
207
- });
208
- })
209
- );
210
- info.stop(`Deleted files in ${outputDir}`);
139
+ const destDir = await fs.readdir(outputDir).catch(() => null);
140
+ if (!destDir || destDir.length === 0) return;
141
+ const del = await confirm({ message: `directory ${outputDir} already exists, do you want to delete its files?` });
142
+ if (isCancel(del)) {
143
+ cancel();
144
+ process.exit(1);
145
+ }
146
+ if (!del) return;
147
+ const info = spinner();
148
+ info.start(`Deleting files in ${outputDir}`);
149
+ await Promise.all(destDir.map((item) => {
150
+ return fs.rm(path.join(outputDir, item), {
151
+ recursive: true,
152
+ force: true
153
+ });
154
+ }));
155
+ info.stop(`Deleted files in ${outputDir}`);
211
156
  }
212
157
  main().catch((e) => {
213
- console.error(e);
214
- process.exit(1);
158
+ console.error(e);
159
+ process.exit(1);
215
160
  });
161
+
162
+ //#endregion
163
+ export { };
164
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","names":["plugins: TemplatePlugin[]"],"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n cancel,\n confirm,\n group,\n intro,\n isCancel,\n outro,\n select,\n spinner,\n text,\n} from '@clack/prompts';\nimport pc from 'picocolors';\nimport { getPackageManager, managers } from './auto-install';\nimport { create, type Template, type TemplatePlugin } from './index';\nimport { isCI, templates } from './constants';\nimport { Option, program } from '@commander-js/extra-typings';\n\nconst command = program\n .argument('[name]', 'the project name')\n .option('--src', '(Next.js only) enable `src/` directory')\n .option('--install', 'install packages automatically')\n .option('--no-git', 'disable auto Git repository initialization')\n .addOption(\n new Option(\n '--linter <name>',\n 'configure a linter/formatter, ESLint is currently Next.js only.',\n ).choices(['eslint', 'biome']),\n )\n .addOption(\n new Option('--search <name>', 'configure a search solution').choices(['orama', 'orama-cloud']),\n )\n .addOption(\n new Option('--template <name>', 'choose a template').choices(\n templates.map((item) => item.value),\n ),\n )\n .addOption(\n new Option('--pm <name>', 'choose a package manager')\n .choices(managers)\n .default(getPackageManager()),\n );\n\nasync function main(): Promise<void> {\n command.parse(process.argv);\n const defaultName = command.args[0];\n const config = command.opts();\n intro(pc.bgCyan(pc.bold('Create Fumadocs App')));\n\n const options = await group(\n {\n name: async () => {\n if (defaultName) return defaultName;\n if (isCI) return 'untitled';\n\n return text({\n message: 'Project name',\n placeholder: 'my-app',\n defaultValue: 'my-app',\n });\n },\n template: async () => {\n if (config.template) return config.template;\n if (isCI) return '+next+fuma-docs-mdx';\n\n return select<Template>({\n message: 'Choose a template',\n initialValue: '+next+fuma-docs-mdx',\n options: templates,\n });\n },\n src: async ({ results }: { results: { template?: Template } }) => {\n if (config.src !== undefined) return config.src;\n if (isCI || !results.template?.startsWith('+next')) return false;\n\n return confirm({\n message: 'Use `/src` directory?',\n initialValue: false,\n });\n },\n lint: async ({ results }: { results: { template?: Template } }) => {\n if (config.linter !== undefined) return config.linter;\n if (isCI) return 'disabled';\n\n return select({\n message: 'Configure linter?',\n options:\n results.template === '+next+fuma-docs-mdx'\n ? [\n {\n value: 'disabled',\n label: 'Disabled',\n },\n {\n value: 'eslint',\n label: 'ESLint',\n },\n {\n value: 'biome',\n label: 'Biome',\n },\n ]\n : [\n {\n value: 'disabled',\n label: 'Disabled',\n },\n {\n value: 'biome',\n label: 'Biome',\n },\n ],\n });\n },\n search: async () => {\n if (config.search !== undefined) return config.search;\n if (isCI) return 'orama';\n\n return select({\n message: 'Choose a search solution?',\n options: [\n {\n value: 'orama',\n label: 'Default',\n hint: 'local search powered by Orama, recommended',\n },\n {\n value: 'orama-cloud',\n label: 'Orama Cloud',\n hint: '3rd party search solution, signup needed',\n },\n ],\n });\n },\n installDeps: async () => {\n if (config.install !== undefined) return config.install;\n if (isCI) return false;\n\n return confirm({\n message: `Do you want to install packages automatically? (detected as ${config.pm})`,\n });\n },\n },\n {\n onCancel: () => {\n cancel('Installation Stopped.');\n process.exit(0);\n },\n },\n );\n\n const projectName = options.name.toLowerCase().replace(/\\s/, '-');\n if (!isCI) await checkDir(projectName);\n\n const info = spinner();\n info.start(`Generating Project`);\n const plugins: TemplatePlugin[] = [];\n\n if (options.src) {\n const { nextUseSrc } = await import('./plugins/next-use-src');\n plugins.push(nextUseSrc());\n }\n\n if (options.search === 'orama-cloud') {\n const { oramaCloud } = await import('./plugins/orama-cloud');\n plugins.push(oramaCloud());\n }\n\n if (options.lint === 'eslint') {\n const { eslint } = await import('./plugins/eslint');\n plugins.push(eslint());\n }\n\n if (options.lint === 'biome') {\n const { biome } = await import('./plugins/biome');\n plugins.push(biome());\n }\n\n await create({\n packageManager: config.pm,\n template: options.template,\n outputDir: projectName,\n installDeps: options.installDeps,\n initializeGit: config.git,\n plugins,\n log: (message) => {\n info.message(message);\n },\n });\n\n info.stop('Project Generated');\n\n outro(pc.bgGreen(pc.bold('Done')));\n\n console.log(pc.bold('\\nOpen the project'));\n console.log(pc.cyan(`cd ${projectName}`));\n\n console.log(pc.bold('\\nRun Development Server'));\n if (config.pm === 'npm' || config.pm === 'bun') {\n console.log(pc.cyan(`${config.pm} run dev`));\n } else {\n console.log(pc.cyan(`${config.pm} dev`));\n }\n console.log(pc.bold('\\nYou can now open the project and start writing documents'));\n\n process.exit(0);\n}\n\nasync function checkDir(outputDir: string) {\n const destDir = await fs.readdir(outputDir).catch(() => null);\n if (!destDir || destDir.length === 0) return;\n const del = await confirm({\n message: `directory ${outputDir} already exists, do you want to delete its files?`,\n });\n\n if (isCancel(del)) {\n cancel();\n process.exit(1);\n }\n\n if (!del) return;\n\n const info = spinner();\n info.start(`Deleting files in ${outputDir}`);\n\n await Promise.all(\n destDir.map((item) => {\n return fs.rm(path.join(outputDir, item), {\n recursive: true,\n force: true,\n });\n }),\n );\n\n info.stop(`Deleted files in ${outputDir}`);\n}\n\nmain().catch((e: unknown) => {\n console.error(e);\n process.exit(1);\n});\n"],"mappings":"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"}
@@ -0,0 +1,150 @@
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
+ "@orama/core": "^1.2.15",
78
+ "eslint": "^9.39.2",
79
+ "fumadocs-core": "workspace:*",
80
+ "fumadocs-mdx": "workspace:*",
81
+ "fumadocs-ui": "workspace:*"
82
+ };
83
+
84
+ //#endregion
85
+ //#region ../core/package.json
86
+ var version$2 = "16.4.2";
87
+
88
+ //#endregion
89
+ //#region ../ui/package.json
90
+ var version$1 = "16.4.2";
91
+
92
+ //#endregion
93
+ //#region ../mdx/package.json
94
+ var version = "14.2.4";
95
+
96
+ //#endregion
97
+ //#region src/constants.ts
98
+ const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);
99
+ const isCI = Boolean(process.env.CI);
100
+ const templates = [
101
+ {
102
+ value: "+next+fuma-docs-mdx",
103
+ label: "Next.js: Fumadocs MDX",
104
+ hint: "recommended",
105
+ appDir: "",
106
+ rootProviderPath: "app/layout.tsx"
107
+ },
108
+ {
109
+ value: "waku",
110
+ label: "Waku: Fumadocs MDX",
111
+ appDir: "src",
112
+ rootProviderPath: "components/provider.tsx"
113
+ },
114
+ {
115
+ value: "react-router",
116
+ label: "React Router: Fumadocs MDX (not RSC)",
117
+ appDir: "app",
118
+ rootProviderPath: "root.tsx"
119
+ },
120
+ {
121
+ value: "react-router-spa",
122
+ label: "React Router SPA: Fumadocs MDX (not RSC)",
123
+ hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
124
+ appDir: "app",
125
+ rootProviderPath: "root.tsx"
126
+ },
127
+ {
128
+ value: "tanstack-start",
129
+ label: "Tanstack Start: Fumadocs MDX (not RSC)",
130
+ appDir: "src",
131
+ rootProviderPath: "routes/__root.tsx"
132
+ },
133
+ {
134
+ value: "tanstack-start-spa",
135
+ label: "Tanstack Start SPA: Fumadocs MDX (not RSC)",
136
+ hint: "SPA mode allows you to host the site statically, compatible with a CDN.",
137
+ appDir: "src",
138
+ rootProviderPath: "routes/__root.tsx"
139
+ }
140
+ ];
141
+ const depVersions = {
142
+ ...dependencies,
143
+ "fumadocs-core": version$2,
144
+ "fumadocs-ui": version$1,
145
+ "fumadocs-mdx": version
146
+ };
147
+
148
+ //#endregion
149
+ 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 };
150
+ //# sourceMappingURL=constants-CReWPhck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants-CReWPhck.js","names":["result: Partial<T>","templates: TemplateInfo[]","versionPkg.dependencies","coreVersion","uiVersion","mdxVersion"],"sources":["../src/utils.ts","../../create-app-versions/package.json","../../core/package.json","../../ui/package.json","../../mdx/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 { version as coreVersion } from '../../core/package.json';\nimport { version as uiVersion } from '../../ui/package.json';\nimport { version as mdxVersion } from '../../mdx/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 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: '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 = {\n ...versionPkg.dependencies,\n 'fumadocs-core': coreVersion,\n 'fumadocs-ui': uiVersion,\n 'fumadocs-mdx': mdxVersion,\n};\n"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ //#region src/auto-install.d.ts
2
+ type PackageManager = (typeof managers)[number];
3
+ declare const managers: readonly ["npm", "yarn", "bun", "pnpm"];
4
+ //#endregion
5
+ //#region src/constants.d.ts
6
+ interface TemplateInfo {
7
+ value: '+next+fuma-docs-mdx' | 'waku' | 'react-router' | 'react-router-spa' | 'tanstack-start' | 'tanstack-start-spa';
8
+ label: string;
9
+ appDir: string;
10
+ /**
11
+ * path to root provider, relative to `appDir``
12
+ */
13
+ rootProviderPath: string;
14
+ hint?: string;
15
+ /**
16
+ * rename files when copying from template
17
+ */
18
+ rename?: (name: string) => string;
19
+ }
20
+ //#endregion
21
+ //#region src/index.d.ts
22
+ type Template = TemplateInfo['value'];
23
+ interface Options {
24
+ outputDir: string;
25
+ template: Template;
26
+ /**
27
+ * the package manager to use
28
+ *
29
+ * @defaultValue 'npm'
30
+ */
31
+ packageManager?: PackageManager;
32
+ installDeps?: boolean;
33
+ initializeGit?: boolean;
34
+ log?: (message: string) => void;
35
+ plugins?: TemplatePlugin[];
36
+ }
37
+ interface TemplatePluginContext {
38
+ template: TemplateInfo;
39
+ log: (message: string) => void;
40
+ /**
41
+ * output directory
42
+ */
43
+ dest: string;
44
+ /**
45
+ * output directory for app code (e.g. under `/src`)
46
+ */
47
+ appDir: string;
48
+ }
49
+ type PackageJsonType = {
50
+ name?: string;
51
+ version?: string;
52
+ private?: boolean;
53
+ scripts?: Record<string, string>;
54
+ dependencies?: Record<string, string>;
55
+ devDependencies?: Record<string, string>;
56
+ } & Record<string, unknown>;
57
+ type Awaitable<T> = T | Promise<T>;
58
+ interface TemplatePlugin {
59
+ template?: (this: Pick<TemplatePluginContext, 'dest'>, info: TemplateInfo) => Awaitable<void | TemplateInfo>;
60
+ packageJson?: (this: TemplatePluginContext, packageJson: PackageJsonType) => Awaitable<void | PackageJsonType>;
61
+ afterWrite?: (this: TemplatePluginContext) => Awaitable<void>;
62
+ readme?: (this: TemplatePluginContext, content: string) => Awaitable<void | string>;
63
+ }
64
+ declare function create(createOptions: Options): Promise<void>;
65
+ //#endregion
66
+ export { TemplatePluginContext as a, TemplatePlugin as i, PackageJsonType as n, create as o, Template as r, Options as t };
67
+ //# sourceMappingURL=index-CC4EFQ5p.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CC4EFQ5p.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,UCMI,YAAA,CDN8C;;;;ECM9C;;;;ECHL,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;EDAK;;;;ACHjB;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"}