create-apppaaaul 2.0.2 → 2.0.4

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 (82) hide show
  1. package/README.md +20 -20
  2. package/dist/index.js +168 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/templates/nextjs-ts-clean/project/.editorconfig +9 -0
  5. package/dist/templates/nextjs-ts-clean/project/.vscode/launch.json +28 -0
  6. package/dist/templates/nextjs-ts-clean/project/.vscode/settings.json +8 -0
  7. package/dist/templates/nextjs-ts-clean/project/README.md +15 -0
  8. package/dist/templates/nextjs-ts-clean/project/eslint.config.mjs +172 -0
  9. package/dist/templates/nextjs-ts-clean/project/next.config.mjs +13 -0
  10. package/dist/templates/nextjs-ts-clean/project/package.json +46 -0
  11. package/dist/templates/nextjs-ts-clean/project/pnpm-lock.yaml +5463 -0
  12. package/dist/templates/nextjs-ts-clean/project/postcss.config.js +6 -0
  13. package/dist/templates/nextjs-ts-clean/project/public/next.svg +1 -0
  14. package/dist/templates/nextjs-ts-clean/project/public/vercel.svg +1 -0
  15. package/dist/templates/nextjs-ts-clean/project/src/app/favicon.ico +0 -0
  16. package/dist/templates/nextjs-ts-clean/project/src/app/globals.css +77 -0
  17. package/dist/templates/nextjs-ts-clean/project/src/app/layout.tsx +26 -0
  18. package/dist/templates/nextjs-ts-clean/project/src/app/page.tsx +5 -0
  19. package/dist/templates/nextjs-ts-clean/project/src/components/ui/button.tsx +49 -0
  20. package/dist/templates/nextjs-ts-clean/project/src/lib/utils.ts +6 -0
  21. package/dist/templates/nextjs-ts-clean/project/tailwind.config.ts +80 -0
  22. package/dist/templates/nextjs-ts-clean/project/tsconfig.json +27 -0
  23. package/dist/templates/nextjs-ts-landing/project/.editorconfig +9 -0
  24. package/dist/templates/nextjs-ts-landing/project/.eslintrc.cjs +101 -0
  25. package/dist/templates/nextjs-ts-landing/project/.eslintrc.mjs +172 -0
  26. package/dist/templates/nextjs-ts-landing/project/.vscode/launch.json +28 -0
  27. package/dist/templates/nextjs-ts-landing/project/.vscode/settings.json +8 -0
  28. package/dist/templates/nextjs-ts-landing-drizzle/project/.editorconfig +9 -0
  29. package/dist/templates/nextjs-ts-landing-drizzle/project/.eslintrc.mjs +172 -0
  30. package/dist/templates/nextjs-ts-landing-drizzle/project/.vscode/launch.json +28 -0
  31. package/dist/templates/nextjs-ts-landing-drizzle/project/.vscode/settings.json +8 -0
  32. package/dist/templates/nextjs-ts-landing-drizzle/project/README.md +15 -0
  33. package/dist/templates/nextjs-ts-landing-drizzle/project/components.json +17 -0
  34. package/dist/templates/nextjs-ts-landing-drizzle/project/docker-compose.yml +15 -0
  35. package/dist/templates/nextjs-ts-landing-drizzle/project/drizzle.config.ts +11 -0
  36. package/dist/templates/nextjs-ts-landing-drizzle/project/next.config.mjs +10 -0
  37. package/dist/templates/nextjs-ts-landing-drizzle/project/package.json +57 -0
  38. package/dist/templates/nextjs-ts-landing-drizzle/project/pnpm-lock.yaml +6248 -0
  39. package/dist/templates/nextjs-ts-landing-drizzle/project/postcss.config.js +6 -0
  40. package/dist/templates/nextjs-ts-landing-drizzle/project/public/next.svg +1 -0
  41. package/dist/templates/nextjs-ts-landing-drizzle/project/public/vercel.svg +1 -0
  42. package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/api/auth/[...nextauth]/route.ts +3 -0
  43. package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/favicon.ico +0 -0
  44. package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/globals.css +47 -0
  45. package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/layout.tsx +20 -0
  46. package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/page.tsx +5 -0
  47. package/dist/templates/nextjs-ts-landing-drizzle/project/src/auth.ts +79 -0
  48. package/dist/templates/nextjs-ts-landing-drizzle/project/src/components/ui/button.tsx +49 -0
  49. package/dist/templates/nextjs-ts-landing-drizzle/project/src/db/index.ts +25 -0
  50. package/dist/templates/nextjs-ts-landing-drizzle/project/src/db/schema.ts +93 -0
  51. package/dist/templates/nextjs-ts-landing-drizzle/project/src/lib/utils.ts +6 -0
  52. package/dist/templates/nextjs-ts-landing-drizzle/project/tailwind.config.ts +80 -0
  53. package/dist/templates/nextjs-ts-landing-drizzle/project/tsconfig.json +27 -0
  54. package/dist/templates/nextjs-ts-landing-prisma/project/.editorconfig +9 -0
  55. package/dist/templates/nextjs-ts-landing-prisma/project/.vscode/launch.json +28 -0
  56. package/dist/templates/nextjs-ts-landing-prisma/project/.vscode/settings.json +8 -0
  57. package/dist/templates/nextjs-ts-landing-prisma/project/README.md +15 -0
  58. package/dist/templates/nextjs-ts-landing-prisma/project/components.json +17 -0
  59. package/dist/templates/nextjs-ts-landing-prisma/project/docker-compose.yml +15 -0
  60. package/dist/templates/nextjs-ts-landing-prisma/project/eslint.config.mjs +172 -0
  61. package/dist/templates/nextjs-ts-landing-prisma/project/next.config.mjs +10 -0
  62. package/dist/templates/nextjs-ts-landing-prisma/project/package.json +58 -0
  63. package/dist/templates/nextjs-ts-landing-prisma/project/pnpm-lock.yaml +5854 -0
  64. package/dist/templates/nextjs-ts-landing-prisma/project/pnpm-workspace.yaml +6 -0
  65. package/dist/templates/nextjs-ts-landing-prisma/project/postcss.config.mjs +5 -0
  66. package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/20250329125127_init/migration.sql +25 -0
  67. package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/migration_lock.toml +3 -0
  68. package/dist/templates/nextjs-ts-landing-prisma/project/prisma/schema.prisma +24 -0
  69. package/dist/templates/nextjs-ts-landing-prisma/project/public/next.svg +1 -0
  70. package/dist/templates/nextjs-ts-landing-prisma/project/public/vercel.svg +1 -0
  71. package/dist/templates/nextjs-ts-landing-prisma/project/src/app/api/auth/[...nextauth]/route.ts +3 -0
  72. package/dist/templates/nextjs-ts-landing-prisma/project/src/app/favicon.ico +0 -0
  73. package/dist/templates/nextjs-ts-landing-prisma/project/src/app/globals.css +117 -0
  74. package/dist/templates/nextjs-ts-landing-prisma/project/src/app/layout.tsx +20 -0
  75. package/dist/templates/nextjs-ts-landing-prisma/project/src/app/page.tsx +5 -0
  76. package/dist/templates/nextjs-ts-landing-prisma/project/src/auth.ts +79 -0
  77. package/dist/templates/nextjs-ts-landing-prisma/project/src/components/ui/button.tsx +49 -0
  78. package/dist/templates/nextjs-ts-landing-prisma/project/src/lib/db.ts +11 -0
  79. package/dist/templates/nextjs-ts-landing-prisma/project/src/lib/utils.ts +6 -0
  80. package/dist/templates/nextjs-ts-landing-prisma/project/tailwind.config.ts +80 -0
  81. package/dist/templates/nextjs-ts-landing-prisma/project/tsconfig.json +27 -0
  82. package/package.json +43 -43
