@h3ravel/arquebus 0.4.1 → 0.5.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.
@@ -1,5 +1,5 @@
1
1
  import { __export } from "./chunk-PECeCxCb.js";
2
- import { Logger, TaskManager } from "@h3ravel/shared";
2
+ import { FileSystem, Logger, TaskManager } from "@h3ravel/shared";
3
3
  import { assign, camel, diff, flat, get, isArray, isEmpty, isEqual, isString, omit, pick, set, snake, trim } from "radashi";
4
4
  import advancedFormat from "dayjs/plugin/advancedFormat.js";
5
5
  import dayjs from "dayjs";
@@ -8,12 +8,11 @@ import Knex$1 from "knex";
8
8
  import path from "path";
9
9
  import { existsSync } from "fs";
10
10
  import pluralize from "pluralize";
11
- import fs from "node:fs/promises";
11
+ import fs, { copyFile, mkdir, readFile, readdir, writeFile } from "node:fs/promises";
12
12
  import { access } from "fs/promises";
13
13
  import escalade from "escalade/sync";
14
14
  import resolveFrom from "resolve-from";
15
- import { existsSync as existsSync$1, readFileSync } from "node:fs";
16
- import { dirname } from "node:path";
15
+ import path$1, { dirname } from "node:path";
17
16
  import { fileURLToPath } from "node:url";
18
17
 
19
18
  //#region src/migrations/migration-repository.ts
@@ -2338,8 +2337,8 @@ var HasManyThrough = class extends relation_default {
2338
2337
  const results = await this.take(1).get(columns);
2339
2338
  return results.count() > 0 ? results.first() : null;
2340
2339
  }
