@cuboapp/api-backend 1.0.8 → 1.0.9

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,57 @@
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
8
  export * from './utils'
11
9
 
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> = {}
10
+ export type CuboBackendApiOptions<T extends CuboApiEntitiesMap<T>> = {
11
+ api: {
12
+ base_url: string
13
+ token: string
14
+ }
19
15
 
20
- constructor(public config: CuboConfig, augmentations?: Partial<CuboCrudAugmentationsStore<T>>, options?: CuboBackendApiOptions<T>) {
21
- this.augmentations = augmentations || {}
22
- this.options = options || {}
16
+ db: {
17
+ connection?: Database
18
+ options?: Options
23
19
  }
24
20
 
25
- // добавил потому что в хелперах он при getConnection берет id аккаунта и делает cacheKey
26
- public account: CuboAccount = {
27
- id: 0,
28
- name: '',
29
- subdomain: '',
30
- domain: '',
31
- location: '',
32
- language: '',
33
- favicon: undefined
21
+ entities: CuboEntity[]
22
+
23
+ auth?: {
24
+ base_url?: string
34
25
  }
35
26
 
36
- public user: CuboUser
27
+ augmentations?: Partial<CuboCrudAugmentationsStore<T>>
28
+ }
29
+
30
+ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
31
+ constructor(public options: CuboBackendApiOptions<T>) {}
32
+
37
33
  public helpers = new ApiHelpers<T>(this)
38
34
 
39
35
  async init() {
40
- const auth = await this.authRequest<{ account: CuboAccount; user: CuboUser }>('/me')
36
+ const auth = await this.authRequest('/me')
41
37
 
42
- this.account = auth.account
43
- this.user = auth.user
44
-
45
- if (!this.account) {
46
- throw new Error('Account not found')
38
+ if (!auth) {
39
+ throw { code: 403, text: 'Авторизация Cubo-Backend не пройдена' }
47
40
  }
48
41
  }
49
42
 
50
43
  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)
44
+ return this.request<T>(`https://${this.options.api.base_url}`, url, opts)
56
45
  }
57
46
 
58
47
  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)
48
+ return this.request<T>(this.options?.auth?.base_url || 'https://auth.cubo.sh', url, opts)
62
49
  }
63
50
 
