@cuboapp/api-backend 1.0.8 → 1.0.11

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.
package/src/index.ts CHANGED
@@ -1,70 +1,56 @@
1
- import { type CuboConfigEntity, CuboConfig } from '@cuboapp/config'
2
- import { CuboAccount, CuboApiEntitiesMap, CuboUser } from '@cuboapp/types'
3
- import { QueryTypes } from 'sequelize'
1
+ import { Database, Options, QueryTypes } from '@cuboapp/database'
2
+ import { CuboApiEntitiesMap, CuboEntity } from '@cuboapp/types'
4
3
 
5
4
  import { ApiHelpers } from './helpers'
6
5
  import { CuboCrudAugmentationsStore, CuboCrudGetManyResponse, CuboCrudMethodOptions, CuboCrudRequest } from './types'
7
- import { dbPrepareInsertQueryString, dbPrepareUpdateQueryString } from './utils'
8
6
 
9
7
  export * from './types'
10
- export * from './utils'
11
8
 
12
- export type CuboBackendApiOptions<T> = {
13
- entities?: CuboConfigEntity[]
14
- }
15
-
16
- export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
17
- public augmentations: Partial<CuboCrudAugmentationsStore<T>> = {}
18
- public options: CuboBackendApiOptions<T> = {}
9
+ export type CuboBackendApiOptions<T extends CuboApiEntitiesMap<T>> = {
10
+ api: {
11
+ base_url: string
12
+ token: string
13
+ }
19
14
 
20
- constructor(public config: CuboConfig, augmentations?: Partial<CuboCrudAugmentationsStore<T>>, options?: CuboBackendApiOptions<T>) {
21
- this.augmentations = augmentations || {}
22
- this.options = options || {}
15
+ db: {
16
+ connection?: Database
17
+ options?: Options
23
18
  }
24
19
 
25
- // добавил потому что в хелперах он при getConnection берет id аккаунта и делает cacheKey
26
- public account: CuboAccount = {
27
- id: 0,
28
- name: '',
29
- subdomain: '',
30
- domain: '',
31
- location: '',
32
- language: '',
33
- favicon: undefined
20
+ entities: CuboEntity[]
21
+
22
+ auth?: {
23
+ base_url?: string
34
24
  }
35
25
 
36
- public user: CuboUser
26
+ augmentations?: Partial<CuboCrudAugmentationsStore<T>>
27
+ }
28
+
29
+ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
30
+ constructor(public options: CuboBackendApiOptions<T>) {}
31
+
37
32
  public helpers = new ApiHelpers<T>(this)
38
33
 
39
34
  async init() {
40
- const auth = await this.authRequest<{ account: CuboAccount; user: CuboUser }>('/me')
35
+ const auth = await this.authRequest('/me')
41
36
 
42
- this.account = auth.account
43
- this.user = auth.user
44
-
45
- if (!this.account) {
46
- throw new Error('Account not found')
37
+ if (!auth) {
38
+ throw { code: 403, text: 'Авторизация Cubo-Backend не пройдена' }
47
39
  }
48
40
  }
49
41
 
50
42
  async apiRequest<T>(url: string, opts?: RequestInit) {
51
- const subdomain = this.account.subdomain
52
- const rootDomain = this.config.api?.rootDomain || 'cuboapp.ru'
53
- const baseUrl = `https://${subdomain}.${rootDomain}`
54
-
55
- return this.request<T>(baseUrl, url, opts)
43
+ return this.request<T>(`https://${this.options.api.base_url}`, url, opts)
56
44
  }
57
45
 
58
46
  async authRequest<T>(url: string, opts?: RequestInit) {
59
- const baseUrl = this.config.api?.authDomain || 'https://auth.cuboapp.ru'
60
-
61
- return this.request<T>(baseUrl, url, opts)
47
+ return this.request<T>(this.options?.auth?.base_url || 'https://auth.cubo.sh', url, opts)
62
48
  }
63
49
 
64
50
  private async request<T>(baseUrl: string, url: string, opts?: RequestInit & { withoutContentType?: boolean }) {
65
51
  const headers: Record<string, any> = {
66
52
  ...(opts?.headers || {}),
67
- Authorization: this.config.api?.authToken || ''
53
+ Authorization: this.options.api.token || ''
68
54
  }
69
55
 
70
56
  if (!headers['Content-Type'] && !opts?.withoutContentType) {
@@ -103,7 +89,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
103
89
  }
104
90
 
105
91
  private async getEntity(entityAlias: Extract<keyof T, string>) {
106
- const entity = await this.helpers.entities.getByAlias(entityAlias)
92
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
107
93
  if (!entity) {
108
94
  throw new Error('Entity no found: "' + String(entityAlias) + '"')
109
95
  }
@@ -119,7 +105,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
119
105
  opts = opts || {}
120
106
  req = req || {}
121
107
  const entity = await this.getEntity(entityAlias)
122
- const augmentation = this.augmentations?.[entityAlias]
108
+ const augmentation = this.options?.augmentations?.[entityAlias]
123
109
 
124
110
  if (augmentation?.beforeGetMany) {
125
111
  opts.queryOptions = await augmentation.beforeGetMany(req, opts)
@@ -130,8 +116,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
130
116
  queryDto.withDeleted = opts.queryOptions?.withDeleted
131
117
 
132
118
  // create find query
133
- const regularQuery = await this.helpers.query.createFindQuery(req, entity, queryDto)
134
- const countQuery = await this.helpers.query.createFindQuery(req, entity, queryDto, true)
119
+ const regularQuery = await this.helpers.createFindQuery(req, entity, queryDto)
120
+ const countQuery = await this.helpers.createFindQuery(req, entity, queryDto, true)
135
121
 
136
122
  const db = await this.helpers.getConnection('read')
137
123
 
@@ -139,12 +125,12 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
139
125
  console.log(`QUERY:getMany to "${String(entityAlias)}":`, regularQuery.sql, regularQuery.replacements, { req, opts, queryDto })
140
126
  }
141
127
 
142
- const rows = await db.query<any>(regularQuery.sql!, {
128
+ const rows = await db.connection.query<any>(regularQuery.sql!, {
143
129
  type: QueryTypes.SELECT,
144
130
  replacements: regularQuery.replacements,
145
131
  transaction: opts?.transaction
146
132
  })
147
- const [totals] = await db.query<any>(countQuery.sql!, {
133
+ const [totals] = await db.connection.query<any>(countQuery.sql!, {
148
134
  type: QueryTypes.SELECT,
149
135
  replacements: countQuery.replacements,
150
136
  transaction: opts?.transaction
@@ -172,7 +158,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
172
158
  opts = opts || {}
173
159
 
174
160
  const entity = await this.getEntity(entityAlias)
175
- const augmentation = this.augmentations?.[entityAlias]
161
+ const augmentation = this.options?.augmentations?.[entityAlias]
176
162
  if (augmentation?.beforeGetOne) {
177
163
  opts.queryOptions = await augmentation.beforeGetOne(req, opts)
178
164
  }
@@ -182,11 +168,11 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
182
168
  queryDto.withDeleted = opts.queryOptions?.withDeleted
183
169
  queryDto.limit = 1
184
170
 
185
- const query = await this.helpers.query.createFindQuery(req, entity, queryDto)
171
+ const query = await this.helpers.createFindQuery(req, entity, queryDto)
186
172
 
187
173
  const db = await this.helpers.getConnection('read')
188
174
 
189
- const [row] = await db.query<any>(query.sql!, {
175
+ const [row] = await db.connection.query<any>(query.sql!, {
190
176
  type: QueryTypes.SELECT,
191
177
  replacements: query.replacements,
192
178
  transaction: opts?.transaction
@@ -216,8 +202,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
216
202
  opts?: CuboCrudMethodOptions
217
203
  ): Promise<T[K]> {
218
204
  opts = opts || {}
219
- const entity = await this.helpers.entities.getByAlias(entityAlias)
220
- const augmentation = this.augmentations?.[entityAlias]
205
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
206
+ const augmentation = this.options?.augmentations?.[entityAlias]
221
207
 
222
208
  if (augmentation?.beforeCreate) {
223
209
  opts.queryOptions = await augmentation.beforeCreate(req, opts)
@@ -228,24 +214,9 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
228
214
  throw { status: 400, text: 'No keys to update' }
229
215
  }
230
216
 
231
- const prepared = dbPrepareInsertQueryString(dto)
217
+ // const prepared = dbPrepareInsertQueryString(dto)
232
218
  const db = await this.helpers.getConnection('write')
233
-
234
- const sql = `
235
- insert into ${entity!.alias} (${prepared.keys})
236
- values (${prepared.values})
237
- returning id
238
- `
239
-
240
- const created_id = await db
241
- .query(sql, {
242
- type: QueryTypes.INSERT,
243
- replacements: prepared.replacements || {},
244
- transaction: opts?.transaction
245
- })
246
- .then((res: any) => {
247
- return +res?.[0]?.[0]?.id
248
- })
219
+ const [created_id] = await db.create(entity.alias, dto, { transaction: opts?.transaction, log: opts?.log })
249
220
 
250
221
  if (!created_id) {
251
222
  throw { status: 400, text: 'Unable to create entity' }
@@ -270,8 +241,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
270
241
  opts?: CuboCrudMethodOptions
271
242
  ): Promise<T[K] | undefined> {
272
243
  opts = opts || {}
273
- const entity = await this.helpers.entities.getByAlias(entityAlias)
274
- const augmentation = this.augmentations?.[entityAlias]
244
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
245
+ const augmentation = this.options?.augmentations?.[entityAlias]
275
246
 
276
247
  if (augmentation?.beforeUpdate && !opts?.excludeHooks?.includes('beforeUpdate')) {
277
248
  opts.queryOptions = await augmentation.beforeUpdate(req, opts)
@@ -288,24 +259,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
288
259
  throw { status: 400, text: 'No keys to update' }
289
260
  }
290
261
 
291
- // console.log(dto)
292
-
293
- const prepared = dbPrepareUpdateQueryString(dto)
294
262
  const db = await this.helpers.getConnection('write')
295
-
296
- const sql = `
297
- update ${entity!.alias}
298
- set ${prepared.query}
299
- where id = ${item.id}
300
- `
301
-
302
- await db.query(sql, {
303
- type: QueryTypes.UPDATE,
304
- replacements: {
305
- ...(prepared.replacements || {})
306
- },
307
- transaction: opts?.transaction
308
- })
263
+ await db.update(entity.alias, 'id = :id', { id: item.id }, dto, { transaction: opts?.transaction, log: opts?.log })
309
264
 
310
265
  const response = await this.getOne<K>(entityAlias, req, opts)
311
266
  if (!response) {
@@ -325,8 +280,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
325
280
  opts?: CuboCrudMethodOptions
326
281
  ): Promise<boolean> {
327
282
  opts = opts || {}
328
- const entity = await this.helpers.entities.getByAlias(entityAlias)
329
- const augmentation = this.augmentations?.[entityAlias]
283
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
284
+ const augmentation = this.options?.augmentations?.[entityAlias]
330
285
 
331
286
  if (augmentation?.beforeDelete) {
332
287
  opts.queryOptions = await augmentation.beforeDelete(req, opts)
@@ -342,22 +297,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
342
297
  throw { status: 400, text: 'No keys to update' }
343
298
  }
344
299
 
345
- // console.log(dto)
346
-
347
- const prepared = dbPrepareUpdateQueryString(dto)
348
300
  const db = await this.helpers.getConnection('write')
349
-
350
- const sql = `
351
- update ${entity!.alias}
352
- set ${prepared.query}
353
- where id = ${item.id}
354
- `
355
-
356
- await db.query(sql, {
357
- type: QueryTypes.UPDATE,
358
- replacements: prepared.replacements || {},
359
- transaction: opts?.transaction
360
- })
301
+ await db.update(entity.alias, 'id = :id', { id: item.id }, dto, { transaction: opts?.transaction, log: opts?.log })
361
302
 
362
303
  if (augmentation?.afterDelete && !opts?.excludeHooks?.includes('afterDelete')) {
363
304
  return augmentation.afterDelete(item, req, opts)
@@ -1,5 +1,5 @@
1
+ import { type Transaction } from '@cuboapp/database'
1
2
  import { CuboEntity, CuboEntityField } from '@cuboapp/types'
2
- import { type Transaction } from 'sequelize'
3
3
 
4
4
  export type CuboCrudWith = {
5
5
  entity: CuboEntity | { id: undefined; alias: string; fields: CuboEntityField[] }
package/src/types/db.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Transaction } from 'sequelize'
1
+ import { type Transaction } from '@cuboapp/database'
2
2
 
3
3
  export type CuboCrudQueryOptions = {
4
4
  selects?: string[]
@@ -33,3 +33,5 @@ export type CuboCrudMethodOptions<E extends object = {}> = {
33
33
 
34
34
  queryOptions?: CuboCrudQueryOptions
35
35
  } & E
36
+
37
+ export type CuboBackendApiDbConnectionType = 'read' | 'write'
package/pnpm-lock.yaml DELETED
@@ -1,378 +0,0 @@
1
- lockfileVersion: '9.0'
2
-
3
- settings:
4
- autoInstallPeers: true
5
- excludeLinksFromLockfile: false
6
-
7
- importers:
8
-
9
- .:
10
- dependencies:
11
- '@cuboapp/config':
12
- specifier: ^0.0.9
13
- version: 0.0.9
14
- '@cuboapp/types':
15
- specifier: ^1.0.21
16
- version: 1.0.21
17
- lodash-es:
18
- specifier: ^4.17.21
19
- version: 4.17.21
20
- pg:
21
- specifier: ^8.13.3
22
- version: 8.13.3
23
- sequelize:
24
- specifier: ^6.37.6
25
- version: 6.37.6(pg@8.13.3)
26
- devDependencies:
27
- '@types/lodash-es':
28
- specifier: ^4.17.12
29
- version: 4.17.12
30
- '@types/node':
31
- specifier: ^22.0.0
32
- version: 22.13.9
33
- typescript:
34
- specifier: ^5.8.2
35
- version: 5.8.2
36
-
37
- packages:
38
-
39
- '@cuboapp/config@0.0.9':
40
- resolution: {integrity: sha512-xkCZFOGTO6E8FhowmebthZ50deslWyak6HxhSPGUqktRazMa/6DVyZnTFQBs4Xt271GBXoRekXy8xNGVJnzCrg==}
41
-
42
- '@cuboapp/types@1.0.21':
43
- resolution: {integrity: sha512-DIxfZRAEVX+PupP86Lii6lQXZ+CC6MWDxNUOO1FSWfJVqphXtvW52DFguhd9tu+TN50sHYS/BcjMLD1nJXw4KQ==}
44
-
45
- '@types/debug@4.1.12':
46
- resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
47
-
48
- '@types/events@3.0.3':
49
- resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==}
50
-
51
- '@types/lodash-es@4.17.12':
52
- resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
53
-
54
- '@types/lodash@4.17.16':
55
- resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==}
56
-
57
- '@types/ms@2.1.0':
58
- resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
59
-
60
- '@types/node@22.13.9':
61
- resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==}
62
-
63
- '@types/validator@13.12.2':
64
- resolution: {integrity: sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==}
65
-
66
- debug@4.4.0:
67
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
68
- engines: {node: '>=6.0'}
69
- peerDependencies:
70
- supports-color: '*'
71
- peerDependenciesMeta:
72
- supports-color:
73
- optional: true
74
-
75
- dotenv-expand@12.0.1:
76
- resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==}
77
- engines: {node: '>=12'}
78
-
79
- dotenv@16.4.7:
80
- resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
81
- engines: {node: '>=12'}
82
-
83
- dottie@2.0.6:
84
- resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==}
85
-
86
- inflection@1.13.4:
87
- resolution: {integrity: sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==}
88
- engines: {'0': node >= 0.4.0}
89
-
90
- lodash-es@4.17.21:
91
- resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
92
-
93
- lodash@4.17.21:
94
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
95
-
96
- moment-timezone@0.5.47:
97
- resolution: {integrity: sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA==}
98
-
99
- moment@2.30.1:
100
- resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
101
-
102
- ms@2.1.3:
103
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
104
-
105
- pg-cloudflare@1.1.1:
106
- resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
107
-
108
- pg-connection-string@2.7.0:
109
- resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==}
110
-
111
- pg-int8@1.0.1:
112
- resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
113
- engines: {node: '>=4.0.0'}
114
-
115
- pg-pool@3.7.1:
116
- resolution: {integrity: sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==}
117
- peerDependencies:
118
- pg: '>=8.0'
119
-
120
- pg-protocol@1.7.1:
121
- resolution: {integrity: sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==}
122
-
123
- pg-types@2.2.0:
124
- resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
125
- engines: {node: '>=4'}
126
-
127
- pg@8.13.3:
128
- resolution: {integrity: sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==}
129
- engines: {node: '>= 8.0.0'}
130
- peerDependencies:
131
- pg-native: '>=3.0.1'
132
- peerDependenciesMeta:
133
- pg-native:
134
- optional: true
135
-
136
- pgpass@1.0.5:
137
- resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
138
-
139
- postgres-array@2.0.0:
140
- resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
141
- engines: {node: '>=4'}
142
-
143
- postgres-bytea@1.0.0:
144
- resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
145
- engines: {node: '>=0.10.0'}
146
-
147
- postgres-date@1.0.7:
148
- resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
149
- engines: {node: '>=0.10.0'}
150
-
151
- postgres-interval@1.2.0:
152
- resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
153
- engines: {node: '>=0.10.0'}
154
-
155
- retry-as-promised@7.1.1:
156
- resolution: {integrity: sha512-hMD7odLOt3LkTjcif8aRZqi/hybjpLNgSk5oF5FCowfCjok6LukpN2bDX7R5wDmbgBQFn7YoBxSagmtXHaJYJw==}
157
-
158
- semver@7.7.1:
159
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
160
- engines: {node: '>=10'}
161
- hasBin: true
162
-
163
- sequelize-pool@7.1.0:
164
- resolution: {integrity: sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==}
165
- engines: {node: '>= 10.0.0'}
166
-
167
- sequelize@6.37.6:
168
- resolution: {integrity: sha512-4Slqjqpktofs7AVqWviFOInzP9w8ZRQDhF+DnRtm4WKIdIATpyzGgedyseP3xbgpBxapvfQcJv6CeIdZe4ZL2A==}
169
- engines: {node: '>=10.0.0'}
170
- peerDependencies:
171
- ibm_db: '*'
172
- mariadb: '*'
173
- mysql2: '*'
174
- oracledb: '*'
175
- pg: '*'
176
- pg-hstore: '*'
177
- snowflake-sdk: '*'
178
- sqlite3: '*'
179
- tedious: '*'
180
- peerDependenciesMeta:
181
- ibm_db:
182
- optional: true
183
- mariadb:
184
- optional: true
185
- mysql2:
186
- optional: true
187
- oracledb:
188
- optional: true
189
- pg:
190
- optional: true
191
- pg-hstore:
192
- optional: true
193
- snowflake-sdk:
194
- optional: true
195
- sqlite3:
196
- optional: true
197
- tedious:
198
- optional: true
199
-
200
- split2@4.2.0:
201
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
202
- engines: {node: '>= 10.x'}
203
-
204
- toposort-class@1.0.1:
205
- resolution: {integrity: sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==}
206
-
207
- typescript@5.8.2:
208
- resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
209
- engines: {node: '>=14.17'}
210
- hasBin: true
211
-
212
- undici-types@6.20.0:
213
- resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
214
-
215
- uuid@8.3.2:
216
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
217
- hasBin: true
218
-
219
- validator@13.12.0:
220
- resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==}
221
- engines: {node: '>= 0.10'}
222
-
223
- wkx@0.5.0:
224
- resolution: {integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==}
225
-
226
- xtend@4.0.2:
227
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
228
- engines: {node: '>=0.4'}
229
-
230
- snapshots:
231
-
232
- '@cuboapp/config@0.0.9':
233
- dependencies:
234
- '@cuboapp/types': 1.0.21
235
- dotenv: 16.4.7
236
- dotenv-expand: 12.0.1
237
-
238
- '@cuboapp/types@1.0.21':
239
- dependencies:
240
- '@types/events': 3.0.3
241
-
242
- '@types/debug@4.1.12':
243
- dependencies:
244
- '@types/ms': 2.1.0
245
-
246
- '@types/events@3.0.3': {}
247
-
248
- '@types/lodash-es@4.17.12':
249
- dependencies:
250
- '@types/lodash': 4.17.16
251
-
252
- '@types/lodash@4.17.16': {}
253
-
254
- '@types/ms@2.1.0': {}
255
-
256
- '@types/node@22.13.9':
257
- dependencies:
258
- undici-types: 6.20.0
259
-
260
- '@types/validator@13.12.2': {}
261
-
262
- debug@4.4.0:
263
- dependencies:
264
- ms: 2.1.3
265
-
266
- dotenv-expand@12.0.1:
267
- dependencies:
268
- dotenv: 16.4.7
269
-
270
- dotenv@16.4.7: {}
271
-
272
- dottie@2.0.6: {}
273
-
274
- inflection@1.13.4: {}
275
-
276
- lodash-es@4.17.21: {}
277
-
278
- lodash@4.17.21: {}
279
-
280
- moment-timezone@0.5.47:
281
- dependencies:
282
- moment: 2.30.1
283
-
284
- moment@2.30.1: {}
285
-
286
- ms@2.1.3: {}
287
-
288
- pg-cloudflare@1.1.1:
289
- optional: true
290
-
291
- pg-connection-string@2.7.0: {}
292
-
293
- pg-int8@1.0.1: {}
294
-
295
- pg-pool@3.7.1(pg@8.13.3):
296
- dependencies:
297
- pg: 8.13.3
298
-
299
- pg-protocol@1.7.1: {}
300
-
301
- pg-types@2.2.0:
302
- dependencies:
303
- pg-int8: 1.0.1
304
- postgres-array: 2.0.0
305
- postgres-bytea: 1.0.0
306
- postgres-date: 1.0.7
307
- postgres-interval: 1.2.0
308
-
309
- pg@8.13.3:
310
- dependencies:
311
- pg-connection-string: 2.7.0
312
- pg-pool: 3.7.1(pg@8.13.3)
313
- pg-protocol: 1.7.1
314
- pg-types: 2.2.0
315
- pgpass: 1.0.5
316
- optionalDependencies:
317
- pg-cloudflare: 1.1.1
318
-
319
- pgpass@1.0.5:
320
- dependencies:
321
- split2: 4.2.0
322
-
323
- postgres-array@2.0.0: {}
324
-
325
- postgres-bytea@1.0.0: {}
326
-
327
- postgres-date@1.0.7: {}
328
-
329
- postgres-interval@1.2.0:
330
- dependencies:
331
- xtend: 4.0.2
332
-
333
- retry-as-promised@7.1.1: {}
334
-
335
- semver@7.7.1: {}
336
-
337
- sequelize-pool@7.1.0: {}
338
-
339
- sequelize@6.37.6(pg@8.13.3):
340
- dependencies:
341
- '@types/debug': 4.1.12
342
- '@types/validator': 13.12.2
343
- debug: 4.4.0
344
- dottie: 2.0.6
345
- inflection: 1.13.4
346
- lodash: 4.17.21
347
- moment: 2.30.1
348
- moment-timezone: 0.5.47
349
- pg-connection-string: 2.7.0
350
- retry-as-promised: 7.1.1
351
- semver: 7.7.1
352
- sequelize-pool: 7.1.0
353
- toposort-class: 1.0.1
354
- uuid: 8.3.2
355
- validator: 13.12.0
356
- wkx: 0.5.0
357
- optionalDependencies:
358
- pg: 8.13.3
359
- transitivePeerDependencies:
360
- - supports-color
361
-
362
- split2@4.2.0: {}
363
-
364
- toposort-class@1.0.1: {}
365
-
366
- typescript@5.8.2: {}
367
-
368
- undici-types@6.20.0: {}
369
-
370
- uuid@8.3.2: {}
371
-
372
- validator@13.12.0: {}
373
-
374
- wkx@0.5.0:
375
- dependencies:
376
- '@types/node': 22.13.9
377
-
378
- xtend@4.0.2: {}