package/README.md CHANGED
@@ -1,20 +1,20 @@
1
- # Create AppPaaaul
2
-
3
- Create projects as Paauldev would.
4
- Based on [appcny](https://github.com/goncy/create-appncy)
5
-
6
- ## Usage
7
-
8
- ```bash
9
- # Interactive mode
10
- pnpm create apppaaaul
11
- ```
12
-
13
- ## Installation
14
-
15
- ```bash
16
- pnpm install -g create-apppaaaul
17
- ```
18
-
19
- ## Questions?
20
-
1
+ # Create AppPaaaul
2
+
3
+ Create projects as Paauldev would.
4
+ Based on [appcny](https://github.com/goncy/create-appncy)
5
+
6
+ ## Usage
7
+
8
+ ```bash
9
+ # Interactive mode
10
+ pnpm create apppaaaul
11
+ ```
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ pnpm install -g create-apppaaaul
17
+ ```
18
+
19
+ ## Questions?
20
+
package/dist/index.js ADDED
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // node_modules/.pnpm/tsup@8.4.0_typescript@5.8.2_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js
26
+ var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
27
+ var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
28
+
29
+ // index.ts
30
+ var import_node_path = __toESM(require("path"));
31
+ var import_node_url = require("url");
32
+ var import_promises = require("fs/promises");
33
+ var import_child_process = require("child_process");
34
+ var import_util = require("util");
35
+ var import_picocolors = require("picocolors");
36
+ var import_glob = require("glob");
37
+ var import_picocolors2 = __toESM(require("picocolors"));
38
+ var import_prompts = __toESM(require("prompts"));
39
+ var import_yargs = __toESM(require("yargs"));
40
+ var import_helpers = require("yargs/helpers");
41
+
42
+ // helpers/install.ts
43
+ var import_cross_spawn = __toESM(require("cross-spawn"));
44
+ async function install() {
45
+ const packageManager = "pnpm";
46
+ const args2 = ["install"];
47
+ return new Promise((resolve, reject) => {
48
+ const child = (0, import_cross_spawn.default)(packageManager, args2, {
49
+ stdio: "inherit",
50
+ env: {
51
+ ...process.env,
52
+ ADBLOCK: "1",
53
+ // we set NODE_ENV to development as pnpm skips dev
54
+ // dependencies when production
55
+ NODE_ENV: "development",
56
+ DISABLE_OPENCOLLECTIVE: "1"
57
+ }
58
+ });
59
+ child.on("close", (code) => {
60
+ if (code !== 0) {
61
+ reject({ command: `${packageManager} ${args2.join(" ")}` });
62
+ return;
63
+ }
64
+ resolve();
65
+ });
66
+ });
67
+ }
68
+
69
+ // index.ts
70
+ var execAsync = (0, import_util.promisify)(import_child_process.exec);
71
+ var TEMPLATES = [
72
+ {
73
+ title: "Nextjs ts with db setup Landing with prisma",
74
+ value: "nextjs-ts-landing-prisma"
75
+ },
76
+ {
77
+ title: "Nextjs ts with db setup Landing with drizzle",
78
+ value: "nextjs-ts-landing-drizzle"
79
+ },
80
+ {
81
+ title: "Nextjs ts clean",
82
+ value: "nextjs-ts-clean"
83
+ }
84
+ ];
85
+ var args = (0, import_yargs.default)((0, import_helpers.hideBin)(process.argv)).options({
86
+ name: {
87
+ alias: "n",
88
+ type: "string",
89
+ description: "Name of the project"
90
+ },
91
+ template: {
92
+ alias: "t",
93
+ type: "string",
94
+ description: "Template to use"
95
+ }
96
+ });
97
+ import_prompts.default.override(args.argv);
98
+ async function main() {
99
+ const {
100
+ _: [initialName, initialProject]
101
+ } = await args.argv;
102
+ const project = await (0, import_prompts.default)(
103
+ [
104
+ {
105
+ type: "text",
106
+ name: "name",
107
+ message: "What is the name of your project?",
108
+ initial: initialName || "apppaaaul-project",
109
+ validate: (value) => {
110
+ if (value !== "." && value.match(/[^a-zA-Z0-9-_]+/g)) {
111
+ return "Project name can only contain letters, numbers, dashes, underscores, or be '.' for the current directory";
112
+ }
113
+ return true;
114
+ }
115
+ },
116
+ {
117
+ type: "select",
118
+ name: "template",
119
+ message: `Which template would you like to use?`,
120
+ initial: initialProject || 0,
121
+ choices: TEMPLATES
122
+ }
123
+ ],
124
+ {
125
+ onCancel: () => {
126
+ console.log("\nBye \u{1F44B}\n");
127
+ process.exit(0);
128
+ }
129
+ }
130
+ );
131
+ const template = import_node_path.default.join(
132
+ import_node_path.default.dirname((0, import_node_url.fileURLToPath)(importMetaUrl)),
133
+ "templates",
134
+ project.template
135
+ );
136
+ const destination = project.name === "." ? process.cwd() : import_node_path.default.join(process.cwd(), project.name);
137
+ await (0, import_promises.cp)(import_node_path.default.join(template, "project"), destination, { recursive: true });
138
+ const files = await (0, import_glob.glob)(`**/*`, { nodir: true, cwd: destination, absolute: true });
139
+ for await (const file of files) {
140
+ const data = await (0, import_promises.readFile)(file, "utf8");
141
+ const draft = data.replace(/{{name}}/g, project.name);
142
+ await (0, import_promises.writeFile)(file, draft, "utf8");
143
+ }
144
+ console.log("\n\u2728 Project created \u2728");
145
+ if (project.name !== ".") {
146
+ try {
147
+ await execAsyc(`cd ${project.name}`);
148
+ console.log(`
149
+ ${import_picocolors2.default.green(`cd`)} ${project.name}`);
150
+ } catch (error) {
151
+ console.error(`Error executing commands: ${error}`);
152
+ }
153
+ }
154
+ try {
155
+ await execAsync("cursor .");
156
+ console.log("Installing packages. This might take a couple of minutes.");
157
+ console.log();
158
+ await install();
159
+ console.log();
160
+ console.log(`${(0, import_picocolors.green)("Success!")} App installed successfully.`);
161
+ console.log((0, import_picocolors.cyan)("Initializing the development server..."));
162
+ await execAsync("pnpm dev");
163
+ } catch (error) {
164
+ console.error(`Error executing commands: ${error}`);
165
+ }
166
+ }
167
+ main().catch(console.error);
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/.pnpm/tsup@8.4.0_typescript@5.8.2_yaml@2.4.5/node_modules/tsup/assets/cjs_shims.js","../index.ts","../helpers/install.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","#!/usr/bin/env node\n\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { cp, readFile, writeFile } from \"node:fs/promises\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nimport { cyan, green, red } from \"picocolors\";\nimport { glob } from \"glob\";\nimport color from \"picocolors\";\nimport prompts from \"prompts\";\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\n\nimport { install } from \"./helpers/install\";\nconst execAsync = promisify(exec);\n\n// Define the templates available\nconst TEMPLATES = [\n {\n title: \"Nextjs ts with db setup Landing with prisma\",\n value: \"nextjs-ts-landing-prisma\",\n },\n {\n title: \"Nextjs ts with db setup Landing with drizzle\",\n value: \"nextjs-ts-landing-drizzle\",\n },\n {\n title: 'Nextjs ts clean',\n value: 'nextjs-ts-clean'\n }\n];\n\n// Specify CLI arguments\nconst args = yargs(hideBin(process.argv)).options({\n name: {\n alias: \"n\",\n type: \"string\",\n description: \"Name of the project\",\n },\n template: {\n alias: \"t\",\n type: \"string\",\n description: \"Template to use\",\n },\n});\n\n// Override arguments passed on the CLI\nprompts.override(args.argv);\n\nasync function main() {\n // Get the initial values for the prompts\n const {\n _: [initialName, initialProject],\n } = await args.argv;\n\n // Create the project prompt\n const project = await prompts(\n [\n {\n type: \"text\",\n name: \"name\",\n message: \"What is the name of your project?\",\n initial: initialName || \"apppaaaul-project\",\n validate: (value) => {\n if (value !== \".\" && value.match(/[^a-zA-Z0-9-_]+/g)) {\n return \"Project name can only contain letters, numbers, dashes, underscores, or be '.' for the current directory\";\n }\n\n return true;\n },\n },\n {\n type: \"select\",\n name: \"template\",\n message: `Which template would you like to use?`,\n initial: initialProject || 0,\n choices: TEMPLATES,\n },\n ],\n {\n onCancel: () => {\n console.log(\"\\nBye 👋\\n\");\n\n process.exit(0);\n },\n },\n );\n\n // Get the template folder for the selected template\n const template = path.join(\n path.dirname(fileURLToPath(import.meta.url)),\n \"templates\",\n project.template,\n );\n\n // Get the destination folder for the project\n const destination = project.name === \".\" ? process.cwd() : path.join(process.cwd(), project.name);\n\n // Copy files from the template folder to the current directory\n await cp(path.join(template, \"project\"), destination, { recursive: true });\n\n // Get all files from the destination folder\n const files = await glob(`**/*`, { nodir: true, cwd: destination, absolute: true });\n\n // Read each file and replace the tokens\n for await (const file of files) {\n const data = await readFile(file, \"utf8\");\n const draft = data.replace(/{{name}}/g, project.name);\n\n await writeFile(file, draft, \"utf8\");\n }\n\n // Log outro message\n console.log(\"\\n✨ Project created ✨\");\n\n // Run commands if a new directory was created\n if (project.name !== \".\") {\n try {\n await execAsyc(`cd ${project.name}`);\n console.log(`\\n${color.green(`cd`)} ${project.name}`);\n } catch (error) {\n console.error(`Error executing commands: ${error}`);\n }\n }\n try {\n await execAsync(\"cursor .\");\n console.log(\"Installing packages. This might take a couple of minutes.\");\n console.log();\n await install();\n console.log();\n console.log(`${green(\"Success!\")} App installed successfully.`);\n console.log(cyan(\"Initializing the development server...\"));\n //TODO: Add docker-compose up, docker create db, pnpm run db:push\n await execAsync(\"pnpm dev\");\n } catch (error) {\n console.error(`Error executing commands: ${error}`);\n }\n}\n\n// Run the main function\nmain().catch(console.error);\n","import spawn from \"cross-spawn\";\nimport { yellow } from \"picocolors\";\n\nexport async function install(): Promise<void> {\n const packageManager = \"pnpm\";\n const args: string[] = [\"install\"];\n\n return new Promise((resolve, reject) => {\n /**\n * Spawn the installation process.\n */\n const child = spawn(packageManager, args, {\n stdio: \"inherit\",\n env: {\n ...process.env,\n ADBLOCK: \"1\",\n // we set NODE_ENV to development as pnpm skips dev\n // dependencies when production\n NODE_ENV: \"development\",\n DISABLE_OPENCOLLECTIVE: \"1\",\n },\n });\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n reject({ command: `${packageManager} ${args.join(\" \")}` });\n\n return;\n }\n resolve();\n });\n });\n}\n"],"mappings":"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","names":["import_picocolors","args","spawn","yargs","prompts","path","color"]}
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ insert_final_newline = true
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ trim_trailing_whitespace = true
9
+ max_line_length = 80
@@ -0,0 +1,28 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Next.js: debug server-side",
6
+ "type": "node-terminal",
7
+ "request": "launch",
8
+ "command": "pnpm dev"
9
+ },
10
+ {
11
+ "name": "Next.js: debug client-side",
12
+ "type": "chrome",
13
+ "request": "launch",
14
+ "url": "http://localhost:3000"
15
+ },
16
+ {
17
+ "name": "Next.js: debug full stack",
18
+ "type": "node-terminal",
19
+ "request": "launch",
20
+ "command": "pnpm dev",
21
+ "serverReadyAction": {
22
+ "pattern": "started server on .+, url: (https?://.+)",
23
+ "uriFormat": "%s",
24
+ "action": "debugWithChrome"
25
+ }
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "editor.formatOnSave": false,
3
+ "typescript.tsdk": "node_modules\\typescript\\lib",
4
+ "typescript.enablePromptUseWorkspaceTsdk": true,
5
+ "editor.codeActionsOnSave": {
6
+ "source.fixAll.eslint": "explicit"
7
+ }
8
+ }
@@ -0,0 +1,15 @@
1
+ ## Getting Started with {{name}}
2
+
3
+ First, run the development server:
4
+
5
+ ```bash
6
+ npm run dev
7
+ # or
8
+ yarn dev
9
+ # or
10
+ pnpm dev
11
+ ```
12
+
13
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
14
+
15
+ You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
@@ -0,0 +1,172 @@
1
+ import globals from "globals";
2
+ import tseslint from "typescript-eslint";
3
+ import eslintPluginReact from "eslint-plugin-react";
4
+ import eslintPluginReactHooks from "eslint-plugin-react-hooks";
5
+ import {fixupPluginRules} from "@eslint/compat";
6
+ import eslintPluginPrettier from "eslint-plugin-prettier/recommended";
7
+ import eslintPluginImport from "eslint-plugin-import";
8
+ import eslintPluginReactCompiler from "eslint-plugin-react-compiler";
9
+ import eslintPluginNext from "@next/eslint-plugin-next";
10
+ import eslintPluginJsxA11y from "eslint-plugin-jsx-a11y";
11
+ import vercelStyleGuideTypescript from "@vercel/style-guide/eslint/typescript";
12
+ import vercelStyleGuideReact from "@vercel/style-guide/eslint/rules/react";
13
+ import vercelStyleGuideNext from "@vercel/style-guide/eslint/next";
14
+
15
+ export default [
16
+ // Ignores configuration
17
+ {
18
+ ignores: ["node_modules", ".next", "out", "coverage", ".idea"],
19
+ },
20
+ // General configuration
21
+ {
22
+ rules: {
23
+ "padding-line-between-statements": [
24
+ "warn",
25
+ {blankLine: "always", prev: "*", next: ["return", "export"]},
26
+ {blankLine: "always", prev: ["const", "let", "var"], next: "*"},
27
+ {blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]},
28
+ ],
29
+ "no-console": "warn",
30
+ },
31
+ },
32
+ // React configuration
33
+ {
34
+ plugins: {
35
+ react: fixupPluginRules(eslintPluginReact),
36
+ "react-hooks": fixupPluginRules(eslintPluginReactHooks),
37
+ "react-compiler": fixupPluginRules(eslintPluginReactCompiler),
38
+ "jsx-a11y": fixupPluginRules(eslintPluginJsxA11y),
39
+ },
40
+ languageOptions: {
41
+ parserOptions: {
42
+ ecmaFeatures: {
43
+ jsx: true,
44
+ },
45
+ },
46
+ globals: {
47
+ ...globals.browser,
48
+ ...globals.serviceworker,
49
+ },
50
+ },
51
+ settings: {
52
+ react: {
53
+ version: "detect",
54
+ },
55
+ },
56
+ rules: {
57
+ ...eslintPluginReact.configs.recommended.rules,
58
+ ...eslintPluginJsxA11y.configs.recommended.rules,
59
+ ...eslintPluginReactHooks.configs.recommended.rules,
60
+ ...vercelStyleGuideReact.rules,
61
+ "react/prop-types": "off",
62
+ "react/jsx-uses-react": "off",
63
+ "react/react-in-jsx-scope": "off",
64
+ "react/self-closing-comp": "warn",
65
+ "react/jsx-sort-props": [
66
+ "warn",
67
+ {
68
+ callbacksLast: true,
69
+ shorthandFirst: true,
70
+ noSortAlphabetically: false,
71
+ reservedFirst: true,
72
+ },
73
+ ],
74
+ "react-compiler/react-compiler": "error",
75
+ "jsx-a11y/no-static-element-interactions": "off",
76
+ "jsx-a11y/click-events-have-key-events": "off",
77
+ },
78
+ },
79
+ // TypeScript configuration
80
+ ...[
81
+ ...tseslint.configs.recommended,
82
+ {
83
+ rules: {
84
+ ...vercelStyleGuideTypescript.rules,
85
+ "@typescript-eslint/no-non-null-assertion": "off",
86
+ "@typescript-eslint/no-shadow": "off",
87
+ "@typescript-eslint/explicit-function-return-type": "off",
88
+ "@typescript-eslint/require-await": "off",
89
+ "@typescript-eslint/no-floating-promises": "off",
90
+ "@typescript-eslint/no-confusing-void-expression": "off",
91
+ "@typescript-eslint/no-unused-vars": [
92
+ "warn",
93
+ {
94
+ args: "after-used",
95
+ ignoreRestSiblings: false,
96
+ argsIgnorePattern: "^_.*?$",
97
+ },
98
+ ],
99
+ },
100
+ },
101
+ ],
102
+ // Prettier configuration
103
+ ...[
104
+ eslintPluginPrettier,
105
+ {
106
+ rules: {
107
+ "prettier/prettier": [
108
+ "warn",
109
+ {
110
+ printWidth: 100,
111
+ trailingComma: "all",
112
+ tabWidth: 2,
113
+ semi: true,
114
+ singleQuote: false,
115
+ bracketSpacing: true,
116
+ arrowParens: "always",
117
+ endOfLine: "auto",
118
+ plugins: ["prettier-plugin-tailwindcss"],
119
+ },
120
+ ],
121
+ },
122
+ },
123
+ ],
124
+ // Import configuration
125
+ {
126
+ plugins: {
127
+ import: fixupPluginRules(eslintPluginImport),
128
+ },
129
+ rules: {
130
+ "import/no-default-export": "off",
131
+ "import/order": [
132
+ "warn",
133
+ {
134
+ groups: [
135
+ "type",
136
+ "builtin",
137
+ "object",
138
+ "external",
139
+ "internal",
140
+ "parent",
141
+ "sibling",
142
+ "index",
143
+ ],
144
+ pathGroups: [
145
+ {
146
+ pattern: "~/**",
147
+ group: "external",
148
+ position: "after",
149
+ },
150
+ ],
151
+ "newlines-between": "always",
152
+ },
153
+ ],
154
+ },
155
+ },
156
+ // Next configuration
157
+ {
158
+ plugins: {
159
+ next: fixupPluginRules(eslintPluginNext),
160
+ },
161
+ languageOptions: {
162
+ globals: {
163
+ ...globals.node,
164
+ ...globals.browser,
165
+ },
166
+ },
167
+ rules: {
168
+ ...vercelStyleGuideNext.rules,
169
+ "@next/next/no-img-element": "off",
170
+ },
171
+ },
172
+ ];
@@ -0,0 +1,13 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ experimental: {
4
+ reactCompiler: true,
5
+ },
6
+ logging: {
7
+ fetches: {
8
+ fullUrl: true,
9
+ },
10
+ },
11
+ };
12
+
13
+ export default nextConfig;
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "{{name}}",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev --turbopack",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "next lint"
10
+ },
11
+ "dependencies": {
12
+ "@radix-ui/react-slot": "^1.1.2",
13
+ "autoprefixer": "^10.4.21",
14
+ "class-variance-authority": "^0.7.1",
15
+ "clsx": "^2.1.1",
16
+ "lucide-react": "^0.474.0",
17
+ "next": "^15.2.4",
18
+ "postcss": "^8.5.3",
19
+ "react": "19.0.0",
20
+ "react-dom": "19.0.0",
21
+ "tailwind-merge": "^3.0.2",
22
+ "tailwindcss": "^3.4.17",
23
+ "tailwindcss-animate": "^1.0.7"
24
+ },
25
+ "devDependencies": {
26
+ "@eslint/compat": "^1.2.7",
27
+ "@next/eslint-plugin-next": "15.1.6",
28
+ "@types/node": "^22.13.13",
29
+ "@types/react": "^19.0.12",
30
+ "@types/react-dom": "^19.0.4",
31
+ "@vercel/style-guide": "^6.0.0",
32
+ "babel-plugin-react-compiler": "19.0.0-beta-714736e-20250131",
33
+ "eslint": "^9.23.0",
34
+ "eslint-config-next": "15.1.6",
35
+ "eslint-config-prettier": "^10.1.1",
36
+ "eslint-plugin-import": "^2.31.0",
37
+ "eslint-plugin-jsx-a11y": "^6.10.2",
38
+ "eslint-plugin-prettier": "^5.2.4",
39
+ "eslint-plugin-react-compiler": "0.0.0-experimental-c8b3f72-20240517",
40
+ "globals": "^15.15.0",
41
+ "prettier": "^3.5.3",
42
+ "prettier-plugin-tailwindcss": "^0.6.11",
43
+ "typescript": "^5.8.2",
44
+ "typescript-eslint": "^8.27.0"
45
+ }
46
+ }