@batijs/features 0.0.633 → 0.0.634

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.
@@ -40,11 +40,16 @@ declare const categories: readonly [{
40
40
  }, {
41
41
  readonly label: "Database";
42
42
  readonly group: categoriesGroups.Data;
43
- readonly description: "Helping you get started with a database solution.";
43
+ readonly description: "The database your app talks to. SQLite runs embedded (and powers Cloudflare D1);\nPostgreSQL targets a Postgres server. Selected on its own you get a thin client; pair it with an ORM or query builder below.";
44
+ }, {
45
+ readonly label: "ORM / Query builder";
46
+ readonly group: categoriesGroups.Data;
47
+ readonly description: "Type-safe data access on top of your database. Requires choosing a Database above.";
44
48
  }, {
45
49
  readonly label: "Hosting";
46
50
  readonly group: categoriesGroups.Deployment;
47
51
  readonly description: "Quickly host your Vike project with a Serverless or VPS (coming soon) solution.";
52
+ readonly required: true;
48
53
  }, {
49
54
  readonly label: "Linter";
50
55
  readonly multiple: true;
@@ -326,18 +331,6 @@ declare const features: readonly [{
326
331
  readonly label: "API";
327
332
  readonly href: "https://fastify.dev/docs/latest/Reference/";
328
333
  }];
329
- }, {
330
- readonly category: "Database";
331
- readonly label: "Drizzle";
332
- readonly flag: "drizzle";
333
- readonly image: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjI4MHB4IiBoZWlnaHQ9IjI4MHB4IiBzdHlsZT0ic2hhcGUtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgdGV4dC1yZW5kZXJpbmc6Z2VvbWV0cmljUHJlY2lzaW9uOyBpbWFnZS1yZW5kZXJpbmc6b3B0aW1pemVRdWFsaXR5OyBmaWxsLXJ1bGU6ZXZlbm9kZDsgY2xpcC1ydWxlOmV2ZW5vZGQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzAwMDAwMCIgZD0iTSAtMC41LC0wLjUgQyA5Mi44MzMzLC0wLjUgMTg2LjE2NywtMC41IDI3OS41LC0wLjVDIDI3OS41LDkyLjgzMzMgMjc5LjUsMTg2LjE2NyAyNzkuNSwyNzkuNUMgMTg2LjE2NywyNzkuNSA5Mi44MzMzLDI3OS41IC0wLjUsMjc5LjVDIC0wLjUsMTg2LjE2NyAtMC41LDkyLjgzMzMgLTAuNSwtMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTMzLjUsODQuNSBDIDE0Mi44MTQsODIuNzI2OSAxNDYuNjQ3LDg2LjM5MzUgMTQ1LDk1LjVDIDEzNS45MDYsMTEyLjAyOCAxMjYuNTcyLDEyOC4zNjIgMTE3LDE0NC41QyAxMTEuMjQ5LDE0OS45ODQgMTA2LjI0OSwxNDkuMzE3IDEwMiwxNDIuNUMgMTAxLjMzMywxNDAuODMzIDEwMS4zMzMsMTM5LjE2NyAxMDIsMTM3LjVDIDExMS41NDcsMTE5LjA0MSAxMjIuMDQ3LDEwMS4zNzUgMTMzLjUsODQuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYzBmMTRkIiBkPSJNIDIyMy41LDg0LjUgQyAyMzMuNTM5LDgzLjY5NzIgMjM3LjAzOSw4OC4wMzA1IDIzNCw5Ny41QyAyMjUuMzQ3LDExMi44MDEgMjE2LjY4MSwxMjguMTM1IDIwOCwxNDMuNUMgMjAzLjM4NywxNDkuNzM3IDE5OC4zODcsMTUwLjA3MSAxOTMsMTQ0LjVDIDE5MS41NzgsMTQxLjk3IDE5MS4yNDUsMTM5LjMwMyAxOTIsMTM2LjVDIDIwMC41MiwxMjIuNzk0IDIwOC41MiwxMDguNzk0IDIxNiw5NC41QyAyMTguMjg5LDkwLjg4MTIgMjIwLjc4OSw4Ny41NDc5IDIyMy41LDg0LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2MwZjE0ZCIgZD0iTSA3NS41LDEyMC41IEMgODMuOTg4NSwxMTkuNjE4IDg3LjgyMTgsMTIzLjI4NSA4NywxMzEuNUMgNzcuOTA1NywxNDguMDI4IDY4LjU3MjQsMTY0LjM2MiA1OSwxODAuNUMgNTYuMDQ1MywxODQuMjc3IDUyLjIxMiwxODUuNDQzIDQ3LjUsMTg0QyA0My44Njk3LDE4MC45NSA0Mi43MDMsMTc3LjExNyA0NCwxNzIuNUMgNTMsMTU2LjUgNjIsMTQwLjUgNzEsMTI0LjVDIDcyLjM5NjgsMTIyLjkzIDczLjg5NjgsMTIxLjU5NiA3NS41LDEyMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTY1LjUsMTIwLjUgQyAxNzQuMTY0LDExOS4zMzIgMTc3Ljk5NywxMjIuOTk5IDE3NywxMzEuNUMgMTY3LjQxNCwxNDcuNjcxIDE1OC4wOCwxNjQuMDA0IDE0OSwxODAuNUMgMTQ2LjM5OCwxODQuMjEyIDE0Mi44OTgsMTg1LjM3OCAxMzguNSwxODRDIDEzMy45MzEsMTgxLjQ1OSAxMzIuNDMxLDE3Ny42MjUgMTM0LDE3Mi41QyAxNDMuNTcyLDE1Ni4zNjIgMTUyLjkwNiwxNDAuMDI4IDE2MiwxMjMuNUMgMTYzLjE0NSwxMjIuMzY0IDE2NC4zMTIsMTIxLjM2NCAxNjUuNSwxMjAuNSBaIi8+PC9nPgo8L3N2Zz4K";
334
- readonly url: "https://orm.drizzle.team/";
335
- readonly tagline: "Headless TypeScript ORM that feels like SPA with SSR";
336
- readonly repo: "drizzle-team/drizzle-orm";
337
- readonly links: [{
338
- readonly label: "Docs & Getting started";
339
- readonly href: "https://orm.drizzle.team/docs/overview";
340
- }];
341
334
  }, {
342
335
  readonly category: "Database";
343
336
  readonly label: "SQLite";
@@ -355,6 +348,33 @@ declare const features: readonly [{
355
348
  }];
356
349
  }, {
357
350
  readonly category: "Database";
351
+ readonly label: "PostgreSQL";
352
+ readonly flag: "postgres";
353
+ readonly image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNOTMuODA5IDkyLjExMmMuNzg1LTYuNTMzLjU1LTcuNDkyIDUuNDE2LTYuNDMzbDEuMjM1LjEwOGMzLjc0Mi4xNyA4LjYzNy0uNjAyIDExLjUxMy0xLjkzOCA2LjE5MS0yLjg3MyA5Ljg2MS03LjY2OCAzLjc1OC02LjQwOS0xMy45MjQgMi44NzMtMTQuODgxLTEuODQyLTE0Ljg4MS0xLjg0MiAxNC43MDMtMjEuODE1IDIwLjg0OS00OS41MDggMTUuNTQzLTU2LjI4Ny0xNC40Ny0xOC40ODktMzkuNTE3LTkuNzQ2LTM5LjkzNi05LjUybC0uMTM0LjAyNWMtMi43NTEtLjU3MS01LjgzLS45MTItOS4yODktLjk2OC02LjMwMS0uMTA0LTExLjA4MiAxLjY1Mi0xNC43MDkgNC40MDIgMCAwLTQ0LjY4My0xOC40MDktNDIuNjA0IDIzLjE1MS40NDIgOC44NDEgMTIuNjcyIDY2Ljg5OCAyNy4yNiA0OS4zNjIgNS4zMzItNi40MTIgMTAuNDg0LTExLjgzNCAxMC40ODQtMTEuODM0IDIuNTU4IDEuNjk5IDUuNjIyIDIuNTY3IDguODM0IDIuMjU1bC4yNDktLjIxMmMtLjA3OC43OTYtLjA0NCAxLjU3NS4wOTkgMi40OTctMy43NTcgNC4xOTktMi42NTMgNC45MzYtMTAuMTY2IDYuNDgyLTcuNjAyIDEuNTY2LTMuMTM2IDQuMzU1LS4yMjEgNS4wODQgMy41MzUuODg0IDExLjcxMiAyLjEzNiAxNy4yMzgtNS41OThsLS4yMi44ODJjMS40NzQgMS4xOCAxLjM3NSA4LjQ3NyAxLjU4MyAxMy42OS4yMDkgNS4yMTQuNTU4IDEwLjA3OSAxLjYyMSAxMi45NDggMS4wNjMgMi44NjggMi4zMTcgMTAuMjU2IDEyLjE5MSA4LjE0IDguMjUyLTEuNzY0IDE0LjU2MS00LjMwOSAxNS4xMzYtMjcuOTg1Ij48L3BhdGg+PHBhdGggZD0iTTc1LjQ1OCAxMjUuMjU2Yy00LjM2NyAwLTcuMjExLTEuNjg5LTguOTM4LTMuMzItMi42MDctMi40Ni0zLjY0MS01LjYyOS00LjI1OS03LjUyMmwtLjI2Ny0uNzljLTEuMjQ0LTMuMzU4LTEuNjY2LTguMTkzLTEuOTE2LTE0LjQxOS0uMDM4LS45MzUtLjA2NC0xLjg5OC0uMDkzLTIuOTE5LS4wMjEtLjc0Ny0uMDQ3LTEuNjg0LS4wODUtMi42NjRhMTguOCAxOC44IDAgMDEtNC45NjIgMS41NjhjLTMuMDc5LjUyNi02LjM4OS4zNTYtOS44NC0uNTA3LTIuNDM1LS42MDktNC45NjUtMS44NzEtNi40MDctMy44Mi00LjIwMyAzLjY4MS04LjIxMiAzLjE4Mi0xMC4zOTYgMi40NTMtMy44NTMtMS4yODUtNy4zMDEtNC44OTYtMTAuNTQyLTExLjAzNy0yLjMwOS00LjM3NS00LjU0Mi0xMC4wNzUtNi42MzgtMTYuOTQzLTMuNjUtMTEuOTYtNS45NjktMjQuNTU3LTYuMTc1LTI4LjY5M0M0LjI5MiAyMy42OTggNy43NzcgMTQuNDQgMTUuMjk2IDkuMTI5IDI3LjE1Ny43NTEgNDUuMTI4IDUuNjc4IDUxLjY4IDcuOTE1YzQuNDAyLTIuNjUzIDkuNTgxLTMuOTQ0IDE1LjQzMy0zLjg1MSAzLjE0My4wNTEgNi4xMzYuMzI3IDguOTE2LjgyMyAyLjktLjkxMiA4LjYyOC0yLjIyMSAxNS4xODUtMi4xMzkgMTIuMDgxLjE0NCAyMi4wOTIgNC44NTIgMjguOTQ5IDEzLjYxNSA0Ljg5NCA2LjI1MiAyLjQ3NCAxOS4zODEuNTk3IDI2LjY1MS0yLjY0MiAxMC4yMjYtNy4yNzEgMjEuMTAyLTEyLjk1NyAzMC41NyAxLjU0NC4wMTEgMy43ODEtLjE3NCA2Ljk2MS0uODMxIDYuMjc0LTEuMjk1IDguMTA5IDIuMDY5IDguNjA3IDMuNTc1IDEuOTk1IDYuMDQyLTYuNjc3IDEwLjYwOC05LjM4MiAxMS44NjQtMy40NjYgMS42MDktOS4xMTcgMi41ODktMTMuNzQ1IDIuMzc3bC0uMjAyLS4wMTMtMS4yMTYtLjEwNy0uMTIgMS4wMTQtLjExNi45OTFjLS4zMTEgMTEuOTk5LTIuMDI1IDE5LjU5OC01LjU1MiAyNC42MTktMy42OTcgNS4yNjQtOC44MzUgNi43MzktMTMuMzYxIDcuNzA5LTEuNTQ0LjMzLTIuOTQ3LjQ3NC00LjIxOS40NzR6bS05LjE5LTQzLjY3MWMyLjgxOSAyLjI1NiAzLjA2NiA2LjUwMSAzLjI4NyAxNC40MzQuMDI4Ljk5LjA1NCAxLjkyNy4wODkgMi44MDIuMTA2IDIuNjUuMzU1IDguODU1IDEuMzI3IDExLjQ3Ny4xMzcuMzcxLjI2Ljc0Ny4zOSAxLjE0NiAxLjA4MyAzLjMxNiAxLjYyNiA0Ljk3OSA2LjMwOSAzLjk3OCAzLjkzMS0uODQzIDUuOTUyLTEuNTk5IDcuNTM0LTMuODUxIDIuMjk5LTMuMjc0IDMuNTg1LTkuODYgMy44MjEtMTkuNTc1bDQuNzgzLjExNi00Ljc1LS41Ny4xNC0xLjE4NmMuNDU1LTMuOTEuNzgzLTYuNzM0IDMuMzk2LTguNjAyIDIuMDk3LTEuNDk4IDQuNDg2LTEuMzUzIDYuMzg5LTEuMDEtMi4wOTEtMS41OC0yLjY2OS0zLjQzMy0yLjgyMy00LjE5M2wtLjM5OS0xLjk2NSAxLjEyMS0xLjY2M2M2LjQ1Ny05LjU4IDExLjc4MS0yMS4zNTQgMTQuNjA5LTMyLjMwNCAyLjkwNi0xMS4yNTEgMi4wMi0xNy4yMjYgMS4xMzQtMTguMzU2LTExLjcyOS0xNC45ODctMzIuMDY4LTguNzk5LTM0LjE5Mi04LjA5N2wtLjM1OS4xOTQtMS44LjMzNS0uOTIyLS4xOTFjLTIuNTQyLS41MjgtNS4zNjYtLjgyLTguMzkzLS44NjktNC43NTYtLjA4LTguNTkzIDEuMDQ0LTExLjczOSAzLjQzMWwtMi4xODMgMS42NTUtMi41MzMtMS4wNDNjLTUuNDEyLTIuMjEzLTIxLjMwOC02LjY2Mi0yOS42OTYtLjcyMS00LjY1NiAzLjI5OC02Ljc3NyA5Ljc2LTYuMzA1IDE5LjIwNy4xNTYgMy4xMTkgMi4yNzUgMTQuOTI2IDUuNzcxIDI2LjM3NyA0LjgzMSAxNS44MjUgOS4yMjEgMjEuMDgyIDExLjA1NCAyMS42OTMuMzIuMTA4IDEuMTUtLjUzNyAxLjk3Ni0xLjUyOWEyNzAuNzA4IDI3MC43MDggMCAwMTEwLjY5NC0xMi4wN2wyLjc3LTIuOTE1IDMuMzQ5IDIuMjI1YzEuMzUuODk3IDIuODM5IDEuNDA2IDQuMzY4IDEuNTAybDcuOTg3LTYuODEyLTEuMTU3IDExLjgwOGMtLjAyNi4yNjUtLjAzOS42MjYuMDY1IDEuMjk2bC4zNDggMi4yMzgtMS41MSAxLjY4OC0uMTc0LjE5NiA0LjM4OCAyLjAyNSAxLjgzNi0yLjMwMXoiPjwvcGF0aD48cGF0aCBmaWxsPSIjMzM2NzkxIiBkPSJNMTE1LjczMSA3Ny40NGMtMTMuOTI1IDIuODczLTE0Ljg4Mi0xLjg0Mi0xNC44ODItMS44NDIgMTQuNzAzLTIxLjgxNiAyMC44NDktNDkuNTEgMTUuNTQ1LTU2LjI4N0MxMDEuOTI0LjgyMyA3Ni44NzUgOS41NjYgNzYuNDU3IDkuNzkzbC0uMTM1LjAyNGMtMi43NTEtLjU3MS01LjgzLS45MTEtOS4yOTEtLjk2Ny02LjMwMS0uMTAzLTExLjA4IDEuNjUyLTE0LjcwNyA0LjQwMiAwIDAtNDQuNjg0LTE4LjQwOC00Mi42MDYgMjMuMTUxLjQ0MiA4Ljg0MiAxMi42NzIgNjYuODk5IDI3LjI2IDQ5LjM2MyA1LjMzMi02LjQxMiAxMC40ODMtMTEuODM0IDEwLjQ4My0xMS44MzQgMi41NTkgMS42OTkgNS42MjIgMi41NjcgOC44MzMgMi4yNTVsLjI1LS4yMTJjLS4wNzguNzk2LS4wNDIgMS41NzUuMSAyLjQ5Ny0zLjc1OCA0LjE5OS0yLjY1NCA0LjkzNi0xMC4xNjcgNi40ODItNy42MDIgMS41NjYtMy4xMzYgNC4zNTUtLjIyIDUuMDg0IDMuNTM0Ljg4NCAxMS43MTIgMi4xMzYgMTcuMjM3LTUuNTk4bC0uMjIxLjg4MmMxLjQ3MyAxLjE4IDIuNTA3IDcuNjcyIDIuMzM0IDEzLjU1Ny0uMTc0IDUuODg1LS4yOSA5LjkyNi44NzEgMTMuMDgyIDEuMTYgMy4xNTYgMi4zMTYgMTAuMjU2IDEyLjE5MiA4LjE0IDguMjUyLTEuNzY4IDEyLjUyOC02LjM1MSAxMy4xMjQtMTMuOTk1LjQyMi01LjQzNSAxLjM3Ny00LjYzMSAxLjQzOC05LjQ5bC43NjctMi4zYy44ODQtNy4zNjcuMTQtOS43NDMgNS4yMjUtOC42MzhsMS4yMzUuMTA4YzMuNzQyLjE3IDguNjM5LS42MDIgMTEuNTE0LTEuOTM4IDYuMTktMi44NzEgOS44NjEtNy42NjcgMy43NTgtNi40MDh6Ij48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTc1Ljk1NyAxMjIuMzA3Yy04LjIzMiAwLTEwLjg0LTYuNTE5LTExLjkwNy05LjE4NS0xLjU2Mi0zLjkwNy0xLjg5OS0xOS4wNjktMS41NTEtMzEuNTAzYTEuNTkgMS41OSAwIDAxMS42NC0xLjU1IDEuNTk0IDEuNTk0IDAgMDExLjU1IDEuNjM5Yy0uNDAxIDE0LjM0MS4xNjggMjcuMzM3IDEuMzI0IDMwLjIyOSAxLjgwNCA0LjUwOSA0LjU0IDguNDUzIDEyLjI3NSA2Ljc5NiA3LjM0My0xLjU3NSAxMC4wOTMtNC4zNTkgMTEuMzE4LTExLjQ2Ljk0LTUuNDQ5IDIuNzk5LTIwLjk1MSAzLjAyOC0yNC4wMWExLjU5MyAxLjU5MyAwIDAxMS43MS0xLjQ3MiAxLjU5NyAxLjU5NyAwIDAxMS40NzIgMS43MWMtLjIzOSAzLjE4NS0yLjA4OSAxOC42NTctMy4wNjUgMjQuMzE1LTEuNDQ2IDguMzg3LTUuMTg1IDEyLjE5MS0xMy43OTQgMTQuMDM3LTEuNDYzLjMxMy0yLjc5Mi40NTMtNCAuNDU0ek0zMS4zMjEgOTAuNDY2YTYuNzEgNi43MSAwIDAxLTIuMTE2LS4zNWMtNS4zNDctMS43ODQtMTAuNDQtMTAuNDkyLTE1LjEzOC0yNS44ODUtMy41NzYtMTEuNzE3LTUuODQyLTIzLjk0Ny02LjA0MS0yNy45MjItLjU4OS0xMS43ODQgMi40NDUtMjAuMTIxIDkuMDItMjQuNzc4IDEzLjAwNy05LjIxNiAzNC44ODgtLjQ0IDM1LjgxMy0uMDYyYTEuNTk2IDEuNTk2IDAgMDEtMS4yMDcgMi45NTVjLS4yMTEtLjA4Ni0yMS4xOTMtOC40OTItMzIuNzY4LS4yODUtNS42MjIgMy45ODYtOC4yMDMgMTEuMzkyLTcuNjcyIDIyLjAxMS4xNjcgMy4zNDkgMi4yODQgMTUuMjg1IDUuOTA2IDI3LjE0OSA0LjE5NCAxMy43NDIgOC45NjcgMjIuNDEzIDEzLjA5NiAyMy43OS42NDguMjE2IDIuNjIuODczIDUuNDM5LTIuNTE3QTI0NS4yNzIgMjQ1LjI3MiAwIDAxNDUuODggNzMuMDQ2YTEuNTk2IDEuNTk2IDAgMDEyLjMwNCAyLjIwOGMtLjA0OC4wNS00Ljg0NyA1LjA2Ny0xMC4wNzcgMTEuMzU5LTIuNDc3IDIuOTc5LTQuODUxIDMuODUzLTYuNzg2IDMuODUzem02OS40MjktMTMuNDQ1YTEuNTk2IDEuNTk2IDAgMDEtMS4zMjItMi40ODdjMTQuODYzLTIyLjA1NSAyMC4wOC00OC43MDQgMTUuNjEyLTU0LjQxNC01LjYyNC03LjE4Ni0xMy41NjUtMTAuOTM5LTIzLjYwNC0xMS4xNTYtNy40MzMtLjE2LTEzLjM0MSAxLjczOC0xNC4zMDcgMi4wNjlsLS4yNDMuMDk5Yy0uOTcxLjMwNS0xLjcxNi0uMjI3LTEuOTk3LS44NDlhMS42IDEuNiAwIDAxLjYzMS0yLjAyNWMuMDQ2LS4wMjcuMTkyLS4wODkuNDI5LS4xNzZsLS4wMjEuMDA2LjAyMS0uMDA3YzEuNjQxLS42MDEgNy42MzktMi40IDE1LjA2OC0yLjMxNSAxMS4xMDguMTE4IDIwLjI4NCA0LjQwMSAyNi41MzQgMTIuMzg4IDIuOTU3IDMuNzc5IDIuOTY0IDEyLjQ4NS4wMTkgMjMuODg3LTMuMDAyIDExLjYyNS04LjY1MSAyNC4xMTgtMTUuNDk3IDM0LjI3Ny0uMzA2LjQ1Ny0uODEuNzAzLTEuMzIzLjcwM3ptLjc2IDEwLjIxYy0yLjUzOCAwLTQuODEzLS4zNTgtNi4xNzUtMS4xNzQtMS40LS44MzktMS42NjctMS45NzktMS43MDItMi41ODQtLjM4Mi02LjcxIDMuMzItNy44NzggNS4yMDgtOC40MTEtLjI2My0uMzk4LS42MzctLjg2Ni0xLjAyNC0xLjM0OS0xLjEwMS0xLjM3Ni0yLjYwOS0zLjI2LTMuNzcxLTYuMDc4LS4xODItLjQ0LS43NTItMS40NjMtMS40MTItMi42NDgtMy41NzktNi40MTgtMTEuMDI2LTE5Ljc3My02LjI0Mi0yNi42MTIgMi4yMTQtMy4xNjUgNi42MjMtNC40MTEgMTMuMTE5LTMuNzE2Qzk3LjYgMjguODM3IDg4LjUgMTAuNjI1IDY2LjkwNyAxMC4yNzFjLTYuNDk0LS4xMDgtMTEuODIgMS44ODktMTUuODIyIDUuOTMtOC45NiA5LjA0OS04LjYzNiAyNS40MjItOC42MzEgMjUuNTg2YTEuNTk1IDEuNTk1IDAgMTEtMy4xOS4wODRjLS4wMi0uNzI3LS4zNTQtMTcuOTA5IDkuNTU0LTI3LjkxNkM1My40NTUgOS4yNzIgNTkuNTU5IDYuOTYgNjYuOTYgNy4wODFjMTMuODE0LjIyNyAyMi43MDYgNy4yNSAyNy43MzIgMTMuMTAxIDUuNDc5IDYuMzc3IDguMTY1IDEzLjQxMSA4LjM4NiAxNS43NTkuMTY1IDEuNzQ2LTEuMDg4IDIuMDk1LTEuMzQxIDIuMTQ3bC0uNTc2LjAxM2MtNi4zNzUtMS4wMjEtMTAuNDY1LS4zMTItMTIuMTU2IDIuMTA0LTMuNjM5IDUuMjAxIDMuNDA2IDE3LjgzNCA2LjQxNCAyMy4yMjkuNzY4IDEuMzc2IDEuMzIyIDIuMzcxIDEuNTc2IDIuOTg1Ljk4OCAyLjM5NiAyLjI3NyA0LjAwNiAzLjMxMiA1LjMuOTExIDEuMTM4IDEuNyAyLjEyNSAxLjk4MiAzLjI4My4xMzEuMjMgMS45OSAyLjk4IDEzLjAyMS43MDMgMi43NjUtLjU3IDQuNDIzLS4wODMgNC45MyAxLjQ1Ljk5NyAzLjAxNS00LjU5NyA2LjUzMi03LjY5NCA3Ljk3LTIuNzc1IDEuMjktNy4yMDQgMi4xMDYtMTEuMDM2IDIuMTA2em0tNC42OTYtNC4wMjFjLjM1LjM1MyAyLjEwMS45NjIgNS43MjcuODA2IDMuMjI0LS4xMzggNi42MjQtLjgzOSA4LjY2NC0xLjc4NiAyLjYwOS0xLjIxMiA0LjM1MS0yLjU2NyA1LjI1My0zLjQ5MmwtLjUuMDkyYy03LjA1MyAxLjQ1Ni0xMi4wNDIgMS4yNjItMTQuODI4LS41NzdhNi4xNjIgNi4xNjIgMCAwMS0uNTQtLjQwMWMtLjMwMi4xMTktLjU4MS4xOTctLjc4LjI1My0xLjU4LjQ0My0zLjIxNC45MDItMi45OTYgNS4xMDV6bS00NS41NjIgOC45MTVjLTEuNzUyIDAtMy41OTYtLjIzOS01LjQ3OS0uNzEtMS45NTEtLjQ4OC01LjI0LTEuOTU3LTUuMTktNC4zNy4wNTctMi43MDcgMy45OTQtMy41MTkgNS40NzYtMy44MjQgNS4zNTQtMS4xMDMgNS43MDMtMS41NDUgNy4zNzYtMy42Ny40ODgtLjYxOSAxLjA5NS0xLjM5IDEuOTIzLTIuMzE0IDEuMjI5LTEuMzc2IDIuNTcyLTIuMDczIDMuOTkyLTIuMDczLjk4OSAwIDEuOC4zMzUgMi4zMzYuNTU4IDEuNzA4LjcwOCAzLjEzMyAyLjQyIDMuNzE5IDQuNDY3LjUyOSAxLjg0Ny4yNzYgMy42MjUtLjcxIDUuMDA2LTMuMjM3IDQuNTMzLTcuODg2IDYuOTMtMTMuNDQzIDYuOTN6bS03LjIyMi00Ljk0M2MuNDgxLjM3MiAxLjQ0NS44NjkgMi41MTggMS4xMzcgMS42MzEuNDA4IDMuMjEzLjYxNSA0LjcwNS42MTUgNC41NDYgMCA4LjE5Ni0xLjg4MiAxMC44NDctNS41OTQuNTUzLS43NzQuMzg3LTEuNzU3LjIzOS0yLjI3NC0uMzEtMS4wODMtMS4wOC0yLjA2OC0xLjg3My0yLjM5Ny0uNDMtLjE3OC0uNzg3LS4zMTQtMS4xMTUtLjMxNC0uMTc2IDAtLjcxMiAwLTEuNjE0IDEuMDA5YTQxLjE0NiA0MS4xNDYgMCAwMC0xLjc5NCAyLjE2MmMtMi4wODQgMi42NDYtMy4wMzkgMy41NDQtOS4yMzkgNC44MjEtMS41MTMuMzEtMi4yODkuNjI2LTIuNjc0LjgzNXptMTIuMjY5LTcuMzZhMS41OTYgMS41OTYgMCAwMS0xLjU3NS0xLjM1NCA4LjIxOCA4LjIxOCAwIDAxLS4wOC0uNzk5Yy00LjA2NC0uMDc2LTcuOTg1LTEuODItMTAuOTYyLTQuOTI2LTMuNzY0LTMuOTI3LTUuNDc3LTkuMzY4LTQuNjk5LTE0LjkyNy44NDUtNi4wMzcuNTI5LTExLjM2Ni4zNTktMTQuMjI5LS4wNDctLjc5Ni0uMDgxLTEuMzcxLS4wNzktMS43NjkuMDAzLS41MDUuMDEzLTEuODQ0IDQuNDg5LTQuMTEzIDEuNTkyLS44MDcgNC43ODQtMi4yMTUgOC4yNzEtMi41NzYgNS43NzctLjU5NyA5LjU4NSAxLjk3NiAxMC43MjUgNy4yNDYgMy4wNzcgMTQuMjI4LjI0NCAyMC41MjEtMS44MjUgMjUuMTE3LS4zODUuODU2LS43NDkgMS42NjQtMS4wNCAyLjQ0N2wtLjI1Ny42OWMtMS4wOTMgMi45MzEtMi4wMzggNS40NjMtMS43NDggNy4zNTRhMS41OTUgMS41OTUgMCAwMS0xLjMzNSAxLjgxOWwtLjI0NC4wMnpNNDIuNDY0IDQyLjI2bC4wNjIgMS4xMzljLjE3NiAyLjk3NC41MDQgOC41MDgtLjM4NCAxNC44Ni0uNjQxIDQuNTg1Ljc1OSA5LjA2IDMuODQzIDEyLjI3NiAyLjQzNyAyLjU0MiA1LjY0NCAzLjk0NSA4Ljk0IDMuOTQ1aC4wNjhjLjM2OS0xLjU1NS45ODItMy4xOTcgMS42NDItNC45NjZsLjI1NS0uNjg2Yy4zMjktLjg4NC43MTQtMS43NCAxLjEyMi0yLjY0NiAxLjk5MS00LjQyNCA0LjQ3LTkuOTMxIDEuNjE1LTIzLjEzMi0uNTY1LTIuNjE1LTEuOTM2LTQuMTI4LTQuMTg5LTQuNjI3LTQuNjI4LTEuMDIyLTExLjUyNSAyLjQ1OS0xMi45NzQgMy44Mzd6bTkuNjMtLjY3N2MtLjA4LjU2NCAxLjAzMyAyLjA3IDIuNDg1IDIuMjcxIDEuNDQ5LjIwMyAyLjY4OS0uOTc1IDIuNzY4LTEuNTM5LjA3OS0uNTY0LTEuMDMzLTEuMTg2LTIuNDg1LTEuMzg4LTEuNDUxLS4yMDItMi42OTEuMDkyLTIuNzY4LjY1NnptMi44MTggMi44MjZsLS40MDctLjAyOGMtLjktLjEyNS0xLjgxLS42OTItMi40MzMtMS41MTgtLjIxOS0uMjktLjU3Ni0uODUyLS41MDUtMS4zNTQuMTAxLS43MzYuOTk5LTEuMTc3IDIuNC0xLjE3Ny4zMTMgMCAuNjM5LjAyMy45NjcuMDY5Ljc2Ni4xMDYgMS40NzcuMzI3IDIuMDAyLjYyLjkxLjUwOC45NzcgMS4wNzUuOTM2IDEuMzY4LS4xMTIuODEzLTEuNDA1IDIuMDItMi45NiAyLjAyem0tMi4yODktMi43MzJjLjA0NS4zNDguOTA3IDEuNDk2IDIuMDI5IDEuNjUxbC4yNjEuMDE4YzEuMDM2IDAgMS44MS0uODE1IDEuOTAxLTEuMDgyLS4wOTYtLjE4Mi0uNzYyLS42MzQtMi4wMjUtLjgxYTUuODIzIDUuODIzIDAgMDAtLjgyMS0uMDU5Yy0uODEyIDAtMS4yNDMuMTgzLTEuMzQ1LjI4MnptNDMuNjA1LTEuMjQ1Yy4wNzkuNTY0LTEuMDMzIDIuMDctMi40ODQgMi4yNzItMS40NS4yMDItMi42OTEtLjk3NS0yLjc3MS0xLjUzOS0uMDc2LS41NjQgMS4wMzYtMS4xODcgMi40ODYtMS4zODggMS40NS0uMjAzIDIuNjg5LjA5MiAyLjc2OS42NTV6bS0yLjgxOSAyLjU2Yy0xLjM5NiAwLTIuNjAxLTEuMDg2LTIuNy0xLjc5MS0uMTE1LS44NDYgMS4yNzgtMS40ODkgMi43MTItMS42ODguMzE2LS4wNDQuNjI5LS4wNjYuOTMtLjA2NiAxLjIzOCAwIDIuMDU4LjM2MyAyLjE0Ljk0OS4wNTMuMzc5LS4yMzguOTY0LS43MzkgMS40OTItLjMzMS4zNDctMS4wMjYuOTQ4LTEuOTczIDEuMDc5bC0uMzcuMDI1em0uOTQzLTMuMDEzYy0uMjc2IDAtLjU2NC4wMjEtLjg1Ni4wNjEtMS40NDEuMjAxLTIuMzAxLjc3OS0yLjI1OSAxLjA4OS4wNDguMzQxLjk2OCAxLjMzMiAyLjE3MyAxLjMzMmwuMjk3LS4wMjFjLjc4Ny0uMTA5IDEuMzc4LS42MjMgMS42Ni0uOTE5LjQ0My0uNDY1LjYxOS0uOTAzLjU5OC0xLjA1Mi0uMDI4LS4xOTgtLjU2LS40OS0xLjYxMy0uNDl6bTMuOTY1IDMyLjg0M2ExLjU5NCAxLjU5NCAwIDAxLTEuMzI0LTIuNDgzYzMuMzk4LTUuMDc1IDIuNzc2LTEwLjI1IDIuMTc1LTE1LjI1NS0uMjU3LTIuMTMyLS41MjEtNC4zMzctLjQ1My02LjQ1My4wNy0yLjE3Ny4zNDctMy45NzMuNjE0LTUuNzEuMzE3LTIuMDU4LjYxNy00LjAwMi40OTMtNi4zMWExLjU5NSAxLjU5NSAwIDExMy4xODYtLjE3MmMuMTQyIDIuNjM4LS4xOTcgNC44MzgtLjUyNSA2Ljk2Ny0uMjUzIDEuNjQzLS41MTUgMy4zNDItLjU3OCA1LjMyNy0uMDYxIDEuODc0LjE3OCAzLjg2NC40MzEgNS45Ny42NCA1LjMyMiAxLjM2NSAxMS4zNTQtMi42OTEgMTcuNDExYTEuNTk2IDEuNTk2IDAgMDEtMS4zMjguNzA4eiI+PC9wYXRoPjwvc3ZnPg==";
354
+ readonly url: "https://www.postgresql.org/";
355
+ readonly tagline: "The world's most advanced open source relational database";
356
+ readonly repo: "postgres/postgres";
357
+ readonly links: [{
358
+ readonly label: "Docs";
359
+ readonly href: "https://www.postgresql.org/docs/";
360
+ }, {
361
+ readonly label: "postgres.js (client)";
362
+ readonly href: "https://github.com/porsager/postgres";
363
+ }];
364
+ }, {
365
+ readonly category: "ORM / Query builder";
366
+ readonly label: "Drizzle";
367
+ readonly flag: "drizzle";
368
+ readonly image: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjI4MHB4IiBoZWlnaHQ9IjI4MHB4IiBzdHlsZT0ic2hhcGUtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgdGV4dC1yZW5kZXJpbmc6Z2VvbWV0cmljUHJlY2lzaW9uOyBpbWFnZS1yZW5kZXJpbmc6b3B0aW1pemVRdWFsaXR5OyBmaWxsLXJ1bGU6ZXZlbm9kZDsgY2xpcC1ydWxlOmV2ZW5vZGQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzAwMDAwMCIgZD0iTSAtMC41LC0wLjUgQyA5Mi44MzMzLC0wLjUgMTg2LjE2NywtMC41IDI3OS41LC0wLjVDIDI3OS41LDkyLjgzMzMgMjc5LjUsMTg2LjE2NyAyNzkuNSwyNzkuNUMgMTg2LjE2NywyNzkuNSA5Mi44MzMzLDI3OS41IC0wLjUsMjc5LjVDIC0wLjUsMTg2LjE2NyAtMC41LDkyLjgzMzMgLTAuNSwtMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTMzLjUsODQuNSBDIDE0Mi44MTQsODIuNzI2OSAxNDYuNjQ3LDg2LjM5MzUgMTQ1LDk1LjVDIDEzNS45MDYsMTEyLjAyOCAxMjYuNTcyLDEyOC4zNjIgMTE3LDE0NC41QyAxMTEuMjQ5LDE0OS45ODQgMTA2LjI0OSwxNDkuMzE3IDEwMiwxNDIuNUMgMTAxLjMzMywxNDAuODMzIDEwMS4zMzMsMTM5LjE2NyAxMDIsMTM3LjVDIDExMS41NDcsMTE5LjA0MSAxMjIuMDQ3LDEwMS4zNzUgMTMzLjUsODQuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYzBmMTRkIiBkPSJNIDIyMy41LDg0LjUgQyAyMzMuNTM5LDgzLjY5NzIgMjM3LjAzOSw4OC4wMzA1IDIzNCw5Ny41QyAyMjUuMzQ3LDExMi44MDEgMjE2LjY4MSwxMjguMTM1IDIwOCwxNDMuNUMgMjAzLjM4NywxNDkuNzM3IDE5OC4zODcsMTUwLjA3MSAxOTMsMTQ0LjVDIDE5MS41NzgsMTQxLjk3IDE5MS4yNDUsMTM5LjMwMyAxOTIsMTM2LjVDIDIwMC41MiwxMjIuNzk0IDIwOC41MiwxMDguNzk0IDIxNiw5NC41QyAyMTguMjg5LDkwLjg4MTIgMjIwLjc4OSw4Ny41NDc5IDIyMy41LDg0LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2MwZjE0ZCIgZD0iTSA3NS41LDEyMC41IEMgODMuOTg4NSwxMTkuNjE4IDg3LjgyMTgsMTIzLjI4NSA4NywxMzEuNUMgNzcuOTA1NywxNDguMDI4IDY4LjU3MjQsMTY0LjM2MiA1OSwxODAuNUMgNTYuMDQ1MywxODQuMjc3IDUyLjIxMiwxODUuNDQzIDQ3LjUsMTg0QyA0My44Njk3LDE4MC45NSA0Mi43MDMsMTc3LjExNyA0NCwxNzIuNUMgNTMsMTU2LjUgNjIsMTQwLjUgNzEsMTI0LjVDIDcyLjM5NjgsMTIyLjkzIDczLjg5NjgsMTIxLjU5NiA3NS41LDEyMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTY1LjUsMTIwLjUgQyAxNzQuMTY0LDExOS4zMzIgMTc3Ljk5NywxMjIuOTk5IDE3NywxMzEuNUMgMTY3LjQxNCwxNDcuNjcxIDE1OC4wOCwxNjQuMDA0IDE0OSwxODAuNUMgMTQ2LjM5OCwxODQuMjEyIDE0Mi44OTgsMTg1LjM3OCAxMzguNSwxODRDIDEzMy45MzEsMTgxLjQ1OSAxMzIuNDMxLDE3Ny42MjUgMTM0LDE3Mi41QyAxNDMuNTcyLDE1Ni4zNjIgMTUyLjkwNiwxNDAuMDI4IDE2MiwxMjMuNUMgMTYzLjE0NSwxMjIuMzY0IDE2NC4zMTIsMTIxLjM2NCAxNjUuNSwxMjAuNSBaIi8+PC9nPgo8L3N2Zz4K";
369
+ readonly url: "https://orm.drizzle.team/";
370
+ readonly tagline: "Headless TypeScript ORM that feels like SPA with SSR";
371
+ readonly repo: "drizzle-team/drizzle-orm";
372
+ readonly links: [{
373
+ readonly label: "Docs & Getting started";
374
+ readonly href: "https://orm.drizzle.team/docs/overview";
375
+ }];
376
+ }, {
377
+ readonly category: "ORM / Query builder";
358
378
  readonly label: "Kysely";
359
379
  readonly flag: "kysely";
360
380
  readonly image: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgdmlld0JveD0nMCAwIDEzMiAxMzInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PGcgY2xpcC1wYXRoPSd1cmwoI2NsaXAwXzhfMyknPjxyZWN0IHg9JzInIHk9JzInIHdpZHRoPScxMjgnIGhlaWdodD0nMTI4JyByeD0nMTYnIGZpbGw9J3doaXRlJy8+PHBhdGggZD0nTTQxLjI5ODMgMTA5VjIzLjkwOTFINDYuNDkxOFY3My4zMUg0Ny4wNzM1TDkxLjk0NTcgMjMuOTA5MUg5OC44NDI3TDYxLjkwNjIgNjQuMTY5NEw5OC41MTAzIDEwOUg5Mi4wMjg4TDU4LjU4MjQgNjcuOTA4N0w0Ni40OTE4IDgxLjI4NzNWMTA5SDQxLjI5ODNaJyBmaWxsPSdibGFjaycvPjwvZz48cmVjdCB4PScyJyB5PScyJyB3aWR0aD0nMTI4JyBoZWlnaHQ9JzEyOCcgcng9JzE2JyBzdHJva2U9JyMxMjEyMTInIHN0cm9rZS13aWR0aD0nNCcvPjxkZWZzPjxjbGlwUGF0aCBpZD0nY2xpcDBfOF8zJz48cmVjdCB4PScyJyB5PScyJyB3aWR0aD0nMTI4JyBoZWlnaHQ9JzEyOCcgcng9JzE2JyBmaWxsPSd3aGl0ZScvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPgo=";
@@ -366,7 +386,7 @@ declare const features: readonly [{
366
386
  readonly href: "https://kysely.dev/docs/getting-started";
367
387
  }];
368
388
  }, {
369
- readonly category: "Database";
389
+ readonly category: "ORM / Query builder";
370
390
  readonly label: "Prisma";
371
391
  readonly flag: "prisma";
372
392
  readonly image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjgzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZD0iTTI1NC4zMTMgMjM1LjUxOUwxNDggOS43NDlBMTcuMDYzIDE3LjA2MyAwIDAgMCAxMzMuNDczLjAzN2ExNi44NyAxNi44NyAwIDAgMC0xNS41MzMgOC4wNTJMMi42MzMgMTk0Ljg0OGExNy40NjUgMTcuNDY1IDAgMCAwIC4xOTMgMTguNzQ3TDU5LjIgMzAwLjg5NmExOC4xMyAxOC4xMyAwIDAgMCAyMC4zNjMgNy40ODlsMTYzLjU5OS00OC4zOTJhMTcuOTI5IDE3LjkyOSAwIDAgMCAxMS4yNi05LjcyMmExNy41NDIgMTcuNTQyIDAgMCAwLS4xMDEtMTQuNzZsLS4wMDguMDA4Wm0tMjMuODAyIDkuNjgzbC0xMzguODIzIDQxLjA1Yy00LjIzNSAxLjI2LTguMy0yLjQxMS03LjQxOS02LjY4NWw0OS41OTgtMjM3LjQ4NGMuOTI3LTQuNDQzIDcuMDYzLTUuMTQ3IDkuMDAzLTEuMDM1bDkxLjgxNCAxOTQuOTczYTYuNjMgNi42MyAwIDAgMS00LjE4IDkuMThoLjAwN1oiLz48L3N2Zz4=";
@@ -566,8 +586,8 @@ declare const features: readonly [{
566
586
  readonly href: "https://storybook.js.org/docs";
567
587
  }];
568
588
  }];