64
51
  private async request<T>(baseUrl: string, url: string, opts?: RequestInit & { withoutContentType?: boolean }) {
65
52
  const headers: Record<string, any> = {
66
53
  ...(opts?.headers || {}),
67
- Authorization: this.config.api?.authToken || ''
54
+ Authorization: this.options.api.token || ''
68
55
  }
69
56
 
70
57
  if (!headers['Content-Type'] && !opts?.withoutContentType) {
@@ -103,7 +90,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
103
90
  }
104
91
 
105
92
  private async getEntity(entityAlias: Extract<keyof T, string>) {
106
- const entity = await this.helpers.entities.getByAlias(entityAlias)
93
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
107
94
  if (!entity) {
108
95
  throw new Error('Entity no found: "' + String(entityAlias) + '"')
109
96
  }
@@ -119,7 +106,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
119
106
  opts = opts || {}
120
107
  req = req || {}
121
108
  const entity = await this.getEntity(entityAlias)
122
- const augmentation = this.augmentations?.[entityAlias]
109
+ const augmentation = this.options?.augmentations?.[entityAlias]
123
110
 
124
111
  if (augmentation?.beforeGetMany) {
125
112
  opts.queryOptions = await augmentation.beforeGetMany(req, opts)
@@ -130,8 +117,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
130
117
  queryDto.withDeleted = opts.queryOptions?.withDeleted
131
118
 
132
119
  // 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)
120
+ const regularQuery = await this.helpers.createFindQuery(req, entity, queryDto)
121
+ const countQuery = await this.helpers.createFindQuery(req, entity, queryDto, true)
135
122
 
136
123
  const db = await this.helpers.getConnection('read')
137
124
 
@@ -139,12 +126,12 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
139
126
  console.log(`QUERY:getMany to "${String(entityAlias)}":`, regularQuery.sql, regularQuery.replacements, { req, opts, queryDto })
140
127
  }
141
128
 
142
- const rows = await db.query<any>(regularQuery.sql!, {
129
+ const rows = await db.connection.query<any>(regularQuery.sql!, {
143
130
  type: QueryTypes.SELECT,
144
131
  replacements: regularQuery.replacements,
145
132
  transaction: opts?.transaction
146
133
  })
147
- const [totals] = await db.query<any>(countQuery.sql!, {
134
+ const [totals] = await db.connection.query<any>(countQuery.sql!, {
148
135
  type: QueryTypes.SELECT,
149
136
  replacements: countQuery.replacements,
150
137
  transaction: opts?.transaction
@@ -172,7 +159,7 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
172
159
  opts = opts || {}
173
160
 
174
161
  const entity = await this.getEntity(entityAlias)
175
- const augmentation = this.augmentations?.[entityAlias]
162
+ const augmentation = this.options?.augmentations?.[entityAlias]
176
163
  if (augmentation?.beforeGetOne) {
177
164
  opts.queryOptions = await augmentation.beforeGetOne(req, opts)
178
165
  }
@@ -182,11 +169,11 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
182
169
  queryDto.withDeleted = opts.queryOptions?.withDeleted
183
170
  queryDto.limit = 1
184
171
 
185
- const query = await this.helpers.query.createFindQuery(req, entity, queryDto)
172
+ const query = await this.helpers.createFindQuery(req, entity, queryDto)
186
173
 
187
174
  const db = await this.helpers.getConnection('read')
188
175
 
189
- const [row] = await db.query<any>(query.sql!, {
176
+ const [row] = await db.connection.query<any>(query.sql!, {
190
177
  type: QueryTypes.SELECT,
191
178
  replacements: query.replacements,
192
179
  transaction: opts?.transaction
@@ -216,8 +203,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
216
203
  opts?: CuboCrudMethodOptions
217
204
  ): Promise<T[K]> {
218
205
  opts = opts || {}
219
- const entity = await this.helpers.entities.getByAlias(entityAlias)
220
- const augmentation = this.augmentations?.[entityAlias]
206
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
207
+ const augmentation = this.options?.augmentations?.[entityAlias]
221
208
 
222
209
  if (augmentation?.beforeCreate) {
223
210
  opts.queryOptions = await augmentation.beforeCreate(req, opts)
@@ -228,24 +215,9 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
228
215
  throw { status: 400, text: 'No keys to update' }
229
216
  }
230
217
 
231
- const prepared = dbPrepareInsertQueryString(dto)
218
+ // const prepared = dbPrepareInsertQueryString(dto)
232
219
  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
- })
220
+ const [created_id] = await db.create(entity.alias, dto, { transaction: opts?.transaction, log: opts?.log })
249
221
 
250
222
  if (!created_id) {
251
223
  throw { status: 400, text: 'Unable to create entity' }
@@ -270,8 +242,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
270
242
  opts?: CuboCrudMethodOptions
271
243
  ): Promise<T[K] | undefined> {
272
244
  opts = opts || {}
273
- const entity = await this.helpers.entities.getByAlias(entityAlias)
274
- const augmentation = this.augmentations?.[entityAlias]
245
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
246
+ const augmentation = this.options?.augmentations?.[entityAlias]
275
247
 
276
248
  if (augmentation?.beforeUpdate && !opts?.excludeHooks?.includes('beforeUpdate')) {
277
249
  opts.queryOptions = await augmentation.beforeUpdate(req, opts)
@@ -288,24 +260,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
288
260
  throw { status: 400, text: 'No keys to update' }
289
261
  }
290
262
 
291
- // console.log(dto)
292
-
293
- const prepared = dbPrepareUpdateQueryString(dto)
294
263
  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
- })
264
+ await db.update(entity.alias, 'id = :id', { id: item.id }, dto, { transaction: opts?.transaction, log: opts?.log })
309
265
 
310
266
  const response = await this.getOne<K>(entityAlias, req, opts)
311
267
  if (!response) {
@@ -325,8 +281,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
325
281
  opts?: CuboCrudMethodOptions
326
282
  ): Promise<boolean> {
327
283
  opts = opts || {}
328
- const entity = await this.helpers.entities.getByAlias(entityAlias)
329
- const augmentation = this.augmentations?.[entityAlias]
284
+ const entity = await this.helpers.getEntityByAlias(entityAlias)
285
+ const augmentation = this.options?.augmentations?.[entityAlias]
330
286
 
331
287
  if (augmentation?.beforeDelete) {
332
288
  opts.queryOptions = await augmentation.beforeDelete(req, opts)
@@ -342,22 +298,8 @@ export class CuboBackendApi<T extends CuboApiEntitiesMap<T>> {
342
298
  throw { status: 400, text: 'No keys to update' }
343
299
  }
344
300
 
345
- // console.log(dto)
346
-
347
- const prepared = dbPrepareUpdateQueryString(dto)
348
301
  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
- })
302
+ await db.update(entity.alias, 'id = :id', { id: item.id }, dto, { transaction: opts?.transaction, log: opts?.log })
361
303
 
362
304
  if (augmentation?.afterDelete && !opts?.excludeHooks?.includes('afterDelete')) {
363
305
  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: {}