@mountainpass/waycharter 1.0.74 → 2.0.0
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 +12 -0
- package/dist/collections/build-first-link.js +34 -19
- package/dist/collections/build-first-link.js.map +1 -1
- package/dist/collections/build-next-link.d.ts +11 -0
- package/dist/collections/build-next-link.js +24 -15
- package/dist/collections/build-next-link.js.map +1 -1
- package/dist/collections/build-previous-link.d.ts +11 -0
- package/dist/collections/build-previous-link.js +42 -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 +84 -114
- 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 +75 -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 +11 -0
- package/dist/util/router-to-rfc6570.js.map +1 -0
- 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 +71 -0
- package/dist/waycharter.js +474 -288
- 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,308 +1,494 @@
|
|
|
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
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @param url
|
|
32
|
-
*/
|
|
33
|
-
function routerToRfc6570(url) {
|
|
34
|
-
return url.replace(/:(\w*)/g, '{+$1}');
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
class WayCharter {
|
|
38
|
-
constructor() {
|
|
39
|
-
this.router = (0, _express.Router)();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
registerResourceType({
|
|
43
|
-
path,
|
|
44
|
-
loader,
|
|
45
|
-
loaderVaries
|
|
46
|
-
}) {
|
|
47
|
-
// TODO: error handling for path not set
|
|
48
|
-
// TODO: error handling for loader not set
|
|
49
|
-
const lowerCaseLoaderVaries = new Set(loaderVaries ? loaderVaries.map(header => header.toLowerCase()) : []);
|
|
50
|
-
const uriTemplate = routerToRfc6570(path);
|
|
51
|
-
this.router.get(path, async function (request, response, next) {
|
|
52
|
-
const filteredHeaders = Object.keys(request.headers).reduce((filtered, key) => lowerCaseLoaderVaries.has(key) ? { ...filtered,
|
|
53
|
-
[key]: request.headers[key]
|
|
54
|
-
} : filtered, {});
|
|
55
|
-
|
|
56
|
-
try {
|
|
57
|
-
const resource = await loader({ ...request.params,
|
|
58
|
-
...request.query
|
|
59
|
-
}, filteredHeaders, request.url);
|
|
60
|
-
|
|
61
|
-
if (loaderVaries) {
|
|
62
|
-
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];
|
|
63
8
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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());
|
|
75
20
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
+
}
|
|
79
93
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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; }
|
|
103
238
|
}
|
|
104
|
-
}
|
|
105
239
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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,
|
|
116
258
|
});
|
|
117
|
-
sendResponse(resource, response, request.url);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
// next(error)
|
|
120
|
-
console.error(error);
|
|
121
|
-
response.status(500);
|
|
122
|
-
response.json({});
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
const uriTemplate = routerToRfc6570(path);
|
|
126
|
-
const template = new _uriTemplateLite.URI.Template(uriTemplate);
|
|
127
|
-
const pathParameters = template.match(uriTemplate);
|
|
128
|
-
return {
|
|
129
|
-
method: upperCaseMethod,
|
|
130
|
-
...((0, _methodCanHaveBody.methodCanHaveBody)(upperCaseMethod) && {
|
|
131
|
-
bodyParameters
|
|
132
|
-
}),
|
|
133
|
-
pathParameters,
|
|
134
|
-
...((0, _methodIsCacheable.methodIsCacheable)(upperCaseMethod) && {
|
|
135
|
-
headerParameters: lowerCaseHeaderParameters
|
|
136
|
-
}),
|
|
137
|
-
pathTemplate: uriTemplate,
|
|
138
|
-
path: parameters => _uriTemplateLite.URI.expand(uriTemplate, parameters)
|
|
139
259
|
};
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return {
|
|
153
|
-
body,
|
|
154
|
-
links
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
registerCollection({
|
|
161
|
-
itemPath,
|
|
162
|
-
itemLoader,
|
|
163
|
-
collectionPath,
|
|
164
|
-
collectionLoader,
|
|
165
|
-
filters = []
|
|
166
|
-
}) {
|
|
167
|
-
// TODO: error handling for itemPath set, but itemLoader isn't and visa-versa
|
|
168
|
-
// TODO: error handling for collectionPath not set
|
|
169
|
-
// TODO: error handling for collectionLoader not set
|
|
170
|
-
const itemType = itemPath !== undefined && itemLoader !== undefined ? this.registerResourceType({
|
|
171
|
-
path: `${collectionPath}${itemPath}`,
|
|
172
|
-
loader: itemLoader
|
|
173
|
-
}) : undefined;
|
|
174
|
-
const linkTemplates = [];
|
|
175
|
-
|
|
176
|
-
for (const filter of filters) {
|
|
177
|
-
linkTemplates.push({
|
|
178
|
-
rel: filter.rel,
|
|
179
|
-
uri: `${collectionPath}{?${filter.parameters.join(',')}}`
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const type = this.registerResourceType({
|
|
184
|
-
path: collectionPath,
|
|
185
|
-
loader: async ({
|
|
186
|
-
page,
|
|
187
|
-
...otherParameters
|
|
188
|
-
}, filteredHeaders, selfUri) => {
|
|
189
|
-
// ${collectionPath}?page=0 should redirect to ${collectionPath}
|
|
190
|
-
if (page === '0') {
|
|
191
|
-
return {
|
|
192
|
-
status: 308,
|
|
193
|
-
headers: {
|
|
194
|
-
location: collectionPath
|
|
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
|
+
});
|
|
195
272
|
}
|
|
196
|
-
};
|
|
197
|
-
} // TODO: page is not a number
|
|
198
|
-
// page should be >= 0
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const pageInt = Number.parseInt(page || '0');
|
|
202
|
-
|
|
203
|
-
if (page < 0) {
|
|
204
|
-
return {
|
|
205
|
-
status: 400
|
|
206
|
-
};
|
|
207
273
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
for (const parameter of filter.parameters) {
|
|
213
|
-
if (otherParameters[parameter] !== undefined) {
|
|
214
|
-
filteredParameters[parameter] = otherParameters[parameter];
|
|
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);
|
|
215
278
|
}
|
|
216
|
-
|
|
279
|
+
finally { if (e_2) throw e_2.error; }
|
|
217
280
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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.pageInt, expandedPath, filteredQueryParameters_1, itemActions, itemEndpoint);
|
|
307
|
+
return [2 /*return*/];
|
|
308
|
+
});
|
|
309
|
+
}); };
|
|
310
|
+
handler({
|
|
311
|
+
page: pageCheckResult.pageInt,
|
|
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
|
+
});
|
|
323
|
+
}
|
|
228
324
|
});
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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; }
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
endpoint.addDefaultHandler(path, actions, itemActions);
|
|
378
|
+
return endpoint;
|
|
244
379
|
};
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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;
|
|
271
478
|
/**
|
|
272
479
|
* @param resource
|
|
273
|
-
* @param response
|
|
274
480
|
* @param requestUrl
|
|
275
|
-
* @param
|
|
481
|
+
* @param response
|
|
482
|
+
* @param pageInt
|
|
483
|
+
* @param expandedPath
|
|
484
|
+
* @param filteredParameters
|
|
485
|
+
* @param itemActions
|
|
486
|
+
* @param itemEndpoint
|
|
487
|
+
* @param staticLinks
|
|
276
488
|
*/
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
function sendResponse(resource, response, requestUrl, additionalLinks = []) {
|
|
282
|
-
if (resource.links || additionalLinks.length > 0) {
|
|
283
|
-
const links = (0, _convertResourceLinks.covertResourceLinks)([...additionalLinks, ...(resource.links || [])]);
|
|
284
|
-
response.header('link', links.toString());
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
if (resource.linkTemplates) {
|
|
288
|
-
const linkTemplates = (0, _convertResourceLinks.covertResourceLinks)(resource.linkTemplates);
|
|
289
|
-
response.header('link-template', linkTemplates.toString());
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (resource.status) {
|
|
293
|
-
response.status(resource.status);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if (resource.headers) {
|
|
297
|
-
for (const header in resource.headers) {
|
|
298
|
-
response.header(header, resource.headers[header]);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (resource.body) {
|
|
303
|
-
response.json(resource.body);
|
|
304
|
-
} else {
|
|
305
|
-
response.end();
|
|
306
|
-
}
|
|
489
|
+
function sendCollectionHandlerResponse(resource, requestUrl, response, pageInt, expandedPath, filteredParameters, itemActions, itemEndpoint) {
|
|
490
|
+
var body = resource.body, collectionPointer = resource.collectionPointer, hasMore = resource.hasMore, links = resource.links, other = __rest(resource, ["body", "collectionPointer", "hasMore", "links"]);
|
|
491
|
+
var _a = (0, built_item_links_1.builtItemLinks)(collectionPointer, itemEndpoint, requestUrl, itemActions), itemLinks = _a.itemLinks, canonicalLinks = _a.canonicalLinks;
|
|
492
|
+
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, pageInt, expandedPath, filteredParameters)), false), __read((0, build_previous_link_1.buildPreviousLink)(pageInt, expandedPath, filteredParameters)), false), __read((0, build_first_link_1.buildFirstLink)(hasMore, pageInt, expandedPath, filteredParameters)), false), __read(links || []), false) }, other));
|
|
307
493
|
}
|
|
308
494
|
//# sourceMappingURL=waycharter.js.map
|