UNPKG

rhine-var

Version:

Variables that support multi-user collaboration and persistence, making collaboration and variable operations as simple as possible, with strict and well-defined type hints.

195 lines (194 loc) 7.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const native_utils_1 = require("../../../utils/native.utils"); const var_utils_1 = require("../../../utils/var.utils"); const rhine_var_map_class_1 = __importDefault(require("../../items/rhine-var-map.class")); const rhine_var_object_class_1 = __importDefault(require("../../items/rhine-var-object.class")); const support_base_1 = __importDefault(require("../support-base")); const index_1 = require("../../../../index"); class SupportObject extends support_base_1.default { static convertProperty(key, object) { if (!(object.getNative() instanceof index_1.YMap) || !(object instanceof rhine_var_map_class_1.default || object instanceof rhine_var_object_class_1.default)) { console.error('Unsupported convertProperty:', object, object.getNative()); return; } const obj = object; const native = object.getNative(); const get = (key) => { if (key in obj) { return Reflect.get(obj, key); } else { return native.get(key); // Basic } }; const getJson = (key) => { const item = get(key); if ((0, native_utils_1.isNative)(item)) { return item.toJSON(); } if ((0, var_utils_1.isRhineVar)(item)) { return item.json(); } return item; }; switch (key) { case 'set': return (key, value) => { return native.set(key, (0, var_utils_1.ensureNativeOrBasic)(value)); }; case 'get': return (key) => { return get(key); }; case 'has': return (key) => { return native.has(key); }; case 'forEach': return (callback, thisArg) => { for (const k of native.keys()) { callback(get(k), k, obj); } }; case 'delete': return (key) => { const has = native.has(key); native.delete(key); return has; }; case 'keys': return () => { const keys = [...native.keys()]; return { [Symbol.iterator]: () => { let index = 0; return { next: () => { if (index < keys.length) { return { value: keys[index++], done: false, }; } else { return { value: undefined, done: true, }; } }, [Symbol.iterator]: () => { return this; }, }; }, }; }; case 'values': return () => { const keys = [...native.keys()]; return { [Symbol.iterator]: () => { let index = 0; return { next: () => { if (index < keys.length) { return { value: get(keys[index++]), done: false, }; } else { return { value: undefined, done: true, }; } }, [Symbol.iterator]: () => { return this; }, }; }, }; }; case 'entries': return () => { const keys = [...native.keys()]; return { [Symbol.iterator]: () => { let index = 0; return { next: () => { if (index < keys.length) { const key = keys[index++]; return { value: [key, get(key)], done: false, }; } else { return { value: undefined, done: true, }; } }, [Symbol.iterator]: () => { return this; }, }; }, }; }; case Symbol.iterator: const keys = [...native.keys()]; return () => { let index = 0; return { next: () => { if (index < keys.length) { const key = keys[index++]; return { value: [key, get(key)], done: false, }; } else { return { value: undefined, done: true, }; } }, [Symbol.iterator]: () => { return this; }, }; }; default: return undefined; } } } SupportObject.TARGET_TAG = 'RhineVarObject'; SupportObject.SUPPORTED_PROPERTIES = new Set([ Symbol.iterator, 'size', 'get', 'set', 'has', 'delete', 'delete', 'clear', 'forEach', 'keys', 'values', 'entries', ]); SupportObject.UNSUPPORTED_PROPERTIES = new Set([]); exports.default = SupportObject;