1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- "use strict";
- // Returns "Type(value) is Object" in ES terminology.
- function isObject(value) {
- return typeof value === "object" && value !== null || typeof value === "function";
- }
- function getReferenceToBytes(bufferSource) {
- // Node.js' Buffer does not allow subclassing for now, so we can get away with a prototype object check for perf.
- if (Object.getPrototypeOf(bufferSource) === Buffer.prototype) {
- return bufferSource;
- }
- if (bufferSource instanceof ArrayBuffer) {
- return Buffer.from(bufferSource);
- }
- return Buffer.from(bufferSource.buffer, bufferSource.byteOffset, bufferSource.byteLength);
- }
- function getCopyToBytes(bufferSource) {
- return Buffer.from(getReferenceToBytes(bufferSource));
- }
- function mixin(target, source) {
- const keys = Object.getOwnPropertyNames(source);
- for (let i = 0; i < keys.length; ++i) {
- if (keys[i] in target) {
- continue;
- }
- Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
- }
- }
- const wrapperSymbol = Symbol("wrapper");
- const implSymbol = Symbol("impl");
- const sameObjectCaches = Symbol("SameObject caches");
- function getSameObject(wrapper, prop, creator) {
- if (!wrapper[sameObjectCaches]) {
- wrapper[sameObjectCaches] = Object.create(null);
- }
- if (prop in wrapper[sameObjectCaches]) {
- return wrapper[sameObjectCaches][prop];
- }
- wrapper[sameObjectCaches][prop] = creator();
- return wrapper[sameObjectCaches][prop];
- }
- function wrapperForImpl(impl) {
- return impl ? impl[wrapperSymbol] : null;
- }
- function implForWrapper(wrapper) {
- return wrapper ? wrapper[implSymbol] : null;
- }
- function tryWrapperForImpl(impl) {
- const wrapper = wrapperForImpl(impl);
- return wrapper ? wrapper : impl;
- }
- function tryImplForWrapper(wrapper) {
- const impl = implForWrapper(wrapper);
- return impl ? impl : wrapper;
- }
- const iterInternalSymbol = Symbol("internal");
- const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
- module.exports = exports = {
- isObject,
- getReferenceToBytes,
- getCopyToBytes,
- mixin,
- wrapperSymbol,
- implSymbol,
- getSameObject,
- wrapperForImpl,
- implForWrapper,
- tryWrapperForImpl,
- tryImplForWrapper,
- iterInternalSymbol,
- IteratorPrototype
- };
|