569
- declare const flags: ("vike" | "react" | "vue" | "solid" | "tailwindcss" | "compiled-css" | "daisyui" | "shadcn-ui" | "mantine" | "authjs" | "auth0" | "telefunc" | "trpc" | "ts-rest" | "hono" | "h3" | "express" | "fastify" | "drizzle" | "sqlite" | "kysely" | "prisma" | "plausible.io" | "google-analytics" | "segment" | "hosting-diy" | "cloudflare" | "edgeone" | "vercel" | "netlify" | "aws" | "docker" | "dokploy" | "eslint" | "prettier" | "biome" | "oxlint" | "sentry" | "logrocket" | "storybook")[];
570
- declare const cliFlags: ("vike" | "react" | "vue" | "solid" | "tailwindcss" | "compiled-css" | "daisyui" | "shadcn-ui" | "mantine" | "authjs" | "auth0" | "telefunc" | "trpc" | "ts-rest" | "hono" | "h3" | "express" | "fastify" | "drizzle" | "sqlite" | "kysely" | "prisma" | "plausible.io" | "google-analytics" | "segment" | "hosting-diy" | "cloudflare" | "edgeone" | "vercel" | "netlify" | "aws" | "docker" | "dokploy" | "eslint" | "prettier" | "biome" | "oxlint" | "sentry" | "logrocket" | "storybook")[];
589
+ declare const flags: ("vike" | "react" | "vue" | "solid" | "tailwindcss" | "compiled-css" | "daisyui" | "shadcn-ui" | "mantine" | "authjs" | "auth0" | "telefunc" | "trpc" | "ts-rest" | "hono" | "h3" | "express" | "fastify" | "sqlite" | "postgres" | "drizzle" | "kysely" | "prisma" | "plausible.io" | "google-analytics" | "segment" | "hosting-diy" | "cloudflare" | "edgeone" | "vercel" | "netlify" | "aws" | "docker" | "dokploy" | "eslint" | "prettier" | "biome" | "oxlint" | "sentry" | "logrocket" | "storybook")[];
590
+ declare const cliFlags: ("vike" | "react" | "vue" | "solid" | "tailwindcss" | "compiled-css" | "daisyui" | "shadcn-ui" | "mantine" | "authjs" | "auth0" | "telefunc" | "trpc" | "ts-rest" | "hono" | "h3" | "express" | "fastify" | "sqlite" | "postgres" | "drizzle" | "kysely" | "prisma" | "plausible.io" | "google-analytics" | "segment" | "hosting-diy" | "cloudflare" | "edgeone" | "vercel" | "netlify" | "aws" | "docker" | "dokploy" | "eslint" | "prettier" | "biome" | "oxlint" | "sentry" | "logrocket" | "storybook")[];
571
591
  type Flags = (typeof flags)[number];
