@devbro/pashmak 0.1.26 → 0.1.27

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.
@@ -28,6 +28,7 @@ class MigrateCommand extends Command {
28
28
  logger().info("reverting all migrations!!");
29
29
  const existing_migrations = await db.runQuery({
30
30
  sql: "select * from migrations order by created_at DESC",
31
+ parts: [],
31
32
  bindings: []
32
33
  });
33
34
  const migrationsDir2 = config.get("migration.path");
@@ -39,6 +40,7 @@ class MigrateCommand extends Command {
39
40
  await migrationInstance.down(db.getSchema());
40
41
  await db.runQuery({
41
42
  sql: "delete from migrations where filename = $1",
43
+ parts: [],
42
44
  bindings: [migration_record.filename]
43
45
  });
44
46
  } catch (error) {
@@ -66,12 +68,14 @@ class MigrateCommand extends Command {
66
68
  files = dirEntries.filter((entry) => entry.endsWith(".ts") || entry.endsWith(".js")).sort();
67
69
  let batch_number = await db.runQuery({
68
70
  sql: "select max(batch) as next_batch from migrations",
71
+ parts: [],
69
72
  bindings: []
70
73
  });
71
74
  batch_number = batch_number[0].next_batch || 0;
72
75
  batch_number++;
73
76
  const migrations = await db.runQuery({
74
77
  sql: "select * from migrations order by created_at ASC",
78
+ parts: [],
75
79
  bindings: []
76
80
  });
77
81
  const completed_migrations = migrations.map((r) => r.filename);
@@ -86,6 +90,7 @@ class MigrateCommand extends Command {
86
90
  await c.up(db.getSchema());
87
91
  await db.runQuery({
88
92
  sql: "insert into migrations (filename, batch) values ($1,$2)",
93
+ parts: [],
89
94
  bindings: [class_to_migrate, batch_number]
90
95
  });
91
96
  migrated_count++;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/MigrateCommand.mts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { Blueprint } from \"@devbro/neko-sql\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\n\nexport class MigrateCommand extends Command {\n static paths = [[`migrate`]];\n\n fresh = Option.Boolean(`--fresh`, false, {\n description: `whether to delete and recreate database`,\n });\n\n refresh = Option.Boolean(`--refresh`, false, {\n description: `whether to drop all tables before running migrations by using rollback function`,\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n if (this.fresh) {\n throw new Error(\"not implemented\");\n }\n\n if (this.refresh) {\n logger().info(\"reverting all migrations!!\");\n // read all migrations and undo them all\n const existing_migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC\",\n bindings: [],\n });\n\n const migrationsDir = config.get(\"migration.path\");\n\n for (const migration_record of existing_migrations) {\n logger().info(`rolling back ${migration_record.filename}`);\n try {\n const MigrationClass = (\n await import(path.join(migrationsDir, migration_record.filename))\n ).default;\n const migrationInstance: Migration = new MigrationClass();\n\n // Call the down method to rollback the migration\n await migrationInstance.down(db.getSchema());\n\n // Remove the migration record from the migrations table\n await db.runQuery({\n sql: \"delete from migrations where filename = $1\",\n bindings: [migration_record.filename],\n });\n } catch (error) {\n logger().error(\n `Failed to rollback migration ${migration_record.filename}: ${error}`,\n );\n throw error;\n }\n }\n\n logger().info(\n `rolled back ${existing_migrations.length} migrations successfully!`,\n );\n }\n\n //create migration table if not exists\n if (!(await schema.tableExists(\"migrations\"))) {\n await schema.createTable(\"migrations\", (blueprint: Blueprint) => {\n blueprint.id();\n blueprint.timestamps();\n blueprint.string(\"filename\");\n blueprint.integer(\"batch\");\n });\n }\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries\n .filter((entry) => entry.endsWith(\".ts\") || entry.endsWith(\".js\"))\n .sort();\n let batch_number = await db.runQuery({\n sql: \"select max(batch) as next_batch from migrations\",\n bindings: [],\n });\n batch_number = batch_number[0].next_batch || 0;\n batch_number++;\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at ASC\",\n bindings: [],\n });\n\n const completed_migrations = migrations.map((r: any) => r.filename);\n const pending_migrations = files.filter(\n (file) => !completed_migrations.includes(file),\n );\n\n let migrated_count = 0;\n for (const class_to_migrate of pending_migrations) {\n logger().info(`migrating up ${class_to_migrate}`);\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n const c: Migration = new ClassToMigrate();\n await c.up(db.getSchema());\n await db.runQuery({\n sql: \"insert into migrations (filename, batch) values ($1,$2)\",\n bindings: [class_to_migrate, batch_number],\n });\n migrated_count++;\n }\n\n if (migrated_count === 0) {\n logger().warn(\"no migrations to run!\");\n return;\n }\n\n logger().info(`migrated ${migrated_count} migrations successfully!`);\n return;\n });\n }\n}\n\ncli().register(MigrateCommand);\n"],"mappings":";;AAAA,SAAS,KAAK,MAAM,UAAU,cAAc;AAC5C,SAAS,SAAS,cAAc;AAEhC,SAAS,wBAAwB;AACjC,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,cAAc;AAGhB,MAAM,uBAAuB,QAAQ;AAAA,EAT5C,OAS4C;AAAA;AAAA;AAAA,EAC1C,OAAO,QAAQ,CAAC,CAAC,SAAS,CAAC;AAAA,EAE3B,QAAQ,OAAO,QAAQ,WAAW,OAAO;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,UAAU,OAAO,QAAQ,aAAa,OAAO;AAAA,IAC3C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAAU;AACd,UAAM,iBAAiB,IAAI,YAAY;AAErC,YAAM,KAAK,SAAS;AACpB,YAAM,SAAS,GAAG,UAAU;AAE5B,UAAI,KAAK,OAAO;AACd,cAAM,IAAI,MAAM,iBAAiB;AAAA,MACnC;AAEA,UAAI,KAAK,SAAS;AAChB,eAAO,EAAE,KAAK,4BAA4B;AAE1C,cAAM,sBAAsB,MAAM,GAAG,SAAS;AAAA,UAC5C,KAAK;AAAA,UACL,UAAU,CAAC;AAAA,QACb,CAAC;AAED,cAAMA,iBAAgB,OAAO,IAAI,gBAAgB;AAEjD,mBAAW,oBAAoB,qBAAqB;AAClD,iBAAO,EAAE,KAAK,gBAAgB,iBAAiB,QAAQ,EAAE;AACzD,cAAI;AACF,kBAAM,kBACJ,MAAM,OAAO,KAAK,KAAKA,gBAAe,iBAAiB,QAAQ,IAC/D;AACF,kBAAM,oBAA+B,IAAI,eAAe;AAGxD,kBAAM,kBAAkB,KAAK,GAAG,UAAU,CAAC;AAG3C,kBAAM,GAAG,SAAS;AAAA,cAChB,KAAK;AAAA,cACL,UAAU,CAAC,iBAAiB,QAAQ;AAAA,YACtC,CAAC;AAAA,UACH,SAAS,OAAO;AACd,mBAAO,EAAE;AAAA,cACP,gCAAgC,iBAAiB,QAAQ,KAAK,KAAK;AAAA,YACrE;AACA,kBAAM;AAAA,UACR;AAAA,QACF;AAEA,eAAO,EAAE;AAAA,UACP,eAAe,oBAAoB,MAAM;AAAA,QAC3C;AAAA,MACF;AAGA,UAAI,CAAE,MAAM,OAAO,YAAY,YAAY,GAAI;AAC7C,cAAM,OAAO,YAAY,cAAc,CAAC,cAAyB;AAC/D,oBAAU,GAAG;AACb,oBAAU,WAAW;AACrB,oBAAU,OAAO,UAAU;AAC3B,oBAAU,QAAQ,OAAO;AAAA,QAC3B,CAAC;AAAA,MACH;AAEA,YAAM,gBAAgB,OAAO,IAAI,gBAAgB;AACjD,UAAI,QAAkB,CAAC;AAEvB,YAAM,aAAa,MAAM,GAAG,QAAQ,aAAa;AACjD,cAAQ,WACL,OAAO,CAAC,UAAU,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,KAAK,CAAC,EAChE,KAAK;AACR,UAAI,eAAe,MAAM,GAAG,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,UAAU,CAAC;AAAA,MACb,CAAC;AACD,qBAAe,aAAa,CAAC,EAAE,cAAc;AAC7C;AAEA,YAAM,aAAa,MAAM,GAAG,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,UAAU,CAAC;AAAA,MACb,CAAC;AAED,YAAM,uBAAuB,WAAW,IAAI,CAAC,MAAW,EAAE,QAAQ;AAClE,YAAM,qBAAqB,MAAM;AAAA,QAC/B,CAAC,SAAS,CAAC,qBAAqB,SAAS,IAAI;AAAA,MAC/C;AAEA,UAAI,iBAAiB;AACrB,iBAAW,oBAAoB,oBAAoB;AACjD,eAAO,EAAE,KAAK,gBAAgB,gBAAgB,EAAE;AAChD,cAAM,kBACJ,MAAM,OAAO,KAAK,KAAK,eAAe,gBAAgB,IACtD;AACF,cAAM,IAAe,IAAI,eAAe;AACxC,cAAM,EAAE,GAAG,GAAG,UAAU,CAAC;AACzB,cAAM,GAAG,SAAS;AAAA,UAChB,KAAK;AAAA,UACL,UAAU,CAAC,kBAAkB,YAAY;AAAA,QAC3C,CAAC;AACD;AAAA,MACF;AAEA,UAAI,mBAAmB,GAAG;AACxB,eAAO,EAAE,KAAK,uBAAuB;AACrC;AAAA,MACF;AAEA,aAAO,EAAE,KAAK,YAAY,cAAc,2BAA2B;AACnE;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAI,EAAE,SAAS,cAAc;","names":["migrationsDir"]}
1
+ {"version":3,"sources":["../../../../src/app/console/migrate/MigrateCommand.mts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { Blueprint } from \"@devbro/neko-sql\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\n\nexport class MigrateCommand extends Command {\n static paths = [[`migrate`]];\n\n fresh = Option.Boolean(`--fresh`, false, {\n description: `whether to delete and recreate database`,\n });\n\n refresh = Option.Boolean(`--refresh`, false, {\n description: `whether to drop all tables before running migrations by using rollback function`,\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n if (this.fresh) {\n throw new Error(\"not implemented\");\n }\n\n if (this.refresh) {\n logger().info(\"reverting all migrations!!\");\n // read all migrations and undo them all\n const existing_migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC\",\n parts: [],\n bindings: [],\n });\n\n const migrationsDir = config.get(\"migration.path\");\n\n for (const migration_record of existing_migrations) {\n logger().info(`rolling back ${migration_record.filename}`);\n try {\n const MigrationClass = (\n await import(path.join(migrationsDir, migration_record.filename))\n ).default;\n const migrationInstance: Migration = new MigrationClass();\n\n // Call the down method to rollback the migration\n await migrationInstance.down(db.getSchema());\n\n // Remove the migration record from the migrations table\n await db.runQuery({\n sql: \"delete from migrations where filename = $1\",\n parts: [],\n bindings: [migration_record.filename],\n });\n } catch (error) {\n logger().error(\n `Failed to rollback migration ${migration_record.filename}: ${error}`,\n );\n throw error;\n }\n }\n\n logger().info(\n `rolled back ${existing_migrations.length} migrations successfully!`,\n );\n }\n\n //create migration table if not exists\n if (!(await schema.tableExists(\"migrations\"))) {\n await schema.createTable(\"migrations\", (blueprint: Blueprint) => {\n blueprint.id();\n blueprint.timestamps();\n blueprint.string(\"filename\");\n blueprint.integer(\"batch\");\n });\n }\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries\n .filter((entry) => entry.endsWith(\".ts\") || entry.endsWith(\".js\"))\n .sort();\n let batch_number = await db.runQuery({\n sql: \"select max(batch) as next_batch from migrations\",\n parts: [],\n bindings: [],\n });\n batch_number = batch_number[0].next_batch || 0;\n batch_number++;\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at ASC\",\n parts: [],\n bindings: [],\n });\n\n const completed_migrations = migrations.map((r: any) => r.filename);\n const pending_migrations = files.filter(\n (file) => !completed_migrations.includes(file),\n );\n\n let migrated_count = 0;\n for (const class_to_migrate of pending_migrations) {\n logger().info(`migrating up ${class_to_migrate}`);\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n const c: Migration = new ClassToMigrate();\n await c.up(db.getSchema());\n await db.runQuery({\n sql: \"insert into migrations (filename, batch) values ($1,$2)\",\n parts: [],\n bindings: [class_to_migrate, batch_number],\n });\n migrated_count++;\n }\n\n if (migrated_count === 0) {\n logger().warn(\"no migrations to run!\");\n return;\n }\n\n logger().info(`migrated ${migrated_count} migrations successfully!`);\n return;\n });\n }\n}\n\ncli().register(MigrateCommand);\n"],"mappings":"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","names":["migrationsDir"]}
@@ -26,6 +26,7 @@ class MigrateRollbackCommand extends Command {
26
26
  files = dirEntries.filter((entry) => entry.endsWith(".ts")).sort();
27
27
  const migrations = await db.runQuery({
28
28
  sql: "select * from migrations order by created_at DESC limit $1",
29
+ parts: [],
29
30
  bindings: [this.steps]
30
31
  });
31
32
  for (const migration of migrations) {
@@ -36,6 +37,7 @@ class MigrateRollbackCommand extends Command {
36
37
  await c.down(db.getSchema());
37
38
  await db.runQuery({
38
39
  sql: "delete from migrations where id = $1",
40
+ parts: [],
39
41
  bindings: [migration.id]
40
42
  });
41
43
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/app/console/migrate/MigrateRollbackCommand.mts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\nimport * as t from \"typanion\";\n\nexport class MigrateRollbackCommand extends Command {\n static paths = [[`migrate`, \"rollback\"]];\n\n steps = Option.String(`--steps`, \"1\", {\n description: `how many migrations to rollback`,\n validator: t.isNumber(),\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries.filter((entry) => entry.endsWith(\".ts\")).sort();\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC limit $1\",\n bindings: [this.steps],\n });\n\n for (const migration of migrations) {\n const class_to_migrate = migration.filename;\n logger().info(`rolling back ${class_to_migrate}`);\n\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n\n const c: Migration = new ClassToMigrate();\n await c.down(db.getSchema());\n await db.runQuery({\n sql: \"delete from migrations where id = $1\",\n bindings: [migration.id],\n });\n }\n });\n }\n}\n\ncli().register(MigrateRollbackCommand);\n"],"mappings":";;AAAA,SAAS,KAAK,MAAM,UAAU,cAAc;AAC5C,SAAS,SAAS,cAAc;AAChC,SAAS,wBAAwB;AACjC,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,cAAc;AAEvB,YAAY,OAAO;AAEZ,MAAM,+BAA+B,QAAQ;AAAA,EATpD,OASoD;AAAA;AAAA;AAAA,EAClD,OAAO,QAAQ,CAAC,CAAC,WAAW,UAAU,CAAC;AAAA,EAEvC,QAAQ,OAAO,OAAO,WAAW,KAAK;AAAA,IACpC,aAAa;AAAA,IACb,WAAW,EAAE,SAAS;AAAA,EACxB,CAAC;AAAA,EAED,MAAM,UAAU;AACd,UAAM,iBAAiB,IAAI,YAAY;AAErC,YAAM,KAAK,SAAS;AACpB,YAAM,SAAS,GAAG,UAAU;AAE5B,YAAM,gBAAgB,OAAO,IAAI,gBAAgB;AACjD,UAAI,QAAkB,CAAC;AAEvB,YAAM,aAAa,MAAM,GAAG,QAAQ,aAAa;AACjD,cAAQ,WAAW,OAAO,CAAC,UAAU,MAAM,SAAS,KAAK,CAAC,EAAE,KAAK;AAEjE,YAAM,aAAa,MAAM,GAAG,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,UAAU,CAAC,KAAK,KAAK;AAAA,MACvB,CAAC;AAED,iBAAW,aAAa,YAAY;AAClC,cAAM,mBAAmB,UAAU;AACnC,eAAO,EAAE,KAAK,gBAAgB,gBAAgB,EAAE;AAEhD,cAAM,kBACJ,MAAM,OAAO,KAAK,KAAK,eAAe,gBAAgB,IACtD;AAEF,cAAM,IAAe,IAAI,eAAe;AACxC,cAAM,EAAE,KAAK,GAAG,UAAU,CAAC;AAC3B,cAAM,GAAG,SAAS;AAAA,UAChB,KAAK;AAAA,UACL,UAAU,CAAC,UAAU,EAAE;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAI,EAAE,SAAS,sBAAsB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/app/console/migrate/MigrateRollbackCommand.mts"],"sourcesContent":["import { cli, db as database, logger } from \"../../../facades.mjs\";\nimport { Command, Option } from \"clipanion\";\nimport { context_provider } from \"@devbro/neko-context\";\nimport path from \"path\";\nimport fs from \"fs/promises\";\nimport { config } from \"@devbro/neko-config\";\nimport { Migration } from \"@devbro/neko-sql\";\nimport * as t from \"typanion\";\n\nexport class MigrateRollbackCommand extends Command {\n static paths = [[`migrate`, \"rollback\"]];\n\n steps = Option.String(`--steps`, \"1\", {\n description: `how many migrations to rollback`,\n validator: t.isNumber(),\n });\n\n async execute() {\n await context_provider.run(async () => {\n // this.context.stdout.write(`Hello Migrate Command!\\n`);\n const db = database();\n const schema = db.getSchema();\n\n const migrationsDir = config.get(\"migration.path\");\n let files: string[] = [];\n\n const dirEntries = await fs.readdir(migrationsDir);\n files = dirEntries.filter((entry) => entry.endsWith(\".ts\")).sort();\n\n const migrations = await db.runQuery({\n sql: \"select * from migrations order by created_at DESC limit $1\",\n parts: [],\n bindings: [this.steps],\n });\n\n for (const migration of migrations) {\n const class_to_migrate = migration.filename;\n logger().info(`rolling back ${class_to_migrate}`);\n\n const ClassToMigrate = (\n await import(path.join(migrationsDir, class_to_migrate))\n ).default;\n\n const c: Migration = new ClassToMigrate();\n await c.down(db.getSchema());\n await db.runQuery({\n sql: \"delete from migrations where id = $1\",\n parts: [],\n bindings: [migration.id],\n });\n }\n });\n }\n}\n\ncli().register(MigrateRollbackCommand);\n"],"mappings":";;AAAA,SAAS,KAAK,MAAM,UAAU,cAAc;AAC5C,SAAS,SAAS,cAAc;AAChC,SAAS,wBAAwB;AACjC,OAAO,UAAU;AACjB,OAAO,QAAQ;AACf,SAAS,cAAc;AAEvB,YAAY,OAAO;AAEZ,MAAM,+BAA+B,QAAQ;AAAA,EATpD,OASoD;AAAA;AAAA;AAAA,EAClD,OAAO,QAAQ,CAAC,CAAC,WAAW,UAAU,CAAC;AAAA,EAEvC,QAAQ,OAAO,OAAO,WAAW,KAAK;AAAA,IACpC,aAAa;AAAA,IACb,WAAW,EAAE,SAAS;AAAA,EACxB,CAAC;AAAA,EAED,MAAM,UAAU;AACd,UAAM,iBAAiB,IAAI,YAAY;AAErC,YAAM,KAAK,SAAS;AACpB,YAAM,SAAS,GAAG,UAAU;AAE5B,YAAM,gBAAgB,OAAO,IAAI,gBAAgB;AACjD,UAAI,QAAkB,CAAC;AAEvB,YAAM,aAAa,MAAM,GAAG,QAAQ,aAAa;AACjD,cAAQ,WAAW,OAAO,CAAC,UAAU,MAAM,SAAS,KAAK,CAAC,EAAE,KAAK;AAEjE,YAAM,aAAa,MAAM,GAAG,SAAS;AAAA,QACnC,KAAK;AAAA,QACL,OAAO,CAAC;AAAA,QACR,UAAU,CAAC,KAAK,KAAK;AAAA,MACvB,CAAC;AAED,iBAAW,aAAa,YAAY;AAClC,cAAM,mBAAmB,UAAU;AACnC,eAAO,EAAE,KAAK,gBAAgB,gBAAgB,EAAE;AAEhD,cAAM,kBACJ,MAAM,OAAO,KAAK,KAAK,eAAe,gBAAgB,IACtD;AAEF,cAAM,IAAe,IAAI,eAAe;AACxC,cAAM,EAAE,KAAK,GAAG,UAAU,CAAC;AAC3B,cAAM,GAAG,SAAS;AAAA,UAChB,KAAK;AAAA,UACL,OAAO,CAAC;AAAA,UACR,UAAU,CAAC,UAAU,EAAE;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAI,EAAE,SAAS,sBAAsB;","names":[]}
@@ -115,6 +115,9 @@ var CompiledRoute = class {
115
115
  }
116
116
  prepareOutputJsonFormat(obj) {
117
117
  function traverse(value) {
118
+ if (value === void 0 || value === null) {
119
+ return null;
120
+ }
118
121
  if (!value || typeof value !== "object") {
119
122
  return value;
120
123
  }
@@ -118,6 +118,9 @@ var CompiledRoute = class {
118
118
  }
119
119
  prepareOutputJsonFormat(obj) {
120
120
  function traverse(value) {
121
+ if (value === void 0 || value === null) {
122
+ return null;
123
+ }
121
124
  if (!value || typeof value !== "object") {
122
125
  return value;
123
126
  }
@@ -116,6 +116,9 @@ var CompiledRoute = class {
116
116
  }
117
117
  prepareOutputJsonFormat(obj) {
118
118
  function traverse(value) {
119
+ if (value === void 0 || value === null) {
120
+ return null;
121
+ }
119
122
  if (!value || typeof value !== "object") {
120
123
  return value;
121
124
  }
@@ -114,6 +114,9 @@ var CompiledRoute = class {
114
114
  }
115
115
  prepareOutputJsonFormat(obj) {
116
116
  function traverse(value) {
117
+ if (value === void 0 || value === null) {
118
+ return null;
119
+ }
117
120
  if (!value || typeof value !== "object") {
118
121
  return value;
119
122
  }
@@ -114,6 +114,9 @@ var CompiledRoute = class {
114
114
  }
115
115
  prepareOutputJsonFormat(obj) {
116
116
  function traverse(value) {
117
+ if (value === void 0 || value === null) {
118
+ return null;
119
+ }
117
120
  if (!value || typeof value !== "object") {
118
121
  return value;
119
122
  }
@@ -1277,6 +1277,9 @@ var CompiledRoute = class {
1277
1277
  }
1278
1278
  prepareOutputJsonFormat(obj) {
1279
1279
  function traverse(value) {
1280
+ if (value === void 0 || value === null) {
1281
+ return null;
1282
+ }
1280
1283
  if (!value || typeof value !== "object") {
1281
1284
  return value;
1282
1285
  }
@@ -1939,6 +1942,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1939
1942
  logger().info("reverting all migrations!!");
1940
1943
  const existing_migrations = await db2.runQuery({
1941
1944
  sql: "select * from migrations order by created_at DESC",
1945
+ parts: [],
1942
1946
  bindings: []
1943
1947
  });
1944
1948
  const migrationsDir2 = import_neko_config2.config.get("migration.path");
@@ -1950,6 +1954,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1950
1954
  await migrationInstance.down(db2.getSchema());
1951
1955
  await db2.runQuery({
1952
1956
  sql: "delete from migrations where filename = $1",
1957
+ parts: [],
1953
1958
  bindings: [migration_record.filename]
1954
1959
  });
1955
1960
  } catch (error) {
@@ -1977,12 +1982,14 @@ var MigrateCommand = class extends import_clipanion2.Command {
1977
1982
  files = dirEntries.filter((entry) => entry.endsWith(".ts") || entry.endsWith(".js")).sort();
1978
1983
  let batch_number = await db2.runQuery({
1979
1984
  sql: "select max(batch) as next_batch from migrations",
1985
+ parts: [],
1980
1986
  bindings: []
1981
1987
  });
1982
1988
  batch_number = batch_number[0].next_batch || 0;
1983
1989
  batch_number++;
1984
1990
  const migrations = await db2.runQuery({
1985
1991
  sql: "select * from migrations order by created_at ASC",
1992
+ parts: [],
1986
1993
  bindings: []
1987
1994
  });
1988
1995
  const completed_migrations = migrations.map((r) => r.filename);
@@ -1997,6 +2004,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1997
2004
  await c.up(db2.getSchema());
1998
2005
  await db2.runQuery({
1999
2006
  sql: "insert into migrations (filename, batch) values ($1,$2)",
2007
+ parts: [],
2000
2008
  bindings: [class_to_migrate, batch_number]
2001
2009
  });
2002
2010
  migrated_count++;
@@ -2088,6 +2096,7 @@ var MigrateRollbackCommand = class extends import_clipanion4.Command {
2088
2096
  files = dirEntries.filter((entry) => entry.endsWith(".ts")).sort();
2089
2097
  const migrations = await db2.runQuery({
2090
2098
  sql: "select * from migrations order by created_at DESC limit $1",
2099
+ parts: [],
2091
2100
  bindings: [this.steps]
2092
2101
  });
2093
2102
  for (const migration of migrations) {
@@ -2098,6 +2107,7 @@ var MigrateRollbackCommand = class extends import_clipanion4.Command {
2098
2107
  await c.down(db2.getSchema());
2099
2108
  await db2.runQuery({
2100
2109
  sql: "delete from migrations where id = $1",
2110
+ parts: [],
2101
2111
  bindings: [migration.id]
2102
2112
  });
2103
2113
  }
@@ -114,6 +114,9 @@ var CompiledRoute = class {
114
114
  }
115
115
  prepareOutputJsonFormat(obj) {
116
116
  function traverse(value) {
117
+ if (value === void 0 || value === null) {
118
+ return null;
119
+ }
117
120
  if (!value || typeof value !== "object") {
118
121
  return value;
119
122
  }
@@ -114,6 +114,9 @@ var CompiledRoute = class {
114
114
  }
115
115
  prepareOutputJsonFormat(obj) {
116
116
  function traverse(value) {
117
+ if (value === void 0 || value === null) {
118
+ return null;
119
+ }
117
120
  if (!value || typeof value !== "object") {
118
121
  return value;
119
122
  }
@@ -776,6 +779,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
776
779
  logger().info("reverting all migrations!!");
777
780
  const existing_migrations = await db2.runQuery({
778
781
  sql: "select * from migrations order by created_at DESC",
782
+ parts: [],
779
783
  bindings: []
780
784
  });
781
785
  const migrationsDir2 = import_neko_config2.config.get("migration.path");
@@ -787,6 +791,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
787
791
  await migrationInstance.down(db2.getSchema());
788
792
  await db2.runQuery({
789
793
  sql: "delete from migrations where filename = $1",
794
+ parts: [],
790
795
  bindings: [migration_record.filename]
791
796
  });
792
797
  } catch (error) {
@@ -814,12 +819,14 @@ var MigrateCommand = class extends import_clipanion2.Command {
814
819
  files = dirEntries.filter((entry) => entry.endsWith(".ts") || entry.endsWith(".js")).sort();
815
820
  let batch_number = await db2.runQuery({
816
821
  sql: "select max(batch) as next_batch from migrations",
822
+ parts: [],
817
823
  bindings: []
818
824
  });
819
825
  batch_number = batch_number[0].next_batch || 0;
820
826
  batch_number++;
821
827
  const migrations = await db2.runQuery({
822
828
  sql: "select * from migrations order by created_at ASC",
829
+ parts: [],
823
830
  bindings: []
824
831
  });
825
832
  const completed_migrations = migrations.map((r) => r.filename);
@@ -834,6 +841,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
834
841
  await c.up(db2.getSchema());
835
842
  await db2.runQuery({
836
843
  sql: "insert into migrations (filename, batch) values ($1,$2)",
844
+ parts: [],
837
845
  bindings: [class_to_migrate, batch_number]
838
846
  });
839
847
  migrated_count++;
@@ -1269,6 +1269,9 @@ var CompiledRoute = class {
1269
1269
  }
1270
1270
  prepareOutputJsonFormat(obj) {
1271
1271
  function traverse(value) {
1272
+ if (value === void 0 || value === null) {
1273
+ return null;
1274
+ }
1272
1275
  if (!value || typeof value !== "object") {
1273
1276
  return value;
1274
1277
  }
@@ -1929,6 +1932,7 @@ var MigrateRollbackCommand = class extends import_clipanion2.Command {
1929
1932
  files = dirEntries.filter((entry) => entry.endsWith(".ts")).sort();
1930
1933
  const migrations = await db2.runQuery({
1931
1934
  sql: "select * from migrations order by created_at DESC limit $1",
1935
+ parts: [],
1932
1936
  bindings: [this.steps]
1933
1937
  });
1934
1938
  for (const migration of migrations) {
@@ -1939,6 +1943,7 @@ var MigrateRollbackCommand = class extends import_clipanion2.Command {
1939
1943
  await c.down(db2.getSchema());
1940
1944
  await db2.runQuery({
1941
1945
  sql: "delete from migrations where id = $1",
1946
+ parts: [],
1942
1947
  bindings: [migration.id]
1943
1948
  });
1944
1949
  }
@@ -1271,6 +1271,9 @@ var CompiledRoute = class {
1271
1271
  }
1272
1272
  prepareOutputJsonFormat(obj) {
1273
1273
  function traverse(value) {
1274
+ if (value === void 0 || value === null) {
1275
+ return null;
1276
+ }
1274
1277
  if (!value || typeof value !== "object") {
1275
1278
  return value;
1276
1279
  }
@@ -1933,6 +1936,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1933
1936
  logger().info("reverting all migrations!!");
1934
1937
  const existing_migrations = await db2.runQuery({
1935
1938
  sql: "select * from migrations order by created_at DESC",
1939
+ parts: [],
1936
1940
  bindings: []
1937
1941
  });
1938
1942
  const migrationsDir2 = import_neko_config2.config.get("migration.path");
@@ -1944,6 +1948,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1944
1948
  await migrationInstance.down(db2.getSchema());
1945
1949
  await db2.runQuery({
1946
1950
  sql: "delete from migrations where filename = $1",
1951
+ parts: [],
1947
1952
  bindings: [migration_record.filename]
1948
1953
  });
1949
1954
  } catch (error) {
@@ -1971,12 +1976,14 @@ var MigrateCommand = class extends import_clipanion2.Command {
1971
1976
  files = dirEntries.filter((entry) => entry.endsWith(".ts") || entry.endsWith(".js")).sort();
1972
1977
  let batch_number = await db2.runQuery({
1973
1978
  sql: "select max(batch) as next_batch from migrations",
1979
+ parts: [],
1974
1980
  bindings: []
1975
1981
  });
1976
1982
  batch_number = batch_number[0].next_batch || 0;
1977
1983
  batch_number++;
1978
1984
  const migrations = await db2.runQuery({
1979
1985
  sql: "select * from migrations order by created_at ASC",
1986
+ parts: [],
1980
1987
  bindings: []
1981
1988
  });
1982
1989
  const completed_migrations = migrations.map((r) => r.filename);
@@ -1991,6 +1998,7 @@ var MigrateCommand = class extends import_clipanion2.Command {
1991
1998
  await c.up(db2.getSchema());
1992
1999
  await db2.runQuery({
1993
2000
  sql: "insert into migrations (filename, batch) values ($1,$2)",
2001
+ parts: [],
1994
2002
  bindings: [class_to_migrate, batch_number]
1995
2003
  });
1996
2004
  migrated_count++;
@@ -2082,6 +2090,7 @@ var MigrateRollbackCommand = class extends import_clipanion4.Command {
2082
2090
  files = dirEntries.filter((entry) => entry.endsWith(".ts")).sort();
2083
2091
  const migrations = await db2.runQuery({
2084
2092
  sql: "select * from migrations order by created_at DESC limit $1",
2093
+ parts: [],
2085
2094
  bindings: [this.steps]
2086
2095
  });
2087
2096
  for (const migration of migrations) {
@@ -2092,6 +2101,7 @@ var MigrateRollbackCommand = class extends import_clipanion4.Command {
2092
2101
  await c.down(db2.getSchema());
2093
2102
  await db2.runQuery({
2094
2103
  sql: "delete from migrations where id = $1",
2104
+ parts: [],
2095
2105
  bindings: [migration.id]
2096
2106
  });
2097
2107
  }
@@ -114,6 +114,9 @@ var CompiledRoute = class {
114
114
  }
115
115
  prepareOutputJsonFormat(obj) {
116
116
  function traverse(value) {
117
+ if (value === void 0 || value === null) {
118
+ return null;
119
+ }
117
120
  if (!value || typeof value !== "object") {
118
121
  return value;
119
122
  }
@@ -115,6 +115,9 @@ var CompiledRoute = class {
115
115
  }
116
116
  prepareOutputJsonFormat(obj) {
117
117
  function traverse(value) {
118
+ if (value === void 0 || value === null) {
119
+ return null;
120
+ }
118
121
  if (!value || typeof value !== "object") {
119
122
  return value;
120
123
  }
@@ -123,6 +123,9 @@ var CompiledRoute = class {
123
123
  }
124
124
  prepareOutputJsonFormat(obj) {
125
125
  function traverse(value) {
126
+ if (value === void 0 || value === null) {
127
+ return null;
128
+ }
126
129
  if (!value || typeof value !== "object") {
127
130
  return value;
128
131
  }
@@ -124,6 +124,9 @@ var CompiledRoute = class {
124
124
  }
125
125
  prepareOutputJsonFormat(obj) {
126
126
  function traverse(value) {
127
+ if (value === void 0 || value === null) {
128
+ return null;
129
+ }
127
130
  if (!value || typeof value !== "object") {
128
131
  return value;
129
132
  }
@@ -133,6 +133,9 @@ var init_CompiledRoute = __esm({
133
133
  }
134
134
  prepareOutputJsonFormat(obj) {
135
135
  function traverse(value) {
136
+ if (value === void 0 || value === null) {
137
+ return null;
138
+ }
136
139
  if (!value || typeof value !== "object") {
137
140
  return value;
138
141
  }
@@ -904,6 +907,7 @@ var init_MigrateCommand = __esm({
904
907
  logger().info("reverting all migrations!!");
905
908
  const existing_migrations = await db2.runQuery({
906
909
  sql: "select * from migrations order by created_at DESC",
910
+ parts: [],
907
911
  bindings: []
908
912
  });
909
913
  const migrationsDir2 = import_neko_config2.config.get("migration.path");
@@ -915,6 +919,7 @@ var init_MigrateCommand = __esm({
915
919
  await migrationInstance.down(db2.getSchema());
916
920
  await db2.runQuery({
917
921
  sql: "delete from migrations where filename = $1",
922
+ parts: [],
918
923
  bindings: [migration_record.filename]
919
924
  });
920
925
  } catch (error) {
@@ -942,12 +947,14 @@ var init_MigrateCommand = __esm({
942
947
  files = dirEntries.filter((entry) => entry.endsWith(".ts") || entry.endsWith(".js")).sort();
943
948
  let batch_number = await db2.runQuery({
944
949
  sql: "select max(batch) as next_batch from migrations",
950
+ parts: [],
945
951
  bindings: []
946
952
  });
947
953
  batch_number = batch_number[0].next_batch || 0;
948
954
  batch_number++;
949
955
  const migrations = await db2.runQuery({
950
956
  sql: "select * from migrations order by created_at ASC",
957
+ parts: [],
951
958
  bindings: []
952
959
  });
953
960
  const completed_migrations = migrations.map((r) => r.filename);
@@ -962,6 +969,7 @@ var init_MigrateCommand = __esm({
962
969
  await c.up(db2.getSchema());
963
970
  await db2.runQuery({
964
971
  sql: "insert into migrations (filename, batch) values ($1,$2)",
972
+ parts: [],
965
973
  bindings: [class_to_migrate, batch_number]
966
974
  });
967
975
  migrated_count++;
@@ -2219,6 +2227,7 @@ var init_MigrateRollbackCommand = __esm({
2219
2227
  files = dirEntries.filter((entry) => entry.endsWith(".ts")).sort();
2220
2228
  const migrations = await db2.runQuery({
2221
2229
  sql: "select * from migrations order by created_at DESC limit $1",
2230
+ parts: [],
2222
2231
  bindings: [this.steps]
2223
2232
  });
2224
2233
  for (const migration of migrations) {
@@ -2229,6 +2238,7 @@ var init_MigrateRollbackCommand = __esm({
2229
2238
  await c.down(db2.getSchema());
2230
2239
  await db2.runQuery({
2231
2240
  sql: "delete from migrations where id = $1",
2241
+ parts: [],
2232
2242
  bindings: [migration.id]
2233
2243
  });
2234
2244
  }
@@ -115,6 +115,9 @@ var CompiledRoute = class {
115
115
  }
116
116
  prepareOutputJsonFormat(obj) {
117
117
  function traverse(value) {
118
+ if (value === void 0 || value === null) {
119
+ return null;
120
+ }
118
121
  if (!value || typeof value !== "object") {
119
122
  return value;
120
123
  }
@@ -115,6 +115,9 @@ var CompiledRoute = class {
115
115
  }
116
116
  prepareOutputJsonFormat(obj) {
117
117
  function traverse(value) {
118
+ if (value === void 0 || value === null) {
119
+ return null;
120
+ }
118
121
  if (!value || typeof value !== "object") {
119
122
  return value;
120
123
  }
@@ -128,6 +128,9 @@ var CompiledRoute = class {
128
128
  }
129
129
  prepareOutputJsonFormat(obj) {
130
130
  function traverse(value) {
131
+ if (value === void 0 || value === null) {
132
+ return null;
133
+ }
131
134
  if (!value || typeof value !== "object") {
132
135
  return value;
133
136
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",