create-taserjs 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +22 -0
  3. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  4. package/dist/cjs/addons/drizzle/index.cjs +124 -0
  5. package/dist/cjs/addons/drizzle/index.cjs.map +1 -0
  6. package/dist/cjs/addons/drizzle/index.d.cts +2 -0
  7. package/dist/cjs/addons/kysely/index.cjs +96 -0
  8. package/dist/cjs/addons/kysely/index.cjs.map +1 -0
  9. package/dist/cjs/addons/kysely/index.d.cts +2 -0
  10. package/dist/cjs/addons/pino/index.cjs +30 -0
  11. package/dist/cjs/addons/pino/index.cjs.map +1 -0
  12. package/dist/cjs/addons/pino/index.d.cts +2 -0
  13. package/dist/cjs/addons/prisma/index.cjs +66 -0
  14. package/dist/cjs/addons/prisma/index.cjs.map +1 -0
  15. package/dist/cjs/addons/prisma/index.d.cts +2 -0
  16. package/dist/cjs/addons/registry.cjs +52 -0
  17. package/dist/cjs/addons/registry.cjs.map +1 -0
  18. package/dist/cjs/addons/registry.d.cts +5 -0
  19. package/dist/cjs/addons/types.d.cts +16 -0
  20. package/dist/cjs/addons/winston/index.cjs +34 -0
  21. package/dist/cjs/addons/winston/index.cjs.map +1 -0
  22. package/dist/cjs/addons/winston/index.d.cts +2 -0
  23. package/dist/cjs/cli.cjs +56 -0
  24. package/dist/cjs/cli.cjs.map +1 -0
  25. package/dist/cjs/cli.d.cts +2 -0
  26. package/dist/cjs/commands/create.cjs +243 -0
  27. package/dist/cjs/commands/create.cjs.map +1 -0
  28. package/dist/cjs/commands/create.d.cts +11 -0
  29. package/dist/cjs/core/json-output.cjs +16 -0
  30. package/dist/cjs/core/json-output.cjs.map +1 -0
  31. package/dist/cjs/core/json-output.d.cts +4 -0
  32. package/dist/cjs/core/package-manager.cjs +64 -0
  33. package/dist/cjs/core/package-manager.cjs.map +1 -0
  34. package/dist/cjs/core/package-manager.d.cts +7 -0
  35. package/dist/cjs/core/parse-options.cjs +59 -0
  36. package/dist/cjs/core/parse-options.cjs.map +1 -0
  37. package/dist/cjs/core/parse-options.d.cts +18 -0
  38. package/dist/cjs/core/project-config.cjs +18 -0
  39. package/dist/cjs/core/project-config.cjs.map +1 -0
  40. package/dist/cjs/core/project-config.d.cts +2 -0
  41. package/dist/cjs/core/resolve-packages.cjs +52 -0
  42. package/dist/cjs/core/resolve-packages.cjs.map +1 -0
  43. package/dist/cjs/core/resolve-packages.d.cts +5 -0
  44. package/dist/cjs/core/scaffold-engine.cjs +73 -0
  45. package/dist/cjs/core/scaffold-engine.cjs.map +1 -0
  46. package/dist/cjs/core/scaffold-engine.d.cts +2 -0
  47. package/dist/cjs/core/types.cjs +27 -0
  48. package/dist/cjs/core/types.cjs.map +1 -0
  49. package/dist/cjs/core/types.d.cts +37 -0
  50. package/dist/cjs/core/validate-project-name.cjs +45 -0
  51. package/dist/cjs/core/validate-project-name.cjs.map +1 -0
  52. package/dist/cjs/core/validate-project-name.d.cts +1 -0
  53. package/dist/cjs/frameworks/index.cjs +106 -0
  54. package/dist/cjs/frameworks/index.cjs.map +1 -0
  55. package/dist/cjs/frameworks/index.d.cts +3 -0
  56. package/dist/cjs/scaffold.d.cts +3 -0
  57. package/dist/cjs/templates/base.cjs +186 -0
  58. package/dist/cjs/templates/base.cjs.map +1 -0
  59. package/dist/cjs/templates/base.d.cts +12 -0
  60. package/dist/cjs/types.d.cts +1 -0
  61. package/dist/esm/addons/drizzle/index.d.ts +2 -0
  62. package/dist/esm/addons/drizzle/index.js +124 -0
  63. package/dist/esm/addons/drizzle/index.js.map +1 -0
  64. package/dist/esm/addons/kysely/index.d.ts +2 -0
  65. package/dist/esm/addons/kysely/index.js +96 -0
  66. package/dist/esm/addons/kysely/index.js.map +1 -0
  67. package/dist/esm/addons/pino/index.d.ts +2 -0
  68. package/dist/esm/addons/pino/index.js +30 -0
  69. package/dist/esm/addons/pino/index.js.map +1 -0
  70. package/dist/esm/addons/prisma/index.d.ts +2 -0
  71. package/dist/esm/addons/prisma/index.js +66 -0
  72. package/dist/esm/addons/prisma/index.js.map +1 -0
  73. package/dist/esm/addons/registry.d.ts +5 -0
  74. package/dist/esm/addons/registry.js +50 -0
  75. package/dist/esm/addons/registry.js.map +1 -0
  76. package/dist/esm/addons/types.d.ts +16 -0
  77. package/dist/esm/addons/winston/index.d.ts +2 -0
  78. package/dist/esm/addons/winston/index.js +34 -0
  79. package/dist/esm/addons/winston/index.js.map +1 -0
  80. package/dist/esm/cli.d.ts +2 -0
  81. package/dist/esm/cli.js +53 -0
  82. package/dist/esm/cli.js.map +1 -0
  83. package/dist/esm/commands/create.d.ts +11 -0
  84. package/dist/esm/commands/create.js +238 -0
  85. package/dist/esm/commands/create.js.map +1 -0
  86. package/dist/esm/core/json-output.d.ts +4 -0
  87. package/dist/esm/core/json-output.js +14 -0
  88. package/dist/esm/core/json-output.js.map +1 -0
  89. package/dist/esm/core/package-manager.d.ts +7 -0
  90. package/dist/esm/core/package-manager.js +62 -0
  91. package/dist/esm/core/package-manager.js.map +1 -0
  92. package/dist/esm/core/parse-options.d.ts +18 -0
  93. package/dist/esm/core/parse-options.js +56 -0
  94. package/dist/esm/core/parse-options.js.map +1 -0
  95. package/dist/esm/core/project-config.d.ts +2 -0
  96. package/dist/esm/core/project-config.js +16 -0
  97. package/dist/esm/core/project-config.js.map +1 -0
  98. package/dist/esm/core/resolve-packages.d.ts +5 -0
  99. package/dist/esm/core/resolve-packages.js +52 -0
  100. package/dist/esm/core/resolve-packages.js.map +1 -0
  101. package/dist/esm/core/scaffold-engine.d.ts +2 -0
  102. package/dist/esm/core/scaffold-engine.js +71 -0
  103. package/dist/esm/core/scaffold-engine.js.map +1 -0
  104. package/dist/esm/core/types.d.ts +37 -0
  105. package/dist/esm/core/types.js +23 -0
  106. package/dist/esm/core/types.js.map +1 -0
  107. package/dist/esm/core/validate-project-name.d.ts +1 -0
  108. package/dist/esm/core/validate-project-name.js +43 -0
  109. package/dist/esm/core/validate-project-name.js.map +1 -0
  110. package/dist/esm/frameworks/index.d.ts +3 -0
  111. package/dist/esm/frameworks/index.js +105 -0
  112. package/dist/esm/frameworks/index.js.map +1 -0
  113. package/dist/esm/scaffold.d.ts +3 -0
  114. package/dist/esm/templates/base.d.ts +12 -0
  115. package/dist/esm/templates/base.js +178 -0
  116. package/dist/esm/templates/base.js.map +1 -0
  117. package/dist/esm/types.d.ts +1 -0
  118. package/package.json +45 -0
  119. package/src/addons/drizzle/index.ts +145 -0
  120. package/src/addons/kysely/index.ts +111 -0
  121. package/src/addons/pino/index.ts +30 -0
  122. package/src/addons/prisma/index.ts +81 -0
  123. package/src/addons/registry.ts +73 -0
  124. package/src/addons/types.ts +19 -0
  125. package/src/addons/winston/index.ts +34 -0
  126. package/src/cli.ts +57 -0
  127. package/src/commands/create.ts +253 -0
  128. package/src/core/json-output.ts +13 -0
  129. package/src/core/package-manager.ts +68 -0
  130. package/src/core/parse-options.ts +97 -0
  131. package/src/core/project-config.ts +27 -0
  132. package/src/core/resolve-packages.ts +62 -0
  133. package/src/core/scaffold-engine.ts +82 -0
  134. package/src/core/types.ts +51 -0
  135. package/src/core/validate-project-name.ts +59 -0
  136. package/src/frameworks/index.ts +111 -0
  137. package/src/scaffold.ts +3 -0
  138. package/src/templates/base.ts +209 -0
  139. package/src/types.ts +9 -0
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2026, Taserjs contributors
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # create-taserjs
2
+
3
+ Scaffold a new Taser application
4
+
5
+ ## Usage
6
+
7
+ **npm:**
8
+ ```bash
9
+ npm create taserjs@latest
10
+ pnpm create taserjs@latest
11
+ ```
12
+
13
+ **JSR:**
14
+ ```bash
15
+ npx jsr @taserjs/create
16
+ ```
17
+
18
+ This will scaffold a new Taser application with your choice of framework adapter and optional add-ons.
19
+
20
+ ## License
21
+
22
+ ISC
@@ -0,0 +1,23 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ exports.__toESM = __toESM;
@@ -0,0 +1,124 @@
1
+ //#region src/addons/drizzle/index.ts
2
+ function schemaSource(driver) {
3
+ switch (driver) {
4
+ case "postgres": return `import { pgTable, serial, text } from 'drizzle-orm/pg-core'
5
+
6
+ export const users = pgTable('users', {
7
+ id: serial('id').primaryKey(),
8
+ email: text('email').notNull(),
9
+ })
10
+ `;
11
+ case "mysql": return `import { mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core'
12
+
13
+ export const users = mysqlTable('users', {
14
+ id: serial('id').primaryKey(),
15
+ email: varchar('email', { length: 255 }).notNull(),
16
+ })
17
+ `;
18
+ default: return `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'
19
+
20
+ export const users = sqliteTable('users', {
21
+ id: integer('id').primaryKey({ autoIncrement: true }),
22
+ email: text('email').notNull(),
23
+ })
24
+ `;
25
+ }
26
+ }
27
+ function dbIndexSource(driver) {
28
+ switch (driver) {
29
+ case "postgres": return `import { drizzle } from 'drizzle-orm/node-postgres'
30
+ import pg from 'pg'
31
+
32
+ import * as schema from './schema.js'
33
+
34
+ export function createDb() {
35
+ const pool = new pg.Pool({
36
+ connectionString: process.env.DATABASE_URL,
37
+ })
38
+ return drizzle(pool, { schema })
39
+ }
40
+ `;
41
+ case "mysql": return `import { drizzle } from 'drizzle-orm/mysql2'
42
+ import mysql from 'mysql2/promise'
43
+
44
+ import * as schema from './schema.js'
45
+
46
+ export function createDb() {
47
+ const pool = mysql.createPool(process.env.DATABASE_URL ?? '')
48
+ return drizzle(pool, { schema, mode: 'default' })
49
+ }
50
+ `;
51
+ default: return `import Database from 'better-sqlite3'
52
+ import { drizzle } from 'drizzle-orm/better-sqlite3'
53
+
54
+ import * as schema from './schema.js'
55
+
56
+ export function createDb() {
57
+ const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')
58
+ const client = new Database(filePath)
59
+ return drizzle(client, { schema })
60
+ }
61
+ `;
62
+ }
63
+ }
64
+ function drizzleConfigSource(driver) {
65
+ return `import { defineConfig } from 'drizzle-kit'
66
+
67
+ export default defineConfig({
68
+ schema: './src/db/schema.ts',
69
+ out: './drizzle',
70
+ dialect: '${driver === "postgres" ? "postgresql" : driver === "mysql" ? "mysql" : "sqlite"}',
71
+ dbCredentials: {
72
+ url: process.env.DATABASE_URL ?? '',
73
+ },
74
+ })
75
+ `;
76
+ }
77
+ function envExample(driver) {
78
+ switch (driver) {
79
+ case "postgres": return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
80
+ case "mysql": return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
81
+ default: return "DATABASE_URL=file:./local.db\n";
82
+ }
83
+ }
84
+ function driverPackages(driver) {
85
+ switch (driver) {
86
+ case "postgres": return ["pg"];
87
+ case "mysql": return ["mysql2"];
88
+ default: return ["better-sqlite3"];
89
+ }
90
+ }
91
+ var drizzleAddon = {
92
+ id: "drizzle",
93
+ category: "database",
94
+ dependencies(ctx) {
95
+ return ["drizzle-orm", ...driverPackages(ctx.driver ?? "sqlite")];
96
+ },
97
+ devDependencies() {
98
+ return ["drizzle-kit"];
99
+ },
100
+ scripts() {
101
+ return {
102
+ "db:generate": "drizzle-kit generate",
103
+ "db:push": "drizzle-kit push"
104
+ };
105
+ },
106
+ bootBinding() {
107
+ return {
108
+ key: "db",
109
+ importPath: "./db/index.js",
110
+ factoryName: "createDb"
111
+ };
112
+ },
113
+ async apply(ctx, write) {
114
+ const driver = ctx.driver ?? "sqlite";
115
+ await write("src/db/schema.ts", schemaSource(driver));
116
+ await write("src/db/index.ts", dbIndexSource(driver));
117
+ await write("drizzle.config.ts", drizzleConfigSource(driver));
118
+ await write(".env.example", envExample(driver));
119
+ }
120
+ };
121
+ //#endregion
122
+ exports.drizzleAddon = drizzleAddon;
123
+
124
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/drizzle/index.ts"],"sourcesContent":["import type { AddonDefinition } from '../types.js'\nimport type { DbDriver } from '../../core/types.js'\n\nfunction schemaSource(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return `import { pgTable, serial, text } from 'drizzle-orm/pg-core'\n\nexport const users = pgTable('users', {\n id: serial('id').primaryKey(),\n email: text('email').notNull(),\n})\n`\n case 'mysql':\n return `import { mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core'\n\nexport const users = mysqlTable('users', {\n id: serial('id').primaryKey(),\n email: varchar('email', { length: 255 }).notNull(),\n})\n`\n case 'sqlite':\n default:\n return `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'\n\nexport const users = sqliteTable('users', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n email: text('email').notNull(),\n})\n`\n }\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return `import { drizzle } from 'drizzle-orm/node-postgres'\nimport pg from 'pg'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n })\n return drizzle(pool, { schema })\n}\n`\n case 'mysql':\n return `import { drizzle } from 'drizzle-orm/mysql2'\nimport mysql from 'mysql2/promise'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const pool = mysql.createPool(process.env.DATABASE_URL ?? '')\n return drizzle(pool, { schema, mode: 'default' })\n}\n`\n case 'sqlite':\n default:\n return `import Database from 'better-sqlite3'\nimport { drizzle } from 'drizzle-orm/better-sqlite3'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')\n const client = new Database(filePath)\n return drizzle(client, { schema })\n}\n`\n }\n}\n\nfunction drizzleConfigSource(driver: DbDriver): string {\n const dialect = driver === 'postgres' ? 'postgresql' : driver === 'mysql' ? 'mysql' : 'sqlite'\n return `import { defineConfig } from 'drizzle-kit'\n\nexport default defineConfig({\n schema: './src/db/schema.ts',\n out: './drizzle',\n dialect: '${dialect}',\n dbCredentials: {\n url: process.env.DATABASE_URL ?? '',\n },\n})\n`\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return 'DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n'\n case 'mysql':\n return 'DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n'\n case 'sqlite':\n default:\n return 'DATABASE_URL=file:./local.db\\n'\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case 'postgres':\n return ['pg']\n case 'mysql':\n return ['mysql2']\n case 'sqlite':\n default:\n return ['better-sqlite3']\n }\n}\n\nexport const drizzleAddon: AddonDefinition = {\n id: 'drizzle',\n category: 'database',\n dependencies(ctx) {\n const driver = ctx.driver ?? 'sqlite'\n return ['drizzle-orm', ...driverPackages(driver)]\n },\n devDependencies() {\n return ['drizzle-kit']\n },\n scripts() {\n return {\n 'db:generate': 'drizzle-kit generate',\n 'db:push': 'drizzle-kit push',\n }\n },\n bootBinding() {\n return {\n key: 'db',\n importPath: './db/index.js',\n factoryName: 'createDb',\n }\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? 'sqlite'\n await write('src/db/schema.ts', schemaSource(driver))\n await write('src/db/index.ts', dbIndexSource(driver))\n await write('drizzle.config.ts', drizzleConfigSource(driver))\n await write('.env.example', envExample(driver))\n },\n}\n"],"mappings":";AAGA,SAAS,aAAa,QAA0B;CAC9C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;EAOT,KAAK,SACH,OAAO;;;;;;;EAQT,SACE,OAAO;;;;;;;CAOX;AACF;AAEA,SAAS,cAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;;EAYT,KAAK,SACH,OAAO;;;;;;;;;;EAWT,SACE,OAAO;;;;;;;;;;;CAWX;AACF;AAEA,SAAS,oBAAoB,QAA0B;CAErD,OAAO;;;;;cADS,WAAW,aAAa,eAAe,WAAW,UAAU,UAAU,SAMlE;;;;;;AAMtB;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAAS,eAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,IAAa,eAAgC;CAC3C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,eAAe,GAAG,eADX,IAAI,UAAU,QACkB,CAAC;CAClD;CACA,kBAAkB;EAChB,OAAO,CAAC,aAAa;CACvB;CACA,UAAU;EACR,OAAO;GACL,eAAe;GACf,WAAW;EACb;CACF;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,aAAa,MAAM,CAAC;EACpD,MAAM,MAAM,mBAAmB,cAAc,MAAM,CAAC;EACpD,MAAM,MAAM,qBAAqB,oBAAoB,MAAM,CAAC;EAC5D,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF"}
@@ -0,0 +1,2 @@
1
+ import { AddonDefinition } from '../types.js';
2
+ export declare const drizzleAddon: AddonDefinition;
@@ -0,0 +1,96 @@
1
+ //#region src/addons/kysely/index.ts
2
+ function schemaTypesSource() {
3
+ return `export interface UserTable {
4
+ id: number
5
+ email: string
6
+ }
7
+
8
+ export interface DB {
9
+ users: UserTable
10
+ }
11
+ `;
12
+ }
13
+ function dbIndexSource(driver) {
14
+ switch (driver) {
15
+ case "postgres": return `import { Kysely, PostgresDialect } from 'kysely'
16
+ import pg from 'pg'
17
+
18
+ import type { DB } from './schema.js'
19
+
20
+ export function createDb() {
21
+ const pool = new pg.Pool({
22
+ connectionString: process.env.DATABASE_URL,
23
+ })
24
+ return new Kysely<DB>({
25
+ dialect: new PostgresDialect({ pool }),
26
+ })
27
+ }
28
+ `;
29
+ case "mysql": return `import { Kysely, MysqlDialect } from 'kysely'
30
+ import { createPool } from 'mysql2'
31
+
32
+ import type { DB } from './schema.js'
33
+
34
+ export function createDb() {
35
+ const pool = createPool(process.env.DATABASE_URL ?? '')
36
+ return new Kysely<DB>({
37
+ dialect: new MysqlDialect({ pool }),
38
+ })
39
+ }
40
+ `;
41
+ default: return `import Database from 'better-sqlite3'
42
+ import { Kysely, SqliteDialect } from 'kysely'
43
+
44
+ import type { DB } from './schema.js'
45
+
46
+ export function createDb() {
47
+ const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')
48
+ const database = new Database(filePath)
49
+ return new Kysely<DB>({
50
+ dialect: new SqliteDialect({ database }),
51
+ })
52
+ }
53
+ `;
54
+ }
55
+ }
56
+ function driverPackages(driver) {
57
+ switch (driver) {
58
+ case "postgres": return ["pg"];
59
+ case "mysql": return ["mysql2"];
60
+ default: return ["better-sqlite3"];
61
+ }
62
+ }
63
+ function envExample(driver) {
64
+ switch (driver) {
65
+ case "postgres": return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
66
+ case "mysql": return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
67
+ default: return "DATABASE_URL=file:./local.db\n";
68
+ }
69
+ }
70
+ var kyselyAddon = {
71
+ id: "kysely",
72
+ category: "database",
73
+ dependencies(ctx) {
74
+ return ["kysely", ...driverPackages(ctx.driver ?? "sqlite")];
75
+ },
76
+ devDependencies() {
77
+ return [];
78
+ },
79
+ bootBinding() {
80
+ return {
81
+ key: "db",
82
+ importPath: "./db/index.js",
83
+ factoryName: "createDb"
84
+ };
85
+ },
86
+ async apply(ctx, write) {
87
+ const driver = ctx.driver ?? "sqlite";
88
+ await write("src/db/schema.ts", schemaTypesSource());
89
+ await write("src/db/index.ts", dbIndexSource(driver));
90
+ await write(".env.example", envExample(driver));
91
+ }
92
+ };
93
+ //#endregion
94
+ exports.kyselyAddon = kyselyAddon;
95
+
96
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/kysely/index.ts"],"sourcesContent":["import type { AddonDefinition } from '../types.js'\nimport type { DbDriver } from '../../core/types.js'\n\nfunction schemaTypesSource(): string {\n return `export interface UserTable {\n id: number\n email: string\n}\n\nexport interface DB {\n users: UserTable\n}\n`\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return `import { Kysely, PostgresDialect } from 'kysely'\nimport pg from 'pg'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n })\n return new Kysely<DB>({\n dialect: new PostgresDialect({ pool }),\n })\n}\n`\n case 'mysql':\n return `import { Kysely, MysqlDialect } from 'kysely'\nimport { createPool } from 'mysql2'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const pool = createPool(process.env.DATABASE_URL ?? '')\n return new Kysely<DB>({\n dialect: new MysqlDialect({ pool }),\n })\n}\n`\n case 'sqlite':\n default:\n return `import Database from 'better-sqlite3'\nimport { Kysely, SqliteDialect } from 'kysely'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')\n const database = new Database(filePath)\n return new Kysely<DB>({\n dialect: new SqliteDialect({ database }),\n })\n}\n`\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case 'postgres':\n return ['pg']\n case 'mysql':\n return ['mysql2']\n case 'sqlite':\n default:\n return ['better-sqlite3']\n }\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return 'DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n'\n case 'mysql':\n return 'DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n'\n case 'sqlite':\n default:\n return 'DATABASE_URL=file:./local.db\\n'\n }\n}\n\nexport const kyselyAddon: AddonDefinition = {\n id: 'kysely',\n category: 'database',\n dependencies(ctx) {\n const driver = ctx.driver ?? 'sqlite'\n return ['kysely', ...driverPackages(driver)]\n },\n devDependencies() {\n return []\n },\n bootBinding() {\n return {\n key: 'db',\n importPath: './db/index.js',\n factoryName: 'createDb',\n }\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? 'sqlite'\n await write('src/db/schema.ts', schemaTypesSource())\n await write('src/db/index.ts', dbIndexSource(driver))\n await write('.env.example', envExample(driver))\n },\n}\n"],"mappings":";AAGA,SAAS,oBAA4B;CACnC,OAAO;;;;;;;;;AAST;AAEA,SAAS,cAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;;;;EAcT,KAAK,SACH,OAAO;;;;;;;;;;;;EAaT,SACE,OAAO;;;;;;;;;;;;;CAaX;AACF;AAEA,SAAS,eAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,IAAa,cAA+B;CAC1C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,UAAU,GAAG,eADN,IAAI,UAAU,QACa,CAAC;CAC7C;CACA,kBAAkB;EAChB,OAAO,CAAC;CACV;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,kBAAkB,CAAC;EACnD,MAAM,MAAM,mBAAmB,cAAc,MAAM,CAAC;EACpD,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF"}
@@ -0,0 +1,2 @@
1
+ import { AddonDefinition } from '../types.js';
2
+ export declare const kyselyAddon: AddonDefinition;
@@ -0,0 +1,30 @@
1
+ //#region src/addons/pino/index.ts
2
+ var pinoAddon = {
3
+ id: "pino",
4
+ category: "logger",
5
+ dependencies() {
6
+ return ["pino"];
7
+ },
8
+ devDependencies() {
9
+ return [];
10
+ },
11
+ bootBinding() {
12
+ return {
13
+ key: "logger",
14
+ importPath: "./logger.js",
15
+ factoryName: "createLogger"
16
+ };
17
+ },
18
+ async apply(_ctx, write) {
19
+ await write("src/logger.ts", `import pino from 'pino'
20
+
21
+ export function createLogger() {
22
+ return pino({ level: process.env.LOG_LEVEL ?? 'info' })
23
+ }
24
+ `);
25
+ }
26
+ };
27
+ //#endregion
28
+ exports.pinoAddon = pinoAddon;
29
+
30
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/pino/index.ts"],"sourcesContent":["import type { AddonDefinition } from '../types.js'\n\nexport const pinoAddon: AddonDefinition = {\n id: 'pino',\n category: 'logger',\n dependencies() {\n return ['pino']\n },\n devDependencies() {\n return []\n },\n bootBinding() {\n return {\n key: 'logger',\n importPath: './logger.js',\n factoryName: 'createLogger',\n }\n },\n async apply(_ctx, write) {\n await write(\n 'src/logger.ts',\n `import pino from 'pino'\n\nexport function createLogger() {\n return pino({ level: process.env.LOG_LEVEL ?? 'info' })\n}\n`,\n )\n },\n}\n"],"mappings":";AAEA,IAAa,YAA6B;CACxC,IAAI;CACJ,UAAU;CACV,eAAe;EACb,OAAO,CAAC,MAAM;CAChB;CACA,kBAAkB;EAChB,OAAO,CAAC;CACV;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,MAAM,OAAO;EACvB,MAAM,MACJ,iBACA;;;;;CAMF;CACF;AACF"}
@@ -0,0 +1,2 @@
1
+ import { AddonDefinition } from '../types.js';
2
+ export declare const pinoAddon: AddonDefinition;
@@ -0,0 +1,66 @@
1
+ //#region src/addons/prisma/index.ts
2
+ function prismaProvider(driver) {
3
+ switch (driver) {
4
+ case "postgres": return "postgresql";
5
+ case "mysql": return "mysql";
6
+ default: return "sqlite";
7
+ }
8
+ }
9
+ function envExample(driver) {
10
+ switch (driver) {
11
+ case "postgres": return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
12
+ case "mysql": return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
13
+ default: return "DATABASE_URL=file:./local.db\n";
14
+ }
15
+ }
16
+ var prismaAddon = {
17
+ id: "prisma",
18
+ category: "database",
19
+ dependencies() {
20
+ return ["@prisma/client"];
21
+ },
22
+ devDependencies() {
23
+ return ["prisma"];
24
+ },
25
+ scripts() {
26
+ return {
27
+ "db:generate": "prisma generate",
28
+ "db:push": "prisma db push"
29
+ };
30
+ },
31
+ bootBinding() {
32
+ return {
33
+ key: "db",
34
+ importPath: "./db/index.js",
35
+ factoryName: "createDb"
36
+ };
37
+ },
38
+ async apply(ctx, write) {
39
+ const driver = ctx.driver ?? "sqlite";
40
+ await write("prisma/schema.prisma", `generator client {
41
+ provider = "prisma-client-js"
42
+ }
43
+
44
+ datasource db {
45
+ provider = "${prismaProvider(driver)}"
46
+ url = env("DATABASE_URL")
47
+ }
48
+
49
+ model User {
50
+ id Int @id @default(autoincrement())
51
+ email String
52
+ }
53
+ `);
54
+ await write("src/db/index.ts", `import { PrismaClient } from '@prisma/client'
55
+
56
+ export function createDb() {
57
+ return new PrismaClient()
58
+ }
59
+ `);
60
+ await write(".env.example", envExample(driver));
61
+ }
62
+ };
63
+ //#endregion
64
+ exports.prismaAddon = prismaAddon;
65
+
66
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/prisma/index.ts"],"sourcesContent":["import type { AddonDefinition } from '../types.js'\nimport type { DbDriver } from '../../core/types.js'\n\nfunction prismaProvider(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return 'postgresql'\n case 'mysql':\n return 'mysql'\n case 'sqlite':\n default:\n return 'sqlite'\n }\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case 'postgres':\n return 'DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n'\n case 'mysql':\n return 'DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n'\n case 'sqlite':\n default:\n return 'DATABASE_URL=file:./local.db\\n'\n }\n}\n\nexport const prismaAddon: AddonDefinition = {\n id: 'prisma',\n category: 'database',\n dependencies() {\n return ['@prisma/client']\n },\n devDependencies() {\n return ['prisma']\n },\n scripts() {\n return {\n 'db:generate': 'prisma generate',\n 'db:push': 'prisma db push',\n }\n },\n bootBinding() {\n return {\n key: 'db',\n importPath: './db/index.js',\n factoryName: 'createDb',\n }\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? 'sqlite'\n const provider = prismaProvider(driver)\n await write(\n 'prisma/schema.prisma',\n `generator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"${provider}\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n email String\n}\n`,\n )\n await write(\n 'src/db/index.ts',\n `import { PrismaClient } from '@prisma/client'\n\nexport function createDb() {\n return new PrismaClient()\n}\n`,\n )\n await write('.env.example', envExample(driver))\n },\n}\n"],"mappings":";AAGA,SAAS,eAAe,QAA0B;CAChD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,IAAa,cAA+B;CAC1C,IAAI;CACJ,UAAU;CACV,eAAe;EACb,OAAO,CAAC,gBAAgB;CAC1B;CACA,kBAAkB;EAChB,OAAO,CAAC,QAAQ;CAClB;CACA,UAAU;EACR,OAAO;GACL,eAAe;GACf,WAAW;EACb;CACF;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAE7B,MAAM,MACJ,wBACA;;;;;gBAHe,eAAe,MAQpB,EAAS;;;;;;;;CASrB;EACA,MAAM,MACJ,mBACA;;;;;CAMF;EACA,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF"}
@@ -0,0 +1,2 @@
1
+ import { AddonDefinition } from '../types.js';
2
+ export declare const prismaAddon: AddonDefinition;
@@ -0,0 +1,52 @@
1
+ const require_index = require("./drizzle/index.cjs");
2
+ const require_index$1 = require("./kysely/index.cjs");
3
+ const require_index$2 = require("./pino/index.cjs");
4
+ const require_index$3 = require("./prisma/index.cjs");
5
+ const require_index$4 = require("./winston/index.cjs");
6
+ const require_types = require("../core/types.cjs");
7
+ //#region src/addons/registry.ts
8
+ var ALL_ADDONS = [
9
+ require_index.drizzleAddon,
10
+ require_index$3.prismaAddon,
11
+ require_index$1.kyselyAddon,
12
+ require_index$2.pinoAddon,
13
+ require_index$4.winstonAddon
14
+ ];
15
+ var DB_ADDONS = ALL_ADDONS.filter((addon) => addon.category === "database");
16
+ var LOGGER_ADDONS = ALL_ADDONS.filter((addon) => addon.category === "logger");
17
+ function getCapabilitiesCatalog() {
18
+ return {
19
+ frameworks: [...require_types.FRAMEWORKS],
20
+ db: {
21
+ odms: [...require_types.DB_ODMS],
22
+ drivers: [...require_types.DB_DRIVERS],
23
+ defaultDriver: require_types.DEFAULT_DB_DRIVER
24
+ },
25
+ loggers: [...require_types.LOGGERS]
26
+ };
27
+ }
28
+ function resolveAddons(ctx) {
29
+ const selected = [];
30
+ if (ctx.db) {
31
+ const dbAddon = DB_ADDONS.find((addon) => addon.id === ctx.db);
32
+ if (!dbAddon) throw new Error(`Unknown database addon "${ctx.db}"`);
33
+ selected.push(dbAddon);
34
+ }
35
+ if (ctx.logger) {
36
+ const loggerAddon = LOGGER_ADDONS.find((addon) => addon.id === ctx.logger);
37
+ if (!loggerAddon) throw new Error(`Unknown logger addon "${ctx.logger}"`);
38
+ selected.push(loggerAddon);
39
+ }
40
+ if (selected.filter((addon) => addon.category === "database").length > 1) throw new Error("Only one database addon can be selected");
41
+ if (selected.filter((addon) => addon.category === "logger").length > 1) throw new Error("Only one logger addon can be selected");
42
+ return selected;
43
+ }
44
+ function collectBootBindings(ctx) {
45
+ return resolveAddons(ctx).map((addon) => addon.bootBinding(ctx));
46
+ }
47
+ //#endregion
48
+ exports.collectBootBindings = collectBootBindings;
49
+ exports.getCapabilitiesCatalog = getCapabilitiesCatalog;
50
+ exports.resolveAddons = resolveAddons;
51
+
52
+ //# sourceMappingURL=registry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.cjs","names":[],"sources":["../../../src/addons/registry.ts"],"sourcesContent":["import { drizzleAddon } from './drizzle/index.js'\nimport { kyselyAddon } from './kysely/index.js'\nimport { pinoAddon } from './pino/index.js'\nimport { prismaAddon } from './prisma/index.js'\nimport type { AddonDefinition } from './types.js'\nimport { winstonAddon } from './winston/index.js'\nimport type { CapabilitiesCatalog, ScaffoldContext } from '../core/types.js'\nimport {\n DB_DRIVERS,\n DB_ODMS,\n DEFAULT_DB_DRIVER,\n FRAMEWORKS,\n LOGGERS,\n} from '../core/types.js'\n\nconst ALL_ADDONS: AddonDefinition[] = [\n drizzleAddon,\n prismaAddon,\n kyselyAddon,\n pinoAddon,\n winstonAddon,\n]\n\nconst DB_ADDONS = ALL_ADDONS.filter(addon => addon.category === 'database')\nconst LOGGER_ADDONS = ALL_ADDONS.filter(addon => addon.category === 'logger')\n\nexport function getCapabilitiesCatalog(): CapabilitiesCatalog {\n return {\n frameworks: [...FRAMEWORKS],\n db: {\n odms: [...DB_ODMS],\n drivers: [...DB_DRIVERS],\n defaultDriver: DEFAULT_DB_DRIVER,\n },\n loggers: [...LOGGERS],\n }\n}\n\nexport function resolveAddons(ctx: ScaffoldContext): AddonDefinition[] {\n const selected: AddonDefinition[] = []\n\n if (ctx.db) {\n const dbAddon = DB_ADDONS.find(addon => addon.id === ctx.db)\n if (!dbAddon) {\n throw new Error(`Unknown database addon \"${ctx.db}\"`)\n }\n selected.push(dbAddon)\n }\n\n if (ctx.logger) {\n const loggerAddon = LOGGER_ADDONS.find(addon => addon.id === ctx.logger)\n if (!loggerAddon) {\n throw new Error(`Unknown logger addon \"${ctx.logger}\"`)\n }\n selected.push(loggerAddon)\n }\n\n const dbCount = selected.filter(addon => addon.category === 'database').length\n if (dbCount > 1) {\n throw new Error('Only one database addon can be selected')\n }\n\n const loggerCount = selected.filter(addon => addon.category === 'logger').length\n if (loggerCount > 1) {\n throw new Error('Only one logger addon can be selected')\n }\n\n return selected\n}\n\nexport function collectBootBindings(ctx: ScaffoldContext) {\n return resolveAddons(ctx).map(addon => addon.bootBinding(ctx))\n}\n"],"mappings":";;;;;;;AAeA,IAAM,aAAgC;CACpC,cAAA;CACA,gBAAA;CACA,gBAAA;CACA,gBAAA;CACA,gBAAA;AACF;AAEA,IAAM,YAAY,WAAW,QAAO,UAAS,MAAM,aAAa,UAAU;AAC1E,IAAM,gBAAgB,WAAW,QAAO,UAAS,MAAM,aAAa,QAAQ;AAE5E,SAAgB,yBAA8C;CAC5D,OAAO;EACL,YAAY,CAAC,GAAG,cAAA,UAAU;EAC1B,IAAI;GACF,MAAM,CAAC,GAAG,cAAA,OAAO;GACjB,SAAS,CAAC,GAAG,cAAA,UAAU;GACvB,eAAe,cAAA;EACjB;EACA,SAAS,CAAC,GAAG,cAAA,OAAO;CACtB;AACF;AAEA,SAAgB,cAAc,KAAyC;CACrE,MAAM,WAA8B,CAAC;CAErC,IAAI,IAAI,IAAI;EACV,MAAM,UAAU,UAAU,MAAK,UAAS,MAAM,OAAO,IAAI,EAAE;EAC3D,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,2BAA2B,IAAI,GAAG,EAAE;EAEtD,SAAS,KAAK,OAAO;CACvB;CAEA,IAAI,IAAI,QAAQ;EACd,MAAM,cAAc,cAAc,MAAK,UAAS,MAAM,OAAO,IAAI,MAAM;EACvE,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,yBAAyB,IAAI,OAAO,EAAE;EAExD,SAAS,KAAK,WAAW;CAC3B;CAGA,IADgB,SAAS,QAAO,UAAS,MAAM,aAAa,UAAU,CAAC,CAAC,SAC1D,GACZ,MAAM,IAAI,MAAM,yCAAyC;CAI3D,IADoB,SAAS,QAAO,UAAS,MAAM,aAAa,QAAQ,CAAC,CAAC,SACxD,GAChB,MAAM,IAAI,MAAM,uCAAuC;CAGzD,OAAO;AACT;AAEA,SAAgB,oBAAoB,KAAsB;CACxD,OAAO,cAAc,GAAG,CAAC,CAAC,KAAI,UAAS,MAAM,YAAY,GAAG,CAAC;AAC/D"}
@@ -0,0 +1,5 @@
1
+ import { AddonDefinition } from './types.js';
2
+ import { CapabilitiesCatalog, ScaffoldContext } from '../core/types.js';
3
+ export declare function getCapabilitiesCatalog(): CapabilitiesCatalog;
4
+ export declare function resolveAddons(ctx: ScaffoldContext): AddonDefinition[];
5
+ export declare function collectBootBindings(ctx: ScaffoldContext): import('./types.js').BootBinding[];
@@ -0,0 +1,16 @@
1
+ import { ScaffoldContext } from '../core/types.js';
2
+ export type BootBinding = {
3
+ key: string;
4
+ importPath: string;
5
+ factoryName: string;
6
+ };
7
+ export type FileWriter = (filePath: string, contents: string) => Promise<void>;
8
+ export type AddonDefinition = {
9
+ id: string;
10
+ category: 'database' | 'logger';
11
+ dependencies: (ctx: ScaffoldContext) => string[];
12
+ devDependencies: (ctx: ScaffoldContext) => string[];
13
+ scripts?: (ctx: ScaffoldContext) => Record<string, string>;
14
+ bootBinding: (ctx: ScaffoldContext) => BootBinding;
15
+ apply: (ctx: ScaffoldContext, write: FileWriter) => Promise<void>;
16
+ };
@@ -0,0 +1,34 @@
1
+ //#region src/addons/winston/index.ts
2
+ var winstonAddon = {
3
+ id: "winston",
4
+ category: "logger",
5
+ dependencies() {
6
+ return ["winston"];
7
+ },
8
+ devDependencies() {
9
+ return [];
10
+ },
11
+ bootBinding() {
12
+ return {
13
+ key: "logger",
14
+ importPath: "./logger.js",
15
+ factoryName: "createLogger"
16
+ };
17
+ },
18
+ async apply(_ctx, write) {
19
+ await write("src/logger.ts", `import winston from 'winston'
20
+
21
+ export function createLogger() {
22
+ return winston.createLogger({
23
+ level: process.env.LOG_LEVEL ?? 'info',
24
+ format: winston.format.json(),
25
+ transports: [new winston.transports.Console()],
26
+ })
27
+ }
28
+ `);
29
+ }
30
+ };
31
+ //#endregion
32
+ exports.winstonAddon = winstonAddon;
33
+
34
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/winston/index.ts"],"sourcesContent":["import type { AddonDefinition } from '../types.js'\n\nexport const winstonAddon: AddonDefinition = {\n id: 'winston',\n category: 'logger',\n dependencies() {\n return ['winston']\n },\n devDependencies() {\n return []\n },\n bootBinding() {\n return {\n key: 'logger',\n importPath: './logger.js',\n factoryName: 'createLogger',\n }\n },\n async apply(_ctx, write) {\n await write(\n 'src/logger.ts',\n `import winston from 'winston'\n\nexport function createLogger() {\n return winston.createLogger({\n level: process.env.LOG_LEVEL ?? 'info',\n format: winston.format.json(),\n transports: [new winston.transports.Console()],\n })\n}\n`,\n )\n },\n}\n"],"mappings":";AAEA,IAAa,eAAgC;CAC3C,IAAI;CACJ,UAAU;CACV,eAAe;EACb,OAAO,CAAC,SAAS;CACnB;CACA,kBAAkB;EAChB,OAAO,CAAC;CACV;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,MAAM,OAAO;EACvB,MAAM,MACJ,iBACA;;;;;;;;;CAUF;CACF;AACF"}
@@ -0,0 +1,2 @@
1
+ import { AddonDefinition } from '../types.js';
2
+ export declare const winstonAddon: AddonDefinition;
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_json_output = require("./core/json-output.cjs");
4
+ const require_create = require("./commands/create.cjs");
5
+ let node_util = require("node:util");
6
+ let _clack_prompts = require("@clack/prompts");
7
+ _clack_prompts = require_runtime.__toESM(_clack_prompts, 1);
8
+ let picocolors = require("picocolors");
9
+ picocolors = require_runtime.__toESM(picocolors, 1);
10
+ //#region src/cli.ts
11
+ async function main() {
12
+ const { values, positionals } = (0, node_util.parseArgs)({
13
+ args: process.argv.slice(2),
14
+ options: {
15
+ framework: { type: "string" },
16
+ db: { type: "string" },
17
+ logger: { type: "string" },
18
+ y: {
19
+ type: "boolean",
20
+ short: "y"
21
+ },
22
+ noInstall: { type: "boolean" },
23
+ json: { type: "boolean" }
24
+ },
25
+ allowPositionals: true
26
+ });
27
+ const parsed = require_create.buildParsedArgsFromCli({
28
+ ...values.framework !== void 0 ? { framework: values.framework } : {},
29
+ ...values.db !== void 0 ? { db: values.db } : {},
30
+ ...values.logger !== void 0 ? { logger: values.logger } : {},
31
+ ...values.y !== void 0 ? { y: values.y } : {},
32
+ ...values.noInstall !== void 0 ? { noInstall: values.noInstall } : {},
33
+ ...values.json !== void 0 ? { json: values.json } : {}
34
+ }, positionals);
35
+ if (!parsed.json) {
36
+ console.clear();
37
+ _clack_prompts.intro(picocolors.default.bgCyan(picocolors.default.black(" create-taser ")));
38
+ }
39
+ try {
40
+ await require_create.runCreateCommand(parsed);
41
+ } catch (error) {
42
+ const message = error instanceof Error ? error.message : String(error);
43
+ if (parsed.json) {
44
+ require_json_output.printJsonError(message);
45
+ process.exit(1);
46
+ }
47
+ throw error;
48
+ }
49
+ }
50
+ main().catch((error) => {
51
+ console.error(error);
52
+ process.exit(1);
53
+ });
54
+ //#endregion
55
+
56
+ //# sourceMappingURL=cli.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.cjs","names":[],"sources":["../../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { parseArgs } from 'node:util'\n\nimport * as p from '@clack/prompts'\nimport color from 'picocolors'\n\nimport { buildParsedArgsFromCli, runCreateCommand } from './commands/create.js'\nimport { printJsonError } from './core/json-output.js'\n\nasync function main(): Promise<void> {\n const { values, positionals } = parseArgs({\n args: process.argv.slice(2),\n options: {\n framework: { type: 'string' },\n db: { type: 'string' },\n logger: { type: 'string' },\n y: { type: 'boolean', short: 'y' },\n noInstall: { type: 'boolean' },\n json: { type: 'boolean' },\n },\n allowPositionals: true,\n })\n\n const parsed = buildParsedArgsFromCli(\n {\n ...(values.framework !== undefined ? { framework: values.framework } : {}),\n ...(values.db !== undefined ? { db: values.db } : {}),\n ...(values.logger !== undefined ? { logger: values.logger } : {}),\n ...(values.y !== undefined ? { y: values.y } : {}),\n ...(values.noInstall !== undefined ? { noInstall: values.noInstall } : {}),\n ...(values.json !== undefined ? { json: values.json } : {}),\n },\n positionals,\n )\n\n if (!parsed.json) {\n console.clear()\n p.intro(color.bgCyan(color.black(' create-taser ')))\n }\n\n try {\n await runCreateCommand(parsed)\n }\n catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (parsed.json) {\n printJsonError(message)\n process.exit(1)\n }\n throw error\n }\n}\n\nmain().catch((error: unknown) => {\n console.error(error)\n process.exit(1)\n})\n"],"mappings":";;;;;;;;;;AASA,eAAe,OAAsB;CACnC,MAAM,EAAE,QAAQ,iBAAA,GAAgB,UAAA,UAAA,CAAU;EACxC,MAAM,QAAQ,KAAK,MAAM,CAAC;EAC1B,SAAS;GACP,WAAW,EAAE,MAAM,SAAS;GAC5B,IAAI,EAAE,MAAM,SAAS;GACrB,QAAQ,EAAE,MAAM,SAAS;GACzB,GAAG;IAAE,MAAM;IAAW,OAAO;GAAI;GACjC,WAAW,EAAE,MAAM,UAAU;GAC7B,MAAM,EAAE,MAAM,UAAU;EAC1B;EACA,kBAAkB;CACpB,CAAC;CAED,MAAM,SAAS,eAAA,uBACb;EACE,GAAI,OAAO,cAAc,KAAA,IAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;EACxE,GAAI,OAAO,OAAO,KAAA,IAAY,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC;EACnD,GAAI,OAAO,WAAW,KAAA,IAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;EAC/D,GAAI,OAAO,MAAM,KAAA,IAAY,EAAE,GAAG,OAAO,EAAE,IAAI,CAAC;EAChD,GAAI,OAAO,cAAc,KAAA,IAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;EACxE,GAAI,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;CAC3D,GACA,WACF;CAEA,IAAI,CAAC,OAAO,MAAM;EAChB,QAAQ,MAAM;EACd,eAAE,MAAM,WAAA,QAAM,OAAO,WAAA,QAAM,MAAM,gBAAgB,CAAC,CAAC;CACrD;CAEA,IAAI;EACF,MAAM,eAAA,iBAAiB,MAAM;CAC/B,SACO,OAAO;EACZ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACrE,IAAI,OAAO,MAAM;GACf,oBAAA,eAAe,OAAO;GACtB,QAAQ,KAAK,CAAC;EAChB;EACA,MAAM;CACR;AACF;AAEA,KAAK,CAAC,CAAC,OAAO,UAAmB;CAC/B,QAAQ,MAAM,KAAK;CACnB,QAAQ,KAAK,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};