Openstatus www.openstatus.dev

๐Ÿง‘โ€๐Ÿ’ป improve dx (#811)

* ๐Ÿง‘โ€๐Ÿ’ป improve dx

* ๐Ÿงช fix tests

authored by

Thibault Le Ouay and committed by
GitHub
a7d9ab0d 4bdb6383

+193 -133
+4
.gitignore
··· 58 58 .idea 59 59 60 60 .wrangler 61 + apps/web/.env.dev 62 + packages/db/.env.dev 63 + openstatus-dev.db-wal 64 + openstatus-dev.db-shm
+3 -3
apps/web/.env.example
··· 15 15 TINY_BIRD_API_KEY=tiny-bird-api-key 16 16 17 17 # TURSO SQLITE 18 - DATABASE_URL=http://127.0.0.1:8080 18 + DATABASE_URL=file:./../../openstatus-dev.db 19 19 DATABASE_AUTH_TOKEN=any-token 20 20 21 21 # JITSU - no need to touch on local development ··· 62 62 CLICKHOUSE_USERNAME= 63 63 CLICKHOUSE_PASSWORD= 64 64 65 - AUTH_SECRET= 66 - AUTH_DRIZZLE_URL=http://127.0.0.1:8080 65 + AUTH_SECRET=secret 66 + AUTH_DRIZZLE_URL=file:./../../openstatus-dev.db 67 67 AUTH_GITHUB_ID= 68 68 AUTH_GITHUB_SECRET= 69 69 AUTH_GOOGLE_ID=
+2
apps/web/env.ts
··· 1 + const file = Bun.file("./.env.example"); 2 + await Bun.write("./.env", file);
+8 -4
apps/web/src/lib/auth/index.ts
··· 77 77 78 78 const { id: userId, email } = params.user; 79 79 80 - await analytics.identify(userId, { email, userId }); 81 - await trackAnalytics({ event: "User Created", userId, email }); 80 + if (process.env.NODE_ENV !== "development") { 81 + await analytics.identify(userId, { email, userId }); 82 + await trackAnalytics({ event: "User Created", userId, email }); 83 + } 82 84 }, 83 85 84 86 async signIn(params) { ··· 87 89 88 90 const { id: userId, email } = params.user; 89 91 90 - await analytics.identify(userId, { userId, email }); 91 - await trackAnalytics({ event: "User Signed In" }); 92 + if (process.env.NODE_ENV !== "development") { 93 + await analytics.identify(userId, { userId, email }); 94 + await trackAnalytics({ event: "User Signed In" }); 95 + } 92 96 }, 93 97 }, 94 98 pages: {
+1 -1
apps/web/tsconfig.json
··· 18 18 "**/*.mjs", 19 19 ".contentlayer/generated" 20 20 ], 21 - "exclude": ["node_modules"] 21 + "exclude": ["node_modules", "env.ts"] 22 22 }
openstatus-dev.db

This is a binary file and will not be displayed.

