UNPKG

2.33 kBJavaScriptView Raw
1/**
2 * @copyright Copyright (c) 2019 Maxim Khorin <maksimovichu@gmail.com>
3 */
4'use strict';
5
6const Base = require('../base/Component');
7
8module.exports = class UrlManager extends Base {
9
10 constructor (config) {
11 super({
12 forwarder: 'forwarder',
13 ...config
14 })
15 }
16
17 init () {
18 this.forwarder = this.module.get(this.forwarder);
19 this.serverAddress = this.module.getParam('serverAddress');
20 }
21
22 resolveAbsolute () {
23 return this.serverAddress + this.resolve(...arguments);
24 }
25
26 resolve () {
27 return this.forward(this.create(...arguments));
28 }
29
30 forward (url) {
31 return this.forwarder ? this.forwarder.resolve(url) : url;
32 }
33
34 createAbsolute () {
35 return this.serverAddress + this.create(...arguments);
36 }
37
38 /**
39 * @param data - ['action', { k1: param1, k2: param2 }]
40 * /module/controller/action - relative app
41 * controller/action - relative module
42 * action - relative controller
43 * @param root - [controller or module name]
44 */
45 create (data, root) {
46 let params;
47 if (Array.isArray(data)) {
48 params = data[1];
49 data = data[0];
50 }
51 const index = data.indexOf('/');
52 if (index === -1) { // relative root
53 data = this.module.getRoute(root ? `${root}/${data}` : data);
54 } else if (index === 0) { // relative app
55 root = this.module.app.mountPath;
56 if (root !== '/' && data.substring(0, root.length) !== root) {
57 data = root + data;
58 }
59 } else if (data.substring(0, 4) !== 'http') { // relative module
60 data = this.module.getRoute(data);
61 }
62 if (!params || typeof params !== 'object') {
63 return data;
64 }
65 if (params.getId) {
66 return data + '?id=' + params.getId();
67 }
68 const anchor = params['#'];
69 delete params['#'];
70 params = UrlHelper.serialize(params);
71 if (params) {
72 data += '?' + params;
73 }
74 if (anchor !== undefined) {
75 data += '#' + anchor;
76 }
77 return data;
78 }
79};
80
81const UrlHelper = require('../helper/UrlHelper');
\No newline at end of file