@exanderal/stackcraft 0.8.4 → 0.8.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"orm.d.ts","sourceRoot":"","sources":["../../../src/create/scaffolders/orm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAqDzD,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,iBAOlF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAoCxE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAmE7E;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAiH7E"}
1
+ {"version":3,"file":"orm.d.ts","sourceRoot":"","sources":["../../../src/create/scaffolders/orm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAqDzD,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,iBAOlF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAoCxE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAmE7E;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,iBAmH7E"}
@@ -162,20 +162,21 @@ export async function writeMigrateScript(appDir, config) {
162
162
  let content;
163
163
  if (config.database === 'postgres') {
164
164
  content = `import 'dotenv/config';
165
- import { Kysely, PostgresDialect, Migrator, FileMigrationProvider } from 'kysely';
166
- import { Pool } from 'pg';
167
165
  import { promises as fs } from 'node:fs';
168
- import { join, dirname } from 'node:path';
166
+ import { dirname, join } from 'node:path';
169
167
  import { fileURLToPath } from 'node:url';
168
+ import { FileMigrationProvider, Kysely, Migrator, PostgresDialect } from 'kysely';
169
+ import { Pool } from 'pg';
170
170
 
171
171
  const __dirname = dirname(fileURLToPath(import.meta.url));
172
172
 
173
173
  async function migrate() {
174
+ // biome-ignore lint/suspicious/noExplicitAny: migration script uses dynamic DB types
174
175
  const db = new Kysely<any>({
175
176
  dialect: new PostgresDialect({
176
177
  pool: new Pool({
177
178
  host: process.env.DB_HOST,
178
- port: parseInt(process.env.DB_PORT ?? '5432', 10),
179
+ port: Number.parseInt(process.env.DB_PORT ?? '5432', 10),
179
180
  user: process.env.DB_USER,
180
181
  password: process.env.DB_PASSWORD,
181
182
  database: process.env.DB_NAME,
@@ -197,10 +198,10 @@ async function migrate() {
197
198
  ? await migrator.migrateDown()
198
199
  : await migrator.migrateToLatest();
199
200
 
200
- results?.forEach((it) => {
201
+ for (const it of results ?? []) {
201
202
  if (it.status === 'Success') console.log(\`✓ \${it.migrationName}\`);
202
203
  else if (it.status === 'Error') console.error(\`✗ \${it.migrationName}\`);
203
- });
204
+ }
204
205
 
205
206
  if (error) {
206
207
  console.error('Migration failed:', error);
@@ -215,20 +216,21 @@ migrate();
215
216
  }
216
217
  else {
217
218
  content = `import 'dotenv/config';
218
- import { Kysely, MysqlDialect, Migrator, FileMigrationProvider } from 'kysely';
219
- import { createPool } from 'mysql2/promise';
220
219
  import { promises as fs } from 'node:fs';
221
- import { join, dirname } from 'node:path';
220
+ import { dirname, join } from 'node:path';
222
221
  import { fileURLToPath } from 'node:url';
222
+ import { FileMigrationProvider, Kysely, Migrator, MysqlDialect } from 'kysely';
223
+ import { createPool } from 'mysql2/promise';
223
224
 
224
225
  const __dirname = dirname(fileURLToPath(import.meta.url));
225
226
 
226
227
  async function migrate() {
228
+ // biome-ignore lint/suspicious/noExplicitAny: migration script uses dynamic DB types
227
229
  const db = new Kysely<any>({
228
230
  dialect: new MysqlDialect({
229
231
  pool: createPool({
230
232
  host: process.env.DB_HOST,
231
- port: parseInt(process.env.DB_PORT ?? '3306', 10),
233
+ port: Number.parseInt(process.env.DB_PORT ?? '3306', 10),
232
234
  user: process.env.DB_USER,
233
235
  password: process.env.DB_PASSWORD,
234
236
  database: process.env.DB_NAME,
@@ -250,10 +252,10 @@ async function migrate() {
250
252
  ? await migrator.migrateDown()
251
253
  : await migrator.migrateToLatest();
252
254
 
253
- results?.forEach((it) => {
255
+ for (const it of results ?? []) {
254
256
  if (it.status === 'Success') console.log(\`✓ \${it.migrationName}\`);
255
257
  else if (it.status === 'Error') console.error(\`✗ \${it.migrationName}\`);
256
- });
258
+ }
257
259
 
258
260
  if (error) {
259
261
  console.error('Migration failed:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"orm.js","sourceRoot":"","sources":["../../../src/create/scaffolders/orm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orm.js","sourceRoot":"","sources":["../../../src/create/scaffolders/orm.ts"],"names":[],"mappings":"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"}
@@ -26,9 +26,9 @@ async function writeBiomeConfig(config) {
26
26
  const biome = {
27
27
  $schema: 'https://biomejs.dev/schemas/1.9.0/schema.json',
28
28
  vcs: { enabled: true, clientKind: 'git', useIgnoreFile: true },
29
- files: { ignoreUnknown: false },
29
+ files: { ignoreUnknown: false, ignore: ['package.json'] },
30
30
  formatter: { enabled: true, indentStyle: 'space', indentWidth: 2 },
31
- linter: { enabled: true, rules: { recommended: true } },
31
+ linter: { enabled: true, rules: { recommended: true, style: { useImportType: 'off' } } },
32
32
  javascript: {
33
33
  formatter: { quoteStyle: 'single', trailingCommas: 'all', semicolons: 'always' },
34
34
  },
@@ -1 +1 @@
1
- {"version":3,"file":"setup-linter.js","sourceRoot":"","sources":["../../../src/create/scaffolders/setup-linter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-linter.js","sourceRoot":"","sources":["../../../src/create/scaffolders/setup-linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;QAAE,OAAM;IAErC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAA;IAE5F,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAA;IACpF,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAA;IAChF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAqB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAA;IAChD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAqB;IACnD,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,+CAA+C;QACxD,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;QAC9D,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE;QACzD,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE;QAClE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE;QACxF,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;SACjF;QACD,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAClC,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE;aACrE;SACF;KACF,CAAA;IACD,MAAM,SAAS,CACb,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACrC,OAAO,CACR,CAAA;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAqB,EACrB,OAAe,EACf,YAAsB,EACtB,aAAuB,EACvB,eAA8C;IAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAEtD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAExD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,kBAAkB;IAClB,YAAY;IACZ,QAAQ;IACR,wBAAwB;IACxB,wBAAwB;IACxB,UAAU;IACV,mBAAmB;CACpB,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAA;AAEzD,MAAM,uBAAuB,GAAkC;IAC7D,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,IAAI;CACb,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,YAAY;IACZ,QAAQ;IACR,2BAA2B;IAC3B,6BAA6B;IAC7B,SAAS;IACT,mBAAmB;CACpB,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvC,MAAM,qBAAqB,GAAkC;IAC3D,IAAI,EAAE,eAAe;CACtB,CAAA;AAED,MAAM,kBAAkB,GAAa,EAAE,CAAA;AAEvC,MAAM,uBAAuB,GAAkC;IAC7D,IAAI,EAAE,eAAe;CACtB,CAAA;AAED,MAAM,qBAAqB,GAAkC;IAC3D,IAAI,EAAE,eAAe;CACtB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exanderal/stackcraft",
3
- "version": "0.8.4",
3
+ "version": "0.8.5",
4
4
  "description": "Opinionated full-stack project scaffolding CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  import { Test, TestingModule } from '@nestjs/testing';
2
- import { HealthController } from './health.controller';
3
- import { HealthService } from './health.service';
2
+ import { HealthController } from '../health.controller';
3
+ import { HealthService } from '../health.service';
4
4
 
5
5
  describe('HealthController', () => {
6
6
  let controller: HealthController;
@@ -1,5 +1,5 @@
1
1
  import { Test, TestingModule } from '@nestjs/testing';
2
- import { HealthService } from './health.service';
2
+ import { HealthService } from '../health.service';
3
3
 
4
4
  describe('HealthService', () => {
5
5
  let service: HealthService;
@@ -1,6 +1,6 @@
1
1
  import { Test, TestingModule } from '@nestjs/testing';
2
- import { HealthController } from './health.controller';
3
- import { HealthService } from './health.service';
2
+ import { HealthController } from '../health.controller';
3
+ import { HealthService } from '../health.service';
4
4
 
5
5
  describe('HealthController', () => {
6
6
  let controller: HealthController;
@@ -1,5 +1,5 @@
1
1
  import { Test, TestingModule } from '@nestjs/testing';
2
- import { HealthService } from './health.service';
2
+ import { HealthService } from '../health.service';
3
3
 
4
4
  describe('HealthService', () => {
5
5
  let service: HealthService;
@@ -1,33 +1,37 @@
1
+ import type { Insertable, Selectable } from 'kysely';
2
+ import type { Database } from '../../database/database.types';
1
3
  import { ReadonlyEntityRepository } from './readonly-entity.repository';
2
4
 
3
5
  export abstract class EntityRepository<
4
- TEntity,
6
+ TableName extends keyof Database & string,
7
+ TEntity = Selectable<Database[TableName]>,
5
8
  TFilters extends Record<string, unknown> = Record<string, never>,
6
- TInsert = Omit<TEntity, 'id' | 'createdAt' | 'updatedAt'>,
7
- > extends ReadonlyEntityRepository<TEntity, TFilters> {
8
- async create(data: TInsert): Promise<TEntity> {
9
+ > extends ReadonlyEntityRepository<TableName, TEntity, TFilters> {
10
+ async create(data: Insertable<Database[TableName]>): Promise<TEntity> {
9
11
  const row = await this.db
10
- .insertInto(this.table as any)
11
- .values(data as any)
12
+ .insertInto(this.table)
13
+ .values(data)
12
14
  .returningAll()
13
15
  .executeTakeFirstOrThrow();
14
- return this.mapFromDB(row as any);
16
+ return row as TEntity;
15
17
  }
16
18
 
17
- async update(id: string | number, data: Partial<TInsert>): Promise<TEntity> {
19
+ async update(id: string | number, data: Partial<Insertable<Database[TableName]>>): Promise<TEntity> {
18
20
  const row = await this.db
19
- .updateTable(this.table as any)
20
- .set(data as any)
21
- .where(`${this.table}.id` as any, '=', id)
21
+ .updateTable(this.table)
22
+ .set(data)
23
+ // biome-ignore lint/suspicious/noExplicitAny: column 'id' cannot be inferred from a generic TableName without schema knowledge
24
+ .where('id' as any, '=', id)
22
25
  .returningAll()
23
26
  .executeTakeFirstOrThrow();
24
- return this.mapFromDB(row as any);
27
+ return row as TEntity;
25
28
  }
26
29
 
27
30
  async remove(id: string | number): Promise<void> {
28
31
  await this.db
29
- .deleteFrom(this.table as any)
30
- .where(`${this.table}.id` as any, '=', id)
32
+ .deleteFrom(this.table)
33
+ // biome-ignore lint/suspicious/noExplicitAny: column 'id' cannot be inferred from a generic TableName without schema knowledge
34
+ .where('id' as any, '=', id)
31
35
  .execute();
32
36
  }
33
37
  }
@@ -1,4 +1,4 @@
1
- import { Kysely } from 'kysely';
1
+ import type { Kysely, Selectable } from 'kysely';
2
2
  import type { Database } from '../../database/database.types';
3
3
 
4
4
  export function where(column: string) {
@@ -6,41 +6,41 @@ export function where(column: string) {
6
6
  }
7
7
 
8
8
  export abstract class ReadonlyEntityRepository<
9
- TEntity,
9
+ TableName extends keyof Database & string,
10
+ TEntity = Selectable<Database[TableName]>,
10
11
  TFilters extends Record<string, unknown> = Record<string, never>,
11
12
  > {
12
13
  constructor(protected readonly db: Kysely<Database>) {}
13
14
 
14
- protected abstract table: string;
15
+ protected abstract table: TableName;
15
16
 
16
- protected filters: Partial<
17
- Record<keyof TFilters, (qb: any, value: any) => any>
18
- > = {};
17
+ protected filters: Partial<Record<keyof TFilters, (qb: any, value: unknown) => any>> = {};
19
18
 
20
19
  protected queryable() {
21
- return this.db.selectFrom(this.table as any);
20
+ return this.db.selectFrom(this.table);
22
21
  }
23
22
 
24
23
  async findAll(filters?: Partial<TFilters>): Promise<TEntity[]> {
25
24
  let q = this.queryable();
26
25
  if (filters) {
27
26
  for (const [key, value] of Object.entries(filters)) {
28
- const fn = (this.filters as any)[key];
27
+ const fn = this.filters[key as keyof TFilters];
29
28
  if (value !== undefined && fn) q = fn(q, value);
30
29
  }
31
30
  }
32
- return (await q.selectAll().execute()).map((r) => this.mapFromDB(r as any));
31
+ return (await q.selectAll().execute()) as TEntity[];
33
32
  }
34
33
 
35
34
  async findById(id: string | number): Promise<TEntity | null> {
36
35
  const row = await this.queryable()
37
36
  .selectAll()
38
- .where(`${this.table}.id` as any, '=', id)
37
+ // biome-ignore lint/suspicious/noExplicitAny: column 'id' cannot be inferred from a generic TableName without schema knowledge
38
+ .where('id' as any, '=', id)
39
39
  .executeTakeFirst();
40
- return row ? this.mapFromDB(row as any) : null;
40
+ return row ? (row as TEntity) : null;
41
41
  }
42
42
 
43
- protected mapFromDB(row: any): TEntity {
44
- return row;
43
+ protected mapFromDB(row: Selectable<Database[TableName]>): TEntity {
44
+ return row as TEntity;
45
45
  }
46
46
  }
@@ -1,15 +1,14 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
  import { EntityRepository } from '../../common/repositories/entity.repository';
3
3
  import { KyselyService } from '../../modules/database/kysely.service';
4
- import type { <%= className %> } from './<%= fileName %>.model';
5
4
 
6
5
  // Add properties to enable filtering, e.g.:
7
6
  // export type <%= className %>Filters = { id?: string }
8
7
  export type <%= className %>Filters = Record<string, never>
9
8
 
10
9
  @Injectable()
11
- export class <%= className %>Repository extends EntityRepository<<%= className %>, <%= className %>Filters> {
12
- protected table = '<%= fileName %>s';
10
+ export class <%= className %>Repository extends EntityRepository<'<%= fileName %>s', <%= className %>Filters> {
11
+ protected table = '<%= fileName %>s' as const;
13
12
 
14
13
  constructor(kyselyService: KyselyService) {
15
14
  super(kyselyService.db);