velocious 1.0.126 → 1.0.127

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.
Files changed (29) hide show
  1. package/build/src/controller.d.ts.map +1 -1
  2. package/build/src/controller.js +14 -4
  3. package/build/src/database/record/index.js +2 -2
  4. package/build/src/database/record/instance-relationships/has-many.d.ts +9 -0
  5. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  6. package/build/src/database/record/instance-relationships/has-many.js +31 -1
  7. package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
  8. package/build/src/environment-handlers/node/cli/commands/routes.js +5 -2
  9. package/build/src/http-server/client/request-parser.d.ts +4 -4
  10. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  11. package/build/src/http-server/client/request-parser.js +3 -3
  12. package/build/src/http-server/client/request.d.ts +2 -2
  13. package/build/src/http-server/client/request.d.ts.map +1 -1
  14. package/build/src/routes/base-route.d.ts +6 -2
  15. package/build/src/routes/base-route.d.ts.map +1 -1
  16. package/build/src/routes/base-route.js +5 -5
  17. package/build/src/routes/get-route.d.ts.map +1 -1
  18. package/build/src/routes/get-route.js +5 -3
  19. package/build/src/routes/namespace-route.d.ts +5 -0
  20. package/build/src/routes/namespace-route.d.ts.map +1 -1
  21. package/build/src/routes/namespace-route.js +5 -3
  22. package/build/src/routes/post-route.d.ts.map +1 -1
  23. package/build/src/routes/post-route.js +6 -3
  24. package/build/src/routes/resource-route.d.ts +16 -0
  25. package/build/src/routes/resource-route.d.ts.map +1 -1
  26. package/build/src/routes/resource-route.js +91 -17
  27. package/build/src/routes/root-route.d.ts.map +1 -1
  28. package/build/src/routes/root-route.js +5 -3
  29. package/package.json +3 -3
@@ -2,7 +2,9 @@
2
2
  import BaseRoute from "./base-route.js";
3
3
  import BasicRoute from "./basic-route.js";
4
4
  import escapeStringRegexp from "escape-string-regexp";
5
+ import * as inflection from "inflection";
5
6
  import restArgsError from "../utils/rest-args-error.js";
7
+ import singularizeModelName from "../utils/singularize-model-name.js";
6
8
  class VelociousRouteResourceRoute extends BasicRoute {
7
9
  /**
8
10
  * @param {object} args
@@ -13,9 +15,46 @@ class VelociousRouteResourceRoute extends BasicRoute {
13
15
  restArgsError(restArgs);
14
16
  this.name = name;
15
17
  this.regExp = new RegExp(`^(${escapeStringRegexp(name)})(.*)$`);
18
+ /** @type {Set<string>} */
19
+ this.collectionRouteNames = new Set();
16
20
  }
