serde-ts/dist/de/interface.js

57 lines
1.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.IterableAccess = exports.MapAccess = void 0;
exports.isVisitor = isVisitor;
const utils_1 = require("../utils");
class MapAccess {
nextEntry(kseed, vseed) {
const key = this.nextKey(kseed);
if (!key.done) {
const value = this.nextValue(vseed);
if (!value.done) {
return utils_1.IterResult.Next([key.value, value.value]);
}
}
return utils_1.IterResult.Done();
}
*generate(next) {
let item;
while ((item = next()) && !item.done) {
yield item.value;
}
}
keys(seed) {
return this.generate(this.nextKey.bind(this, seed));
}
values(seed) {
return this.generate(this.nextValue.bind(this, seed));
}
entries(kseed, vseed) {
return this.generate(this.nextEntry.bind(this, kseed, vseed));
}
[Symbol.iterator]() {
return this.entries();
}
}
exports.MapAccess = MapAccess;
class IterableAccess {
[Symbol.iterator]() {
return {
next: this.nextElement.bind(this)
};
}
}
exports.IterableAccess = IterableAccess;
const VisitorMethods = Object.freeze([
'visitBoolean',
'visitNumber',
'visitBigInt',
'visitString',
'visitSymbol',
'visitNull',
'visitObject',
'visitIterable'
]);
function isVisitor(visitor) {
return VisitorMethods.every(method => method in visitor);
}