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.

201 lines (200 loc) 7.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("../../../../index"); const support_base_1 = __importDefault(require("../support-base")); const var_utils_1 = require("../../../utils/var.utils"); const native_utils_1 = require("../../../utils/native.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")); class SupportMap extends support_base_1.default { static convertProperty(key, object) { if (!(object.native 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.native); return; } const map = object; const native = object.native; const get = (key) => { if (key in map) { return Reflect.get(map, key); } else { return native.get(key); // Basic } }; const getJson = (key) => { let 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 'size': return native.size; 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, map); } }; case 'delete': return (key) => { let has = native.has(key); native.delete(key); return has; }; case 'clear': return () => { native.clear(); }; 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; } } } SupportMap.TARGET_TAG = 'RhineVarMap'; SupportMap.SUPPORTED_PROPERTIES = new Set([ Symbol.iterator, 'size', 'get', 'set', 'has', 'delete', 'delete', 'clear', 'forEach', 'keys', 'values', 'entries', ]); SupportMap.UNSUPPORTED_PROPERTIES = new Set([]); exports.default = SupportMap;