2341
- async firstOrFail(columns = ["*"]) {
2342
- const model = await this.first(columns);
2340
+ async firstOrFail(...columns) {
2341
+ const model = await this.first(...columns);
2343
2342
  if (model) return model;
2344
2343
  throw new ModelNotFoundError().setModel(this.related.constructor);
2345
2344
  }
@@ -2378,7 +2377,7 @@ var HasManyThrough = class extends relation_default {
2378
2377
  }
2379
2378
  async paginate(perPage = null, columns = ["*"], pageName = "page", page = null) {
2380
2379
  this.query.addSelect(this.shouldSelect(columns));
2381
- return await this.query.paginate(perPage, columns, pageName, page);
2380
+ return await this.query.paginate(perPage ?? 15, columns, pageName, page);
2382
2381
  }
2383
2382
  shouldSelect(columns = ["*"]) {
2384
2383
  if ((columns === null || columns === void 0 ? void 0 : columns.at(0)) == "*") columns = [this.related.getTable() + ".*"];
@@ -2656,9 +2655,6 @@ const UniqueIds = (Model$1) => {
2656
2655
  uniqueIds() {
2657
2656
  return [];
2658
2657
  }
2659
- newUniqueId() {
2660
- return null;
2661
- }
2662
2658
  setUniqueIds() {
2663
2659
  const uniqueIds = this.uniqueIds();
2664
2660
  for (const column of uniqueIds) if (this[column] === null || this[column] === void 0) this[column] = this.newUniqueId();
@@ -2680,6 +2676,7 @@ var Paginator = class {
2680
2676
  options = {};
2681
2677
  static setFormatter(formatter) {
2682
2678
  if (typeof formatter !== "function" && formatter !== null && formatter !== void 0) throw new Error("Paginator formatter must be a function or null");
2679
+ if (!formatter) return;
2683
2680
  this.formatter = formatter;
2684
2681
  }
2685
2682
  constructor(items, total, perPage, currentPage = 1, options = {}) {
@@ -2768,8 +2765,10 @@ var QueryBuilder = class QueryBuilder extends Inference$2 {
2768
2765
  asProxy() {
2769
2766
  return new Proxy(this, {
2770
2767
  get: function(target, prop) {
2768
+ var _target$connector$cli;
2771
2769
  if (typeof target[prop] !== "undefined") return target[prop];
2772
2770
  if (["destroy", "schema"].includes(prop)) return target.connector.schema;
2771
+ const skipReturning = !!((_target$connector$cli = target.connector.client.config) === null || _target$connector$cli === void 0 || (_target$connector$cli = _target$connector$cli.client) === null || _target$connector$cli === void 0 ? void 0 : _target$connector$cli.includes("mysql")) && prop === "returning";
2773
2772
  if ([
2774
2773
  "select",
2775
2774
  "from",
@@ -2832,7 +2831,7 @@ var QueryBuilder = class QueryBuilder extends Inference$2 {
2832
2831
  "clearWhere",
2833
2832
  "clearHaving",
2834
2833
  "clearGroup"
2835
- ].includes(prop)) return (...args) => {
2834
+ ].includes(prop) && !skipReturning) return (...args) => {
2836
2835
  target.connector[prop](...args);
2837
2836
  return target.asProxy();
2838
2837
  };
@@ -2889,7 +2888,7 @@ var QueryBuilder = class QueryBuilder extends Inference$2 {
2889
2888
  } while (countResults === count);
2890
2889
  return true;
2891
2890
  }
2892
- async paginate(page = 1, perPage = 15) {
2891
+ async paginate(page = 1, perPage = 15, _pageName, _page) {
2893
2892
  const total = await this.clone().clearOrder().count("*");
2894
2893
  let results;
2895
2894
  if (total > 0) {
@@ -3128,14 +3127,15 @@ var arquebus_default = arquebus;
3128
3127
 
3129
3128
  //#endregion
3130
3129
  //#region src/model.ts
3131
- const BaseModel = compose(class {}, has_attributes_default, hides_attributes_default, has_relations_default, has_timestamps_default, has_hooks_default, has_global_scopes_default, unique_ids_default);
3130
+ const ModelClass = class {};
3131
+ const BaseModel = compose(ModelClass, has_attributes_default, hides_attributes_default, has_relations_default, has_timestamps_default, has_hooks_default, has_global_scopes_default, unique_ids_default);
3132
3132
  var Model = class Model extends BaseModel {
3133
- primaryKey = "id";
3134
3133
  builder = null;
3135
3134
  table = null;
3136
3135
  keyType = "int";
3137
3136
  incrementing = true;
3138
3137
  withCount = [];
3138
+ primaryKey = "id";
3139
3139
  perPage = 15;
3140
3140
  static globalScopes = {};
3141
3141
  static pluginInitializers = {};
@@ -3145,6 +3145,7 @@ var Model = class Model extends BaseModel {
3145
3145
  eagerLoad = {};
3146
3146
  exists = false;
3147
3147
  with = [];
3148
+ name;
3148
3149
  trx = null;
3149
3150
  constructor(attributes = {}) {
3150
3151
  super();
@@ -3916,8 +3917,8 @@ var BelongsToMany = class extends compose(relation_default, interacts_with_pivot
3916
3917
  const results = await this.take(1).get(columns);
3917
3918
  return results.count() > 0 ? results.first() : null;
3918
3919
  }
3919
- async firstOrFail(columns = ["*"]) {
3920
- const model = await this.first(columns);
3920
+ async firstOrFail(...columns) {
3921
+ const model = await this.first(...columns);
3921
3922
  if (model !== null) return model;
3922
3923
  throw new ModelNotFoundError().setModel(this.related.constructor);
3923
3924
  }
@@ -4093,7 +4094,9 @@ var Builder = class Builder extends Inference$1 {
4093
4094
  }
4094
4095
  asProxy() {
4095
4096
  return new Proxy(this, { get(target, prop) {
4097
+ var _target$query$connect;
4096
4098
  if (typeof target[prop] !== "undefined") return target[prop];
4099
+ const skipReturning = !!((_target$query$connect = target.query.connector) === null || _target$query$connect === void 0 || (_target$query$connect = _target$query$connect.client.config) === null || _target$query$connect === void 0 || (_target$query$connect = _target$query$connect.client) === null || _target$query$connect === void 0 ? void 0 : _target$query$connect.includes("mysql")) && prop === "returning";
4097
4100
  if ([
4098
4101
  "select",
4099
4102
  "from",
@@ -4156,7 +4159,7 @@ var Builder = class Builder extends Inference$1 {
4156
4159
  "clearWhere",
4157
4160
  "clearHaving",
4158
4161
  "clearGroup"
4159
- ].includes(prop)) return (...args) => {
4162
+ ].includes(prop) && !skipReturning) return (...args) => {
4160
4163
  target.query[prop](...args);
4161
4164
  return target.asProxy();
4162
4165
  };
@@ -5153,8 +5156,8 @@ var Utils = class {
5153
5156
  if (!resolved) return;
5154
5157
  return path.join(path.dirname(resolved), parts.join("/"));
5155
5158
  }
5156
- static async getMigrationPaths(cwd, migrator, defaultPath, path$1) {
5157
- if (path$1) return [join(cwd, path$1)];
5159
+ static async getMigrationPaths(cwd, migrator, defaultPath, path$2) {
5160
+ if (path$2) return [join(cwd, path$2)];
5158
5161
  return [...migrator.getPaths(), join(cwd, defaultPath)];
5159
5162
  }
5160
5163
  /**
@@ -5163,9 +5166,9 @@ var Utils = class {
5163
5166
  * @param path
5164
5167
  * @returns
5165
5168
  */
5166
- static async fileExists(path$1) {
5169
+ static async fileExists(path$2) {
5167
5170
  try {
5168
- await access(path$1);
5171
+ await access(path$2);
5169
5172
  return true;
5170
5173
  } catch {
5171
5174
  return false;
@@ -5336,6 +5339,12 @@ var Migrate = class {
5336
5339
  }
5337
5340
  };
5338
5341
 
5342
+ //#endregion
5343
+ //#region node_modules/.pnpm/tsdown@0.15.4_typescript@5.9.2/node_modules/tsdown/esm-shims.js
5344
+ const getFilename = () => fileURLToPath(import.meta.url);
5345
+ const getDirname = () => path$1.dirname(getFilename());
5346
+ const __dirname = /* @__PURE__ */ getDirname();
5347
+
5339
5348
  //#endregion
5340
5349
  //#region src/migrations/migration-creator.ts
5341
5350
  var MigrationCreator = class {
@@ -5354,10 +5363,10 @@ var MigrationCreator = class {
5354
5363
  * @returns
5355
5364
  */
5356
5365
  async create(name, dir, table, create = false) {
5357
- const stub = this.getStub(table, create);
5366
+ const stub = await this.getStub(table, create);
5358
5367
  const filePath = this.getPath(name, dir);
5359
5368
  await this.ensureDirectoryExists(path.dirname(filePath));
5360
- await fs.writeFile(filePath, this.populateStub(stub, table));
5369
+ await writeFile(filePath, this.populateStub(stub, table));
5361
5370
  await this.firePostCreateHooks(table, filePath);
5362
5371
  return filePath;
5363
5372
  }
@@ -5368,29 +5377,29 @@ var MigrationCreator = class {
5368
5377
  * @param callback
5369
5378
  */
5370
5379
  async publish(dir, callback) {
5371
- const migrationFiles = await fs.readdir(this.customStubPath ?? "");
5380
+ const migrationFiles = await readdir(this.customStubPath ?? "");
5372
5381
  await this.ensureDirectoryExists(dir);
5373
5382
  for (const migrationFile of migrationFiles) {
5374
5383
  const sourceFilePath = path.join(this.customStubPath ?? "", migrationFile);
5375
5384
  const destinationFilePath = path.join(dir, migrationFile);
5376
- await fs.copyFile(sourceFilePath, destinationFilePath);
5385
+ await copyFile(sourceFilePath, destinationFilePath);
5377
5386
  if (callback) callback(migrationFile, sourceFilePath, destinationFilePath);
5378
5387
  }
5379
5388
  }
5380
- getStub(table, create = false) {
5389
+ async getStub(table, create = false) {
5381
5390
  let stub;
5382
5391
  if (!table) {
5383
5392
  const customPath = path.join(this.customStubPath ?? "", `migration-${this.type}.stub`);
5384
5393
  console.log("\n", customPath, "---");
5385
- stub = existsSync$1(customPath) ? customPath : this.stubPath(`/migration-${this.type}.stub`);
5394
+ stub = await FileSystem.fileExists(customPath) ? customPath : this.stubPath(`/migration-${this.type}.stub`);
5386
5395
  } else if (create) {
5387
5396
  const customPath = path.join(this.customStubPath ?? "", `migration.create-${this.type}.stub`);
5388
- stub = existsSync$1(customPath) ? customPath : this.stubPath(`/migration.create-${this.type}.stub`);
5397
+ stub = await FileSystem.fileExists(customPath) ? customPath : this.stubPath(`/migration.create-${this.type}.stub`);
5389
5398
  } else {
5390
5399
  const customPath = path.join(this.customStubPath ?? "", `migration.update-${this.type}.stub`);
5391
- stub = existsSync$1(customPath) ? customPath : this.stubPath(`/migration.update-${this.type}.stub`);
5400
+ stub = await FileSystem.fileExists(customPath) ? customPath : this.stubPath(`/migration.update-${this.type}.stub`);
5392
5401
  }
5393
- return readFileSync(stub, "utf-8");
5402
+ return await readFile(stub, "utf-8");
5394
5403
  }
5395
5404
  populateStub(stub, table) {
5396
5405
  if (table !== null) stub = stub.replace(/DummyTable|{{\s*table\s*}}/g, table);
@@ -5410,7 +5419,7 @@ var MigrationCreator = class {
5410
5419
  this.postCreate.push(callback);
5411
5420
  }
5412
5421
  async ensureDirectoryExists(dir) {
5413
- await fs.mkdir(dir, { recursive: true });
5422
+ await mkdir(dir, { recursive: true });
5414
5423
  }
5415
5424
  stubPath(stub = "") {
5416
5425
  const __dirname$1 = this.getDirname(import.meta);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h3ravel/arquebus",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Arquebus ORM is a Beautiful, expressive ORM inspired by Laravel's Eloquent, designed for TypeScript applications and for the H3ravel Framework.",
5
5
  "homepage": "https://h3ravel.toneflix.net/arquebus",
6
6
  "bin": {
@@ -123,7 +123,7 @@
123
123
  ]
124
124
  },
125
125
  "dependencies": {
126
- "@h3ravel/shared": "^0.18.1",
126
+ "@h3ravel/shared": "^0.20.1",
127
127
  "chalk": "^5.6.2",
128
128
  "collect.js": "^4.36.1",
129
129
  "commander": "^14.0.1",
@@ -185,6 +185,6 @@
185
185
  "test:postgres": "cross-env DB=postgres vitest --project node",
186
186
  "test:sqlite": "cross-env DB=sqlite vitest --project node",
187
187
  "test:browser": "vitest --project browser",
188
- "release:patch": "pnpm build && git add . && git commit -m \"version: bump version and publish\" && pnpm version patch && pnpm publish --tag latest"
188
+ "release:patch": "pnpm build && git add . && git commit -m \"version: bump version\" && pnpm version patch && pnpm publish --tag latest"
189
189
  }
190
190
  }
package/types/builder.ts CHANGED
@@ -5,25 +5,29 @@ import type BModel from 'src/browser/model'
5
5
  import type Builder from 'src/builder'
6
6
  import type { IModel } from './modeling'
7
7
  import type { IQueryBuilder } from './query-builder'
8
+ import type { Knex } from 'knex'
8
9
  import type Model from 'src/model'
10
+ import type { TFunction } from './generics'
9
11
 
10
- // type BaseBuilder<M extends Model, R> = Omit<
11
- // IQueryBuilder<M, R>,
12
- // 'destroy' | 'clone' | 'get' | 'skip' | 'limit' | 'take' | 'offset' | 'chunk' | 'forPage'
13
- // >
12
+ type BaseBuilder<M extends Model | BModel, R = ICollection<M> | IModel> = Omit<
13
+ IQueryBuilder<M, R>,
14
+ 'destroy' | 'clone' | 'get' | 'skip' | 'limit' | 'take' | 'offset' | 'chunk' | 'forPage' | 'orWhere' | 'pluck'
15
+ >
14
16
 
15
17
  export interface IScope {
16
18
  apply (builder: Builder<any>, model: Model): void;
17
19
  }
18
20
 
19
-
20
- export interface IBuilder<M extends Model | BModel, R = ICollection<M> | IModel> extends IQueryBuilder<M, R> {
21
+ // @ts-expect-error Errors will come from builder differences but that is fine
22
+ export interface IBuilder<M extends Model | BModel, R = ICollection<M> | IModel> extends BaseBuilder<M, R> {
23
+ connector: IQueryBuilder<M, R> & Knex.QueryBuilder & { _statements: any[], _single: any } & Knex
21
24
  asProxy (): IQueryBuilder<M, R>;
22
- // chunk (count: number, callback: (rows: ICollection<M>) => any): Promise<boolean>;
25
+ chunk (count: number, callback: (rows: ICollection<M>) => any): Promise<boolean>;
23
26
  enforceOrderBy (): void;
24
- // clone (): IBuilder<M, R>;
25
- // forPage (page: number, perPage?: number): this;
26
- insert (attributes: any): Promise<any>;
27
+ idOf (id: string | number): this;
28
+ clone (): IBuilder<M, R>;
29
+ forPage (page: number, perPage?: number): this;
30
+ insert (...attributes: any[]): Promise<any>;
27
31
  update (attributes: any): Promise<any>;
28
32
  increment (column: string, amount?: number, extra?: any): Promise<any>;
29
33
  decrement (column: string, amount?: number, extra?: any): Promise<any>;
@@ -54,6 +58,7 @@ export interface IBuilder<M extends Model | BModel, R = ICollection<M> | IModel>
54
58
  doesntHave (relation: string, boolean?: any, callback?: (builder: IBuilder<any>) => void | null): this;
55
59
  orDoesntHave (relation: string): this;
56
60
  whereHas (relation: string, callback?: (builder: IBuilder<any>) => void | IBuilder<any> | null, operator?: any, count?: number): this;
61
+ orWhere (...args: any[]): this
57
62
  orWhereHas (relation: string, callback?: (builder: IBuilder<any>) => void | IBuilder<any> | null, operator?: any, count?: number): this;
58
63
  whereRelation (relation: string, column: string, operator?: any, value?: any): this;
59
64
  hasNested (relation: string, operator?: any, count?: number, boolean?: any, callback?: (builder: IBuilder<any>) => void | null): this;
@@ -68,10 +73,10 @@ export interface IBuilder<M extends Model | BModel, R = ICollection<M> | IModel>
68
73
  withSum (relation: WithRelationType, column: string): this;
69
74
  withExists (relation: WithRelationType): this;
70
75
  related (relation: string): this;
71
- // take (count: number): this;
72
- // skip (count: number): this;
73
- // limit (count: number): this;
74
- // offset (count: number): this;
76
+ take (count: number): this;
77
+ skip (count: number): this;
78
+ limit (count: number): this;
79
+ offset (count: number): this;
75
80
  first (column?: string | string[]): Promise<M | null | undefined>;
76
81
  firstOrFail (column?: string | string[]): Promise<M>;
77
82
  findOrFail (key: string | number, columns?: string[]): Promise<M>;
@@ -86,8 +91,8 @@ export interface IBuilder<M extends Model | BModel, R = ICollection<M> | IModel>
86
91
  find (key: string | number, columns?: string[]): Promise<M | null | undefined>;
87
92
  findMany (keys: string[] | number[] | ICollection<any>, columns?: string[]): Promise<ICollection<M>>;
88
93
  pluck<X extends Model = any | M> (column: string): Promise<ICollection<X>>;
89
- // destroy (ids: string | number | string[] | number[] | ICollection<any>): Promise<number>;
90
- // get (columns?: string[]): Promise<ICollection<M>>;
94
+ destroy (ids?: string | number | string[] | number[] | TFunction | ICollection<any>): Promise<number>;
95
+ get (columns?: string[]): Promise<ICollection<M>>;
91
96
  all (columns?: string[]): Promise<ICollection<M>>;
92
97
  paginate<F extends IPaginatorParams> (page?: number, perPage?: number): Promise<IPaginator<M, F>>;
93
98
  [value: string]: any;
package/types/generics.ts CHANGED
@@ -47,6 +47,7 @@ export type RelationNames<T> = FunctionPropertyNames<T> extends infer R
47
47
  : never;
48
48
 
49
49
  export type MixinConstructor<T = TGeneric> = new (...args: any[]) => T
50
+ export type AbstractConstructor<T = TGeneric> = abstract new (...args: any[]) => T;
50
51
 
51
52
  // Helper type: combine all mixin instance types into a single intersection
52
53
  export type MixinReturn<Base extends MixinConstructor, Mixins extends ((base: any) => any)[]> =
package/types/modeling.ts CHANGED
@@ -68,15 +68,15 @@ export interface IModel {
68
68
  attributes: any
69
69
  relations: any
70
70
  exists: boolean
71
- primaryKey: string
72
- builder?: IBuilder<any, any> | null
73
- table: string | null
71
+ // primaryKey: string
72
+ // builder?: IBuilder<any, any> | null
73
+ // table: string | null
74
74
  connection?: TBaseConfig['client'] | null
75
- keyType: string
76
- incrementing: boolean
75
+ // keyType: string
76
+ // incrementing: boolean
77
77
  perPage: number
78
78
  with: string | string[] | TGeneric<(...args: any[]) => IBuilder<Model>>
79
- withCount: string[]
79
+ // withCount: string[]
80
80
  trx: AnyQueryBuilder | null
81
81
  timestamps: boolean
82
82
  dateFormat: string
@@ -111,7 +111,7 @@ export interface IModel {
111
111
  setConnection (connection: TBaseConfig['client'] | null): this;
112
112
  usesUniqueIds (): boolean;
113
113
  uniqueIds (): string[];
114
- newUniqueId (): string;
114
+ // newUniqueId (): string;
115
115
  setUniqueIds (): void;
116
116
  getKeyType (): string;
117
117
  getIncrementing (): boolean;
@@ -1,10 +1,11 @@
1
- import type { AnyQueryBuilder, GroupByMethod, JoinMethod, JoinRawMethod, OrderByMethod, OrderByRawMethod, RawInterface, SelectMethod, SetOperationsMethod, UnionMethod, WhereBetweenMethod, WhereColumnMethod, WhereExistsMethod, WhereFieldExpressionMethod, WhereInMethod, WhereJsonExpressionMethod, WhereMethod, WhereNullMethod, WhereRawMethod, WhereWrappedMethod } from './query-methods'
2
- import type { ICollection, IPaginator, IPaginatorParams } from './utils'
1
+ import type { AddSelectMethod, AnyQueryBuilder, FirstOrFailMethod, ForceDeleteMethod, GroupByMethod, JoinMethod, JoinRawMethod, OrderByMethod, OrderByRawMethod, RawInterface, RestoreMethod, ReturningMethod, SelectMethod, SetOperationsMethod, UnionMethod, WhereBetweenMethod, WhereColumnMethod, WhereExistsMethod, WhereFieldExpressionMethod, WhereInMethod, WhereJsonExpressionMethod, WhereMethod, WhereNullMethod, WhereRawMethod, WhereWrappedMethod } from './query-methods'
2
+ import type { IPaginator, IPaginatorParams } from './utils'
3
3
  import type { TFunction, TGeneric } from './generics'
4
4
 
5
5
  import type BModel from 'src/browser/model'
6
6
  import type { Column } from 'src/inspector/types/column'
7
7
  import type { ForeignKey } from 'src/inspector/types/foreign-key'
8
+ import type { IBuilder } from './builder'
8
9
  import type { Knex } from 'knex'
9
10
  import type Model from 'src/model'
10
11
  import type { Table } from 'src/inspector/types/table'
@@ -64,17 +65,22 @@ export type IConnector<M extends TGeneric = any, R = any> = Knex & Knex.QueryBui
64
65
 
65
66
  export interface IQueryBuilder<M extends Model | BModel = Model, R = M[] | M> {
66
67
  // connector: IQueryBuilder<M, R>
68
+ query: IBuilder<M, R>
67
69
  schema: SchemaBuilder
68
70
  _statements: IStatement[],
69
71
  table (name: string): IQueryBuilder<M, R>
70
72
  select: SelectMethod<this>
73
+ addSelect: AddSelectMethod<this>
71
74
  columns: SelectMethod<this>
72
75
  column: SelectMethod<this>
73
76
  distinct: SelectMethod<this>
77
+ returning: ReturningMethod<this>
74
78
  distinctOn: SelectMethod<this>
75
79
  as: AsMethod<this>
76
80
  asProxy (): IQueryBuilder<M, R>
77
81
  where: WhereMethod<this>
82
+ firstOrFail: FirstOrFailMethod<this>
83
+ forceDelete: ForceDeleteMethod
78
84
  andWhere: WhereMethod<this>
79
85
  // orWhere: WhereMethod<this>
80
86
  orWhere (...args: any[]): this
@@ -94,6 +100,7 @@ export interface IQueryBuilder<M extends Model | BModel = Model, R = M[] | M> {
94
100
  whereNotExists: WhereExistsMethod<this>
95
101
  orWhereNotExists: WhereExistsMethod<this>
96
102
 
103
+ restore: RestoreMethod
97
104
  whereIn: WhereInMethod<this>
98
105
  orWhereIn: WhereInMethod<this>
99
106
  whereNotIn: WhereInMethod<this>
@@ -114,6 +114,26 @@ export interface WhereJsonExpressionMethod<QB extends AnyQueryBuilder> {
114
114
  (fieldExpression: FieldExpression, keys: string | string[]): QB;
115
115
  }
116
116
 
117
+ export interface ReturningMethod<QB extends AnyQueryBuilder> {
118
+ (key: FieldExpression | FieldExpression[], options?: { [key: string]: any }): QB;
119
+ }
120
+
121
+ export interface FirstOrFailMethod<QB extends AnyQueryBuilder> {
122
+ (): Promise<QB>;
123
+ }
124
+
125
+ export interface AddSelectMethod<QB extends AnyQueryBuilder> {
126
+ (params: string[]): QB;
127
+ }
128
+
129
+ export interface ForceDeleteMethod {
130
+ (): Promise<boolean | number>;
131
+ }
132
+
133
+ export interface RestoreMethod {
134
+ (): Promise<number>;
135
+ }
136
+
117
137
  export interface WhereColumnMethod<QB extends AnyQueryBuilder> {
118
138
  (col1: ColumnRef, op: Operator, col2: ColumnRef): QB;
119
139
  (col1: ColumnRef, col2: ColumnRef): QB;
package/types/utils.ts CHANGED
@@ -45,6 +45,7 @@ export interface IPaginatorParams {
45
45
  total: number,
46
46
  last_page: number,
47
47
  count: number,
48
+ paginated?: boolean
48
49
  }
49
50
 
50
51
  export interface IPaginator<T extends Model | BModel, K extends IPaginatorParams = IPaginatorParams> {