@fumadocs/cli 1.4.1 → 1.6.0

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 (100) hide show
  1. package/dist/ai-BVuNjYXU.js +100 -0
  2. package/dist/ai-BVuNjYXU.js.map +1 -0
  3. package/dist/all-aUHxtoXL.js +27 -0
  4. package/dist/all-aUHxtoXL.js.map +1 -0
  5. package/dist/codemod/index.d.ts +2 -0
  6. package/dist/codemod/index.js +2 -0
  7. package/dist/codemod-auol-p4R.js +404 -0
  8. package/dist/codemod-auol-p4R.js.map +1 -0
  9. package/dist/config-CT2jj39D.d.ts +52 -0
  10. package/dist/config-CT2jj39D.d.ts.map +1 -0
  11. package/dist/config-D6uv73fs.js +94 -0
  12. package/dist/config-D6uv73fs.js.map +1 -0
  13. package/dist/config.d.ts +2 -52
  14. package/dist/config.js +1 -72
  15. package/dist/docs-DeIEl_Kt.js +738 -0
  16. package/dist/docs-DeIEl_Kt.js.map +1 -0
  17. package/dist/epub-CnQFJh09.js +52 -0
  18. package/dist/epub-CnQFJh09.js.map +1 -0
  19. package/dist/features/ai.d.ts +25 -0
  20. package/dist/features/ai.d.ts.map +1 -0
  21. package/dist/features/ai.js +2 -0
  22. package/dist/features/all.d.ts +5 -0
  23. package/dist/features/all.d.ts.map +1 -0
  24. package/dist/features/all.js +2 -0
  25. package/dist/features/docs/index.d.ts +10 -0
  26. package/dist/features/docs/index.d.ts.map +1 -0
  27. package/dist/features/docs/index.js +2 -0
  28. package/dist/features/epub.d.ts +5 -0
  29. package/dist/features/epub.d.ts.map +1 -0
  30. package/dist/features/epub.js +2 -0
  31. package/dist/features/feedback.d.ts +5 -0
  32. package/dist/features/feedback.d.ts.map +1 -0
  33. package/dist/features/feedback.js +2 -0
  34. package/dist/features/index.d.ts +2 -0
  35. package/dist/features/index.js +2 -0
  36. package/dist/features/lint.d.ts +7 -0
  37. package/dist/features/lint.d.ts.map +1 -0
  38. package/dist/features/lint.js +2 -0
  39. package/dist/features/llms.d.ts +27 -0
  40. package/dist/features/llms.d.ts.map +1 -0
  41. package/dist/features/llms.js +2 -0
  42. package/dist/features/mcp.d.ts +9 -0
  43. package/dist/features/mcp.d.ts.map +1 -0
  44. package/dist/features/mcp.js +2 -0
  45. package/dist/features/og.d.ts +8 -0
  46. package/dist/features/og.d.ts.map +1 -0
  47. package/dist/features/og.js +2 -0
  48. package/dist/features/search.d.ts +84 -0
  49. package/dist/features/search.d.ts.map +1 -0
  50. package/dist/features/search.js +2 -0
  51. package/dist/features/utils.d.ts +2 -0
  52. package/dist/features/utils.js +2 -0
  53. package/dist/features/webmcp.d.ts +12 -0
  54. package/dist/features/webmcp.d.ts.map +1 -0
  55. package/dist/features/webmcp.js +2 -0
  56. package/dist/features-C1kf2s8j.js +132 -0
  57. package/dist/features-C1kf2s8j.js.map +1 -0
  58. package/dist/feedback-COmWtc5C.js +37 -0
  59. package/dist/feedback-COmWtc5C.js.map +1 -0
  60. package/dist/fs-D6J9dOEx.js +14 -0
  61. package/dist/fs-D6J9dOEx.js.map +1 -0
  62. package/dist/index-BCVGQxn9.d.ts +64 -0
  63. package/dist/index-BCVGQxn9.d.ts.map +1 -0
  64. package/dist/index-CR9T40ox.d.ts +76 -0
  65. package/dist/index-CR9T40ox.d.ts.map +1 -0
  66. package/dist/index-Ck0EPdgu.d.ts +126 -0
  67. package/dist/index-Ck0EPdgu.d.ts.map +1 -0
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.js +198 -124
  70. package/dist/index.js.map +1 -1
  71. package/dist/{installer-Chjj_R2z.js → installer-D0Obb2Md.js} +21 -8
  72. package/dist/installer-D0Obb2Md.js.map +1 -0
  73. package/dist/lint-zkXUULgO.js +137 -0
  74. package/dist/lint-zkXUULgO.js.map +1 -0
  75. package/dist/llms-CONd8Vnn.js +228 -0
  76. package/dist/llms-CONd8Vnn.js.map +1 -0
  77. package/dist/mcp-BT8BLZZ-.js +67 -0
  78. package/dist/mcp-BT8BLZZ-.js.map +1 -0
  79. package/dist/og-DRDOyQ_t.js +142 -0
  80. package/dist/og-DRDOyQ_t.js.map +1 -0
  81. package/dist/project/index.d.ts +2 -0
  82. package/dist/project/index.js +2 -0
  83. package/dist/project-DwRVTm4p.js +110 -0
  84. package/dist/project-DwRVTm4p.js.map +1 -0
  85. package/dist/registry/installer.d.ts +4 -5
  86. package/dist/registry/installer.d.ts.map +1 -1
  87. package/dist/registry/installer.js +1 -1
  88. package/dist/schema.json +1 -1
  89. package/dist/search-iphnSVVY.js +381 -0
  90. package/dist/search-iphnSVVY.js.map +1 -0
  91. package/dist/utils-B1Xy4l_a.d.ts +43 -0
  92. package/dist/utils-B1Xy4l_a.d.ts.map +1 -0
  93. package/dist/utils-DbMe7h6c.js +98 -0
  94. package/dist/utils-DbMe7h6c.js.map +1 -0
  95. package/dist/webmcp-C2PM_9md.js +135 -0
  96. package/dist/webmcp-C2PM_9md.js.map +1 -0
  97. package/package.json +27 -7
  98. package/dist/config.d.ts.map +0 -1
  99. package/dist/config.js.map +0 -1
  100. package/dist/installer-Chjj_R2z.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ //#region src/config.d.ts
