@budibase/backend-core 2.14.6 → 2.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../src/db/instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../src/db/instrumentation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/backend-core",
3
- "version": "2.14.6",
3
+ "version": "2.14.7",
4
4
  "description": "Budibase backend core libraries used in server and worker",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "dependencies": {
24
24
  "@budibase/nano": "10.1.4",
25
25
  "@budibase/pouchdb-replication-stream": "1.2.10",
26
- "@budibase/shared-core": "2.14.6",
27
- "@budibase/types": "2.14.6",
26
+ "@budibase/shared-core": "2.14.7",
27
+ "@budibase/types": "2.14.7",
28
28
  "@techpass/passport-openidconnect": "0.3.2",
29
29
  "aws-cloudfront-sign": "3.0.2",
30
30
  "aws-sdk": "2.1030.0",
@@ -96,5 +96,5 @@
96
96
  }
97
97
  }
98
98
  },
99
- "gitHead": "8a749f5bcf80b35bcfd2c86a50a66da9235ea310"
99
+ "gitHead": "7b5a19d3146b137e974c22f99e04f3541c9e5215"
100
100
  }
@@ -19,6 +19,8 @@ import { WriteStream, ReadStream } from "fs"
19
19
  import { newid } from "../../docIds/newid"
20
20
  import { DDInstrumentedDatabase } from "../instrumentation"
21
21
 
