{
  "slug": "mysql-drizzle",
  "runtimes": {
    "node": {
      "frameworks": {
        "express": {
          "dependencies": {
            "runtime": [
              "drizzle-orm",
              "mysql2"
            ],
            "dev": [
              "drizzle-kit"
            ]
          },
          "env": [
            "DATABASE_URL",
            "NODE_ENV"
          ],
          "architectures": {
            "mvc": {
              "files": [
                {
                  "type": "file",
                  "path": "drizzle.config.ts",
                  "content": "import { defineConfig } from \"drizzle-kit\";\r\nimport { env } from \"./src/configs/env\";\r\n\r\nexport default defineConfig({\r\n  out: \"./migrations\",\r\n  schema: \"./src/db/index.ts\",\r\n  dialect: \"mysql\",\r\n  dbCredentials: {\r\n    url: env.DATABASE_URL\r\n  },\r\n  verbose: true,\r\n  strict: true\r\n});\r\n"
                },
                {
                  "type": "file",
                  "path": "migrations/.gitkeep",
                  "content": ""
                },
                {
                  "type": "file",
                  "path": "src/db/index.ts",
                  "content": "//? Export all schemas from schemas directory\r\n\r\nexport * from \"./schemas/user.schema\";\r\n"
                },
                {
                  "type": "file",
                  "path": "src/configs/env.ts",
                  "content": "import \"dotenv-flow/config\";\r\nimport { z } from \"zod\";\r\n\r\nexport const envSchema = z.object({\r\n  NODE_ENV: z\r\n    .enum([\"development\", \"test\", \"production\"])\r\n    .default(\"development\"),\r\n\r\n  DATABASE_URL: z.url()\r\n});\r\n\r\nexport type Env = z.infer<typeof envSchema>;\r\n\r\nconst result = envSchema.safeParse(process.env);\r\n\r\nif (!result.success) {\r\n  console.error(\"❌ Invalid environment configuration\");\r\n  console.error(z.prettifyError(result.error));\r\n  process.exit(1);\r\n}\r\n\r\nexport const env: Readonly<Env> = Object.freeze(result.data);\r\n\r\nexport default env;\r\n"
                },
                {
                  "type": "file",
                  "path": "src/configs/db.ts",
                  "content": "import { drizzle } from \"drizzle-orm/mysql2\";\r\nimport env from \"./env\";\r\n\r\nconst db = drizzle(env.DATABASE_URL!, {\r\n  logger: env.NODE_ENV === \"development\"\r\n});\r\n\r\nexport default db;\r\n\r\n/**\r\n * ? Usage:\r\n *  await db.insert(usersTable).values(user);\r\n */\r\n"
                },
                {
                  "type": "file",
                  "path": "src/db/schemas/user.schema.ts",
                  "content": "import { mysqlTable, serial, varchar } from \"drizzle-orm/mysql-core\";\r\n\r\nexport const usersTable = mysqlTable(\"users\", {\r\n  id: serial().primaryKey(),\r\n  name: varchar({ length: 255 }).notNull(),\r\n  email: varchar({ length: 255 }).notNull().unique(),\r\n  password: varchar(\"password\", { length: 255 }).notNull()\r\n});\r\n"
                }
              ]
            },
            "feature": {
              "files": [
                {
                  "type": "file",
                  "path": "drizzle.config.ts",
                  "content": "import { defineConfig } from \"drizzle-kit\";\r\nimport { env } from \"./src/shared/configs/env\";\r\n\r\nexport default defineConfig({\r\n  out: \"./migrations\",\r\n  schema: \"./src/db/index.ts\",\r\n  dialect: \"mysql\",\r\n  dbCredentials: {\r\n    url: env.DATABASE_URL\r\n  },\r\n  verbose: true,\r\n  strict: true\r\n});\r\n"
                },
                {
                  "type": "file",
                  "path": "migrations/.gitkeep",
                  "content": ""
                },
                {
                  "type": "file",
                  "path": "src/db/index.ts",
                  "content": "//? Export all schemas from schemas directory\r\n\r\nexport * from \"./schemas/user.schema\";\r\n"
                },
                {
                  "type": "file",
                  "path": "src/db/schemas/user.schema.ts",
                  "content": "import { mysqlTable, serial, varchar } from \"drizzle-orm/mysql-core\";\r\n\r\nexport const usersTable = mysqlTable(\"users\", {\r\n  id: serial().primaryKey(),\r\n  name: varchar({ length: 255 }).notNull(),\r\n  email: varchar({ length: 255 }).notNull().unique(),\r\n  password: varchar(\"password\", { length: 255 }).notNull()\r\n});\r\n"
                },
                {
                  "type": "file",
                  "path": "src/shared/configs/env.ts",
                  "content": "import \"dotenv-flow/config\";\r\nimport { z } from \"zod\";\r\n\r\nexport const envSchema = z.object({\r\n  NODE_ENV: z\r\n    .enum([\"development\", \"test\", \"production\"])\r\n    .default(\"development\"),\r\n\r\n  DATABASE_URL: z.url()\r\n});\r\n\r\nexport type Env = z.infer<typeof envSchema>;\r\n\r\nconst result = envSchema.safeParse(process.env);\r\n\r\nif (!result.success) {\r\n  console.error(\"❌ Invalid environment configuration\");\r\n  console.error(z.prettifyError(result.error));\r\n  process.exit(1);\r\n}\r\n\r\nexport const env: Readonly<Env> = Object.freeze(result.data);\r\n\r\nexport default env;\r\n"
                },
                {
                  "type": "file",
                  "path": "src/shared/configs/db.ts",
                  "content": "import { drizzle } from \"drizzle-orm/mysql2\";\r\nimport env from \"./env\";\r\n\r\nconst db = drizzle(env.DATABASE_URL!, {\r\n  logger: env.NODE_ENV === \"development\"\r\n});\r\n\r\nexport default db;\r\n\r\n/**\r\n * ? Usage:\r\n *  await db.insert(usersTable).values(user);\r\n */"
                }
              ]
            }
          }
        }
      }
    }
  }
}