572
592
  //#endregion
573
593
  export { CategoryLabels as a, flags as i, cliFlags as n, categories as o, features as r, categoriesGroups as s, Flags as t };
@@ -286,19 +286,6 @@ const features = [
286
286
  href: "https://fastify.dev/docs/latest/Reference/"
287
287
  }]
288
288
  },
289
- {
290
- category: "Database",
291
- label: "Drizzle",
292
- flag: "drizzle",
293
- image: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjI4MHB4IiBoZWlnaHQ9IjI4MHB4IiBzdHlsZT0ic2hhcGUtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgdGV4dC1yZW5kZXJpbmc6Z2VvbWV0cmljUHJlY2lzaW9uOyBpbWFnZS1yZW5kZXJpbmc6b3B0aW1pemVRdWFsaXR5OyBmaWxsLXJ1bGU6ZXZlbm9kZDsgY2xpcC1ydWxlOmV2ZW5vZGQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzAwMDAwMCIgZD0iTSAtMC41LC0wLjUgQyA5Mi44MzMzLC0wLjUgMTg2LjE2NywtMC41IDI3OS41LC0wLjVDIDI3OS41LDkyLjgzMzMgMjc5LjUsMTg2LjE2NyAyNzkuNSwyNzkuNUMgMTg2LjE2NywyNzkuNSA5Mi44MzMzLDI3OS41IC0wLjUsMjc5LjVDIC0wLjUsMTg2LjE2NyAtMC41LDkyLjgzMzMgLTAuNSwtMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTMzLjUsODQuNSBDIDE0Mi44MTQsODIuNzI2OSAxNDYuNjQ3LDg2LjM5MzUgMTQ1LDk1LjVDIDEzNS45MDYsMTEyLjAyOCAxMjYuNTcyLDEyOC4zNjIgMTE3LDE0NC41QyAxMTEuMjQ5LDE0OS45ODQgMTA2LjI0OSwxNDkuMzE3IDEwMiwxNDIuNUMgMTAxLjMzMywxNDAuODMzIDEwMS4zMzMsMTM5LjE2NyAxMDIsMTM3LjVDIDExMS41NDcsMTE5LjA0MSAxMjIuMDQ3LDEwMS4zNzUgMTMzLjUsODQuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYzBmMTRkIiBkPSJNIDIyMy41LDg0LjUgQyAyMzMuNTM5LDgzLjY5NzIgMjM3LjAzOSw4OC4wMzA1IDIzNCw5Ny41QyAyMjUuMzQ3LDExMi44MDEgMjE2LjY4MSwxMjguMTM1IDIwOCwxNDMuNUMgMjAzLjM4NywxNDkuNzM3IDE5OC4zODcsMTUwLjA3MSAxOTMsMTQ0LjVDIDE5MS41NzgsMTQxLjk3IDE5MS4yNDUsMTM5LjMwMyAxOTIsMTM2LjVDIDIwMC41MiwxMjIuNzk0IDIwOC41MiwxMDguNzk0IDIxNiw5NC41QyAyMTguMjg5LDkwLjg4MTIgMjIwLjc4OSw4Ny41NDc5IDIyMy41LDg0LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2MwZjE0ZCIgZD0iTSA3NS41LDEyMC41IEMgODMuOTg4NSwxMTkuNjE4IDg3LjgyMTgsMTIzLjI4NSA4NywxMzEuNUMgNzcuOTA1NywxNDguMDI4IDY4LjU3MjQsMTY0LjM2MiA1OSwxODAuNUMgNTYuMDQ1MywxODQuMjc3IDUyLjIxMiwxODUuNDQzIDQ3LjUsMTg0QyA0My44Njk3LDE4MC45NSA0Mi43MDMsMTc3LjExNyA0NCwxNzIuNUMgNTMsMTU2LjUgNjIsMTQwLjUgNzEsMTI0LjVDIDcyLjM5NjgsMTIyLjkzIDczLjg5NjgsMTIxLjU5NiA3NS41LDEyMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTY1LjUsMTIwLjUgQyAxNzQuMTY0LDExOS4zMzIgMTc3Ljk5NywxMjIuOTk5IDE3NywxMzEuNUMgMTY3LjQxNCwxNDcuNjcxIDE1OC4wOCwxNjQuMDA0IDE0OSwxODAuNUMgMTQ2LjM5OCwxODQuMjEyIDE0Mi44OTgsMTg1LjM3OCAxMzguNSwxODRDIDEzMy45MzEsMTgxLjQ1OSAxMzIuNDMxLDE3Ny42MjUgMTM0LDE3Mi41QyAxNDMuNTcyLDE1Ni4zNjIgMTUyLjkwNiwxNDAuMDI4IDE2MiwxMjMuNUMgMTYzLjE0NSwxMjIuMzY0IDE2NC4zMTIsMTIxLjM2NCAxNjUuNSwxMjAuNSBaIi8+PC9nPgo8L3N2Zz4K",
294
- url: "https://orm.drizzle.team/",
295
- tagline: "Headless TypeScript ORM that feels like SPA with SSR",
296
- repo: "drizzle-team/drizzle-orm",
297
- links: [{
298
- label: "Docs & Getting started",
299
- href: "https://orm.drizzle.team/docs/overview"
300
- }]
301
- },
302
289
  {
303
290
  category: "Database",
304
291
  label: "SQLite",
@@ -317,6 +304,35 @@ const features = [
317
304
  },
318
305
  {
319
306
  category: "Database",
307
+ label: "PostgreSQL",
308
+ flag: "postgres",
309
+ image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNOTMuODA5IDkyLjExMmMuNzg1LTYuNTMzLjU1LTcuNDkyIDUuNDE2LTYuNDMzbDEuMjM1LjEwOGMzLjc0Mi4xNyA4LjYzNy0uNjAyIDExLjUxMy0xLjkzOCA2LjE5MS0yLjg3MyA5Ljg2MS03LjY2OCAzLjc1OC02LjQwOS0xMy45MjQgMi44NzMtMTQuODgxLTEuODQyLTE0Ljg4MS0xLjg0MiAxNC43MDMtMjEuODE1IDIwLjg0OS00OS41MDggMTUuNTQzLTU2LjI4Ny0xNC40Ny0xOC40ODktMzkuNTE3LTkuNzQ2LTM5LjkzNi05LjUybC0uMTM0LjAyNWMtMi43NTEtLjU3MS01LjgzLS45MTItOS4yODktLjk2OC02LjMwMS0uMTA0LTExLjA4MiAxLjY1Mi0xNC43MDkgNC40MDIgMCAwLTQ0LjY4My0xOC40MDktNDIuNjA0IDIzLjE1MS40NDIgOC44NDEgMTIuNjcyIDY2Ljg5OCAyNy4yNiA0OS4zNjIgNS4zMzItNi40MTIgMTAuNDg0LTExLjgzNCAxMC40ODQtMTEuODM0IDIuNTU4IDEuNjk5IDUuNjIyIDIuNTY3IDguODM0IDIuMjU1bC4yNDktLjIxMmMtLjA3OC43OTYtLjA0NCAxLjU3NS4wOTkgMi40OTctMy43NTcgNC4xOTktMi42NTMgNC45MzYtMTAuMTY2IDYuNDgyLTcuNjAyIDEuNTY2LTMuMTM2IDQuMzU1LS4yMjEgNS4wODQgMy41MzUuODg0IDExLjcxMiAyLjEzNiAxNy4yMzgtNS41OThsLS4yMi44ODJjMS40NzQgMS4xOCAxLjM3NSA4LjQ3NyAxLjU4MyAxMy42OS4yMDkgNS4yMTQuNTU4IDEwLjA3OSAxLjYyMSAxMi45NDggMS4wNjMgMi44NjggMi4zMTcgMTAuMjU2IDEyLjE5MSA4LjE0IDguMjUyLTEuNzY0IDE0LjU2MS00LjMwOSAxNS4xMzYtMjcuOTg1Ij48L3BhdGg+PHBhdGggZD0iTTc1LjQ1OCAxMjUuMjU2Yy00LjM2NyAwLTcuMjExLTEuNjg5LTguOTM4LTMuMzItMi42MDctMi40Ni0zLjY0MS01LjYyOS00LjI1OS03LjUyMmwtLjI2Ny0uNzljLTEuMjQ0LTMuMzU4LTEuNjY2LTguMTkzLTEuOTE2LTE0LjQxOS0uMDM4LS45MzUtLjA2NC0xLjg5OC0uMDkzLTIuOTE5LS4wMjEtLjc0Ny0uMDQ3LTEuNjg0LS4wODUtMi42NjRhMTguOCAxOC44IDAgMDEtNC45NjIgMS41NjhjLTMuMDc5LjUyNi02LjM4OS4zNTYtOS44NC0uNTA3LTIuNDM1LS42MDktNC45NjUtMS44NzEtNi40MDctMy44Mi00LjIwMyAzLjY4MS04LjIxMiAzLjE4Mi0xMC4zOTYgMi40NTMtMy44NTMtMS4yODUtNy4zMDEtNC44OTYtMTAuNTQyLTExLjAzNy0yLjMwOS00LjM3NS00LjU0Mi0xMC4wNzUtNi42MzgtMTYuOTQzLTMuNjUtMTEuOTYtNS45NjktMjQuNTU3LTYuMTc1LTI4LjY5M0M0LjI5MiAyMy42OTggNy43NzcgMTQuNDQgMTUuMjk2IDkuMTI5IDI3LjE1Ny43NTEgNDUuMTI4IDUuNjc4IDUxLjY4IDcuOTE1YzQuNDAyLTIuNjUzIDkuNTgxLTMuOTQ0IDE1LjQzMy0zLjg1MSAzLjE0My4wNTEgNi4xMzYuMzI3IDguOTE2LjgyMyAyLjktLjkxMiA4LjYyOC0yLjIyMSAxNS4xODUtMi4xMzkgMTIuMDgxLjE0NCAyMi4wOTIgNC44NTIgMjguOTQ5IDEzLjYxNSA0Ljg5NCA2LjI1MiAyLjQ3NCAxOS4zODEuNTk3IDI2LjY1MS0yLjY0MiAxMC4yMjYtNy4yNzEgMjEuMTAyLTEyLjk1NyAzMC41NyAxLjU0NC4wMTEgMy43ODEtLjE3NCA2Ljk2MS0uODMxIDYuMjc0LTEuMjk1IDguMTA5IDIuMDY5IDguNjA3IDMuNTc1IDEuOTk1IDYuMDQyLTYuNjc3IDEwLjYwOC05LjM4MiAxMS44NjQtMy40NjYgMS42MDktOS4xMTcgMi41ODktMTMuNzQ1IDIuMzc3bC0uMjAyLS4wMTMtMS4yMTYtLjEwNy0uMTIgMS4wMTQtLjExNi45OTFjLS4zMTEgMTEuOTk5LTIuMDI1IDE5LjU5OC01LjU1MiAyNC42MTktMy42OTcgNS4yNjQtOC44MzUgNi43MzktMTMuMzYxIDcuNzA5LTEuNTQ0LjMzLTIuOTQ3LjQ3NC00LjIxOS40NzR6bS05LjE5LTQzLjY3MWMyLjgxOSAyLjI1NiAzLjA2NiA2LjUwMSAzLjI4NyAxNC40MzQuMDI4Ljk5LjA1NCAxLjkyNy4wODkgMi44MDIuMTA2IDIuNjUuMzU1IDguODU1IDEuMzI3IDExLjQ3Ny4xMzcuMzcxLjI2Ljc0Ny4zOSAxLjE0NiAxLjA4MyAzLjMxNiAxLjYyNiA0Ljk3OSA2LjMwOSAzLjk3OCAzLjkzMS0uODQzIDUuOTUyLTEuNTk5IDcuNTM0LTMuODUxIDIuMjk5LTMuMjc0IDMuNTg1LTkuODYgMy44MjEtMTkuNTc1bDQuNzgzLjExNi00Ljc1LS41Ny4xNC0xLjE4NmMuNDU1LTMuOTEuNzgzLTYuNzM0IDMuMzk2LTguNjAyIDIuMDk3LTEuNDk4IDQuNDg2LTEuMzUzIDYuMzg5LTEuMDEtMi4wOTEtMS41OC0yLjY2OS0zLjQzMy0yLjgyMy00LjE5M2wtLjM5OS0xLjk2NSAxLjEyMS0xLjY2M2M2LjQ1Ny05LjU4IDExLjc4MS0yMS4zNTQgMTQuNjA5LTMyLjMwNCAyLjkwNi0xMS4yNTEgMi4wMi0xNy4yMjYgMS4xMzQtMTguMzU2LTExLjcyOS0xNC45ODctMzIuMDY4LTguNzk5LTM0LjE5Mi04LjA5N2wtLjM1OS4xOTQtMS44LjMzNS0uOTIyLS4xOTFjLTIuNTQyLS41MjgtNS4zNjYtLjgyLTguMzkzLS44NjktNC43NTYtLjA4LTguNTkzIDEuMDQ0LTExLjczOSAzLjQzMWwtMi4xODMgMS42NTUtMi41MzMtMS4wNDNjLTUuNDEyLTIuMjEzLTIxLjMwOC02LjY2Mi0yOS42OTYtLjcyMS00LjY1NiAzLjI5OC02Ljc3NyA5Ljc2LTYuMzA1IDE5LjIwNy4xNTYgMy4xMTkgMi4yNzUgMTQuOTI2IDUuNzcxIDI2LjM3NyA0LjgzMSAxNS44MjUgOS4yMjEgMjEuMDgyIDExLjA1NCAyMS42OTMuMzIuMTA4IDEuMTUtLjUzNyAxLjk3Ni0xLjUyOWEyNzAuNzA4IDI3MC43MDggMCAwMTEwLjY5NC0xMi4wN2wyLjc3LTIuOTE1IDMuMzQ5IDIuMjI1YzEuMzUuODk3IDIuODM5IDEuNDA2IDQuMzY4IDEuNTAybDcuOTg3LTYuODEyLTEuMTU3IDExLjgwOGMtLjAyNi4yNjUtLjAzOS42MjYuMDY1IDEuMjk2bC4zNDggMi4yMzgtMS41MSAxLjY4OC0uMTc0LjE5NiA0LjM4OCAyLjAyNSAxLjgzNi0yLjMwMXoiPjwvcGF0aD48cGF0aCBmaWxsPSIjMzM2NzkxIiBkPSJNMTE1LjczMSA3Ny40NGMtMTMuOTI1IDIuODczLTE0Ljg4Mi0xLjg0Mi0xNC44ODItMS44NDIgMTQuNzAzLTIxLjgxNiAyMC44NDktNDkuNTEgMTUuNTQ1LTU2LjI4N0MxMDEuOTI0LjgyMyA3Ni44NzUgOS41NjYgNzYuNDU3IDkuNzkzbC0uMTM1LjAyNGMtMi43NTEtLjU3MS01LjgzLS45MTEtOS4yOTEtLjk2Ny02LjMwMS0uMTAzLTExLjA4IDEuNjUyLTE0LjcwNyA0LjQwMiAwIDAtNDQuNjg0LTE4LjQwOC00Mi42MDYgMjMuMTUxLjQ0MiA4Ljg0MiAxMi42NzIgNjYuODk5IDI3LjI2IDQ5LjM2MyA1LjMzMi02LjQxMiAxMC40ODMtMTEuODM0IDEwLjQ4My0xMS44MzQgMi41NTkgMS42OTkgNS42MjIgMi41NjcgOC44MzMgMi4yNTVsLjI1LS4yMTJjLS4wNzguNzk2LS4wNDIgMS41NzUuMSAyLjQ5Ny0zLjc1OCA0LjE5OS0yLjY1NCA0LjkzNi0xMC4xNjcgNi40ODItNy42MDIgMS41NjYtMy4xMzYgNC4zNTUtLjIyIDUuMDg0IDMuNTM0Ljg4NCAxMS43MTIgMi4xMzYgMTcuMjM3LTUuNTk4bC0uMjIxLjg4MmMxLjQ3MyAxLjE4IDIuNTA3IDcuNjcyIDIuMzM0IDEzLjU1Ny0uMTc0IDUuODg1LS4yOSA5LjkyNi44NzEgMTMuMDgyIDEuMTYgMy4xNTYgMi4zMTYgMTAuMjU2IDEyLjE5MiA4LjE0IDguMjUyLTEuNzY4IDEyLjUyOC02LjM1MSAxMy4xMjQtMTMuOTk1LjQyMi01LjQzNSAxLjM3Ny00LjYzMSAxLjQzOC05LjQ5bC43NjctMi4zYy44ODQtNy4zNjcuMTQtOS43NDMgNS4yMjUtOC42MzhsMS4yMzUuMTA4YzMuNzQyLjE3IDguNjM5LS42MDIgMTEuNTE0LTEuOTM4IDYuMTktMi44NzEgOS44NjEtNy42NjcgMy43NTgtNi40MDh6Ij48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTc1Ljk1NyAxMjIuMzA3Yy04LjIzMiAwLTEwLjg0LTYuNTE5LTExLjkwNy05LjE4NS0xLjU2Mi0zLjkwNy0xLjg5OS0xOS4wNjktMS41NTEtMzEuNTAzYTEuNTkgMS41OSAwIDAxMS42NC0xLjU1IDEuNTk0IDEuNTk0IDAgMDExLjU1IDEuNjM5Yy0uNDAxIDE0LjM0MS4xNjggMjcuMzM3IDEuMzI0IDMwLjIyOSAxLjgwNCA0LjUwOSA0LjU0IDguNDUzIDEyLjI3NSA2Ljc5NiA3LjM0My0xLjU3NSAxMC4wOTMtNC4zNTkgMTEuMzE4LTExLjQ2Ljk0LTUuNDQ5IDIuNzk5LTIwLjk1MSAzLjAyOC0yNC4wMWExLjU5MyAxLjU5MyAwIDAxMS43MS0xLjQ3MiAxLjU5NyAxLjU5NyAwIDAxMS40NzIgMS43MWMtLjIzOSAzLjE4NS0yLjA4OSAxOC42NTctMy4wNjUgMjQuMzE1LTEuNDQ2IDguMzg3LTUuMTg1IDEyLjE5MS0xMy43OTQgMTQuMDM3LTEuNDYzLjMxMy0yLjc5Mi40NTMtNCAuNDU0ek0zMS4zMjEgOTAuNDY2YTYuNzEgNi43MSAwIDAxLTIuMTE2LS4zNWMtNS4zNDctMS43ODQtMTAuNDQtMTAuNDkyLTE1LjEzOC0yNS44ODUtMy41NzYtMTEuNzE3LTUuODQyLTIzLjk0Ny02LjA0MS0yNy45MjItLjU4OS0xMS43ODQgMi40NDUtMjAuMTIxIDkuMDItMjQuNzc4IDEzLjAwNy05LjIxNiAzNC44ODgtLjQ0IDM1LjgxMy0uMDYyYTEuNTk2IDEuNTk2IDAgMDEtMS4yMDcgMi45NTVjLS4yMTEtLjA4Ni0yMS4xOTMtOC40OTItMzIuNzY4LS4yODUtNS42MjIgMy45ODYtOC4yMDMgMTEuMzkyLTcuNjcyIDIyLjAxMS4xNjcgMy4zNDkgMi4yODQgMTUuMjg1IDUuOTA2IDI3LjE0OSA0LjE5NCAxMy43NDIgOC45NjcgMjIuNDEzIDEzLjA5NiAyMy43OS42NDguMjE2IDIuNjIuODczIDUuNDM5LTIuNTE3QTI0NS4yNzIgMjQ1LjI3MiAwIDAxNDUuODggNzMuMDQ2YTEuNTk2IDEuNTk2IDAgMDEyLjMwNCAyLjIwOGMtLjA0OC4wNS00Ljg0NyA1LjA2Ny0xMC4wNzcgMTEuMzU5LTIuNDc3IDIuOTc5LTQuODUxIDMuODUzLTYuNzg2IDMuODUzem02OS40MjktMTMuNDQ1YTEuNTk2IDEuNTk2IDAgMDEtMS4zMjItMi40ODdjMTQuODYzLTIyLjA1NSAyMC4wOC00OC43MDQgMTUuNjEyLTU0LjQxNC01LjYyNC03LjE4Ni0xMy41NjUtMTAuOTM5LTIzLjYwNC0xMS4xNTYtNy40MzMtLjE2LTEzLjM0MSAxLjczOC0xNC4zMDcgMi4wNjlsLS4yNDMuMDk5Yy0uOTcxLjMwNS0xLjcxNi0uMjI3LTEuOTk3LS44NDlhMS42IDEuNiAwIDAxLjYzMS0yLjAyNWMuMDQ2LS4wMjcuMTkyLS4wODkuNDI5LS4xNzZsLS4wMjEuMDA2LjAyMS0uMDA3YzEuNjQxLS42MDEgNy42MzktMi40IDE1LjA2OC0yLjMxNSAxMS4xMDguMTE4IDIwLjI4NCA0LjQwMSAyNi41MzQgMTIuMzg4IDIuOTU3IDMuNzc5IDIuOTY0IDEyLjQ4NS4wMTkgMjMuODg3LTMuMDAyIDExLjYyNS04LjY1MSAyNC4xMTgtMTUuNDk3IDM0LjI3Ny0uMzA2LjQ1Ny0uODEuNzAzLTEuMzIzLjcwM3ptLjc2IDEwLjIxYy0yLjUzOCAwLTQuODEzLS4zNTgtNi4xNzUtMS4xNzQtMS40LS44MzktMS42NjctMS45NzktMS43MDItMi41ODQtLjM4Mi02LjcxIDMuMzItNy44NzggNS4yMDgtOC40MTEtLjI2My0uMzk4LS42MzctLjg2Ni0xLjAyNC0xLjM0OS0xLjEwMS0xLjM3Ni0yLjYwOS0zLjI2LTMuNzcxLTYuMDc4LS4xODItLjQ0LS43NTItMS40NjMtMS40MTItMi42NDgtMy41NzktNi40MTgtMTEuMDI2LTE5Ljc3My02LjI0Mi0yNi42MTIgMi4yMTQtMy4xNjUgNi42MjMtNC40MTEgMTMuMTE5LTMuNzE2Qzk3LjYgMjguODM3IDg4LjUgMTAuNjI1IDY2LjkwNyAxMC4yNzFjLTYuNDk0LS4xMDgtMTEuODIgMS44ODktMTUuODIyIDUuOTMtOC45NiA5LjA0OS04LjYzNiAyNS40MjItOC42MzEgMjUuNTg2YTEuNTk1IDEuNTk1IDAgMTEtMy4xOS4wODRjLS4wMi0uNzI3LS4zNTQtMTcuOTA5IDkuNTU0LTI3LjkxNkM1My40NTUgOS4yNzIgNTkuNTU5IDYuOTYgNjYuOTYgNy4wODFjMTMuODE0LjIyNyAyMi43MDYgNy4yNSAyNy43MzIgMTMuMTAxIDUuNDc5IDYuMzc3IDguMTY1IDEzLjQxMSA4LjM4NiAxNS43NTkuMTY1IDEuNzQ2LTEuMDg4IDIuMDk1LTEuMzQxIDIuMTQ3bC0uNTc2LjAxM2MtNi4zNzUtMS4wMjEtMTAuNDY1LS4zMTItMTIuMTU2IDIuMTA0LTMuNjM5IDUuMjAxIDMuNDA2IDE3LjgzNCA2LjQxNCAyMy4yMjkuNzY4IDEuMzc2IDEuMzIyIDIuMzcxIDEuNTc2IDIuOTg1Ljk4OCAyLjM5NiAyLjI3NyA0LjAwNiAzLjMxMiA1LjMuOTExIDEuMTM4IDEuNyAyLjEyNSAxLjk4MiAzLjI4My4xMzEuMjMgMS45OSAyLjk4IDEzLjAyMS43MDMgMi43NjUtLjU3IDQuNDIzLS4wODMgNC45MyAxLjQ1Ljk5NyAzLjAxNS00LjU5NyA2LjUzMi03LjY5NCA3Ljk3LTIuNzc1IDEuMjktNy4yMDQgMi4xMDYtMTEuMDM2IDIuMTA2em0tNC42OTYtNC4wMjFjLjM1LjM1MyAyLjEwMS45NjIgNS43MjcuODA2IDMuMjI0LS4xMzggNi42MjQtLjgzOSA4LjY2NC0xLjc4NiAyLjYwOS0xLjIxMiA0LjM1MS0yLjU2NyA1LjI1My0zLjQ5MmwtLjUuMDkyYy03LjA1MyAxLjQ1Ni0xMi4wNDIgMS4yNjItMTQuODI4LS41NzdhNi4xNjIgNi4xNjIgMCAwMS0uNTQtLjQwMWMtLjMwMi4xMTktLjU4MS4xOTctLjc4LjI1My0xLjU4LjQ0My0zLjIxNC45MDItMi45OTYgNS4xMDV6bS00NS41NjIgOC45MTVjLTEuNzUyIDAtMy41OTYtLjIzOS01LjQ3OS0uNzEtMS45NTEtLjQ4OC01LjI0LTEuOTU3LTUuMTktNC4zNy4wNTctMi43MDcgMy45OTQtMy41MTkgNS40NzYtMy44MjQgNS4zNTQtMS4xMDMgNS43MDMtMS41NDUgNy4zNzYtMy42Ny40ODgtLjYxOSAxLjA5NS0xLjM5IDEuOTIzLTIuMzE0IDEuMjI5LTEuMzc2IDIuNTcyLTIuMDczIDMuOTkyLTIuMDczLjk4OSAwIDEuOC4zMzUgMi4zMzYuNTU4IDEuNzA4LjcwOCAzLjEzMyAyLjQyIDMuNzE5IDQuNDY3LjUyOSAxLjg0Ny4yNzYgMy42MjUtLjcxIDUuMDA2LTMuMjM3IDQuNTMzLTcuODg2IDYuOTMtMTMuNDQzIDYuOTN6bS03LjIyMi00Ljk0M2MuNDgxLjM3MiAxLjQ0NS44NjkgMi41MTggMS4xMzcgMS42MzEuNDA4IDMuMjEzLjYxNSA0LjcwNS42MTUgNC41NDYgMCA4LjE5Ni0xLjg4MiAxMC44NDctNS41OTQuNTUzLS43NzQuMzg3LTEuNzU3LjIzOS0yLjI3NC0uMzEtMS4wODMtMS4wOC0yLjA2OC0xLjg3My0yLjM5Ny0uNDMtLjE3OC0uNzg3LS4zMTQtMS4xMTUtLjMxNC0uMTc2IDAtLjcxMiAwLTEuNjE0IDEuMDA5YTQxLjE0NiA0MS4xNDYgMCAwMC0xLjc5NCAyLjE2MmMtMi4wODQgMi42NDYtMy4wMzkgMy41NDQtOS4yMzkgNC44MjEtMS41MTMuMzEtMi4yODkuNjI2LTIuNjc0LjgzNXptMTIuMjY5LTcuMzZhMS41OTYgMS41OTYgMCAwMS0xLjU3NS0xLjM1NCA4LjIxOCA4LjIxOCAwIDAxLS4wOC0uNzk5Yy00LjA2NC0uMDc2LTcuOTg1LTEuODItMTAuOTYyLTQuOTI2LTMuNzY0LTMuOTI3LTUuNDc3LTkuMzY4LTQuNjk5LTE0LjkyNy44NDUtNi4wMzcuNTI5LTExLjM2Ni4zNTktMTQuMjI5LS4wNDctLjc5Ni0uMDgxLTEuMzcxLS4wNzktMS43NjkuMDAzLS41MDUuMDEzLTEuODQ0IDQuNDg5LTQuMTEzIDEuNTkyLS44MDcgNC43ODQtMi4yMTUgOC4yNzEtMi41NzYgNS43NzctLjU5NyA5LjU4NSAxLjk3NiAxMC43MjUgNy4yNDYgMy4wNzcgMTQuMjI4LjI0NCAyMC41MjEtMS44MjUgMjUuMTE3LS4zODUuODU2LS43NDkgMS42NjQtMS4wNCAyLjQ0N2wtLjI1Ny42OWMtMS4wOTMgMi45MzEtMi4wMzggNS40NjMtMS43NDggNy4zNTRhMS41OTUgMS41OTUgMCAwMS0xLjMzNSAxLjgxOWwtLjI0NC4wMnpNNDIuNDY0IDQyLjI2bC4wNjIgMS4xMzljLjE3NiAyLjk3NC41MDQgOC41MDgtLjM4NCAxNC44Ni0uNjQxIDQuNTg1Ljc1OSA5LjA2IDMuODQzIDEyLjI3NiAyLjQzNyAyLjU0MiA1LjY0NCAzLjk0NSA4Ljk0IDMuOTQ1aC4wNjhjLjM2OS0xLjU1NS45ODItMy4xOTcgMS42NDItNC45NjZsLjI1NS0uNjg2Yy4zMjktLjg4NC43MTQtMS43NCAxLjEyMi0yLjY0NiAxLjk5MS00LjQyNCA0LjQ3LTkuOTMxIDEuNjE1LTIzLjEzMi0uNTY1LTIuNjE1LTEuOTM2LTQuMTI4LTQuMTg5LTQuNjI3LTQuNjI4LTEuMDIyLTExLjUyNSAyLjQ1OS0xMi45NzQgMy44Mzd6bTkuNjMtLjY3N2MtLjA4LjU2NCAxLjAzMyAyLjA3IDIuNDg1IDIuMjcxIDEuNDQ5LjIwMyAyLjY4OS0uOTc1IDIuNzY4LTEuNTM5LjA3OS0uNTY0LTEuMDMzLTEuMTg2LTIuNDg1LTEuMzg4LTEuNDUxLS4yMDItMi42OTEuMDkyLTIuNzY4LjY1NnptMi44MTggMi44MjZsLS40MDctLjAyOGMtLjktLjEyNS0xLjgxLS42OTItMi40MzMtMS41MTgtLjIxOS0uMjktLjU3Ni0uODUyLS41MDUtMS4zNTQuMTAxLS43MzYuOTk5LTEuMTc3IDIuNC0xLjE3Ny4zMTMgMCAuNjM5LjAyMy45NjcuMDY5Ljc2Ni4xMDYgMS40NzcuMzI3IDIuMDAyLjYyLjkxLjUwOC45NzcgMS4wNzUuOTM2IDEuMzY4LS4xMTIuODEzLTEuNDA1IDIuMDItMi45NiAyLjAyem0tMi4yODktMi43MzJjLjA0NS4zNDguOTA3IDEuNDk2IDIuMDI5IDEuNjUxbC4yNjEuMDE4YzEuMDM2IDAgMS44MS0uODE1IDEuOTAxLTEuMDgyLS4wOTYtLjE4Mi0uNzYyLS42MzQtMi4wMjUtLjgxYTUuODIzIDUuODIzIDAgMDAtLjgyMS0uMDU5Yy0uODEyIDAtMS4yNDMuMTgzLTEuMzQ1LjI4MnptNDMuNjA1LTEuMjQ1Yy4wNzkuNTY0LTEuMDMzIDIuMDctMi40ODQgMi4yNzItMS40NS4yMDItMi42OTEtLjk3NS0yLjc3MS0xLjUzOS0uMDc2LS41NjQgMS4wMzYtMS4xODcgMi40ODYtMS4zODggMS40NS0uMjAzIDIuNjg5LjA5MiAyLjc2OS42NTV6bS0yLjgxOSAyLjU2Yy0xLjM5NiAwLTIuNjAxLTEuMDg2LTIuNy0xLjc5MS0uMTE1LS44NDYgMS4yNzgtMS40ODkgMi43MTItMS42ODguMzE2LS4wNDQuNjI5LS4wNjYuOTMtLjA2NiAxLjIzOCAwIDIuMDU4LjM2MyAyLjE0Ljk0OS4wNTMuMzc5LS4yMzguOTY0LS43MzkgMS40OTItLjMzMS4zNDctMS4wMjYuOTQ4LTEuOTczIDEuMDc5bC0uMzcuMDI1em0uOTQzLTMuMDEzYy0uMjc2IDAtLjU2NC4wMjEtLjg1Ni4wNjEtMS40NDEuMjAxLTIuMzAxLjc3OS0yLjI1OSAxLjA4OS4wNDguMzQxLjk2OCAxLjMzMiAyLjE3MyAxLjMzMmwuMjk3LS4wMjFjLjc4Ny0uMTA5IDEuMzc4LS42MjMgMS42Ni0uOTE5LjQ0My0uNDY1LjYxOS0uOTAzLjU5OC0xLjA1Mi0uMDI4LS4xOTgtLjU2LS40OS0xLjYxMy0uNDl6bTMuOTY1IDMyLjg0M2ExLjU5NCAxLjU5NCAwIDAxLTEuMzI0LTIuNDgzYzMuMzk4LTUuMDc1IDIuNzc2LTEwLjI1IDIuMTc1LTE1LjI1NS0uMjU3LTIuMTMyLS41MjEtNC4zMzctLjQ1My02LjQ1My4wNy0yLjE3Ny4zNDctMy45NzMuNjE0LTUuNzEuMzE3LTIuMDU4LjYxNy00LjAwMi40OTMtNi4zMWExLjU5NSAxLjU5NSAwIDExMy4xODYtLjE3MmMuMTQyIDIuNjM4LS4xOTcgNC44MzgtLjUyNSA2Ljk2Ny0uMjUzIDEuNjQzLS41MTUgMy4zNDItLjU3OCA1LjMyNy0uMDYxIDEuODc0LjE3OCAzLjg2NC40MzEgNS45Ny42NCA1LjMyMiAxLjM2NSAxMS4zNTQtMi42OTEgMTcuNDExYTEuNTk2IDEuNTk2IDAgMDEtMS4zMjguNzA4eiI+PC9wYXRoPjwvc3ZnPg==",
310
+ url: "https://www.postgresql.org/",
311
+ tagline: "The world's most advanced open source relational database",
312
+ repo: "postgres/postgres",
313
+ links: [{
314
+ label: "Docs",
315
+ href: "https://www.postgresql.org/docs/"
316
+ }, {
317
+ label: "postgres.js (client)",
318
+ href: "https://github.com/porsager/postgres"
319
+ }]
320
+ },
321
+ {
322
+ category: "ORM / Query builder",
323
+ label: "Drizzle",
324
+ flag: "drizzle",
325
+ image: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjI4MHB4IiBoZWlnaHQ9IjI4MHB4IiBzdHlsZT0ic2hhcGUtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgdGV4dC1yZW5kZXJpbmc6Z2VvbWV0cmljUHJlY2lzaW9uOyBpbWFnZS1yZW5kZXJpbmc6b3B0aW1pemVRdWFsaXR5OyBmaWxsLXJ1bGU6ZXZlbm9kZDsgY2xpcC1ydWxlOmV2ZW5vZGQiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzAwMDAwMCIgZD0iTSAtMC41LC0wLjUgQyA5Mi44MzMzLC0wLjUgMTg2LjE2NywtMC41IDI3OS41LC0wLjVDIDI3OS41LDkyLjgzMzMgMjc5LjUsMTg2LjE2NyAyNzkuNSwyNzkuNUMgMTg2LjE2NywyNzkuNSA5Mi44MzMzLDI3OS41IC0wLjUsMjc5LjVDIC0wLjUsMTg2LjE2NyAtMC41LDkyLjgzMzMgLTAuNSwtMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTMzLjUsODQuNSBDIDE0Mi44MTQsODIuNzI2OSAxNDYuNjQ3LDg2LjM5MzUgMTQ1LDk1LjVDIDEzNS45MDYsMTEyLjAyOCAxMjYuNTcyLDEyOC4zNjIgMTE3LDE0NC41QyAxMTEuMjQ5LDE0OS45ODQgMTA2LjI0OSwxNDkuMzE3IDEwMiwxNDIuNUMgMTAxLjMzMywxNDAuODMzIDEwMS4zMzMsMTM5LjE2NyAxMDIsMTM3LjVDIDExMS41NDcsMTE5LjA0MSAxMjIuMDQ3LDEwMS4zNzUgMTMzLjUsODQuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYzBmMTRkIiBkPSJNIDIyMy41LDg0LjUgQyAyMzMuNTM5LDgzLjY5NzIgMjM3LjAzOSw4OC4wMzA1IDIzNCw5Ny41QyAyMjUuMzQ3LDExMi44MDEgMjE2LjY4MSwxMjguMTM1IDIwOCwxNDMuNUMgMjAzLjM4NywxNDkuNzM3IDE5OC4zODcsMTUwLjA3MSAxOTMsMTQ0LjVDIDE5MS41NzgsMTQxLjk3IDE5MS4yNDUsMTM5LjMwMyAxOTIsMTM2LjVDIDIwMC41MiwxMjIuNzk0IDIwOC41MiwxMDguNzk0IDIxNiw5NC41QyAyMTguMjg5LDkwLjg4MTIgMjIwLjc4OSw4Ny41NDc5IDIyMy41LDg0LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2MwZjE0ZCIgZD0iTSA3NS41LDEyMC41IEMgODMuOTg4NSwxMTkuNjE4IDg3LjgyMTgsMTIzLjI4NSA4NywxMzEuNUMgNzcuOTA1NywxNDguMDI4IDY4LjU3MjQsMTY0LjM2MiA1OSwxODAuNUMgNTYuMDQ1MywxODQuMjc3IDUyLjIxMiwxODUuNDQzIDQ3LjUsMTg0QyA0My44Njk3LDE4MC45NSA0Mi43MDMsMTc3LjExNyA0NCwxNzIuNUMgNTMsMTU2LjUgNjIsMTQwLjUgNzEsMTI0LjVDIDcyLjM5NjgsMTIyLjkzIDczLjg5NjgsMTIxLjU5NiA3NS41LDEyMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiNjMWYyNGQiIGQ9Ik0gMTY1LjUsMTIwLjUgQyAxNzQuMTY0LDExOS4zMzIgMTc3Ljk5NywxMjIuOTk5IDE3NywxMzEuNUMgMTY3LjQxNCwxNDcuNjcxIDE1OC4wOCwxNjQuMDA0IDE0OSwxODAuNUMgMTQ2LjM5OCwxODQuMjEyIDE0Mi44OTgsMTg1LjM3OCAxMzguNSwxODRDIDEzMy45MzEsMTgxLjQ1OSAxMzIuNDMxLDE3Ny42MjUgMTM0LDE3Mi41QyAxNDMuNTcyLDE1Ni4zNjIgMTUyLjkwNiwxNDAuMDI4IDE2MiwxMjMuNUMgMTYzLjE0NSwxMjIuMzY0IDE2NC4zMTIsMTIxLjM2NCAxNjUuNSwxMjAuNSBaIi8+PC9nPgo8L3N2Zz4K",
326
+ url: "https://orm.drizzle.team/",
327
+ tagline: "Headless TypeScript ORM that feels like SPA with SSR",
328
+ repo: "drizzle-team/drizzle-orm",
329
+ links: [{
330
+ label: "Docs & Getting started",
331
+ href: "https://orm.drizzle.team/docs/overview"
332
+ }]
333
+ },
334
+ {
335
+ category: "ORM / Query builder",
320
336
  label: "Kysely",
321
337
  flag: "kysely",
322
338
  image: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMTMyJyBoZWlnaHQ9JzEzMicgdmlld0JveD0nMCAwIDEzMiAxMzInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PGcgY2xpcC1wYXRoPSd1cmwoI2NsaXAwXzhfMyknPjxyZWN0IHg9JzInIHk9JzInIHdpZHRoPScxMjgnIGhlaWdodD0nMTI4JyByeD0nMTYnIGZpbGw9J3doaXRlJy8+PHBhdGggZD0nTTQxLjI5ODMgMTA5VjIzLjkwOTFINDYuNDkxOFY3My4zMUg0Ny4wNzM1TDkxLjk0NTcgMjMuOTA5MUg5OC44NDI3TDYxLjkwNjIgNjQuMTY5NEw5OC41MTAzIDEwOUg5Mi4wMjg4TDU4LjU4MjQgNjcuOTA4N0w0Ni40OTE4IDgxLjI4NzNWMTA5SDQxLjI5ODNaJyBmaWxsPSdibGFjaycvPjwvZz48cmVjdCB4PScyJyB5PScyJyB3aWR0aD0nMTI4JyBoZWlnaHQ9JzEyOCcgcng9JzE2JyBzdHJva2U9JyMxMjEyMTInIHN0cm9rZS13aWR0aD0nNCcvPjxkZWZzPjxjbGlwUGF0aCBpZD0nY2xpcDBfOF8zJz48cmVjdCB4PScyJyB5PScyJyB3aWR0aD0nMTI4JyBoZWlnaHQ9JzEyOCcgcng9JzE2JyBmaWxsPSd3aGl0ZScvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPgo=",
@@ -329,7 +345,7 @@ const features = [
329
345
  }]
330
346
  },
