@terreno/api 0.14.2 → 0.15.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.
|
@@ -35,6 +35,33 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __values = (this && this.__values) || function(o) {
|
|
39
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
+
if (m) return m.call(o);
|
|
41
|
+
if (o && typeof o.length === "number") return {
|
|
42
|
+
next: function () {
|
|
43
|
+
if (o && i >= o.length) o = void 0;
|
|
44
|
+
return { value: o && o[i++], done: !o };
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
+
};
|
|
49
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
50
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
51
|
+
if (!m) return o;
|
|
52
|
+
var i = m.call(o), r, ar = [], e;
|
|
53
|
+
try {
|
|
54
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
55
|
+
}
|
|
56
|
+
catch (error) { e = { error: error }; }
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
60
|
+
}
|
|
61
|
+
finally { if (e) throw e.error; }
|
|
62
|
+
}
|
|
63
|
+
return ar;
|
|
64
|
+
};
|
|
38
65
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
66
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
67
|
};
|
|
@@ -429,4 +456,60 @@ var versionCheckPlugin_1 = require("../versionCheckPlugin");
|
|
|
429
456
|
}
|
|
430
457
|
});
|
|
431
458
|
}); });
|
|
459
|
+
(0, bun_test_1.it)("handles a numeric version query parameter", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
460
|
+
var express, expressApp, plugin, testApp, res;
|
|
461
|
+
return __generator(this, function (_a) {
|
|
462
|
+
switch (_a.label) {
|
|
463
|
+
case 0: return [4 /*yield*/, (0, tests_1.setupDb)()];
|
|
464
|
+
case 1:
|
|
465
|
+
_a.sent();
|
|
466
|
+
return [4 /*yield*/, versionConfig_1.VersionConfig.deleteMany({})];
|
|
467
|
+
case 2:
|
|
468
|
+
_a.sent();
|
|
469
|
+
express = require("express");
|
|
470
|
+
expressApp = express();
|
|
471
|
+
// Use a custom query parser that coerces numeric strings to numbers so we
|
|
472
|
+
// exercise the `typeof versionParam === "number"` branch.
|
|
473
|
+
expressApp.set("query parser", function (qs) {
|
|
474
|
+
var e_1, _a;
|
|
475
|
+
var params = {};
|
|
476
|
+
try {
|
|
477
|
+
for (var _b = __values(qs.split("&")), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
478
|
+
var pair = _c.value;
|
|
479
|
+
var _d = __read(pair.split("="), 2), key = _d[0], val = _d[1];
|
|
480
|
+
if (val !== undefined && /^\d+$/.test(val)) {
|
|
481
|
+
params[decodeURIComponent(key)] = Number(val);
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
params[decodeURIComponent(key)] = decodeURIComponent(val !== null && val !== void 0 ? val : "");
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
489
|
+
finally {
|
|
490
|
+
try {
|
|
491
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
492
|
+
}
|
|
493
|
+
finally { if (e_1) throw e_1.error; }
|
|
494
|
+
}
|
|
495
|
+
return params;
|
|
496
|
+
});
|
|
497
|
+
plugin = new versionCheckPlugin_1.VersionCheckPlugin();
|
|
498
|
+
plugin.register(expressApp);
|
|
499
|
+
return [4 /*yield*/, versionConfig_1.VersionConfig.create({
|
|
500
|
+
webRequiredVersion: 100,
|
|
501
|
+
webWarningVersion: 150,
|
|
502
|
+
})];
|
|
503
|
+
case 3:
|
|
504
|
+
_a.sent();
|
|
505
|
+
testApp = (0, supertest_1.default)(expressApp);
|
|
506
|
+
return [4 /*yield*/, testApp.get("/version-check?version=50&platform=web")];
|
|
507
|
+
case 4:
|
|
508
|
+
res = _a.sent();
|
|
509
|
+
(0, bun_test_1.expect)(res.status).toBe(200);
|
|
510
|
+
(0, bun_test_1.expect)(res.body.status).toBe("required");
|
|
511
|
+
return [2 /*return*/];
|
|
512
|
+
}
|
|
513
|
+
});
|
|
514
|
+
}); });
|
|
432
515
|
});
|
package/dist/errors.test.js
CHANGED
|
@@ -155,6 +155,31 @@ var buildResponse = function () {
|
|
|
155
155
|
(0, bun_test_1.expect)((0, errors_1.getDisableExternalErrorTracking)({ foo: "bar" })).toBeUndefined();
|
|
156
156
|
});
|
|
157
157
|
});
|
|
158
|
+
(0, bun_test_1.describe)("errorMessage", function () {
|
|
159
|
+
(0, bun_test_1.it)("returns the message from an Error instance", function () {
|
|
160
|
+
(0, bun_test_1.expect)((0, errors_1.errorMessage)(new Error("boom"))).toBe("boom");
|
|
161
|
+
});
|
|
162
|
+
(0, bun_test_1.it)("returns the string representation of a non-Error value", function () {
|
|
163
|
+
(0, bun_test_1.expect)((0, errors_1.errorMessage)("raw string")).toBe("raw string");
|
|
164
|
+
(0, bun_test_1.expect)((0, errors_1.errorMessage)(42)).toBe("42");
|
|
165
|
+
(0, bun_test_1.expect)((0, errors_1.errorMessage)(null)).toBe("null");
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
(0, bun_test_1.describe)("errorStack", function () {
|
|
169
|
+
(0, bun_test_1.it)("returns the stack trace from an Error with a stack", function () {
|
|
170
|
+
var err = new Error("fail");
|
|
171
|
+
(0, bun_test_1.expect)((0, errors_1.errorStack)(err)).toBe(err.stack);
|
|
172
|
+
});
|
|
173
|
+
(0, bun_test_1.it)("returns the string representation when error has no stack", function () {
|
|
174
|
+
var err = new Error("no-stack");
|
|
175
|
+
Object.defineProperty(err, "stack", { value: undefined });
|
|
176
|
+
(0, bun_test_1.expect)((0, errors_1.errorStack)(err)).toBe("Error: no-stack");
|
|
177
|
+
});
|
|
178
|
+
(0, bun_test_1.it)("returns the string representation of a non-Error value", function () {
|
|
179
|
+
(0, bun_test_1.expect)((0, errors_1.errorStack)("plain")).toBe("plain");
|
|
180
|
+
(0, bun_test_1.expect)((0, errors_1.errorStack)(123)).toBe("123");
|
|
181
|
+
});
|
|
182
|
+
});
|
|
158
183
|
(0, bun_test_1.describe)("getAPIErrorBody", function () {
|
|
159
184
|
(0, bun_test_1.it)("returns title and status by default", function () {
|
|
160
185
|
var error = new errors_1.APIError({ status: 404, title: "Not Found" });
|
package/package.json
CHANGED
|
@@ -244,4 +244,40 @@ describe("VersionCheckPlugin direct usage", () => {
|
|
|
244
244
|
expect(res.status).toBe(200);
|
|
245
245
|
expect(res.body.status).toBe("ok");
|
|
246
246
|
});
|
|
247
|
+
|
|
248
|
+
it("handles a numeric version query parameter", async () => {
|
|
249
|
+
await setupDb();
|
|
250
|
+
await VersionConfig.deleteMany({});
|
|
251
|
+
|
|
252
|
+
const express = require("express");
|
|
253
|
+
const expressApp = express();
|
|
254
|
+
|
|
255
|
+
// Use a custom query parser that coerces numeric strings to numbers so we
|
|
256
|
+
// exercise the `typeof versionParam === "number"` branch.
|
|
257
|
+
expressApp.set("query parser", (qs: string) => {
|
|
258
|
+
const params: Record<string, string | number> = {};
|
|
259
|
+
for (const pair of qs.split("&")) {
|
|
260
|
+
const [key, val] = pair.split("=");
|
|
261
|
+
if (val !== undefined && /^\d+$/.test(val)) {
|
|
262
|
+
params[decodeURIComponent(key)] = Number(val);
|
|
263
|
+
} else {
|
|
264
|
+
params[decodeURIComponent(key)] = decodeURIComponent(val ?? "");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return params;
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
const plugin = new VersionCheckPlugin();
|
|
271
|
+
plugin.register(expressApp);
|
|
272
|
+
|
|
273
|
+
await VersionConfig.create({
|
|
274
|
+
webRequiredVersion: 100,
|
|
275
|
+
webWarningVersion: 150,
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
const testApp = supertest(expressApp);
|
|
279
|
+
const res = await testApp.get("/version-check?version=50&platform=web");
|
|
280
|
+
expect(res.status).toBe(200);
|
|
281
|
+
expect(res.body.status).toBe("required");
|
|
282
|
+
});
|
|
247
283
|
});
|
package/src/errors.test.ts
CHANGED
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
APIError,
|
|
8
8
|
apiErrorMiddleware,
|
|
9
9
|
apiUnauthorizedMiddleware,
|
|
10
|
+
errorMessage,
|
|
11
|
+
errorStack,
|
|
10
12
|
errorsPlugin,
|
|
11
13
|
getAPIErrorBody,
|
|
12
14
|
getDisableExternalErrorTracking,
|
|
@@ -154,6 +156,36 @@ describe("getDisableExternalErrorTracking", () => {
|
|
|
154
156
|
});
|
|
155
157
|
});
|
|
156
158
|
|
|
159
|
+
describe("errorMessage", () => {
|
|
160
|
+
it("returns the message from an Error instance", () => {
|
|
161
|
+
expect(errorMessage(new Error("boom"))).toBe("boom");
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("returns the string representation of a non-Error value", () => {
|
|
165
|
+
expect(errorMessage("raw string")).toBe("raw string");
|
|
166
|
+
expect(errorMessage(42)).toBe("42");
|
|
167
|
+
expect(errorMessage(null)).toBe("null");
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe("errorStack", () => {
|
|
172
|
+
it("returns the stack trace from an Error with a stack", () => {
|
|
173
|
+
const err = new Error("fail");
|
|
174
|
+
expect(errorStack(err)).toBe(err.stack as string);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("returns the string representation when error has no stack", () => {
|
|
178
|
+
const err = new Error("no-stack");
|
|
179
|
+
Object.defineProperty(err, "stack", {value: undefined});
|
|
180
|
+
expect(errorStack(err)).toBe("Error: no-stack");
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("returns the string representation of a non-Error value", () => {
|
|
184
|
+
expect(errorStack("plain")).toBe("plain");
|
|
185
|
+
expect(errorStack(123)).toBe("123");
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
157
189
|
describe("getAPIErrorBody", () => {
|
|
158
190
|
it("returns title and status by default", () => {
|
|
159
191
|
const error = new APIError({status: 404, title: "Not Found"});
|