UNPKG

5.61 kBJavaScriptView Raw
1"use strict";
2// -------------------------------------------------------------
3// WARNING: this file is used by both the client and the server.
4// Do not use any browser or node-specific API!
5// -------------------------------------------------------------
6Object.defineProperty(exports, "__esModule", { value: true });
7class Assignable {
8 _getAssignableProperties() {
9 throw new Error('Not implemented');
10 }
11 _assignFrom(obj, validate, initOptions = {}) {
12 if (!obj)
13 return;
14 const props = this._getAssignableProperties();
15 for (let i = 0; i < props.length; i++) {
16 const { name, type, required, init, defaultValue } = props[i];
17 const path = name.split('.');
18 const lastIdx = path.length - 1;
19 const last = path[lastIdx];
20 let srcObj = obj;
21 let destObj = this;
22 for (let j = 0; j < lastIdx && srcObj && destObj; j++) {
23 srcObj = srcObj[path[j]];
24 destObj = destObj[path[j]];
25 }
26 if (destObj && 'defaultValue' in props[i])
27 destObj[name] = defaultValue;
28 if (srcObj && destObj) {
29 const srcVal = srcObj[last];
30 if (srcVal !== void 0 || required) {
31 if (validate && type)
32 type(name, srcVal);
33 destObj[last] = init ? init(name, srcVal, initOptions) : srcVal;
34 }
35 }
36 }
37 }
38}
39exports.default = Assignable;
40module.exports = exports.default;
41//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hc3NpZ25hYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnRUFBZ0U7QUFDaEUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxnRUFBZ0U7O0FBRWhFLE1BQXFCLFVBQVU7SUFDM0Isd0JBQXdCO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxHQUFHLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEdBQUc7WUFDSixPQUFPO1FBRVgsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUQsTUFBTSxJQUFJLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLElBQUksR0FBTSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsSUFBSSxNQUFNLEdBQUksR0FBRyxDQUFDO1lBQ2xCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25ELE1BQU0sR0FBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7WUFFRCxJQUFJLE9BQU8sSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUVqQyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFNUIsSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFO29CQUMvQixJQUFJLFFBQVEsSUFBSSxJQUFJO3dCQUNoQixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUV2QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUNuRTthQUNKO1NBQ0o7SUFDTCxDQUFDO0NBQ0o7QUF4Q0QsNkJBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV0FSTklORzogdGhpcyBmaWxlIGlzIHVzZWQgYnkgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuLy8gRG8gbm90IHVzZSBhbnkgYnJvd3NlciBvciBub2RlLXNwZWNpZmljIEFQSSFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXNzaWduYWJsZSB7XG4gICAgX2dldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBfYXNzaWduRnJvbSAob2JqLCB2YWxpZGF0ZSwgaW5pdE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIW9iailcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuX2dldEFzc2lnbmFibGVQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB0eXBlLCByZXF1aXJlZCwgaW5pdCwgZGVmYXVsdFZhbHVlIH0gPSBwcm9wc1tpXTtcblxuICAgICAgICAgICAgY29uc3QgcGF0aCAgICA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJZHggPSBwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBsYXN0ICAgID0gcGF0aFtsYXN0SWR4XTtcbiAgICAgICAgICAgIGxldCBzcmNPYmogID0gb2JqO1xuICAgICAgICAgICAgbGV0IGRlc3RPYmogPSB0aGlzO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxhc3RJZHggJiYgc3JjT2JqICYmIGRlc3RPYmo7IGorKykge1xuICAgICAgICAgICAgICAgIHNyY09iaiAgPSBzcmNPYmpbcGF0aFtqXV07XG4gICAgICAgICAgICAgICAgZGVzdE9iaiA9IGRlc3RPYmpbcGF0aFtqXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkZXN0T2JqICYmICdkZWZhdWx0VmFsdWUnIGluIHByb3BzW2ldKVxuICAgICAgICAgICAgICAgIGRlc3RPYmpbbmFtZV0gPSBkZWZhdWx0VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChzcmNPYmogJiYgZGVzdE9iaikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyY1ZhbCA9IHNyY09ialtsYXN0XTtcblxuICAgICAgICAgICAgICAgIGlmIChzcmNWYWwgIT09IHZvaWQgMCB8fCByZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGUgJiYgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUobmFtZSwgc3JjVmFsKTtcblxuICAgICAgICAgICAgICAgICAgICBkZXN0T2JqW2xhc3RdID0gaW5pdCA/IGluaXQobmFtZSwgc3JjVmFsLCBpbml0T3B0aW9ucykgOiBzcmNWYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
\No newline at end of file