331
347
  {
332
- category: "Database",
348
+ category: "ORM / Query builder",
333
349
  label: "Prisma",
334
350
  flag: "prisma",
335
351
  image: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIwLjgzZW0iIGhlaWdodD0iMWVtIiB2aWV3Qm94PSIwIDAgMjU2IDMxMCI+PHBhdGggZD0iTTI1NC4zMTMgMjM1LjUxOUwxNDggOS43NDlBMTcuMDYzIDE3LjA2MyAwIDAgMCAxMzMuNDczLjAzN2ExNi44NyAxNi44NyAwIDAgMC0xNS41MzMgOC4wNTJMMi42MzMgMTk0Ljg0OGExNy40NjUgMTcuNDY1IDAgMCAwIC4xOTMgMTguNzQ3TDU5LjIgMzAwLjg5NmExOC4xMyAxOC4xMyAwIDAgMCAyMC4zNjMgNy40ODlsMTYzLjU5OS00OC4zOTJhMTcuOTI5IDE3LjkyOSAwIDAgMCAxMS4yNi05LjcyMmExNy41NDIgMTcuNTQyIDAgMCAwLS4xMDEtMTQuNzZsLS4wMDguMDA4Wm0tMjMuODAyIDkuNjgzbC0xMzguODIzIDQxLjA1Yy00LjIzNSAxLjI2LTguMy0yLjQxMS03LjQxOS02LjY4NWw0OS41OTgtMjM3LjQ4NGMuOTI3LTQuNDQzIDcuMDYzLTUuMTQ3IDkuMDAzLTEuMDM1bDkxLjgxNCAxOTQuOTczYTYuNjMgNi42MyAwIDAgMS00LjE4IDkuMThoLjAwN1oiLz48L3N2Zz4=",
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as CategoryLabels, i as flags, n as cliFlags, o as categories, r as features, s as categoriesGroups, t as Flags } from "./features-BMalRLbR.js";
1
+ import { a as CategoryLabels, i as flags, n as cliFlags, o as categories, r as features, s as categoriesGroups, t as Flags } from "./features-0vnv7iCL.js";
2
2
 