17
- getHumanPath() {
18
- return this.name;
21
+ /**
22
+ * @param {string} name
23
+ * @param {{on?: "member" | "collection"}} [options]
24
+ */
25
+ get(name, options = {}) {
26
+ const { on, ...restArgs } = options || {};
27
+ restArgsError(restArgs);
28
+ if (on && on !== "member" && on !== "collection") {
29
+ throw new Error(`Unknown 'on' value: ${on}`);
30
+ }
31
+ if (on === "collection") {
32
+ this.collectionRouteNames.add(name);
33
+ }
34
+ super.get(name);
35
+ }
36
+ /**
37
+ * @param {string} name
38
+ * @param {{on?: "member" | "collection"}} [options]
39
+ */
40
+ post(name, options = {}) {
41
+ const { on, ...restArgs } = options || {};
42
+ restArgsError(restArgs);
43
+ if (on && on !== "member" && on !== "collection") {
44
+ throw new Error(`Unknown 'on' value: ${on}`);
45
+ }
46
+ if (on === "collection") {
47
+ this.collectionRouteNames.add(name);
48
+ }
49
+ super.post(name);
50
+ }
51
+ getHumanPaths() {
52
+ return [
53
+ { method: "GET", action: "index", path: this.name },
54
+ { method: "POST", action: "create", path: this.name },
55
+ { method: "GET", action: "show", path: `${this.name}/\${id}` },
56
+ { method: "DELETE", action: "destroy", path: `${this.name}/\${id}` }
57
+ ];
19
58
  }
20
59
  /**
21
60
  * @param {object} args
@@ -28,28 +67,63 @@ class VelociousRouteResourceRoute extends BasicRoute {
28
67
  const match = path.match(this.regExp);
29
68
  if (match) {
30
69
  const [_beginnigSlash, _matchedName, restPath] = match; // eslint-disable-line no-unused-vars
31
- let action = "index";
32
- let subRoutesMatchesRestPath = false;
33
- for (const route of this.routes) {
34
- if (route.matchWithPath({ params, path: restPath, request })) {
35
- subRoutesMatchesRestPath = true;
70
+ let action;
71
+ const controllerName = params.controller ? `${params.controller}/${this.name}` : this.name;
72
+ const normalizedRestPath = restPath.replace(/^\//, "");
73
+ let nextRestPath = normalizedRestPath;
74
+ params.controller = controllerName;
75
+ if (normalizedRestPath.length === 0) {
76
+ if (request.httpMethod() == "DELETE") {
77
+ action = "delete";
36
78
  }
37
- }
38
- if (!subRoutesMatchesRestPath) {
39
- if (request.httpMethod() == "POST") {
79
+ else if (request.httpMethod() == "POST") {
40
80
  action = "create";
41
81
  }
42
- else if (restPath.match(/\/(.+)/)) {
43
- // TODO: This should change the action to "show" and set the "resource_name_id" in params.
44
- action = "show";
82
+ else {
83
+ action = "index";
45
84
  }
85
+ nextRestPath = "";
86
+ }
87
+ else {
88
+ const [collectionCandidate] = normalizedRestPath.split("/");
89
+ if (this.collectionRouteNames.has(collectionCandidate)) {
90
+ nextRestPath = normalizedRestPath;
91
+ }
92
+ else {
93
+ const idMatch = normalizedRestPath.match(/^([^/]+)(?:\/(.*))?$/);
94
+ if (idMatch) {
95
+ const singularName = singularizeModelName(this.name);
96
+ const singularAttributeName = inflection.camelize(inflection.underscore(singularName), true);
97
+ const idVarName = `${singularAttributeName}Id`;
98
+ const recordId = idMatch[1];
99
+ const remainingPath = idMatch[2];
100
+ params[idVarName] = recordId;
101
+ params.id = recordId;
102
+ if (remainingPath && remainingPath.length > 0) {
103
+ nextRestPath = remainingPath;
104
+ }
105
+ else if (request.httpMethod() == "DELETE") {
106
+ action = "delete";
107
+ nextRestPath = "";
108
+ }
109
+ else if (request.httpMethod() == "POST") {
110
+ action = "create";
111
+ nextRestPath = "";
112
+ }
113
+ else {
114
+ action = "show";
115
+ nextRestPath = "";
116
+ }
117
+ }
118
+ }
119
+ }
120
+ if (action) {
121
+ params.action = action;
46
122
  }
47
- params.action = action;
48
- params.controller = this.name;
49
- return { restPath };
123
+ return { restPath: nextRestPath };
50
124
  }
51
125
  }
52
126
  }
53
127
  BaseRoute.registerRouteResourceType(VelociousRouteResourceRoute);
54
128
  export default VelociousRouteResourceRoute;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc291cmNlLXJvdXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBRXZELE1BQU0sMkJBQTRCLFNBQVEsVUFBVTtJQUNsRDs7O09BR0c7SUFDSCxZQUFZLEVBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdCLEtBQUssRUFBRSxDQUFBO1FBQ1AsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGFBQWEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRXJDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUEsQ0FBQyxxQ0FBcUM7WUFFNUYsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFBO1lBQ3BCLElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFBO1lBRXBDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzNELHdCQUF3QixHQUFHLElBQUksQ0FBQTtnQkFDakMsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ25DLE1BQU0sR0FBRyxRQUFRLENBQUE7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLDBGQUEwRjtvQkFDMUYsTUFBTSxHQUFHLE1BQU0sQ0FBQTtnQkFDakIsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtZQUN0QixNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7WUFFN0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxDQUFBO1FBQ25CLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLENBQUMseUJBQXlCLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtBQUVoRSxlQUFlLDJCQUEyQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlUm91dGUgZnJvbSBcIi4vYmFzZS1yb3V0ZS5qc1wiXG5pbXBvcnQgQmFzaWNSb3V0ZSBmcm9tIFwiLi9iYXNpYy1yb3V0ZS5qc1wiXG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gXCJlc2NhcGUtc3RyaW5nLXJlZ2V4cFwiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuY2xhc3MgVmVsb2Npb3VzUm91dGVSZXNvdXJjZVJvdXRlIGV4dGVuZHMgQmFzaWNSb3V0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bmFtZSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgc3VwZXIoKVxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMucmVnRXhwID0gbmV3IFJlZ0V4cChgXigke2VzY2FwZVN0cmluZ1JlZ2V4cChuYW1lKX0pKC4qKSRgKVxuICB9XG5cbiAgZ2V0SHVtYW5QYXRoKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MucGFyYW1zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnBhdGhcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3RcbiAgICogQHJldHVybnMge3tyZXN0UGF0aDogc3RyaW5nfSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIG1hdGNoV2l0aFBhdGgoe3BhcmFtcywgcGF0aCwgcmVxdWVzdH0pIHtcbiAgICBjb25zdCBtYXRjaCA9IHBhdGgubWF0Y2godGhpcy5yZWdFeHApXG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IFtfYmVnaW5uaWdTbGFzaCwgX21hdGNoZWROYW1lLCByZXN0UGF0aF0gPSBtYXRjaCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgICAgIGxldCBhY3Rpb24gPSBcImluZGV4XCJcbiAgICAgIGxldCBzdWJSb3V0ZXNNYXRjaGVzUmVzdFBhdGggPSBmYWxzZVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICAgIGlmIChyb3V0ZS5tYXRjaFdpdGhQYXRoKHtwYXJhbXMsIHBhdGg6IHJlc3RQYXRoLCByZXF1ZXN0fSkpIHtcbiAgICAgICAgICBzdWJSb3V0ZXNNYXRjaGVzUmVzdFBhdGggPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFzdWJSb3V0ZXNNYXRjaGVzUmVzdFBhdGgpIHtcbiAgICAgICAgaWYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09IFwiUE9TVFwiKSB7XG4gICAgICAgICAgYWN0aW9uID0gXCJjcmVhdGVcIlxuICAgICAgICB9IGVsc2UgaWYgKHJlc3RQYXRoLm1hdGNoKC9cXC8oLispLykpIHtcbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBjaGFuZ2UgdGhlIGFjdGlvbiB0byBcInNob3dcIiBhbmQgc2V0IHRoZSBcInJlc291cmNlX25hbWVfaWRcIiBpbiBwYXJhbXMuXG4gICAgICAgICAgYWN0aW9uID0gXCJzaG93XCJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwYXJhbXMuYWN0aW9uID0gYWN0aW9uXG4gICAgICBwYXJhbXMuY29udHJvbGxlciA9IHRoaXMubmFtZVxuXG4gICAgICByZXR1cm4ge3Jlc3RQYXRofVxuICAgIH1cbiAgfVxufVxuXG5CYXNlUm91dGUucmVnaXN0ZXJSb3V0ZVJlc291cmNlVHlwZShWZWxvY2lvdXNSb3V0ZVJlc291cmNlUm91dGUpXG5cbmV4cG9ydCBkZWZhdWx0IFZlbG9jaW91c1JvdXRlUmVzb3VyY2VSb3V0ZVxuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2Utcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc291cmNlLXJvdXRlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBQ3ZELE9BQU8sb0JBQW9CLE1BQU0sb0NBQW9DLENBQUE7QUFFckUsTUFBTSwyQkFBNEIsU0FBUSxVQUFVO0lBQ2xEOzs7T0FHRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0IsS0FBSyxFQUFFLENBQUE7UUFDUCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMvRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxFQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFFdkMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxL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QUNuQixDQUFDOzZCQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUMxQyxNQUFNLEdBQUcsUUFBUSxDQUFBOzRCQUNqQixZQUFZLEdBQUcsRUFBRSxDQUFBO3dCQUNuQixDQUFDOzZCQUFNLENBQUM7NEJBQ04sTUFBTSxHQUFHLE1BQU0sQ0FBQTs0QkFDZixZQUFZLEdBQUcsRUFBRSxDQUFBO3dCQUNuQixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1lBQ3hCLENBQUM7WUFFRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxDQUFBO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLENBQUMseUJBQXlCLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtBQUVoRSxlQUFlLDJCQUEyQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlUm91dGUgZnJvbSBcIi4vYmFzZS1yb3V0ZS5qc1wiXG5pbXBvcnQgQmFzaWNSb3V0ZSBmcm9tIFwiLi9iYXNpYy1yb3V0ZS5qc1wiXG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gXCJlc2NhcGUtc3RyaW5nLXJlZ2V4cFwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IHNpbmd1bGFyaXplTW9kZWxOYW1lIGZyb20gXCIuLi91dGlscy9zaW5ndWxhcml6ZS1tb2RlbC1uYW1lLmpzXCJcblxuY2xhc3MgVmVsb2Npb3VzUm91dGVSZXNvdXJjZVJvdXRlIGV4dGVuZHMgQmFzaWNSb3V0ZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5uYW1lXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bmFtZSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgc3VwZXIoKVxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMucmVnRXhwID0gbmV3IFJlZ0V4cChgXigke2VzY2FwZVN0cmluZ1JlZ2V4cChuYW1lKX0pKC4qKSRgKVxuICAgIC8qKiBAdHlwZSB7U2V0PHN0cmluZz59ICovXG4gICAgdGhpcy5jb2xsZWN0aW9uUm91dGVOYW1lcyA9IG5ldyBTZXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7e29uPzogXCJtZW1iZXJcIiB8IFwiY29sbGVjdGlvblwifX0gW29wdGlvbnNdXG4gICAqL1xuICBnZXQobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge29uLCAuLi5yZXN0QXJnc30gPSBvcHRpb25zIHx8IHt9XG5cbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKG9uICYmIG9uICE9PSBcIm1lbWJlclwiICYmIG9uICE9PSBcImNvbGxlY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duICdvbicgdmFsdWU6ICR7b259YClcbiAgICB9XG5cbiAgICBpZiAob24gPT09IFwiY29sbGVjdGlvblwiKSB7XG4gICAgICB0aGlzLmNvbGxlY3Rpb25Sb3V0ZU5hbWVzLmFkZChuYW1lKVxuICAgIH1cblxuICAgIHN1cGVyLmdldChuYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7e29uPzogXCJtZW1iZXJcIiB8IFwiY29sbGVjdGlvblwifX0gW29wdGlvbnNdXG4gICAqL1xuICBwb3N0KG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtvbiwgLi4ucmVzdEFyZ3N9ID0gb3B0aW9ucyB8fCB7fVxuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmIChvbiAmJiBvbiAhPT0gXCJtZW1iZXJcIiAmJiBvbiAhPT0gXCJjb2xsZWN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biAnb24nIHZhbHVlOiAke29ufWApXG4gICAgfVxuXG4gICAgaWYgKG9uID09PSBcImNvbGxlY3Rpb25cIikge1xuICAgICAgdGhpcy5jb2xsZWN0aW9uUm91dGVOYW1lcy5hZGQobmFtZSlcbiAgICB9XG5cbiAgICBzdXBlci5wb3N0KG5hbWUpXG4gIH1cblxuICBnZXRIdW1hblBhdGhzKCkge1xuICAgIHJldHVybiBbXG4gICAgICB7bWV0aG9kOiBcIkdFVFwiLCBhY3Rpb246IFwiaW5kZXhcIiwgcGF0aDogdGhpcy5uYW1lfSxcbiAgICAgIHttZXRob2Q6IFwiUE9TVFwiLCBhY3Rpb246IFwiY3JlYXRlXCIsIHBhdGg6IHRoaXMubmFtZX0sXG4gICAgICB7bWV0aG9kOiBcIkdFVFwiLCBhY3Rpb246IFwic2hvd1wiLCBwYXRoOiBgJHt0aGlzLm5hbWV9L1xcJHtpZH1gfSxcbiAgICAgIHttZXRob2Q6IFwiREVMRVRFXCIsIGFjdGlvbjogXCJkZXN0cm95XCIsIHBhdGg6IGAke3RoaXMubmFtZX0vXFwke2lkfWB9XG4gICAgXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncy5wYXJhbXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucGF0aFxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdFxuICAgKiBAcmV0dXJucyB7e3Jlc3RQYXRoOiBzdHJpbmd9IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgbWF0Y2hXaXRoUGF0aCh7cGFyYW1zLCBwYXRoLCByZXF1ZXN0fSkge1xuICAgIGNvbnN0IG1hdGNoID0gcGF0aC5tYXRjaCh0aGlzLnJlZ0V4cClcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgW19iZWdpbm5pZ1NsYXNoLCBfbWF0Y2hlZE5hbWUsIHJlc3RQYXRoXSA9IG1hdGNoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAgICAgbGV0IGFjdGlvblxuICAgICAgY29uc3QgY29udHJvbGxlck5hbWUgPSBwYXJhbXMuY29udHJvbGxlciA/IGAke3BhcmFtcy5jb250cm9sbGVyfS8ke3RoaXMubmFtZX1gIDogdGhpcy5uYW1lXG4gICAgICBjb25zdCBub3JtYWxpemVkUmVzdFBhdGggPSByZXN0UGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIilcbiAgICAgIGxldCBuZXh0UmVzdFBhdGggPSBub3JtYWxpemVkUmVzdFBhdGhcblxuICAgICAgcGFyYW1zLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyTmFtZVxuXG4gICAgICBpZiAobm9ybWFsaXplZFJlc3RQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gXCJERUxFVEVcIikge1xuICAgICAgICAgIGFjdGlvbiA9IFwiZGVsZXRlXCJcbiAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSBcIlBPU1RcIikge1xuICAgICAgICAgIGFjdGlvbiA9IFwiY3JlYXRlXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb24gPSBcImluZGV4XCJcbiAgICAgICAgfVxuICAgICAgICBuZXh0UmVzdFBhdGggPSBcIlwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvbkNhbmRpZGF0ZV0gPSBub3JtYWxpemVkUmVzdFBhdGguc3BsaXQoXCIvXCIpXG5cbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvblJvdXRlTmFtZXMuaGFzKGNvbGxlY3Rpb25DYW5kaWRhdGUpKSB7XG4gICAgICAgICAgbmV4dFJlc3RQYXRoID0gbm9ybWFsaXplZFJlc3RQYXRoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaWRNYXRjaCA9IG5vcm1hbGl6ZWRSZXN0UGF0aC5tYXRjaCgvXihbXi9dKykoPzpcXC8oLiopKT8kLylcblxuICAgICAgICAgIGlmIChpZE1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBzaW5ndWxhck5hbWUgPSBzaW5ndWxhcml6ZU1vZGVsTmFtZSh0aGlzLm5hbWUpXG4gICAgICAgICAgICBjb25zdCBzaW5ndWxhckF0dHJpYnV0ZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShzaW5ndWxhck5hbWUpLCB0cnVlKVxuICAgICAgICAgICAgY29uc3QgaWRWYXJOYW1lID0gYCR7c2luZ3VsYXJBdHRyaWJ1dGVOYW1lfUlkYFxuICAgICAgICAgICAgY29uc3QgcmVjb3JkSWQgPSBpZE1hdGNoWzFdXG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdQYXRoID0gaWRNYXRjaFsyXVxuXG4gICAgICAgICAgICBwYXJhbXNbaWRWYXJOYW1lXSA9IHJlY29yZElkXG4gICAgICAgICAgICBwYXJhbXMuaWQgPSByZWNvcmRJZFxuXG4gICAgICAgICAgICBpZiAocmVtYWluaW5nUGF0aCAmJiByZW1haW5pbmdQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbmV4dFJlc3RQYXRoID0gcmVtYWluaW5nUGF0aFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSBcIkRFTEVURVwiKSB7XG4gICAgICAgICAgICAgIGFjdGlvbiA9IFwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgbmV4dFJlc3RQYXRoID0gXCJcIlxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSBcIlBPU1RcIikge1xuICAgICAgICAgICAgICBhY3Rpb24gPSBcImNyZWF0ZVwiXG4gICAgICAgICAgICAgIG5leHRSZXN0UGF0aCA9IFwiXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFjdGlvbiA9IFwic2hvd1wiXG4gICAgICAgICAgICAgIG5leHRSZXN0UGF0aCA9IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICBwYXJhbXMuYWN0aW9uID0gYWN0aW9uXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7cmVzdFBhdGg6IG5leHRSZXN0UGF0aH1cbiAgICB9XG4gIH1cbn1cblxuQmFzZVJvdXRlLnJlZ2lzdGVyUm91dGVSZXNvdXJjZVR5cGUoVmVsb2Npb3VzUm91dGVSZXNvdXJjZVJvdXRlKVxuXG5leHBvcnQgZGVmYXVsdCBWZWxvY2lvdXNSb3V0ZVJlc291cmNlUm91dGVcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"root-route.d.ts","sourceRoot":"","sources":["../../../src/routes/root-route.js"],"names":[],"mappings":"AAIA;CAIC;uBANsB,kBAAkB"}
1
+ {"version":3,"file":"root-route.d.ts","sourceRoot":"","sources":["../../../src/routes/root-route.js"],"names":[],"mappings":"AAIA;CAMC;uBARsB,kBAAkB"}
@@ -1,8 +1,10 @@
1
1
  // @ts-check
2
2
  import BasicRoute from "./basic-route.js";
3
3
  export default class VelociousRootRoute extends BasicRoute {
4
- getHumanPath() {
5
- return "/";
4
+ getHumanPaths() {
5
+ return [
6
+ { method: "GET", action: "index", path: "/" }
7
+ ];
6
8
  }
7
9
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0ZXMvcm9vdC1yb3V0ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ3hELFlBQVk7UUFDVixPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzaWNSb3V0ZSBmcm9tIFwiLi9iYXNpYy1yb3V0ZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1Jvb3RSb3V0ZSBleHRlbmRzIEJhc2ljUm91dGUge1xuICBnZXRIdW1hblBhdGgoKSB7XG4gICAgcmV0dXJuIFwiL1wiXG4gIH1cbn1cbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0ZXMvcm9vdC1yb3V0ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ3hELGFBQWE7UUFDWCxPQUFPO1lBQ0wsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQztTQUM1QyxDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNpY1JvdXRlIGZyb20gXCIuL2Jhc2ljLXJvdXRlLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzUm9vdFJvdXRlIGV4dGVuZHMgQmFzaWNSb3V0ZSB7XG4gIGdldEh1bWFuUGF0aHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHttZXRob2Q6IFwiR0VUXCIsIGFjdGlvbjogXCJpbmRleFwiLCBwYXRoOiBcIi9cIn1cbiAgICBdXG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -3,15 +3,15 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.126",
6
+ "version": "1.0.127",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [
10
10
  "build/**"
11
11
  ],
12
12
  "scripts": {
13
- "build": "rm -rf build && npm run compile && npm run copy:ejs",
14
- "compile": "tsc && chmod +x build/bin/velocious.js",
13
+ "build": "rm -rf build && npm run compile",
14
+ "compile": "tsc && npm run copy:ejs && chmod +x build/bin/velocious.js",
15
15
  "copy:ejs": "cpy \"src/**/*.ejs\" build --parents",
16
16
  "lint": "eslint",
17
17
  "test": "VELOCIOUS_TEST_DIR=../ cd spec/dummy && npx velocious test",