3
+ declare const frameworks: readonly ['next', 'astro', 'waku', 'react-router', 'tanstack-start'];
4
+ type Framework = (typeof frameworks)[number];
5
+ declare function createConfigSchema(cwd?: string): Promise<z.ZodObject<{
6
+ $schema: z.ZodOptional<z.ZodDefault<z.ZodString>>;
7
+ aliases: z.ZodDefault<z.ZodObject<{
8
+ uiDir: z.ZodDefault<z.ZodString>;
9
+ componentsDir: z.ZodDefault<z.ZodString>;
10
+ layoutDir: z.ZodDefault<z.ZodString>;
11
+ cssDir: z.ZodDefault<z.ZodString>;
12
+ libDir: z.ZodDefault<z.ZodString>;
13
+ }, z.core.$strip>>;
14
+ baseDir: z.ZodDefault<z.ZodString>;
15
+ uiLibrary: z.ZodDefault<z.ZodEnum<{
16
+ "base-ui": "base-ui";
17
+ "radix-ui": "radix-ui";
18
+ }>>;
19
+ framework: z.ZodDefault<z.ZodLiteral<"astro" | "next" | "react-router" | "tanstack-start" | "waku">>;
20
+ commands: z.ZodDefault<z.ZodObject<{
21
+ format: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>>;
23
+ }, z.core.$strip>>;
24
+ type ConfigSchema = Awaited<ReturnType<typeof createConfigSchema>>;
25
+ type ConfigInput = z.input<ConfigSchema>;
26
+ type LoadedConfig = z.output<ConfigSchema>;
27
+ declare function createOrLoadConfig(file?: string): Promise<LoadedConfig>;
28
+ /**
29
+ * Write new config, skip if a config already exists
30
+ *
31
+ * @returns the created config, `undefined` if not created
32
+ */
33
+ declare function initConfig(file?: string): Promise<LoadedConfig | undefined>;
34
+ declare function getDefaultConfig(cwd?: string): Promise<{
35
+ $schema?: string | undefined;
36
+ aliases: {
37
+ uiDir: string;
38
+ componentsDir: string;
39
+ layoutDir: string;
40
+ cssDir: string;
41
+ libDir: string;
42
+ };
43
+ baseDir: string;
44
+ uiLibrary: "base-ui" | "radix-ui";
45
+ framework: "astro" | "next" | "react-router" | "tanstack-start" | "waku";
46
+ commands: {
47
+ format?: string | undefined;
48
+ };
49
+ }>;
50
+ //#endregion
51
+ export { createOrLoadConfig as a, createConfigSchema as i, Framework as n, getDefaultConfig as o, LoadedConfig as r, initConfig as s, ConfigInput as t };
52
+ //# sourceMappingURL=config-CT2jj39D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-CT2jj39D.d.ts","names":[],"sources":["../src/config.ts"],"mappings":";;cAMM;KACM,oBAAoB;iBAwBV,mBAAmB,eAAmB,QAAA,EAAA;;;;;;;;;;;;;;;;;;GA6C3D,EAAA,KAAA;KAEI,eAAe,QAAQ,kBAAkB;KAElC,cAAc,EAAE,MAAM;KACtB,eAAe,EAAE,OAAO;iBAEd,mBAAmB,gBAAsB,QAAQ;;;;;;iBAejD,WAAW,gBAAsB,QAAQ;iBAezC,iBAAiB,eAAY"}
@@ -0,0 +1,94 @@
1
+ import fs from "node:fs/promises";
2
+ import { z } from "zod";
3
+ import { existsSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { detectFramework } from "fuma-cli/detect";
6
+ //#region src/config.ts
7
+ const frameworks = [
8
+ "next",
9
+ "astro",
10
+ "waku",
11
+ "react-router",
12
+ "tanstack-start"
13
+ ];
14
+ function isSupportedFramework(v) {
15
+ return frameworks.includes(v);
16
+ }
17
+ /** directories from shadcn's `components.json`, so components are installed at the same place */
18
+ async function readShadcnAliases(cwd) {
19
+ const content = await fs.readFile(path.join(cwd, "components.json"), "utf-8").catch(() => null);
20
+ if (!content) return {};
21
+ const out = {};
22
+ let aliases = {};
23
+ try {
24
+ aliases = JSON.parse(content).aliases ?? {};
25
+ } catch {
26
+ return out;
27
+ }
28
+ for (const [key, alias] of Object.entries(aliases)) if (typeof alias === "string") out[key] = `.${alias.slice(alias.indexOf("/"))}`;
29
+ return out;
30
+ }
31
+ async function createConfigSchema(cwd = process.cwd()) {
32
+ const shadcn = await readShadcnAliases(cwd);
33
+ const defaultAliases = {
34
+ uiDir: shadcn.ui ?? "./components/ui",
35
+ componentsDir: shadcn.components ?? "./components",
36
+ layoutDir: "./layouts",
37
+ cssDir: "./styles",
38
+ libDir: shadcn.lib ?? "./lib"
39
+ };
40
+ let framework = await detectFramework(cwd);
41
+ if (!isSupportedFramework(framework)) framework = "next";
42
+ return z.object({
43
+ $schema: z.string().default("node_modules/@fumadocs/cli/dist/schema.json").optional(),
44
+ aliases: z.object({
45
+ uiDir: z.string().default(defaultAliases.uiDir),
46
+ componentsDir: z.string().default(defaultAliases.componentsDir),
47
+ layoutDir: z.string().default(defaultAliases.layoutDir),
48
+ cssDir: z.string().default(defaultAliases.cssDir),
49
+ libDir: z.string().default(defaultAliases.libDir)
50
+ }).default(defaultAliases),
51
+ baseDir: z.string().default(() => {
52
+ if (framework === "react-router") return "app";
53
+ const routes = {
54
+ next: "app",
55
+ waku: "pages",
56
+ "tanstack-start": "routes"
57
+ }[framework] ?? "";
58
+ if (existsSync(path.resolve(cwd, "src", routes))) return "src";
59
+ if (routes && existsSync(path.resolve(cwd, routes))) return "";
60
+ return existsSync(path.resolve(cwd, "src")) ? "src" : "";
61
+ }),
62
+ uiLibrary: z.enum(["radix-ui", "base-ui"]).default("base-ui"),
63
+ framework: z.literal(frameworks).default(framework),
64
+ commands: z.object({
65
+ /**
66
+ * command to format output code automatically
67
+ */
68
+ format: z.string().optional() }).default({})
69
+ });
70
+ }
71
+ async function createOrLoadConfig(file = "./cli.json") {
72
+ const inited = await initConfig(file);
73
+ if (inited) return inited;
74
+ const content = await fs.readFile(file, "utf-8");
75
+ return (await createConfigSchema()).parse(JSON.parse(content));
76
+ }
77
+ /**
78
+ * Write new config, skip if a config already exists
79
+ *
80
+ * @returns the created config, `undefined` if not created
81
+ */
82
+ async function initConfig(file = "./cli.json") {
83
+ if (await fs.stat(file).then(() => true).catch(() => false)) return;
84
+ const defaultConfig = await getDefaultConfig();
85
+ await fs.writeFile(file, JSON.stringify(defaultConfig, null, 2));
86
+ return defaultConfig;
87
+ }
88
+ async function getDefaultConfig(cwd) {
89
+ return (await createConfigSchema(cwd)).parse({});
90
+ }
91
+ //#endregion
92
+ export { initConfig as i, createOrLoadConfig as n, getDefaultConfig as r, createConfigSchema as t };
93
+
94
+ //# sourceMappingURL=config-D6uv73fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-D6uv73fs.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport { z } from 'zod';\nimport { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { detectFramework } from 'fuma-cli/detect';\n\nconst frameworks = ['next', 'astro', 'waku', 'react-router', 'tanstack-start'] as const;\nexport type Framework = (typeof frameworks)[number];\n\nfunction isSupportedFramework(v: string): v is Framework {\n return frameworks.includes(v as Framework);\n}\n\n/** directories from shadcn's `components.json`, so components are installed at the same place */\nasync function readShadcnAliases(cwd: string): Promise<Record<string, string>> {\n const content = await fs.readFile(path.join(cwd, 'components.json'), 'utf-8').catch(() => null);\n if (!content) return {};\n const out: Record<string, string> = {};\n let aliases: Record<string, unknown> = {};\n try {\n aliases = JSON.parse(content).aliases ?? {};\n } catch {\n return out;\n }\n for (const [key, alias] of Object.entries(aliases)) {\n // e.g. `@/components/ui` -> `./components/ui`\n if (typeof alias === 'string') out[key] = `.${alias.slice(alias.indexOf('/'))}`;\n }\n return out;\n}\n\nexport async function createConfigSchema(cwd = process.cwd()) {\n const shadcn = await readShadcnAliases(cwd);\n const defaultAliases = {\n uiDir: shadcn.ui ?? './components/ui',\n componentsDir: shadcn.components ?? './components',\n layoutDir: './layouts',\n cssDir: './styles',\n libDir: shadcn.lib ?? './lib',\n };\n\n let framework = await detectFramework(cwd);\n if (!isSupportedFramework(framework)) framework = 'next';\n\n return z.object({\n $schema: z.string().default('node_modules/@fumadocs/cli/dist/schema.json').optional(),\n aliases: z\n .object({\n uiDir: z.string().default(defaultAliases.uiDir),\n componentsDir: z.string().default(defaultAliases.componentsDir),\n layoutDir: z.string().default(defaultAliases.layoutDir),\n cssDir: z.string().default(defaultAliases.cssDir),\n libDir: z.string().default(defaultAliases.libDir),\n })\n .default(defaultAliases),\n\n baseDir: z.string().default(() => {\n if (framework === 'react-router') return 'app';\n // the routes directory of the framework decides whether app code lives in `src`\n const routes = { next: 'app', waku: 'pages', 'tanstack-start': 'routes' }[framework] ?? '';\n if (existsSync(path.resolve(cwd, 'src', routes))) return 'src';\n if (routes && existsSync(path.resolve(cwd, routes))) return '';\n return existsSync(path.resolve(cwd, 'src')) ? 'src' : '';\n }),\n uiLibrary: z.enum(['radix-ui', 'base-ui']).default('base-ui'),\n framework: z.literal(frameworks).default(framework),\n\n commands: z\n .object({\n /**\n * command to format output code automatically\n */\n format: z.string().optional(),\n })\n .default({}),\n });\n}\n\ntype ConfigSchema = Awaited<ReturnType<typeof createConfigSchema>>;\n\nexport type ConfigInput = z.input<ConfigSchema>;\nexport type LoadedConfig = z.output<ConfigSchema>;\n\nexport async function createOrLoadConfig(file = './cli.json'): Promise<LoadedConfig> {\n const inited = await initConfig(file);\n if (inited) return inited;\n\n const content = await fs.readFile(file, 'utf-8');\n const configSchema = await createConfigSchema();\n\n return configSchema.parse(JSON.parse(content));\n}\n\n/**\n * Write new config, skip if a config already exists\n *\n * @returns the created config, `undefined` if not created\n */\nexport async function initConfig(file = './cli.json'): Promise<LoadedConfig | undefined> {\n if (\n await fs\n .stat(file)\n .then(() => true)\n .catch(() => false)\n ) {\n return;\n }\n\n const defaultConfig = await getDefaultConfig();\n await fs.writeFile(file, JSON.stringify(defaultConfig, null, 2));\n return defaultConfig;\n}\n\nexport async function getDefaultConfig(cwd?: string) {\n const schema = await createConfigSchema(cwd);\n return schema.parse({} satisfies ConfigInput);\n}\n"],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,52 +1,2 @@
1
- import { z } from "zod";
2
- //#region src/config.d.ts
3
- declare const frameworks: readonly ["next", "astro", "waku", "react-router", "tanstack-start"];
4
- type Framework = (typeof frameworks)[number];
5
- declare function createConfigSchema(cwd?: any): Promise<z.ZodObject<{
6
- $schema: z.ZodOptional<z.ZodDefault<z.ZodString>>;
7
- aliases: z.ZodDefault<z.ZodObject<{
8
- uiDir: z.ZodDefault<z.ZodString>;
9
- componentsDir: z.ZodDefault<z.ZodString>;
10
- layoutDir: z.ZodDefault<z.ZodString>;
11
- cssDir: z.ZodDefault<z.ZodString>;
12
- libDir: z.ZodDefault<z.ZodString>;
13
- }, z.core.$strip>>;
14
- baseDir: z.ZodDefault<z.ZodString>;
15
- uiLibrary: z.ZodDefault<z.ZodEnum<{
16
- "radix-ui": "radix-ui";
17
- "base-ui": "base-ui";
18
- }>>;
19
- framework: z.ZodDefault<z.ZodLiteral<"next" | "astro" | "waku" | "react-router" | "tanstack-start">>;
20
- commands: z.ZodDefault<z.ZodObject<{
21
- format: z.ZodOptional<z.ZodString>;
22
- }, z.core.$strip>>;
23
- }, z.core.$strip>>;
24
- type ConfigSchema = Awaited<ReturnType<typeof createConfigSchema>>;
25
- type ConfigInput = z.input<ConfigSchema>;
26
- type LoadedConfig = z.output<ConfigSchema>;
27
- declare function createOrLoadConfig(file?: string): Promise<LoadedConfig>;
28
- /**
29
- * Write new config, skip if a config already exists
30
- *
31
- * @returns the created config, `undefined` if not created
32
- */
33
- declare function initConfig(file?: string): Promise<LoadedConfig | undefined>;
34
- declare function getDefaultConfig(cwd?: string): Promise<{
35
- aliases: {
36
- uiDir: string;
37
- componentsDir: string;
38
- layoutDir: string;
39
- cssDir: string;
40
- libDir: string;
41
- };
42
- baseDir: string;
43
- uiLibrary: "radix-ui" | "base-ui";
44
- framework: "next" | "astro" | "waku" | "react-router" | "tanstack-start";
45
- commands: {
46
- format?: string | undefined;
47
- };
48
- $schema?: string | undefined;
49
- }>;
50
- //#endregion
51
- export { ConfigInput, Framework, LoadedConfig, createConfigSchema, createOrLoadConfig, getDefaultConfig, initConfig };
52
- //# sourceMappingURL=config.d.ts.map
1
+ import { a as createOrLoadConfig, i as createConfigSchema, n as Framework, o as getDefaultConfig, r as LoadedConfig, s as initConfig, t as ConfigInput } from "./config-CT2jj39D.js";
2
+ export { ConfigInput, Framework, LoadedConfig, createConfigSchema, createOrLoadConfig, getDefaultConfig, initConfig };
package/dist/config.js CHANGED
@@ -1,73 +1,2 @@
1
- import fs from "node:fs/promises";
2
- import { z } from "zod";
3
- import { existsSync } from "node:fs";
4
- import path from "node:path";
5
- import { detectFramework } from "fuma-cli/detect";
6
- //#region src/config.ts
7
- const frameworks = [
8
- "next",
9
- "astro",
10
- "waku",
11
- "react-router",
12
- "tanstack-start"
13
- ];
14
- function isSupportedFramework(v) {
15
- return frameworks.includes(v);
16
- }
17
- async function createConfigSchema(cwd = process.cwd()) {
18
- const defaultAliases = {
19
- uiDir: "./components/ui",
20
- componentsDir: "./components",
21
- layoutDir: "./layouts",
22
- cssDir: "./styles",
23
- libDir: "./lib"
24
- };
25
- let framework = await detectFramework(cwd);
26
- if (!isSupportedFramework(framework)) framework = "next";
27
- return z.object({
28
- $schema: z.string().default("node_modules/@fumadocs/cli/dist/schema.json").optional(),
29
- aliases: z.object({
30
- uiDir: z.string().default(defaultAliases.uiDir),
31
- componentsDir: z.string().default(defaultAliases.uiDir),
32
- layoutDir: z.string().default(defaultAliases.layoutDir),
33
- cssDir: z.string().default(defaultAliases.componentsDir),
34
- libDir: z.string().default(defaultAliases.libDir)
35
- }).default(defaultAliases),
36
- baseDir: z.string().default(() => {
37
- if (framework === "react-router" && existsSync(path.resolve(cwd, "app"))) return "app";
38
- if (existsSync(path.resolve(cwd, "src"))) return "src";
39
- return "";
40
- }),
41
- uiLibrary: z.enum(["radix-ui", "base-ui"]).default("base-ui"),
42
- framework: z.literal(frameworks).default(framework),
43
- commands: z.object({
44
- /**
45
- * command to format output code automatically
46
- */
47
- format: z.string().optional() }).default({})
48
- });
49
- }
50
- async function createOrLoadConfig(file = "./cli.json") {
51
- const inited = await initConfig(file);
52
- if (inited) return inited;
53
- const content = await fs.readFile(file, "utf-8");
54
- return (await createConfigSchema()).parse(JSON.parse(content));
55
- }
56
- /**
57
- * Write new config, skip if a config already exists
58
- *
59
- * @returns the created config, `undefined` if not created
60
- */
61
- async function initConfig(file = "./cli.json") {
62
- if (await fs.stat(file).then(() => true).catch(() => false)) return;
63
- const defaultConfig = await getDefaultConfig();
64
- await fs.writeFile(file, JSON.stringify(defaultConfig, null, 2));
65
- return defaultConfig;
66
- }
67
- async function getDefaultConfig(cwd) {
68
- return (await createConfigSchema(cwd)).parse({});
69
- }
70
- //#endregion
1
+ import { i as initConfig, n as createOrLoadConfig, r as getDefaultConfig, t as createConfigSchema } from "./config-D6uv73fs.js";
71
2
  export { createConfigSchema, createOrLoadConfig, getDefaultConfig, initConfig };
72
-
73
- //# sourceMappingURL=config.js.map