3
3
  //#region src/types.d.ts
4
4
  interface Feature<C = string> {
@@ -41,7 +41,13 @@ declare class BatiSet extends Set<Flags> {
41
41
  constructor(flags: Flags[], allFeatures: ReadonlyArray<Feature>, pm: string);
42
42
  private hasOneOf;
43
43
  get hasServer(): boolean;
44
+ /** A database engine is selected (SQLite or PostgreSQL). */
44
45
  get hasDatabase(): boolean;
46
+ /** An ORM or query builder is selected (Drizzle, Kysely or Prisma). */
47
+ get hasOrm(): boolean;
48
+ /** A database engine whose client and todo demo Bati scaffolds. Prisma is self-managed
49
+ * (it brings its own client and `DATABASE_URL`), so it opts out of the shared demo. */
50
+ get hasDbDemo(): boolean;
45
51
  get hasD1(): boolean;
46
52
  get hasDotEnvSecrets(): boolean;
47
53
  get hasUD(): boolean;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as features, r as flags, t as cliFlags } from "./features-DhgD3gpO.js";
1
+ import { n as features, r as flags, t as cliFlags } from "./features-uGphBBds.js";
2
2
  //#region src/groups.ts
3
3
  let categoriesGroups = /* @__PURE__ */ function(categoriesGroups) {
4
4
  categoriesGroups["Frontend"] = "Frontend";
@@ -57,12 +57,19 @@ it's recommended to only install a Server if you really need to, as Vike doesn't
57
57
  {
58
58
  label: "Database",
59
59
  group: "Data",
60
- description: `Helping you get started with a database solution.`
60
+ description: `The database your app talks to. SQLite runs embedded (and powers Cloudflare D1);
61
+ PostgreSQL targets a Postgres server. Selected on its own you get a thin client; pair it with an ORM or query builder below.`
62
+ },
63
+ {
64
+ label: "ORM / Query builder",
65
+ group: "Data",
66
+ description: `Type-safe data access on top of your database. Requires choosing a Database above.`
61
67
  },
62
68
  {
63
69
  label: "Hosting",
64
70
  group: "Deployment",
65
- description: `Quickly host your Vike project with a Serverless or VPS (coming soon) solution.`
71
+ description: `Quickly host your Vike project with a Serverless or VPS (coming soon) solution.`,
72
+ required: true
66
73
  },
67
74
  {
68
75
  label: "Linter",
@@ -95,12 +102,14 @@ tailored for Vike.`
95
102
  var BatiSet = class extends Set {
96
103
  #servers;
97
104
  #databases;
105
+ #orm;
98
106
  pm;
99
107
  constructor(flags, allFeatures, pm) {
100
108
  super(flags);
101
109
  this.pm = pm;
102
110
  this.#servers = new Set(allFeatures.filter((f) => f.category === "Server").map((f) => f.flag));
103
111
  this.#databases = new Set(allFeatures.filter((f) => f.category === "Database").map((f) => f.flag));
112
+ this.#orm = new Set(allFeatures.filter((f) => f.category === "ORM / Query builder").map((f) => f.flag));
104
113
  }
105
114
  hasOneOf(a) {
106
115
  for (const x of this) if (a.has(x)) return true;
@@ -109,11 +118,21 @@ var BatiSet = class extends Set {
109
118
  get hasServer() {
110
119
  return this.hasOneOf(this.#servers);
111
120
  }
121
+ /** A database engine is selected (SQLite or PostgreSQL). */
112
122
  get hasDatabase() {
113
- return this.has("sqlite") || this.has("drizzle") || this.has("kysely");
123
+ return this.hasOneOf(this.#databases);
124
+ }
125
+ /** An ORM or query builder is selected (Drizzle, Kysely or Prisma). */
126
+ get hasOrm() {
127
+ return this.hasOneOf(this.#orm);
128
+ }
129
+ /** A database engine whose client and todo demo Bati scaffolds. Prisma is self-managed
130
+ * (it brings its own client and `DATABASE_URL`), so it opts out of the shared demo. */
131
+ get hasDbDemo() {
132
+ return this.hasDatabase && !this.has("prisma");
114
133
  }
115
134
  get hasD1() {
116
- return this.has("cloudflare") && (this.has("sqlite") || this.has("drizzle") || this.has("kysely"));
135
+ return this.has("cloudflare") && this.has("sqlite");
117
136
  }
118
137
  get hasDotEnvSecrets() {
119
138
  return !this.has("cloudflare");
package/dist/rules.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { a as CategoryLabels, t as Flags } from "./features-BMalRLbR.js";
1
+ import { a as CategoryLabels, t as Flags } from "./features-0vnv7iCL.js";
2
2
 
3
3
  //#region src/rules/enum.d.ts
4
4
  declare enum RulesMessage {
@@ -7,14 +7,17 @@ declare enum RulesMessage {
7
7
  ERROR_DRIZZLE_R_SERVER = 2,
8
8
  ERROR_KYSELY_R_SERVER = 3,
9
9
  ERROR_SQLITE_R_SERVER = 4,
10
- ERROR_DATA_R_SERVER = 5,
11
- ERROR_CLOUDFLARE_R_COMPAT_SERVER = 6,
12
- ERROR_AWS_R_COMPAT_SERVER = 7,
13
- ERROR_MANTINE_R_REACT = 8,
14
- ERROR_SHADCN_R_REACT = 9,
15
- WARN_SHADCN_R_TAILWINDCSS = 10,
16
- INFO_STACKBLITZ_COMPAT = 11,
17
- ERROR_STORYBOOK_R_UI_FRAMEWORK = 12
10
+ ERROR_POSTGRES_R_SERVER = 5,
11
+ ERROR_POSTGRES_X_SQLITE = 6,
12
+ ERROR_ORM_R_DATABASE = 7,
13
+ ERROR_DATA_R_SERVER = 8,
14
+ ERROR_CLOUDFLARE_R_COMPAT_SERVER = 9,
15
+ ERROR_AWS_R_COMPAT_SERVER = 10,
16
+ ERROR_MANTINE_R_REACT = 11,
17
+ ERROR_SHADCN_R_REACT = 12,
18
+ WARN_SHADCN_R_TAILWINDCSS = 13,
19
+ INFO_STACKBLITZ_COMPAT = 14,
20
+ ERROR_STORYBOOK_R_UI_FRAMEWORK = 15
18
21
  }
19
22
  //#endregion
20
23
  //#region src/rules/utils.d.ts
package/dist/rules.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as features, r as flags } from "./features-DhgD3gpO.js";
1
+ import { n as features, r as flags } from "./features-uGphBBds.js";
2
2
  //#region src/rules/enum.ts
3
3
  let RulesMessage = /* @__PURE__ */ function(RulesMessage) {
4
4
  RulesMessage[RulesMessage["ERROR_AUTH_R_SERVER"] = 0] = "ERROR_AUTH_R_SERVER";
@@ -6,19 +6,28 @@ let RulesMessage = /* @__PURE__ */ function(RulesMessage) {
6
6
  RulesMessage[RulesMessage["ERROR_DRIZZLE_R_SERVER"] = 2] = "ERROR_DRIZZLE_R_SERVER";
7
7
  RulesMessage[RulesMessage["ERROR_KYSELY_R_SERVER"] = 3] = "ERROR_KYSELY_R_SERVER";
8
8
  RulesMessage[RulesMessage["ERROR_SQLITE_R_SERVER"] = 4] = "ERROR_SQLITE_R_SERVER";
9
- RulesMessage[RulesMessage["ERROR_DATA_R_SERVER"] = 5] = "ERROR_DATA_R_SERVER";
10
- RulesMessage[RulesMessage["ERROR_CLOUDFLARE_R_COMPAT_SERVER"] = 6] = "ERROR_CLOUDFLARE_R_COMPAT_SERVER";
11
- RulesMessage[RulesMessage["ERROR_AWS_R_COMPAT_SERVER"] = 7] = "ERROR_AWS_R_COMPAT_SERVER";
12
- RulesMessage[RulesMessage["ERROR_MANTINE_R_REACT"] = 8] = "ERROR_MANTINE_R_REACT";
13
- RulesMessage[RulesMessage["ERROR_SHADCN_R_REACT"] = 9] = "ERROR_SHADCN_R_REACT";
14
- RulesMessage[RulesMessage["WARN_SHADCN_R_TAILWINDCSS"] = 10] = "WARN_SHADCN_R_TAILWINDCSS";
15
- RulesMessage[RulesMessage["INFO_STACKBLITZ_COMPAT"] = 11] = "INFO_STACKBLITZ_COMPAT";
16
- RulesMessage[RulesMessage["ERROR_STORYBOOK_R_UI_FRAMEWORK"] = 12] = "ERROR_STORYBOOK_R_UI_FRAMEWORK";
9
+ RulesMessage[RulesMessage["ERROR_POSTGRES_R_SERVER"] = 5] = "ERROR_POSTGRES_R_SERVER";
10
+ RulesMessage[RulesMessage["ERROR_POSTGRES_X_SQLITE"] = 6] = "ERROR_POSTGRES_X_SQLITE";
11
+ RulesMessage[RulesMessage["ERROR_ORM_R_DATABASE"] = 7] = "ERROR_ORM_R_DATABASE";
12
+ RulesMessage[RulesMessage["ERROR_DATA_R_SERVER"] = 8] = "ERROR_DATA_R_SERVER";
13
+ RulesMessage[RulesMessage["ERROR_CLOUDFLARE_R_COMPAT_SERVER"] = 9] = "ERROR_CLOUDFLARE_R_COMPAT_SERVER";
14
+ RulesMessage[RulesMessage["ERROR_AWS_R_COMPAT_SERVER"] = 10] = "ERROR_AWS_R_COMPAT_SERVER";
15
+ RulesMessage[RulesMessage["ERROR_MANTINE_R_REACT"] = 11] = "ERROR_MANTINE_R_REACT";
16
+ RulesMessage[RulesMessage["ERROR_SHADCN_R_REACT"] = 12] = "ERROR_SHADCN_R_REACT";
17
+ RulesMessage[RulesMessage["WARN_SHADCN_R_TAILWINDCSS"] = 13] = "WARN_SHADCN_R_TAILWINDCSS";
18
+ RulesMessage[RulesMessage["INFO_STACKBLITZ_COMPAT"] = 14] = "INFO_STACKBLITZ_COMPAT";
19
+ RulesMessage[RulesMessage["ERROR_STORYBOOK_R_UI_FRAMEWORK"] = 15] = "ERROR_STORYBOOK_R_UI_FRAMEWORK";
17
20
  return RulesMessage;
18
21
  }({});
19
22
  //#endregion
20
23
  //#region src/rules/utils.ts
21
24
  /**
25
+ * Returns a message if all given rules are not exclusive
26
+ */
27
+ function exclusive(message, rules) {
28
+ return (fts) => rules.every((r) => fts.has(r)) && message;
29
+ }
30
+ /**
22
31
  * Returns a message if ifPresent is present but any mustAlsoInclude is not
23
32
  */
24
33
  function requires(message, ifPresent, mustAlsoInclude) {
@@ -51,37 +60,42 @@ var rules_default = [
51
60
  requires(2, "drizzle", ["Server"]),
52
61
  requires(4, "sqlite", ["Server"]),
53
62
  requires(3, "kysely", ["Server"]),
54
- requires(5, "Data fetching", ["Server"]),
55
- filter(6, (fts) => {
63
+ requires(5, "postgres", ["Server"]),
64
+ exclusive(6, ["postgres", "sqlite"]),
65
+ requires(7, "drizzle", ["Database"]),
66
+ requires(7, "kysely", ["Database"]),
67
+ requires(7, "prisma", ["Database"]),
68
+ requires(8, "Data fetching", ["Server"]),
69
+ filter(9, (fts) => {
56
70
  if (fts.has("cloudflare")) {
57
71
  if (fts.has("hono") || fts.has("h3")) return false;
58
72
  return fts.has("Server");
59
73
  }
60
74
  return false;
61
75
  }),
62
- filter(7, (fts) => {
76
+ filter(10, (fts) => {
63
77
  if (fts.has("aws")) {
64
78
  if (fts.has("hono")) return false;
65
79
  return true;
66
80
  }
67
81
  return false;
68
82
  }),
69
- filter(8, (fts) => {
83
+ filter(11, (fts) => {
70
84
  if (fts.has("mantine")) return fts.has("vue") || fts.has("solid");
71
85
  return false;
72
86
  }),
73
- filter(9, (fts) => {
87
+ filter(12, (fts) => {
74
88
  if (fts.has("shadcn-ui")) return fts.has("vue") || fts.has("solid");
75
89
  return false;
76
90
  }),
77
- filter(10, (fts) => {
91
+ filter(13, (fts) => {
78
92
  if (fts.has("shadcn-ui")) return fts.has("daisyui") || fts.has("compiled-css");
79
93
  return false;
80
94
  }),
81
- filter(11, (fts) => {
82
- return fts.has("drizzle") || fts.has("sqlite") || fts.has("kysely") || fts.has("cloudflare");
95
+ filter(14, (fts) => {
96
+ return fts.has("drizzle") || fts.has("sqlite") || fts.has("kysely") || fts.has("postgres") || fts.has("cloudflare");
83
97
  }),
84
- filter(12, (fts) => {
98
+ filter(15, (fts) => {
85
99
  if (fts.has("storybook")) return !fts.has("react") && !fts.has("vue") && !fts.has("solid");
86
100
  return false;
87
101
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@batijs/features",
3
- "version": "0.0.633",
3
+ "version": "0.0.634",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {