Spaces:
Sleeping
Sleeping
// Licensed to the Apache Software Foundation (ASF) under one | |
// or more contributor license agreements. See the NOTICE file | |
// distributed with this work for additional information | |
// regarding copyright ownership. The ASF licenses this file | |
// to you under the Apache License, Version 2.0 (the | |
// "License"); you may not use this file except in compliance | |
// with the License. You may obtain a copy of the License at | |
// | |
// http://www.apache.org/licenses/LICENSE-2.0 | |
// | |
// Unless required by applicable law or agreed to in writing, | |
// software distributed under the License is distributed on an | |
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
// KIND, either express or implied. See the License for the | |
// specific language governing permissions and limitations | |
// under the License. | |
import { __awaiter } from "tslib"; | |
import streamAdapters from './adapters.mjs'; | |
/** @ignore */ | |
export const ITERATOR_DONE = Object.freeze({ done: true, value: void (0) }); | |
/** @ignore */ | |
export class ArrowJSON { | |
constructor(_json) { | |
this._json = _json; | |
} | |
get schema() { return this._json['schema']; } | |
get batches() { return (this._json['batches'] || []); } | |
get dictionaries() { return (this._json['dictionaries'] || []); } | |
} | |
/** @ignore */ | |
export class ReadableInterop { | |
tee() { | |
return this._getDOMStream().tee(); | |
} | |
pipe(writable, options) { | |
return this._getNodeStream().pipe(writable, options); | |
} | |
pipeTo(writable, options) { return this._getDOMStream().pipeTo(writable, options); } | |
pipeThrough(duplex, options) { | |
return this._getDOMStream().pipeThrough(duplex, options); | |
} | |
_getDOMStream() { | |
return this._DOMStream || (this._DOMStream = this.toDOMStream()); | |
} | |
_getNodeStream() { | |
return this._nodeStream || (this._nodeStream = this.toNodeStream()); | |
} | |
} | |
/** @ignore */ | |
export class AsyncQueue extends ReadableInterop { | |
constructor() { | |
super(); | |
this._values = []; | |
this.resolvers = []; | |
this._closedPromise = new Promise((r) => this._closedPromiseResolve = r); | |
} | |
get closed() { return this._closedPromise; } | |
cancel(reason) { | |
return __awaiter(this, void 0, void 0, function* () { yield this.return(reason); }); | |
} | |
write(value) { | |
if (this._ensureOpen()) { | |
this.resolvers.length <= 0 | |
? (this._values.push(value)) | |
: (this.resolvers.shift().resolve({ done: false, value })); | |
} | |
} | |
abort(value) { | |
if (this._closedPromiseResolve) { | |
this.resolvers.length <= 0 | |
? (this._error = { error: value }) | |
: (this.resolvers.shift().reject({ done: true, value })); | |
} | |
} | |
close() { | |
if (this._closedPromiseResolve) { | |
const { resolvers } = this; | |
while (resolvers.length > 0) { | |
resolvers.shift().resolve(ITERATOR_DONE); | |
} | |
this._closedPromiseResolve(); | |
this._closedPromiseResolve = undefined; | |
} | |
} | |
[Symbol.asyncIterator]() { return this; } | |
toDOMStream(options) { | |
return streamAdapters.toDOMStream((this._closedPromiseResolve || this._error) | |
? this | |
: this._values, options); | |
} | |
toNodeStream(options) { | |
return streamAdapters.toNodeStream((this._closedPromiseResolve || this._error) | |
? this | |
: this._values, options); | |
} | |
throw(_) { | |
return __awaiter(this, void 0, void 0, function* () { yield this.abort(_); return ITERATOR_DONE; }); | |
} | |
return(_) { | |
return __awaiter(this, void 0, void 0, function* () { yield this.close(); return ITERATOR_DONE; }); | |
} | |
read(size) { | |
return __awaiter(this, void 0, void 0, function* () { return (yield this.next(size, 'read')).value; }); | |
} | |
peek(size) { | |
return __awaiter(this, void 0, void 0, function* () { return (yield this.next(size, 'peek')).value; }); | |
} | |
next(..._args) { | |
if (this._values.length > 0) { | |
return Promise.resolve({ done: false, value: this._values.shift() }); | |
} | |
else if (this._error) { | |
return Promise.reject({ done: true, value: this._error.error }); | |
} | |
else if (!this._closedPromiseResolve) { | |
return Promise.resolve(ITERATOR_DONE); | |
} | |
else { | |
return new Promise((resolve, reject) => { | |
this.resolvers.push({ resolve, reject }); | |
}); | |
} | |
} | |
_ensureOpen() { | |
if (this._closedPromiseResolve) { | |
return true; | |
} | |
throw new Error(`AsyncQueue is closed`); | |
} | |
} | |
//# sourceMappingURL=interfaces.mjs.map | |