@terreno/api 0.0.1
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/LICENSE +202 -0
- package/README.md +170 -0
- package/biome.jsonc +22 -0
- package/bunfig.toml +4 -0
- package/dist/api.d.ts +227 -0
- package/dist/api.js +1024 -0
- package/dist/api.test.d.ts +1 -0
- package/dist/api.test.js +2143 -0
- package/dist/auth.d.ts +50 -0
- package/dist/auth.js +512 -0
- package/dist/auth.test.d.ts +1 -0
- package/dist/auth.test.js +778 -0
- package/dist/errors.d.ts +75 -0
- package/dist/errors.js +216 -0
- package/dist/example.d.ts +1 -0
- package/dist/example.js +118 -0
- package/dist/expressServer.d.ts +35 -0
- package/dist/expressServer.js +436 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +30 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.js +249 -0
- package/dist/middleware.d.ts +10 -0
- package/dist/middleware.js +52 -0
- package/dist/notifiers/googleChatNotifier.d.ts +5 -0
- package/dist/notifiers/googleChatNotifier.js +130 -0
- package/dist/notifiers/googleChatNotifier.test.d.ts +1 -0
- package/dist/notifiers/googleChatNotifier.test.js +260 -0
- package/dist/notifiers/index.d.ts +3 -0
- package/dist/notifiers/index.js +19 -0
- package/dist/notifiers/slackNotifier.d.ts +5 -0
- package/dist/notifiers/slackNotifier.js +130 -0
- package/dist/notifiers/slackNotifier.test.d.ts +1 -0
- package/dist/notifiers/slackNotifier.test.js +259 -0
- package/dist/notifiers/zoomNotifier.d.ts +34 -0
- package/dist/notifiers/zoomNotifier.js +181 -0
- package/dist/notifiers/zoomNotifier.test.d.ts +1 -0
- package/dist/notifiers/zoomNotifier.test.js +370 -0
- package/dist/openApi.d.ts +60 -0
- package/dist/openApi.js +441 -0
- package/dist/openApi.test.d.ts +1 -0
- package/dist/openApi.test.js +445 -0
- package/dist/openApiBuilder.d.ts +419 -0
- package/dist/openApiBuilder.js +424 -0
- package/dist/openApiBuilder.test.d.ts +1 -0
- package/dist/openApiBuilder.test.js +509 -0
- package/dist/openApiEtag.d.ts +7 -0
- package/dist/openApiEtag.js +38 -0
- package/dist/permissions.d.ts +26 -0
- package/dist/permissions.js +331 -0
- package/dist/permissions.test.d.ts +1 -0
- package/dist/permissions.test.js +413 -0
- package/dist/plugins.d.ts +67 -0
- package/dist/plugins.js +315 -0
- package/dist/plugins.test.d.ts +1 -0
- package/dist/plugins.test.js +639 -0
- package/dist/populate.d.ts +14 -0
- package/dist/populate.js +315 -0
- package/dist/populate.test.d.ts +1 -0
- package/dist/populate.test.js +133 -0
- package/dist/response.d.ts +0 -0
- package/dist/response.js +1 -0
- package/dist/tests/bunSetup.d.ts +1 -0
- package/dist/tests/bunSetup.js +297 -0
- package/dist/tests/index.d.ts +1 -0
- package/dist/tests/index.js +17 -0
- package/dist/tests.d.ts +99 -0
- package/dist/tests.js +273 -0
- package/dist/transformers.d.ts +25 -0
- package/dist/transformers.js +217 -0
- package/dist/transformers.test.d.ts +1 -0
- package/dist/transformers.test.js +370 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +143 -0
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +14 -0
- package/index.ts +1 -0
- package/package.json +88 -0
- package/src/__snapshots__/openApi.test.ts.snap +4814 -0
- package/src/__snapshots__/openApiBuilder.test.ts.snap +1485 -0
- package/src/api.test.ts +1661 -0
- package/src/api.ts +1036 -0
- package/src/auth.test.ts +550 -0
- package/src/auth.ts +408 -0
- package/src/errors.ts +225 -0
- package/src/example.ts +99 -0
- package/src/express.d.ts +5 -0
- package/src/expressServer.ts +387 -0
- package/src/index.ts +14 -0
- package/src/logger.ts +190 -0
- package/src/middleware.ts +18 -0
- package/src/notifiers/googleChatNotifier.test.ts +114 -0
- package/src/notifiers/googleChatNotifier.ts +47 -0
- package/src/notifiers/index.ts +3 -0
- package/src/notifiers/slackNotifier.test.ts +113 -0
- package/src/notifiers/slackNotifier.ts +55 -0
- package/src/notifiers/zoomNotifier.test.ts +207 -0
- package/src/notifiers/zoomNotifier.ts +111 -0
- package/src/openApi.test.ts +331 -0
- package/src/openApi.ts +494 -0
- package/src/openApiBuilder.test.ts +442 -0
- package/src/openApiBuilder.ts +636 -0
- package/src/openApiEtag.ts +40 -0
- package/src/permissions.test.ts +219 -0
- package/src/permissions.ts +228 -0
- package/src/plugins.test.ts +390 -0
- package/src/plugins.ts +289 -0
- package/src/populate.test.ts +65 -0
- package/src/populate.ts +258 -0
- package/src/response.ts +0 -0
- package/src/tests/bunSetup.ts +234 -0
- package/src/tests/index.ts +1 -0
- package/src/tests.ts +218 -0
- package/src/transformers.test.ts +202 -0
- package/src/transformers.ts +170 -0
- package/src/utils.test.ts +14 -0
- package/src/utils.ts +47 -0
- package/tsconfig.json +60 -0
- package/types.d.ts +17 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
39
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
40
|
+
if (!m) return o;
|
|
41
|
+
var i = m.call(o), r, ar = [], e;
|
|
42
|
+
try {
|
|
43
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
44
|
+
}
|
|
45
|
+
catch (error) { e = { error: error }; }
|
|
46
|
+
finally {
|
|
47
|
+
try {
|
|
48
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
49
|
+
}
|
|
50
|
+
finally { if (e) throw e.error; }
|
|
51
|
+
}
|
|
52
|
+
return ar;
|
|
53
|
+
};
|
|
54
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
55
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
56
|
+
if (ar || !(i in from)) {
|
|
57
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
58
|
+
ar[i] = from[i];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
62
|
+
};
|
|
63
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
64
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
65
|
+
};
|
|
66
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
+
var bun_test_1 = require("bun:test");
|
|
68
|
+
var node_stream_1 = require("node:stream");
|
|
69
|
+
var mongoose_1 = __importDefault(require("mongoose"));
|
|
70
|
+
var winston_1 = __importDefault(require("winston"));
|
|
71
|
+
var expressServer_1 = require("../expressServer");
|
|
72
|
+
var logger_1 = require("../logger");
|
|
73
|
+
// Connect to MongoDB once for all tests
|
|
74
|
+
(0, bun_test_1.beforeAll)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
75
|
+
return __generator(this, function (_a) {
|
|
76
|
+
switch (_a.label) {
|
|
77
|
+
case 0: return [4 /*yield*/, mongoose_1.default
|
|
78
|
+
.connect("mongodb://127.0.0.1/terreno?&connectTimeoutMS=360000")
|
|
79
|
+
.catch(logger_1.logger.catch)];
|
|
80
|
+
case 1:
|
|
81
|
+
_a.sent();
|
|
82
|
+
return [2 /*return*/];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}); });
|
|
86
|
+
// Close MongoDB connection after all tests
|
|
87
|
+
(0, bun_test_1.afterAll)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
88
|
+
return __generator(this, function (_a) {
|
|
89
|
+
switch (_a.label) {
|
|
90
|
+
case 0: return [4 /*yield*/, mongoose_1.default.connection.close()];
|
|
91
|
+
case 1:
|
|
92
|
+
_a.sent();
|
|
93
|
+
return [2 /*return*/];
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}); });
|
|
97
|
+
var logs = [];
|
|
98
|
+
var SHOW_ALL_LOGS = process.env.SHOW_ALL_TEST_LOGS === "true";
|
|
99
|
+
// Create a custom stream that captures logs
|
|
100
|
+
var logStream = new node_stream_1.Writable({
|
|
101
|
+
write: function (chunk, _encoding, callback) {
|
|
102
|
+
logs.push(chunk.toString());
|
|
103
|
+
if (SHOW_ALL_LOGS) {
|
|
104
|
+
process.stdout.write(chunk);
|
|
105
|
+
}
|
|
106
|
+
callback();
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
// Silence both winston loggers by replacing all transports with our capturing stream
|
|
110
|
+
var silentTransport = new winston_1.default.transports.Stream({
|
|
111
|
+
format: winston_1.default.format.simple(),
|
|
112
|
+
stream: logStream,
|
|
113
|
+
});
|
|
114
|
+
// Clear and silence the default winston logger
|
|
115
|
+
winston_1.default.clear();
|
|
116
|
+
winston_1.default.add(silentTransport);
|
|
117
|
+
// Clear and silence the custom winstonLogger
|
|
118
|
+
logger_1.winstonLogger.clear();
|
|
119
|
+
logger_1.winstonLogger.add(silentTransport);
|
|
120
|
+
// Capture and silence console methods
|
|
121
|
+
var originalConsole = {
|
|
122
|
+
debug: console.debug,
|
|
123
|
+
error: console.error,
|
|
124
|
+
info: console.info,
|
|
125
|
+
// biome-ignore lint/suspicious/noConsole: We keep the original reference.
|
|
126
|
+
log: console.log,
|
|
127
|
+
warn: console.warn,
|
|
128
|
+
};
|
|
129
|
+
var captureConsoleMethod = function (method) {
|
|
130
|
+
console[method] = function () {
|
|
131
|
+
var args = [];
|
|
132
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
133
|
+
args[_i] = arguments[_i];
|
|
134
|
+
}
|
|
135
|
+
var logMessage = "[console.".concat(method, "] ").concat(args.map(function (arg) { return (typeof arg === "object" ? JSON.stringify(arg) : String(arg)); }).join(" "));
|
|
136
|
+
logs.push(logMessage);
|
|
137
|
+
if (SHOW_ALL_LOGS) {
|
|
138
|
+
originalConsole[method].apply(originalConsole, __spreadArray([], __read(args), false));
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
captureConsoleMethod("log");
|
|
143
|
+
captureConsoleMethod("info");
|
|
144
|
+
captureConsoleMethod("warn");
|
|
145
|
+
captureConsoleMethod("error");
|
|
146
|
+
captureConsoleMethod("debug");
|
|
147
|
+
// Setup before each test
|
|
148
|
+
(0, bun_test_1.beforeEach)(function () {
|
|
149
|
+
process.env.TOKEN_SECRET = "secret";
|
|
150
|
+
process.env.TOKEN_ISSUER = "terreno-api.test";
|
|
151
|
+
process.env.SESSION_SECRET = "sessionSecret";
|
|
152
|
+
process.env.REFRESH_TOKEN_SECRET = "refreshTokenSecret";
|
|
153
|
+
(0, expressServer_1.setupEnvironment)();
|
|
154
|
+
// Re-silence loggers after setupEnvironment which may reconfigure them
|
|
155
|
+
winston_1.default.clear();
|
|
156
|
+
winston_1.default.add(silentTransport);
|
|
157
|
+
logger_1.winstonLogger.clear();
|
|
158
|
+
logger_1.winstonLogger.add(silentTransport);
|
|
159
|
+
logs = [];
|
|
160
|
+
});
|
|
161
|
+
// Clear logs after each test
|
|
162
|
+
(0, bun_test_1.afterEach)(function () {
|
|
163
|
+
logs = [];
|
|
164
|
+
});
|
|
165
|
+
// Mock @sentry/node module
|
|
166
|
+
bun_test_1.mock.module("@sentry/node", function () {
|
|
167
|
+
var mockFn = function () { return (0, bun_test_1.mock)(function () { }); };
|
|
168
|
+
// Mock Scope
|
|
169
|
+
var mockScope = {
|
|
170
|
+
addBreadcrumb: mockFn(),
|
|
171
|
+
clear: mockFn(),
|
|
172
|
+
getSpan: mockFn(),
|
|
173
|
+
setContext: mockFn(),
|
|
174
|
+
setFingerprint: mockFn(),
|
|
175
|
+
setLevel: mockFn(),
|
|
176
|
+
setSpan: mockFn(),
|
|
177
|
+
setTag: mockFn(),
|
|
178
|
+
setTags: mockFn(),
|
|
179
|
+
setTransactionName: mockFn(),
|
|
180
|
+
setUser: mockFn(),
|
|
181
|
+
};
|
|
182
|
+
// Mock Hub
|
|
183
|
+
var mockClient = {
|
|
184
|
+
captureException: mockFn(),
|
|
185
|
+
captureMessage: mockFn(),
|
|
186
|
+
close: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
187
|
+
flush: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
188
|
+
getOptions: (0, bun_test_1.mock)(function () { return ({}); }),
|
|
189
|
+
};
|
|
190
|
+
var mockHub = {
|
|
191
|
+
addBreadcrumb: mockFn(),
|
|
192
|
+
captureException: mockFn(),
|
|
193
|
+
captureMessage: mockFn(),
|
|
194
|
+
configureScope: mockFn(),
|
|
195
|
+
getClient: (0, bun_test_1.mock)(function () { return mockClient; }),
|
|
196
|
+
getScope: (0, bun_test_1.mock)(function () { return mockScope; }),
|
|
197
|
+
popScope: mockFn(),
|
|
198
|
+
pushScope: mockFn(),
|
|
199
|
+
setContext: mockFn(),
|
|
200
|
+
setTag: mockFn(),
|
|
201
|
+
setTags: mockFn(),
|
|
202
|
+
setUser: mockFn(),
|
|
203
|
+
withScope: mockFn(),
|
|
204
|
+
};
|
|
205
|
+
var mockSpan = {
|
|
206
|
+
finish: mockFn(),
|
|
207
|
+
setData: mockFn(),
|
|
208
|
+
setStatus: mockFn(),
|
|
209
|
+
setTag: mockFn(),
|
|
210
|
+
startChild: mockFn(),
|
|
211
|
+
toTraceparent: (0, bun_test_1.mock)(function () { return "mock-trace-parent"; }),
|
|
212
|
+
};
|
|
213
|
+
mockSpan.startChild = (0, bun_test_1.mock)(function () { return mockSpan; });
|
|
214
|
+
var mockTransaction = {
|
|
215
|
+
finish: mockFn(),
|
|
216
|
+
setData: mockFn(),
|
|
217
|
+
setName: mockFn(),
|
|
218
|
+
setStatus: mockFn(),
|
|
219
|
+
setTag: mockFn(),
|
|
220
|
+
startChild: (0, bun_test_1.mock)(function () { return mockSpan; }),
|
|
221
|
+
toTraceparent: (0, bun_test_1.mock)(function () { return "mock-trace-parent"; }),
|
|
222
|
+
};
|
|
223
|
+
return {
|
|
224
|
+
addBreadcrumb: mockFn(),
|
|
225
|
+
captureException: mockFn(),
|
|
226
|
+
captureMessage: mockFn(),
|
|
227
|
+
clearScope: mockFn(),
|
|
228
|
+
close: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
229
|
+
configureScope: mockFn(),
|
|
230
|
+
default: {
|
|
231
|
+
addBreadcrumb: mockFn(),
|
|
232
|
+
captureException: mockFn(),
|
|
233
|
+
captureMessage: mockFn(),
|
|
234
|
+
clearScope: mockFn(),
|
|
235
|
+
close: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
236
|
+
configureScope: mockFn(),
|
|
237
|
+
flush: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
238
|
+
getClient: (0, bun_test_1.mock)(function () { return mockClient; }),
|
|
239
|
+
getCurrentHub: (0, bun_test_1.mock)(function () { return mockHub; }),
|
|
240
|
+
getCurrentScope: (0, bun_test_1.mock)(function () { return mockScope; }),
|
|
241
|
+
Handlers: {
|
|
242
|
+
errorHandler: (0, bun_test_1.mock)(function () { return function (err, _req, _res, next) { return next(err); }; }),
|
|
243
|
+
requestHandler: (0, bun_test_1.mock)(function () { return function (_req, _res, next) { return next(); }; }),
|
|
244
|
+
tracingHandler: (0, bun_test_1.mock)(function () { return function (_req, _res, next) { return next(); }; }),
|
|
245
|
+
},
|
|
246
|
+
init: mockFn(),
|
|
247
|
+
isInitialized: (0, bun_test_1.mock)(function () { return true; }),
|
|
248
|
+
popScope: mockFn(),
|
|
249
|
+
pushScope: mockFn(),
|
|
250
|
+
Severity: {
|
|
251
|
+
Debug: "debug",
|
|
252
|
+
Error: "error",
|
|
253
|
+
Fatal: "fatal",
|
|
254
|
+
Info: "info",
|
|
255
|
+
Warning: "warning",
|
|
256
|
+
},
|
|
257
|
+
setContext: mockFn(),
|
|
258
|
+
setFingerprint: mockFn(),
|
|
259
|
+
setLevel: mockFn(),
|
|
260
|
+
setTag: mockFn(),
|
|
261
|
+
setTags: mockFn(),
|
|
262
|
+
setUser: mockFn(),
|
|
263
|
+
setupExpressErrorHandler: mockFn(),
|
|
264
|
+
startTransaction: (0, bun_test_1.mock)(function () { return mockTransaction; }),
|
|
265
|
+
withScope: (0, bun_test_1.mock)(function (callback) { return callback(mockScope); }),
|
|
266
|
+
},
|
|
267
|
+
flush: (0, bun_test_1.mock)(function () { return Promise.resolve(true); }),
|
|
268
|
+
getClient: (0, bun_test_1.mock)(function () { return mockClient; }),
|
|
269
|
+
getCurrentHub: (0, bun_test_1.mock)(function () { return mockHub; }),
|
|
270
|
+
getCurrentScope: (0, bun_test_1.mock)(function () { return mockScope; }),
|
|
271
|
+
Handlers: {
|
|
272
|
+
errorHandler: (0, bun_test_1.mock)(function () { return function (err, _req, _res, next) { return next(err); }; }),
|
|
273
|
+
requestHandler: (0, bun_test_1.mock)(function () { return function (_req, _res, next) { return next(); }; }),
|
|
274
|
+
tracingHandler: (0, bun_test_1.mock)(function () { return function (_req, _res, next) { return next(); }; }),
|
|
275
|
+
},
|
|
276
|
+
init: mockFn(),
|
|
277
|
+
isInitialized: (0, bun_test_1.mock)(function () { return true; }),
|
|
278
|
+
popScope: mockFn(),
|
|
279
|
+
pushScope: mockFn(),
|
|
280
|
+
Severity: {
|
|
281
|
+
Debug: "debug",
|
|
282
|
+
Error: "error",
|
|
283
|
+
Fatal: "fatal",
|
|
284
|
+
Info: "info",
|
|
285
|
+
Warning: "warning",
|
|
286
|
+
},
|
|
287
|
+
setContext: mockFn(),
|
|
288
|
+
setFingerprint: mockFn(),
|
|
289
|
+
setLevel: mockFn(),
|
|
290
|
+
setTag: mockFn(),
|
|
291
|
+
setTags: mockFn(),
|
|
292
|
+
setUser: mockFn(),
|
|
293
|
+
setupExpressErrorHandler: mockFn(),
|
|
294
|
+
startTransaction: (0, bun_test_1.mock)(function () { return mockTransaction; }),
|
|
295
|
+
withScope: (0, bun_test_1.mock)(function (callback) { return callback(mockScope); }),
|
|
296
|
+
};
|
|
297
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./bunSetup";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./bunSetup"), exports);
|
package/dist/tests.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import express, { type Express } from "express";
|
|
2
|
+
import mongoose, { type Model, Schema } from "mongoose";
|
|
3
|
+
import type TestAgent from "supertest/lib/agent";
|
|
4
|
+
export interface User {
|
|
5
|
+
admin: boolean;
|
|
6
|
+
name?: string;
|
|
7
|
+
username: string;
|
|
8
|
+
email: string;
|
|
9
|
+
age?: number;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SuperUser extends User {
|
|
13
|
+
superTitle: string;
|
|
14
|
+
}
|
|
15
|
+
export interface StaffUser extends User {
|
|
16
|
+
department: string;
|
|
17
|
+
}
|
|
18
|
+
export interface FoodCategory {
|
|
19
|
+
_id?: string;
|
|
20
|
+
name: string;
|
|
21
|
+
show: boolean;
|
|
22
|
+
created: Date;
|
|
23
|
+
updated: Date;
|
|
24
|
+
}
|
|
25
|
+
export interface Food {
|
|
26
|
+
_id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
calories: number;
|
|
29
|
+
created: Date;
|
|
30
|
+
ownerId: mongoose.Types.ObjectId | User;
|
|
31
|
+
hidden?: boolean;
|
|
32
|
+
source: {
|
|
33
|
+
name: string;
|
|
34
|
+
href?: string;
|
|
35
|
+
dateAdded?: string;
|
|
36
|
+
};
|
|
37
|
+
tags: string[];
|
|
38
|
+
eatenBy: [Schema.Types.ObjectId | User];
|
|
39
|
+
lastEatenWith: {
|
|
40
|
+
[name: string]: Date;
|
|
41
|
+
};
|
|
42
|
+
categories: FoodCategory[];
|
|
43
|
+
expiration: string;
|
|
44
|
+
likesIds: {
|
|
45
|
+
userId: string;
|
|
46
|
+
likes: boolean;
|
|
47
|
+
}[];
|
|
48
|
+
}
|
|
49
|
+
export declare const UserModel: mongoose.Model<User, {}, {}, {}, mongoose.Document<unknown, {}, User, {}, mongoose.DefaultSchemaOptions> & User & {
|
|
50
|
+
_id: mongoose.Types.ObjectId;
|
|
51
|
+
} & {
|
|
52
|
+
__v: number;
|
|
53
|
+
} & {
|
|
54
|
+
id: string;
|
|
55
|
+
}, any, User>;
|
|
56
|
+
export declare const SuperUserModel: mongoose.Model<User & SuperUser, {}, {}, {
|
|
57
|
+
id: string;
|
|
58
|
+
}, mongoose.Document<unknown, {}, User & SuperUser, {
|
|
59
|
+
id: string;
|
|
60
|
+
}, mongoose.DefaultSchemaOptions> & Omit<User & SuperUser & {
|
|
61
|
+
_id: mongoose.Types.ObjectId;
|
|
62
|
+
} & {
|
|
63
|
+
__v: number;
|
|
64
|
+
}, "id"> & {
|
|
65
|
+
id: string;
|
|
66
|
+
}, any, User & SuperUser>;
|
|
67
|
+
export declare const StaffUserModel: mongoose.Model<User & StaffUser, {}, {}, {
|
|
68
|
+
id: string;
|
|
69
|
+
}, mongoose.Document<unknown, {}, User & StaffUser, {
|
|
70
|
+
id: string;
|
|
71
|
+
}, mongoose.DefaultSchemaOptions> & Omit<User & StaffUser & {
|
|
72
|
+
_id: mongoose.Types.ObjectId;
|
|
73
|
+
} & {
|
|
74
|
+
__v: number;
|
|
75
|
+
}, "id"> & {
|
|
76
|
+
id: string;
|
|
77
|
+
}, any, User & StaffUser>;
|
|
78
|
+
export declare const FoodModel: Model<Food>;
|
|
79
|
+
interface RequiredField {
|
|
80
|
+
name: string;
|
|
81
|
+
about?: string;
|
|
82
|
+
}
|
|
83
|
+
export declare const RequiredModel: mongoose.Model<RequiredField, {}, {}, {}, mongoose.Document<unknown, {}, RequiredField, {}, mongoose.DefaultSchemaOptions> & RequiredField & {
|
|
84
|
+
_id: mongoose.Types.ObjectId;
|
|
85
|
+
} & {
|
|
86
|
+
__v: number;
|
|
87
|
+
} & {
|
|
88
|
+
id: string;
|
|
89
|
+
}, any, RequiredField>;
|
|
90
|
+
export declare function getBaseServer(): Express;
|
|
91
|
+
export declare function authAsUser(app: express.Application, type: "admin" | "notAdmin"): Promise<TestAgent>;
|
|
92
|
+
export declare function setupDb(): Promise<(mongoose.Document<unknown, {}, User, {}, mongoose.DefaultSchemaOptions> & User & {
|
|
93
|
+
_id: mongoose.Types.ObjectId;
|
|
94
|
+
} & {
|
|
95
|
+
__v: number;
|
|
96
|
+
} & {
|
|
97
|
+
id: string;
|
|
98
|
+
})[]>;
|
|
99
|
+
export {};
|
package/dist/tests.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
72
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
73
|
+
if (!m) return o;
|
|
74
|
+
var i = m.call(o), r, ar = [], e;
|
|
75
|
+
try {
|
|
76
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
77
|
+
}
|
|
78
|
+
catch (error) { e = { error: error }; }
|
|
79
|
+
finally {
|
|
80
|
+
try {
|
|
81
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
82
|
+
}
|
|
83
|
+
finally { if (e) throw e.error; }
|
|
84
|
+
}
|
|
85
|
+
return ar;
|
|
86
|
+
};
|
|
87
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
88
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
89
|
+
};
|
|
90
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
91
|
+
exports.RequiredModel = exports.FoodModel = exports.StaffUserModel = exports.SuperUserModel = exports.UserModel = void 0;
|
|
92
|
+
exports.getBaseServer = getBaseServer;
|
|
93
|
+
exports.authAsUser = authAsUser;
|
|
94
|
+
exports.setupDb = setupDb;
|
|
95
|
+
var express_1 = __importDefault(require("express"));
|
|
96
|
+
var mongoose_1 = __importStar(require("mongoose"));
|
|
97
|
+
var passport_local_mongoose_1 = __importDefault(require("passport-local-mongoose"));
|
|
98
|
+
var supertest_1 = __importDefault(require("supertest"));
|
|
99
|
+
var logger_1 = require("./logger");
|
|
100
|
+
var plugins_1 = require("./plugins");
|
|
101
|
+
var userSchema = new mongoose_1.Schema({
|
|
102
|
+
admin: { default: false, type: Boolean },
|
|
103
|
+
age: Number,
|
|
104
|
+
name: String,
|
|
105
|
+
username: String,
|
|
106
|
+
});
|
|
107
|
+
userSchema.plugin(passport_local_mongoose_1.default, {
|
|
108
|
+
attemptsField: "attempts",
|
|
109
|
+
interval: process.env.NODE_ENV === "test" ? 1 : 100,
|
|
110
|
+
limitAttempts: true,
|
|
111
|
+
maxAttempts: 3,
|
|
112
|
+
maxInterval: process.env.NODE_ENV === "test" ? 1 : 300000,
|
|
113
|
+
usernameCaseInsensitive: true,
|
|
114
|
+
usernameField: "email",
|
|
115
|
+
});
|
|
116
|
+
// userSchema.plugin(tokenPlugin);
|
|
117
|
+
userSchema.plugin(plugins_1.createdUpdatedPlugin);
|
|
118
|
+
userSchema.plugin(plugins_1.isDisabledPlugin);
|
|
119
|
+
userSchema.methods.postCreate = function (body) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
121
|
+
return __generator(this, function (_a) {
|
|
122
|
+
this.age = body.age;
|
|
123
|
+
return [2 /*return*/, this.save()];
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
exports.UserModel = (0, mongoose_1.model)("User", userSchema);
|
|
128
|
+
var superUserSchema = new mongoose_1.Schema({
|
|
129
|
+
superTitle: { required: true, type: String },
|
|
130
|
+
});
|
|
131
|
+
exports.SuperUserModel = exports.UserModel.discriminator("SuperUser", superUserSchema);
|
|
132
|
+
var staffUserSchema = new mongoose_1.Schema({
|
|
133
|
+
department: { required: true, type: String },
|
|
134
|
+
});
|
|
135
|
+
exports.StaffUserModel = exports.UserModel.discriminator("Staff", staffUserSchema);
|
|
136
|
+
var foodCategorySchema = new mongoose_1.Schema({
|
|
137
|
+
name: String,
|
|
138
|
+
show: Boolean,
|
|
139
|
+
}, { timestamps: { createdAt: "created", updatedAt: "updated" } });
|
|
140
|
+
var likesSchema = new mongoose_1.Schema({
|
|
141
|
+
likes: Boolean,
|
|
142
|
+
userId: { ref: "User", type: "ObjectId" },
|
|
143
|
+
});
|
|
144
|
+
var foodSchema = new mongoose_1.Schema({
|
|
145
|
+
calories: Number,
|
|
146
|
+
categories: [foodCategorySchema],
|
|
147
|
+
created: Date,
|
|
148
|
+
eatenBy: [
|
|
149
|
+
{
|
|
150
|
+
ref: "User",
|
|
151
|
+
required: true,
|
|
152
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
expiration: plugins_1.DateOnly,
|
|
156
|
+
hidden: { default: false, type: Boolean },
|
|
157
|
+
lastEatenWith: {
|
|
158
|
+
of: Date,
|
|
159
|
+
type: Map,
|
|
160
|
+
},
|
|
161
|
+
likesIds: { required: true, type: [likesSchema] },
|
|
162
|
+
name: String,
|
|
163
|
+
ownerId: { ref: "User", type: "ObjectId" },
|
|
164
|
+
source: {
|
|
165
|
+
dateAdded: String,
|
|
166
|
+
href: String,
|
|
167
|
+
name: String,
|
|
168
|
+
},
|
|
169
|
+
tags: [String],
|
|
170
|
+
}, { strict: "throw", toJSON: { virtuals: true }, toObject: { virtuals: true } });
|
|
171
|
+
foodSchema.virtual("description").get(function () {
|
|
172
|
+
return "".concat(this.name, " has ").concat(this.calories, " calories");
|
|
173
|
+
});
|
|
174
|
+
exports.FoodModel = (0, mongoose_1.model)("Food", foodSchema);
|
|
175
|
+
var requiredSchema = new mongoose_1.Schema({
|
|
176
|
+
about: String,
|
|
177
|
+
name: { required: true, type: String },
|
|
178
|
+
});
|
|
179
|
+
exports.RequiredModel = (0, mongoose_1.model)("Required", requiredSchema);
|
|
180
|
+
function getBaseServer() {
|
|
181
|
+
var app = (0, express_1.default)();
|
|
182
|
+
app.all("/*", function (req, res, next) {
|
|
183
|
+
res.header("Access-Control-Allow-Origin", "*");
|
|
184
|
+
res.header("Access-Control-Allow-Headers", "*");
|
|
185
|
+
// intercepts OPTIONS method
|
|
186
|
+
if (req.method === "OPTIONS") {
|
|
187
|
+
res.send(200);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
next();
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
app.use(express_1.default.json());
|
|
194
|
+
return app;
|
|
195
|
+
}
|
|
196
|
+
function authAsUser(app, type) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
198
|
+
var email, password, agent, res;
|
|
199
|
+
return __generator(this, function (_a) {
|
|
200
|
+
switch (_a.label) {
|
|
201
|
+
case 0:
|
|
202
|
+
email = type === "admin" ? "admin@example.com" : "notAdmin@example.com";
|
|
203
|
+
password = type === "admin" ? "securePassword" : "password";
|
|
204
|
+
agent = supertest_1.default.agent(app);
|
|
205
|
+
return [4 /*yield*/, agent.post("/auth/login").send({ email: email, password: password }).expect(200)];
|
|
206
|
+
case 1:
|
|
207
|
+
res = _a.sent();
|
|
208
|
+
return [4 /*yield*/, agent.set("authorization", "Bearer ".concat(res.body.data.token))];
|
|
209
|
+
case 2:
|
|
210
|
+
_a.sent();
|
|
211
|
+
return [2 /*return*/, agent];
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
function setupDb() {
|
|
217
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
218
|
+
var _a, notAdmin, admin, adminOther, error_1;
|
|
219
|
+
return __generator(this, function (_b) {
|
|
220
|
+
switch (_b.label) {
|
|
221
|
+
case 0: return [4 /*yield*/, mongoose_1.default
|
|
222
|
+
.connect("mongodb://127.0.0.1/terreno?&connectTimeoutMS=360000")
|
|
223
|
+
.catch(logger_1.logger.catch)];
|
|
224
|
+
case 1:
|
|
225
|
+
_b.sent();
|
|
226
|
+
process.env.REFRESH_TOKEN_SECRET = "refresh_secret";
|
|
227
|
+
process.env.TOKEN_SECRET = "secret";
|
|
228
|
+
process.env.TOKEN_EXPIRES_IN = "30m";
|
|
229
|
+
process.env.TOKEN_ISSUER = "example.com";
|
|
230
|
+
process.env.SESSION_SECRET = "session";
|
|
231
|
+
// Broken out of the try/catch below so you can test the catch logger by shutting down mongo.
|
|
232
|
+
return [4 /*yield*/, Promise.all([exports.UserModel.deleteMany({}), exports.FoodModel.deleteMany({})]).catch(logger_1.logger.catch)];
|
|
233
|
+
case 2:
|
|
234
|
+
// Broken out of the try/catch below so you can test the catch logger by shutting down mongo.
|
|
235
|
+
_b.sent();
|
|
236
|
+
_b.label = 3;
|
|
237
|
+
case 3:
|
|
238
|
+
_b.trys.push([3, 11, , 12]);
|
|
239
|
+
return [4 /*yield*/, Promise.all([
|
|
240
|
+
exports.UserModel.create({ email: "notAdmin@example.com", name: "Not Admin" }),
|
|
241
|
+
exports.UserModel.create({ admin: true, email: "admin@example.com", name: "Admin" }),
|
|
242
|
+
exports.UserModel.create({ admin: true, email: "admin+other@example.com", name: "Admin Other" }),
|
|
243
|
+
])];
|
|
244
|
+
case 4:
|
|
245
|
+
_a = __read.apply(void 0, [_b.sent(), 3]), notAdmin = _a[0], admin = _a[1], adminOther = _a[2];
|
|
246
|
+
return [4 /*yield*/, notAdmin.setPassword("password")];
|
|
247
|
+
case 5:
|
|
248
|
+
_b.sent();
|
|
249
|
+
return [4 /*yield*/, notAdmin.save()];
|
|
250
|
+
case 6:
|
|
251
|
+
_b.sent();
|
|
252
|
+
return [4 /*yield*/, admin.setPassword("securePassword")];
|
|
253
|
+
case 7:
|
|
254
|
+
_b.sent();
|
|
255
|
+
return [4 /*yield*/, admin.save()];
|
|
256
|
+
case 8:
|
|
257
|
+
_b.sent();
|
|
258
|
+
return [4 /*yield*/, adminOther.setPassword("otherPassword")];
|
|
259
|
+
case 9:
|
|
260
|
+
_b.sent();
|
|
261
|
+
return [4 /*yield*/, adminOther.save()];
|
|
262
|
+
case 10:
|
|
263
|
+
_b.sent();
|
|
264
|
+
return [2 /*return*/, [admin, notAdmin, adminOther]];
|
|
265
|
+
case 11:
|
|
266
|
+
error_1 = _b.sent();
|
|
267
|
+
console.error("Error setting up DB", error_1);
|
|
268
|
+
throw error_1;
|
|
269
|
+
case 12: return [2 /*return*/];
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}
|