UNPKG

4.72 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _Component = require('./Component');
10
11var _Component2 = _interopRequireDefault(_Component);
12
13function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
15function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
16
17var PAGE_VENDOR = '__page';
18
19/**
20 * Used to register page and reusable components. Canonical reference for
21 * pages and components at server side.
22 *
23 * @SERVER
24 */
25
26var ComponentRegister = function () {
27
28 /**
29 * @param {Logger} logger
30 */
31
32 /**
33 * @type {{[key: string]: {[key:string]: Component}}}
34 */
35 function ComponentRegister(logger) {
36 _classCallCheck(this, ComponentRegister);
37
38 this._logger = logger;
39 this._components = {};
40 }
41
42 /**
43 * @returns {?{[key: string]: Component}}
44 */
45
46
47 /**
48 * @type {Logger}
49 */
50
51
52 _createClass(ComponentRegister, [{
53 key: 'getPages',
54 value: function getPages() {
55 return this.getComponents(PAGE_VENDOR);
56 }
57
58 /**
59 * @returns {?{[key: string]: Component}}
60 */
61
62 }, {
63 key: 'getComponents',
64 value: function getComponents(vendor) {
65 return this._components[vendor];
66 }
67
68 /**
69 * @param {string} name
70 * @param {string} absDir
71 * @param {any} clazz
72 */
73
74 }, {
75 key: 'regPage',
76 value: function regPage(name, absDir, clazz) {
77 if (typeof clazz != 'function') {
78 throw new Error('Unable to load page, not a function: ' + absDir);
79 }
80 if (typeof clazz.prototype.render != 'function') {
81 throw new Error('Page class doesn\'t implement render(): \'' + absDir + '\'.');
82 }
83 if (!clazz.pageName) {
84 throw new Error('Page class doesn\'t have static name property: \'' + absDir + '\'.');
85 }
86 // if (clazz.pageName != name) {
87 // throw new Error('Page class static name property and actual directory name differs: ' + clazz.pageName + ' and ' + name + '.');
88 // }
89 this._regComponent(PAGE_VENDOR, name, absDir, clazz);
90 }
91
92 /**
93 * @param {string} name
94 * @returns {?Component}
95 */
96
97 }, {
98 key: 'getPage',
99 value: function getPage(name) {
100 return this.getComponent(PAGE_VENDOR, name);
101 }
102
103 /**
104 * @param {string} name
105 * @returns {boolean}
106 */
107
108 }, {
109 key: 'hasPage',
110 value: function hasPage(name) {
111 return this.hasComponent(PAGE_VENDOR, name);
112 }
113
114 /**
115 * @param {string} vendor
116 * @param {string} name
117 * @param {string} absDir
118 * @param {any} clazz
119 */
120
121 }, {
122 key: 'regComponent',
123 value: function regComponent(vendor, name, absDir, clazz) {
124 if (vendor[0] == '_') {
125 throw new Error('Component vendor name must not start with underscore: ' + vendor);
126 }
127 if (name[0] == '_') {
128 throw new Error('Component name must not start with underscore: ' + name);
129 }
130 this._regComponent(vendor, name, absDir, clazz);
131 }
132
133 /**
134 * @param {string} vendor
135 * @param {string} name
136 * @param {string} absDir
137 * @param {any} clazz
138 */
139
140 }, {
141 key: '_regComponent',
142 value: function _regComponent(vendor, name, absDir, clazz) {
143 if (!this._components.hasOwnProperty(vendor)) {
144 this._components[vendor] = {};
145 }
146 this._components[vendor][name] = new _Component2.default(name, absDir, clazz);
147 }
148
149 /**
150 * @param {string} vendor
151 * @param {string} name
152 * @return {?Component}
153 */
154
155 }, {
156 key: 'getComponent',
157 value: function getComponent(vendor, name) {
158 return this._components[vendor][name];
159 }
160
161 /**
162 * @param {string} vendor
163 * @param {string} name
164 * @returns {boolean}
165 */
166
167 }, {
168 key: 'hasComponent',
169 value: function hasComponent(vendor, name) {
170 return this._components.hasOwnProperty(vendor) && this._components[vendor].hasOwnProperty(name);
171 }
172 }]);
173
174 return ComponentRegister;
175}();
176
177exports.default = ComponentRegister;
178//# sourceMappingURL=ComponentRegister.js.map
\No newline at end of file