22
+ const DATABASE_NOT_FOUND = "Database does not exist."
23
+
22
24
  function buildNano(couchInfo: { url: string; cookie: string }) {
23
25
  return Nano({
24
26
  url: couchInfo.url,
@@ -31,6 +33,8 @@ function buildNano(couchInfo: { url: string; cookie: string }) {
31
33
  })
32
34
  }
33
35
 
36
+ type DBCall<T> = () => Promise<T>
37
+
34
38
  export function DatabaseWithConnection(
35
39
  dbName: string,
36
40
  connection: string,
@@ -78,7 +82,11 @@ export class DatabaseImpl implements Database {
78
82
  return this.instanceNano || DatabaseImpl.nano
79
83
  }
80
84
 
81
- async checkSetup() {
85
+ private getDb() {
86
+ return this.nano().db.use(this.name)
87
+ }
88
+
89
+ private async checkAndCreateDb() {
82
90
  let shouldCreate = !this.pouchOpts?.skip_setup
83
91
  // check exists in a lightweight fashion
84
92
  let exists = await this.exists()
@@ -95,14 +103,22 @@ export class DatabaseImpl implements Database {
95
103
  }
96
104
  }
97
105
  }
98
- return this.nano().db.use(this.name)
106
+ return this.getDb()
99
107
  }
100
108
 
101
- private async updateOutput(fnc: any) {
109
+ // this function fetches the DB and handles if DB creation is needed
110
+ private async performCall<T>(
111
+ call: (db: Nano.DocumentScope<any>) => Promise<DBCall<T>> | DBCall<T>
112
+ ): Promise<any> {
113
+ const db = this.getDb()
114
+ const fnc = await call(db)
102
115
  try {
103
116
  return await fnc()
104
117
  } catch (err: any) {
105
- if (err.statusCode) {
118
+ if (err.statusCode === 404 && err.reason === DATABASE_NOT_FOUND) {
119
+ await this.checkAndCreateDb()
120
+ return await this.performCall(call)
121
+ } else if (err.statusCode) {
106
122
  err.status = err.statusCode
107
123
  }
108
124
  throw err
@@ -110,11 +126,12 @@ export class DatabaseImpl implements Database {
110
126
  }
111
127
 
112
128
  async get<T extends Document>(id?: string): Promise<T> {
113
- const db = await this.checkSetup()
114
- if (!id) {
115
- throw new Error("Unable to get doc without a valid _id.")
116
- }
117
- return this.updateOutput(() => db.get(id))
129
+ return this.performCall(db => {
130
+ if (!id) {
131
+ throw new Error("Unable to get doc without a valid _id.")
132
+ }
133
+ return () => db.get(id)
134
+ })
118
135
  }
119
136
 
120
137
  async getMultiple<T extends Document>(
@@ -147,22 +164,23 @@ export class DatabaseImpl implements Database {
147
164
  }
148
165
 
149
166
  async remove(idOrDoc: string | Document, rev?: string) {
150
- const db = await this.checkSetup()
151
- let _id: string
152
- let _rev: string
167
+ return this.performCall(db => {
168
+ let _id: string
169
+ let _rev: string
153
170
 
154
- if (isDocument(idOrDoc)) {
155
- _id = idOrDoc._id!
156
- _rev = idOrDoc._rev!
157
- } else {
158
- _id = idOrDoc
159
- _rev = rev!
160
- }
171
+ if (isDocument(idOrDoc)) {
172
+ _id = idOrDoc._id!
173
+ _rev = idOrDoc._rev!
174
+ } else {
175
+ _id = idOrDoc
176
+ _rev = rev!
177
+ }
161
178
 
162
- if (!_id || !_rev) {
163
- throw new Error("Unable to remove doc without a valid _id and _rev.")
164
- }
165
- return this.updateOutput(() => db.destroy(_id, _rev))
179
+ if (!_id || !_rev) {
180
+ throw new Error("Unable to remove doc without a valid _id and _rev.")
181
+ }
182
+ return () => db.destroy(_id, _rev)
183
+ })
166
184
  }
167
185
 
168
186
  async post(document: AnyDocument, opts?: DatabasePutOpts) {
@@ -176,45 +194,49 @@ export class DatabaseImpl implements Database {
176
194
  if (!document._id) {
177
195
  throw new Error("Cannot store document without _id field.")
178
196
  }
179
- const db = await this.checkSetup()
180
- if (!document.createdAt) {
181
- document.createdAt = new Date().toISOString()
182
- }
183
- document.updatedAt = new Date().toISOString()
184
- if (opts?.force && document._id) {
185
- try {
186
- const existing = await this.get(document._id)
187
- if (existing) {
188
- document._rev = existing._rev
189
- }
190
- } catch (err: any) {
191
- if (err.status !== 404) {
192
- throw err
197
+ return this.performCall(async db => {
198
+ if (!document.createdAt) {
199
+ document.createdAt = new Date().toISOString()
200
+ }
201
+ document.updatedAt = new Date().toISOString()
202
+ if (opts?.force && document._id) {
203
+ try {
204
+ const existing = await this.get(document._id)
205
+ if (existing) {
206
+ document._rev = existing._rev
207
+ }
208
+ } catch (err: any) {
209
+ if (err.status !== 404) {
210
+ throw err
211
+ }
193
212
  }
194
213
  }
195
- }
196
- return this.updateOutput(() => db.insert(document))
214
+ return () => db.insert(document)
215
+ })
197
216
  }
198
217
 
199
218
  async bulkDocs(documents: AnyDocument[]) {
200
- const db = await this.checkSetup()
201
- return this.updateOutput(() => db.bulk({ docs: documents }))
219
+ return this.performCall(db => {
220
+ return () => db.bulk({ docs: documents })
221
+ })
202
222
  }
203
223
 
204
224
  async allDocs<T extends Document>(
205
225
  params: DatabaseQueryOpts
206
226
  ): Promise<AllDocsResponse<T>> {
207
- const db = await this.checkSetup()
208
- return this.updateOutput(() => db.list(params))
227
+ return this.performCall(db => {
228
+ return () => db.list(params)
229
+ })
209
230
  }
210
231
 
211
232
  async query<T extends Document>(
212
233
  viewName: string,
213
234
  params: DatabaseQueryOpts
214
235
  ): Promise<AllDocsResponse<T>> {
215
- const db = await this.checkSetup()
216
- const [database, view] = viewName.split("/")
217
- return this.updateOutput(() => db.view(database, view, params))
236
+ return this.performCall(db => {
237
+ const [database, view] = viewName.split("/")
238
+ return () => db.view(database, view, params)
239
+ })
218
240
  }
219
241
 
220
242
  async destroy() {
@@ -231,8 +253,9 @@ export class DatabaseImpl implements Database {
231
253
  }
232
254
 
233
255
  async compact() {
234
- const db = await this.checkSetup()
235
- return this.updateOutput(() => db.compact())
256
+ return this.performCall(db => {
257
+ return () => db.compact()
258
+ })
236
259
  }
237
260
 
238
261
  // All below functions are in-frequently called, just utilise PouchDB
@@ -31,13 +31,6 @@ export class DDInstrumentedDatabase implements Database {
31
31
  })
32
32
  }
33
33
 
34
- checkSetup(): Promise<DocumentScope<any>> {
35
- return tracer.trace("db.checkSetup", span => {
36
- span?.addTags({ db_name: this.name })
37
- return this.db.checkSetup()
38
- })
39
- }
40
-
41
34
  get<T extends Document>(id?: string | undefined): Promise<T> {
42
35
  return tracer.trace("db.get", span => {
43
36
  span?.addTags({ db_name: this.name, doc_id: id })