@mountainpass/waycharter 1.0.76 → 2.0.2
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/CHANGELOG.md +18 -0
- package/README.md +1 -1
- package/dist/action.d.ts +8 -0
- package/dist/action.js +3 -0
- package/dist/action.js.map +1 -0
- package/dist/collections/build-first-link.d.ts +13 -0
- package/dist/collections/build-first-link.js +30 -19
- package/dist/collections/build-first-link.js.map +1 -1
- package/dist/collections/build-next-link.d.ts +12 -0
- package/dist/collections/build-next-link.js +26 -15
- package/dist/collections/build-next-link.js.map +1 -1
- package/dist/collections/build-previous-link.d.ts +13 -0
- package/dist/collections/build-previous-link.js +52 -27
- package/dist/collections/build-previous-link.js.map +1 -1
- package/dist/collections/built-item-links.d.ts +16 -0
- package/dist/collections/built-item-links.js +76 -118
- package/dist/collections/built-item-links.js.map +1 -1
- package/dist/handler.d.ts +21 -0
- package/dist/handler.js +3 -0
- package/dist/handler.js.map +1 -0
- package/dist/link.d.ts +17 -0
- package/dist/link.js +3 -0
- package/dist/link.js.map +1 -0
- package/dist/method.d.ts +28 -0
- package/dist/method.js +41 -0
- package/dist/method.js.map +1 -0
- package/dist/to-links.d.ts +9 -0
- package/dist/to-links.js +77 -0
- package/dist/to-links.js.map +1 -0
- package/dist/util/array-to-lower-case.d.ts +4 -0
- package/dist/util/array-to-lower-case.js +11 -0
- package/dist/util/array-to-lower-case.js.map +1 -0
- package/dist/util/check-page.d.ts +13 -0
- package/dist/util/check-page.js +62 -0
- package/dist/util/check-page.js.map +1 -0
- package/dist/util/convert-resource-links.d.ts +7 -0
- package/dist/util/convert-resource-links.js +73 -0
- package/dist/util/convert-resource-links.js.map +1 -0
- package/dist/util/extract-path-parameters.d.ts +6 -0
- package/dist/util/extract-path-parameters.js +13 -0
- package/dist/util/extract-path-parameters.js.map +1 -0
- package/dist/util/filter-headers.d.ts +9 -0
- package/dist/util/filter-headers.js +22 -0
- package/dist/util/filter-headers.js.map +1 -0
- package/dist/util/filter-parameters.d.ts +17 -0
- package/dist/util/filter-parameters.js +87 -0
- package/dist/util/filter-parameters.js.map +1 -0
- package/dist/util/method-can-have-body.d.ts +4 -0
- package/dist/util/method-can-have-body.js +11 -0
- package/dist/util/method-can-have-body.js.map +1 -0
- package/dist/util/method-is-cacheable.d.ts +4 -0
- package/dist/util/method-is-cacheable.js +11 -0
- package/dist/util/method-is-cacheable.js.map +1 -0
- package/dist/util/router-to-rfc6570.d.ts +4 -0
- package/dist/util/router-to-rfc6570.js +4 -7
- package/dist/util/router-to-rfc6570.js.map +1 -1
- package/dist/util/unique.d.ts +4 -0
- package/dist/util/unique.js +36 -0
- package/dist/util/unique.js.map +1 -0
- package/dist/waycharter.d.ts +73 -0
- package/dist/waycharter.js +475 -306
- package/dist/waycharter.js.map +1 -1
- package/package.json +18 -39
- package/dist/convert-resource-links.js +0 -44
- package/dist/convert-resource-links.js.map +0 -1
- package/dist/method-can-have-body.js +0 -14
- package/dist/method-can-have-body.js.map +0 -1
- package/dist/method-is-cacheable.js +0 -14
- package/dist/method-is-cacheable.js.map +0 -1
- package/dist/util/logger.js +0 -47
- package/dist/util/logger.js.map +0 -1
package/dist/waycharter.js
CHANGED
|
@@ -1,327 +1,496 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _express = require("express");
|
|
9
|
-
|
|
10
|
-
var _uriTemplateLite = require("uri-template-lite");
|
|
11
|
-
|
|
12
|
-
var _jsonpointer = _interopRequireDefault(require("jsonpointer"));
|
|
13
|
-
|
|
14
|
-
var _methodCanHaveBody = require("./method-can-have-body");
|
|
15
|
-
|
|
16
|
-
var _convertResourceLinks = require("./convert-resource-links");
|
|
17
|
-
|
|
18
|
-
var _buildFirstLink = require("./collections/build-first-link");
|
|
19
|
-
|
|
20
|
-
var _buildPreviousLink = require("./collections/build-previous-link");
|
|
21
|
-
|
|
22
|
-
var _buildNextLink = require("./collections/build-next-link");
|
|
23
|
-
|
|
24
|
-
var _builtItemLinks = require("./collections/built-item-links");
|
|
25
|
-
|
|
26
|
-
var _methodIsCacheable = require("./method-is-cacheable");
|
|
27
|
-
|
|
28
|
-
var _routerToRfc = require("./util/router-to-rfc6570");
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
-
|
|
32
|
-
class WayCharter {
|
|
33
|
-
constructor() {
|
|
34
|
-
this.router = (0, _express.Router)();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
registerResourceType({
|
|
38
|
-
path,
|
|
39
|
-
loader,
|
|
40
|
-
loaderVaries
|
|
41
|
-
}) {
|
|
42
|
-
// TODO: error handling for path not set
|
|
43
|
-
// TODO: error handling for loader not set
|
|
44
|
-
const lowerCaseLoaderVaries = new Set(loaderVaries ? loaderVaries.map(header => header.toLowerCase()) : []);
|
|
45
|
-
const uriTemplate = (0, _routerToRfc.routerToRfc6570)(path);
|
|
46
|
-
this.router.get(path, async function (request, response, next) {
|
|
47
|
-
const filteredHeaders = Object.keys(request.headers).reduce((filtered, key) => lowerCaseLoaderVaries.has(key) ? { ...filtered,
|
|
48
|
-
[key]: request.headers[key]
|
|
49
|
-
} : filtered, {});
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
const resource = await loader({ ...request.params,
|
|
53
|
-
...request.query
|
|
54
|
-
}, filteredHeaders, request.url, request, response);
|
|
55
|
-
|
|
56
|
-
if (loaderVaries) {
|
|
57
|
-
response.header('vary', [...lowerCaseLoaderVaries]);
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
58
8
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
70
20
|
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (_) try {
|
|
29
|
+
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;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
50
|
+
var t = {};
|
|
51
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
52
|
+
t[p] = s[p];
|
|
53
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
54
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
55
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
56
|
+
t[p[i]] = s[p[i]];
|
|
57
|
+
}
|
|
58
|
+
return t;
|
|
59
|
+
};
|
|
60
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
61
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
62
|
+
if (!m) return o;
|
|
63
|
+
var i = m.call(o), r, ar = [], e;
|
|
64
|
+
try {
|
|
65
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
66
|
+
}
|
|
67
|
+
catch (error) { e = { error: error }; }
|
|
68
|
+
finally {
|
|
69
|
+
try {
|
|
70
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
71
|
+
}
|
|
72
|
+
finally { if (e) throw e.error; }
|
|
73
|
+
}
|
|
74
|
+
return ar;
|
|
75
|
+
};
|
|
76
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
77
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
78
|
+
if (ar || !(i in from)) {
|
|
79
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
80
|
+
ar[i] = from[i];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
84
|
+
};
|
|
85
|
+
var __values = (this && this.__values) || function(o) {
|
|
86
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
87
|
+
if (m) return m.call(o);
|
|
88
|
+
if (o && typeof o.length === "number") return {
|
|
89
|
+
next: function () {
|
|
90
|
+
if (o && i >= o.length) o = void 0;
|
|
91
|
+
return { value: o && o[i++], done: !o };
|
|
92
|
+
}
|
|
74
93
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
95
|
+
};
|
|
96
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
97
|
+
exports.EndPoint = void 0;
|
|
98
|
+
var uri_template_lite_1 = require("uri-template-lite");
|
|
99
|
+
var convert_resource_links_1 = require("./util/convert-resource-links");
|
|
100
|
+
var build_first_link_1 = require("./collections/build-first-link");
|
|
101
|
+
var build_previous_link_1 = require("./collections/build-previous-link");
|
|
102
|
+
var build_next_link_1 = require("./collections/build-next-link");
|
|
103
|
+
var built_item_links_1 = require("./collections/built-item-links");
|
|
104
|
+
var router_to_rfc6570_1 = require("./util/router-to-rfc6570");
|
|
105
|
+
var to_links_1 = require("./to-links");
|
|
106
|
+
var filter_headers_1 = require("./util/filter-headers");
|
|
107
|
+
var check_page_1 = require("./util/check-page");
|
|
108
|
+
var extract_path_parameters_1 = require("./util/extract-path-parameters");
|
|
109
|
+
var array_to_lower_case_1 = require("./util/array-to-lower-case");
|
|
110
|
+
var filter_parameters_1 = require("./util/filter-parameters");
|
|
111
|
+
var unique_1 = require("./util/unique");
|
|
112
|
+
/**
|
|
113
|
+
* @param resource
|
|
114
|
+
* @param response
|
|
115
|
+
* @param requestUrl
|
|
116
|
+
* @param additionalLinks
|
|
117
|
+
*/
|
|
118
|
+
function sendHandlerResponse(resource, response, additionalLinks) {
|
|
119
|
+
if (resource.links || additionalLinks) {
|
|
120
|
+
var links = (0, convert_resource_links_1.covertResourceLinks)(__spreadArray(__spreadArray([], __read((additionalLinks || [])), false), __read((resource.links || [])), false));
|
|
121
|
+
response.header('link', links.toString());
|
|
122
|
+
}
|
|
123
|
+
if (resource.status) {
|
|
124
|
+
response.status(resource.status);
|
|
125
|
+
}
|
|
126
|
+
if (resource.headers) {
|
|
127
|
+
for (var header in resource.headers) {
|
|
128
|
+
response.header(header, resource.headers[header]);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if ('body' in resource) {
|
|
132
|
+
response.json(resource.body);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
response.end();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
var EndPoint = /** @class */ (function () {
|
|
139
|
+
function EndPoint(_a) {
|
|
140
|
+
var e_1, _b;
|
|
141
|
+
var _this = this;
|
|
142
|
+
var router = _a.router, path = _a.path, headerParameters = _a.headerParameters, handler = _a.handler, actions = _a.actions, links = _a.links;
|
|
143
|
+
this.router = router;
|
|
144
|
+
this.handler = handler;
|
|
145
|
+
this.headerParameters = (0, unique_1.unique)((0, array_to_lower_case_1.arrayToLowerCase)(headerParameters));
|
|
146
|
+
this.pathTemplate = (0, router_to_rfc6570_1.routerToRfc6570)(path);
|
|
147
|
+
this.pathParameters = (0, extract_path_parameters_1.extractPathParameters)(this.pathTemplate);
|
|
148
|
+
this.links = links || [];
|
|
149
|
+
router.get(path, function (request, response, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
150
|
+
var filteredHeaders, error_1;
|
|
151
|
+
var _this = this;
|
|
152
|
+
return __generator(this, function (_a) {
|
|
153
|
+
switch (_a.label) {
|
|
154
|
+
case 0:
|
|
155
|
+
_a.trys.push([0, 2, , 3]);
|
|
156
|
+
filteredHeaders = (0, filter_headers_1.filterHeaders)(request, response, this.headerParameters);
|
|
157
|
+
response.chart = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
158
|
+
return __generator(this, function (_a) {
|
|
159
|
+
this.sendResponse(resource, request, response, actions);
|
|
160
|
+
return [2 /*return*/];
|
|
161
|
+
});
|
|
162
|
+
}); };
|
|
163
|
+
response.chartError = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
164
|
+
return __generator(this, function (_a) {
|
|
165
|
+
this.sendResponse(resource, request, response, actions);
|
|
166
|
+
return [2 /*return*/];
|
|
167
|
+
});
|
|
168
|
+
}); };
|
|
169
|
+
response.chartRedirect = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
170
|
+
return __generator(this, function (_a) {
|
|
171
|
+
this.sendResponse(resource, request, response, actions);
|
|
172
|
+
return [2 /*return*/];
|
|
173
|
+
});
|
|
174
|
+
}); };
|
|
175
|
+
return [4 /*yield*/, this.handler({
|
|
176
|
+
pathParameters: request.params,
|
|
177
|
+
queryParameters: request.query,
|
|
178
|
+
requestHeaders: filteredHeaders,
|
|
179
|
+
request: request,
|
|
180
|
+
response: response,
|
|
181
|
+
next: next
|
|
182
|
+
})];
|
|
183
|
+
case 1:
|
|
184
|
+
_a.sent();
|
|
185
|
+
return [3 /*break*/, 3];
|
|
186
|
+
case 2:
|
|
187
|
+
error_1 = _a.sent();
|
|
188
|
+
next(error_1);
|
|
189
|
+
return [3 /*break*/, 3];
|
|
190
|
+
case 3: return [2 /*return*/];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}); });
|
|
194
|
+
for (var method in actions) {
|
|
195
|
+
var methodActions = actions[method];
|
|
196
|
+
var _loop_1 = function (action) {
|
|
197
|
+
router[method.toLowerCase()](path, function (request, response, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
198
|
+
var parameters, handler_1, filteredBodyParameters;
|
|
199
|
+
var _this = this;
|
|
200
|
+
return __generator(this, function (_a) {
|
|
201
|
+
response.chart = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
202
|
+
return __generator(this, function (_a) {
|
|
203
|
+
this.sendResponse(resource, request, response, actions);
|
|
204
|
+
return [2 /*return*/];
|
|
205
|
+
});
|
|
206
|
+
}); };
|
|
207
|
+
try {
|
|
208
|
+
parameters = action.parameters, handler_1 = action.handler;
|
|
209
|
+
filteredBodyParameters = (0, filter_parameters_1.filterBodyParameters)(request, parameters);
|
|
210
|
+
handler_1({
|
|
211
|
+
pathParameters: request.params,
|
|
212
|
+
queryParameters: request.query,
|
|
213
|
+
bodyParameters: filteredBodyParameters,
|
|
214
|
+
request: request,
|
|
215
|
+
response: response,
|
|
216
|
+
next: next
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
next(error);
|
|
221
|
+
}
|
|
222
|
+
return [2 /*return*/];
|
|
223
|
+
});
|
|
224
|
+
}); });
|
|
225
|
+
};
|
|
226
|
+
try {
|
|
227
|
+
for (var methodActions_1 = (e_1 = void 0, __values(methodActions)), methodActions_1_1 = methodActions_1.next(); !methodActions_1_1.done; methodActions_1_1 = methodActions_1.next()) {
|
|
228
|
+
var action = methodActions_1_1.value;
|
|
229
|
+
_loop_1(action);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
233
|
+
finally {
|
|
234
|
+
try {
|
|
235
|
+
if (methodActions_1_1 && !methodActions_1_1.done && (_b = methodActions_1.return)) _b.call(methodActions_1);
|
|
236
|
+
}
|
|
237
|
+
finally { if (e_1) throw e_1.error; }
|
|
98
238
|
}
|
|
99
|
-
}
|
|
100
239
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
240
|
+
}
|
|
241
|
+
EndPoint.createStatic = function (_a) {
|
|
242
|
+
var _this = this;
|
|
243
|
+
var router = _a.router, path = _a.path, headerParameters = _a.headerParameters, actions = _a.actions, handlerResponse = __rest(_a, ["router", "path", "headerParameters", "actions"]);
|
|
244
|
+
return EndPoint.create({
|
|
245
|
+
router: router,
|
|
246
|
+
path: path,
|
|
247
|
+
headerParameters: headerParameters,
|
|
248
|
+
handler: function (_a) {
|
|
249
|
+
var response = _a.response;
|
|
250
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
251
|
+
return __generator(this, function (_b) {
|
|
252
|
+
response.chart(handlerResponse);
|
|
253
|
+
return [2 /*return*/];
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
},
|
|
257
|
+
actions: actions,
|
|
111
258
|
});
|
|
112
|
-
sendResponse(resource, response, request.url);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
// next(error)
|
|
115
|
-
console.error(error);
|
|
116
|
-
response.status(500);
|
|
117
|
-
response.json({});
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const uriTemplate = (0, _routerToRfc.routerToRfc6570)(path);
|
|
121
|
-
const template = new _uriTemplateLite.URI.Template(uriTemplate);
|
|
122
|
-
const pathParameters = template.match(uriTemplate);
|
|
123
|
-
return {
|
|
124
|
-
method: upperCaseMethod,
|
|
125
|
-
...((0, _methodCanHaveBody.methodCanHaveBody)(upperCaseMethod) && {
|
|
126
|
-
bodyParameters
|
|
127
|
-
}),
|
|
128
|
-
pathParameters,
|
|
129
|
-
...((0, _methodIsCacheable.methodIsCacheable)(upperCaseMethod) && {
|
|
130
|
-
headerParameters: lowerCaseHeaderParameters
|
|
131
|
-
}),
|
|
132
|
-
pathTemplate: uriTemplate,
|
|
133
|
-
path: parameters => _uriTemplateLite.URI.expand(uriTemplate, parameters)
|
|
134
259
|
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return {
|
|
148
|
-
body,
|
|
149
|
-
links
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
registerCollection({
|
|
156
|
-
itemEndpoint,
|
|
157
|
-
itemPath,
|
|
158
|
-
itemLoader,
|
|
159
|
-
collectionPath,
|
|
160
|
-
collectionLoader,
|
|
161
|
-
filters = []
|
|
162
|
-
}) {
|
|
163
|
-
// TODO: error handling for itemPath set, but itemLoader isn't and visa-versa
|
|
164
|
-
// TODO: error handling if itemEndpoint is set, and itemPath or itemLoader is set
|
|
165
|
-
// TODO: error handling for collectionPath not set
|
|
166
|
-
// TODO: error handling for collectionLoader not set
|
|
167
|
-
// we need to handle collectionPath being parameterised
|
|
168
|
-
const itemType = itemPath !== undefined && itemLoader !== undefined ? this.registerResourceType({
|
|
169
|
-
path: `${collectionPath}${itemPath}`,
|
|
170
|
-
loader: itemLoader
|
|
171
|
-
}) : itemEndpoint;
|
|
172
|
-
const linkTemplates = [];
|
|
173
|
-
|
|
174
|
-
for (const filter of filters) {
|
|
175
|
-
linkTemplates.push({
|
|
176
|
-
rel: filter.rel,
|
|
177
|
-
uri: `${collectionPath}{?${filter.parameters.join(',')}}`
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
const uriTemplate = (0, _routerToRfc.routerToRfc6570)(collectionPath);
|
|
182
|
-
const type = this.registerResourceType({
|
|
183
|
-
path: collectionPath,
|
|
184
|
-
loader: async ({
|
|
185
|
-
page,
|
|
186
|
-
...otherParameters
|
|
187
|
-
}, filteredHeaders, selfUri, request, response) => {
|
|
188
|
-
const expandedCollectionPath = _uriTemplateLite.URI.expand(uriTemplate, request.params); // ${collectionPath}?page=0 should redirect to ${collectionPath}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (page === '0') {
|
|
192
|
-
return {
|
|
193
|
-
status: 308,
|
|
194
|
-
headers: {
|
|
195
|
-
location: expandedCollectionPath
|
|
260
|
+
EndPoint.createCollection = function (_a) {
|
|
261
|
+
var e_2, _b, e_3, _c;
|
|
262
|
+
var _this = this;
|
|
263
|
+
var router = _a.router, path = _a.path, headerParameters = _a.headerParameters, filters = _a.filters, handler = _a.handler, actions = _a.actions, links = _a.links, itemActions = _a.itemActions, itemEndpoint = _a.itemEndpoint;
|
|
264
|
+
var filterLinks = [];
|
|
265
|
+
try {
|
|
266
|
+
for (var _d = __values(filters || []), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
267
|
+
var filter = _e.value;
|
|
268
|
+
filterLinks.push({
|
|
269
|
+
rel: filter.rel,
|
|
270
|
+
uri: "".concat(path, "{?").concat(filter.parameters.join(','), "}")
|
|
271
|
+
});
|
|
196
272
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (Number.isNaN(pageInt)) {
|
|
204
|
-
return {
|
|
205
|
-
status: 400,
|
|
206
|
-
body: {
|
|
207
|
-
error: "I don't understand what page you are trying to retrieve",
|
|
208
|
-
page
|
|
273
|
+
}
|
|
274
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
275
|
+
finally {
|
|
276
|
+
try {
|
|
277
|
+
if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
|
|
209
278
|
}
|
|
210
|
-
|
|
279
|
+
finally { if (e_2) throw e_2.error; }
|
|
211
280
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
281
|
+
var endpoint = new EndPoint({
|
|
282
|
+
router: router,
|
|
283
|
+
path: path,
|
|
284
|
+
headerParameters: headerParameters,
|
|
285
|
+
actions: actions,
|
|
286
|
+
links: __spreadArray(__spreadArray([], __read(links || []), false), __read(filterLinks), false),
|
|
287
|
+
handler: function (_a) {
|
|
288
|
+
var pathParameters = _a.pathParameters, queryParameters = _a.queryParameters, requestHeaders = _a.requestHeaders, request = _a.request, response = _a.response, next = _a.next;
|
|
289
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
290
|
+
var expandedPath, page, pageCheckResult, filteredQueryParameters_1;
|
|
291
|
+
var _this = this;
|
|
292
|
+
return __generator(this, function (_b) {
|
|
293
|
+
expandedPath = endpoint.path(__assign(__assign({}, pathParameters || {}), queryParameters || {}));
|
|
294
|
+
page = queryParameters.page;
|
|
295
|
+
pageCheckResult = (0, check_page_1.checkPage)(page, expandedPath);
|
|
296
|
+
if ('redirect' in pageCheckResult) {
|
|
297
|
+
response.chartRedirect(pageCheckResult.redirect);
|
|
298
|
+
}
|
|
299
|
+
else if ('pageValidationError' in pageCheckResult) {
|
|
300
|
+
response.chartError(pageCheckResult.pageValidationError);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
filteredQueryParameters_1 = (0, filter_parameters_1.filterParameters)(filters, request.query);
|
|
304
|
+
response.chartCollection = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
305
|
+
return __generator(this, function (_a) {
|
|
306
|
+
sendCollectionHandlerResponse(resource, request.url, response, pageCheckResult.page, expandedPath, filteredQueryParameters_1, itemActions, itemEndpoint);
|
|
307
|
+
return [2 /*return*/];
|
|
308
|
+
});
|
|
309
|
+
}); };
|
|
310
|
+
handler({
|
|
311
|
+
page: pageCheckResult.page,
|
|
312
|
+
pathParameters: request.params,
|
|
313
|
+
queryParameters: filteredQueryParameters_1,
|
|
314
|
+
requestHeaders: requestHeaders,
|
|
315
|
+
request: request,
|
|
316
|
+
response: response,
|
|
317
|
+
next: next
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
return [2 /*return*/];
|
|
321
|
+
});
|
|
322
|
+
});
|
|
219
323
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
324
|
+
});
|
|
325
|
+
for (var method in itemActions) {
|
|
326
|
+
var methodActions = itemActions[method];
|
|
327
|
+
var _loop_2 = function (action) {
|
|
328
|
+
router[method.toLowerCase()](path, function (request, response, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
329
|
+
var parameters, handler_2, filteredBodyParameters;
|
|
330
|
+
var _this = this;
|
|
331
|
+
return __generator(this, function (_a) {
|
|
332
|
+
response.chart = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
333
|
+
return __generator(this, function (_a) {
|
|
334
|
+
endpoint.sendResponse(resource, request, response, actions, itemActions);
|
|
335
|
+
return [2 /*return*/];
|
|
336
|
+
});
|
|
337
|
+
}); };
|
|
338
|
+
response.chartError = function (resource) { return __awaiter(_this, void 0, void 0, function () {
|
|
339
|
+
return __generator(this, function (_a) {
|
|
340
|
+
endpoint.sendResponse(resource, request, response, actions, itemActions);
|
|
341
|
+
return [2 /*return*/];
|
|
342
|
+
});
|
|
343
|
+
}); };
|
|
344
|
+
try {
|
|
345
|
+
parameters = action.parameters, handler_2 = action.handler;
|
|
346
|
+
filteredBodyParameters = (0, filter_parameters_1.filterBodyParameters)(request, parameters);
|
|
347
|
+
handler_2({
|
|
348
|
+
pathParameters: request.params,
|
|
349
|
+
queryParameters: (0, filter_parameters_1.filterParameters)(filters, request.query),
|
|
350
|
+
bodyParameters: filteredBodyParameters,
|
|
351
|
+
request: request,
|
|
352
|
+
response: response,
|
|
353
|
+
next: next
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
next(error);
|
|
358
|
+
}
|
|
359
|
+
return [2 /*return*/];
|
|
360
|
+
});
|
|
361
|
+
}); });
|
|
362
|
+
};
|
|
363
|
+
try {
|
|
364
|
+
for (var methodActions_2 = (e_3 = void 0, __values(methodActions)), methodActions_2_1 = methodActions_2.next(); !methodActions_2_1.done; methodActions_2_1 = methodActions_2.next()) {
|
|
365
|
+
var action = methodActions_2_1.value;
|
|
366
|
+
_loop_2(action);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
370
|
+
finally {
|
|
371
|
+
try {
|
|
372
|
+
if (methodActions_2_1 && !methodActions_2_1.done && (_c = methodActions_2.return)) _c.call(methodActions_2);
|
|
373
|
+
}
|
|
374
|
+
finally { if (e_3) throw e_3.error; }
|
|
231
375
|
}
|
|
232
|
-
}
|
|
233
376
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
body,
|
|
237
|
-
arrayPointer,
|
|
238
|
-
hasMore,
|
|
239
|
-
headers,
|
|
240
|
-
itemOperations,
|
|
241
|
-
status
|
|
242
|
-
} = await collectionLoader({
|
|
243
|
-
page: pageInt,
|
|
244
|
-
...filteredParameters,
|
|
245
|
-
...request.params
|
|
246
|
-
}, filteredHeaders, selfUri, request, response);
|
|
247
|
-
const array = arrayPointer ? _jsonpointer.default.get(body, arrayPointer) : body;
|
|
248
|
-
const {
|
|
249
|
-
itemLinks,
|
|
250
|
-
canonicalLinks
|
|
251
|
-
} = (0, _builtItemLinks.builtItemLinks)(array, arrayPointer, itemType, selfUri, itemOperations);
|
|
252
|
-
return {
|
|
253
|
-
body,
|
|
254
|
-
links: [...itemLinks, ...canonicalLinks, ...(0, _buildNextLink.buildNextLink)(hasMore, pageInt, expandedCollectionPath, filteredParameters), ...(0, _buildPreviousLink.buildPreviousLink)(pageInt, expandedCollectionPath, filteredParameters), ...(0, _buildFirstLink.buildFirstLink)(hasMore, pageInt, expandedCollectionPath, filteredParameters)],
|
|
255
|
-
linkTemplates,
|
|
256
|
-
headers,
|
|
257
|
-
status
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
});
|
|
261
|
-
return { ...type,
|
|
262
|
-
additionalPaths: linkTemplates
|
|
377
|
+
endpoint.addDefaultHandler(path, actions, itemActions);
|
|
378
|
+
return endpoint;
|
|
263
379
|
};
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
380
|
+
EndPoint.createStaticCollection = function (_a) {
|
|
381
|
+
var _this = this;
|
|
382
|
+
var router = _a.router, path = _a.path, headerParameters = _a.headerParameters, filters = _a.filters, actions = _a.actions, itemActions = _a.itemActions, itemEndpoint = _a.itemEndpoint, collectionHandlerResponse = __rest(_a, ["router", "path", "headerParameters", "filters", "actions", "itemActions", "itemEndpoint"]);
|
|
383
|
+
return EndPoint.createCollection({
|
|
384
|
+
router: router,
|
|
385
|
+
path: path,
|
|
386
|
+
headerParameters: headerParameters,
|
|
387
|
+
filters: filters,
|
|
388
|
+
handler: function (_a) {
|
|
389
|
+
var response = _a.response;
|
|
390
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
391
|
+
return __generator(this, function (_b) {
|
|
392
|
+
response.chartCollection(collectionHandlerResponse);
|
|
393
|
+
return [2 /*return*/];
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
},
|
|
397
|
+
actions: actions,
|
|
398
|
+
itemActions: itemActions,
|
|
399
|
+
itemEndpoint: itemEndpoint
|
|
400
|
+
});
|
|
401
|
+
};
|
|
402
|
+
EndPoint.create = function (_a) {
|
|
403
|
+
var router = _a.router, path = _a.path, headerParameters = _a.headerParameters, handler = _a.handler, actions = _a.actions, links = _a.links;
|
|
404
|
+
var endpoint = new EndPoint({
|
|
405
|
+
router: router,
|
|
406
|
+
path: path,
|
|
407
|
+
headerParameters: headerParameters,
|
|
408
|
+
handler: handler,
|
|
409
|
+
actions: actions,
|
|
410
|
+
links: links
|
|
411
|
+
});
|
|
412
|
+
endpoint.addDefaultHandler(path, actions);
|
|
413
|
+
return endpoint;
|
|
414
|
+
};
|
|
415
|
+
EndPoint.prototype.addDefaultHandler = function (path, actions, itemActions) {
|
|
416
|
+
var _this = this;
|
|
417
|
+
// default options handler
|
|
418
|
+
this.router.options(path, function (request, response, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
419
|
+
return __generator(this, function (_a) {
|
|
420
|
+
this.sendResponse({
|
|
421
|
+
status: 204,
|
|
422
|
+
headers: {
|
|
423
|
+
allow: (0, unique_1.unique)(__spreadArray(__spreadArray([
|
|
424
|
+
'GET',
|
|
425
|
+
'HEAD',
|
|
426
|
+
'OPTIONS'
|
|
427
|
+
], __read((actions ? Object.keys(actions) : [])), false), __read((itemActions ? Object.keys(itemActions) : [])), false)).join(', ')
|
|
428
|
+
}
|
|
429
|
+
}, request, response, actions, itemActions);
|
|
430
|
+
return [2 /*return*/];
|
|
431
|
+
});
|
|
432
|
+
}); });
|
|
433
|
+
this.router.all(path, function (request, response, next) { return __awaiter(_this, void 0, void 0, function () {
|
|
434
|
+
return __generator(this, function (_a) {
|
|
435
|
+
this.sendResponse({
|
|
436
|
+
status: 406
|
|
437
|
+
}, request, response, actions, itemActions);
|
|
438
|
+
return [2 /*return*/];
|
|
439
|
+
});
|
|
440
|
+
}); });
|
|
441
|
+
};
|
|
442
|
+
EndPoint.prototype.sendResponse = function (resource, request, response, actions, itemActions) {
|
|
443
|
+
var actionLinks = __spreadArray(__spreadArray([], __read((actions ? (0, to_links_1.toLinks)(actions, request.url) : [])), false), __read((itemActions ? (0, to_links_1.toLinks)(itemActions, request.url) : [])), false);
|
|
444
|
+
if (this.headerParameters.length > 0) {
|
|
445
|
+
response.header('vary', this.headerParameters);
|
|
446
|
+
}
|
|
447
|
+
sendHandlerResponse(resource, response, __spreadArray(__spreadArray([
|
|
448
|
+
{
|
|
449
|
+
rel: 'self',
|
|
450
|
+
uri: request.url
|
|
451
|
+
}
|
|
452
|
+
], __read(this.links), false), __read(actionLinks), false));
|
|
453
|
+
};
|
|
454
|
+
EndPoint.prototype.sendCollectionResponse = function (resource, request, response, actions, itemActions) {
|
|
455
|
+
var actionLinks = __spreadArray(__spreadArray([], __read((actions ? (0, to_links_1.toLinks)(actions, request.url) : [])), false), __read((itemActions ? (0, to_links_1.toLinks)(itemActions, request.url) : [])), false);
|
|
456
|
+
if (this.headerParameters.length > 0) {
|
|
457
|
+
response.header('vary', this.headerParameters);
|
|
458
|
+
}
|
|
459
|
+
sendHandlerResponse(resource, response, __spreadArray(__spreadArray([
|
|
460
|
+
{
|
|
461
|
+
rel: 'self',
|
|
462
|
+
uri: request.url
|
|
463
|
+
}
|
|
464
|
+
], __read(this.links), false), __read(actionLinks), false));
|
|
465
|
+
};
|
|
466
|
+
EndPoint.prototype.path = function (parameters) {
|
|
467
|
+
return parameters
|
|
468
|
+
? uri_template_lite_1.URI.expand(this.pathTemplate, parameters)
|
|
469
|
+
: this.pathTemplate;
|
|
470
|
+
};
|
|
471
|
+
EndPoint.prototype.linkTo = function (link) {
|
|
472
|
+
this.links.push(link);
|
|
473
|
+
return this;
|
|
474
|
+
};
|
|
475
|
+
return EndPoint;
|
|
476
|
+
}());
|
|
477
|
+
exports.EndPoint = EndPoint;
|
|
290
478
|
/**
|
|
291
479
|
* @param resource
|
|
292
|
-
* @param response
|
|
293
480
|
* @param requestUrl
|
|
294
|
-
* @param
|
|
481
|
+
* @param response
|
|
482
|
+
* @param pageInt
|
|
483
|
+
* @param pageCheckResult
|
|
484
|
+
* @param page
|
|
485
|
+
* @param expandedPath
|
|
486
|
+
* @param filteredParameters
|
|
487
|
+
* @param itemActions
|
|
488
|
+
* @param itemEndpoint
|
|
489
|
+
* @param staticLinks
|
|
295
490
|
*/
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
function sendResponse(resource, response, requestUrl, additionalLinks = []) {
|
|
301
|
-
if (resource.links || additionalLinks.length > 0) {
|
|
302
|
-
const links = (0, _convertResourceLinks.covertResourceLinks)([...additionalLinks, ...(resource.links || [])]);
|
|
303
|
-
response.header('link', links.toString());
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
if (resource.linkTemplates) {
|
|
307
|
-
const linkTemplates = (0, _convertResourceLinks.covertResourceLinks)(resource.linkTemplates);
|
|
308
|
-
response.header('link-template', linkTemplates.toString());
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
if (resource.status) {
|
|
312
|
-
response.status(resource.status);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (resource.headers) {
|
|
316
|
-
for (const header in resource.headers) {
|
|
317
|
-
response.header(header, resource.headers[header]);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
if (resource.body) {
|
|
322
|
-
response.json(resource.body);
|
|
323
|
-
} else {
|
|
324
|
-
response.end();
|
|
325
|
-
}
|
|
491
|
+
function sendCollectionHandlerResponse(resource, requestUrl, response, page, expandedPath, filteredParameters, itemActions, itemEndpoint) {
|
|
492
|
+
var body = resource.body, collectionPointer = resource.collectionPointer, hasMore = resource.hasMore, prevPage = resource.prevPage, nextPage = resource.nextPage, links = resource.links, other = __rest(resource, ["body", "collectionPointer", "hasMore", "prevPage", "nextPage", "links"]);
|
|
493
|
+
var _a = (0, built_item_links_1.builtItemLinks)(collectionPointer, itemEndpoint, requestUrl, itemActions), itemLinks = _a.itemLinks, canonicalLinks = _a.canonicalLinks;
|
|
494
|
+
response.chart(__assign({ body: body, links: __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(itemLinks), false), __read(canonicalLinks), false), __read((0, build_next_link_1.buildNextLink)(hasMore, page, nextPage, expandedPath, filteredParameters)), false), __read((0, build_previous_link_1.buildPreviousLink)(page, prevPage, expandedPath, filteredParameters)), false), __read((0, build_first_link_1.buildFirstLink)(expandedPath, filteredParameters)), false), __read(links || []), false) }, other));
|
|
326
495
|
}
|
|
327
496
|
//# sourceMappingURL=waycharter.js.map
|