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
JavaScript
"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;