create-apppaaaul 2.0.27 ā 2.0.29
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/index.js +38 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/20250329125127_init/migration.sql +0 -25
- package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/migration_lock.toml +0 -3
package/dist/index.js
CHANGED
|
@@ -161,19 +161,51 @@ async function main() {
|
|
|
161
161
|
await execAsync(`cd ${project.name}`);
|
|
162
162
|
console.log(`
|
|
163
163
|
${import_picocolors2.default.green(`cd`)} ${project.name}`);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
const suggestedFolderName = project.name.toLowerCase().replace(/[^a-z0-9]/g, "-");
|
|
165
|
+
const isDefaultFolder = destination.endsWith(suggestedFolderName);
|
|
166
|
+
if (isDefaultFolder) {
|
|
167
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Using default folder name, assuming git repository is initialized`);
|
|
168
|
+
await execAsync("git add .", { cwd: destination });
|
|
169
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Files added to git`);
|
|
170
|
+
await execAsync('git commit -m "First commit"', { cwd: destination });
|
|
171
|
+
console.log(`${import_picocolors2.default.green("\u2713")} First commit created`);
|
|
172
|
+
try {
|
|
173
|
+
await execAsync("git push", { cwd: destination });
|
|
174
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Pushed to origin`);
|
|
175
|
+
} catch (pushError) {
|
|
176
|
+
console.log(`${import_picocolors2.default.yellow("\u26A0")} Could not push to origin (remote may not be configured)`);
|
|
177
|
+
}
|
|
167
178
|
await execAsync("git checkout -b dev", { cwd: destination });
|
|
168
179
|
console.log(`${import_picocolors2.default.green("\u2713")} Created dev branch`);
|
|
169
180
|
try {
|
|
170
181
|
await execAsync("git push -u origin dev", { cwd: destination });
|
|
171
182
|
console.log(`${import_picocolors2.default.green("\u2713")} Pushed dev branch to origin`);
|
|
172
183
|
} catch (pushError) {
|
|
173
|
-
console.log(`${import_picocolors2.default.yellow("\u26A0")} Could not push to origin
|
|
184
|
+
console.log(`${import_picocolors2.default.yellow("\u26A0")} Could not push dev branch to origin`);
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
try {
|
|
188
|
+
await execAsync("git status", { cwd: destination });
|
|
189
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Git repository detected`);
|
|
190
|
+
await execAsync("git checkout -b dev", { cwd: destination });
|
|
191
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Created dev branch`);
|
|
192
|
+
try {
|
|
193
|
+
await execAsync("git push -u origin dev", { cwd: destination });
|
|
194
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Pushed dev branch to origin`);
|
|
195
|
+
} catch (pushError) {
|
|
196
|
+
console.log(`${import_picocolors2.default.yellow("\u26A0")} Could not push to origin (remote may not be configured)`);
|
|
197
|
+
}
|
|
198
|
+
} catch (gitError) {
|
|
199
|
+
console.log(`${import_picocolors2.default.yellow("\u26A0")} Git not initialized, initializing git repository...`);
|
|
200
|
+
await execAsync("git init", { cwd: destination });
|
|
201
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Git repository initialized`);
|
|
202
|
+
await execAsync("git add .", { cwd: destination });
|
|
203
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Files added to git`);
|
|
204
|
+
await execAsync('git commit -m "First commit"', { cwd: destination });
|
|
205
|
+
console.log(`${import_picocolors2.default.green("\u2713")} First commit created`);
|
|
206
|
+
await execAsync("git checkout -b dev", { cwd: destination });
|
|
207
|
+
console.log(`${import_picocolors2.default.green("\u2713")} Created dev branch`);
|
|
174
208
|
}
|
|
175
|
-
} catch (gitError) {
|
|
176
|
-
console.log(`${import_picocolors2.default.yellow("\u26A0")} Git not initialized in this directory`);
|
|
177
209
|
}
|
|
178
210
|
} catch (error) {
|
|
179
211
|
console.error(`Error executing commands: ${error}`);
|
|
@@ -186,8 +218,6 @@ ${import_picocolors2.default.green(`cd`)} ${project.name}`);
|
|
|
186
218
|
await install();
|
|
187
219
|
console.log();
|
|
188
220
|
console.log(`${(0, import_picocolors.green)("Success!")} App installed successfully.`);
|
|
189
|
-
console.log((0, import_picocolors.cyan)("Initializing the development server..."));
|
|
190
|
-
await execAsync("pnpm dev");
|
|
191
221
|
} catch (error) {
|
|
192
222
|
console.error(`Error executing commands: ${error}`);
|
|
193
223
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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\r\n\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { cp, readFile, writeFile, access, rename } from \"node:fs/promises\";\r\nimport { exec } from \"child_process\";\r\nimport { promisify } from \"util\";\r\n\r\nimport { cyan, green, red, yellow } from \"picocolors\";\r\nimport { glob } from \"glob\";\r\nimport color from \"picocolors\";\r\nimport prompts from \"prompts\";\r\nimport yargs from \"yargs\";\r\nimport { hideBin } from \"yargs/helpers\";\r\n\r\nimport { install } from \"./helpers/install\";\r\nconst execAsync = promisify(exec);\r\n\r\n// Define the templates available\r\nconst TEMPLATES = [\r\n {\r\n title: \"Nextjs ts with db setup Landing with prisma\",\r\n value: \"nextjs-ts-landing-prisma\",\r\n },\r\n {\r\n title: 'Nextjs ts clean',\r\n value: 'nextjs-ts-clean'\r\n }\r\n];\r\n\r\n// Specify CLI arguments\r\nconst args = yargs(hideBin(process.argv)).options({\r\n name: {\r\n alias: \"n\",\r\n type: \"string\",\r\n description: \"Name of the project\",\r\n },\r\n template: {\r\n alias: \"t\",\r\n type: \"string\",\r\n description: \"Template to use\",\r\n },\r\n});\r\n\r\n// Override arguments passed on the CLI\r\nprompts.override(args.argv);\r\n\r\nasync function main() {\r\n // Get the initial values for the prompts\r\n const {\r\n _: [initialName, initialProject],\r\n } = await args.argv;\r\n\r\n // Get the current directory name as default project name\r\n const currentDirName = path.basename(process.cwd());\r\n const defaultProjectName = initialName || currentDirName;\r\n\r\n // Create the project prompt\r\n const project = await prompts(\r\n [\r\n {\r\n type: \"text\",\r\n name: \"name\",\r\n message: `What is the name of your project? (suggested: ${currentDirName})`,\r\n initial: defaultProjectName,\r\n validate: (value) => {\r\n if (value !== \".\" && value.match(/[^a-zA-Z0-9-_]+/g)) {\r\n return \"Project name can only contain letters, numbers, dashes, underscores, or be '.' for the current directory\";\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n {\r\n type: \"select\",\r\n name: \"template\",\r\n message: `Which template would you like to use?`,\r\n initial: initialProject || 0,\r\n choices: TEMPLATES,\r\n },\r\n ],\r\n {\r\n onCancel: () => {\r\n console.log(\"\\nBye š\\n\");\r\n\r\n process.exit(0);\r\n },\r\n },\r\n );\r\n\r\n // Get the template folder for the selected template\r\n const template = path.join(\r\n path.dirname(fileURLToPath(import.meta.url)),\r\n \"templates\",\r\n project.template,\r\n );\r\n\r\n // Get the destination folder for the project\r\n // If the user chose the same name as the current directory, use current directory\r\n const destination = (project.name === \".\" || project.name === currentDirName) \r\n ? process.cwd() \r\n : path.join(process.cwd(), project.name);\r\n\r\n // Copy files from the template folder to the current directory\r\n await cp(path.join(template, \"project\"), destination, { recursive: true });\r\n\r\n // Copy additional files from aditionals folder within the template\r\n try {\r\n const aditionalsPath = path.join(template, \"aditionals\");\r\n await access(aditionalsPath);\r\n \r\n // Use cp with recursive to copy all files including dotfiles\r\n await cp(aditionalsPath, destination, { recursive: true });\r\n \r\n console.log(`${color.green(\"ā\")} Copied additional files`);\r\n } catch (error) {\r\n console.log(`${color.yellow(\"ā \")} Additional files folder not found in template, skipping...`);\r\n }\r\n\r\n // Get all files from the destination folder\r\n const aditionalsFiles = await glob(`**/*`, {nodir: true, cwd: destination, absolute: true});\r\n\r\n // Rename files with %% prefix\r\n for await (const file of aditionalsFiles) {\r\n const basename = path.basename(file);\r\n\r\n if (basename.startsWith(\"%%\")) {\r\n const newPath = path.join(path.dirname(file), basename.slice(2));\r\n await rename(file, newPath);\r\n }\r\n }\r\n\r\n // Get all files from the destination folder\r\n const files = await glob(`**/*`, { nodir: true, cwd: destination, absolute: true });\r\n\r\n // Read each file and replace the tokens\r\n for await (const file of files) {\r\n const data = await readFile(file, \"utf8\");\r\n const draft = data.replace(/{{name}}/g, project.name);\r\n\r\n await writeFile(file, draft, \"utf8\");\r\n }\r\n\r\n // Log outro message\r\n console.log(\"\\n⨠Project created āØ\");\r\n\r\n // Run commands if a new directory was created\r\n if (project.name !== \".\" && project.name !== currentDirName) {\r\n try {\r\n await execAsync(`cd ${project.name}`);\r\n console.log(`\\n${color.green(`cd`)} ${project.name}`);\r\n \r\n // Check if git is initialized\r\n try {\r\n await execAsync(\"git status\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Git repository detected`);\r\n \r\n // Create dev branch if git is initialized\r\n await execAsync(\"git checkout -b dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Created dev branch`);\r\n \r\n // Try to push to origin if remote exists\r\n try {\r\n await execAsync(\"git push -u origin dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Pushed dev branch to origin`);\r\n } catch (pushError) {\r\n console.log(`${color.yellow(\"ā \")} Could not push to origin (remote may not be configured)`);\r\n }\r\n } catch (gitError) {\r\n console.log(`${color.yellow(\"ā \")} Git not initialized in this directory`);\r\n }\r\n } catch (error) {\r\n console.error(`Error executing commands: ${error}`);\r\n }\r\n }\r\n try {\r\n await execAsync(\"cursor .\");\r\n console.log(\"Installing packages. This might take a couple of minutes.\");\r\n console.log();\r\n await install();\r\n console.log();\r\n console.log(`${green(\"Success!\")} App installed successfully.`);\r\n console.log(cyan(\"Initializing the development server...\"));\r\n await execAsync(\"pnpm dev\");\r\n } catch (error) {\r\n console.error(`Error executing commands: ${error}`);\r\n }\r\n}\r\n\r\n// Run the main function\r\nmain().catch(console.error);\r\n","import spawn from \"cross-spawn\";\r\nimport { yellow } from \"picocolors\";\r\n\r\nexport async function install(): Promise<void> {\r\n const packageManager = \"pnpm\";\r\n const args: string[] = [\"install\"];\r\n\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * Spawn the installation process.\r\n */\r\n const child = spawn(packageManager, args, {\r\n stdio: \"inherit\",\r\n env: {\r\n ...process.env,\r\n ADBLOCK: \"1\",\r\n // we set NODE_ENV to development as pnpm skips dev\r\n // dependencies when production\r\n NODE_ENV: \"development\",\r\n DISABLE_OPENCOLLECTIVE: \"1\",\r\n },\r\n });\r\n\r\n child.on(\"close\", (code) => {\r\n if (code !== 0) {\r\n reject({ command: `${packageManager} ${args.join(\" \")}` });\r\n\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n"],"mappings":"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","names":["import_picocolors","args","spawn","yargs","prompts","path","color"]}
|
|
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\r\n\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { cp, readFile, writeFile, access, rename } from \"node:fs/promises\";\r\nimport { exec } from \"child_process\";\r\nimport { promisify } from \"util\";\r\n\r\nimport { cyan, green, red, yellow } from \"picocolors\";\r\nimport { glob } from \"glob\";\r\nimport color from \"picocolors\";\r\nimport prompts from \"prompts\";\r\nimport yargs from \"yargs\";\r\nimport { hideBin } from \"yargs/helpers\";\r\n\r\nimport { install } from \"./helpers/install\";\r\nconst execAsync = promisify(exec);\r\n\r\n// Define the templates available\r\nconst TEMPLATES = [\r\n {\r\n title: \"Nextjs ts with db setup Landing with prisma\",\r\n value: \"nextjs-ts-landing-prisma\",\r\n },\r\n {\r\n title: 'Nextjs ts clean',\r\n value: 'nextjs-ts-clean'\r\n }\r\n];\r\n\r\n// Specify CLI arguments\r\nconst args = yargs(hideBin(process.argv)).options({\r\n name: {\r\n alias: \"n\",\r\n type: \"string\",\r\n description: \"Name of the project\",\r\n },\r\n template: {\r\n alias: \"t\",\r\n type: \"string\",\r\n description: \"Template to use\",\r\n },\r\n});\r\n\r\n// Override arguments passed on the CLI\r\nprompts.override(args.argv);\r\n\r\nasync function main() {\r\n // Get the initial values for the prompts\r\n const {\r\n _: [initialName, initialProject],\r\n } = await args.argv;\r\n\r\n // Get the current directory name as default project name\r\n const currentDirName = path.basename(process.cwd());\r\n const defaultProjectName = initialName || currentDirName;\r\n\r\n // Create the project prompt\r\n const project = await prompts(\r\n [\r\n {\r\n type: \"text\",\r\n name: \"name\",\r\n message: `What is the name of your project? (suggested: ${currentDirName})`,\r\n initial: defaultProjectName,\r\n validate: (value) => {\r\n if (value !== \".\" && value.match(/[^a-zA-Z0-9-_]+/g)) {\r\n return \"Project name can only contain letters, numbers, dashes, underscores, or be '.' for the current directory\";\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n {\r\n type: \"select\",\r\n name: \"template\",\r\n message: `Which template would you like to use?`,\r\n initial: initialProject || 0,\r\n choices: TEMPLATES,\r\n },\r\n ],\r\n {\r\n onCancel: () => {\r\n console.log(\"\\nBye š\\n\");\r\n\r\n process.exit(0);\r\n },\r\n },\r\n );\r\n\r\n // Get the template folder for the selected template\r\n const template = path.join(\r\n path.dirname(fileURLToPath(import.meta.url)),\r\n \"templates\",\r\n project.template,\r\n );\r\n\r\n // Get the destination folder for the project\r\n // If the user chose the same name as the current directory, use current directory\r\n const destination = (project.name === \".\" || project.name === currentDirName) \r\n ? process.cwd() \r\n : path.join(process.cwd(), project.name);\r\n\r\n // Copy files from the template folder to the current directory\r\n await cp(path.join(template, \"project\"), destination, { recursive: true });\r\n\r\n // Copy additional files from aditionals folder within the template\r\n try {\r\n const aditionalsPath = path.join(template, \"aditionals\");\r\n await access(aditionalsPath);\r\n \r\n // Use cp with recursive to copy all files including dotfiles\r\n await cp(aditionalsPath, destination, { recursive: true });\r\n \r\n console.log(`${color.green(\"ā\")} Copied additional files`);\r\n } catch (error) {\r\n console.log(`${color.yellow(\"ā \")} Additional files folder not found in template, skipping...`);\r\n }\r\n\r\n // Get all files from the destination folder\r\n const aditionalsFiles = await glob(`**/*`, {nodir: true, cwd: destination, absolute: true});\r\n\r\n // Rename files with %% prefix\r\n for await (const file of aditionalsFiles) {\r\n const basename = path.basename(file);\r\n\r\n if (basename.startsWith(\"%%\")) {\r\n const newPath = path.join(path.dirname(file), basename.slice(2));\r\n await rename(file, newPath);\r\n }\r\n }\r\n\r\n // Get all files from the destination folder\r\n const files = await glob(`**/*`, { nodir: true, cwd: destination, absolute: true });\r\n\r\n // Read each file and replace the tokens\r\n for await (const file of files) {\r\n const data = await readFile(file, \"utf8\");\r\n const draft = data.replace(/{{name}}/g, project.name);\r\n\r\n await writeFile(file, draft, \"utf8\");\r\n }\r\n\r\n // Log outro message\r\n console.log(\"\\n⨠Project created āØ\");\r\n\r\n // Run commands if a new directory was created\r\n if (project.name !== \".\" && project.name !== currentDirName) {\r\n try {\r\n await execAsync(`cd ${project.name}`);\r\n console.log(`\\n${color.green(`cd`)} ${project.name}`);\r\n \r\n // Check if user modified the suggested folder name\r\n const suggestedFolderName = project.name.toLowerCase().replace(/[^a-z0-9]/g, '-');\r\n const isDefaultFolder = destination.endsWith(suggestedFolderName);\r\n \r\n if (isDefaultFolder) {\r\n // User didn't modify the folder name, assume git is already initialized\r\n console.log(`${color.green(\"ā\")} Using default folder name, assuming git repository is initialized`);\r\n \r\n // Add all files to git\r\n await execAsync(\"git add .\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Files added to git`);\r\n \r\n // Make first commit\r\n await execAsync('git commit -m \"First commit\"', { cwd: destination });\r\n console.log(`${color.green(\"ā\")} First commit created`);\r\n \r\n // Try to push to origin\r\n try {\r\n await execAsync(\"git push\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Pushed to origin`);\r\n } catch (pushError) {\r\n console.log(`${color.yellow(\"ā \")} Could not push to origin (remote may not be configured)`);\r\n }\r\n \r\n // Create dev branch\r\n await execAsync(\"git checkout -b dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Created dev branch`);\r\n \r\n // Try to push dev branch to origin\r\n try {\r\n await execAsync(\"git push -u origin dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Pushed dev branch to origin`);\r\n } catch (pushError) {\r\n console.log(`${color.yellow(\"ā \")} Could not push dev branch to origin`);\r\n }\r\n } else {\r\n // User modified the folder name, check if git is initialized\r\n try {\r\n await execAsync(\"git status\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Git repository detected`);\r\n \r\n // Create dev branch if git is initialized\r\n await execAsync(\"git checkout -b dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Created dev branch`);\r\n \r\n // Try to push to origin if remote exists\r\n try {\r\n await execAsync(\"git push -u origin dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Pushed dev branch to origin`);\r\n } catch (pushError) {\r\n console.log(`${color.yellow(\"ā \")} Could not push to origin (remote may not be configured)`);\r\n }\r\n } catch (gitError) {\r\n console.log(`${color.yellow(\"ā \")} Git not initialized, initializing git repository...`);\r\n \r\n // Initialize git repository\r\n await execAsync(\"git init\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Git repository initialized`);\r\n \r\n // Add all files to git\r\n await execAsync(\"git add .\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Files added to git`);\r\n \r\n // Make first commit\r\n await execAsync('git commit -m \"First commit\"', { cwd: destination });\r\n console.log(`${color.green(\"ā\")} First commit created`);\r\n \r\n // Create dev branch\r\n await execAsync(\"git checkout -b dev\", { cwd: destination });\r\n console.log(`${color.green(\"ā\")} Created dev branch`);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`Error executing commands: ${error}`);\r\n }\r\n }\r\n try {\r\n await execAsync(\"cursor .\");\r\n console.log(\"Installing packages. This might take a couple of minutes.\");\r\n console.log();\r\n await install();\r\n console.log();\r\n console.log(`${green(\"Success!\")} App installed successfully.`);\r\n } catch (error) {\r\n console.error(`Error executing commands: ${error}`);\r\n }\r\n}\r\n\r\n// Run the main function\r\nmain().catch(console.error);\r\n","import spawn from \"cross-spawn\";\r\nimport { yellow } from \"picocolors\";\r\n\r\nexport async function install(): Promise<void> {\r\n const packageManager = \"pnpm\";\r\n const args: string[] = [\"install\"];\r\n\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * Spawn the installation process.\r\n */\r\n const child = spawn(packageManager, args, {\r\n stdio: \"inherit\",\r\n env: {\r\n ...process.env,\r\n ADBLOCK: \"1\",\r\n // we set NODE_ENV to development as pnpm skips dev\r\n // dependencies when production\r\n NODE_ENV: \"development\",\r\n DISABLE_OPENCOLLECTIVE: \"1\",\r\n },\r\n });\r\n\r\n child.on(\"close\", (code) => {\r\n if (code !== 0) {\r\n reject({ command: `${packageManager} ${args.join(\" \")}` });\r\n\r\n return;\r\n }\r\n resolve();\r\n });\r\n });\r\n}\r\n"],"mappings":"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","names":["import_picocolors","args","spawn","yargs","prompts","path","color"]}
|
package/package.json
CHANGED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
-- CreateTable
|
|
2
|
-
CREATE TABLE "Post" (
|
|
3
|
-
"id" SERIAL NOT NULL,
|
|
4
|
-
"title" TEXT NOT NULL,
|
|
5
|
-
"content" TEXT,
|
|
6
|
-
"published" BOOLEAN NOT NULL DEFAULT false,
|
|
7
|
-
"authorId" INTEGER,
|
|
8
|
-
|
|
9
|
-
CONSTRAINT "Post_pkey" PRIMARY KEY ("id")
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
-- CreateTable
|
|
13
|
-
CREATE TABLE "User" (
|
|
14
|
-
"id" SERIAL NOT NULL,
|
|
15
|
-
"email" TEXT NOT NULL,
|
|
16
|
-
"name" TEXT,
|
|
17
|
-
|
|
18
|
-
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
-- CreateIndex
|
|
22
|
-
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
23
|
-
|
|
24
|
-
-- AddForeignKey
|
|
25
|
-
ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|