+5 -3
package.json
··· 3 3 "scripts": { 4 4 "build": "turbo run build", 5 5 "dev": "turbo run dev", 6 + "dev:web": "turbo run dev --filter='./apps/web' --filter='./packages/db'", 7 + "dx": "turbo run dx", 6 8 "lint": "turbo run lint", 7 9 "lint:strict": "eslint --max-warnings=0 apps/**/*.{ts,tsx}", 8 10 "format": "prettier --write \"**/*.{ts,tsx,md}\"", ··· 13 15 "devDependencies": { 14 16 "@ianvs/prettier-plugin-sort-imports": "4.2.1", 15 17 "@openstatus/eslint-config": "workspace:*", 16 - "@turbo/gen": "1.10.12", 18 + "@turbo/gen": "1.13.3", 17 19 "eslint": "8.50.0", 18 20 "prettier": "3.2.5", 19 21 "prettier-plugin-tailwindcss": "0.5.14", 20 - "turbo": "1.10.12", 22 + "turbo": "1.13.3", 21 23 "typescript": "5.4.5" 22 24 }, 23 - "packageManager": "pnpm@9.0.6", 25 + "packageManager": "pnpm@9.1.0", 24 26 "name": "openstatus", 25 27 "workspaces": [ 26 28 "apps/*",
+3 -3
packages/api/src/router/workspace.test.ts
··· 80 80 expect(result).toMatchObject([ 81 81 { 82 82 createdAt: expect.any(Date), 83 - email: "test@test.com", 84 - firstName: "test", 83 + email: "ping@openstatus.dev", 84 + firstName: "Speed", 85 85 id: 1, 86 - lastName: "user", 86 + lastName: "Matters", 87 87 photoUrl: "", 88 88 tenantId: "1", 89 89 updatedAt: expect.any(Date),
+2 -3
packages/db/.env.example
··· 1 - DATABASE_URL=http://127.0.0.1:8080 1 + DATABASE_URL=file:./../../openstatus-dev.db 2 2 DATABASE_AUTH_TOKEN=any-token 3 - 4 3 5 4 CLICKHOUSE_URL=http://localhost:8123 6 5 CLICKHOUSE_USERNAME=default 7 - CLICKHOUSE_PASSWORD= 6 + CLICKHOUSE_PASSWORD=
+1
packages/db/drizzle.config.ts
··· 13 13 }, 14 14 driver: "turso", 15 15 strict: true, 16 + dialect: "sqlite", 16 17 } satisfies Config;
+2
packages/db/env.ts
··· 1 + const file = Bun.file("./.env.example"); 2 + await Bun.write("./.env", file);
+5 -4
packages/db/package.json
··· 8 8 "push": "drizzle-kit push:sqlite", 9 9 "migrate": "bun src/migrate.mts", 10 10 "studio": "drizzle-kit studio", 11 + "env": "bun env.ts", 11 12 "seed": "bun src/seed.mts", 12 - "dev": "turso dev --db-file openstatus.db" 13 + "dev": "turso dev --db-file ../../openstatus-dev.db" 13 14 }, 14 15 "dependencies": { 15 16 "@clickhouse/client-web": "1.0.1", 16 17 "@libsql/client": "0.6.0", 17 18 "@t3-oss/env-core": "0.7.0", 18 19 "dotenv": "16.3.1", 19 - "drizzle-orm": "0.30.9", 20 + "drizzle-orm": "0.30.10", 20 21 "drizzle-zod": "0.5.1", 21 22 "zod": "3.22.4" 22 23 }, ··· 24 25 "@openstatus/assertions": "workspace:*", 25 26 "@openstatus/tsconfig": "workspace:*", 26 27 "@types/node": "20.8.0", 27 - "better-sqlite3": "9.4.1", 28 + "better-sqlite3": "10.0.0", 28 29 "bufferutil": "4.0.7", 29 - "drizzle-kit": "0.20.17", 30 + "drizzle-kit": "0.21.1", 30 31 "encoding": "0.1.13", 31 32 "next-auth": "5.0.0-beta.17", 32 33 "typescript": "5.4.5",
+4 -3
packages/db/src/seed.mts
··· 49 49 }, 50 50 ]) 51 51 .run(); 52 + 52 53 await db 53 54 .insert(monitor) 54 55 .values([ ··· 110 111 .values({ 111 112 id: 1, 112 113 tenantId: "1", 113 - firstName: "test", 114 - lastName: "user", 115 - email: "test@test.com", 114 + firstName: "Speed", 115 + lastName: "Matters", 116 + email: "ping@openstatus.dev", 116 117 photoUrl: "", 117 118 }) 118 119 .run();
+6 -2
packages/tinybird/src/os-client.ts
··· 1 - import { Tinybird } from "@chronark/zod-bird"; 1 + import { NoopTinybird, Tinybird } from "@chronark/zod-bird"; 2 2 import { z } from "zod"; 3 3 4 4 import { flyRegions } from "@openstatus/utils"; ··· 40 40 // FIXME: use Tinybird instead with super(args) maybe 41 41 // how about passing here the `opts: {revalidate}` to access it within the functions? 42 42 constructor(private args: { token: string; baseUrl?: string | undefined }) { 43 - this.tb = new Tinybird(args); 43 + if (process.env.NODE_ENV === "development") { 44 + this.tb = new NoopTinybird(); 45 + } else { 46 + this.tb = new Tinybird(args); 47 + } 44 48 } 45 49 46 50 endpointChart(period: "1h" | "1d" | "3d" | "7d" | "14d") {
+133 -106
pnpm-lock.yaml
··· 15 15 specifier: workspace:* 16 16 version: link:packages/config/eslint 17 17 '@turbo/gen': 18 - specifier: 1.10.12 19 - version: 1.10.12(@types/node@20.8.0)(typescript@5.4.5) 18 + specifier: 1.13.3 19 + version: 1.13.3(@types/node@20.8.0)(typescript@5.4.5) 20 20 eslint: 21 21 specifier: 8.50.0 22 22 version: 8.50.0 ··· 27 27 specifier: 0.5.14 28 28 version: 0.5.14(@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.2.5))(prettier@3.2.5) 29 29 turbo: 30 - specifier: 1.10.12 31 - version: 1.10.12 30 + specifier: 1.13.3 31 + version: 1.13.3 32 32 typescript: 33 33 specifier: 5.4.5 34 34 version: 5.4.5 ··· 88 88 version: 0.7.1(typescript@5.4.4)(zod@3.22.4) 89 89 drizzle-orm: 90 90 specifier: 0.30.7 91 - version: 0.30.7(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0) 91 + version: 0.30.7(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0) 92 92 hono: 93 93 specifier: 4.2.2 94 94 version: 4.2.2 ··· 119 119 version: link:../../packages/db 120 120 drizzle-orm: 121 121 specifier: 0.30.7 122 - version: 0.30.7(@cloudflare/workers-types@4.20240403.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0) 122 + version: 0.30.7(@cloudflare/workers-types@4.20240403.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0) 123 123 hono: 124 124 specifier: 4.2.2 125 125 version: 4.2.2 ··· 649 649 specifier: 16.3.1 650 650 version: 16.3.1 651 651 drizzle-orm: 652 - specifier: 0.30.9 653 - version: 0.30.9(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0) 652 + specifier: 0.30.10 653 + version: 0.30.10(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0) 654 654 drizzle-zod: 655 655 specifier: 0.5.1 656 - version: 0.5.1(drizzle-orm@0.30.9(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0))(zod@3.22.4) 656 + version: 0.5.1(drizzle-orm@0.30.10(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0))(zod@3.22.4) 657 657 zod: 658 658 specifier: 3.22.4 659 659 version: 3.22.4 ··· 668 668 specifier: 20.8.0 669 669 version: 20.8.0 670 670 better-sqlite3: 671 - specifier: 9.4.1 672 - version: 9.4.1 671 + specifier: 10.0.0 672 + version: 10.0.0 673 673 bufferutil: 674 674 specifier: 4.0.7 675 675 version: 4.0.7 676 676 drizzle-kit: 677 - specifier: 0.20.17 678 - version: 0.20.17 677 + specifier: 0.21.1 678 + version: 0.21.1 679 679 encoding: 680 680 specifier: 0.1.13 681 681 version: 0.1.13 ··· 2315 2315 engines: {node: '>=10'} 2316 2316 peerDependencies: 2317 2317 tailwindcss: ^3.0 2318 - 2319 - '@hono/node-server@1.11.1': 2320 - resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} 2321 - engines: {node: '>=18.14.1'} 2322 2318 2323 2319 '@hono/sentry@1.0.0': 2324 2320 resolution: {integrity: sha512-GbPxgpGuasM2zRCSaA77MPWu4KDcuk/EMf7JJykjCvnOTbjmtr7FovNxsvg7xlXCIjZDgLmqBaoJMi3AxbeIAA==} ··· 3958 3954 '@tsconfig/node16@1.0.4': 3959 3955 resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 3960 3956 3961 - '@turbo/gen@1.10.12': 3962 - resolution: {integrity: sha512-noop5+3MBFsgPQ7O2vQpS6YYiah+ZrOioa4cDDpZceUVsKVXvUHFmC2nEVyKSJZhO/8SLvbDE/esB/MGw5b2tw==} 3957 + '@turbo/gen@1.13.3': 3958 + resolution: {integrity: sha512-l+EM1gGzckFMaaVQyj3BVRa0QJ+tpp8HfiHOhGpBWW3Vc0Hfj92AY87Di/7HGABa+HVY7ueatMi7DJG+zkJBYg==} 3959 + hasBin: true 3960 + 3961 + '@turbo/workspaces@1.13.3': 3962 + resolution: {integrity: sha512-QYZ8g3IVQebqNM8IsBlWYOWmOKjBZY55e6lx4EDOLuch1iWmyk+U8CLAI9UomMrSaKTs1Sx+PDkt63EgakvhUw==} 3963 3963 hasBin: true 3964 3964 3965 3965 '@types/acorn@4.0.6': ··· 4108 4108 4109 4109 '@types/through@0.0.32': 4110 4110 resolution: {integrity: sha512-7XsfXIsjdfJM2wFDRAtEWp3zb2aVPk5QeyZxGlVK57q4u26DczMHhJmlhr0Jqv0THwxam/L8REXkj8M2I/lcvw==} 4111 + 4112 + '@types/tinycolor2@1.4.6': 4113 + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} 4111 4114 4112 4115 '@types/tough-cookie@4.0.4': 4113 4116 resolution: {integrity: sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==} ··· 4433 4436 before-after-hook@2.2.3: 4434 4437 resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} 4435 4438 4436 - better-sqlite3@9.4.1: 4437 - resolution: {integrity: sha512-QpqiQeMI4WkE+dQ68zTMX5OzlPGc7lXIDP1iKUt4Omt9PdaVgzKYxHIJRIzt1E+RUBQoFmkip/IbvzyrxehAIg==} 4439 + better-sqlite3@10.0.0: 4440 + resolution: {integrity: sha512-rOz0JY8bt9oMgrFssP7GnvA5R3yln73y/NizzWqy3WlFth8Ux8+g4r/N9fjX97nn4X1YX6MTER2doNpTu5pqiA==} 4438 4441 4439 4442 bignumber.js@9.1.2: 4440 4443 resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} ··· 4538 4541 resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 4539 4542 engines: {node: '>=6'} 4540 4543 4541 - camelcase@7.0.1: 4542 - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 4543 - engines: {node: '>=14.16'} 4544 - 4545 4544 caniuse-lite@1.0.30001612: 4546 4545 resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==} 4547 4546 ··· 4566 4565 chalk@4.1.2: 4567 4566 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 4568 4567 engines: {node: '>=10'} 4569 - 4570 - chalk@5.3.0: 4571 - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 4572 - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 4573 4568 4574 4569 change-case@3.1.0: 4575 4570 resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} ··· 5030 5025 resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} 5031 5026 engines: {node: '>=0.4.0'} 5032 5027 5033 - drizzle-kit@0.20.17: 5034 - resolution: {integrity: sha512-mLVDS4nXmO09wFVlzGrdshWnAL+U9eQGC5zRs6hTN6Q9arwQGWU2XnZ17I8BM8Quau8CQRx3Ms6VPgRWJFVp7Q==} 5028 + drizzle-kit@0.21.1: 5029 + resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} 5035 5030 hasBin: true 5036 5031 5037 - drizzle-orm@0.30.7: 5038 - resolution: {integrity: sha512-9qefSZQlu2fO2qv24piHyWFWcxcOY15//0v4j8qomMqaxzipNoG+fUBrQ7Ftk7PY7APRbRdn/nkEXWxiI4a8mw==} 5032 + drizzle-orm@0.30.10: 5033 + resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} 5039 5034 peerDependencies: 5040 5035 '@aws-sdk/client-rds-data': '>=3' 5041 5036 '@cloudflare/workers-types': '>=3' ··· 5114 5109 sqlite3: 5115 5110 optional: true 5116 5111 5117 - drizzle-orm@0.30.9: 5118 - resolution: {integrity: sha512-VOiCFsexErmgqvNCOmbzmqDCZzZsHoz6SkWAjTFxsTr1AllKDbDJ2+GgedLXsXMDgpg/ljDG1zItIFeZtiO2LA==} 5112 + drizzle-orm@0.30.7: 5113 + resolution: {integrity: sha512-9qefSZQlu2fO2qv24piHyWFWcxcOY15//0v4j8qomMqaxzipNoG+fUBrQ7Ftk7PY7APRbRdn/nkEXWxiI4a8mw==} 5119 5114 peerDependencies: 5120 5115 '@aws-sdk/client-rds-data': '>=3' 5121 5116 '@cloudflare/workers-types': '>=3' ··· 5767 5762 graceful-fs@4.2.11: 5768 5763 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 5769 5764 5765 + gradient-string@2.0.2: 5766 + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} 5767 + engines: {node: '>=10'} 5768 + 5770 5769 graphemer@1.4.0: 5771 5770 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 5772 5771 ··· 6464 6463 lodash@4.17.21: 6465 6464 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 6466 6465 6466 + log-symbols@3.0.0: 6467 + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} 6468 + engines: {node: '>=8'} 6469 + 6467 6470 log-symbols@4.1.0: 6468 6471 resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 6469 6472 engines: {node: '>=10'} ··· 6784 6787 resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 6785 6788 engines: {node: '>=10'} 6786 6789 6787 - minimatch@7.4.6: 6788 - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} 6789 - engines: {node: '>=10'} 6790 - 6791 6790 minimatch@9.0.1: 6792 6791 resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} 6793 6792 engines: {node: '>=16 || 14 >=14.17'} ··· 7052 7051 optionator@0.9.3: 7053 7052 resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 7054 7053 engines: {node: '>= 0.8.0'} 7054 + 7055 + ora@4.1.1: 7056 + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} 7057 + engines: {node: '>=8'} 7055 7058 7056 7059 ora@5.4.1: 7057 7060 resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} ··· 8063 8066 resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} 8064 8067 engines: {node: '>=10'} 8065 8068 8066 - superjson@2.2.1: 8067 - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} 8068 - engines: {node: '>=16'} 8069 - 8070 8069 supports-color@2.0.0: 8071 8070 resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} 8072 8071 engines: {node: '>=0.8.0'} ··· 8157 8156 tiny-invariant@1.3.1: 8158 8157 resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} 8159 8158 8159 + tinycolor2@1.6.0: 8160 + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} 8161 + 8162 + tinygradient@1.1.5: 8163 + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} 8164 + 8160 8165 title-case@2.1.1: 8161 8166 resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} 8162 8167 ··· 8274 8279 tunnel-agent@0.6.0: 8275 8280 resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 8276 8281 8277 - turbo-darwin-64@1.10.12: 8278 - resolution: {integrity: sha512-vmDfGVPl5/aFenAbOj3eOx3ePNcWVUyZwYr7taRl0ZBbmv2TzjRiFotO4vrKCiTVnbqjQqAFQWY2ugbqCI1kOQ==} 8282 + turbo-darwin-64@1.13.3: 8283 + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} 8279 8284 cpu: [x64] 8280 8285 os: [darwin] 8281 8286 8282 - turbo-darwin-arm64@1.10.12: 8283 - resolution: {integrity: sha512-3JliEESLNX2s7g54SOBqqkqJ7UhcOGkS0ywMr5SNuvF6kWVTbuUq7uBU/sVbGq8RwvK1ONlhPvJne5MUqBCTCQ==} 8287 + turbo-darwin-arm64@1.13.3: 8288 + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} 8284 8289 cpu: [arm64] 8285 8290 os: [darwin] 8286 8291 8287 - turbo-linux-64@1.10.12: 8288 - resolution: {integrity: sha512-siYhgeX0DidIfHSgCR95b8xPee9enKSOjCzx7EjTLmPqPaCiVebRYvbOIYdQWRqiaKh9yfhUtFmtMOMScUf1gg==} 8292 + turbo-linux-64@1.13.3: 8293 + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} 8289 8294 cpu: [x64] 8290 8295 os: [linux] 8291 8296 8292 - turbo-linux-arm64@1.10.12: 8293 - resolution: {integrity: sha512-K/ZhvD9l4SslclaMkTiIrnfcACgos79YcAo4kwc8bnMQaKuUeRpM15sxLpZp3xDjDg8EY93vsKyjaOhdFG2UbA==} 8297 + turbo-linux-arm64@1.13.3: 8298 + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} 8294 8299 cpu: [arm64] 8295 8300 os: [linux] 8296 8301 8297 - turbo-windows-64@1.10.12: 8298 - resolution: {integrity: sha512-7FSgSwvktWDNOqV65l9AbZwcoueAILeE4L7JvjauNASAjjbuzXGCEq5uN8AQU3U5BOFj4TdXrVmO2dX+lLu8Zg==} 8302 + turbo-windows-64@1.13.3: 8303 + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} 8299 8304 cpu: [x64] 8300 8305 os: [win32] 8301 8306 8302 - turbo-windows-arm64@1.10.12: 8303 - resolution: {integrity: sha512-gCNXF52dwom1HLY9ry/cneBPOKTBHhzpqhMylcyvJP0vp9zeMQQkt6yjYv+6QdnmELC92CtKNp2FsNZo+z0pyw==} 8307 + turbo-windows-arm64@1.13.3: 8308 + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} 8304 8309 cpu: [arm64] 8305 8310 os: [win32] 8306 8311 8307 - turbo@1.10.12: 8308 - resolution: {integrity: sha512-WM3+jTfQWnB9W208pmP4oeehZcC6JQNlydb/ZHMRrhmQa+htGhWLCzd6Q9rLe0MwZLPpSPFV2/bN5egCLyoKjQ==} 8312 + turbo@1.13.3: 8313 + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} 8309 8314 hasBin: true 8310 8315 8311 8316 tw-to-css@0.0.11: ··· 10131 10136 dependencies: 10132 10137 tailwindcss: 3.4.3(ts-node@10.9.1(@types/node@20.8.0)(typescript@5.4.5)) 10133 10138 10134 - '@hono/node-server@1.11.1': {} 10135 - 10136 10139 '@hono/sentry@1.0.0(hono@4.0.0)': 10137 10140 dependencies: 10138 10141 hono: 4.0.0 ··· 12147 12150 12148 12151 '@tsconfig/node16@1.0.4': {} 12149 12152 12150 - '@turbo/gen@1.10.12(@types/node@20.8.0)(typescript@5.4.5)': 12153 + '@turbo/gen@1.13.3(@types/node@20.8.0)(typescript@5.4.5)': 12151 12154 dependencies: 12155 + '@turbo/workspaces': 1.13.3 12152 12156 chalk: 2.4.2 12153 12157 commander: 10.0.1 12154 12158 fs-extra: 10.1.0 ··· 12156 12160 minimatch: 9.0.1 12157 12161 node-plop: 0.26.3 12158 12162 proxy-agent: 6.3.1 12159 - semver: 7.5.4 12160 12163 ts-node: 10.9.1(@types/node@20.8.0)(typescript@5.4.5) 12161 12164 update-check: 1.5.4 12162 12165 validate-npm-package-name: 5.0.0 ··· 12167 12170 - supports-color 12168 12171 - typescript 12169 12172 12173 + '@turbo/workspaces@1.13.3': 12174 + dependencies: 12175 + chalk: 2.4.2 12176 + commander: 10.0.1 12177 + execa: 5.1.1 12178 + fast-glob: 3.3.1 12179 + fs-extra: 10.1.0 12180 + gradient-string: 2.0.2 12181 + inquirer: 8.2.6 12182 + js-yaml: 4.1.0 12183 + ora: 4.1.1 12184 + rimraf: 3.0.2 12185 + semver: 7.5.4 12186 + update-check: 1.5.4 12187 + 12170 12188 '@types/acorn@4.0.6': 12171 12189 dependencies: 12172 12190 '@types/estree': 1.0.3 ··· 12314 12332 '@types/through@0.0.32': 12315 12333 dependencies: 12316 12334 '@types/node': 20.8.0 12335 + 12336 + '@types/tinycolor2@1.4.6': {} 12317 12337 12318 12338 '@types/tough-cookie@4.0.4': {} 12319 12339 ··· 12685 12705 12686 12706 before-after-hook@2.2.3: {} 12687 12707 12688 - better-sqlite3@9.4.1: 12708 + better-sqlite3@10.0.0: 12689 12709 dependencies: 12690 12710 bindings: 1.5.0 12691 12711 prebuild-install: 7.1.1 ··· 12792 12812 12793 12813 camelcase@5.3.1: {} 12794 12814 12795 - camelcase@7.0.1: {} 12796 - 12797 12815 caniuse-lite@1.0.30001612: {} 12798 12816 12799 12817 capnp-ts@0.7.0: ··· 12828 12846 dependencies: 12829 12847 ansi-styles: 4.3.0 12830 12848 supports-color: 7.2.0 12831 - 12832 - chalk@5.3.0: {} 12833 12849 12834 12850 change-case@3.1.0: 12835 12851 dependencies: ··· 13268 13284 dependencies: 13269 13285 wordwrap: 1.0.0 13270 13286 13271 - drizzle-kit@0.20.17: 13287 + drizzle-kit@0.21.1: 13272 13288 dependencies: 13273 13289 '@esbuild-kit/esm-loader': 2.6.5 13274 - '@hono/node-server': 1.11.1 13275 - '@hono/zod-validator': 0.2.1(hono@4.2.2)(zod@3.22.4) 13276 - camelcase: 7.0.1 13277 - chalk: 5.3.0 13278 13290 commander: 9.5.0 13279 13291 env-paths: 3.0.0 13280 13292 esbuild: 0.19.12 13281 13293 esbuild-register: 3.5.0(esbuild@0.19.12) 13282 13294 glob: 8.1.0 13283 13295 hanji: 0.0.5 13284 - hono: 4.2.2 13285 13296 json-diff: 0.9.0 13286 - minimatch: 7.4.6 13287 - semver: 7.5.4 13288 - superjson: 2.2.1 13289 13297 zod: 3.22.4 13290 13298 transitivePeerDependencies: 13291 13299 - supports-color 13292 13300 13293 - drizzle-orm@0.30.7(@cloudflare/workers-types@4.20240403.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0): 13301 + drizzle-orm@0.30.10(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0): 13294 13302 optionalDependencies: 13295 - '@cloudflare/workers-types': 4.20240403.0 13303 + '@cloudflare/workers-types': 4.20240405.0 13296 13304 '@libsql/client': 0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) 13297 13305 '@opentelemetry/api': 1.4.1 13298 13306 '@types/react': 18.2.64 13299 - better-sqlite3: 9.4.1 13307 + better-sqlite3: 10.0.0 13300 13308 bun-types: 1.0.11 13301 13309 react: 18.2.0 13302 13310 13303 - drizzle-orm@0.30.7(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0): 13311 + drizzle-orm@0.30.7(@cloudflare/workers-types@4.20240403.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0): 13304 13312 optionalDependencies: 13305 - '@cloudflare/workers-types': 4.20240405.0 13313 + '@cloudflare/workers-types': 4.20240403.0 13306 13314 '@libsql/client': 0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) 13307 13315 '@opentelemetry/api': 1.4.1 13308 13316 '@types/react': 18.2.64 13309 - better-sqlite3: 9.4.1 13317 + better-sqlite3: 10.0.0 13310 13318 bun-types: 1.0.11 13311 13319 react: 18.2.0 13312 13320 13313 - drizzle-orm@0.30.9(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0): 13321 + drizzle-orm@0.30.7(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0): 13314 13322 optionalDependencies: 13315 13323 '@cloudflare/workers-types': 4.20240405.0 13316 13324 '@libsql/client': 0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) 13317 13325 '@opentelemetry/api': 1.4.1 13318 13326 '@types/react': 18.2.64 13319 - better-sqlite3: 9.4.1 13327 + better-sqlite3: 10.0.0 13320 13328 bun-types: 1.0.11 13321 13329 react: 18.2.0 13322 13330 13323 - drizzle-zod@0.5.1(drizzle-orm@0.30.9(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0))(zod@3.22.4): 13331 + drizzle-zod@0.5.1(drizzle-orm@0.30.10(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0))(zod@3.22.4): 13324 13332 dependencies: 13325 - drizzle-orm: 0.30.9(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@9.4.1)(bun-types@1.0.11)(react@18.2.0) 13333 + drizzle-orm: 0.30.10(@cloudflare/workers-types@4.20240405.0)(@libsql/client@0.6.0(bufferutil@4.0.7)(utf-8-validate@6.0.3))(@opentelemetry/api@1.4.1)(@types/react@18.2.64)(better-sqlite3@10.0.0)(bun-types@1.0.11)(react@18.2.0) 13326 13334 zod: 3.22.4 13327 13335 13328 13336 duplexify@4.1.2: ··· 14204 14212 14205 14213 graceful-fs@4.2.11: {} 14206 14214 14215 + gradient-string@2.0.2: 14216 + dependencies: 14217 + chalk: 4.1.2 14218 + tinygradient: 1.1.5 14219 + 14207 14220 graphemer@1.4.0: {} 14208 14221 14209 14222 gray-matter@4.0.3: ··· 15027 15040 15028 15041 lodash@4.17.21: {} 15029 15042 15043 + log-symbols@3.0.0: 15044 + dependencies: 15045 + chalk: 2.4.2 15046 + 15030 15047 log-symbols@4.1.0: 15031 15048 dependencies: 15032 15049 chalk: 4.1.2 ··· 15644 15661 dependencies: 15645 15662 brace-expansion: 2.0.1 15646 15663 15647 - minimatch@7.4.6: 15648 - dependencies: 15649 - brace-expansion: 2.0.1 15650 - 15651 15664 minimatch@9.0.1: 15652 15665 dependencies: 15653 15666 brace-expansion: 2.0.1 ··· 15902 15915 prelude-ls: 1.2.1 15903 15916 type-check: 0.4.0 15904 15917 15918 + ora@4.1.1: 15919 + dependencies: 15920 + chalk: 3.0.0 15921 + cli-cursor: 3.1.0 15922 + cli-spinners: 2.9.1 15923 + is-interactive: 1.0.0 15924 + log-symbols: 3.0.0 15925 + mute-stream: 0.0.8 15926 + strip-ansi: 6.0.1 15927 + wcwidth: 1.0.1 15928 + 15905 15929 ora@5.4.1: 15906 15930 dependencies: 15907 15931 bl: 4.1.0 ··· 17010 17034 dependencies: 17011 17035 copy-anything: 3.0.5 17012 17036 17013 - superjson@2.2.1: 17014 - dependencies: 17015 - copy-anything: 3.0.5 17016 - 17017 17037 supports-color@2.0.0: {} 17018 17038 17019 17039 supports-color@5.5.0: ··· 17166 17186 17167 17187 tiny-invariant@1.3.1: {} 17168 17188 17189 + tinycolor2@1.6.0: {} 17190 + 17191 + tinygradient@1.1.5: 17192 + dependencies: 17193 + '@types/tinycolor2': 1.4.6 17194 + tinycolor2: 1.6.0 17195 + 17169 17196 title-case@2.1.1: 17170 17197 dependencies: 17171 17198 no-case: 2.3.2 ··· 17300 17327 dependencies: 17301 17328 safe-buffer: 5.2.1 17302 17329 17303 - turbo-darwin-64@1.10.12: 17330 + turbo-darwin-64@1.13.3: 17304 17331 optional: true 17305 17332 17306 - turbo-darwin-arm64@1.10.12: 17333 + turbo-darwin-arm64@1.13.3: 17307 17334 optional: true 17308 17335 17309 - turbo-linux-64@1.10.12: 17336 + turbo-linux-64@1.13.3: 17310 17337 optional: true 17311 17338 17312 - turbo-linux-arm64@1.10.12: 17339 + turbo-linux-arm64@1.13.3: 17313 17340 optional: true 17314 17341 17315 - turbo-windows-64@1.10.12: 17342 + turbo-windows-64@1.13.3: 17316 17343 optional: true 17317 17344 17318 - turbo-windows-arm64@1.10.12: 17345 + turbo-windows-arm64@1.13.3: 17319 17346 optional: true 17320 17347 17321 - turbo@1.10.12: 17348 + turbo@1.13.3: 17322 17349 optionalDependencies: 17323 - turbo-darwin-64: 1.10.12 17324 - turbo-darwin-arm64: 1.10.12 17325 - turbo-linux-64: 1.10.12 17326 - turbo-linux-arm64: 1.10.12 17327 - turbo-windows-64: 1.10.12 17328 - turbo-windows-arm64: 1.10.12 17350 + turbo-darwin-64: 1.13.3 17351 + turbo-darwin-arm64: 1.13.3 17352 + turbo-linux-64: 1.13.3 17353 + turbo-linux-arm64: 1.13.3 17354 + turbo-windows-64: 1.13.3 17355 + turbo-windows-arm64: 1.13.3 17329 17356 17330 17357 tw-to-css@0.0.11(ts-node@10.9.1(@types/node@20.8.0)(typescript@5.4.5)): 17331 17358 dependencies:
+14 -1
turbo.json
··· 21 21 }, 22 22 "test": { 23 23 "cache": false 24 - } 24 + }, 25 + "dx": { 26 + "cache": false, 27 + "dependsOn": ["seed"] 28 + }, 29 + "seed": { 30 + "cache": false, 31 + "dependsOn": ["migrate"] 32 + }, 33 + "migrate": { 34 + "cache": false, 35 + "dependsOn": ["env"] 36 + }, 37 + "env": {} 25 38 } 26 39 }