Files
setup-java/dist/setup/971.index.js
T
dependabot[bot]Copilot Appdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Bruno Borges
7a9a8b1dcc chore(deps): bump brace-expansion from 5.0.8 to 5.0.9 (#1202)
* chore(deps): bump brace-expansion from 5.0.8 to 5.0.9

Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 5.0.8 to 5.0.9.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.8...v5.0.9)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 5.0.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: rebuild distribution

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* chore: refresh dependency metadata

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bruno Borges <brborges@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-08-04 21:15:15 -04:00

55550 lines
2.0 MiB
Plaintext

export const id = 971;
export const ids = [971];
export const modules = {
/***/ 7889:
/***/ (function(__unused_webpack_module, exports) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ClientStreamingCall = void 0;
/**
* A client streaming RPC call. This means that the clients sends 0, 1, or
* more messages to the server, and the server replies with exactly one
* message.
*/
class ClientStreamingCall {
constructor(method, requestHeaders, request, headers, response, status, trailers) {
this.method = method;
this.requestHeaders = requestHeaders;
this.requests = request;
this.headers = headers;
this.response = response;
this.status = status;
this.trailers = trailers;
}
/**
* Instead of awaiting the response status and trailers, you can
* just as well await this call itself to receive the server outcome.
* Note that it may still be valid to send more request messages.
*/
then(onfulfilled, onrejected) {
return this.promiseFinished().then(value => onfulfilled ? Promise.resolve(onfulfilled(value)) : value, reason => onrejected ? Promise.resolve(onrejected(reason)) : Promise.reject(reason));
}
promiseFinished() {
return __awaiter(this, void 0, void 0, function* () {
let [headers, response, status, trailers] = yield Promise.all([this.headers, this.response, this.status, this.trailers]);
return {
method: this.method,
requestHeaders: this.requestHeaders,
headers,
response,
status,
trailers
};
});
}
}
exports.ClientStreamingCall = ClientStreamingCall;
/***/ }),
/***/ 1409:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Deferred = exports.DeferredState = void 0;
var DeferredState;
(function (DeferredState) {
DeferredState[DeferredState["PENDING"] = 0] = "PENDING";
DeferredState[DeferredState["REJECTED"] = 1] = "REJECTED";
DeferredState[DeferredState["RESOLVED"] = 2] = "RESOLVED";
})(DeferredState = exports.DeferredState || (exports.DeferredState = {}));
/**
* A deferred promise. This is a "controller" for a promise, which lets you
* pass a promise around and reject or resolve it from the outside.
*
* Warning: This class is to be used with care. Using it can make code very
* difficult to read. It is intended for use in library code that exposes
* promises, not for regular business logic.
*/
class Deferred {
/**
* @param preventUnhandledRejectionWarning - prevents the warning
* "Unhandled Promise rejection" by adding a noop rejection handler.
* Working with calls returned from the runtime-rpc package in an
* async function usually means awaiting one call property after
* the other. This means that the "status" is not being awaited when
* an earlier await for the "headers" is rejected. This causes the
* "unhandled promise reject" warning. A more correct behaviour for
* calls might be to become aware whether at least one of the
* promises is handled and swallow the rejection warning for the
* others.
*/
constructor(preventUnhandledRejectionWarning = true) {
this._state = DeferredState.PENDING;
this._promise = new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
if (preventUnhandledRejectionWarning) {
this._promise.catch(_ => { });
}
}
/**
* Get the current state of the promise.
*/
get state() {
return this._state;
}
/**
* Get the deferred promise.
*/
get promise() {
return this._promise;
}
/**
* Resolve the promise. Throws if the promise is already resolved or rejected.
*/
resolve(value) {
if (this.state !== DeferredState.PENDING)
throw new Error(`cannot resolve ${DeferredState[this.state].toLowerCase()}`);
this._resolve(value);
this._state = DeferredState.RESOLVED;
}
/**
* Reject the promise. Throws if the promise is already resolved or rejected.
*/
reject(reason) {
if (this.state !== DeferredState.PENDING)
throw new Error(`cannot reject ${DeferredState[this.state].toLowerCase()}`);
this._reject(reason);
this._state = DeferredState.REJECTED;
}
/**
* Resolve the promise. Ignore if not pending.
*/
resolvePending(val) {
if (this._state === DeferredState.PENDING)
this.resolve(val);
}
/**
* Reject the promise. Ignore if not pending.
*/
rejectPending(reason) {
if (this._state === DeferredState.PENDING)
this.reject(reason);
}
}
exports.Deferred = Deferred;
/***/ }),
/***/ 6826:
/***/ (function(__unused_webpack_module, exports) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.DuplexStreamingCall = void 0;
/**
* A duplex streaming RPC call. This means that the clients sends an
* arbitrary amount of messages to the server, while at the same time,
* the server sends an arbitrary amount of messages to the client.
*/
class DuplexStreamingCall {
constructor(method, requestHeaders, request, headers, response, status, trailers) {
this.method = method;
this.requestHeaders = requestHeaders;
this.requests = request;
this.headers = headers;
this.responses = response;
this.status = status;
this.trailers = trailers;
}
/**
* Instead of awaiting the response status and trailers, you can
* just as well await this call itself to receive the server outcome.
* Note that it may still be valid to send more request messages.
*/
then(onfulfilled, onrejected) {
return this.promiseFinished().then(value => onfulfilled ? Promise.resolve(onfulfilled(value)) : value, reason => onrejected ? Promise.resolve(onrejected(reason)) : Promise.reject(reason));
}
promiseFinished() {
return __awaiter(this, void 0, void 0, function* () {
let [headers, status, trailers] = yield Promise.all([this.headers, this.status, this.trailers]);
return {
method: this.method,
requestHeaders: this.requestHeaders,
headers,
status,
trailers,
};
});
}
}
exports.DuplexStreamingCall = DuplexStreamingCall;
/***/ }),
/***/ 4420:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var __webpack_unused_export__;
// Public API of the rpc runtime.
// Note: we do not use `export * from ...` to help tree shakers,
// webpack verbose output hints that this should be useful
__webpack_unused_export__ = ({ value: true });
var service_type_1 = __webpack_require__(6892);
Object.defineProperty(exports, "C0", ({ enumerable: true, get: function () { return service_type_1.ServiceType; } }));
var reflection_info_1 = __webpack_require__(2496);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return reflection_info_1.readMethodOptions; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return reflection_info_1.readMethodOption; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return reflection_info_1.readServiceOption; } });
var rpc_error_1 = __webpack_require__(8636);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_error_1.RpcError; } });
var rpc_options_1 = __webpack_require__(8576);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_options_1.mergeRpcOptions; } });
var rpc_output_stream_1 = __webpack_require__(2726);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_output_stream_1.RpcOutputStreamController; } });
var test_transport_1 = __webpack_require__(9122);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return test_transport_1.TestTransport; } });
var deferred_1 = __webpack_require__(1409);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return deferred_1.Deferred; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return deferred_1.DeferredState; } });
var duplex_streaming_call_1 = __webpack_require__(6826);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return duplex_streaming_call_1.DuplexStreamingCall; } });
var client_streaming_call_1 = __webpack_require__(7889);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return client_streaming_call_1.ClientStreamingCall; } });
var server_streaming_call_1 = __webpack_require__(6173);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return server_streaming_call_1.ServerStreamingCall; } });
var unary_call_1 = __webpack_require__(9288);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return unary_call_1.UnaryCall; } });
var rpc_interceptor_1 = __webpack_require__(2849);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_interceptor_1.stackIntercept; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_interceptor_1.stackDuplexStreamingInterceptors; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_interceptor_1.stackClientStreamingInterceptors; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_interceptor_1.stackServerStreamingInterceptors; } });
__webpack_unused_export__ = ({ enumerable: true, get: function () { return rpc_interceptor_1.stackUnaryInterceptors; } });
var server_call_context_1 = __webpack_require__(3352);
__webpack_unused_export__ = ({ enumerable: true, get: function () { return server_call_context_1.ServerCallContextController; } });
/***/ }),
/***/ 2496:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.readServiceOption = exports.readMethodOption = exports.readMethodOptions = exports.normalizeMethodInfo = void 0;
const runtime_1 = __webpack_require__(8886);
/**
* Turns PartialMethodInfo into MethodInfo.
*/
function normalizeMethodInfo(method, service) {
var _a, _b, _c;
let m = method;
m.service = service;
m.localName = (_a = m.localName) !== null && _a !== void 0 ? _a : runtime_1.lowerCamelCase(m.name);
// noinspection PointlessBooleanExpressionJS
m.serverStreaming = !!m.serverStreaming;
// noinspection PointlessBooleanExpressionJS
m.clientStreaming = !!m.clientStreaming;
m.options = (_b = m.options) !== null && _b !== void 0 ? _b : {};
m.idempotency = (_c = m.idempotency) !== null && _c !== void 0 ? _c : undefined;
return m;
}
exports.normalizeMethodInfo = normalizeMethodInfo;
/**
* Read custom method options from a generated service client.
*
* @deprecated use readMethodOption()
*/
function readMethodOptions(service, methodName, extensionName, extensionType) {
var _a;
const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options;
return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : undefined;
}
exports.readMethodOptions = readMethodOptions;
function readMethodOption(service, methodName, extensionName, extensionType) {
var _a;
const options = (_a = service.methods.find((m, i) => m.localName === methodName || i === methodName)) === null || _a === void 0 ? void 0 : _a.options;
if (!options) {
return undefined;
}
const optionVal = options[extensionName];
if (optionVal === undefined) {
return optionVal;
}
return extensionType ? extensionType.fromJson(optionVal) : optionVal;
}
exports.readMethodOption = readMethodOption;
function readServiceOption(service, extensionName, extensionType) {
const options = service.options;
if (!options) {
return undefined;
}
const optionVal = options[extensionName];
if (optionVal === undefined) {
return optionVal;
}
return extensionType ? extensionType.fromJson(optionVal) : optionVal;
}
exports.readServiceOption = readServiceOption;
/***/ }),
/***/ 8636:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.RpcError = void 0;
/**
* An error that occurred while calling a RPC method.
*/
class RpcError extends Error {
constructor(message, code = 'UNKNOWN', meta) {
super(message);
this.name = 'RpcError';
// see https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#example
Object.setPrototypeOf(this, new.target.prototype);
this.code = code;
this.meta = meta !== null && meta !== void 0 ? meta : {};
}
toString() {
const l = [this.name + ': ' + this.message];
if (this.code) {
l.push('');
l.push('Code: ' + this.code);
}
if (this.serviceName && this.methodName) {
l.push('Method: ' + this.serviceName + '/' + this.methodName);
}
let m = Object.entries(this.meta);
if (m.length) {
l.push('');
l.push('Meta:');
for (let [k, v] of m) {
l.push(` ${k}: ${v}`);
}
}
return l.join('\n');
}
}
exports.RpcError = RpcError;
/***/ }),
/***/ 2849:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.stackDuplexStreamingInterceptors = exports.stackClientStreamingInterceptors = exports.stackServerStreamingInterceptors = exports.stackUnaryInterceptors = exports.stackIntercept = void 0;
const runtime_1 = __webpack_require__(8886);
/**
* Creates a "stack" of of all interceptors specified in the given `RpcOptions`.
* Used by generated client implementations.
* @internal
*/
function stackIntercept(kind, transport, method, options, input) {
var _a, _b, _c, _d;
if (kind == "unary") {
let tail = (mtd, inp, opt) => transport.unary(mtd, inp, opt);
for (const curr of ((_a = options.interceptors) !== null && _a !== void 0 ? _a : []).filter(i => i.interceptUnary).reverse()) {
const next = tail;
tail = (mtd, inp, opt) => curr.interceptUnary(next, mtd, inp, opt);
}
return tail(method, input, options);
}
if (kind == "serverStreaming") {
let tail = (mtd, inp, opt) => transport.serverStreaming(mtd, inp, opt);
for (const curr of ((_b = options.interceptors) !== null && _b !== void 0 ? _b : []).filter(i => i.interceptServerStreaming).reverse()) {
const next = tail;
tail = (mtd, inp, opt) => curr.interceptServerStreaming(next, mtd, inp, opt);
}
return tail(method, input, options);
}
if (kind == "clientStreaming") {
let tail = (mtd, opt) => transport.clientStreaming(mtd, opt);
for (const curr of ((_c = options.interceptors) !== null && _c !== void 0 ? _c : []).filter(i => i.interceptClientStreaming).reverse()) {
const next = tail;
tail = (mtd, opt) => curr.interceptClientStreaming(next, mtd, opt);
}
return tail(method, options);
}
if (kind == "duplex") {
let tail = (mtd, opt) => transport.duplex(mtd, opt);
for (const curr of ((_d = options.interceptors) !== null && _d !== void 0 ? _d : []).filter(i => i.interceptDuplex).reverse()) {
const next = tail;
tail = (mtd, opt) => curr.interceptDuplex(next, mtd, opt);
}
return tail(method, options);
}
runtime_1.assertNever(kind);
}
exports.stackIntercept = stackIntercept;
/**
* @deprecated replaced by `stackIntercept()`, still here to support older generated code
*/
function stackUnaryInterceptors(transport, method, input, options) {
return stackIntercept("unary", transport, method, options, input);
}
exports.stackUnaryInterceptors = stackUnaryInterceptors;
/**
* @deprecated replaced by `stackIntercept()`, still here to support older generated code
*/
function stackServerStreamingInterceptors(transport, method, input, options) {
return stackIntercept("serverStreaming", transport, method, options, input);
}
exports.stackServerStreamingInterceptors = stackServerStreamingInterceptors;
/**
* @deprecated replaced by `stackIntercept()`, still here to support older generated code
*/
function stackClientStreamingInterceptors(transport, method, options) {
return stackIntercept("clientStreaming", transport, method, options);
}
exports.stackClientStreamingInterceptors = stackClientStreamingInterceptors;
/**
* @deprecated replaced by `stackIntercept()`, still here to support older generated code
*/
function stackDuplexStreamingInterceptors(transport, method, options) {
return stackIntercept("duplex", transport, method, options);
}
exports.stackDuplexStreamingInterceptors = stackDuplexStreamingInterceptors;
/***/ }),
/***/ 8576:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.mergeRpcOptions = void 0;
const runtime_1 = __webpack_require__(8886);
/**
* Merges custom RPC options with defaults. Returns a new instance and keeps
* the "defaults" and the "options" unmodified.
*
* Merges `RpcMetadata` "meta", overwriting values from "defaults" with
* values from "options". Does not append values to existing entries.
*
* Merges "jsonOptions", including "jsonOptions.typeRegistry", by creating
* a new array that contains types from "options.jsonOptions.typeRegistry"
* first, then types from "defaults.jsonOptions.typeRegistry".
*
* Merges "binaryOptions".
*
* Merges "interceptors" by creating a new array that contains interceptors
* from "defaults" first, then interceptors from "options".
*
* Works with objects that extend `RpcOptions`, but only if the added
* properties are of type Date, primitive like string, boolean, or Array
* of primitives. If you have other property types, you have to merge them
* yourself.
*/
function mergeRpcOptions(defaults, options) {
if (!options)
return defaults;
let o = {};
copy(defaults, o);
copy(options, o);
for (let key of Object.keys(options)) {
let val = options[key];
switch (key) {
case "jsonOptions":
o.jsonOptions = runtime_1.mergeJsonOptions(defaults.jsonOptions, o.jsonOptions);
break;
case "binaryOptions":
o.binaryOptions = runtime_1.mergeBinaryOptions(defaults.binaryOptions, o.binaryOptions);
break;
case "meta":
o.meta = {};
copy(defaults.meta, o.meta);
copy(options.meta, o.meta);
break;
case "interceptors":
o.interceptors = defaults.interceptors ? defaults.interceptors.concat(val) : val.concat();
break;
}
}
return o;
}
exports.mergeRpcOptions = mergeRpcOptions;
function copy(a, into) {
if (!a)
return;
let c = into;
for (let [k, v] of Object.entries(a)) {
if (v instanceof Date)
c[k] = new Date(v.getTime());
else if (Array.isArray(v))
c[k] = v.concat();
else
c[k] = v;
}
}
/***/ }),
/***/ 2726:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.RpcOutputStreamController = void 0;
const deferred_1 = __webpack_require__(1409);
const runtime_1 = __webpack_require__(8886);
/**
* A `RpcOutputStream` that you control.
*/
class RpcOutputStreamController {
constructor() {
this._lis = {
nxt: [],
msg: [],
err: [],
cmp: [],
};
this._closed = false;
// --- RpcOutputStream async iterator API
// iterator state.
// is undefined when no iterator has been acquired yet.
this._itState = { q: [] };
}
// --- RpcOutputStream callback API
onNext(callback) {
return this.addLis(callback, this._lis.nxt);
}
onMessage(callback) {
return this.addLis(callback, this._lis.msg);
}
onError(callback) {
return this.addLis(callback, this._lis.err);
}
onComplete(callback) {
return this.addLis(callback, this._lis.cmp);
}
addLis(callback, list) {
list.push(callback);
return () => {
let i = list.indexOf(callback);
if (i >= 0)
list.splice(i, 1);
};
}
// remove all listeners
clearLis() {
for (let l of Object.values(this._lis))
l.splice(0, l.length);
}
// --- Controller API
/**
* Is this stream already closed by a completion or error?
*/
get closed() {
return this._closed !== false;
}
/**
* Emit message, close with error, or close successfully, but only one
* at a time.
* Can be used to wrap a stream by using the other stream's `onNext`.
*/
notifyNext(message, error, complete) {
runtime_1.assert((message ? 1 : 0) + (error ? 1 : 0) + (complete ? 1 : 0) <= 1, 'only one emission at a time');
if (message)
this.notifyMessage(message);
if (error)
this.notifyError(error);
if (complete)
this.notifyComplete();
}
/**
* Emits a new message. Throws if stream is closed.
*
* Triggers onNext and onMessage callbacks.
*/
notifyMessage(message) {
runtime_1.assert(!this.closed, 'stream is closed');
this.pushIt({ value: message, done: false });
this._lis.msg.forEach(l => l(message));
this._lis.nxt.forEach(l => l(message, undefined, false));
}
/**
* Closes the stream with an error. Throws if stream is closed.
*
* Triggers onNext and onError callbacks.
*/
notifyError(error) {
runtime_1.assert(!this.closed, 'stream is closed');
this._closed = error;
this.pushIt(error);
this._lis.err.forEach(l => l(error));
this._lis.nxt.forEach(l => l(undefined, error, false));
this.clearLis();
}
/**
* Closes the stream successfully. Throws if stream is closed.
*
* Triggers onNext and onComplete callbacks.
*/
notifyComplete() {
runtime_1.assert(!this.closed, 'stream is closed');
this._closed = true;
this.pushIt({ value: null, done: true });
this._lis.cmp.forEach(l => l());
this._lis.nxt.forEach(l => l(undefined, undefined, true));
this.clearLis();
}
/**
* Creates an async iterator (that can be used with `for await {...}`)
* to consume the stream.
*
* Some things to note:
* - If an error occurs, the `for await` will throw it.
* - If an error occurred before the `for await` was started, `for await`
* will re-throw it.
* - If the stream is already complete, the `for await` will be empty.
* - If your `for await` consumes slower than the stream produces,
* for example because you are relaying messages in a slow operation,
* messages are queued.
*/
[Symbol.asyncIterator]() {
// if we are closed, we are definitely not receiving any more messages.
// but we can't let the iterator get stuck. we want to either:
// a) finish the new iterator immediately, because we are completed
// b) reject the new iterator, because we errored
if (this._closed === true)
this.pushIt({ value: null, done: true });
else if (this._closed !== false)
this.pushIt(this._closed);
// the async iterator
return {
next: () => {
let state = this._itState;
runtime_1.assert(state, "bad state"); // if we don't have a state here, code is broken
// there should be no pending result.
// did the consumer call next() before we resolved our previous result promise?
runtime_1.assert(!state.p, "iterator contract broken");
// did we produce faster than the iterator consumed?
// return the oldest result from the queue.
let first = state.q.shift();
if (first)
return ("value" in first) ? Promise.resolve(first) : Promise.reject(first);
// we have no result ATM, but we promise one.
// as soon as we have a result, we must resolve promise.
state.p = new deferred_1.Deferred();
return state.p.promise;
},
};
}
// "push" a new iterator result.
// this either resolves a pending promise, or enqueues the result.
pushIt(result) {
let state = this._itState;
// is the consumer waiting for us?
if (state.p) {
// yes, consumer is waiting for this promise.
const p = state.p;
runtime_1.assert(p.state == deferred_1.DeferredState.PENDING, "iterator contract broken");
// resolve the promise
("value" in result) ? p.resolve(result) : p.reject(result);
// must cleanup, otherwise iterator.next() would pick it up again.
delete state.p;
}
else {
// we are producing faster than the iterator consumes.
// push result onto queue.
state.q.push(result);
}
}
}
exports.RpcOutputStreamController = RpcOutputStreamController;
/***/ }),
/***/ 3352:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ServerCallContextController = void 0;
class ServerCallContextController {
constructor(method, headers, deadline, sendResponseHeadersFn, defaultStatus = { code: 'OK', detail: '' }) {
this._cancelled = false;
this._listeners = [];
this.method = method;
this.headers = headers;
this.deadline = deadline;
this.trailers = {};
this._sendRH = sendResponseHeadersFn;
this.status = defaultStatus;
}
/**
* Set the call cancelled.
*
* Invokes all callbacks registered with onCancel() and
* sets `cancelled = true`.
*/
notifyCancelled() {
if (!this._cancelled) {
this._cancelled = true;
for (let l of this._listeners) {
l();
}
}
}
/**
* Send response headers.
*/
sendResponseHeaders(data) {
this._sendRH(data);
}
/**
* Is the call cancelled?
*
* When the client closes the connection before the server
* is done, the call is cancelled.
*
* If you want to cancel a request on the server, throw a
* RpcError with the CANCELLED status code.
*/
get cancelled() {
return this._cancelled;
}
/**
* Add a callback for cancellation.
*/
onCancel(callback) {
const l = this._listeners;
l.push(callback);
return () => {
let i = l.indexOf(callback);
if (i >= 0)
l.splice(i, 1);
};
}
}
exports.ServerCallContextController = ServerCallContextController;
/***/ }),
/***/ 6173:
/***/ (function(__unused_webpack_module, exports) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ServerStreamingCall = void 0;
/**
* A server streaming RPC call. The client provides exactly one input message
* but the server may respond with 0, 1, or more messages.
*/
class ServerStreamingCall {
constructor(method, requestHeaders, request, headers, response, status, trailers) {
this.method = method;
this.requestHeaders = requestHeaders;
this.request = request;
this.headers = headers;
this.responses = response;
this.status = status;
this.trailers = trailers;
}
/**
* Instead of awaiting the response status and trailers, you can
* just as well await this call itself to receive the server outcome.
* You should first setup some listeners to the `request` to
* see the actual messages the server replied with.
*/
then(onfulfilled, onrejected) {
return this.promiseFinished().then(value => onfulfilled ? Promise.resolve(onfulfilled(value)) : value, reason => onrejected ? Promise.resolve(onrejected(reason)) : Promise.reject(reason));
}
promiseFinished() {
return __awaiter(this, void 0, void 0, function* () {
let [headers, status, trailers] = yield Promise.all([this.headers, this.status, this.trailers]);
return {
method: this.method,
requestHeaders: this.requestHeaders,
request: this.request,
headers,
status,
trailers,
};
});
}
}
exports.ServerStreamingCall = ServerStreamingCall;
/***/ }),
/***/ 6892:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ServiceType = void 0;
const reflection_info_1 = __webpack_require__(2496);
class ServiceType {
constructor(typeName, methods, options) {
this.typeName = typeName;
this.methods = methods.map(i => reflection_info_1.normalizeMethodInfo(i, this));
this.options = options !== null && options !== void 0 ? options : {};
}
}
exports.ServiceType = ServiceType;
/***/ }),
/***/ 9122:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TestTransport = void 0;
const rpc_error_1 = __webpack_require__(8636);
const runtime_1 = __webpack_require__(8886);
const rpc_output_stream_1 = __webpack_require__(2726);
const rpc_options_1 = __webpack_require__(8576);
const unary_call_1 = __webpack_require__(9288);
const server_streaming_call_1 = __webpack_require__(6173);
const client_streaming_call_1 = __webpack_require__(7889);
const duplex_streaming_call_1 = __webpack_require__(6826);
/**
* Transport for testing.
*/
class TestTransport {
/**
* Initialize with mock data. Omitted fields have default value.
*/
constructor(data) {
/**
* Suppress warning / error about uncaught rejections of
* "status" and "trailers".
*/
this.suppressUncaughtRejections = true;
this.headerDelay = 10;
this.responseDelay = 50;
this.betweenResponseDelay = 10;
this.afterResponseDelay = 10;
this.data = data !== null && data !== void 0 ? data : {};
}
/**
* Sent message(s) during the last operation.
*/
get sentMessages() {
if (this.lastInput instanceof TestInputStream) {
return this.lastInput.sent;
}
else if (typeof this.lastInput == "object") {
return [this.lastInput.single];
}
return [];
}
/**
* Sending message(s) completed?
*/
get sendComplete() {
if (this.lastInput instanceof TestInputStream) {
return this.lastInput.completed;
}
else if (typeof this.lastInput == "object") {
return true;
}
return false;
}
// Creates a promise for response headers from the mock data.
promiseHeaders() {
var _a;
const headers = (_a = this.data.headers) !== null && _a !== void 0 ? _a : TestTransport.defaultHeaders;
return headers instanceof rpc_error_1.RpcError
? Promise.reject(headers)
: Promise.resolve(headers);
}
// Creates a promise for a single, valid, message from the mock data.
promiseSingleResponse(method) {
if (this.data.response instanceof rpc_error_1.RpcError) {
return Promise.reject(this.data.response);
}
let r;
if (Array.isArray(this.data.response)) {
runtime_1.assert(this.data.response.length > 0);
r = this.data.response[0];
}
else if (this.data.response !== undefined) {
r = this.data.response;
}
else {
r = method.O.create();
}
runtime_1.assert(method.O.is(r));
return Promise.resolve(r);
}
/**
* Pushes response messages from the mock data to the output stream.
* If an error response, status or trailers are mocked, the stream is
* closed with the respective error.
* Otherwise, stream is completed successfully.
*
* The returned promise resolves when the stream is closed. It should
* not reject. If it does, code is broken.
*/
streamResponses(method, stream, abort) {
return __awaiter(this, void 0, void 0, function* () {
// normalize "data.response" into an array of valid output messages
const messages = [];
if (this.data.response === undefined) {
messages.push(method.O.create());
}
else if (Array.isArray(this.data.response)) {
for (let msg of this.data.response) {
runtime_1.assert(method.O.is(msg));
messages.push(msg);
}
}
else if (!(this.data.response instanceof rpc_error_1.RpcError)) {
runtime_1.assert(method.O.is(this.data.response));
messages.push(this.data.response);
}
// start the stream with an initial delay.
// if the request is cancelled, notify() error and exit.
try {
yield delay(this.responseDelay, abort)(undefined);
}
catch (error) {
stream.notifyError(error);
return;
}
// if error response was mocked, notify() error (stream is now closed with error) and exit.
if (this.data.response instanceof rpc_error_1.RpcError) {
stream.notifyError(this.data.response);
return;
}
// regular response messages were mocked. notify() them.
for (let msg of messages) {
stream.notifyMessage(msg);
// add a short delay between responses
// if the request is cancelled, notify() error and exit.
try {
yield delay(this.betweenResponseDelay, abort)(undefined);
}
catch (error) {
stream.notifyError(error);
return;
}
}
// error status was mocked, notify() error (stream is now closed with error) and exit.
if (this.data.status instanceof rpc_error_1.RpcError) {
stream.notifyError(this.data.status);
return;
}
// error trailers were mocked, notify() error (stream is now closed with error) and exit.
if (this.data.trailers instanceof rpc_error_1.RpcError) {
stream.notifyError(this.data.trailers);
return;
}
// stream completed successfully
stream.notifyComplete();
});
}
// Creates a promise for response status from the mock data.
promiseStatus() {
var _a;
const status = (_a = this.data.status) !== null && _a !== void 0 ? _a : TestTransport.defaultStatus;
return status instanceof rpc_error_1.RpcError
? Promise.reject(status)
: Promise.resolve(status);
}
// Creates a promise for response trailers from the mock data.
promiseTrailers() {
var _a;
const trailers = (_a = this.data.trailers) !== null && _a !== void 0 ? _a : TestTransport.defaultTrailers;
return trailers instanceof rpc_error_1.RpcError
? Promise.reject(trailers)
: Promise.resolve(trailers);
}
maybeSuppressUncaught(...promise) {
if (this.suppressUncaughtRejections) {
for (let p of promise) {
p.catch(() => {
});
}
}
}
mergeOptions(options) {
return rpc_options_1.mergeRpcOptions({}, options);
}
unary(method, input, options) {
var _a;
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders()
.then(delay(this.headerDelay, options.abort)), responsePromise = headersPromise
.catch(_ => {
})
.then(delay(this.responseDelay, options.abort))
.then(_ => this.promiseSingleResponse(method)), statusPromise = responsePromise
.catch(_ => {
})
.then(delay(this.afterResponseDelay, options.abort))
.then(_ => this.promiseStatus()), trailersPromise = responsePromise
.catch(_ => {
})
.then(delay(this.afterResponseDelay, options.abort))
.then(_ => this.promiseTrailers());
this.maybeSuppressUncaught(statusPromise, trailersPromise);
this.lastInput = { single: input };
return new unary_call_1.UnaryCall(method, requestHeaders, input, headersPromise, responsePromise, statusPromise, trailersPromise);
}
serverStreaming(method, input, options) {
var _a;
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders()
.then(delay(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise
.then(delay(this.responseDelay, options.abort))
.catch(() => {
})
.then(() => this.streamResponses(method, outputStream, options.abort))
.then(delay(this.afterResponseDelay, options.abort)), statusPromise = responseStreamClosedPromise
.then(() => this.promiseStatus()), trailersPromise = responseStreamClosedPromise
.then(() => this.promiseTrailers());
this.maybeSuppressUncaught(statusPromise, trailersPromise);
this.lastInput = { single: input };
return new server_streaming_call_1.ServerStreamingCall(method, requestHeaders, input, headersPromise, outputStream, statusPromise, trailersPromise);
}
clientStreaming(method, options) {
var _a;
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders()
.then(delay(this.headerDelay, options.abort)), responsePromise = headersPromise
.catch(_ => {
})
.then(delay(this.responseDelay, options.abort))
.then(_ => this.promiseSingleResponse(method)), statusPromise = responsePromise
.catch(_ => {
})
.then(delay(this.afterResponseDelay, options.abort))
.then(_ => this.promiseStatus()), trailersPromise = responsePromise
.catch(_ => {
})
.then(delay(this.afterResponseDelay, options.abort))
.then(_ => this.promiseTrailers());
this.maybeSuppressUncaught(statusPromise, trailersPromise);
this.lastInput = new TestInputStream(this.data, options.abort);
return new client_streaming_call_1.ClientStreamingCall(method, requestHeaders, this.lastInput, headersPromise, responsePromise, statusPromise, trailersPromise);
}
duplex(method, options) {
var _a;
const requestHeaders = (_a = options.meta) !== null && _a !== void 0 ? _a : {}, headersPromise = this.promiseHeaders()
.then(delay(this.headerDelay, options.abort)), outputStream = new rpc_output_stream_1.RpcOutputStreamController(), responseStreamClosedPromise = headersPromise
.then(delay(this.responseDelay, options.abort))
.catch(() => {
})
.then(() => this.streamResponses(method, outputStream, options.abort))
.then(delay(this.afterResponseDelay, options.abort)), statusPromise = responseStreamClosedPromise
.then(() => this.promiseStatus()), trailersPromise = responseStreamClosedPromise
.then(() => this.promiseTrailers());
this.maybeSuppressUncaught(statusPromise, trailersPromise);
this.lastInput = new TestInputStream(this.data, options.abort);
return new duplex_streaming_call_1.DuplexStreamingCall(method, requestHeaders, this.lastInput, headersPromise, outputStream, statusPromise, trailersPromise);
}
}
exports.TestTransport = TestTransport;
TestTransport.defaultHeaders = {
responseHeader: "test"
};
TestTransport.defaultStatus = {
code: "OK", detail: "all good"
};
TestTransport.defaultTrailers = {
responseTrailer: "test"
};
function delay(ms, abort) {
return (v) => new Promise((resolve, reject) => {
if (abort === null || abort === void 0 ? void 0 : abort.aborted) {
reject(new rpc_error_1.RpcError("user cancel", "CANCELLED"));
}
else {
const id = setTimeout(() => resolve(v), ms);
if (abort) {
abort.addEventListener("abort", ev => {
clearTimeout(id);
reject(new rpc_error_1.RpcError("user cancel", "CANCELLED"));
});
}
}
});
}
class TestInputStream {
constructor(data, abort) {
this._completed = false;
this._sent = [];
this.data = data;
this.abort = abort;
}
get sent() {
return this._sent;
}
get completed() {
return this._completed;
}
send(message) {
if (this.data.inputMessage instanceof rpc_error_1.RpcError) {
return Promise.reject(this.data.inputMessage);
}
const delayMs = this.data.inputMessage === undefined
? 10
: this.data.inputMessage;
return Promise.resolve(undefined)
.then(() => {
this._sent.push(message);
})
.then(delay(delayMs, this.abort));
}
complete() {
if (this.data.inputComplete instanceof rpc_error_1.RpcError) {
return Promise.reject(this.data.inputComplete);
}
const delayMs = this.data.inputComplete === undefined
? 10
: this.data.inputComplete;
return Promise.resolve(undefined)
.then(() => {
this._completed = true;
})
.then(delay(delayMs, this.abort));
}
}
/***/ }),
/***/ 9288:
/***/ (function(__unused_webpack_module, exports) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.UnaryCall = void 0;
/**
* A unary RPC call. Unary means there is exactly one input message and
* exactly one output message unless an error occurred.
*/
class UnaryCall {
constructor(method, requestHeaders, request, headers, response, status, trailers) {
this.method = method;
this.requestHeaders = requestHeaders;
this.request = request;
this.headers = headers;
this.response = response;
this.status = status;
this.trailers = trailers;
}
/**
* If you are only interested in the final outcome of this call,
* you can await it to receive a `FinishedUnaryCall`.
*/
then(onfulfilled, onrejected) {
return this.promiseFinished().then(value => onfulfilled ? Promise.resolve(onfulfilled(value)) : value, reason => onrejected ? Promise.resolve(onrejected(reason)) : Promise.reject(reason));
}
promiseFinished() {
return __awaiter(this, void 0, void 0, function* () {
let [headers, response, status, trailers] = yield Promise.all([this.headers, this.response, this.status, this.trailers]);
return {
method: this.method,
requestHeaders: this.requestHeaders,
request: this.request,
headers,
response,
status,
trailers
};
});
}
}
exports.UnaryCall = UnaryCall;
/***/ }),
/***/ 8602:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.assertFloat32 = exports.assertUInt32 = exports.assertInt32 = exports.assertNever = exports.assert = void 0;
/**
* assert that condition is true or throw error (with message)
*/
function assert(condition, msg) {
if (!condition) {
throw new Error(msg);
}
}
exports.assert = assert;
/**
* assert that value cannot exist = type `never`. throw runtime error if it does.
*/
function assertNever(value, msg) {
throw new Error(msg !== null && msg !== void 0 ? msg : 'Unexpected object: ' + value);
}
exports.assertNever = assertNever;
const FLOAT32_MAX = 3.4028234663852886e+38, FLOAT32_MIN = -3.4028234663852886e+38, UINT32_MAX = 0xFFFFFFFF, INT32_MAX = 0X7FFFFFFF, INT32_MIN = -0X80000000;
function assertInt32(arg) {
if (typeof arg !== "number")
throw new Error('invalid int 32: ' + typeof arg);
if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)
throw new Error('invalid int 32: ' + arg);
}
exports.assertInt32 = assertInt32;
function assertUInt32(arg) {
if (typeof arg !== "number")
throw new Error('invalid uint 32: ' + typeof arg);
if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)
throw new Error('invalid uint 32: ' + arg);
}
exports.assertUInt32 = assertUInt32;
function assertFloat32(arg) {
if (typeof arg !== "number")
throw new Error('invalid float 32: ' + typeof arg);
if (!Number.isFinite(arg))
return;
if (arg > FLOAT32_MAX || arg < FLOAT32_MIN)
throw new Error('invalid float 32: ' + arg);
}
exports.assertFloat32 = assertFloat32;
/***/ }),
/***/ 6335:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.base64encode = exports.base64decode = void 0;
// lookup table from base64 character to byte
let encTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
// lookup table from base64 character *code* to byte because lookup by number is fast
let decTable = [];
for (let i = 0; i < encTable.length; i++)
decTable[encTable[i].charCodeAt(0)] = i;
// support base64url variants
decTable["-".charCodeAt(0)] = encTable.indexOf("+");
decTable["_".charCodeAt(0)] = encTable.indexOf("/");
/**
* Decodes a base64 string to a byte array.
*
* - ignores white-space, including line breaks and tabs
* - allows inner padding (can decode concatenated base64 strings)
* - does not require padding
* - understands base64url encoding:
* "-" instead of "+",
* "_" instead of "/",
* no padding
*/
function base64decode(base64Str) {
// estimate byte size, not accounting for inner padding and whitespace
let es = base64Str.length * 3 / 4;
// if (es % 3 !== 0)
// throw new Error('invalid base64 string');
if (base64Str[base64Str.length - 2] == '=')
es -= 2;
else if (base64Str[base64Str.length - 1] == '=')
es -= 1;
let bytes = new Uint8Array(es), bytePos = 0, // position in byte array
groupPos = 0, // position in base64 group
b, // current byte
p = 0 // previous byte
;
for (let i = 0; i < base64Str.length; i++) {
b = decTable[base64Str.charCodeAt(i)];
if (b === undefined) {
// noinspection FallThroughInSwitchStatementJS
switch (base64Str[i]) {
case '=':
groupPos = 0; // reset state when padding found
case '\n':
case '\r':
case '\t':
case ' ':
continue; // skip white-space, and padding
default:
throw Error(`invalid base64 string.`);
}
}
switch (groupPos) {
case 0:
p = b;
groupPos = 1;
break;
case 1:
bytes[bytePos++] = p << 2 | (b & 48) >> 4;
p = b;
groupPos = 2;
break;
case 2:
bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;
p = b;
groupPos = 3;
break;
case 3:
bytes[bytePos++] = (p & 3) << 6 | b;
groupPos = 0;
break;
}
}
if (groupPos == 1)
throw Error(`invalid base64 string.`);
return bytes.subarray(0, bytePos);
}
exports.base64decode = base64decode;
/**
* Encodes a byte array to a base64 string.
* Adds padding at the end.
* Does not insert newlines.
*/
function base64encode(bytes) {
let base64 = '', groupPos = 0, // position in base64 group
b, // current byte
p = 0; // carry over from previous byte
for (let i = 0; i < bytes.length; i++) {
b = bytes[i];
switch (groupPos) {
case 0:
base64 += encTable[b >> 2];
p = (b & 3) << 4;
groupPos = 1;
break;
case 1:
base64 += encTable[p | b >> 4];
p = (b & 15) << 2;
groupPos = 2;
break;
case 2:
base64 += encTable[p | b >> 6];
base64 += encTable[b & 63];
groupPos = 0;
break;
}
}
// padding required?
if (groupPos) {
base64 += encTable[p];
base64 += '=';
if (groupPos == 1)
base64 += '=';
}
return base64;
}
exports.base64encode = base64encode;
/***/ }),
/***/ 4816:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.WireType = exports.mergeBinaryOptions = exports.UnknownFieldHandler = void 0;
/**
* This handler implements the default behaviour for unknown fields.
* When reading data, unknown fields are stored on the message, in a
* symbol property.
* When writing data, the symbol property is queried and unknown fields
* are serialized into the output again.
*/
var UnknownFieldHandler;
(function (UnknownFieldHandler) {
/**
* The symbol used to store unknown fields for a message.
* The property must conform to `UnknownFieldContainer`.
*/
UnknownFieldHandler.symbol = Symbol.for("protobuf-ts/unknown");
/**
* Store an unknown field during binary read directly on the message.
* This method is compatible with `BinaryReadOptions.readUnknownField`.
*/
UnknownFieldHandler.onRead = (typeName, message, fieldNo, wireType, data) => {
let container = is(message) ? message[UnknownFieldHandler.symbol] : message[UnknownFieldHandler.symbol] = [];
container.push({ no: fieldNo, wireType, data });
};
/**
* Write unknown fields stored for the message to the writer.
* This method is compatible with `BinaryWriteOptions.writeUnknownFields`.
*/
UnknownFieldHandler.onWrite = (typeName, message, writer) => {
for (let { no, wireType, data } of UnknownFieldHandler.list(message))
writer.tag(no, wireType).raw(data);
};
/**
* List unknown fields stored for the message.
* Note that there may be multiples fields with the same number.
*/
UnknownFieldHandler.list = (message, fieldNo) => {
if (is(message)) {
let all = message[UnknownFieldHandler.symbol];
return fieldNo ? all.filter(uf => uf.no == fieldNo) : all;
}
return [];
};
/**
* Returns the last unknown field by field number.
*/
UnknownFieldHandler.last = (message, fieldNo) => UnknownFieldHandler.list(message, fieldNo).slice(-1)[0];
const is = (message) => message && Array.isArray(message[UnknownFieldHandler.symbol]);
})(UnknownFieldHandler = exports.UnknownFieldHandler || (exports.UnknownFieldHandler = {}));
/**
* Merges binary write or read options. Later values override earlier values.
*/
function mergeBinaryOptions(a, b) {
return Object.assign(Object.assign({}, a), b);
}
exports.mergeBinaryOptions = mergeBinaryOptions;
/**
* Protobuf binary format wire types.
*
* A wire type provides just enough information to find the length of the
* following value.
*
* See https://developers.google.com/protocol-buffers/docs/encoding#structure
*/
var WireType;
(function (WireType) {
/**
* Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum
*/
WireType[WireType["Varint"] = 0] = "Varint";
/**
* Used for fixed64, sfixed64, double.
* Always 8 bytes with little-endian byte order.
*/
WireType[WireType["Bit64"] = 1] = "Bit64";
/**
* Used for string, bytes, embedded messages, packed repeated fields
*
* Only repeated numeric types (types which use the varint, 32-bit,
* or 64-bit wire types) can be packed. In proto3, such fields are
* packed by default.
*/
WireType[WireType["LengthDelimited"] = 2] = "LengthDelimited";
/**
* Used for groups
* @deprecated
*/
WireType[WireType["StartGroup"] = 3] = "StartGroup";
/**
* Used for groups
* @deprecated
*/
WireType[WireType["EndGroup"] = 4] = "EndGroup";
/**
* Used for fixed32, sfixed32, float.
* Always 4 bytes with little-endian byte order.
*/
WireType[WireType["Bit32"] = 5] = "Bit32";
})(WireType = exports.WireType || (exports.WireType = {}));
/***/ }),
/***/ 2889:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.BinaryReader = exports.binaryReadOptions = void 0;
const binary_format_contract_1 = __webpack_require__(4816);
const pb_long_1 = __webpack_require__(1753);
const goog_varint_1 = __webpack_require__(3223);
const defaultsRead = {
readUnknownField: true,
readerFactory: bytes => new BinaryReader(bytes),
};
/**
* Make options for reading binary data form partial options.
*/
function binaryReadOptions(options) {
return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;
}
exports.binaryReadOptions = binaryReadOptions;
class BinaryReader {
constructor(buf, textDecoder) {
this.varint64 = goog_varint_1.varint64read; // dirty cast for `this`
/**
* Read a `uint32` field, an unsigned 32 bit varint.
*/
this.uint32 = goog_varint_1.varint32read; // dirty cast for `this` and access to protected `buf`
this.buf = buf;
this.len = buf.length;
this.pos = 0;
this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder("utf-8", {
fatal: true,
ignoreBOM: true,
});
}
/**
* Reads a tag - field number and wire type.
*/
tag() {
let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;
if (fieldNo <= 0 || wireType < 0 || wireType > 5)
throw new Error("illegal tag: field no " + fieldNo + " wire type " + wireType);
return [fieldNo, wireType];
}
/**
* Skip one element on the wire and return the skipped data.
* Supports WireType.StartGroup since v2.0.0-alpha.23.
*/
skip(wireType) {
let start = this.pos;
// noinspection FallThroughInSwitchStatementJS
switch (wireType) {
case binary_format_contract_1.WireType.Varint:
while (this.buf[this.pos++] & 0x80) {
// ignore
}
break;
case binary_format_contract_1.WireType.Bit64:
this.pos += 4;
case binary_format_contract_1.WireType.Bit32:
this.pos += 4;
break;
case binary_format_contract_1.WireType.LengthDelimited:
let len = this.uint32();
this.pos += len;
break;
case binary_format_contract_1.WireType.StartGroup:
// From descriptor.proto: Group type is deprecated, not supported in proto3.
// But we must still be able to parse and treat as unknown.
let t;
while ((t = this.tag()[1]) !== binary_format_contract_1.WireType.EndGroup) {
this.skip(t);
}
break;
default:
throw new Error("cant skip wire type " + wireType);
}
this.assertBounds();
return this.buf.subarray(start, this.pos);
}
/**
* Throws error if position in byte array is out of range.
*/
assertBounds() {
if (this.pos > this.len)
throw new RangeError("premature EOF");
}
/**
* Read a `int32` field, a signed 32 bit varint.
*/
int32() {
return this.uint32() | 0;
}
/**
* Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.
*/
sint32() {
let zze = this.uint32();
// decode zigzag
return (zze >>> 1) ^ -(zze & 1);
}
/**
* Read a `int64` field, a signed 64-bit varint.
*/
int64() {
return new pb_long_1.PbLong(...this.varint64());
}
/**
* Read a `uint64` field, an unsigned 64-bit varint.
*/
uint64() {
return new pb_long_1.PbULong(...this.varint64());
}
/**
* Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.
*/
sint64() {
let [lo, hi] = this.varint64();
// decode zig zag
let s = -(lo & 1);
lo = ((lo >>> 1 | (hi & 1) << 31) ^ s);
hi = (hi >>> 1 ^ s);
return new pb_long_1.PbLong(lo, hi);
}
/**
* Read a `bool` field, a variant.
*/
bool() {
let [lo, hi] = this.varint64();
return lo !== 0 || hi !== 0;
}
/**
* Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.
*/
fixed32() {
return this.view.getUint32((this.pos += 4) - 4, true);
}
/**
* Read a `sfixed32` field, a signed, fixed-length 32-bit integer.
*/
sfixed32() {
return this.view.getInt32((this.pos += 4) - 4, true);
}
/**
* Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.
*/
fixed64() {
return new pb_long_1.PbULong(this.sfixed32(), this.sfixed32());
}
/**
* Read a `fixed64` field, a signed, fixed-length 64-bit integer.
*/
sfixed64() {
return new pb_long_1.PbLong(this.sfixed32(), this.sfixed32());
}
/**
* Read a `float` field, 32-bit floating point number.
*/
float() {
return this.view.getFloat32((this.pos += 4) - 4, true);
}
/**
* Read a `double` field, a 64-bit floating point number.
*/
double() {
return this.view.getFloat64((this.pos += 8) - 8, true);
}
/**
* Read a `bytes` field, length-delimited arbitrary data.
*/
bytes() {
let len = this.uint32();
let start = this.pos;
this.pos += len;
this.assertBounds();
return this.buf.subarray(start, start + len);
}
/**
* Read a `string` field, length-delimited data converted to UTF-8 text.
*/
string() {
return this.textDecoder.decode(this.bytes());
}
}
exports.BinaryReader = BinaryReader;
/***/ }),
/***/ 3957:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.BinaryWriter = exports.binaryWriteOptions = void 0;
const pb_long_1 = __webpack_require__(1753);
const goog_varint_1 = __webpack_require__(3223);
const assert_1 = __webpack_require__(8602);
const defaultsWrite = {
writeUnknownFields: true,
writerFactory: () => new BinaryWriter(),
};
/**
* Make options for writing binary data form partial options.
*/
function binaryWriteOptions(options) {
return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;
}
exports.binaryWriteOptions = binaryWriteOptions;
class BinaryWriter {
constructor(textEncoder) {
/**
* Previous fork states.
*/
this.stack = [];
this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();
this.chunks = [];
this.buf = [];
}
/**
* Return all bytes written and reset this writer.
*/
finish() {
this.chunks.push(new Uint8Array(this.buf)); // flush the buffer
let len = 0;
for (let i = 0; i < this.chunks.length; i++)
len += this.chunks[i].length;
let bytes = new Uint8Array(len);
let offset = 0;
for (let i = 0; i < this.chunks.length; i++) {
bytes.set(this.chunks[i], offset);
offset += this.chunks[i].length;
}
this.chunks = [];
return bytes;
}
/**
* Start a new fork for length-delimited data like a message
* or a packed repeated field.
*
* Must be joined later with `join()`.
*/
fork() {
this.stack.push({ chunks: this.chunks, buf: this.buf });
this.chunks = [];
this.buf = [];
return this;
}
/**
* Join the last fork. Write its length and bytes, then
* return to the previous state.
*/
join() {
// get chunk of fork
let chunk = this.finish();
// restore previous state
let prev = this.stack.pop();
if (!prev)
throw new Error('invalid state, fork stack empty');
this.chunks = prev.chunks;
this.buf = prev.buf;
// write length of chunk as varint
this.uint32(chunk.byteLength);
return this.raw(chunk);
}
/**
* Writes a tag (field number and wire type).
*
* Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.
*
* Generated code should compute the tag ahead of time and call `uint32()`.
*/
tag(fieldNo, type) {
return this.uint32((fieldNo << 3 | type) >>> 0);
}
/**
* Write a chunk of raw bytes.
*/
raw(chunk) {
if (this.buf.length) {
this.chunks.push(new Uint8Array(this.buf));
this.buf = [];
}
this.chunks.push(chunk);
return this;
}
/**
* Write a `uint32` value, an unsigned 32 bit varint.
*/
uint32(value) {
assert_1.assertUInt32(value);
// write value as varint 32, inlined for speed
while (value > 0x7f) {
this.buf.push((value & 0x7f) | 0x80);
value = value >>> 7;
}
this.buf.push(value);
return this;
}
/**
* Write a `int32` value, a signed 32 bit varint.
*/
int32(value) {
assert_1.assertInt32(value);
goog_varint_1.varint32write(value, this.buf);
return this;
}
/**
* Write a `bool` value, a variant.
*/
bool(value) {
this.buf.push(value ? 1 : 0);
return this;
}
/**
* Write a `bytes` value, length-delimited arbitrary data.
*/
bytes(value) {
this.uint32(value.byteLength); // write length of chunk as varint
return this.raw(value);
}
/**
* Write a `string` value, length-delimited data converted to UTF-8 text.
*/
string(value) {
let chunk = this.textEncoder.encode(value);
this.uint32(chunk.byteLength); // write length of chunk as varint
return this.raw(chunk);
}
/**
* Write a `float` value, 32-bit floating point number.
*/
float(value) {
assert_1.assertFloat32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setFloat32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `double` value, a 64-bit floating point number.
*/
double(value) {
let chunk = new Uint8Array(8);
new DataView(chunk.buffer).setFloat64(0, value, true);
return this.raw(chunk);
}
/**
* Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.
*/
fixed32(value) {
assert_1.assertUInt32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setUint32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `sfixed32` value, a signed, fixed-length 32-bit integer.
*/
sfixed32(value) {
assert_1.assertInt32(value);
let chunk = new Uint8Array(4);
new DataView(chunk.buffer).setInt32(0, value, true);
return this.raw(chunk);
}
/**
* Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.
*/
sint32(value) {
assert_1.assertInt32(value);
// zigzag encode
value = ((value << 1) ^ (value >> 31)) >>> 0;
goog_varint_1.varint32write(value, this.buf);
return this;
}
/**
* Write a `fixed64` value, a signed, fixed-length 64-bit integer.
*/
sfixed64(value) {
let chunk = new Uint8Array(8);
let view = new DataView(chunk.buffer);
let long = pb_long_1.PbLong.from(value);
view.setInt32(0, long.lo, true);
view.setInt32(4, long.hi, true);
return this.raw(chunk);
}
/**
* Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.
*/
fixed64(value) {
let chunk = new Uint8Array(8);
let view = new DataView(chunk.buffer);
let long = pb_long_1.PbULong.from(value);
view.setInt32(0, long.lo, true);
view.setInt32(4, long.hi, true);
return this.raw(chunk);
}
/**
* Write a `int64` value, a signed 64-bit varint.
*/
int64(value) {
let long = pb_long_1.PbLong.from(value);
goog_varint_1.varint64write(long.lo, long.hi, this.buf);
return this;
}
/**
* Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.
*/
sint64(value) {
let long = pb_long_1.PbLong.from(value),
// zigzag encode
sign = long.hi >> 31, lo = (long.lo << 1) ^ sign, hi = ((long.hi << 1) | (long.lo >>> 31)) ^ sign;
goog_varint_1.varint64write(lo, hi, this.buf);
return this;
}
/**
* Write a `uint64` value, an unsigned 64-bit varint.
*/
uint64(value) {
let long = pb_long_1.PbULong.from(value);
goog_varint_1.varint64write(long.lo, long.hi, this.buf);
return this;
}
}
exports.BinaryWriter = BinaryWriter;
/***/ }),
/***/ 257:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.listEnumNumbers = exports.listEnumNames = exports.listEnumValues = exports.isEnumObject = void 0;
/**
* Is this a lookup object generated by Typescript, for a Typescript enum
* generated by protobuf-ts?
*
* - No `const enum` (enum must not be inlined, we need reverse mapping).
* - No string enum (we need int32 for protobuf).
* - Must have a value for 0 (otherwise, we would need to support custom default values).
*/
function isEnumObject(arg) {
if (typeof arg != 'object' || arg === null) {
return false;
}
if (!arg.hasOwnProperty(0)) {
return false;
}
for (let k of Object.keys(arg)) {
let num = parseInt(k);
if (!Number.isNaN(num)) {
// is there a name for the number?
let nam = arg[num];
if (nam === undefined)
return false;
// does the name resolve back to the number?
if (arg[nam] !== num)
return false;
}
else {
// is there a number for the name?
let num = arg[k];
if (num === undefined)
return false;
// is it a string enum?
if (typeof num !== 'number')
return false;
// do we know the number?
if (arg[num] === undefined)
return false;
}
}
return true;
}
exports.isEnumObject = isEnumObject;
/**
* Lists all values of a Typescript enum, as an array of objects with a "name"
* property and a "number" property.
*
* Note that it is possible that a number appears more than once, because it is
* possible to have aliases in an enum.
*
* Throws if the enum does not adhere to the rules of enums generated by
* protobuf-ts. See `isEnumObject()`.
*/
function listEnumValues(enumObject) {
if (!isEnumObject(enumObject))
throw new Error("not a typescript enum object");
let values = [];
for (let [name, number] of Object.entries(enumObject))
if (typeof number == "number")
values.push({ name, number });
return values;
}
exports.listEnumValues = listEnumValues;
/**
* Lists the names of a Typescript enum.
*
* Throws if the enum does not adhere to the rules of enums generated by
* protobuf-ts. See `isEnumObject()`.
*/
function listEnumNames(enumObject) {
return listEnumValues(enumObject).map(val => val.name);
}
exports.listEnumNames = listEnumNames;
/**
* Lists the numbers of a Typescript enum.
*
* Throws if the enum does not adhere to the rules of enums generated by
* protobuf-ts. See `isEnumObject()`.
*/
function listEnumNumbers(enumObject) {
return listEnumValues(enumObject)
.map(val => val.number)
.filter((num, index, arr) => arr.indexOf(num) == index);
}
exports.listEnumNumbers = listEnumNumbers;
/***/ }),
/***/ 3223:
/***/ ((__unused_webpack_module, exports) => {
// Copyright 2008 Google Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Code generated by the Protocol Buffer compiler is owned by the owner
// of the input file used when generating it. This code is not
// standalone and requires a support library to be linked with it. This
// support library is itself covered by the above license.
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.varint32read = exports.varint32write = exports.int64toString = exports.int64fromString = exports.varint64write = exports.varint64read = void 0;
/**
* Read a 64 bit varint as two JS numbers.
*
* Returns tuple:
* [0]: low bits
* [0]: high bits
*
* Copyright 2008 Google Inc. All rights reserved.
*
* See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175
*/
function varint64read() {
let lowBits = 0;
let highBits = 0;
for (let shift = 0; shift < 28; shift += 7) {
let b = this.buf[this.pos++];
lowBits |= (b & 0x7F) << shift;
if ((b & 0x80) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
}
let middleByte = this.buf[this.pos++];
// last four bits of the first 32 bit number
lowBits |= (middleByte & 0x0F) << 28;
// 3 upper bits are part of the next 32 bit number
highBits = (middleByte & 0x70) >> 4;
if ((middleByte & 0x80) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
for (let shift = 3; shift <= 31; shift += 7) {
let b = this.buf[this.pos++];
highBits |= (b & 0x7F) << shift;
if ((b & 0x80) == 0) {
this.assertBounds();
return [lowBits, highBits];
}
}
throw new Error('invalid varint');
}
exports.varint64read = varint64read;
/**
* Write a 64 bit varint, given as two JS numbers, to the given bytes array.
*
* Copyright 2008 Google Inc. All rights reserved.
*
* See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344
*/
function varint64write(lo, hi, bytes) {
for (let i = 0; i < 28; i = i + 7) {
const shift = lo >>> i;
const hasNext = !((shift >>> 7) == 0 && hi == 0);
const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;
bytes.push(byte);
if (!hasNext) {
return;
}
}
const splitBits = ((lo >>> 28) & 0x0F) | ((hi & 0x07) << 4);
const hasMoreBits = !((hi >> 3) == 0);
bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xFF);
if (!hasMoreBits) {
return;
}
for (let i = 3; i < 31; i = i + 7) {
const shift = hi >>> i;
const hasNext = !((shift >>> 7) == 0);
const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;
bytes.push(byte);
if (!hasNext) {
return;
}
}
bytes.push((hi >>> 31) & 0x01);
}
exports.varint64write = varint64write;
// constants for binary math
const TWO_PWR_32_DBL = (1 << 16) * (1 << 16);
/**
* Parse decimal string of 64 bit integer value as two JS numbers.
*
* Returns tuple:
* [0]: minus sign?
* [1]: low bits
* [2]: high bits
*
* Copyright 2008 Google Inc.
*/
function int64fromString(dec) {
// Check for minus sign.
let minus = dec[0] == '-';
if (minus)
dec = dec.slice(1);
// Work 6 decimal digits at a time, acting like we're converting base 1e6
// digits to binary. This is safe to do with floating point math because
// Number.isSafeInteger(ALL_32_BITS * 1e6) == true.
const base = 1e6;
let lowBits = 0;
let highBits = 0;
function add1e6digit(begin, end) {
// Note: Number('') is 0.
const digit1e6 = Number(dec.slice(begin, end));
highBits *= base;
lowBits = lowBits * base + digit1e6;
// Carry bits from lowBits to highBits
if (lowBits >= TWO_PWR_32_DBL) {
highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);
lowBits = lowBits % TWO_PWR_32_DBL;
}
}
add1e6digit(-24, -18);
add1e6digit(-18, -12);
add1e6digit(-12, -6);
add1e6digit(-6);
return [minus, lowBits, highBits];
}
exports.int64fromString = int64fromString;
/**
* Format 64 bit integer value (as two JS numbers) to decimal string.
*
* Copyright 2008 Google Inc.
*/
function int64toString(bitsLow, bitsHigh) {
// Skip the expensive conversion if the number is small enough to use the
// built-in conversions.
if ((bitsHigh >>> 0) <= 0x1FFFFF) {
return '' + (TWO_PWR_32_DBL * bitsHigh + (bitsLow >>> 0));
}
// What this code is doing is essentially converting the input number from
// base-2 to base-1e7, which allows us to represent the 64-bit range with
// only 3 (very large) digits. Those digits are then trivial to convert to
// a base-10 string.
// The magic numbers used here are -
// 2^24 = 16777216 = (1,6777216) in base-1e7.
// 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.
// Split 32:32 representation into 16:24:24 representation so our
// intermediate digits don't overflow.
let low = bitsLow & 0xFFFFFF;
let mid = (((bitsLow >>> 24) | (bitsHigh << 8)) >>> 0) & 0xFFFFFF;
let high = (bitsHigh >> 16) & 0xFFFF;
// Assemble our three base-1e7 digits, ignoring carries. The maximum
// value in a digit at this step is representable as a 48-bit integer, which
// can be stored in a 64-bit floating point number.
let digitA = low + (mid * 6777216) + (high * 6710656);
let digitB = mid + (high * 8147497);
let digitC = (high * 2);
// Apply carries from A to B and from B to C.
let base = 10000000;
if (digitA >= base) {
digitB += Math.floor(digitA / base);
digitA %= base;
}
if (digitB >= base) {
digitC += Math.floor(digitB / base);
digitB %= base;
}
// Convert base-1e7 digits to base-10, with optional leading zeroes.
function decimalFrom1e7(digit1e7, needLeadingZeros) {
let partial = digit1e7 ? String(digit1e7) : '';
if (needLeadingZeros) {
return '0000000'.slice(partial.length) + partial;
}
return partial;
}
return decimalFrom1e7(digitC, /*needLeadingZeros=*/ 0) +
decimalFrom1e7(digitB, /*needLeadingZeros=*/ digitC) +
// If the final 1e7 digit didn't need leading zeros, we would have
// returned via the trivial code path at the top.
decimalFrom1e7(digitA, /*needLeadingZeros=*/ 1);
}
exports.int64toString = int64toString;
/**
* Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`
*
* Copyright 2008 Google Inc. All rights reserved.
*
* See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144
*/
function varint32write(value, bytes) {
if (value >= 0) {
// write value as varint 32
while (value > 0x7f) {
bytes.push((value & 0x7f) | 0x80);
value = value >>> 7;
}
bytes.push(value);
}
else {
for (let i = 0; i < 9; i++) {
bytes.push(value & 127 | 128);
value = value >> 7;
}
bytes.push(1);
}
}
exports.varint32write = varint32write;
/**
* Read an unsigned 32 bit varint.
*
* See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220
*/
function varint32read() {
let b = this.buf[this.pos++];
let result = b & 0x7F;
if ((b & 0x80) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 0x7F) << 7;
if ((b & 0x80) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 0x7F) << 14;
if ((b & 0x80) == 0) {
this.assertBounds();
return result;
}
b = this.buf[this.pos++];
result |= (b & 0x7F) << 21;
if ((b & 0x80) == 0) {
this.assertBounds();
return result;
}
// Extract only last 4 bits
b = this.buf[this.pos++];
result |= (b & 0x0F) << 28;
for (let readBytes = 5; ((b & 0x80) !== 0) && readBytes < 10; readBytes++)
b = this.buf[this.pos++];
if ((b & 0x80) != 0)
throw new Error('invalid varint');
this.assertBounds();
// Result can have 32 bits, convert it to unsigned
return result >>> 0;
}
exports.varint32read = varint32read;
/***/ }),
/***/ 8886:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
// Public API of the protobuf-ts runtime.
// Note: we do not use `export * from ...` to help tree shakers,
// webpack verbose output hints that this should be useful
Object.defineProperty(exports, "__esModule", ({ value: true }));
// Convenience JSON typings and corresponding type guards
var json_typings_1 = __webpack_require__(9999);
Object.defineProperty(exports, "typeofJsonValue", ({ enumerable: true, get: function () { return json_typings_1.typeofJsonValue; } }));
Object.defineProperty(exports, "isJsonObject", ({ enumerable: true, get: function () { return json_typings_1.isJsonObject; } }));
// Base 64 encoding
var base64_1 = __webpack_require__(6335);
Object.defineProperty(exports, "base64decode", ({ enumerable: true, get: function () { return base64_1.base64decode; } }));
Object.defineProperty(exports, "base64encode", ({ enumerable: true, get: function () { return base64_1.base64encode; } }));
// UTF8 encoding
var protobufjs_utf8_1 = __webpack_require__(8950);
Object.defineProperty(exports, "utf8read", ({ enumerable: true, get: function () { return protobufjs_utf8_1.utf8read; } }));
// Binary format contracts, options for reading and writing, for example
var binary_format_contract_1 = __webpack_require__(4816);
Object.defineProperty(exports, "WireType", ({ enumerable: true, get: function () { return binary_format_contract_1.WireType; } }));
Object.defineProperty(exports, "mergeBinaryOptions", ({ enumerable: true, get: function () { return binary_format_contract_1.mergeBinaryOptions; } }));
Object.defineProperty(exports, "UnknownFieldHandler", ({ enumerable: true, get: function () { return binary_format_contract_1.UnknownFieldHandler; } }));
// Standard IBinaryReader implementation
var binary_reader_1 = __webpack_require__(2889);
Object.defineProperty(exports, "BinaryReader", ({ enumerable: true, get: function () { return binary_reader_1.BinaryReader; } }));
Object.defineProperty(exports, "binaryReadOptions", ({ enumerable: true, get: function () { return binary_reader_1.binaryReadOptions; } }));
// Standard IBinaryWriter implementation
var binary_writer_1 = __webpack_require__(3957);
Object.defineProperty(exports, "BinaryWriter", ({ enumerable: true, get: function () { return binary_writer_1.BinaryWriter; } }));
Object.defineProperty(exports, "binaryWriteOptions", ({ enumerable: true, get: function () { return binary_writer_1.binaryWriteOptions; } }));
// Int64 and UInt64 implementations required for the binary format
var pb_long_1 = __webpack_require__(1753);
Object.defineProperty(exports, "PbLong", ({ enumerable: true, get: function () { return pb_long_1.PbLong; } }));
Object.defineProperty(exports, "PbULong", ({ enumerable: true, get: function () { return pb_long_1.PbULong; } }));
// JSON format contracts, options for reading and writing, for example
var json_format_contract_1 = __webpack_require__(9367);
Object.defineProperty(exports, "jsonReadOptions", ({ enumerable: true, get: function () { return json_format_contract_1.jsonReadOptions; } }));
Object.defineProperty(exports, "jsonWriteOptions", ({ enumerable: true, get: function () { return json_format_contract_1.jsonWriteOptions; } }));
Object.defineProperty(exports, "mergeJsonOptions", ({ enumerable: true, get: function () { return json_format_contract_1.mergeJsonOptions; } }));
// Message type contract
var message_type_contract_1 = __webpack_require__(3785);
Object.defineProperty(exports, "MESSAGE_TYPE", ({ enumerable: true, get: function () { return message_type_contract_1.MESSAGE_TYPE; } }));
// Message type implementation via reflection
var message_type_1 = __webpack_require__(5106);
Object.defineProperty(exports, "MessageType", ({ enumerable: true, get: function () { return message_type_1.MessageType; } }));
// Reflection info, generated by the plugin, exposed to the user, used by reflection ops
var reflection_info_1 = __webpack_require__(7910);
Object.defineProperty(exports, "ScalarType", ({ enumerable: true, get: function () { return reflection_info_1.ScalarType; } }));
Object.defineProperty(exports, "LongType", ({ enumerable: true, get: function () { return reflection_info_1.LongType; } }));
Object.defineProperty(exports, "RepeatType", ({ enumerable: true, get: function () { return reflection_info_1.RepeatType; } }));
Object.defineProperty(exports, "normalizeFieldInfo", ({ enumerable: true, get: function () { return reflection_info_1.normalizeFieldInfo; } }));
Object.defineProperty(exports, "readFieldOptions", ({ enumerable: true, get: function () { return reflection_info_1.readFieldOptions; } }));
Object.defineProperty(exports, "readFieldOption", ({ enumerable: true, get: function () { return reflection_info_1.readFieldOption; } }));
Object.defineProperty(exports, "readMessageOption", ({ enumerable: true, get: function () { return reflection_info_1.readMessageOption; } }));
// Message operations via reflection
var reflection_type_check_1 = __webpack_require__(5167);
Object.defineProperty(exports, "ReflectionTypeCheck", ({ enumerable: true, get: function () { return reflection_type_check_1.ReflectionTypeCheck; } }));
var reflection_create_1 = __webpack_require__(5726);
Object.defineProperty(exports, "reflectionCreate", ({ enumerable: true, get: function () { return reflection_create_1.reflectionCreate; } }));
var reflection_scalar_default_1 = __webpack_require__(9526);
Object.defineProperty(exports, "reflectionScalarDefault", ({ enumerable: true, get: function () { return reflection_scalar_default_1.reflectionScalarDefault; } }));
var reflection_merge_partial_1 = __webpack_require__(8044);
Object.defineProperty(exports, "reflectionMergePartial", ({ enumerable: true, get: function () { return reflection_merge_partial_1.reflectionMergePartial; } }));
var reflection_equals_1 = __webpack_require__(4827);
Object.defineProperty(exports, "reflectionEquals", ({ enumerable: true, get: function () { return reflection_equals_1.reflectionEquals; } }));
var reflection_binary_reader_1 = __webpack_require__(9611);
Object.defineProperty(exports, "ReflectionBinaryReader", ({ enumerable: true, get: function () { return reflection_binary_reader_1.ReflectionBinaryReader; } }));
var reflection_binary_writer_1 = __webpack_require__(6907);
Object.defineProperty(exports, "ReflectionBinaryWriter", ({ enumerable: true, get: function () { return reflection_binary_writer_1.ReflectionBinaryWriter; } }));
var reflection_json_reader_1 = __webpack_require__(6790);
Object.defineProperty(exports, "ReflectionJsonReader", ({ enumerable: true, get: function () { return reflection_json_reader_1.ReflectionJsonReader; } }));
var reflection_json_writer_1 = __webpack_require__(1094);
Object.defineProperty(exports, "ReflectionJsonWriter", ({ enumerable: true, get: function () { return reflection_json_writer_1.ReflectionJsonWriter; } }));
var reflection_contains_message_type_1 = __webpack_require__(9946);
Object.defineProperty(exports, "containsMessageType", ({ enumerable: true, get: function () { return reflection_contains_message_type_1.containsMessageType; } }));
// Oneof helpers
var oneof_1 = __webpack_require__(8063);
Object.defineProperty(exports, "isOneofGroup", ({ enumerable: true, get: function () { return oneof_1.isOneofGroup; } }));
Object.defineProperty(exports, "setOneofValue", ({ enumerable: true, get: function () { return oneof_1.setOneofValue; } }));
Object.defineProperty(exports, "getOneofValue", ({ enumerable: true, get: function () { return oneof_1.getOneofValue; } }));
Object.defineProperty(exports, "clearOneofValue", ({ enumerable: true, get: function () { return oneof_1.clearOneofValue; } }));
Object.defineProperty(exports, "getSelectedOneofValue", ({ enumerable: true, get: function () { return oneof_1.getSelectedOneofValue; } }));
// Enum object type guard and reflection util, may be interesting to the user.
var enum_object_1 = __webpack_require__(257);
Object.defineProperty(exports, "listEnumValues", ({ enumerable: true, get: function () { return enum_object_1.listEnumValues; } }));
Object.defineProperty(exports, "listEnumNames", ({ enumerable: true, get: function () { return enum_object_1.listEnumNames; } }));
Object.defineProperty(exports, "listEnumNumbers", ({ enumerable: true, get: function () { return enum_object_1.listEnumNumbers; } }));
Object.defineProperty(exports, "isEnumObject", ({ enumerable: true, get: function () { return enum_object_1.isEnumObject; } }));
// lowerCamelCase() is exported for plugin, rpc-runtime and other rpc packages
var lower_camel_case_1 = __webpack_require__(4073);
Object.defineProperty(exports, "lowerCamelCase", ({ enumerable: true, get: function () { return lower_camel_case_1.lowerCamelCase; } }));
// assertion functions are exported for plugin, may also be useful to user
var assert_1 = __webpack_require__(8602);
Object.defineProperty(exports, "assert", ({ enumerable: true, get: function () { return assert_1.assert; } }));
Object.defineProperty(exports, "assertNever", ({ enumerable: true, get: function () { return assert_1.assertNever; } }));
Object.defineProperty(exports, "assertInt32", ({ enumerable: true, get: function () { return assert_1.assertInt32; } }));
Object.defineProperty(exports, "assertUInt32", ({ enumerable: true, get: function () { return assert_1.assertUInt32; } }));
Object.defineProperty(exports, "assertFloat32", ({ enumerable: true, get: function () { return assert_1.assertFloat32; } }));
/***/ }),
/***/ 9367:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.mergeJsonOptions = exports.jsonWriteOptions = exports.jsonReadOptions = void 0;
const defaultsWrite = {
emitDefaultValues: false,
enumAsInteger: false,
useProtoFieldName: false,
prettySpaces: 0,
}, defaultsRead = {
ignoreUnknownFields: false,
};
/**
* Make options for reading JSON data from partial options.
*/
function jsonReadOptions(options) {
return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;
}
exports.jsonReadOptions = jsonReadOptions;
/**
* Make options for writing JSON data from partial options.
*/
function jsonWriteOptions(options) {
return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;
}
exports.jsonWriteOptions = jsonWriteOptions;
/**
* Merges JSON write or read options. Later values override earlier values. Type registries are merged.
*/
function mergeJsonOptions(a, b) {
var _a, _b;
let c = Object.assign(Object.assign({}, a), b);
c.typeRegistry = [...((_a = a === null || a === void 0 ? void 0 : a.typeRegistry) !== null && _a !== void 0 ? _a : []), ...((_b = b === null || b === void 0 ? void 0 : b.typeRegistry) !== null && _b !== void 0 ? _b : [])];
return c;
}
exports.mergeJsonOptions = mergeJsonOptions;
/***/ }),
/***/ 9999:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.isJsonObject = exports.typeofJsonValue = void 0;
/**
* Get the type of a JSON value.
* Distinguishes between array, null and object.
*/
function typeofJsonValue(value) {
let t = typeof value;
if (t == "object") {
if (Array.isArray(value))
return "array";
if (value === null)
return "null";
}
return t;
}
exports.typeofJsonValue = typeofJsonValue;
/**
* Is this a JSON object (instead of an array or null)?
*/
function isJsonObject(value) {
return value !== null && typeof value == "object" && !Array.isArray(value);
}
exports.isJsonObject = isJsonObject;
/***/ }),
/***/ 4073:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.lowerCamelCase = void 0;
/**
* Converts snake_case to lowerCamelCase.
*
* Should behave like protoc:
* https://github.com/protocolbuffers/protobuf/blob/e8ae137c96444ea313485ed1118c5e43b2099cf1/src/google/protobuf/compiler/java/java_helpers.cc#L118
*/
function lowerCamelCase(snakeCase) {
let capNext = false;
const sb = [];
for (let i = 0; i < snakeCase.length; i++) {
let next = snakeCase.charAt(i);
if (next == '_') {
capNext = true;
}
else if (/\d/.test(next)) {
sb.push(next);
capNext = true;
}
else if (capNext) {
sb.push(next.toUpperCase());
capNext = false;
}
else if (i == 0) {
sb.push(next.toLowerCase());
}
else {
sb.push(next);
}
}
return sb.join('');
}
exports.lowerCamelCase = lowerCamelCase;
/***/ }),
/***/ 3785:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.MESSAGE_TYPE = void 0;
/**
* The symbol used as a key on message objects to store the message type.
*
* Note that this is an experimental feature - it is here to stay, but
* implementation details may change without notice.
*/
exports.MESSAGE_TYPE = Symbol.for("protobuf-ts/message-type");
/***/ }),
/***/ 5106:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.MessageType = void 0;
const message_type_contract_1 = __webpack_require__(3785);
const reflection_info_1 = __webpack_require__(7910);
const reflection_type_check_1 = __webpack_require__(5167);
const reflection_json_reader_1 = __webpack_require__(6790);
const reflection_json_writer_1 = __webpack_require__(1094);
const reflection_binary_reader_1 = __webpack_require__(9611);
const reflection_binary_writer_1 = __webpack_require__(6907);
const reflection_create_1 = __webpack_require__(5726);
const reflection_merge_partial_1 = __webpack_require__(8044);
const json_typings_1 = __webpack_require__(9999);
const json_format_contract_1 = __webpack_require__(9367);
const reflection_equals_1 = __webpack_require__(4827);
const binary_writer_1 = __webpack_require__(3957);
const binary_reader_1 = __webpack_require__(2889);
const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));
const messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {};
/**
* This standard message type provides reflection-based
* operations to work with a message.
*/
class MessageType {
constructor(name, fields, options) {
this.defaultCheckDepth = 16;
this.typeName = name;
this.fields = fields.map(reflection_info_1.normalizeFieldInfo);
this.options = options !== null && options !== void 0 ? options : {};
messageTypeDescriptor.value = this;
this.messagePrototype = Object.create(null, baseDescriptors);
this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this);
this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this);
this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this);
this.refBinReader = new reflection_binary_reader_1.ReflectionBinaryReader(this);
this.refBinWriter = new reflection_binary_writer_1.ReflectionBinaryWriter(this);
}
create(value) {
let message = reflection_create_1.reflectionCreate(this);
if (value !== undefined) {
reflection_merge_partial_1.reflectionMergePartial(this, message, value);
}
return message;
}
/**
* Clone the message.
*
* Unknown fields are discarded.
*/
clone(message) {
let copy = this.create();
reflection_merge_partial_1.reflectionMergePartial(this, copy, message);
return copy;
}
/**
* Determines whether two message of the same type have the same field values.
* Checks for deep equality, traversing repeated fields, oneof groups, maps
* and messages recursively.
* Will also return true if both messages are `undefined`.
*/
equals(a, b) {
return reflection_equals_1.reflectionEquals(this, a, b);
}
/**
* Is the given value assignable to our message type
* and contains no [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?
*/
is(arg, depth = this.defaultCheckDepth) {
return this.refTypeCheck.is(arg, depth, false);
}
/**
* Is the given value assignable to our message type,
* regardless of [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?
*/
isAssignable(arg, depth = this.defaultCheckDepth) {
return this.refTypeCheck.is(arg, depth, true);
}
/**
* Copy partial data into the target message.
*/
mergePartial(target, source) {
reflection_merge_partial_1.reflectionMergePartial(this, target, source);
}
/**
* Create a new message from binary format.
*/
fromBinary(data, options) {
let opt = binary_reader_1.binaryReadOptions(options);
return this.internalBinaryRead(opt.readerFactory(data), data.byteLength, opt);
}
/**
* Read a new message from a JSON value.
*/
fromJson(json, options) {
return this.internalJsonRead(json, json_format_contract_1.jsonReadOptions(options));
}
/**
* Read a new message from a JSON string.
* This is equivalent to `T.fromJson(JSON.parse(json))`.
*/
fromJsonString(json, options) {
let value = JSON.parse(json);
return this.fromJson(value, options);
}
/**
* Write the message to canonical JSON value.
*/
toJson(message, options) {
return this.internalJsonWrite(message, json_format_contract_1.jsonWriteOptions(options));
}
/**
* Convert the message to canonical JSON string.
* This is equivalent to `JSON.stringify(T.toJson(t))`
*/
toJsonString(message, options) {
var _a;
let value = this.toJson(message, options);
return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);
}
/**
* Write the message to binary format.
*/
toBinary(message, options) {
let opt = binary_writer_1.binaryWriteOptions(options);
return this.internalBinaryWrite(message, opt.writerFactory(), opt).finish();
}
/**
* This is an internal method. If you just want to read a message from
* JSON, use `fromJson()` or `fromJsonString()`.
*
* Reads JSON value and merges the fields into the target
* according to protobuf rules. If the target is omitted,
* a new instance is created first.
*/
internalJsonRead(json, options, target) {
if (json !== null && typeof json == "object" && !Array.isArray(json)) {
let message = target !== null && target !== void 0 ? target : this.create();
this.refJsonReader.read(json, message, options);
return message;
}
throw new Error(`Unable to parse message ${this.typeName} from JSON ${json_typings_1.typeofJsonValue(json)}.`);
}
/**
* This is an internal method. If you just want to write a message
* to JSON, use `toJson()` or `toJsonString().
*
* Writes JSON value and returns it.
*/
internalJsonWrite(message, options) {
return this.refJsonWriter.write(message, options);
}
/**
* This is an internal method. If you just want to write a message
* in binary format, use `toBinary()`.
*
* Serializes the message in binary format and appends it to the given
* writer. Returns passed writer.
*/
internalBinaryWrite(message, writer, options) {
this.refBinWriter.write(message, writer, options);
return writer;
}
/**
* This is an internal method. If you just want to read a message from
* binary data, use `fromBinary()`.
*
* Reads data from binary format and merges the fields into
* the target according to protobuf rules. If the target is
* omitted, a new instance is created first.
*/
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create();
this.refBinReader.read(reader, message, options, length);
return message;
}
}
exports.MessageType = MessageType;
/***/ }),
/***/ 8063:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getSelectedOneofValue = exports.clearOneofValue = exports.setUnknownOneofValue = exports.setOneofValue = exports.getOneofValue = exports.isOneofGroup = void 0;
/**
* Is the given value a valid oneof group?
*
* We represent protobuf `oneof` as algebraic data types (ADT) in generated
* code. But when working with messages of unknown type, the ADT does not
* help us.
*
* This type guard checks if the given object adheres to the ADT rules, which
* are as follows:
*
* 1) Must be an object.
*
* 2) Must have a "oneofKind" discriminator property.
*
* 3) If "oneofKind" is `undefined`, no member field is selected. The object
* must not have any other properties.
*
* 4) If "oneofKind" is a `string`, the member field with this name is
* selected.
*
* 5) If a member field is selected, the object must have a second property
* with this name. The property must not be `undefined`.
*
* 6) No extra properties are allowed. The object has either one property
* (no selection) or two properties (selection).
*
*/
function isOneofGroup(any) {
if (typeof any != 'object' || any === null || !any.hasOwnProperty('oneofKind')) {
return false;
}
switch (typeof any.oneofKind) {
case "string":
if (any[any.oneofKind] === undefined)
return false;
return Object.keys(any).length == 2;
case "undefined":
return Object.keys(any).length == 1;
default:
return false;
}
}
exports.isOneofGroup = isOneofGroup;
/**
* Returns the value of the given field in a oneof group.
*/
function getOneofValue(oneof, kind) {
return oneof[kind];
}
exports.getOneofValue = getOneofValue;
function setOneofValue(oneof, kind, value) {
if (oneof.oneofKind !== undefined) {
delete oneof[oneof.oneofKind];
}
oneof.oneofKind = kind;
if (value !== undefined) {
oneof[kind] = value;
}
}
exports.setOneofValue = setOneofValue;
function setUnknownOneofValue(oneof, kind, value) {
if (oneof.oneofKind !== undefined) {
delete oneof[oneof.oneofKind];
}
oneof.oneofKind = kind;
if (value !== undefined && kind !== undefined) {
oneof[kind] = value;
}
}
exports.setUnknownOneofValue = setUnknownOneofValue;
/**
* Removes the selected field in a oneof group.
*
* Note that the recommended way to modify a oneof group is to set
* a new object:
*
* ```ts
* message.result = { oneofKind: undefined };
* ```
*/
function clearOneofValue(oneof) {
if (oneof.oneofKind !== undefined) {
delete oneof[oneof.oneofKind];
}
oneof.oneofKind = undefined;
}
exports.clearOneofValue = clearOneofValue;
/**
* Returns the selected value of the given oneof group.
*
* Not that the recommended way to access a oneof group is to check
* the "oneofKind" property and let TypeScript narrow down the union
* type for you:
*
* ```ts
* if (message.result.oneofKind === "error") {
* message.result.error; // string
* }
* ```
*
* In the rare case you just need the value, and do not care about
* which protobuf field is selected, you can use this function
* for convenience.
*/
function getSelectedOneofValue(oneof) {
if (oneof.oneofKind === undefined) {
return undefined;
}
return oneof[oneof.oneofKind];
}
exports.getSelectedOneofValue = getSelectedOneofValue;
/***/ }),
/***/ 1753:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.PbLong = exports.PbULong = exports.detectBi = void 0;
const goog_varint_1 = __webpack_require__(3223);
let BI;
function detectBi() {
const dv = new DataView(new ArrayBuffer(8));
const ok = globalThis.BigInt !== undefined
&& typeof dv.getBigInt64 === "function"
&& typeof dv.getBigUint64 === "function"
&& typeof dv.setBigInt64 === "function"
&& typeof dv.setBigUint64 === "function";
BI = ok ? {
MIN: BigInt("-9223372036854775808"),
MAX: BigInt("9223372036854775807"),
UMIN: BigInt("0"),
UMAX: BigInt("18446744073709551615"),
C: BigInt,
V: dv,
} : undefined;
}
exports.detectBi = detectBi;
detectBi();
function assertBi(bi) {
if (!bi)
throw new Error("BigInt unavailable, see https://github.com/timostamm/protobuf-ts/blob/v1.0.8/MANUAL.md#bigint-support");
}
// used to validate from(string) input (when bigint is unavailable)
const RE_DECIMAL_STR = /^-?[0-9]+$/;
// constants for binary math
const TWO_PWR_32_DBL = 0x100000000;
const HALF_2_PWR_32 = 0x080000000;
// base class for PbLong and PbULong provides shared code
class SharedPbLong {
/**
* Create a new instance with the given bits.
*/
constructor(lo, hi) {
this.lo = lo | 0;
this.hi = hi | 0;
}
/**
* Is this instance equal to 0?
*/
isZero() {
return this.lo == 0 && this.hi == 0;
}
/**
* Convert to a native number.
*/
toNumber() {
let result = this.hi * TWO_PWR_32_DBL + (this.lo >>> 0);
if (!Number.isSafeInteger(result))
throw new Error("cannot convert to safe number");
return result;
}
}
/**
* 64-bit unsigned integer as two 32-bit values.
* Converts between `string`, `number` and `bigint` representations.
*/
class PbULong extends SharedPbLong {
/**
* Create instance from a `string`, `number` or `bigint`.
*/
static from(value) {
if (BI)
// noinspection FallThroughInSwitchStatementJS
switch (typeof value) {
case "string":
if (value == "0")
return this.ZERO;
if (value == "")
throw new Error('string is no integer');
value = BI.C(value);
case "number":
if (value === 0)
return this.ZERO;
value = BI.C(value);
case "bigint":
if (!value)
return this.ZERO;
if (value < BI.UMIN)
throw new Error('signed value for ulong');
if (value > BI.UMAX)
throw new Error('ulong too large');
BI.V.setBigUint64(0, value, true);
return new PbULong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));
}
else
switch (typeof value) {
case "string":
if (value == "0")
return this.ZERO;
value = value.trim();
if (!RE_DECIMAL_STR.test(value))
throw new Error('string is no integer');
let [minus, lo, hi] = goog_varint_1.int64fromString(value);
if (minus)
throw new Error('signed value for ulong');
return new PbULong(lo, hi);
case "number":
if (value == 0)
return this.ZERO;
if (!Number.isSafeInteger(value))
throw new Error('number is no integer');
if (value < 0)
throw new Error('signed value for ulong');
return new PbULong(value, value / TWO_PWR_32_DBL);
}
throw new Error('unknown value ' + typeof value);
}
/**
* Convert to decimal string.
*/
toString() {
return BI ? this.toBigInt().toString() : goog_varint_1.int64toString(this.lo, this.hi);
}
/**
* Convert to native bigint.
*/
toBigInt() {
assertBi(BI);
BI.V.setInt32(0, this.lo, true);
BI.V.setInt32(4, this.hi, true);
return BI.V.getBigUint64(0, true);
}
}
exports.PbULong = PbULong;
/**
* ulong 0 singleton.
*/
PbULong.ZERO = new PbULong(0, 0);
/**
* 64-bit signed integer as two 32-bit values.
* Converts between `string`, `number` and `bigint` representations.
*/
class PbLong extends SharedPbLong {
/**
* Create instance from a `string`, `number` or `bigint`.
*/
static from(value) {
if (BI)
// noinspection FallThroughInSwitchStatementJS
switch (typeof value) {
case "string":
if (value == "0")
return this.ZERO;
if (value == "")
throw new Error('string is no integer');
value = BI.C(value);
case "number":
if (value === 0)
return this.ZERO;
value = BI.C(value);
case "bigint":
if (!value)
return this.ZERO;
if (value < BI.MIN)
throw new Error('signed long too small');
if (value > BI.MAX)
throw new Error('signed long too large');
BI.V.setBigInt64(0, value, true);
return new PbLong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));
}
else
switch (typeof value) {
case "string":
if (value == "0")
return this.ZERO;
value = value.trim();
if (!RE_DECIMAL_STR.test(value))
throw new Error('string is no integer');
let [minus, lo, hi] = goog_varint_1.int64fromString(value);
if (minus) {
if (hi > HALF_2_PWR_32 || (hi == HALF_2_PWR_32 && lo != 0))
throw new Error('signed long too small');
}
else if (hi >= HALF_2_PWR_32)
throw new Error('signed long too large');
let pbl = new PbLong(lo, hi);
return minus ? pbl.negate() : pbl;
case "number":
if (value == 0)
return this.ZERO;
if (!Number.isSafeInteger(value))
throw new Error('number is no integer');
return value > 0
? new PbLong(value, value / TWO_PWR_32_DBL)
: new PbLong(-value, -value / TWO_PWR_32_DBL).negate();
}
throw new Error('unknown value ' + typeof value);
}
/**
* Do we have a minus sign?
*/
isNegative() {
return (this.hi & HALF_2_PWR_32) !== 0;
}
/**
* Negate two's complement.
* Invert all the bits and add one to the result.
*/
negate() {
let hi = ~this.hi, lo = this.lo;
if (lo)
lo = ~lo + 1;
else
hi += 1;
return new PbLong(lo, hi);
}
/**
* Convert to decimal string.
*/
toString() {
if (BI)
return this.toBigInt().toString();
if (this.isNegative()) {
let n = this.negate();
return '-' + goog_varint_1.int64toString(n.lo, n.hi);
}
return goog_varint_1.int64toString(this.lo, this.hi);
}
/**
* Convert to native bigint.
*/
toBigInt() {
assertBi(BI);
BI.V.setInt32(0, this.lo, true);
BI.V.setInt32(4, this.hi, true);
return BI.V.getBigInt64(0, true);
}
}
exports.PbLong = PbLong;
/**
* long 0 singleton.
*/
PbLong.ZERO = new PbLong(0, 0);
/***/ }),
/***/ 8950:
/***/ ((__unused_webpack_module, exports) => {
// Copyright (c) 2016, Daniel Wirtz All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of its author, nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.utf8read = void 0;
const fromCharCodes = (chunk) => String.fromCharCode.apply(String, chunk);
/**
* @deprecated This function will no longer be exported with the next major
* release, since protobuf-ts has switch to TextDecoder API. If you need this
* function, please migrate to @protobufjs/utf8. For context, see
* https://github.com/timostamm/protobuf-ts/issues/184
*
* Reads UTF8 bytes as a string.
*
* See [protobufjs / utf8](https://github.com/protobufjs/protobuf.js/blob/9893e35b854621cce64af4bf6be2cff4fb892796/lib/utf8/index.js#L40)
*
* Copyright (c) 2016, Daniel Wirtz
*/
function utf8read(bytes) {
if (bytes.length < 1)
return "";
let pos = 0, // position in bytes
parts = [], chunk = [], i = 0, // char offset
t; // temporary
let len = bytes.length;
while (pos < len) {
t = bytes[pos++];
if (t < 128)
chunk[i++] = t;
else if (t > 191 && t < 224)
chunk[i++] = (t & 31) << 6 | bytes[pos++] & 63;
else if (t > 239 && t < 365) {
t = ((t & 7) << 18 | (bytes[pos++] & 63) << 12 | (bytes[pos++] & 63) << 6 | bytes[pos++] & 63) - 0x10000;
chunk[i++] = 0xD800 + (t >> 10);
chunk[i++] = 0xDC00 + (t & 1023);
}
else
chunk[i++] = (t & 15) << 12 | (bytes[pos++] & 63) << 6 | bytes[pos++] & 63;
if (i > 8191) {
parts.push(fromCharCodes(chunk));
i = 0;
}
}
if (parts.length) {
if (i)
parts.push(fromCharCodes(chunk.slice(0, i)));
return parts.join("");
}
return fromCharCodes(chunk.slice(0, i));
}
exports.utf8read = utf8read;
/***/ }),
/***/ 9611:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ReflectionBinaryReader = void 0;
const binary_format_contract_1 = __webpack_require__(4816);
const reflection_info_1 = __webpack_require__(7910);
const reflection_long_convert_1 = __webpack_require__(3402);
const reflection_scalar_default_1 = __webpack_require__(9526);
/**
* Reads proto3 messages in binary format using reflection information.
*
* https://developers.google.com/protocol-buffers/docs/encoding
*/
class ReflectionBinaryReader {
constructor(info) {
this.info = info;
}
prepare() {
var _a;
if (!this.fieldNoToField) {
const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];
this.fieldNoToField = new Map(fieldsInput.map(field => [field.no, field]));
}
}
/**
* Reads a message from binary format into the target message.
*
* Repeated fields are appended. Map entries are added, overwriting
* existing keys.
*
* If a message field is already present, it will be merged with the
* new data.
*/
read(reader, message, options, length) {
this.prepare();
const end = length === undefined ? reader.len : reader.pos + length;
while (reader.pos < end) {
// read the tag and find the field
const [fieldNo, wireType] = reader.tag(), field = this.fieldNoToField.get(fieldNo);
if (!field) {
let u = options.readUnknownField;
if (u == "throw")
throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.info.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? binary_format_contract_1.UnknownFieldHandler.onRead : u)(this.info.typeName, message, fieldNo, wireType, d);
continue;
}
// target object for the field we are reading
let target = message, repeated = field.repeat, localName = field.localName;
// if field is member of oneof ADT, use ADT as target
if (field.oneof) {
target = target[field.oneof];
// if other oneof member selected, set new ADT
if (target.oneofKind !== localName)
target = message[field.oneof] = {
oneofKind: localName
};
}
// we have handled oneof above, we just have read the value into `target[localName]`
switch (field.kind) {
case "scalar":
case "enum":
let T = field.kind == "enum" ? reflection_info_1.ScalarType.INT32 : field.T;
let L = field.kind == "scalar" ? field.L : undefined;
if (repeated) {
let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
if (wireType == binary_format_contract_1.WireType.LengthDelimited && T != reflection_info_1.ScalarType.STRING && T != reflection_info_1.ScalarType.BYTES) {
let e = reader.uint32() + reader.pos;
while (reader.pos < e)
arr.push(this.scalar(reader, T, L));
}
else
arr.push(this.scalar(reader, T, L));
}
else
target[localName] = this.scalar(reader, T, L);
break;
case "message":
if (repeated) {
let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values
let msg = field.T().internalBinaryRead(reader, reader.uint32(), options);
arr.push(msg);
}
else
target[localName] = field.T().internalBinaryRead(reader, reader.uint32(), options, target[localName]);
break;
case "map":
let [mapKey, mapVal] = this.mapEntry(field, reader, options);
// safe to assume presence of map object, oneof cannot contain repeated values
target[localName][mapKey] = mapVal;
break;
}
}
}
/**
* Read a map field, expecting key field = 1, value field = 2
*/
mapEntry(field, reader, options) {
let length = reader.uint32();
let end = reader.pos + length;
let key = undefined; // javascript only allows number or string for object properties
let val = undefined;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case 1:
if (field.K == reflection_info_1.ScalarType.BOOL)
key = reader.bool().toString();
else
// long types are read as string, number types are okay as number
key = this.scalar(reader, field.K, reflection_info_1.LongType.STRING);
break;
case 2:
switch (field.V.kind) {
case "scalar":
val = this.scalar(reader, field.V.T, field.V.L);
break;
case "enum":
val = reader.int32();
break;
case "message":
val = field.V.T().internalBinaryRead(reader, reader.uint32(), options);
break;
}
break;
default:
throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) in map entry for ${this.info.typeName}#${field.name}`);
}
}
if (key === undefined) {
let keyRaw = reflection_scalar_default_1.reflectionScalarDefault(field.K);
key = field.K == reflection_info_1.ScalarType.BOOL ? keyRaw.toString() : keyRaw;
}
if (val === undefined)
switch (field.V.kind) {
case "scalar":
val = reflection_scalar_default_1.reflectionScalarDefault(field.V.T, field.V.L);
break;
case "enum":
val = 0;
break;
case "message":
val = field.V.T().create();
break;
}
return [key, val];
}
scalar(reader, type, longType) {
switch (type) {
case reflection_info_1.ScalarType.INT32:
return reader.int32();
case reflection_info_1.ScalarType.STRING:
return reader.string();
case reflection_info_1.ScalarType.BOOL:
return reader.bool();
case reflection_info_1.ScalarType.DOUBLE:
return reader.double();
case reflection_info_1.ScalarType.FLOAT:
return reader.float();
case reflection_info_1.ScalarType.INT64:
return reflection_long_convert_1.reflectionLongConvert(reader.int64(), longType);
case reflection_info_1.ScalarType.UINT64:
return reflection_long_convert_1.reflectionLongConvert(reader.uint64(), longType);
case reflection_info_1.ScalarType.FIXED64:
return reflection_long_convert_1.reflectionLongConvert(reader.fixed64(), longType);
case reflection_info_1.ScalarType.FIXED32:
return reader.fixed32();
case reflection_info_1.ScalarType.BYTES:
return reader.bytes();
case reflection_info_1.ScalarType.UINT32:
return reader.uint32();
case reflection_info_1.ScalarType.SFIXED32:
return reader.sfixed32();
case reflection_info_1.ScalarType.SFIXED64:
return reflection_long_convert_1.reflectionLongConvert(reader.sfixed64(), longType);
case reflection_info_1.ScalarType.SINT32:
return reader.sint32();
case reflection_info_1.ScalarType.SINT64:
return reflection_long_convert_1.reflectionLongConvert(reader.sint64(), longType);
}
}
}
exports.ReflectionBinaryReader = ReflectionBinaryReader;
/***/ }),
/***/ 6907:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ReflectionBinaryWriter = void 0;
const binary_format_contract_1 = __webpack_require__(4816);
const reflection_info_1 = __webpack_require__(7910);
const assert_1 = __webpack_require__(8602);
const pb_long_1 = __webpack_require__(1753);
/**
* Writes proto3 messages in binary format using reflection information.
*
* https://developers.google.com/protocol-buffers/docs/encoding
*/
class ReflectionBinaryWriter {
constructor(info) {
this.info = info;
}
prepare() {
if (!this.fields) {
const fieldsInput = this.info.fields ? this.info.fields.concat() : [];
this.fields = fieldsInput.sort((a, b) => a.no - b.no);
}
}
/**
* Writes the message to binary format.
*/
write(message, writer, options) {
this.prepare();
for (const field of this.fields) {
let value, // this will be our field value, whether it is member of a oneof or not
emitDefault, // whether we emit the default value (only true for oneof members)
repeated = field.repeat, localName = field.localName;
// handle oneof ADT
if (field.oneof) {
const group = message[field.oneof];
if (group.oneofKind !== localName)
continue; // if field is not selected, skip
value = group[localName];
emitDefault = true;
}
else {
value = message[localName];
emitDefault = false;
}
// we have handled oneof above. we just have to honor `emitDefault`.
switch (field.kind) {
case "scalar":
case "enum":
let T = field.kind == "enum" ? reflection_info_1.ScalarType.INT32 : field.T;
if (repeated) {
assert_1.assert(Array.isArray(value));
if (repeated == reflection_info_1.RepeatType.PACKED)
this.packed(writer, T, field.no, value);
else
for (const item of value)
this.scalar(writer, T, field.no, item, true);
}
else if (value === undefined)
assert_1.assert(field.opt);
else
this.scalar(writer, T, field.no, value, emitDefault || field.opt);
break;
case "message":
if (repeated) {
assert_1.assert(Array.isArray(value));
for (const item of value)
this.message(writer, options, field.T(), field.no, item);
}
else {
this.message(writer, options, field.T(), field.no, value);
}
break;
case "map":
assert_1.assert(typeof value == 'object' && value !== null);
for (const [key, val] of Object.entries(value))
this.mapEntry(writer, options, field, key, val);
break;
}
}
let u = options.writeUnknownFields;
if (u !== false)
(u === true ? binary_format_contract_1.UnknownFieldHandler.onWrite : u)(this.info.typeName, message, writer);
}
mapEntry(writer, options, field, key, value) {
writer.tag(field.no, binary_format_contract_1.WireType.LengthDelimited);
writer.fork();
// javascript only allows number or string for object properties
// we convert from our representation to the protobuf type
let keyValue = key;
switch (field.K) {
case reflection_info_1.ScalarType.INT32:
case reflection_info_1.ScalarType.FIXED32:
case reflection_info_1.ScalarType.UINT32:
case reflection_info_1.ScalarType.SFIXED32:
case reflection_info_1.ScalarType.SINT32:
keyValue = Number.parseInt(key);
break;
case reflection_info_1.ScalarType.BOOL:
assert_1.assert(key == 'true' || key == 'false');
keyValue = key == 'true';
break;
}
// write key, expecting key field number = 1
this.scalar(writer, field.K, 1, keyValue, true);
// write value, expecting value field number = 2
switch (field.V.kind) {
case 'scalar':
this.scalar(writer, field.V.T, 2, value, true);
break;
case 'enum':
this.scalar(writer, reflection_info_1.ScalarType.INT32, 2, value, true);
break;
case 'message':
this.message(writer, options, field.V.T(), 2, value);
break;
}
writer.join();
}
message(writer, options, handler, fieldNo, value) {
if (value === undefined)
return;
handler.internalBinaryWrite(value, writer.tag(fieldNo, binary_format_contract_1.WireType.LengthDelimited).fork(), options);
writer.join();
}
/**
* Write a single scalar value.
*/
scalar(writer, type, fieldNo, value, emitDefault) {
let [wireType, method, isDefault] = this.scalarInfo(type, value);
if (!isDefault || emitDefault) {
writer.tag(fieldNo, wireType);
writer[method](value);
}
}
/**
* Write an array of scalar values in packed format.
*/
packed(writer, type, fieldNo, value) {
if (!value.length)
return;
assert_1.assert(type !== reflection_info_1.ScalarType.BYTES && type !== reflection_info_1.ScalarType.STRING);
// write tag
writer.tag(fieldNo, binary_format_contract_1.WireType.LengthDelimited);
// begin length-delimited
writer.fork();
// write values without tags
let [, method,] = this.scalarInfo(type);
for (let i = 0; i < value.length; i++)
writer[method](value[i]);
// end length delimited
writer.join();
}
/**
* Get information for writing a scalar value.
*
* Returns tuple:
* [0]: appropriate WireType
* [1]: name of the appropriate method of IBinaryWriter
* [2]: whether the given value is a default value
*
* If argument `value` is omitted, [2] is always false.
*/
scalarInfo(type, value) {
let t = binary_format_contract_1.WireType.Varint;
let m;
let i = value === undefined;
let d = value === 0;
switch (type) {
case reflection_info_1.ScalarType.INT32:
m = "int32";
break;
case reflection_info_1.ScalarType.STRING:
d = i || !value.length;
t = binary_format_contract_1.WireType.LengthDelimited;
m = "string";
break;
case reflection_info_1.ScalarType.BOOL:
d = value === false;
m = "bool";
break;
case reflection_info_1.ScalarType.UINT32:
m = "uint32";
break;
case reflection_info_1.ScalarType.DOUBLE:
t = binary_format_contract_1.WireType.Bit64;
m = "double";
break;
case reflection_info_1.ScalarType.FLOAT:
t = binary_format_contract_1.WireType.Bit32;
m = "float";
break;
case reflection_info_1.ScalarType.INT64:
d = i || pb_long_1.PbLong.from(value).isZero();
m = "int64";
break;
case reflection_info_1.ScalarType.UINT64:
d = i || pb_long_1.PbULong.from(value).isZero();
m = "uint64";
break;
case reflection_info_1.ScalarType.FIXED64:
d = i || pb_long_1.PbULong.from(value).isZero();
t = binary_format_contract_1.WireType.Bit64;
m = "fixed64";
break;
case reflection_info_1.ScalarType.BYTES:
d = i || !value.byteLength;
t = binary_format_contract_1.WireType.LengthDelimited;
m = "bytes";
break;
case reflection_info_1.ScalarType.FIXED32:
t = binary_format_contract_1.WireType.Bit32;
m = "fixed32";
break;
case reflection_info_1.ScalarType.SFIXED32:
t = binary_format_contract_1.WireType.Bit32;
m = "sfixed32";
break;
case reflection_info_1.ScalarType.SFIXED64:
d = i || pb_long_1.PbLong.from(value).isZero();
t = binary_format_contract_1.WireType.Bit64;
m = "sfixed64";
break;
case reflection_info_1.ScalarType.SINT32:
m = "sint32";
break;
case reflection_info_1.ScalarType.SINT64:
d = i || pb_long_1.PbLong.from(value).isZero();
m = "sint64";
break;
}
return [t, m, i || d];
}
}
exports.ReflectionBinaryWriter = ReflectionBinaryWriter;
/***/ }),
/***/ 9946:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.containsMessageType = void 0;
const message_type_contract_1 = __webpack_require__(3785);
/**
* Check if the provided object is a proto message.
*
* Note that this is an experimental feature - it is here to stay, but
* implementation details may change without notice.
*/
function containsMessageType(msg) {
return msg[message_type_contract_1.MESSAGE_TYPE] != null;
}
exports.containsMessageType = containsMessageType;
/***/ }),
/***/ 5726:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reflectionCreate = void 0;
const reflection_scalar_default_1 = __webpack_require__(9526);
const message_type_contract_1 = __webpack_require__(3785);
/**
* Creates an instance of the generic message, using the field
* information.
*/
function reflectionCreate(type) {
/**
* This ternary can be removed in the next major version.
* The `Object.create()` code path utilizes a new `messagePrototype`
* property on the `IMessageType` which has this same `MESSAGE_TYPE`
* non-enumerable property on it. Doing it this way means that we only
* pay the cost of `Object.defineProperty()` once per `IMessageType`
* class of once per "instance". The falsy code path is only provided
* for backwards compatibility in cases where the runtime library is
* updated without also updating the generated code.
*/
const msg = type.messagePrototype
? Object.create(type.messagePrototype)
: Object.defineProperty({}, message_type_contract_1.MESSAGE_TYPE, { value: type });
for (let field of type.fields) {
let name = field.localName;
if (field.opt)
continue;
if (field.oneof)
msg[field.oneof] = { oneofKind: undefined };
else if (field.repeat)
msg[name] = [];
else
switch (field.kind) {
case "scalar":
msg[name] = reflection_scalar_default_1.reflectionScalarDefault(field.T, field.L);
break;
case "enum":
// we require 0 to be default value for all enums
msg[name] = 0;
break;
case "map":
msg[name] = {};
break;
}
}
return msg;
}
exports.reflectionCreate = reflectionCreate;
/***/ }),
/***/ 4827:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reflectionEquals = void 0;
const reflection_info_1 = __webpack_require__(7910);
/**
* Determines whether two message of the same type have the same field values.
* Checks for deep equality, traversing repeated fields, oneof groups, maps
* and messages recursively.
* Will also return true if both messages are `undefined`.
*/
function reflectionEquals(info, a, b) {
if (a === b)
return true;
if (!a || !b)
return false;
for (let field of info.fields) {
let localName = field.localName;
let val_a = field.oneof ? a[field.oneof][localName] : a[localName];
let val_b = field.oneof ? b[field.oneof][localName] : b[localName];
switch (field.kind) {
case "enum":
case "scalar":
let t = field.kind == "enum" ? reflection_info_1.ScalarType.INT32 : field.T;
if (!(field.repeat
? repeatedPrimitiveEq(t, val_a, val_b)
: primitiveEq(t, val_a, val_b)))
return false;
break;
case "map":
if (!(field.V.kind == "message"
? repeatedMsgEq(field.V.T(), objectValues(val_a), objectValues(val_b))
: repeatedPrimitiveEq(field.V.kind == "enum" ? reflection_info_1.ScalarType.INT32 : field.V.T, objectValues(val_a), objectValues(val_b))))
return false;
break;
case "message":
let T = field.T();
if (!(field.repeat
? repeatedMsgEq(T, val_a, val_b)
: T.equals(val_a, val_b)))
return false;
break;
}
}
return true;
}
exports.reflectionEquals = reflectionEquals;
const objectValues = Object.values;
function primitiveEq(type, a, b) {
if (a === b)
return true;
if (type !== reflection_info_1.ScalarType.BYTES)
return false;
let ba = a;
let bb = b;
if (ba.length !== bb.length)
return false;
for (let i = 0; i < ba.length; i++)
if (ba[i] != bb[i])
return false;
return true;
}
function repeatedPrimitiveEq(type, a, b) {
if (a.length !== b.length)
return false;
for (let i = 0; i < a.length; i++)
if (!primitiveEq(type, a[i], b[i]))
return false;
return true;
}
function repeatedMsgEq(type, a, b) {
if (a.length !== b.length)
return false;
for (let i = 0; i < a.length; i++)
if (!type.equals(a[i], b[i]))
return false;
return true;
}
/***/ }),
/***/ 7910:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.readMessageOption = exports.readFieldOption = exports.readFieldOptions = exports.normalizeFieldInfo = exports.RepeatType = exports.LongType = exports.ScalarType = void 0;
const lower_camel_case_1 = __webpack_require__(4073);
/**
* Scalar value types. This is a subset of field types declared by protobuf
* enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE
* are omitted, but the numerical values are identical.
*/
var ScalarType;
(function (ScalarType) {
// 0 is reserved for errors.
// Order is weird for historical reasons.
ScalarType[ScalarType["DOUBLE"] = 1] = "DOUBLE";
ScalarType[ScalarType["FLOAT"] = 2] = "FLOAT";
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
// negative values are likely.
ScalarType[ScalarType["INT64"] = 3] = "INT64";
ScalarType[ScalarType["UINT64"] = 4] = "UINT64";
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
// negative values are likely.
ScalarType[ScalarType["INT32"] = 5] = "INT32";
ScalarType[ScalarType["FIXED64"] = 6] = "FIXED64";
ScalarType[ScalarType["FIXED32"] = 7] = "FIXED32";
ScalarType[ScalarType["BOOL"] = 8] = "BOOL";
ScalarType[ScalarType["STRING"] = 9] = "STRING";
// Tag-delimited aggregate.
// Group type is deprecated and not supported in proto3. However, Proto3
// implementations should still be able to parse the group wire format and
// treat group fields as unknown fields.
// TYPE_GROUP = 10,
// TYPE_MESSAGE = 11, // Length-delimited aggregate.
// New in version 2.
ScalarType[ScalarType["BYTES"] = 12] = "BYTES";
ScalarType[ScalarType["UINT32"] = 13] = "UINT32";
// TYPE_ENUM = 14,
ScalarType[ScalarType["SFIXED32"] = 15] = "SFIXED32";
ScalarType[ScalarType["SFIXED64"] = 16] = "SFIXED64";
ScalarType[ScalarType["SINT32"] = 17] = "SINT32";
ScalarType[ScalarType["SINT64"] = 18] = "SINT64";
})(ScalarType = exports.ScalarType || (exports.ScalarType = {}));
/**
* JavaScript representation of 64 bit integral types. Equivalent to the
* field option "jstype".
*
* By default, protobuf-ts represents 64 bit types as `bigint`.
*
* You can change the default behaviour by enabling the plugin parameter
* `long_type_string`, which will represent 64 bit types as `string`.
*
* Alternatively, you can change the behaviour for individual fields
* with the field option "jstype":
*
* ```protobuf
* uint64 my_field = 1 [jstype = JS_STRING];
* uint64 other_field = 2 [jstype = JS_NUMBER];
* ```
*/
var LongType;
(function (LongType) {
/**
* Use JavaScript `bigint`.
*
* Field option `[jstype = JS_NORMAL]`.
*/
LongType[LongType["BIGINT"] = 0] = "BIGINT";
/**
* Use JavaScript `string`.
*
* Field option `[jstype = JS_STRING]`.
*/
LongType[LongType["STRING"] = 1] = "STRING";
/**
* Use JavaScript `number`.
*
* Large values will loose precision.
*
* Field option `[jstype = JS_NUMBER]`.
*/
LongType[LongType["NUMBER"] = 2] = "NUMBER";
})(LongType = exports.LongType || (exports.LongType = {}));
/**
* Protobuf 2.1.0 introduced packed repeated fields.
* Setting the field option `[packed = true]` enables packing.
*
* In proto3, all repeated fields are packed by default.
* Setting the field option `[packed = false]` disables packing.
*
* Packed repeated fields are encoded with a single tag,
* then a length-delimiter, then the element values.
*
* Unpacked repeated fields are encoded with a tag and
* value for each element.
*
* `bytes` and `string` cannot be packed.
*/
var RepeatType;
(function (RepeatType) {
/**
* The field is not repeated.
*/
RepeatType[RepeatType["NO"] = 0] = "NO";
/**
* The field is repeated and should be packed.
* Invalid for `bytes` and `string`, they cannot be packed.
*/
RepeatType[RepeatType["PACKED"] = 1] = "PACKED";
/**
* The field is repeated but should not be packed.
* The only valid repeat type for repeated `bytes` and `string`.
*/
RepeatType[RepeatType["UNPACKED"] = 2] = "UNPACKED";
})(RepeatType = exports.RepeatType || (exports.RepeatType = {}));
/**
* Turns PartialFieldInfo into FieldInfo.
*/
function normalizeFieldInfo(field) {
var _a, _b, _c, _d;
field.localName = (_a = field.localName) !== null && _a !== void 0 ? _a : lower_camel_case_1.lowerCamelCase(field.name);
field.jsonName = (_b = field.jsonName) !== null && _b !== void 0 ? _b : lower_camel_case_1.lowerCamelCase(field.name);
field.repeat = (_c = field.repeat) !== null && _c !== void 0 ? _c : RepeatType.NO;
field.opt = (_d = field.opt) !== null && _d !== void 0 ? _d : (field.repeat ? false : field.oneof ? false : field.kind == "message");
return field;
}
exports.normalizeFieldInfo = normalizeFieldInfo;
/**
* Read custom field options from a generated message type.
*
* @deprecated use readFieldOption()
*/
function readFieldOptions(messageType, fieldName, extensionName, extensionType) {
var _a;
const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;
return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : undefined;
}
exports.readFieldOptions = readFieldOptions;
function readFieldOption(messageType, fieldName, extensionName, extensionType) {
var _a;
const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;
if (!options) {
return undefined;
}
const optionVal = options[extensionName];
if (optionVal === undefined) {
return optionVal;
}
return extensionType ? extensionType.fromJson(optionVal) : optionVal;
}
exports.readFieldOption = readFieldOption;
function readMessageOption(messageType, extensionName, extensionType) {
const options = messageType.options;
const optionVal = options[extensionName];
if (optionVal === undefined) {
return optionVal;
}
return extensionType ? extensionType.fromJson(optionVal) : optionVal;
}
exports.readMessageOption = readMessageOption;
/***/ }),
/***/ 6790:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ReflectionJsonReader = void 0;
const json_typings_1 = __webpack_require__(9999);
const base64_1 = __webpack_require__(6335);
const reflection_info_1 = __webpack_require__(7910);
const pb_long_1 = __webpack_require__(1753);
const assert_1 = __webpack_require__(8602);
const reflection_long_convert_1 = __webpack_require__(3402);
/**
* Reads proto3 messages in canonical JSON format using reflection information.
*
* https://developers.google.com/protocol-buffers/docs/proto3#json
*/
class ReflectionJsonReader {
constructor(info) {
this.info = info;
}
prepare() {
var _a;
if (this.fMap === undefined) {
this.fMap = {};
const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];
for (const field of fieldsInput) {
this.fMap[field.name] = field;
this.fMap[field.jsonName] = field;
this.fMap[field.localName] = field;
}
}
}
// Cannot parse JSON <type of jsonValue> for <type name>#<fieldName>.
assert(condition, fieldName, jsonValue) {
if (!condition) {
let what = json_typings_1.typeofJsonValue(jsonValue);
if (what == "number" || what == "boolean")
what = jsonValue.toString();
throw new Error(`Cannot parse JSON ${what} for ${this.info.typeName}#${fieldName}`);
}
}
/**
* Reads a message from canonical JSON format into the target message.
*
* Repeated fields are appended. Map entries are added, overwriting
* existing keys.
*
* If a message field is already present, it will be merged with the
* new data.
*/
read(input, message, options) {
this.prepare();
const oneofsHandled = [];
for (const [jsonKey, jsonValue] of Object.entries(input)) {
const field = this.fMap[jsonKey];
if (!field) {
if (!options.ignoreUnknownFields)
throw new Error(`Found unknown field while reading ${this.info.typeName} from JSON format. JSON key: ${jsonKey}`);
continue;
}
const localName = field.localName;
// handle oneof ADT
let target; // this will be the target for the field value, whether it is member of a oneof or not
if (field.oneof) {
if (jsonValue === null && (field.kind !== 'enum' || field.T()[0] !== 'google.protobuf.NullValue')) {
continue;
}
// since json objects are unordered by specification, it is not possible to take the last of multiple oneofs
if (oneofsHandled.includes(field.oneof))
throw new Error(`Multiple members of the oneof group "${field.oneof}" of ${this.info.typeName} are present in JSON.`);
oneofsHandled.push(field.oneof);
target = message[field.oneof] = {
oneofKind: localName
};
}
else {
target = message;
}
// we have handled oneof above. we just have read the value into `target`.
if (field.kind == 'map') {
if (jsonValue === null) {
continue;
}
// check input
this.assert(json_typings_1.isJsonObject(jsonValue), field.name, jsonValue);
// our target to put map entries into
const fieldObj = target[localName];
// read entries
for (const [jsonObjKey, jsonObjValue] of Object.entries(jsonValue)) {
this.assert(jsonObjValue !== null, field.name + " map value", null);
// read value
let val;
switch (field.V.kind) {
case "message":
val = field.V.T().internalJsonRead(jsonObjValue, options);
break;
case "enum":
val = this.enum(field.V.T(), jsonObjValue, field.name, options.ignoreUnknownFields);
if (val === false)
continue;
break;
case "scalar":
val = this.scalar(jsonObjValue, field.V.T, field.V.L, field.name);
break;
}
this.assert(val !== undefined, field.name + " map value", jsonObjValue);
// read key
let key = jsonObjKey;
if (field.K == reflection_info_1.ScalarType.BOOL)
key = key == "true" ? true : key == "false" ? false : key;
key = this.scalar(key, field.K, reflection_info_1.LongType.STRING, field.name).toString();
fieldObj[key] = val;
}
}
else if (field.repeat) {
if (jsonValue === null)
continue;
// check input
this.assert(Array.isArray(jsonValue), field.name, jsonValue);
// our target to put array entries into
const fieldArr = target[localName];
// read array entries
for (const jsonItem of jsonValue) {
this.assert(jsonItem !== null, field.name, null);
let val;
switch (field.kind) {
case "message":
val = field.T().internalJsonRead(jsonItem, options);
break;
case "enum":
val = this.enum(field.T(), jsonItem, field.name, options.ignoreUnknownFields);
if (val === false)
continue;
break;
case "scalar":
val = this.scalar(jsonItem, field.T, field.L, field.name);
break;
}
this.assert(val !== undefined, field.name, jsonValue);
fieldArr.push(val);
}
}
else {
switch (field.kind) {
case "message":
if (jsonValue === null && field.T().typeName != 'google.protobuf.Value') {
this.assert(field.oneof === undefined, field.name + " (oneof member)", null);
continue;
}
target[localName] = field.T().internalJsonRead(jsonValue, options, target[localName]);
break;
case "enum":
if (jsonValue === null)
continue;
let val = this.enum(field.T(), jsonValue, field.name, options.ignoreUnknownFields);
if (val === false)
continue;
target[localName] = val;
break;
case "scalar":
if (jsonValue === null)
continue;
target[localName] = this.scalar(jsonValue, field.T, field.L, field.name);
break;
}
}
}
}
/**
* Returns `false` for unrecognized string representations.
*
* google.protobuf.NullValue accepts only JSON `null` (or the old `"NULL_VALUE"`).
*/
enum(type, json, fieldName, ignoreUnknownFields) {
if (type[0] == 'google.protobuf.NullValue')
assert_1.assert(json === null || json === "NULL_VALUE", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} only accepts null.`);
if (json === null)
// we require 0 to be default value for all enums
return 0;
switch (typeof json) {
case "number":
assert_1.assert(Number.isInteger(json), `Unable to parse field ${this.info.typeName}#${fieldName}, enum can only be integral number, got ${json}.`);
return json;
case "string":
let localEnumName = json;
if (type[2] && json.substring(0, type[2].length) === type[2])
// lookup without the shared prefix
localEnumName = json.substring(type[2].length);
let enumNumber = type[1][localEnumName];
if (typeof enumNumber === 'undefined' && ignoreUnknownFields) {
return false;
}
assert_1.assert(typeof enumNumber == "number", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} has no value for "${json}".`);
return enumNumber;
}
assert_1.assert(false, `Unable to parse field ${this.info.typeName}#${fieldName}, cannot parse enum value from ${typeof json}".`);
}
scalar(json, type, longType, fieldName) {
let e;
try {
switch (type) {
// float, double: JSON value will be a number or one of the special string values "NaN", "Infinity", and "-Infinity".
// Either numbers or strings are accepted. Exponent notation is also accepted.
case reflection_info_1.ScalarType.DOUBLE:
case reflection_info_1.ScalarType.FLOAT:
if (json === null)
return .0;
if (json === "NaN")
return Number.NaN;
if (json === "Infinity")
return Number.POSITIVE_INFINITY;
if (json === "-Infinity")
return Number.NEGATIVE_INFINITY;
if (json === "") {
e = "empty string";
break;
}
if (typeof json == "string" && json.trim().length !== json.length) {
e = "extra whitespace";
break;
}
if (typeof json != "string" && typeof json != "number") {
break;
}
let float = Number(json);
if (Number.isNaN(float)) {
e = "not a number";
break;
}
if (!Number.isFinite(float)) {
// infinity and -infinity are handled by string representation above, so this is an error
e = "too large or small";
break;
}
if (type == reflection_info_1.ScalarType.FLOAT)
assert_1.assertFloat32(float);
return float;
// int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.
case reflection_info_1.ScalarType.INT32:
case reflection_info_1.ScalarType.FIXED32:
case reflection_info_1.ScalarType.SFIXED32:
case reflection_info_1.ScalarType.SINT32:
case reflection_info_1.ScalarType.UINT32:
if (json === null)
return 0;
let int32;
if (typeof json == "number")
int32 = json;
else if (json === "")
e = "empty string";
else if (typeof json == "string") {
if (json.trim().length !== json.length)
e = "extra whitespace";
else
int32 = Number(json);
}
if (int32 === undefined)
break;
if (type == reflection_info_1.ScalarType.UINT32)
assert_1.assertUInt32(int32);
else
assert_1.assertInt32(int32);
return int32;
// int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.
case reflection_info_1.ScalarType.INT64:
case reflection_info_1.ScalarType.SFIXED64:
case reflection_info_1.ScalarType.SINT64:
if (json === null)
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.ZERO, longType);
if (typeof json != "number" && typeof json != "string")
break;
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.from(json), longType);
case reflection_info_1.ScalarType.FIXED64:
case reflection_info_1.ScalarType.UINT64:
if (json === null)
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.ZERO, longType);
if (typeof json != "number" && typeof json != "string")
break;
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.from(json), longType);
// bool:
case reflection_info_1.ScalarType.BOOL:
if (json === null)
return false;
if (typeof json !== "boolean")
break;
return json;
// string:
case reflection_info_1.ScalarType.STRING:
if (json === null)
return "";
if (typeof json !== "string") {
e = "extra whitespace";
break;
}
try {
encodeURIComponent(json);
}
catch (e) {
e = "invalid UTF8";
break;
}
return json;
// bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.
// Either standard or URL-safe base64 encoding with/without paddings are accepted.
case reflection_info_1.ScalarType.BYTES:
if (json === null || json === "")
return new Uint8Array(0);
if (typeof json !== 'string')
break;
return base64_1.base64decode(json);
}
}
catch (error) {
e = error.message;
}
this.assert(false, fieldName + (e ? " - " + e : ""), json);
}
}
exports.ReflectionJsonReader = ReflectionJsonReader;
/***/ }),
/***/ 1094:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ReflectionJsonWriter = void 0;
const base64_1 = __webpack_require__(6335);
const pb_long_1 = __webpack_require__(1753);
const reflection_info_1 = __webpack_require__(7910);
const assert_1 = __webpack_require__(8602);
/**
* Writes proto3 messages in canonical JSON format using reflection
* information.
*
* https://developers.google.com/protocol-buffers/docs/proto3#json
*/
class ReflectionJsonWriter {
constructor(info) {
var _a;
this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];
}
/**
* Converts the message to a JSON object, based on the field descriptors.
*/
write(message, options) {
const json = {}, source = message;
for (const field of this.fields) {
// field is not part of a oneof, simply write as is
if (!field.oneof) {
let jsonValue = this.field(field, source[field.localName], options);
if (jsonValue !== undefined)
json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;
continue;
}
// field is part of a oneof
const group = source[field.oneof];
if (group.oneofKind !== field.localName)
continue; // not selected, skip
const opt = field.kind == 'scalar' || field.kind == 'enum'
? Object.assign(Object.assign({}, options), { emitDefaultValues: true }) : options;
let jsonValue = this.field(field, group[field.localName], opt);
assert_1.assert(jsonValue !== undefined);
json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;
}
return json;
}
field(field, value, options) {
let jsonValue = undefined;
if (field.kind == 'map') {
assert_1.assert(typeof value == "object" && value !== null);
const jsonObj = {};
switch (field.V.kind) {
case "scalar":
for (const [entryKey, entryValue] of Object.entries(value)) {
const val = this.scalar(field.V.T, entryValue, field.name, false, true);
assert_1.assert(val !== undefined);
jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key
}
break;
case "message":
const messageType = field.V.T();
for (const [entryKey, entryValue] of Object.entries(value)) {
const val = this.message(messageType, entryValue, field.name, options);
assert_1.assert(val !== undefined);
jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key
}
break;
case "enum":
const enumInfo = field.V.T();
for (const [entryKey, entryValue] of Object.entries(value)) {
assert_1.assert(entryValue === undefined || typeof entryValue == 'number');
const val = this.enum(enumInfo, entryValue, field.name, false, true, options.enumAsInteger);
assert_1.assert(val !== undefined);
jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key
}
break;
}
if (options.emitDefaultValues || Object.keys(jsonObj).length > 0)
jsonValue = jsonObj;
}
else if (field.repeat) {
assert_1.assert(Array.isArray(value));
const jsonArr = [];
switch (field.kind) {
case "scalar":
for (let i = 0; i < value.length; i++) {
const val = this.scalar(field.T, value[i], field.name, field.opt, true);
assert_1.assert(val !== undefined);
jsonArr.push(val);
}
break;
case "enum":
const enumInfo = field.T();
for (let i = 0; i < value.length; i++) {
assert_1.assert(value[i] === undefined || typeof value[i] == 'number');
const val = this.enum(enumInfo, value[i], field.name, field.opt, true, options.enumAsInteger);
assert_1.assert(val !== undefined);
jsonArr.push(val);
}
break;
case "message":
const messageType = field.T();
for (let i = 0; i < value.length; i++) {
const val = this.message(messageType, value[i], field.name, options);
assert_1.assert(val !== undefined);
jsonArr.push(val);
}
break;
}
// add converted array to json output
if (options.emitDefaultValues || jsonArr.length > 0 || options.emitDefaultValues)
jsonValue = jsonArr;
}
else {
switch (field.kind) {
case "scalar":
jsonValue = this.scalar(field.T, value, field.name, field.opt, options.emitDefaultValues);
break;
case "enum":
jsonValue = this.enum(field.T(), value, field.name, field.opt, options.emitDefaultValues, options.enumAsInteger);
break;
case "message":
jsonValue = this.message(field.T(), value, field.name, options);
break;
}
}
return jsonValue;
}
/**
* Returns `null` as the default for google.protobuf.NullValue.
*/
enum(type, value, fieldName, optional, emitDefaultValues, enumAsInteger) {
if (type[0] == 'google.protobuf.NullValue')
return !emitDefaultValues && !optional ? undefined : null;
if (value === undefined) {
assert_1.assert(optional);
return undefined;
}
if (value === 0 && !emitDefaultValues && !optional)
// we require 0 to be default value for all enums
return undefined;
assert_1.assert(typeof value == 'number');
assert_1.assert(Number.isInteger(value));
if (enumAsInteger || !type[1].hasOwnProperty(value))
// if we don't now the enum value, just return the number
return value;
if (type[2])
// restore the dropped prefix
return type[2] + type[1][value];
return type[1][value];
}
message(type, value, fieldName, options) {
if (value === undefined)
return options.emitDefaultValues ? null : undefined;
return type.internalJsonWrite(value, options);
}
scalar(type, value, fieldName, optional, emitDefaultValues) {
if (value === undefined) {
assert_1.assert(optional);
return undefined;
}
const ed = emitDefaultValues || optional;
// noinspection FallThroughInSwitchStatementJS
switch (type) {
// int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.
case reflection_info_1.ScalarType.INT32:
case reflection_info_1.ScalarType.SFIXED32:
case reflection_info_1.ScalarType.SINT32:
if (value === 0)
return ed ? 0 : undefined;
assert_1.assertInt32(value);
return value;
case reflection_info_1.ScalarType.FIXED32:
case reflection_info_1.ScalarType.UINT32:
if (value === 0)
return ed ? 0 : undefined;
assert_1.assertUInt32(value);
return value;
// float, double: JSON value will be a number or one of the special string values "NaN", "Infinity", and "-Infinity".
// Either numbers or strings are accepted. Exponent notation is also accepted.
case reflection_info_1.ScalarType.FLOAT:
assert_1.assertFloat32(value);
case reflection_info_1.ScalarType.DOUBLE:
if (value === 0)
return ed ? 0 : undefined;
assert_1.assert(typeof value == 'number');
if (Number.isNaN(value))
return 'NaN';
if (value === Number.POSITIVE_INFINITY)
return 'Infinity';
if (value === Number.NEGATIVE_INFINITY)
return '-Infinity';
return value;
// string:
case reflection_info_1.ScalarType.STRING:
if (value === "")
return ed ? '' : undefined;
assert_1.assert(typeof value == 'string');
return value;
// bool:
case reflection_info_1.ScalarType.BOOL:
if (value === false)
return ed ? false : undefined;
assert_1.assert(typeof value == 'boolean');
return value;
// JSON value will be a decimal string. Either numbers or strings are accepted.
case reflection_info_1.ScalarType.UINT64:
case reflection_info_1.ScalarType.FIXED64:
assert_1.assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');
let ulong = pb_long_1.PbULong.from(value);
if (ulong.isZero() && !ed)
return undefined;
return ulong.toString();
// JSON value will be a decimal string. Either numbers or strings are accepted.
case reflection_info_1.ScalarType.INT64:
case reflection_info_1.ScalarType.SFIXED64:
case reflection_info_1.ScalarType.SINT64:
assert_1.assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');
let long = pb_long_1.PbLong.from(value);
if (long.isZero() && !ed)
return undefined;
return long.toString();
// bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.
// Either standard or URL-safe base64 encoding with/without paddings are accepted.
case reflection_info_1.ScalarType.BYTES:
assert_1.assert(value instanceof Uint8Array);
if (!value.byteLength)
return ed ? "" : undefined;
return base64_1.base64encode(value);
}
}
}
exports.ReflectionJsonWriter = ReflectionJsonWriter;
/***/ }),
/***/ 3402:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reflectionLongConvert = void 0;
const reflection_info_1 = __webpack_require__(7910);
/**
* Utility method to convert a PbLong or PbUlong to a JavaScript
* representation during runtime.
*
* Works with generated field information, `undefined` is equivalent
* to `STRING`.
*/
function reflectionLongConvert(long, type) {
switch (type) {
case reflection_info_1.LongType.BIGINT:
return long.toBigInt();
case reflection_info_1.LongType.NUMBER:
return long.toNumber();
default:
// case undefined:
// case LongType.STRING:
return long.toString();
}
}
exports.reflectionLongConvert = reflectionLongConvert;
/***/ }),
/***/ 8044:
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reflectionMergePartial = void 0;
/**
* Copy partial data into the target message.
*
* If a singular scalar or enum field is present in the source, it
* replaces the field in the target.
*
* If a singular message field is present in the source, it is merged
* with the target field by calling mergePartial() of the responsible
* message type.
*
* If a repeated field is present in the source, its values replace
* all values in the target array, removing extraneous values.
* Repeated message fields are copied, not merged.
*
* If a map field is present in the source, entries are added to the
* target map, replacing entries with the same key. Entries that only
* exist in the target remain. Entries with message values are copied,
* not merged.
*
* Note that this function differs from protobuf merge semantics,
* which appends repeated fields.
*/
function reflectionMergePartial(info, target, source) {
let fieldValue, // the field value we are working with
input = source, output; // where we want our field value to go
for (let field of info.fields) {
let name = field.localName;
if (field.oneof) {
const group = input[field.oneof]; // this is the oneof`s group in the source
if ((group === null || group === void 0 ? void 0 : group.oneofKind) == undefined) { // the user is free to omit
continue; // we skip this field, and all other members too
}
fieldValue = group[name]; // our value comes from the the oneof group of the source
output = target[field.oneof]; // and our output is the oneof group of the target
output.oneofKind = group.oneofKind; // always update discriminator
if (fieldValue == undefined) {
delete output[name]; // remove any existing value
continue; // skip further work on field
}
}
else {
fieldValue = input[name]; // we are using the source directly
output = target; // we want our field value to go directly into the target
if (fieldValue == undefined) {
continue; // skip further work on field, existing value is used as is
}
}
if (field.repeat)
output[name].length = fieldValue.length; // resize target array to match source array
// now we just work with `fieldValue` and `output` to merge the value
switch (field.kind) {
case "scalar":
case "enum":
if (field.repeat)
for (let i = 0; i < fieldValue.length; i++)
output[name][i] = fieldValue[i]; // not a reference type
else
output[name] = fieldValue; // not a reference type
break;
case "message":
let T = field.T();
if (field.repeat)
for (let i = 0; i < fieldValue.length; i++)
output[name][i] = T.create(fieldValue[i]);
else if (output[name] === undefined)
output[name] = T.create(fieldValue); // nothing to merge with
else
T.mergePartial(output[name], fieldValue);
break;
case "map":
// Map and repeated fields are simply overwritten, not appended or merged
switch (field.V.kind) {
case "scalar":
case "enum":
Object.assign(output[name], fieldValue); // elements are not reference types
break;
case "message":
let T = field.V.T();
for (let k of Object.keys(fieldValue))
output[name][k] = T.create(fieldValue[k]);
break;
}
break;
}
}
}
exports.reflectionMergePartial = reflectionMergePartial;
/***/ }),
/***/ 9526:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.reflectionScalarDefault = void 0;
const reflection_info_1 = __webpack_require__(7910);
const reflection_long_convert_1 = __webpack_require__(3402);
const pb_long_1 = __webpack_require__(1753);
/**
* Creates the default value for a scalar type.
*/
function reflectionScalarDefault(type, longType = reflection_info_1.LongType.STRING) {
switch (type) {
case reflection_info_1.ScalarType.BOOL:
return false;
case reflection_info_1.ScalarType.UINT64:
case reflection_info_1.ScalarType.FIXED64:
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.ZERO, longType);
case reflection_info_1.ScalarType.INT64:
case reflection_info_1.ScalarType.SFIXED64:
case reflection_info_1.ScalarType.SINT64:
return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.ZERO, longType);
case reflection_info_1.ScalarType.DOUBLE:
case reflection_info_1.ScalarType.FLOAT:
return 0.0;
case reflection_info_1.ScalarType.BYTES:
return new Uint8Array(0);
case reflection_info_1.ScalarType.STRING:
return "";
default:
// case ScalarType.INT32:
// case ScalarType.UINT32:
// case ScalarType.SINT32:
// case ScalarType.FIXED32:
// case ScalarType.SFIXED32:
return 0;
}
}
exports.reflectionScalarDefault = reflectionScalarDefault;
/***/ }),
/***/ 5167:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ReflectionTypeCheck = void 0;
const reflection_info_1 = __webpack_require__(7910);
const oneof_1 = __webpack_require__(8063);
// noinspection JSMethodCanBeStatic
class ReflectionTypeCheck {
constructor(info) {
var _a;
this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];
}
prepare() {
if (this.data)
return;
const req = [], known = [], oneofs = [];
for (let field of this.fields) {
if (field.oneof) {
if (!oneofs.includes(field.oneof)) {
oneofs.push(field.oneof);
req.push(field.oneof);
known.push(field.oneof);
}
}
else {
known.push(field.localName);
switch (field.kind) {
case "scalar":
case "enum":
if (!field.opt || field.repeat)
req.push(field.localName);
break;
case "message":
if (field.repeat)
req.push(field.localName);
break;
case "map":
req.push(field.localName);
break;
}
}
}
this.data = { req, known, oneofs: Object.values(oneofs) };
}
/**
* Is the argument a valid message as specified by the
* reflection information?
*
* Checks all field types recursively. The `depth`
* specifies how deep into the structure the check will be.
*
* With a depth of 0, only the presence of fields
* is checked.
*
* With a depth of 1 or more, the field types are checked.
*
* With a depth of 2 or more, the members of map, repeated
* and message fields are checked.
*
* Message fields will be checked recursively with depth - 1.
*
* The number of map entries / repeated values being checked
* is < depth.
*/
is(message, depth, allowExcessProperties = false) {
if (depth < 0)
return true;
if (message === null || message === undefined || typeof message != 'object')
return false;
this.prepare();
let keys = Object.keys(message), data = this.data;
// if a required field is missing in arg, this cannot be a T
if (keys.length < data.req.length || data.req.some(n => !keys.includes(n)))
return false;
if (!allowExcessProperties) {
// if the arg contains a key we dont know, this is not a literal T
if (keys.some(k => !data.known.includes(k)))
return false;
}
// "With a depth of 0, only the presence and absence of fields is checked."
// "With a depth of 1 or more, the field types are checked."
if (depth < 1) {
return true;
}
// check oneof group
for (const name of data.oneofs) {
const group = message[name];
if (!oneof_1.isOneofGroup(group))
return false;
if (group.oneofKind === undefined)
continue;
const field = this.fields.find(f => f.localName === group.oneofKind);
if (!field)
return false; // we found no field, but have a kind, something is wrong
if (!this.field(group[group.oneofKind], field, allowExcessProperties, depth))
return false;
}
// check types
for (const field of this.fields) {
if (field.oneof !== undefined)
continue;
if (!this.field(message[field.localName], field, allowExcessProperties, depth))
return false;
}
return true;
}
field(arg, field, allowExcessProperties, depth) {
let repeated = field.repeat;
switch (field.kind) {
case "scalar":
if (arg === undefined)
return field.opt;
if (repeated)
return this.scalars(arg, field.T, depth, field.L);
return this.scalar(arg, field.T, field.L);
case "enum":
if (arg === undefined)
return field.opt;
if (repeated)
return this.scalars(arg, reflection_info_1.ScalarType.INT32, depth);
return this.scalar(arg, reflection_info_1.ScalarType.INT32);
case "message":
if (arg === undefined)
return true;
if (repeated)
return this.messages(arg, field.T(), allowExcessProperties, depth);
return this.message(arg, field.T(), allowExcessProperties, depth);
case "map":
if (typeof arg != 'object' || arg === null)
return false;
if (depth < 2)
return true;
if (!this.mapKeys(arg, field.K, depth))
return false;
switch (field.V.kind) {
case "scalar":
return this.scalars(Object.values(arg), field.V.T, depth, field.V.L);
case "enum":
return this.scalars(Object.values(arg), reflection_info_1.ScalarType.INT32, depth);
case "message":
return this.messages(Object.values(arg), field.V.T(), allowExcessProperties, depth);
}
break;
}
return true;
}
message(arg, type, allowExcessProperties, depth) {
if (allowExcessProperties) {
return type.isAssignable(arg, depth);
}
return type.is(arg, depth);
}
messages(arg, type, allowExcessProperties, depth) {
if (!Array.isArray(arg))
return false;
if (depth < 2)
return true;
if (allowExcessProperties) {
for (let i = 0; i < arg.length && i < depth; i++)
if (!type.isAssignable(arg[i], depth - 1))
return false;
}
else {
for (let i = 0; i < arg.length && i < depth; i++)
if (!type.is(arg[i], depth - 1))
return false;
}
return true;
}
scalar(arg, type, longType) {
let argType = typeof arg;
switch (type) {
case reflection_info_1.ScalarType.UINT64:
case reflection_info_1.ScalarType.FIXED64:
case reflection_info_1.ScalarType.INT64:
case reflection_info_1.ScalarType.SFIXED64:
case reflection_info_1.ScalarType.SINT64:
switch (longType) {
case reflection_info_1.LongType.BIGINT:
return argType == "bigint";
case reflection_info_1.LongType.NUMBER:
return argType == "number" && !isNaN(arg);
default:
return argType == "string";
}
case reflection_info_1.ScalarType.BOOL:
return argType == 'boolean';
case reflection_info_1.ScalarType.STRING:
return argType == 'string';
case reflection_info_1.ScalarType.BYTES:
return arg instanceof Uint8Array;
case reflection_info_1.ScalarType.DOUBLE:
case reflection_info_1.ScalarType.FLOAT:
return argType == 'number' && !isNaN(arg);
default:
// case ScalarType.UINT32:
// case ScalarType.FIXED32:
// case ScalarType.INT32:
// case ScalarType.SINT32:
// case ScalarType.SFIXED32:
return argType == 'number' && Number.isInteger(arg);
}
}
scalars(arg, type, depth, longType) {
if (!Array.isArray(arg))
return false;
if (depth < 2)
return true;
if (Array.isArray(arg))
for (let i = 0; i < arg.length && i < depth; i++)
if (!this.scalar(arg[i], type, longType))
return false;
return true;
}
mapKeys(map, type, depth) {
let keys = Object.keys(map);
switch (type) {
case reflection_info_1.ScalarType.INT32:
case reflection_info_1.ScalarType.FIXED32:
case reflection_info_1.ScalarType.SFIXED32:
case reflection_info_1.ScalarType.SINT32:
case reflection_info_1.ScalarType.UINT32:
return this.scalars(keys.slice(0, depth).map(k => parseInt(k)), type, depth);
case reflection_info_1.ScalarType.BOOL:
return this.scalars(keys.slice(0, depth).map(k => k == 'true' ? true : k == 'false' ? false : k), type, depth);
default:
return this.scalars(keys, type, depth, reflection_info_1.LongType.STRING);
}
}
}
exports.ReflectionTypeCheck = ReflectionTypeCheck;
/***/ }),
/***/ 5183:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.req = exports.json = exports.toBuffer = void 0;
const http = __importStar(__webpack_require__(8611));
const https = __importStar(__webpack_require__(5692));
async function toBuffer(stream) {
let length = 0;
const chunks = [];
for await (const chunk of stream) {
length += chunk.length;
chunks.push(chunk);
}
return Buffer.concat(chunks, length);
}
exports.toBuffer = toBuffer;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async function json(stream) {
const buf = await toBuffer(stream);
const str = buf.toString('utf8');
try {
return JSON.parse(str);
}
catch (_err) {
const err = _err;
err.message += ` (input: ${str})`;
throw err;
}
}
exports.json = json;
function req(url, opts = {}) {
const href = typeof url === 'string' ? url : url.href;
const req = (href.startsWith('https:') ? https : http).request(url, opts);
const promise = new Promise((resolve, reject) => {
req
.once('response', resolve)
.once('error', reject)
.end();
});
req.then = promise.then.bind(promise);
return req;
}
exports.req = req;
//# sourceMappingURL=helpers.js.map
/***/ }),
/***/ 8894:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Agent = void 0;
const net = __importStar(__webpack_require__(9278));
const http = __importStar(__webpack_require__(8611));
const https_1 = __webpack_require__(5692);
__exportStar(__webpack_require__(5183), exports);
const INTERNAL = Symbol('AgentBaseInternalState');
class Agent extends http.Agent {
constructor(opts) {
super(opts);
this[INTERNAL] = {};
}
/**
* Determine whether this is an `http` or `https` request.
*/
isSecureEndpoint(options) {
if (options) {
// First check the `secureEndpoint` property explicitly, since this
// means that a parent `Agent` is "passing through" to this instance.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if (typeof options.secureEndpoint === 'boolean') {
return options.secureEndpoint;
}
// If no explicit `secure` endpoint, check if `protocol` property is
// set. This will usually be the case since using a full string URL
// or `URL` instance should be the most common usage.
if (typeof options.protocol === 'string') {
return options.protocol === 'https:';
}
}
// Finally, if no `protocol` property was set, then fall back to
// checking the stack trace of the current call stack, and try to
// detect the "https" module.
const { stack } = new Error();
if (typeof stack !== 'string')
return false;
return stack
.split('\n')
.some((l) => l.indexOf('(https.js:') !== -1 ||
l.indexOf('node:https:') !== -1);
}
// In order to support async signatures in `connect()` and Node's native
// connection pooling in `http.Agent`, the array of sockets for each origin
// has to be updated synchronously. This is so the length of the array is
// accurate when `addRequest()` is next called. We achieve this by creating a
// fake socket and adding it to `sockets[origin]` and incrementing
// `totalSocketCount`.
incrementSockets(name) {
// If `maxSockets` and `maxTotalSockets` are both Infinity then there is no
// need to create a fake socket because Node.js native connection pooling
// will never be invoked.
if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) {
return null;
}
// All instances of `sockets` are expected TypeScript errors. The
// alternative is to add it as a private property of this class but that
// will break TypeScript subclassing.
if (!this.sockets[name]) {
// @ts-expect-error `sockets` is readonly in `@types/node`
this.sockets[name] = [];
}
const fakeSocket = new net.Socket({ writable: false });
this.sockets[name].push(fakeSocket);
// @ts-expect-error `totalSocketCount` isn't defined in `@types/node`
this.totalSocketCount++;
return fakeSocket;
}
decrementSockets(name, socket) {
if (!this.sockets[name] || socket === null) {
return;
}
const sockets = this.sockets[name];
const index = sockets.indexOf(socket);
if (index !== -1) {
sockets.splice(index, 1);
// @ts-expect-error `totalSocketCount` isn't defined in `@types/node`
this.totalSocketCount--;
if (sockets.length === 0) {
// @ts-expect-error `sockets` is readonly in `@types/node`
delete this.sockets[name];
}
}
}
// In order to properly update the socket pool, we need to call `getName()` on
// the core `https.Agent` if it is a secureEndpoint.
getName(options) {
const secureEndpoint = this.isSecureEndpoint(options);
if (secureEndpoint) {
// @ts-expect-error `getName()` isn't defined in `@types/node`
return https_1.Agent.prototype.getName.call(this, options);
}
// @ts-expect-error `getName()` isn't defined in `@types/node`
return super.getName(options);
}
createSocket(req, options, cb) {
const connectOpts = {
...options,
secureEndpoint: this.isSecureEndpoint(options),
};
const name = this.getName(connectOpts);
const fakeSocket = this.incrementSockets(name);
Promise.resolve()
.then(() => this.connect(req, connectOpts))
.then((socket) => {
this.decrementSockets(name, fakeSocket);
if (socket instanceof http.Agent) {
try {
// @ts-expect-error `addRequest()` isn't defined in `@types/node`
return socket.addRequest(req, connectOpts);
}
catch (err) {
return cb(err);
}
}
this[INTERNAL].currentSocket = socket;
// @ts-expect-error `createSocket()` isn't defined in `@types/node`
super.createSocket(req, options, cb);
}, (err) => {
this.decrementSockets(name, fakeSocket);
cb(err);
});
}
createConnection() {
const socket = this[INTERNAL].currentSocket;
this[INTERNAL].currentSocket = undefined;
if (!socket) {
throw new Error('No socket was returned in the `connect()` function');
}
return socket;
}
get defaultPort() {
return (this[INTERNAL].defaultPort ??
(this.protocol === 'https:' ? 443 : 80));
}
set defaultPort(v) {
if (this[INTERNAL]) {
this[INTERNAL].defaultPort = v;
}
}
get protocol() {
return (this[INTERNAL].protocol ??
(this.isSecureEndpoint() ? 'https:' : 'http:'));
}
set protocol(v) {
if (this[INTERNAL]) {
this[INTERNAL].protocol = v;
}
}
}
exports.Agent = Agent;
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 6110:
/***/ ((module, exports, __webpack_require__) => {
/* eslint-env browser */
/**
* This is the web browser implementation of `debug()`.
*/
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.storage = localstorage();
exports.destroy = (() => {
let warned = false;
return () => {
if (!warned) {
warned = true;
console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
}
};
})();
/**
* Colors.
*/
exports.colors = [
'#0000CC',
'#0000FF',
'#0033CC',
'#0033FF',
'#0066CC',
'#0066FF',
'#0099CC',
'#0099FF',
'#00CC00',
'#00CC33',
'#00CC66',
'#00CC99',
'#00CCCC',
'#00CCFF',
'#3300CC',
'#3300FF',
'#3333CC',
'#3333FF',
'#3366CC',
'#3366FF',
'#3399CC',
'#3399FF',
'#33CC00',
'#33CC33',
'#33CC66',
'#33CC99',
'#33CCCC',
'#33CCFF',
'#6600CC',
'#6600FF',
'#6633CC',
'#6633FF',
'#66CC00',
'#66CC33',
'#9900CC',
'#9900FF',
'#9933CC',
'#9933FF',
'#99CC00',
'#99CC33',
'#CC0000',
'#CC0033',
'#CC0066',
'#CC0099',
'#CC00CC',
'#CC00FF',
'#CC3300',
'#CC3333',
'#CC3366',
'#CC3399',
'#CC33CC',
'#CC33FF',
'#CC6600',
'#CC6633',
'#CC9900',
'#CC9933',
'#CCCC00',
'#CCCC33',
'#FF0000',
'#FF0033',
'#FF0066',
'#FF0099',
'#FF00CC',
'#FF00FF',
'#FF3300',
'#FF3333',
'#FF3366',
'#FF3399',
'#FF33CC',
'#FF33FF',
'#FF6600',
'#FF6633',
'#FF9900',
'#FF9933',
'#FFCC00',
'#FFCC33'
];
/**
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
* and the Firebug extension (any Firefox version) are known
* to support "%c" CSS customizations.
*
* TODO: add a `localStorage` variable to explicitly enable/disable colors
*/
// eslint-disable-next-line complexity
function useColors() {
// NB: In an Electron preload script, document will be defined but not fully
// initialized. Since we know we're in Chrome, we'll just detect this case
// explicitly
if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
return true;
}
// Internet Explorer and Edge do not support colors.
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
return false;
}
let m;
// Is webkit? http://stackoverflow.com/a/16459606/376773
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
// eslint-disable-next-line no-return-assign
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
// Is firebug? http://stackoverflow.com/a/398120/376773
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
// Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
// Double check webkit in userAgent just in case we are in a worker
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
}
/**
* Colorize log arguments if enabled.
*
* @api public
*/
function formatArgs(args) {
args[0] = (this.useColors ? '%c' : '') +
this.namespace +
(this.useColors ? ' %c' : ' ') +
args[0] +
(this.useColors ? '%c ' : ' ') +
'+' + module.exports.humanize(this.diff);
if (!this.useColors) {
return;
}
const c = 'color: ' + this.color;
args.splice(1, 0, c, 'color: inherit');
// The final "%c" is somewhat tricky, because there could be other
// arguments passed either before or after the %c, so we need to
// figure out the correct index to insert the CSS into
let index = 0;
let lastC = 0;
args[0].replace(/%[a-zA-Z%]/g, match => {
if (match === '%%') {
return;
}
index++;
if (match === '%c') {
// We only are interested in the *last* %c
// (the user may have provided their own)
lastC = index;
}
});
args.splice(lastC, 0, c);
}
/**
* Invokes `console.debug()` when available.
* No-op when `console.debug` is not a "function".
* If `console.debug` is not available, falls back
* to `console.log`.
*
* @api public
*/
exports.log = console.debug || console.log || (() => {});
/**
* Save `namespaces`.
*
* @param {String} namespaces
* @api private
*/
function save(namespaces) {
try {
if (namespaces) {
exports.storage.setItem('debug', namespaces);
} else {
exports.storage.removeItem('debug');
}
} catch (error) {
// Swallow
// XXX (@Qix-) should we be logging these?
}
}
/**
* Load `namespaces`.
*
* @return {String} returns the previously persisted debug modes
* @api private
*/
function load() {
let r;
try {
r = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;
} catch (error) {
// Swallow
// XXX (@Qix-) should we be logging these?
}
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
if (!r && typeof process !== 'undefined' && 'env' in process) {
r = process.env.DEBUG;
}
return r;
}
/**
* Localstorage attempts to return the localstorage.
*
* This is necessary because safari throws
* when a user disables cookies/localstorage
* and you attempt to access it.
*
* @return {LocalStorage}
* @api private
*/
function localstorage() {
try {
// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
// The Browser also has localStorage in the global context.
return localStorage;
} catch (error) {
// Swallow
// XXX (@Qix-) should we be logging these?
}
}
module.exports = __webpack_require__(897)(exports);
const {formatters} = module.exports;
/**
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
*/
formatters.j = function (v) {
try {
return JSON.stringify(v);
} catch (error) {
return '[UnexpectedJSONParseError]: ' + error.message;
}
};
/***/ }),
/***/ 897:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/**
* This is the common logic for both the Node.js and web browser
* implementations of `debug()`.
*/
function setup(env) {
createDebug.debug = createDebug;
createDebug.default = createDebug;
createDebug.coerce = coerce;
createDebug.disable = disable;
createDebug.enable = enable;
createDebug.enabled = enabled;
createDebug.humanize = __webpack_require__(744);
createDebug.destroy = destroy;
Object.keys(env).forEach(key => {
createDebug[key] = env[key];
});
/**
* The currently active debug mode names, and names to skip.
*/
createDebug.names = [];
createDebug.skips = [];
/**
* Map of special "%n" handling functions, for the debug "format" argument.
*
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
*/
createDebug.formatters = {};
/**
* Selects a color for a debug namespace
* @param {String} namespace The namespace string for the debug instance to be colored
* @return {Number|String} An ANSI color code for the given namespace
* @api private
*/
function selectColor(namespace) {
let hash = 0;
for (let i = 0; i < namespace.length; i++) {
hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
hash |= 0; // Convert to 32bit integer
}
return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
}
createDebug.selectColor = selectColor;
/**
* Create a debugger with the given `namespace`.
*
* @param {String} namespace
* @return {Function}
* @api public
*/
function createDebug(namespace) {
let prevTime;
let enableOverride = null;
let namespacesCache;
let enabledCache;
function debug(...args) {
// Disabled?
if (!debug.enabled) {
return;
}
const self = debug;
// Set `diff` timestamp
const curr = Number(new Date());
const ms = curr - (prevTime || curr);
self.diff = ms;
self.prev = prevTime;
self.curr = curr;
prevTime = curr;
args[0] = createDebug.coerce(args[0]);
if (typeof args[0] !== 'string') {
// Anything else let's inspect with %O
args.unshift('%O');
}
// Apply any `formatters` transformations
let index = 0;
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
// If we encounter an escaped % then don't increase the array index
if (match === '%%') {
return '%';
}
index++;
const formatter = createDebug.formatters[format];
if (typeof formatter === 'function') {
const val = args[index];
match = formatter.call(self, val);
// Now we need to remove `args[index]` since it's inlined in the `format`
args.splice(index, 1);
index--;
}
return match;
});
// Apply env-specific formatting (colors, etc.)
createDebug.formatArgs.call(self, args);
const logFn = self.log || createDebug.log;
logFn.apply(self, args);
}
debug.namespace = namespace;
debug.useColors = createDebug.useColors();
debug.color = createDebug.selectColor(namespace);
debug.extend = extend;
debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
Object.defineProperty(debug, 'enabled', {
enumerable: true,
configurable: false,
get: () => {
if (enableOverride !== null) {
return enableOverride;
}
if (namespacesCache !== createDebug.namespaces) {
namespacesCache = createDebug.namespaces;
enabledCache = createDebug.enabled(namespace);
}
return enabledCache;
},
set: v => {
enableOverride = v;
}
});
// Env-specific initialization logic for debug instances
if (typeof createDebug.init === 'function') {
createDebug.init(debug);
}
return debug;
}
function extend(namespace, delimiter) {
const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
newDebug.log = this.log;
return newDebug;
}
/**
* Enables a debug mode by namespaces. This can include modes
* separated by a colon and wildcards.
*
* @param {String} namespaces
* @api public
*/
function enable(namespaces) {
createDebug.save(namespaces);
createDebug.namespaces = namespaces;
createDebug.names = [];
createDebug.skips = [];
const split = (typeof namespaces === 'string' ? namespaces : '')
.trim()
.replace(/\s+/g, ',')
.split(',')
.filter(Boolean);
for (const ns of split) {
if (ns[0] === '-') {
createDebug.skips.push(ns.slice(1));
} else {
createDebug.names.push(ns);
}
}
}
/**
* Checks if the given string matches a namespace template, honoring
* asterisks as wildcards.
*
* @param {String} search
* @param {String} template
* @return {Boolean}
*/
function matchesTemplate(search, template) {
let searchIndex = 0;
let templateIndex = 0;
let starIndex = -1;
let matchIndex = 0;
while (searchIndex < search.length) {
if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {
// Match character or proceed with wildcard
if (template[templateIndex] === '*') {
starIndex = templateIndex;
matchIndex = searchIndex;
templateIndex++; // Skip the '*'
} else {
searchIndex++;
templateIndex++;
}
} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition
// Backtrack to the last '*' and try to match more characters
templateIndex = starIndex + 1;
matchIndex++;
searchIndex = matchIndex;
} else {
return false; // No match
}
}
// Handle trailing '*' in template
while (templateIndex < template.length && template[templateIndex] === '*') {
templateIndex++;
}
return templateIndex === template.length;
}
/**
* Disable debug output.
*
* @return {String} namespaces
* @api public
*/
function disable() {
const namespaces = [
...createDebug.names,
...createDebug.skips.map(namespace => '-' + namespace)
].join(',');
createDebug.enable('');
return namespaces;
}
/**
* Returns true if the given mode name is enabled, false otherwise.
*
* @param {String} name
* @return {Boolean}
* @api public
*/
function enabled(name) {
for (const skip of createDebug.skips) {
if (matchesTemplate(name, skip)) {
return false;
}
}
for (const ns of createDebug.names) {
if (matchesTemplate(name, ns)) {
return true;
}
}
return false;
}
/**
* Coerce `val`.
*
* @param {Mixed} val
* @return {Mixed}
* @api private
*/
function coerce(val) {
if (val instanceof Error) {
return val.stack || val.message;
}
return val;
}
/**
* XXX DO NOT USE. This is a temporary stub function.
* XXX It WILL be removed in the next major release.
*/
function destroy() {
console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
}
createDebug.enable(createDebug.load());
return createDebug;
}
module.exports = setup;
/***/ }),
/***/ 2830:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/**
* Detect Electron renderer / nwjs process, which is node, but we should
* treat as a browser.
*/
if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
module.exports = __webpack_require__(6110);
} else {
module.exports = __webpack_require__(5108);
}
/***/ }),
/***/ 5108:
/***/ ((module, exports, __webpack_require__) => {
/**
* Module dependencies.
*/
const tty = __webpack_require__(2018);
const util = __webpack_require__(9023);
/**
* This is the Node.js implementation of `debug()`.
*/
exports.init = init;
exports.log = log;
exports.formatArgs = formatArgs;
exports.save = save;
exports.load = load;
exports.useColors = useColors;
exports.destroy = util.deprecate(
() => {},
'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'
);
/**
* Colors.
*/
exports.colors = [6, 2, 3, 4, 5, 1];
try {
// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
// eslint-disable-next-line import/no-extraneous-dependencies
const supportsColor = __webpack_require__(1450);
if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
exports.colors = [
20,
21,
26,
27,
32,
33,
38,
39,
40,
41,
42,
43,
44,
45,
56,
57,
62,
63,
68,
69,
74,
75,
76,
77,
78,
79,
80,
81,
92,
93,
98,
99,
112,
113,
128,
129,
134,
135,
148,
149,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
178,
179,
184,
185,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
214,
215,
220,
221
];
}
} catch (error) {
// Swallow - we only care if `supports-color` is available; it doesn't have to be.
}
/**
* Build up the default `inspectOpts` object from the environment variables.
*
* $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
*/
exports.inspectOpts = Object.keys(process.env).filter(key => {
return /^debug_/i.test(key);
}).reduce((obj, key) => {
// Camel-case
const prop = key
.substring(6)
.toLowerCase()
.replace(/_([a-z])/g, (_, k) => {
return k.toUpperCase();
});
// Coerce string value into JS value
let val = process.env[key];
if (/^(yes|on|true|enabled)$/i.test(val)) {
val = true;
} else if (/^(no|off|false|disabled)$/i.test(val)) {
val = false;
} else if (val === 'null') {
val = null;
} else {
val = Number(val);
}
obj[prop] = val;
return obj;
}, {});
/**
* Is stdout a TTY? Colored output is enabled when `true`.
*/
function useColors() {
return 'colors' in exports.inspectOpts ?
Boolean(exports.inspectOpts.colors) :
tty.isatty(process.stderr.fd);
}
/**
* Adds ANSI color escape codes if enabled.
*
* @api public
*/
function formatArgs(args) {
const {namespace: name, useColors} = this;
if (useColors) {
const c = this.color;
const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
const prefix = ` ${colorCode};1m${name} \u001B[0m`;
args[0] = prefix + args[0].split('\n').join('\n' + prefix);
args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
} else {
args[0] = getDate() + name + ' ' + args[0];
}
}
function getDate() {
if (exports.inspectOpts.hideDate) {
return '';
}
return new Date().toISOString() + ' ';
}
/**
* Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.
*/
function log(...args) {
return process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\n');
}
/**
* Save `namespaces`.
*
* @param {String} namespaces
* @api private
*/
function save(namespaces) {
if (namespaces) {
process.env.DEBUG = namespaces;
} else {
// If you set a process.env field to null or undefined, it gets cast to the
// string 'null' or 'undefined'. Just delete instead.
delete process.env.DEBUG;
}
}
/**
* Load `namespaces`.
*
* @return {String} returns the previously persisted debug modes
* @api private
*/
function load() {
return process.env.DEBUG;
}
/**
* Init logic for `debug` instances.
*
* Create a new `inspectOpts` object in case `useColors` is set
* differently for a particular `debug` instance.
*/
function init(debug) {
debug.inspectOpts = {};
const keys = Object.keys(exports.inspectOpts);
for (let i = 0; i < keys.length; i++) {
debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
}
}
module.exports = __webpack_require__(897)(exports);
const {formatters} = module.exports;
/**
* Map %o to `util.inspect()`, all on a single line.
*/
formatters.o = function (v) {
this.inspectOpts.colors = this.useColors;
return util.inspect(v, this.inspectOpts)
.split('\n')
.map(str => str.trim())
.join(' ');
};
/**
* Map %O to `util.inspect()`, allowing multiple lines if needed.
*/
formatters.O = function (v) {
this.inspectOpts.colors = this.useColors;
return util.inspect(v, this.inspectOpts);
};
/***/ }),
/***/ 3813:
/***/ ((module) => {
module.exports = (flag, argv = process.argv) => {
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
const position = argv.indexOf(prefix + flag);
const terminatorPosition = argv.indexOf('--');
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
};
/***/ }),
/***/ 1970:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.HttpProxyAgent = void 0;
const net = __importStar(__webpack_require__(9278));
const tls = __importStar(__webpack_require__(4756));
const debug_1 = __importDefault(__webpack_require__(2830));
const events_1 = __webpack_require__(4434);
const agent_base_1 = __webpack_require__(8894);
const url_1 = __webpack_require__(7016);
const debug = (0, debug_1.default)('http-proxy-agent');
/**
* The `HttpProxyAgent` implements an HTTP Agent subclass that connects
* to the specified "HTTP proxy server" in order to proxy HTTP requests.
*/
class HttpProxyAgent extends agent_base_1.Agent {
constructor(proxy, opts) {
super(opts);
this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy;
this.proxyHeaders = opts?.headers ?? {};
debug('Creating new HttpProxyAgent instance: %o', this.proxy.href);
// Trim off the brackets from IPv6 addresses
const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, '');
const port = this.proxy.port
? parseInt(this.proxy.port, 10)
: this.proxy.protocol === 'https:'
? 443
: 80;
this.connectOpts = {
...(opts ? omit(opts, 'headers') : null),
host,
port,
};
}
addRequest(req, opts) {
req._header = null;
this.setRequestProps(req, opts);
// @ts-expect-error `addRequest()` isn't defined in `@types/node`
super.addRequest(req, opts);
}
setRequestProps(req, opts) {
const { proxy } = this;
const protocol = opts.secureEndpoint ? 'https:' : 'http:';
const hostname = req.getHeader('host') || 'localhost';
const base = `${protocol}//${hostname}`;
const url = new url_1.URL(req.path, base);
if (opts.port !== 80) {
url.port = String(opts.port);
}
// Change the `http.ClientRequest` instance's "path" field
// to the absolute path of the URL that will be requested.
req.path = String(url);
// Inject the `Proxy-Authorization` header if necessary.
const headers = typeof this.proxyHeaders === 'function'
? this.proxyHeaders()
: { ...this.proxyHeaders };
if (proxy.username || proxy.password) {
const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`;
}
if (!headers['Proxy-Connection']) {
headers['Proxy-Connection'] = this.keepAlive
? 'Keep-Alive'
: 'close';
}
for (const name of Object.keys(headers)) {
const value = headers[name];
if (value) {
req.setHeader(name, value);
}
}
}
async connect(req, opts) {
req._header = null;
if (!req.path.includes('://')) {
this.setRequestProps(req, opts);
}
// At this point, the http ClientRequest's internal `_header` field
// might have already been set. If this is the case then we'll need
// to re-generate the string since we just changed the `req.path`.
let first;
let endOfHeaders;
debug('Regenerating stored HTTP header string for request');
req._implicitHeader();
if (req.outputData && req.outputData.length > 0) {
debug('Patching connection write() output buffer with updated header');
first = req.outputData[0].data;
endOfHeaders = first.indexOf('\r\n\r\n') + 4;
req.outputData[0].data =
req._header + first.substring(endOfHeaders);
debug('Output buffer: %o', req.outputData[0].data);
}
// Create a socket connection to the proxy server.
let socket;
if (this.proxy.protocol === 'https:') {
debug('Creating `tls.Socket`: %o', this.connectOpts);
socket = tls.connect(this.connectOpts);
}
else {
debug('Creating `net.Socket`: %o', this.connectOpts);
socket = net.connect(this.connectOpts);
}
// Wait for the socket's `connect` event, so that this `callback()`
// function throws instead of the `http` request machinery. This is
// important for i.e. `PacProxyAgent` which determines a failed proxy
// connection via the `callback()` function throwing.
await (0, events_1.once)(socket, 'connect');
return socket;
}
}
HttpProxyAgent.protocols = ['http', 'https'];
exports.HttpProxyAgent = HttpProxyAgent;
function omit(obj, ...keys) {
const ret = {};
let key;
for (key in obj) {
if (!keys.includes(key)) {
ret[key] = obj[key];
}
}
return ret;
}
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 3669:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.HttpsProxyAgent = void 0;
const net = __importStar(__webpack_require__(9278));
const tls = __importStar(__webpack_require__(4756));
const assert_1 = __importDefault(__webpack_require__(2613));
const debug_1 = __importDefault(__webpack_require__(2830));
const agent_base_1 = __webpack_require__(8894);
const url_1 = __webpack_require__(7016);
const parse_proxy_response_1 = __webpack_require__(7943);
const debug = (0, debug_1.default)('https-proxy-agent');
const setServernameFromNonIpHost = (options) => {
if (options.servername === undefined &&
options.host &&
!net.isIP(options.host)) {
return {
...options,
servername: options.host,
};
}
return options;
};
/**
* The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to
* the specified "HTTP(s) proxy server" in order to proxy HTTPS requests.
*
* Outgoing HTTP requests are first tunneled through the proxy server using the
* `CONNECT` HTTP request method to establish a connection to the proxy server,
* and then the proxy server connects to the destination target and issues the
* HTTP request from the proxy server.
*
* `https:` requests have their socket connection upgraded to TLS once
* the connection to the proxy server has been established.
*/
class HttpsProxyAgent extends agent_base_1.Agent {
constructor(proxy, opts) {
super(opts);
this.options = { path: undefined };
this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy;
this.proxyHeaders = opts?.headers ?? {};
debug('Creating new HttpsProxyAgent instance: %o', this.proxy.href);
// Trim off the brackets from IPv6 addresses
const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, '');
const port = this.proxy.port
? parseInt(this.proxy.port, 10)
: this.proxy.protocol === 'https:'
? 443
: 80;
this.connectOpts = {
// Attempt to negotiate http/1.1 for proxy servers that support http/2
ALPNProtocols: ['http/1.1'],
...(opts ? omit(opts, 'headers') : null),
host,
port,
};
}
/**
* Called when the node-core HTTP client library is creating a
* new HTTP request.
*/
async connect(req, opts) {
const { proxy } = this;
if (!opts.host) {
throw new TypeError('No "host" provided');
}
// Create a socket connection to the proxy server.
let socket;
if (proxy.protocol === 'https:') {
debug('Creating `tls.Socket`: %o', this.connectOpts);
socket = tls.connect(setServernameFromNonIpHost(this.connectOpts));
}
else {
debug('Creating `net.Socket`: %o', this.connectOpts);
socket = net.connect(this.connectOpts);
}
const headers = typeof this.proxyHeaders === 'function'
? this.proxyHeaders()
: { ...this.proxyHeaders };
const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;
let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r\n`;
// Inject the `Proxy-Authorization` header if necessary.
if (proxy.username || proxy.password) {
const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`;
}
headers.Host = `${host}:${opts.port}`;
if (!headers['Proxy-Connection']) {
headers['Proxy-Connection'] = this.keepAlive
? 'Keep-Alive'
: 'close';
}
for (const name of Object.keys(headers)) {
payload += `${name}: ${headers[name]}\r\n`;
}
const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket);
socket.write(`${payload}\r\n`);
const { connect, buffered } = await proxyResponsePromise;
req.emit('proxyConnect', connect);
this.emit('proxyConnect', connect, req);
if (connect.statusCode === 200) {
req.once('socket', resume);
if (opts.secureEndpoint) {
// The proxy is connecting to a TLS server, so upgrade
// this socket connection to a TLS connection.
debug('Upgrading socket connection to TLS');
return tls.connect({
...omit(setServernameFromNonIpHost(opts), 'host', 'path', 'port'),
socket,
});
}
return socket;
}
// Some other status code that's not 200... need to re-play the HTTP
// header "data" events onto the socket once the HTTP machinery is
// attached so that the node core `http` can parse and handle the
// error status code.
// Close the original socket, and a new "fake" socket is returned
// instead, so that the proxy doesn't get the HTTP request
// written to it (which may contain `Authorization` headers or other
// sensitive data).
//
// See: https://hackerone.com/reports/541502
socket.destroy();
const fakeSocket = new net.Socket({ writable: false });
fakeSocket.readable = true;
// Need to wait for the "socket" event to re-play the "data" events.
req.once('socket', (s) => {
debug('Replaying proxy buffer for failed request');
(0, assert_1.default)(s.listenerCount('data') > 0);
// Replay the "buffered" Buffer onto the fake `socket`, since at
// this point the HTTP module machinery has been hooked up for
// the user.
s.push(buffered);
s.push(null);
});
return fakeSocket;
}
}
HttpsProxyAgent.protocols = ['http', 'https'];
exports.HttpsProxyAgent = HttpsProxyAgent;
function resume(socket) {
socket.resume();
}
function omit(obj, ...keys) {
const ret = {};
let key;
for (key in obj) {
if (!keys.includes(key)) {
ret[key] = obj[key];
}
}
return ret;
}
//# sourceMappingURL=index.js.map
/***/ }),
/***/ 7943:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseProxyResponse = void 0;
const debug_1 = __importDefault(__webpack_require__(2830));
const debug = (0, debug_1.default)('https-proxy-agent:parse-proxy-response');
function parseProxyResponse(socket) {
return new Promise((resolve, reject) => {
// we need to buffer any HTTP traffic that happens with the proxy before we get
// the CONNECT response, so that if the response is anything other than an "200"
// response code, then we can re-play the "data" events on the socket once the
// HTTP parser is hooked up...
let buffersLength = 0;
const buffers = [];
function read() {
const b = socket.read();
if (b)
ondata(b);
else
socket.once('readable', read);
}
function cleanup() {
socket.removeListener('end', onend);
socket.removeListener('error', onerror);
socket.removeListener('readable', read);
}
function onend() {
cleanup();
debug('onend');
reject(new Error('Proxy connection ended before receiving CONNECT response'));
}
function onerror(err) {
cleanup();
debug('onerror %o', err);
reject(err);
}
function ondata(b) {
buffers.push(b);
buffersLength += b.length;
const buffered = Buffer.concat(buffers, buffersLength);
const endOfHeaders = buffered.indexOf('\r\n\r\n');
if (endOfHeaders === -1) {
// keep buffering
debug('have not received end of HTTP headers yet...');
read();
return;
}
const headerParts = buffered
.slice(0, endOfHeaders)
.toString('ascii')
.split('\r\n');
const firstLine = headerParts.shift();
if (!firstLine) {
socket.destroy();
return reject(new Error('No header received from proxy CONNECT response'));
}
const firstLineParts = firstLine.split(' ');
const statusCode = +firstLineParts[1];
const statusText = firstLineParts.slice(2).join(' ');
const headers = {};
for (const header of headerParts) {
if (!header)
continue;
const firstColon = header.indexOf(':');
if (firstColon === -1) {
socket.destroy();
return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));
}
const key = header.slice(0, firstColon).toLowerCase();
const value = header.slice(firstColon + 1).trimStart();
const current = headers[key];
if (typeof current === 'string') {
headers[key] = [current, value];
}
else if (Array.isArray(current)) {
current.push(value);
}
else {
headers[key] = value;
}
}
debug('got proxy server response: %o %o', firstLine, headers);
cleanup();
resolve({
connect: {
statusCode,
statusText,
headers,
},
buffered,
});
}
socket.on('error', onerror);
socket.on('end', onend);
read();
});
}
exports.parseProxyResponse = parseProxyResponse;
//# sourceMappingURL=parse-proxy-response.js.map
/***/ }),
/***/ 744:
/***/ ((module) => {
/**
* Helpers.
*/
var s = 1000;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var w = d * 7;
var y = d * 365.25;
/**
* Parse or format the given `val`.
*
* Options:
*
* - `long` verbose formatting [false]
*
* @param {String|Number} val
* @param {Object} [options]
* @throws {Error} throw an error if val is not a non-empty string or a number
* @return {String|Number}
* @api public
*/
module.exports = function (val, options) {
options = options || {};
var type = typeof val;
if (type === 'string' && val.length > 0) {
return parse(val);
} else if (type === 'number' && isFinite(val)) {
return options.long ? fmtLong(val) : fmtShort(val);
}
throw new Error(
'val is not a non-empty string or a valid number. val=' +
JSON.stringify(val)
);
};
/**
* Parse the given `str` and return milliseconds.
*
* @param {String} str
* @return {Number}
* @api private
*/
function parse(str) {
str = String(str);
if (str.length > 100) {
return;
}
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
str
);
if (!match) {
return;
}
var n = parseFloat(match[1]);
var type = (match[2] || 'ms').toLowerCase();
switch (type) {
case 'years':
case 'year':
case 'yrs':
case 'yr':
case 'y':
return n * y;
case 'weeks':
case 'week':
case 'w':
return n * w;
case 'days':
case 'day':
case 'd':
return n * d;
case 'hours':
case 'hour':
case 'hrs':
case 'hr':
case 'h':
return n * h;
case 'minutes':
case 'minute':
case 'mins':
case 'min':
case 'm':
return n * m;
case 'seconds':
case 'second':
case 'secs':
case 'sec':
case 's':
return n * s;
case 'milliseconds':
case 'millisecond':
case 'msecs':
case 'msec':
case 'ms':
return n;
default:
return undefined;
}
}
/**
* Short format for `ms`.
*
* @param {Number} ms
* @return {String}
* @api private
*/
function fmtShort(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return Math.round(ms / d) + 'd';
}
if (msAbs >= h) {
return Math.round(ms / h) + 'h';
}
if (msAbs >= m) {
return Math.round(ms / m) + 'm';
}
if (msAbs >= s) {
return Math.round(ms / s) + 's';
}
return ms + 'ms';
}
/**
* Long format for `ms`.
*
* @param {Number} ms
* @return {String}
* @api private
*/
function fmtLong(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return plural(ms, msAbs, d, 'day');
}
if (msAbs >= h) {
return plural(ms, msAbs, h, 'hour');
}
if (msAbs >= m) {
return plural(ms, msAbs, m, 'minute');
}
if (msAbs >= s) {
return plural(ms, msAbs, s, 'second');
}
return ms + ' ms';
}
/**
* Pluralization helper.
*/
function plural(ms, msAbs, n, name) {
var isPlural = msAbs >= n * 1.5;
return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
}
/***/ }),
/***/ 1450:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
const os = __webpack_require__(857);
const tty = __webpack_require__(2018);
const hasFlag = __webpack_require__(3813);
const {env} = process;
let forceColor;
if (hasFlag('no-color') ||
hasFlag('no-colors') ||
hasFlag('color=false') ||
hasFlag('color=never')) {
forceColor = 0;
} else if (hasFlag('color') ||
hasFlag('colors') ||
hasFlag('color=true') ||
hasFlag('color=always')) {
forceColor = 1;
}
if ('FORCE_COLOR' in env) {
if (env.FORCE_COLOR === 'true') {
forceColor = 1;
} else if (env.FORCE_COLOR === 'false') {
forceColor = 0;
} else {
forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
}
}
function translateLevel(level) {
if (level === 0) {
return false;
}
return {
level,
hasBasic: true,
has256: level >= 2,
has16m: level >= 3
};
}
function supportsColor(haveStream, streamIsTTY) {
if (forceColor === 0) {
return 0;
}
if (hasFlag('color=16m') ||
hasFlag('color=full') ||
hasFlag('color=truecolor')) {
return 3;
}
if (hasFlag('color=256')) {
return 2;
}
if (haveStream && !streamIsTTY && forceColor === undefined) {
return 0;
}
const min = forceColor || 0;
if (env.TERM === 'dumb') {
return min;
}
if (process.platform === 'win32') {
// Windows 10 build 10586 is the first Windows release that supports 256 colors.
// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
const osRelease = os.release().split('.');
if (
Number(osRelease[0]) >= 10 &&
Number(osRelease[2]) >= 10586
) {
return Number(osRelease[2]) >= 14931 ? 3 : 2;
}
return 1;
}
if ('CI' in env) {
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
return 1;
}
return min;
}
if ('TEAMCITY_VERSION' in env) {
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
}
if (env.COLORTERM === 'truecolor') {
return 3;
}
if ('TERM_PROGRAM' in env) {
const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
switch (env.TERM_PROGRAM) {
case 'iTerm.app':
return version >= 3 ? 3 : 2;
case 'Apple_Terminal':
return 2;
// No default
}
}
if (/-256(color)?$/i.test(env.TERM)) {
return 2;
}
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
return 1;
}
if ('COLORTERM' in env) {
return 1;
}
return min;
}
function getSupportLevel(stream) {
const level = supportsColor(stream, stream && stream.isTTY);
return translateLevel(level);
}
module.exports = {
supportsColor: getSupportLevel,
stdout: translateLevel(supportsColor(true, tty.isatty(1))),
stderr: translateLevel(supportsColor(true, tty.isatty(2)))
};
/***/ }),
/***/ 30:
/***/ ((__unused_webpack_module, exports) => {
var __webpack_unused_export__;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
__webpack_unused_export__ = ({ value: true });
exports.w = void 0;
/**
* Holds the singleton operationRequestMap, to be shared across CJS and ESM imports.
*/
exports.w = {
operationRequestMap: new WeakMap(),
};
//# sourceMappingURL=state-cjs.js.map
/***/ }),
/***/ 9437:
/***/ ((__unused_webpack_module, exports) => {
var __webpack_unused_export__;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
__webpack_unused_export__ = ({ value: true });
exports.w = void 0;
/**
* @internal
*
* Holds the singleton instrumenter, to be shared across CJS and ESM imports.
*/
exports.w = {
instrumenterImplementation: undefined,
};
//# sourceMappingURL=state-cjs.js.map
/***/ }),
/***/ 8658:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// This file exists as a CommonJS module to read the version from package.json.
// In an ESM package, using `require()` directly in .ts files requires disabling
// ESLint rules and doesn't work reliably across all Node.js versions.
// By keeping this as a .cjs file, we can use require() naturally and export
// the version for the ESM modules to import.
const packageJson = __webpack_require__(4012)
module.exports = { version: packageJson.version }
/***/ }),
/***/ 6971:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
w3: () => (/* binding */ isFeatureAvailable),
P3: () => (/* binding */ restoreCache)
});
// UNUSED EXPORTS: CACHE_READ_DENIED_PREFIX, CACHE_WRITE_DENIED_PREFIX, CacheReadDeniedError, CacheWriteDeniedError, FinalizeCacheError, ReserveCacheError, ValidationError, saveCache
// NAMESPACE OBJECT: ./node_modules/@azure/storage-blob/dist/esm/generated/src/models/mappers.js
var mappers_namespaceObject = {};
__webpack_require__.r(mappers_namespaceObject);
__webpack_require__.d(mappers_namespaceObject, {
AccessPolicy: () => (AccessPolicy),
AppendBlobAppendBlockExceptionHeaders: () => (AppendBlobAppendBlockExceptionHeaders),
AppendBlobAppendBlockFromUrlExceptionHeaders: () => (AppendBlobAppendBlockFromUrlExceptionHeaders),
AppendBlobAppendBlockFromUrlHeaders: () => (AppendBlobAppendBlockFromUrlHeaders),
AppendBlobAppendBlockHeaders: () => (AppendBlobAppendBlockHeaders),
AppendBlobCreateExceptionHeaders: () => (AppendBlobCreateExceptionHeaders),
AppendBlobCreateHeaders: () => (AppendBlobCreateHeaders),
AppendBlobSealExceptionHeaders: () => (AppendBlobSealExceptionHeaders),
AppendBlobSealHeaders: () => (AppendBlobSealHeaders),
ArrowConfiguration: () => (ArrowConfiguration),
ArrowField: () => (ArrowField),
BlobAbortCopyFromURLExceptionHeaders: () => (BlobAbortCopyFromURLExceptionHeaders),
BlobAbortCopyFromURLHeaders: () => (BlobAbortCopyFromURLHeaders),
BlobAcquireLeaseExceptionHeaders: () => (BlobAcquireLeaseExceptionHeaders),
BlobAcquireLeaseHeaders: () => (BlobAcquireLeaseHeaders),
BlobBreakLeaseExceptionHeaders: () => (BlobBreakLeaseExceptionHeaders),
BlobBreakLeaseHeaders: () => (BlobBreakLeaseHeaders),
BlobChangeLeaseExceptionHeaders: () => (BlobChangeLeaseExceptionHeaders),
BlobChangeLeaseHeaders: () => (BlobChangeLeaseHeaders),
BlobCopyFromURLExceptionHeaders: () => (BlobCopyFromURLExceptionHeaders),
BlobCopyFromURLHeaders: () => (BlobCopyFromURLHeaders),
BlobCreateSnapshotExceptionHeaders: () => (BlobCreateSnapshotExceptionHeaders),
BlobCreateSnapshotHeaders: () => (BlobCreateSnapshotHeaders),
BlobDeleteExceptionHeaders: () => (BlobDeleteExceptionHeaders),
BlobDeleteHeaders: () => (BlobDeleteHeaders),
BlobDeleteImmutabilityPolicyExceptionHeaders: () => (BlobDeleteImmutabilityPolicyExceptionHeaders),
BlobDeleteImmutabilityPolicyHeaders: () => (BlobDeleteImmutabilityPolicyHeaders),
BlobDownloadExceptionHeaders: () => (BlobDownloadExceptionHeaders),
BlobDownloadHeaders: () => (BlobDownloadHeaders),
BlobFlatListSegment: () => (BlobFlatListSegment),
BlobGetAccountInfoExceptionHeaders: () => (BlobGetAccountInfoExceptionHeaders),
BlobGetAccountInfoHeaders: () => (BlobGetAccountInfoHeaders),
BlobGetPropertiesExceptionHeaders: () => (BlobGetPropertiesExceptionHeaders),
BlobGetPropertiesHeaders: () => (BlobGetPropertiesHeaders),
BlobGetTagsExceptionHeaders: () => (BlobGetTagsExceptionHeaders),
BlobGetTagsHeaders: () => (BlobGetTagsHeaders),
BlobHierarchyListSegment: () => (BlobHierarchyListSegment),
BlobItemInternal: () => (BlobItemInternal),
BlobName: () => (BlobName),
BlobPrefix: () => (BlobPrefix),
BlobPropertiesInternal: () => (BlobPropertiesInternal),
BlobQueryExceptionHeaders: () => (BlobQueryExceptionHeaders),
BlobQueryHeaders: () => (BlobQueryHeaders),
BlobReleaseLeaseExceptionHeaders: () => (BlobReleaseLeaseExceptionHeaders),
BlobReleaseLeaseHeaders: () => (BlobReleaseLeaseHeaders),
BlobRenewLeaseExceptionHeaders: () => (BlobRenewLeaseExceptionHeaders),
BlobRenewLeaseHeaders: () => (BlobRenewLeaseHeaders),
BlobServiceProperties: () => (BlobServiceProperties),
BlobServiceStatistics: () => (BlobServiceStatistics),
BlobSetExpiryExceptionHeaders: () => (BlobSetExpiryExceptionHeaders),
BlobSetExpiryHeaders: () => (BlobSetExpiryHeaders),
BlobSetHttpHeadersExceptionHeaders: () => (BlobSetHttpHeadersExceptionHeaders),
BlobSetHttpHeadersHeaders: () => (BlobSetHttpHeadersHeaders),
BlobSetImmutabilityPolicyExceptionHeaders: () => (BlobSetImmutabilityPolicyExceptionHeaders),
BlobSetImmutabilityPolicyHeaders: () => (BlobSetImmutabilityPolicyHeaders),
BlobSetLegalHoldExceptionHeaders: () => (BlobSetLegalHoldExceptionHeaders),
BlobSetLegalHoldHeaders: () => (BlobSetLegalHoldHeaders),
BlobSetMetadataExceptionHeaders: () => (BlobSetMetadataExceptionHeaders),
BlobSetMetadataHeaders: () => (BlobSetMetadataHeaders),
BlobSetTagsExceptionHeaders: () => (BlobSetTagsExceptionHeaders),
BlobSetTagsHeaders: () => (BlobSetTagsHeaders),
BlobSetTierExceptionHeaders: () => (BlobSetTierExceptionHeaders),
BlobSetTierHeaders: () => (BlobSetTierHeaders),
BlobStartCopyFromURLExceptionHeaders: () => (BlobStartCopyFromURLExceptionHeaders),
BlobStartCopyFromURLHeaders: () => (BlobStartCopyFromURLHeaders),
BlobTag: () => (BlobTag),
BlobTags: () => (BlobTags),
BlobUndeleteExceptionHeaders: () => (BlobUndeleteExceptionHeaders),
BlobUndeleteHeaders: () => (BlobUndeleteHeaders),
Block: () => (Block),
BlockBlobCommitBlockListExceptionHeaders: () => (BlockBlobCommitBlockListExceptionHeaders),
BlockBlobCommitBlockListHeaders: () => (BlockBlobCommitBlockListHeaders),
BlockBlobGetBlockListExceptionHeaders: () => (BlockBlobGetBlockListExceptionHeaders),
BlockBlobGetBlockListHeaders: () => (BlockBlobGetBlockListHeaders),
BlockBlobPutBlobFromUrlExceptionHeaders: () => (BlockBlobPutBlobFromUrlExceptionHeaders),
BlockBlobPutBlobFromUrlHeaders: () => (BlockBlobPutBlobFromUrlHeaders),
BlockBlobStageBlockExceptionHeaders: () => (BlockBlobStageBlockExceptionHeaders),
BlockBlobStageBlockFromURLExceptionHeaders: () => (BlockBlobStageBlockFromURLExceptionHeaders),
BlockBlobStageBlockFromURLHeaders: () => (BlockBlobStageBlockFromURLHeaders),
BlockBlobStageBlockHeaders: () => (BlockBlobStageBlockHeaders),
BlockBlobUploadExceptionHeaders: () => (BlockBlobUploadExceptionHeaders),
BlockBlobUploadHeaders: () => (BlockBlobUploadHeaders),
BlockList: () => (BlockList),
BlockLookupList: () => (BlockLookupList),
ClearRange: () => (ClearRange),
ContainerAcquireLeaseExceptionHeaders: () => (ContainerAcquireLeaseExceptionHeaders),
ContainerAcquireLeaseHeaders: () => (ContainerAcquireLeaseHeaders),
ContainerBreakLeaseExceptionHeaders: () => (ContainerBreakLeaseExceptionHeaders),
ContainerBreakLeaseHeaders: () => (ContainerBreakLeaseHeaders),
ContainerChangeLeaseExceptionHeaders: () => (ContainerChangeLeaseExceptionHeaders),
ContainerChangeLeaseHeaders: () => (ContainerChangeLeaseHeaders),
ContainerCreateExceptionHeaders: () => (ContainerCreateExceptionHeaders),
ContainerCreateHeaders: () => (ContainerCreateHeaders),
ContainerDeleteExceptionHeaders: () => (ContainerDeleteExceptionHeaders),
ContainerDeleteHeaders: () => (ContainerDeleteHeaders),
ContainerFilterBlobsExceptionHeaders: () => (ContainerFilterBlobsExceptionHeaders),
ContainerFilterBlobsHeaders: () => (ContainerFilterBlobsHeaders),
ContainerGetAccessPolicyExceptionHeaders: () => (ContainerGetAccessPolicyExceptionHeaders),
ContainerGetAccessPolicyHeaders: () => (ContainerGetAccessPolicyHeaders),
ContainerGetAccountInfoExceptionHeaders: () => (ContainerGetAccountInfoExceptionHeaders),
ContainerGetAccountInfoHeaders: () => (ContainerGetAccountInfoHeaders),
ContainerGetPropertiesExceptionHeaders: () => (ContainerGetPropertiesExceptionHeaders),
ContainerGetPropertiesHeaders: () => (ContainerGetPropertiesHeaders),
ContainerItem: () => (ContainerItem),
ContainerListBlobFlatSegmentExceptionHeaders: () => (ContainerListBlobFlatSegmentExceptionHeaders),
ContainerListBlobFlatSegmentHeaders: () => (ContainerListBlobFlatSegmentHeaders),
ContainerListBlobHierarchySegmentExceptionHeaders: () => (ContainerListBlobHierarchySegmentExceptionHeaders),
ContainerListBlobHierarchySegmentHeaders: () => (ContainerListBlobHierarchySegmentHeaders),
ContainerProperties: () => (ContainerProperties),
ContainerReleaseLeaseExceptionHeaders: () => (ContainerReleaseLeaseExceptionHeaders),
ContainerReleaseLeaseHeaders: () => (ContainerReleaseLeaseHeaders),
ContainerRenameExceptionHeaders: () => (ContainerRenameExceptionHeaders),
ContainerRenameHeaders: () => (ContainerRenameHeaders),
ContainerRenewLeaseExceptionHeaders: () => (ContainerRenewLeaseExceptionHeaders),
ContainerRenewLeaseHeaders: () => (ContainerRenewLeaseHeaders),
ContainerRestoreExceptionHeaders: () => (ContainerRestoreExceptionHeaders),
ContainerRestoreHeaders: () => (ContainerRestoreHeaders),
ContainerSetAccessPolicyExceptionHeaders: () => (ContainerSetAccessPolicyExceptionHeaders),
ContainerSetAccessPolicyHeaders: () => (ContainerSetAccessPolicyHeaders),
ContainerSetMetadataExceptionHeaders: () => (ContainerSetMetadataExceptionHeaders),
ContainerSetMetadataHeaders: () => (ContainerSetMetadataHeaders),
ContainerSubmitBatchExceptionHeaders: () => (ContainerSubmitBatchExceptionHeaders),
ContainerSubmitBatchHeaders: () => (ContainerSubmitBatchHeaders),
CorsRule: () => (CorsRule),
DelimitedTextConfiguration: () => (DelimitedTextConfiguration),
FilterBlobItem: () => (FilterBlobItem),
FilterBlobSegment: () => (FilterBlobSegment),
GeoReplication: () => (GeoReplication),
JsonTextConfiguration: () => (JsonTextConfiguration),
KeyInfo: () => (KeyInfo),
ListBlobsFlatSegmentResponse: () => (ListBlobsFlatSegmentResponse),
ListBlobsHierarchySegmentResponse: () => (ListBlobsHierarchySegmentResponse),
ListContainersSegmentResponse: () => (ListContainersSegmentResponse),
Logging: () => (Logging),
Metrics: () => (Metrics),
PageBlobClearPagesExceptionHeaders: () => (PageBlobClearPagesExceptionHeaders),
PageBlobClearPagesHeaders: () => (PageBlobClearPagesHeaders),
PageBlobCopyIncrementalExceptionHeaders: () => (PageBlobCopyIncrementalExceptionHeaders),
PageBlobCopyIncrementalHeaders: () => (PageBlobCopyIncrementalHeaders),
PageBlobCreateExceptionHeaders: () => (PageBlobCreateExceptionHeaders),
PageBlobCreateHeaders: () => (PageBlobCreateHeaders),
PageBlobGetPageRangesDiffExceptionHeaders: () => (PageBlobGetPageRangesDiffExceptionHeaders),
PageBlobGetPageRangesDiffHeaders: () => (PageBlobGetPageRangesDiffHeaders),
PageBlobGetPageRangesExceptionHeaders: () => (PageBlobGetPageRangesExceptionHeaders),
PageBlobGetPageRangesHeaders: () => (PageBlobGetPageRangesHeaders),
PageBlobResizeExceptionHeaders: () => (PageBlobResizeExceptionHeaders),
PageBlobResizeHeaders: () => (PageBlobResizeHeaders),
PageBlobUpdateSequenceNumberExceptionHeaders: () => (PageBlobUpdateSequenceNumberExceptionHeaders),
PageBlobUpdateSequenceNumberHeaders: () => (PageBlobUpdateSequenceNumberHeaders),
PageBlobUploadPagesExceptionHeaders: () => (PageBlobUploadPagesExceptionHeaders),
PageBlobUploadPagesFromURLExceptionHeaders: () => (PageBlobUploadPagesFromURLExceptionHeaders),
PageBlobUploadPagesFromURLHeaders: () => (PageBlobUploadPagesFromURLHeaders),
PageBlobUploadPagesHeaders: () => (PageBlobUploadPagesHeaders),
PageList: () => (PageList),
PageRange: () => (PageRange),
QueryFormat: () => (QueryFormat),
QueryRequest: () => (QueryRequest),
QuerySerialization: () => (QuerySerialization),
RetentionPolicy: () => (RetentionPolicy),
ServiceFilterBlobsExceptionHeaders: () => (ServiceFilterBlobsExceptionHeaders),
ServiceFilterBlobsHeaders: () => (ServiceFilterBlobsHeaders),
ServiceGetAccountInfoExceptionHeaders: () => (ServiceGetAccountInfoExceptionHeaders),
ServiceGetAccountInfoHeaders: () => (ServiceGetAccountInfoHeaders),
ServiceGetPropertiesExceptionHeaders: () => (ServiceGetPropertiesExceptionHeaders),
ServiceGetPropertiesHeaders: () => (ServiceGetPropertiesHeaders),
ServiceGetStatisticsExceptionHeaders: () => (ServiceGetStatisticsExceptionHeaders),
ServiceGetStatisticsHeaders: () => (ServiceGetStatisticsHeaders),
ServiceGetUserDelegationKeyExceptionHeaders: () => (ServiceGetUserDelegationKeyExceptionHeaders),
ServiceGetUserDelegationKeyHeaders: () => (ServiceGetUserDelegationKeyHeaders),
ServiceListContainersSegmentExceptionHeaders: () => (ServiceListContainersSegmentExceptionHeaders),
ServiceListContainersSegmentHeaders: () => (ServiceListContainersSegmentHeaders),
ServiceSetPropertiesExceptionHeaders: () => (ServiceSetPropertiesExceptionHeaders),
ServiceSetPropertiesHeaders: () => (ServiceSetPropertiesHeaders),
ServiceSubmitBatchExceptionHeaders: () => (ServiceSubmitBatchExceptionHeaders),
ServiceSubmitBatchHeaders: () => (ServiceSubmitBatchHeaders),
SignedIdentifier: () => (SignedIdentifier),
StaticWebsite: () => (StaticWebsite),
StorageError: () => (StorageError),
UserDelegationKey: () => (UserDelegationKey)
});
// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js + 7 modules
var lib_core = __webpack_require__(3838);
// EXTERNAL MODULE: external "path"
var external_path_ = __webpack_require__(6928);
// EXTERNAL MODULE: ./node_modules/@actions/exec/lib/exec.js + 2 modules
var exec = __webpack_require__(5260);
// EXTERNAL MODULE: ./node_modules/@actions/glob/lib/glob.js + 17 modules
var lib_glob = __webpack_require__(2377);
// EXTERNAL MODULE: ./node_modules/@actions/io/lib/io.js
var io = __webpack_require__(8701);
// EXTERNAL MODULE: external "crypto"
var external_crypto_ = __webpack_require__(6982);
// EXTERNAL MODULE: external "fs"
var external_fs_ = __webpack_require__(9896);
// EXTERNAL MODULE: ./node_modules/semver/index.js
var semver = __webpack_require__(2088);
// EXTERNAL MODULE: external "util"
var external_util_ = __webpack_require__(9023);
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/constants.js
var CacheFilename;
(function (CacheFilename) {
CacheFilename["Gzip"] = "cache.tgz";
CacheFilename["Zstd"] = "cache.tzst";
})(CacheFilename || (CacheFilename = {}));
var CompressionMethod;
(function (CompressionMethod) {
CompressionMethod["Gzip"] = "gzip";
// Long range mode was added to zstd in v1.3.2.
// This enum is for earlier version of zstd that does not have --long support
CompressionMethod["ZstdWithoutLong"] = "zstd-without-long";
CompressionMethod["Zstd"] = "zstd";
})(CompressionMethod || (CompressionMethod = {}));
var ArchiveToolType;
(function (ArchiveToolType) {
ArchiveToolType["GNU"] = "gnu";
ArchiveToolType["BSD"] = "bsd";
})(ArchiveToolType || (ArchiveToolType = {}));
// The default number of retry attempts.
const DefaultRetryAttempts = 2;
// The default delay in milliseconds between retry attempts.
const DefaultRetryDelay = 5000;
// Socket timeout in milliseconds during download. If no traffic is received
// over the socket during this period, the socket is destroyed and the download
// is aborted.
const SocketTimeout = 5000;
// The default path of GNUtar on hosted Windows runners
const GnuTarPathOnWindows = `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe`;
// The default path of BSDtar on hosted Windows runners
const SystemTarPathOnWindows = `${process.env['SYSTEMDRIVE']}\\Windows\\System32\\tar.exe`;
const TarFilename = 'cache.tar';
const constants_ManifestFilename = 'manifest.txt';
const CacheFileSizeLimit = 10 * Math.pow(1024, 3); // 10GiB per repository
// Prefix the cache backend embeds in a read-denial message (v2 twirp
// GetCacheEntryDownloadURL error or the GHES v1 `_apis/artifactcache` 403 body).
// Shared so cache.ts and cacheHttpClient.ts match the same contract value.
const CacheReadDeniedMessagePrefix = 'cache read denied:';
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/cacheUtils.js
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __asyncValues = (undefined && undefined.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
const versionSalt = '1.0';
// From https://github.com/actions/toolkit/blob/main/packages/tool-cache/src/tool-cache.ts#L23
function createTempDirectory() {
return __awaiter(this, void 0, void 0, function* () {
const IS_WINDOWS = process.platform === 'win32';
let tempDirectory = process.env['RUNNER_TEMP'] || '';
if (!tempDirectory) {
let baseLocation;
if (IS_WINDOWS) {
// On Windows use the USERPROFILE env variable
baseLocation = process.env['USERPROFILE'] || 'C:\\';
}
else {
if (process.platform === 'darwin') {
baseLocation = '/Users';
}
else {
baseLocation = '/home';
}
}
tempDirectory = external_path_.join(baseLocation, 'actions', 'temp');
}
const dest = external_path_.join(tempDirectory, external_crypto_.randomUUID());
yield io/* mkdirP */.U$(dest);
return dest;
});
}
function getArchiveFileSizeInBytes(filePath) {
return external_fs_.statSync(filePath).size;
}
function resolvePaths(patterns) {
return __awaiter(this, void 0, void 0, function* () {
var _a, e_1, _b, _c;
var _d;
const paths = [];
const workspace = (_d = process.env['GITHUB_WORKSPACE']) !== null && _d !== void 0 ? _d : process.cwd();
const globber = yield glob.create(patterns.join('\n'), {
implicitDescendants: false
});
try {
for (var _e = true, _f = __asyncValues(globber.globGenerator()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {
_c = _g.value;
_e = false;
const file = _c;
const relativeFile = path
.relative(workspace, file)
.replace(new RegExp(`\\${path.sep}`, 'g'), '/');
core.debug(`Matched: ${relativeFile}`);
// Paths are made relative so the tar entries are all relative to the root of the workspace.
if (relativeFile === '') {
// path.relative returns empty string if workspace and file are equal
paths.push('.');
}
else {
paths.push(`${relativeFile}`);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);
}
finally { if (e_1) throw e_1.error; }
}
return paths;
});
}
function unlinkFile(filePath) {
return __awaiter(this, void 0, void 0, function* () {
return external_util_.promisify(external_fs_.unlink)(filePath);
});
}
function getVersion(app_1) {
return __awaiter(this, arguments, void 0, function* (app, additionalArgs = []) {
let versionOutput = '';
additionalArgs.push('--version');
lib_core/* debug */.Yz(`Checking ${app} ${additionalArgs.join(' ')}`);
try {
yield exec/* exec */.m(`${app}`, additionalArgs, {
ignoreReturnCode: true,
silent: true,
listeners: {
stdout: (data) => (versionOutput += data.toString()),
stderr: (data) => (versionOutput += data.toString())
}
});
}
catch (err) {
lib_core/* debug */.Yz(err.message);
}
versionOutput = versionOutput.trim();
lib_core/* debug */.Yz(versionOutput);
return versionOutput;
});
}
// Use zstandard if possible to maximize cache performance
function getCompressionMethod() {
return __awaiter(this, void 0, void 0, function* () {
const versionOutput = yield getVersion('zstd', ['--quiet']);
const version = semver.clean(versionOutput);
lib_core/* debug */.Yz(`zstd version: ${version}`);
if (versionOutput === '') {
return CompressionMethod.Gzip;
}
else {
return CompressionMethod.ZstdWithoutLong;
}
});
}
function getCacheFileName(compressionMethod) {
return compressionMethod === CompressionMethod.Gzip
? CacheFilename.Gzip
: CacheFilename.Zstd;
}
function getGnuTarPathOnWindows() {
return __awaiter(this, void 0, void 0, function* () {
if (external_fs_.existsSync(GnuTarPathOnWindows)) {
return GnuTarPathOnWindows;
}
const versionOutput = yield getVersion('tar');
return versionOutput.toLowerCase().includes('gnu tar') ? io/* which */.K7('tar') : '';
});
}
function assertDefined(name, value) {
if (value === undefined) {
throw Error(`Expected ${name} but value was undefiend`);
}
return value;
}
function getCacheVersion(paths, compressionMethod, enableCrossOsArchive = false) {
// don't pass changes upstream
const components = paths.slice();
// Add compression method to cache version to restore
// compressed cache as per compression method
if (compressionMethod) {
components.push(compressionMethod);
}
// Only check for windows platforms if enableCrossOsArchive is false
if (process.platform === 'win32' && !enableCrossOsArchive) {
components.push('windows-only');
}
// Add salt to cache version to support breaking changes in cache entry
components.push(versionSalt);
return external_crypto_.createHash('sha256').update(components.join('|')).digest('hex');
}
function getRuntimeToken() {
const token = process.env['ACTIONS_RUNTIME_TOKEN'];
if (!token) {
throw new Error('Unable to get the ACTIONS_RUNTIME_TOKEN env variable');
}
return token;
}
//# sourceMappingURL=cacheUtils.js.map
// EXTERNAL MODULE: ./node_modules/@actions/http-client/lib/index.js + 1 modules
var lib = __webpack_require__(4942);
// EXTERNAL MODULE: ./node_modules/@actions/http-client/lib/auth.js
var auth = __webpack_require__(2145);
// EXTERNAL MODULE: external "url"
var external_url_ = __webpack_require__(7016);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/abort-controller/AbortError.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This error is thrown when an asynchronous operation has been aborted.
* Check for this error by testing the `name` that the name property of the
* error matches `"AbortError"`.
*
* @example
* ```ts snippet:ReadmeSampleAbortError
* import { AbortError } from "@typespec/ts-http-runtime";
*
* async function doAsyncWork(options: { abortSignal: AbortSignal }): Promise<void> {
* if (options.abortSignal.aborted) {
* throw new AbortError();
* }
*
* // do async work
* }
*
* const controller = new AbortController();
* controller.abort();
*
* try {
* doAsyncWork({ abortSignal: controller.signal });
* } catch (e) {
* if (e instanceof Error && e.name === "AbortError") {
* // handle abort error here.
* }
* }
* ```
*/
class AbortError extends Error {
constructor(message) {
super(message);
this.name = "AbortError";
}
}
//# sourceMappingURL=AbortError.js.map
// EXTERNAL MODULE: external "node:os"
var external_node_os_ = __webpack_require__(8161);
// EXTERNAL MODULE: external "node:util"
var external_node_util_ = __webpack_require__(7975);
// EXTERNAL MODULE: external "node:process"
var external_node_process_ = __webpack_require__(1708);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/logger/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function log(message, ...args) {
external_node_process_.stderr.write(`${external_node_util_.format(message, ...args)}${external_node_os_.EOL}`);
}
//# sourceMappingURL=log.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/env.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Returns the value of the specified environment variable.
*
* @internal
*/
function getEnvironmentVariable(name) {
return external_node_process_.env[name];
}
/**
* Emits a Node.js process warning.
*
* @internal
*/
function env_emitNodeWarning(warning) {
process.emitWarning(warning);
}
/**
* A constant that indicates whether the environment the code is running is a Web Browser.
*/
const isBrowser = false;
/**
* A constant that indicates whether the environment the code is running is a Web Worker.
*/
const isWebWorker = false;
/**
* A constant that indicates whether the environment the code is running is Deno.
*/
const isDeno = typeof external_node_process_.versions.deno === "string" && external_node_process_.versions.deno.length > 0;
/**
* A constant that indicates whether the environment the code is running is Bun.sh.
*/
const isBun = typeof external_node_process_.versions.bun === "string" && external_node_process_.versions.bun.length > 0;
/**
* A constant that indicates whether the environment the code is running is a Node.js compatible environment.
*/
const env_isNodeLike = true;
/**
* A constant that indicates whether the environment the code is running is Node.JS.
*/
const isNodeRuntime = !isBun && !isDeno;
/**
* A constant that indicates whether the environment the code is running is in React-Native.
*/
const isReactNative = false;
//# sourceMappingURL=env.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/logger/debug.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const debugEnvVariable = getEnvironmentVariable("DEBUG");
let enabledString;
let enabledNamespaces = [];
let skippedNamespaces = [];
const debuggers = [];
if (debugEnvVariable) {
enable(debugEnvVariable);
}
const debugObj = Object.assign((namespace) => {
return createDebugger(namespace);
}, {
enable,
enabled,
disable,
log: log,
});
function enable(namespaces) {
enabledString = namespaces;
enabledNamespaces = [];
skippedNamespaces = [];
const namespaceList = namespaces.split(",").map((ns) => ns.trim());
for (const ns of namespaceList) {
if (ns.startsWith("-")) {
skippedNamespaces.push(ns.substring(1));
}
else {
enabledNamespaces.push(ns);
}
}
for (const instance of debuggers) {
instance.enabled = enabled(instance.namespace);
}
}
function enabled(namespace) {
if (namespace.endsWith("*")) {
return true;
}
for (const skipped of skippedNamespaces) {
if (namespaceMatches(namespace, skipped)) {
return false;
}
}
for (const enabledNamespace of enabledNamespaces) {
if (namespaceMatches(namespace, enabledNamespace)) {
return true;
}
}
return false;
}
/**
* Given a namespace, check if it matches a pattern.
* Patterns only have a single wildcard character which is *.
* The behavior of * is that it matches zero or more other characters.
*/
function namespaceMatches(namespace, patternToMatch) {
// simple case, no pattern matching required
if (patternToMatch.indexOf("*") === -1) {
return namespace === patternToMatch;
}
let pattern = patternToMatch;
// normalize successive * if needed
if (patternToMatch.indexOf("**") !== -1) {
const patternParts = [];
let lastCharacter = "";
for (const character of patternToMatch) {
if (character === "*" && lastCharacter === "*") {
continue;
}
else {
lastCharacter = character;
patternParts.push(character);
}
}
pattern = patternParts.join("");
}
let namespaceIndex = 0;
let patternIndex = 0;
const patternLength = pattern.length;
const namespaceLength = namespace.length;
let lastWildcard = -1;
let lastWildcardNamespace = -1;
while (namespaceIndex < namespaceLength && patternIndex < patternLength) {
if (pattern[patternIndex] === "*") {
lastWildcard = patternIndex;
patternIndex++;
if (patternIndex === patternLength) {
// if wildcard is the last character, it will match the remaining namespace string
return true;
}
// now we let the wildcard eat characters until we match the next literal in the pattern
while (namespace[namespaceIndex] !== pattern[patternIndex]) {
namespaceIndex++;
// reached the end of the namespace without a match
if (namespaceIndex === namespaceLength) {
return false;
}
}
// now that we have a match, let's try to continue on
// however, it's possible we could find a later match
// so keep a reference in case we have to backtrack
lastWildcardNamespace = namespaceIndex;
namespaceIndex++;
patternIndex++;
continue;
}
else if (pattern[patternIndex] === namespace[namespaceIndex]) {
// simple case: literal pattern matches so keep going
patternIndex++;
namespaceIndex++;
}
else if (lastWildcard >= 0) {
// special case: we don't have a literal match, but there is a previous wildcard
// which we can backtrack to and try having the wildcard eat the match instead
patternIndex = lastWildcard + 1;
namespaceIndex = lastWildcardNamespace + 1;
// we've reached the end of the namespace without a match
if (namespaceIndex === namespaceLength) {
return false;
}
// similar to the previous logic, let's keep going until we find the next literal match
while (namespace[namespaceIndex] !== pattern[patternIndex]) {
namespaceIndex++;
if (namespaceIndex === namespaceLength) {
return false;
}
}
lastWildcardNamespace = namespaceIndex;
namespaceIndex++;
patternIndex++;
continue;
}
else {
return false;
}
}
const namespaceDone = namespaceIndex === namespace.length;
const patternDone = patternIndex === pattern.length;
// this is to detect the case of an unneeded final wildcard
// e.g. the pattern `ab*` should match the string `ab`
const trailingWildCard = patternIndex === pattern.length - 1 && pattern[patternIndex] === "*";
return namespaceDone && (patternDone || trailingWildCard);
}
function disable() {
const result = enabledString || "";
enable("");
return result;
}
function createDebugger(namespace) {
const newDebugger = Object.assign(debug, {
enabled: enabled(namespace),
destroy,
log: debugObj.log,
namespace,
extend,
});
function debug(...args) {
if (!newDebugger.enabled) {
return;
}
if (args.length > 0) {
args[0] = `${namespace} ${args[0]}`;
}
newDebugger.log(...args);
}
debuggers.push(newDebugger);
return newDebugger;
}
function destroy() {
const index = debuggers.indexOf(this);
if (index >= 0) {
debuggers.splice(index, 1);
return true;
}
return false;
}
function extend(namespace) {
const newDebugger = createDebugger(`${this.namespace}:${namespace}`);
newDebugger.log = this.log;
return newDebugger;
}
/* harmony default export */ const debug = (debugObj);
//# sourceMappingURL=debug.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/logger/logger.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const TYPESPEC_RUNTIME_LOG_LEVELS = ["verbose", "info", "warning", "error"];
const levelMap = {
verbose: 400,
info: 300,
warning: 200,
error: 100,
};
function patchLogMethod(parent, child) {
child.log = (...args) => {
parent.log(...args);
};
}
function isTypeSpecRuntimeLogLevel(level) {
return TYPESPEC_RUNTIME_LOG_LEVELS.includes(level);
}
/**
* Creates a logger context base on the provided options.
* @param options - The options for creating a logger context.
* @returns The logger context.
*/
function createLoggerContext(options) {
const registeredLoggers = new Set();
const logLevelFromEnv = getEnvironmentVariable(options.logLevelEnvVarName);
let logLevel;
const clientLogger = debug(options.namespace);
clientLogger.log = (...args) => {
debug.log(...args);
};
function contextSetLogLevel(level) {
if (level && !isTypeSpecRuntimeLogLevel(level)) {
throw new Error(`Unknown log level '${level}'. Acceptable values: ${TYPESPEC_RUNTIME_LOG_LEVELS.join(",")}`);
}
logLevel = level;
const enabledNamespaces = [];
for (const logger of registeredLoggers) {
if (shouldEnable(logger)) {
enabledNamespaces.push(logger.namespace);
}
}
debug.enable(enabledNamespaces.join(","));
}
if (logLevelFromEnv) {
// avoid calling setLogLevel because we don't want a mis-set environment variable to crash
if (isTypeSpecRuntimeLogLevel(logLevelFromEnv)) {
contextSetLogLevel(logLevelFromEnv);
}
else {
console.error(`${options.logLevelEnvVarName} set to unknown log level '${logLevelFromEnv}'; logging is not enabled. Acceptable values: ${TYPESPEC_RUNTIME_LOG_LEVELS.join(", ")}.`);
}
}
function shouldEnable(logger) {
return Boolean(logLevel && levelMap[logger.level] <= levelMap[logLevel]);
}
function createLogger(parent, level) {
const logger = Object.assign(parent.extend(level), {
level,
});
patchLogMethod(parent, logger);
if (shouldEnable(logger)) {
const enabledNamespaces = debug.disable();
debug.enable(enabledNamespaces + "," + logger.namespace);
}
registeredLoggers.add(logger);
return logger;
}
function contextGetLogLevel() {
return logLevel;
}
function contextCreateClientLogger(namespace) {
const clientRootLogger = clientLogger.extend(namespace);
patchLogMethod(clientLogger, clientRootLogger);
return {
error: createLogger(clientRootLogger, "error"),
warning: createLogger(clientRootLogger, "warning"),
info: createLogger(clientRootLogger, "info"),
verbose: createLogger(clientRootLogger, "verbose"),
};
}
return {
setLogLevel: contextSetLogLevel,
getLogLevel: contextGetLogLevel,
createClientLogger: contextCreateClientLogger,
logger: clientLogger,
};
}
const context = createLoggerContext({
logLevelEnvVarName: "TYPESPEC_RUNTIME_LOG_LEVEL",
namespace: "typeSpecRuntime",
});
/**
* Immediately enables logging at the specified log level. If no level is specified, logging is disabled.
* @param level - The log level to enable for logging.
* Options from most verbose to least verbose are:
* - verbose
* - info
* - warning
* - error
*/
// eslint-disable-next-line @typescript-eslint/no-redeclare
const TypeSpecRuntimeLogger = context.logger;
/**
* Retrieves the currently specified log level.
*/
function setLogLevel(logLevel) {
context.setLogLevel(logLevel);
}
/**
* Retrieves the currently specified log level.
*/
function getLogLevel() {
return context.getLogLevel();
}
/**
* Creates a logger for use by the SDKs that inherits from `TypeSpecRuntimeLogger`.
* @param namespace - The name of the SDK package.
* @hidden
*/
function createClientLogger(namespace) {
return context.createClientLogger(namespace);
}
//# sourceMappingURL=logger.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/httpHeaders.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function normalizeName(name) {
return name.toLowerCase();
}
/**
* Removes CR and LF characters from a header value to prevent obs-fold
* (line folding) sequences, as forbidden by RFC 7230 §3.2.4.
* @param value - The header value to sanitize.
*/
function normalizeValue(value) {
return String(value)
.trim()
.replace(/[\r\n]/g, "");
}
function* headerIterator(map) {
for (const entry of map.values()) {
yield [entry.name, entry.value];
}
}
class HttpHeadersImpl {
_headersMap;
constructor(rawHeaders) {
this._headersMap = new Map();
if (rawHeaders) {
for (const headerName of Object.keys(rawHeaders)) {
this.set(headerName, rawHeaders[headerName]);
}
}
}
/**
* Set a header in this collection with the provided name and value. The name is
* case-insensitive.
* @param name - The name of the header to set. This value is case-insensitive.
* @param value - The value of the header to set.
*/
set(name, value) {
this._headersMap.set(normalizeName(name), { name, value: normalizeValue(value) });
}
/**
* Get the header value for the provided header name, or undefined if no header exists in this
* collection with the provided name.
* @param name - The name of the header. This value is case-insensitive.
*/
get(name) {
return this._headersMap.get(normalizeName(name))?.value;
}
/**
* Get whether or not this header collection contains a header entry for the provided header name.
* @param name - The name of the header to set. This value is case-insensitive.
*/
has(name) {
return this._headersMap.has(normalizeName(name));
}
/**
* Remove the header with the provided headerName.
* @param name - The name of the header to remove.
*/
delete(name) {
this._headersMap.delete(normalizeName(name));
}
/**
* Get the JSON object representation of this HTTP header collection.
*/
toJSON(options = {}) {
const result = {};
if (options.preserveCase) {
for (const entry of this._headersMap.values()) {
result[entry.name] = entry.value;
}
}
else {
for (const [normalizedName, entry] of this._headersMap) {
result[normalizedName] = entry.value;
}
}
return result;
}
/**
* Get the string representation of this HTTP header collection.
*/
toString() {
return JSON.stringify(this.toJSON({ preserveCase: true }));
}
/**
* Iterate over tuples of header [name, value] pairs.
*/
[Symbol.iterator]() {
return headerIterator(this._headersMap);
}
}
/**
* Creates an object that satisfies the `HttpHeaders` interface.
* @param rawHeaders - A simple object representing initial headers
*/
function httpHeaders_createHttpHeaders(rawHeaders) {
return new HttpHeadersImpl(rawHeaders);
}
//# sourceMappingURL=httpHeaders.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/uuidUtils.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Generated Universally Unique Identifier
*
* @returns RFC4122 v4 UUID.
*/
function randomUUID() {
return globalThis.crypto.randomUUID();
}
//# sourceMappingURL=uuidUtils.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/pipelineRequest.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
class PipelineRequestImpl {
url;
method;
headers;
timeout;
withCredentials;
body;
multipartBody;
formData;
streamResponseStatusCodes;
enableBrowserStreams;
proxySettings;
disableKeepAlive;
abortSignal;
requestId;
allowInsecureConnection;
onUploadProgress;
onDownloadProgress;
requestOverrides;
authSchemes;
constructor(options) {
this.url = options.url;
this.body = options.body;
this.headers = options.headers ?? httpHeaders_createHttpHeaders();
this.method = options.method ?? "GET";
this.timeout = options.timeout ?? 0;
this.multipartBody = options.multipartBody;
this.formData = options.formData;
this.disableKeepAlive = options.disableKeepAlive ?? false;
this.proxySettings = options.proxySettings;
this.streamResponseStatusCodes = options.streamResponseStatusCodes;
this.withCredentials = options.withCredentials ?? false;
this.abortSignal = options.abortSignal;
this.onUploadProgress = options.onUploadProgress;
this.onDownloadProgress = options.onDownloadProgress;
this.requestId = options.requestId || randomUUID();
this.allowInsecureConnection = options.allowInsecureConnection ?? false;
this.enableBrowserStreams = options.enableBrowserStreams ?? false;
this.requestOverrides = options.requestOverrides;
this.authSchemes = options.authSchemes;
}
}
/**
* Creates a new pipeline request with the given options.
* This method is to allow for the easy setting of default values and not required.
* @param options - The options to create the request with.
*/
function pipelineRequest_createPipelineRequest(options) {
return new PipelineRequestImpl(options);
}
//# sourceMappingURL=pipelineRequest.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/pipeline.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const ValidPhaseNames = new Set(["Deserialize", "Serialize", "Retry", "Sign"]);
/**
* A private implementation of Pipeline.
* Do not export this class from the package.
* @internal
*/
class HttpPipeline {
_policies = [];
_orderedPolicies;
constructor(policies) {
this._policies = policies?.slice(0) ?? [];
this._orderedPolicies = undefined;
}
addPolicy(policy, options = {}) {
if (options.phase && options.afterPhase) {
throw new Error("Policies inside a phase cannot specify afterPhase.");
}
if (options.phase && !ValidPhaseNames.has(options.phase)) {
throw new Error(`Invalid phase name: ${options.phase}`);
}
if (options.afterPhase && !ValidPhaseNames.has(options.afterPhase)) {
throw new Error(`Invalid afterPhase name: ${options.afterPhase}`);
}
this._policies.push({
policy,
options,
});
this._orderedPolicies = undefined;
}
removePolicy(options) {
const removedPolicies = [];
this._policies = this._policies.filter((policyDescriptor) => {
if ((options.name && policyDescriptor.policy.name === options.name) ||
(options.phase && policyDescriptor.options.phase === options.phase)) {
removedPolicies.push(policyDescriptor.policy);
return false;
}
else {
return true;
}
});
this._orderedPolicies = undefined;
return removedPolicies;
}
sendRequest(httpClient, request) {
const policies = this.getOrderedPolicies();
const pipeline = policies.reduceRight((next, policy) => {
return (req) => {
return policy.sendRequest(req, next);
};
}, (req) => httpClient.sendRequest(req));
return pipeline(request);
}
getOrderedPolicies() {
if (!this._orderedPolicies) {
this._orderedPolicies = this.orderPolicies();
}
return this._orderedPolicies;
}
clone() {
return new HttpPipeline(this._policies);
}
static create() {
return new HttpPipeline();
}
orderPolicies() {
/**
* The goal of this method is to reliably order pipeline policies
* based on their declared requirements when they were added.
*
* Order is first determined by phase:
*
* 1. Serialize Phase
* 2. Policies not in a phase
* 3. Deserialize Phase
* 4. Retry Phase
* 5. Sign Phase
*
* Within each phase, policies are executed in the order
* they were added unless they were specified to execute
* before/after other policies or after a particular phase.
*
* To determine the final order, we will walk the policy list
* in phase order multiple times until all dependencies are
* satisfied.
*
* `afterPolicies` are the set of policies that must be
* executed before a given policy. This requirement is
* considered satisfied when each of the listed policies
* have been scheduled.
*
* `beforePolicies` are the set of policies that must be
* executed after a given policy. Since this dependency
* can be expressed by converting it into a equivalent
* `afterPolicies` declarations, they are normalized
* into that form for simplicity.
*
* An `afterPhase` dependency is considered satisfied when all
* policies in that phase have scheduled.
*
*/
const result = [];
// Track all policies we know about.
const policyMap = new Map();
function createPhase(name) {
return {
name,
policies: new Set(),
hasRun: false,
hasAfterPolicies: false,
};
}
// Track policies for each phase.
const serializePhase = createPhase("Serialize");
const noPhase = createPhase("None");
const deserializePhase = createPhase("Deserialize");
const retryPhase = createPhase("Retry");
const signPhase = createPhase("Sign");
// a list of phases in order
const orderedPhases = [serializePhase, noPhase, deserializePhase, retryPhase, signPhase];
// Small helper function to map phase name to each Phase
function getPhase(phase) {
if (phase === "Retry") {
return retryPhase;
}
else if (phase === "Serialize") {
return serializePhase;
}
else if (phase === "Deserialize") {
return deserializePhase;
}
else if (phase === "Sign") {
return signPhase;
}
else {
return noPhase;
}
}
// First walk each policy and create a node to track metadata.
for (const descriptor of this._policies) {
const policy = descriptor.policy;
const options = descriptor.options;
const policyName = policy.name;
if (policyMap.has(policyName)) {
throw new Error("Duplicate policy names not allowed in pipeline");
}
const node = {
policy,
dependsOn: new Set(),
dependants: new Set(),
};
if (options.afterPhase) {
node.afterPhase = getPhase(options.afterPhase);
node.afterPhase.hasAfterPolicies = true;
}
policyMap.set(policyName, node);
const phase = getPhase(options.phase);
phase.policies.add(node);
}
// Now that each policy has a node, connect dependency references.
for (const descriptor of this._policies) {
const { policy, options } = descriptor;
const policyName = policy.name;
const node = policyMap.get(policyName);
if (!node) {
throw new Error(`Missing node for policy ${policyName}`);
}
if (options.afterPolicies) {
for (const afterPolicyName of options.afterPolicies) {
const afterNode = policyMap.get(afterPolicyName);
if (afterNode) {
// Linking in both directions helps later
// when we want to notify dependants.
node.dependsOn.add(afterNode);
afterNode.dependants.add(node);
}
}
}
if (options.beforePolicies) {
for (const beforePolicyName of options.beforePolicies) {
const beforeNode = policyMap.get(beforePolicyName);
if (beforeNode) {
// To execute before another node, make it
// depend on the current node.
beforeNode.dependsOn.add(node);
node.dependants.add(beforeNode);
}
}
}
}
function walkPhase(phase) {
phase.hasRun = true;
// Sets iterate in insertion order
for (const node of phase.policies) {
if (node.afterPhase && (!node.afterPhase.hasRun || node.afterPhase.policies.size)) {
// If this node is waiting on a phase to complete,
// we need to skip it for now.
// Even if the phase is empty, we should wait for it
// to be walked to avoid re-ordering policies.
continue;
}
if (node.dependsOn.size === 0) {
// If there's nothing else we're waiting for, we can
// add this policy to the result list.
result.push(node.policy);
// Notify anything that depends on this policy that
// the policy has been scheduled.
for (const dependant of node.dependants) {
dependant.dependsOn.delete(node);
}
policyMap.delete(node.policy.name);
phase.policies.delete(node);
}
}
}
function walkPhases() {
for (const phase of orderedPhases) {
walkPhase(phase);
// if the phase isn't complete
if (phase.policies.size > 0 && phase !== noPhase) {
if (!noPhase.hasRun) {
// Try running noPhase to see if that unblocks this phase next tick.
// This can happen if a phase that happens before noPhase
// is waiting on a noPhase policy to complete.
walkPhase(noPhase);
}
// Don't proceed to the next phase until this phase finishes.
return;
}
if (phase.hasAfterPolicies) {
// Run any policies unblocked by this phase
walkPhase(noPhase);
}
}
}
// Iterate until we've put every node in the result list.
let iteration = 0;
while (policyMap.size > 0) {
iteration++;
const initialResultLength = result.length;
// Keep walking each phase in order until we can order every node.
walkPhases();
// The result list *should* get at least one larger each time
// after the first full pass.
// Otherwise, we're going to loop forever.
if (result.length <= initialResultLength && iteration > 1) {
throw new Error("Cannot satisfy policy dependencies due to requirements cycle.");
}
}
return result;
}
}
/**
* Creates a totally empty pipeline.
* Useful for testing or creating a custom one.
*/
function pipeline_createEmptyPipeline() {
return HttpPipeline.create();
}
//# sourceMappingURL=pipeline.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/object.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Helper to determine when an input is a generic JS object.
* @returns true when input is an object type that is not null, Array, RegExp, or Date.
*/
function isObject(input) {
return (typeof input === "object" &&
input !== null &&
!Array.isArray(input) &&
!(input instanceof RegExp) &&
!(input instanceof Date));
}
//# sourceMappingURL=object.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/error.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Typeguard for an error object shape (has name and message)
* @param e - Something caught by a catch clause.
*/
function isError(e) {
if (isObject(e)) {
const hasName = typeof e.name === "string";
const hasMessage = typeof e.message === "string";
return hasName && hasMessage;
}
return false;
}
//# sourceMappingURL=error.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/inspect.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const custom = external_node_util_.inspect.custom;
//# sourceMappingURL=inspect.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/sanitizer.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const RedactedString = "REDACTED";
// Make sure this list is up-to-date with the one under core/logger/Readme#Keyconcepts
const defaultAllowedHeaderNames = [
"x-ms-client-request-id",
"x-ms-return-client-request-id",
"x-ms-useragent",
"x-ms-correlation-request-id",
"x-ms-request-id",
"client-request-id",
"ms-cv",
"return-client-request-id",
"traceparent",
"Access-Control-Allow-Credentials",
"Access-Control-Allow-Headers",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Origin",
"Access-Control-Expose-Headers",
"Access-Control-Max-Age",
"Access-Control-Request-Headers",
"Access-Control-Request-Method",
"Origin",
"Accept",
"Accept-Encoding",
"Cache-Control",
"Connection",
"Content-Length",
"Content-Type",
"Date",
"ETag",
"Expires",
"If-Match",
"If-Modified-Since",
"If-None-Match",
"If-Unmodified-Since",
"Last-Modified",
"Pragma",
"Request-Id",
"Retry-After",
"Server",
"Transfer-Encoding",
"User-Agent",
"WWW-Authenticate",
];
const defaultAllowedQueryParameters = ["api-version"];
/**
* A utility class to sanitize objects for logging.
*/
class Sanitizer {
allowedHeaderNames;
allowedQueryParameters;
constructor({ additionalAllowedHeaderNames: allowedHeaderNames = [], additionalAllowedQueryParameters: allowedQueryParameters = [], } = {}) {
allowedHeaderNames = defaultAllowedHeaderNames.concat(allowedHeaderNames);
allowedQueryParameters = defaultAllowedQueryParameters.concat(allowedQueryParameters);
this.allowedHeaderNames = new Set(allowedHeaderNames.map((n) => n.toLowerCase()));
this.allowedQueryParameters = new Set(allowedQueryParameters.map((p) => p.toLowerCase()));
}
/**
* Sanitizes an object for logging.
* @param obj - The object to sanitize
* @returns - The sanitized object as a string
*/
sanitize(obj) {
const seen = new Set();
return JSON.stringify(obj, (key, value) => {
// Ensure Errors include their interesting non-enumerable members
if (value instanceof Error) {
return {
...value,
name: value.name,
message: value.message,
};
}
if (key === "headers" && isObject(value)) {
return this.sanitizeHeaders(value);
}
else if (key === "url" && typeof value === "string") {
return this.sanitizeUrl(value);
}
else if (key === "query" && isObject(value)) {
return this.sanitizeQuery(value);
}
else if (key === "body") {
// Don't log the request body
return undefined;
}
else if (key === "response") {
// Don't log response again
return undefined;
}
else if (key === "operationSpec") {
// When using sendOperationRequest, the request carries a massive
// field with the autorest spec. No need to log it.
return undefined;
}
else if (Array.isArray(value) || isObject(value)) {
if (seen.has(value)) {
return "[Circular]";
}
seen.add(value);
}
return value;
}, 2);
}
/**
* Sanitizes a URL for logging.
* @param value - The URL to sanitize
* @returns - The sanitized URL as a string
*/
sanitizeUrl(value) {
if (typeof value !== "string" || value === null || value === "") {
return value;
}
const url = new URL(value);
if (!url.search) {
return value;
}
for (const [key] of url.searchParams) {
if (!this.allowedQueryParameters.has(key.toLowerCase())) {
url.searchParams.set(key, RedactedString);
}
}
return url.toString();
}
sanitizeHeaders(obj) {
const sanitized = {};
for (const key of Object.keys(obj)) {
if (this.allowedHeaderNames.has(key.toLowerCase())) {
sanitized[key] = obj[key];
}
else {
sanitized[key] = RedactedString;
}
}
return sanitized;
}
sanitizeQuery(value) {
if (typeof value !== "object" || value === null) {
return value;
}
const sanitized = {};
for (const k of Object.keys(value)) {
if (this.allowedQueryParameters.has(k.toLowerCase())) {
sanitized[k] = value[k];
}
else {
sanitized[k] = RedactedString;
}
}
return sanitized;
}
}
//# sourceMappingURL=sanitizer.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/restError.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const errorSanitizer = new Sanitizer();
/**
* A custom error type for failed pipeline requests.
*/
class restError_RestError extends Error {
/**
* Something went wrong when making the request.
* This means the actual request failed for some reason,
* such as a DNS issue or the connection being lost.
*/
static REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
/**
* This means that parsing the response from the server failed.
* It may have been malformed.
*/
static PARSE_ERROR = "PARSE_ERROR";
/**
* The code of the error itself (use statics on RestError if possible.)
*/
code;
/**
* The HTTP status code of the request (if applicable.)
*/
statusCode;
/**
* The request that was made.
* This property is non-enumerable.
*/
request;
/**
* The response received (if any.)
* This property is non-enumerable.
*/
response;
/**
* Bonus property set by the throw site.
*/
details;
constructor(message, options = {}) {
super(message);
this.name = "RestError";
this.code = options.code;
this.statusCode = options.statusCode;
// The request and response may contain sensitive information in the headers or body.
// To help prevent this sensitive information being accidentally logged, the request and response
// properties are marked as non-enumerable here. This prevents them showing up in the output of
// JSON.stringify and console.log.
Object.defineProperty(this, "request", { value: options.request, enumerable: false });
Object.defineProperty(this, "response", { value: options.response, enumerable: false });
// Only include useful agent information in the request for logging, as the full agent object
// may contain large binary data.
const agent = this.request?.agent
? {
maxFreeSockets: this.request.agent.maxFreeSockets,
maxSockets: this.request.agent.maxSockets,
}
: undefined;
// Logging method for util.inspect in Node
Object.defineProperty(this, custom, {
value: () => {
// Extract non-enumerable properties and add them back. This is OK since in this output the request and
// response get sanitized.
return `RestError: ${this.message} \n ${errorSanitizer.sanitize({
...this,
request: { ...this.request, agent },
response: this.response,
})}`;
},
enumerable: false,
});
Object.setPrototypeOf(this, restError_RestError.prototype);
}
}
/**
* Typeguard for RestError
* @param e - Something caught by a catch clause.
*/
function restError_isRestError(e) {
if (e instanceof restError_RestError) {
return true;
}
return isError(e) && e.name === "RestError";
}
//# sourceMappingURL=restError.js.map
// EXTERNAL MODULE: external "node:http"
var external_node_http_ = __webpack_require__(7067);
// EXTERNAL MODULE: external "node:https"
var external_node_https_ = __webpack_require__(4708);
// EXTERNAL MODULE: external "node:zlib"
var external_node_zlib_ = __webpack_require__(8522);
// EXTERNAL MODULE: external "node:stream"
var external_node_stream_ = __webpack_require__(7075);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const log_logger = createClientLogger("ts-http-runtime");
//# sourceMappingURL=log.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/nodeHttpClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const DEFAULT_TLS_SETTINGS = {};
function nodeHttpClient_isReadableStream(body) {
return body && typeof body.pipe === "function";
}
function isStreamComplete(stream) {
if (stream.readable === false) {
return Promise.resolve();
}
return new Promise((resolve) => {
const handler = () => {
resolve();
stream.removeListener("close", handler);
stream.removeListener("end", handler);
stream.removeListener("error", handler);
};
stream.on("close", handler);
stream.on("end", handler);
stream.on("error", handler);
});
}
function isArrayBuffer(body) {
return body && typeof body.byteLength === "number";
}
class ReportTransform extends external_node_stream_.Transform {
loadedBytes = 0;
progressCallback;
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
_transform(chunk, _encoding, callback) {
this.push(chunk);
this.loadedBytes += chunk.length;
try {
this.progressCallback({ loadedBytes: this.loadedBytes });
callback();
}
catch (e) {
callback(e);
}
}
constructor(progressCallback) {
super();
this.progressCallback = progressCallback;
}
}
/**
* A HttpClient implementation that uses Node's "https" module to send HTTPS requests.
* @internal
*/
class NodeHttpClient {
cachedHttpAgent;
cachedHttpsAgents = new WeakMap();
/**
* Makes a request over an underlying transport layer and returns the response.
* @param request - The request to be made.
*/
async sendRequest(request) {
const abortController = new AbortController();
let abortListener;
if (request.abortSignal) {
if (request.abortSignal.aborted) {
throw new AbortError("The operation was aborted. Request has already been canceled.");
}
abortListener = (event) => {
if (event.type === "abort") {
abortController.abort();
}
};
request.abortSignal.addEventListener("abort", abortListener);
}
let timeoutId;
if (request.timeout > 0) {
timeoutId = setTimeout(() => {
const sanitizer = new Sanitizer();
log_logger.info(`request to '${sanitizer.sanitizeUrl(request.url)}' timed out. canceling...`);
abortController.abort();
}, request.timeout);
}
const acceptEncoding = request.headers.get("Accept-Encoding");
const shouldDecompress = acceptEncoding?.includes("gzip") || acceptEncoding?.includes("deflate");
let body = typeof request.body === "function" ? request.body() : request.body;
if (body && !request.headers.has("Content-Length")) {
const bodyLength = getBodyLength(body);
if (bodyLength !== null) {
request.headers.set("Content-Length", bodyLength);
}
}
let responseStream;
try {
if (body && request.onUploadProgress) {
const onUploadProgress = request.onUploadProgress;
const uploadReportStream = new ReportTransform(onUploadProgress);
uploadReportStream.on("error", (e) => {
log_logger.error("Error in upload progress", e);
});
if (nodeHttpClient_isReadableStream(body)) {
body.pipe(uploadReportStream);
}
else {
uploadReportStream.end(body);
}
body = uploadReportStream;
}
const res = await this.makeRequest(request, abortController, body);
if (timeoutId !== undefined) {
clearTimeout(timeoutId);
}
const headers = getResponseHeaders(res);
const status = res.statusCode ?? 0;
const response = {
status,
headers,
request,
};
// Responses to HEAD must not have a body.
// If they do return a body, that body must be ignored.
if (request.method === "HEAD") {
// call resume() and not destroy() to avoid closing the socket
// and losing keep alive
res.resume();
return response;
}
responseStream = shouldDecompress ? getDecodedResponseStream(res, headers) : res;
const onDownloadProgress = request.onDownloadProgress;
if (onDownloadProgress) {
const downloadReportStream = new ReportTransform(onDownloadProgress);
downloadReportStream.on("error", (e) => {
log_logger.error("Error in download progress", e);
});
responseStream.pipe(downloadReportStream);
responseStream = downloadReportStream;
}
if (
// Value of POSITIVE_INFINITY in streamResponseStatusCodes is considered as any status code
request.streamResponseStatusCodes?.has(Number.POSITIVE_INFINITY) ||
request.streamResponseStatusCodes?.has(response.status)) {
response.readableStreamBody = responseStream;
}
else {
response.bodyAsText = await streamToText(responseStream);
}
return response;
}
finally {
// clean up event listener
if (request.abortSignal && abortListener) {
let uploadStreamDone = Promise.resolve();
if (nodeHttpClient_isReadableStream(body)) {
uploadStreamDone = isStreamComplete(body);
}
let downloadStreamDone = Promise.resolve();
if (nodeHttpClient_isReadableStream(responseStream)) {
downloadStreamDone = isStreamComplete(responseStream);
}
Promise.all([uploadStreamDone, downloadStreamDone])
.then(() => {
// eslint-disable-next-line promise/always-return
if (abortListener) {
request.abortSignal?.removeEventListener("abort", abortListener);
}
})
.catch((e) => {
log_logger.warning("Error when cleaning up abortListener on httpRequest", e);
});
}
}
}
makeRequest(request, abortController, body) {
const url = new URL(request.url);
const isInsecure = url.protocol !== "https:";
if (isInsecure && !request.allowInsecureConnection) {
throw new Error(`Cannot connect to ${request.url} while allowInsecureConnection is false.`);
}
const agent = request.agent ?? this.getOrCreateAgent(request, isInsecure);
const options = {
agent,
hostname: url.hostname,
path: `${url.pathname}${url.search}`,
port: url.port,
method: request.method,
headers: request.headers.toJSON({ preserveCase: true }),
...request.requestOverrides,
};
return new Promise((resolve, reject) => {
const req = isInsecure ? external_node_http_.request(options, resolve) : external_node_https_.request(options, resolve);
req.once("error", (err) => {
reject(new restError_RestError(err.message, { code: err.code ?? restError_RestError.REQUEST_SEND_ERROR, request }));
});
abortController.signal.addEventListener("abort", () => {
const abortError = new AbortError("The operation was aborted. Rejecting from abort signal callback while making request.");
req.destroy(abortError);
reject(abortError);
});
if (body && nodeHttpClient_isReadableStream(body)) {
body.pipe(req);
}
else if (body) {
if (typeof body === "string" || Buffer.isBuffer(body)) {
req.end(body);
}
else if (isArrayBuffer(body)) {
req.end(ArrayBuffer.isView(body)
? Buffer.from(body.buffer, body.byteOffset, body.byteLength)
: Buffer.from(body));
}
else {
log_logger.error("Unrecognized body type", body);
reject(new restError_RestError("Unrecognized body type"));
}
}
else {
// streams don't like "undefined" being passed as data
req.end();
}
});
}
getOrCreateAgent(request, isInsecure) {
const disableKeepAlive = request.disableKeepAlive;
// Handle Insecure requests first
if (isInsecure) {
if (disableKeepAlive) {
// keepAlive:false is the default so we don't need a custom Agent
return external_node_http_.globalAgent;
}
if (!this.cachedHttpAgent) {
// If there is no cached agent create a new one and cache it.
this.cachedHttpAgent = new external_node_http_.Agent({ keepAlive: true });
}
return this.cachedHttpAgent;
}
else {
if (disableKeepAlive && !request.tlsSettings) {
// When there are no tlsSettings and keepAlive is false
// we don't need a custom agent
return external_node_https_.globalAgent;
}
// We use the tlsSettings to index cached clients
const tlsSettings = request.tlsSettings ?? DEFAULT_TLS_SETTINGS;
// Get the cached agent or create a new one with the
// provided values for keepAlive and tlsSettings
let agent = this.cachedHttpsAgents.get(tlsSettings);
if (agent && agent.options.keepAlive === !disableKeepAlive) {
return agent;
}
log_logger.info("No cached TLS Agent exist, creating a new Agent");
agent = new external_node_https_.Agent({
// keepAlive is true if disableKeepAlive is false.
keepAlive: !disableKeepAlive,
// Since we are spreading, if no tslSettings were provided, nothing is added to the agent options.
...tlsSettings,
});
this.cachedHttpsAgents.set(tlsSettings, agent);
return agent;
}
}
}
function getResponseHeaders(res) {
const headers = httpHeaders_createHttpHeaders();
for (const header of Object.keys(res.headers)) {
const value = res.headers[header];
if (Array.isArray(value)) {
if (value.length > 0) {
headers.set(header, value[0]);
}
}
else if (value) {
headers.set(header, value);
}
}
return headers;
}
function getDecodedResponseStream(stream, headers) {
const contentEncoding = headers.get("Content-Encoding");
if (contentEncoding === "gzip") {
const unzip = external_node_zlib_.createGunzip();
stream.pipe(unzip);
return unzip;
}
else if (contentEncoding === "deflate") {
const inflate = external_node_zlib_.createInflate();
stream.pipe(inflate);
return inflate;
}
return stream;
}
function streamToText(stream) {
return new Promise((resolve, reject) => {
const buffer = [];
stream.on("data", (chunk) => {
if (Buffer.isBuffer(chunk)) {
buffer.push(chunk);
}
else {
buffer.push(Buffer.from(chunk));
}
});
stream.on("end", () => {
resolve(Buffer.concat(buffer).toString("utf8"));
});
stream.on("error", (e) => {
if (e && e?.name === "AbortError") {
reject(e);
}
else {
reject(new restError_RestError(`Error reading response as text: ${e.message}`, {
code: restError_RestError.PARSE_ERROR,
}));
}
});
});
}
/** @internal */
function getBodyLength(body) {
if (!body) {
return 0;
}
else if (Buffer.isBuffer(body)) {
return body.length;
}
else if (nodeHttpClient_isReadableStream(body)) {
return null;
}
else if (isArrayBuffer(body)) {
return body.byteLength;
}
else if (typeof body === "string") {
return Buffer.from(body).length;
}
else {
return null;
}
}
/**
* Create a new HttpClient instance for the NodeJS environment.
* @internal
*/
function createNodeHttpClient() {
return new NodeHttpClient();
}
//# sourceMappingURL=nodeHttpClient.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/defaultHttpClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Create the correct HttpClient for the current environment.
*/
function defaultHttpClient_createDefaultHttpClient() {
return createNodeHttpClient();
}
//# sourceMappingURL=defaultHttpClient.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/logPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the logPolicy.
*/
const logPolicyName = "logPolicy";
/**
* A policy that logs all requests and responses.
* @param options - Options to configure logPolicy.
*/
function logPolicy_logPolicy(options = {}) {
const logger = options.logger ?? log_logger.info;
const sanitizer = new Sanitizer({
additionalAllowedHeaderNames: options.additionalAllowedHeaderNames,
additionalAllowedQueryParameters: options.additionalAllowedQueryParameters,
});
return {
name: logPolicyName,
async sendRequest(request, next) {
if (!logger.enabled) {
return next(request);
}
logger(`Request: ${sanitizer.sanitize(request)}`);
const response = await next(request);
logger(`Response status code: ${response.status}`);
logger(`Headers: ${sanitizer.sanitize({ headers: response.headers })}`);
return response;
},
};
}
//# sourceMappingURL=logPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/userAgentPlatform.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @internal
*/
function getHeaderName() {
return "User-Agent";
}
/**
* @internal
*/
async function userAgentPlatform_setPlatformSpecificData(map) {
if (process && process.versions) {
const osInfo = `${os.type()} ${os.release()}; ${os.arch()}`;
if (process.versions.bun) {
map.set("Bun", `${process.versions.bun} (${osInfo})`);
}
else if (process.versions.deno) {
map.set("Deno", `${process.versions.deno} (${osInfo})`);
}
else if (process.versions.node) {
map.set("Node", `${process.versions.node} (${osInfo})`);
}
}
}
//# sourceMappingURL=userAgentPlatform.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/userAgent.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function getUserAgentString(telemetryInfo) {
const parts = [];
for (const [key, value] of telemetryInfo) {
const token = value ? `${key}/${value}` : key;
parts.push(token);
}
return parts.join(" ");
}
/**
* @internal
*/
function getUserAgentHeaderName() {
return getHeaderName();
}
/**
* @internal
*/
async function userAgent_getUserAgentValue(prefix) {
const runtimeInfo = new Map();
runtimeInfo.set("ts-http-runtime", SDK_VERSION);
await setPlatformSpecificData(runtimeInfo);
const defaultAgent = getUserAgentString(runtimeInfo);
const userAgentValue = prefix ? `${prefix} ${defaultAgent}` : defaultAgent;
return userAgentValue;
}
//# sourceMappingURL=userAgent.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/userAgentPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const UserAgentHeaderName = getUserAgentHeaderName();
/**
* The programmatic identifier of the userAgentPolicy.
*/
const userAgentPolicyName = "userAgentPolicy";
/**
* A policy that sets the User-Agent header (or equivalent) to reflect
* the library version.
* @param options - Options to customize the user agent value.
*/
function userAgentPolicy_userAgentPolicy(options = {}) {
const userAgentValue = getUserAgentValue(options.userAgentPrefix);
return {
name: userAgentPolicyName,
async sendRequest(request, next) {
if (!request.headers.has(UserAgentHeaderName)) {
request.headers.set(UserAgentHeaderName, await userAgentValue);
}
return next(request);
},
};
}
//# sourceMappingURL=userAgentPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/random.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Returns a random integer value between a lower and upper bound,
* inclusive of both bounds.
* Note that this uses Math.random and isn't secure. If you need to use
* this for any kind of security purpose, find a better source of random.
* @param min - The smallest integer value allowed.
* @param max - The largest integer value allowed.
*/
function getRandomIntegerInclusive(min, max) {
// Make sure inputs are integers.
min = Math.ceil(min);
max = Math.floor(max);
// Pick a random offset from zero to the size of the range.
// Since Math.random() can never return 1, we have to make the range one larger
// in order to be inclusive of the maximum value after we take the floor.
const offset = Math.floor(Math.random() * (max - min + 1));
return offset + min;
}
//# sourceMappingURL=random.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/delay.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Calculates the delay interval for retry attempts using exponential delay with jitter.
* @param retryAttempt - The current retry attempt number.
* @param config - The exponential retry configuration.
* @returns An object containing the calculated retry delay.
*/
function calculateRetryDelay(retryAttempt, config) {
// Exponentially increase the delay each time
const exponentialDelay = config.retryDelayInMs * Math.pow(2, retryAttempt);
// Don't let the delay exceed the maximum
const clampedDelay = Math.min(config.maxRetryDelayInMs, exponentialDelay);
// Allow the final value to have some "jitter" (within 50% of the delay size) so
// that retries across multiple clients don't occur simultaneously.
const retryAfterInMs = clampedDelay / 2 + getRandomIntegerInclusive(0, clampedDelay / 2);
return { retryAfterInMs };
}
//# sourceMappingURL=delay.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/helpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const StandardAbortMessage = "The operation was aborted.";
/**
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
* @param delayInMs - The number of milliseconds to be delayed.
* @param value - The value to be resolved with after a timeout of t milliseconds.
* @param options - The options for delay - currently abort options
* - abortSignal - The abortSignal associated with containing operation.
* - abortErrorMsg - The abort error message associated with containing operation.
* @returns Resolved promise
*/
function helpers_delay(delayInMs, value, options) {
return new Promise((resolve, reject) => {
let timer = undefined;
let onAborted = undefined;
const rejectOnAbort = () => {
return reject(new AbortError(options?.abortErrorMsg ? options?.abortErrorMsg : StandardAbortMessage));
};
const removeListeners = () => {
if (options?.abortSignal && onAborted) {
options.abortSignal.removeEventListener("abort", onAborted);
}
};
onAborted = () => {
if (timer) {
clearTimeout(timer);
}
removeListeners();
return rejectOnAbort();
};
if (options?.abortSignal && options.abortSignal.aborted) {
return rejectOnAbort();
}
timer = setTimeout(() => {
removeListeners();
resolve(value);
}, delayInMs);
if (options?.abortSignal) {
options.abortSignal.addEventListener("abort", onAborted);
}
});
}
/**
* @internal
* @returns the parsed value or undefined if the parsed value is invalid.
*/
function parseHeaderValueAsNumber(response, headerName) {
const value = response.headers.get(headerName);
if (!value)
return;
const valueAsNum = Number(value);
if (Number.isNaN(valueAsNum))
return;
return valueAsNum;
}
//# sourceMappingURL=helpers.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/retryStrategies/throttlingRetryStrategy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The header that comes back from services representing
* the amount of time (minimum) to wait to retry (in seconds or timestamp after which we can retry).
*/
const RetryAfterHeader = "Retry-After";
/**
* The headers that come back from services representing
* the amount of time (minimum) to wait to retry.
*
* "retry-after-ms", "x-ms-retry-after-ms" : milliseconds
* "Retry-After" : seconds or timestamp
*/
const AllRetryAfterHeaders = ["retry-after-ms", "x-ms-retry-after-ms", RetryAfterHeader];
/**
* A response is a throttling retry response if it has a throttling status code (429 or 503),
* as long as one of the [ "Retry-After" or "retry-after-ms" or "x-ms-retry-after-ms" ] headers has a valid value.
*
* Returns the `retryAfterInMs` value if the response is a throttling retry response.
* If not throttling retry response, returns `undefined`.
*
* @internal
*/
function getRetryAfterInMs(response) {
if (!(response && [429, 503].includes(response.status)))
return undefined;
try {
// Headers: "retry-after-ms", "x-ms-retry-after-ms", "Retry-After"
for (const header of AllRetryAfterHeaders) {
const retryAfterValue = parseHeaderValueAsNumber(response, header);
if (retryAfterValue === 0 || retryAfterValue) {
// "Retry-After" header ==> seconds
// "retry-after-ms", "x-ms-retry-after-ms" headers ==> milli-seconds
const multiplyingFactor = header === RetryAfterHeader ? 1000 : 1;
return retryAfterValue * multiplyingFactor; // in milli-seconds
}
}
// RetryAfterHeader ("Retry-After") has a special case where it might be formatted as a date instead of a number of seconds
const retryAfterHeader = response.headers.get(RetryAfterHeader);
if (!retryAfterHeader)
return;
const date = Date.parse(retryAfterHeader);
const diff = date - Date.now();
// negative diff would mean a date in the past, so retry asap with 0 milliseconds
return Number.isFinite(diff) ? Math.max(0, diff) : undefined;
}
catch {
return undefined;
}
}
/**
* A response is a retry response if it has a throttling status code (429 or 503),
* as long as one of the [ "Retry-After" or "retry-after-ms" or "x-ms-retry-after-ms" ] headers has a valid value.
*/
function isThrottlingRetryResponse(response) {
return Number.isFinite(getRetryAfterInMs(response));
}
function throttlingRetryStrategy_throttlingRetryStrategy() {
return {
name: "throttlingRetryStrategy",
retry({ response }) {
const retryAfterInMs = getRetryAfterInMs(response);
if (!Number.isFinite(retryAfterInMs)) {
return { skipStrategy: true };
}
return {
retryAfterInMs,
};
},
};
}
//# sourceMappingURL=throttlingRetryStrategy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/retryStrategies/exponentialRetryStrategy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// intervals are in milliseconds
const DEFAULT_CLIENT_RETRY_INTERVAL = 1000;
const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 64;
/**
* A retry strategy that retries with an exponentially increasing delay in these two cases:
* - When there are errors in the underlying transport layer (e.g. DNS lookup failures).
* - Or otherwise if the outgoing request fails (408, greater or equal than 500, except for 501 and 505).
*/
function exponentialRetryStrategy_exponentialRetryStrategy(options = {}) {
const retryInterval = options.retryDelayInMs ?? DEFAULT_CLIENT_RETRY_INTERVAL;
const maxRetryInterval = options.maxRetryDelayInMs ?? DEFAULT_CLIENT_MAX_RETRY_INTERVAL;
return {
name: "exponentialRetryStrategy",
retry({ retryCount, response, responseError }) {
const matchedSystemError = isSystemError(responseError);
const ignoreSystemErrors = matchedSystemError && options.ignoreSystemErrors;
const isExponential = isExponentialRetryResponse(response);
const ignoreExponentialResponse = isExponential && options.ignoreHttpStatusCodes;
const unknownResponse = response && (isThrottlingRetryResponse(response) || !isExponential);
if (unknownResponse || ignoreExponentialResponse || ignoreSystemErrors) {
return { skipStrategy: true };
}
if (responseError && !matchedSystemError && !isExponential) {
return { errorToThrow: responseError };
}
return calculateRetryDelay(retryCount, {
retryDelayInMs: retryInterval,
maxRetryDelayInMs: maxRetryInterval,
});
},
};
}
/**
* A response is a retry response if it has status codes:
* - 408, or
* - Greater or equal than 500, except for 501 and 505.
*/
function isExponentialRetryResponse(response) {
return Boolean(response &&
response.status !== undefined &&
(response.status >= 500 || response.status === 408) &&
response.status !== 501 &&
response.status !== 505);
}
/**
* Determines whether an error from a pipeline response was triggered in the network layer.
*/
function isSystemError(err) {
if (!err) {
return false;
}
return (err.code === "ETIMEDOUT" ||
err.code === "ESOCKETTIMEDOUT" ||
err.code === "ECONNREFUSED" ||
err.code === "ECONNRESET" ||
err.code === "ENOENT" ||
err.code === "ENOTFOUND");
}
//# sourceMappingURL=exponentialRetryStrategy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/constants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const constants_SDK_VERSION = "0.3.7";
const constants_DEFAULT_RETRY_POLICY_COUNT = 3;
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/retryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const retryPolicyLogger = createClientLogger("ts-http-runtime retryPolicy");
/**
* The programmatic identifier of the retryPolicy.
*/
const retryPolicyName = "retryPolicy";
/**
* retryPolicy is a generic policy to enable retrying requests when certain conditions are met
*/
function retryPolicy_retryPolicy(strategies, options = { maxRetries: constants_DEFAULT_RETRY_POLICY_COUNT }) {
const logger = options.logger || retryPolicyLogger;
return {
name: retryPolicyName,
async sendRequest(request, next) {
let response;
let responseError;
let retryCount = -1;
retryRequest: while (true) {
retryCount += 1;
response = undefined;
responseError = undefined;
try {
logger.info(`Retry ${retryCount}: Attempting to send request`, request.requestId);
response = await next(request);
logger.info(`Retry ${retryCount}: Received a response from request`, request.requestId);
}
catch (e) {
logger.error(`Retry ${retryCount}: Received an error from request`, request.requestId);
// RestErrors are valid targets for the retry strategies.
// If none of the retry strategies can work with them, they will be thrown later in this policy.
// If the received error is not a RestError, it is immediately thrown.
if (!restError_isRestError(e)) {
throw e;
}
responseError = e;
response = e.response;
}
if (request.abortSignal?.aborted) {
logger.error(`Retry ${retryCount}: Request aborted.`);
const abortError = new AbortError();
throw abortError;
}
if (retryCount >= (options.maxRetries ?? constants_DEFAULT_RETRY_POLICY_COUNT)) {
logger.info(`Retry ${retryCount}: Maximum retries reached. Returning the last received response, or throwing the last received error.`);
if (responseError) {
throw responseError;
}
else if (response) {
return response;
}
else {
throw new Error("Maximum retries reached with no response or error to throw");
}
}
logger.info(`Retry ${retryCount}: Processing ${strategies.length} retry strategies.`);
strategiesLoop: for (const strategy of strategies) {
const strategyLogger = strategy.logger || logger;
strategyLogger.info(`Retry ${retryCount}: Processing retry strategy ${strategy.name}.`);
const modifiers = strategy.retry({
retryCount,
response,
responseError,
});
if (modifiers.skipStrategy) {
strategyLogger.info(`Retry ${retryCount}: Skipped.`);
continue strategiesLoop;
}
const { errorToThrow, retryAfterInMs, redirectTo } = modifiers;
if (errorToThrow) {
strategyLogger.error(`Retry ${retryCount}: Retry strategy ${strategy.name} throws error:`, errorToThrow);
throw errorToThrow;
}
if (retryAfterInMs || retryAfterInMs === 0) {
strategyLogger.info(`Retry ${retryCount}: Retry strategy ${strategy.name} retries after ${retryAfterInMs}`);
await helpers_delay(retryAfterInMs, undefined, { abortSignal: request.abortSignal });
continue retryRequest;
}
if (redirectTo) {
strategyLogger.info(`Retry ${retryCount}: Retry strategy ${strategy.name} redirects to ${redirectTo}`);
request.url = redirectTo;
continue retryRequest;
}
}
if (responseError) {
logger.info(`None of the retry strategies could work with the received error. Throwing it.`);
throw responseError;
}
if (response) {
logger.info(`None of the retry strategies could work with the received response. Returning it.`);
return response;
}
// If all the retries skip and there's no response,
// we're still in the retry loop, so a new request will be sent
// until `maxRetries` is reached.
}
},
};
}
//# sourceMappingURL=retryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/defaultRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link defaultRetryPolicy}
*/
const defaultRetryPolicyName = "defaultRetryPolicy";
/**
* A policy that retries according to three strategies:
* - When the server sends a 429 response with a Retry-After header.
* - When there are errors in the underlying transport layer (e.g. DNS lookup failures).
* - Or otherwise if the outgoing request fails, it will retry with an exponentially increasing delay.
*/
function defaultRetryPolicy_defaultRetryPolicy(options = {}) {
return {
name: defaultRetryPolicyName,
sendRequest: retryPolicy_retryPolicy([throttlingRetryStrategy_throttlingRetryStrategy(), exponentialRetryStrategy_exponentialRetryStrategy(options)], {
maxRetries: options.maxRetries ?? constants_DEFAULT_RETRY_POLICY_COUNT,
}).sendRequest,
};
}
//# sourceMappingURL=defaultRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/bytesEncoding.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The helper that transforms bytes with specific character encoding into string
* @param bytes - the uint8array bytes
* @param format - the format we use to encode the byte
* @returns a string of the encoded string
*/
function bytesEncoding_uint8ArrayToString(bytes, format) {
return Buffer.from(bytes).toString(format);
}
/**
* The helper that transforms string to specific character encoded bytes array.
* @param value - the string to be converted
* @param format - the format we use to decode the value
* @returns a uint8array
*/
function bytesEncoding_stringToUint8Array(value, format) {
return Buffer.from(value, format);
}
//# sourceMappingURL=bytesEncoding.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/formData.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* If the request body is a native FormData, convert it to our FormDataMap
* representation and clear the body. Node.js's HTTP stack doesn't handle
* FormData natively, so the pipeline must serialize it later.
*
* @internal
*/
function convertBodyToFormDataMap(body) {
if (typeof FormData !== "undefined" && body instanceof FormData) {
const formDataMap = {};
for (const [key, value] of body.entries()) {
const existing = formDataMap[key];
if (Array.isArray(existing)) {
existing.push(value);
}
else {
formDataMap[key] = existing !== undefined ? [existing, value] : [value];
}
}
return formDataMap;
}
return undefined;
}
//# sourceMappingURL=formData.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/formDataPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the formDataPolicy.
*/
const formDataPolicyName = "formDataPolicy";
/**
* A policy that encodes FormData on the request into the body.
*/
function formDataPolicy_formDataPolicy() {
return {
name: formDataPolicyName,
async sendRequest(request, next) {
const converted = convertBodyToFormDataMap(request.body);
if (converted) {
request.formData = converted;
request.body = undefined;
}
if (request.formData) {
const contentType = request.headers.get("Content-Type");
if (contentType && contentType.indexOf("application/x-www-form-urlencoded") !== -1) {
request.body = wwwFormUrlEncode(request.formData);
}
else {
await prepareFormData(request.formData, request);
}
request.formData = undefined;
}
return next(request);
},
};
}
function wwwFormUrlEncode(formData) {
const urlSearchParams = new URLSearchParams();
for (const [key, value] of Object.entries(formData)) {
if (Array.isArray(value)) {
for (const subValue of value) {
urlSearchParams.append(key, subValue.toString());
}
}
else {
urlSearchParams.append(key, value.toString());
}
}
return urlSearchParams.toString();
}
async function prepareFormData(formData, request) {
// validate content type (multipart/form-data)
const contentType = request.headers.get("Content-Type");
if (contentType && !contentType.startsWith("multipart/form-data")) {
// content type is specified and is not multipart/form-data. Exit.
return;
}
request.headers.set("Content-Type", contentType ?? "multipart/form-data");
// set body to MultipartRequestBody using content from FormDataMap
const parts = [];
for (const [fieldName, values] of Object.entries(formData)) {
for (const value of Array.isArray(values) ? values : [values]) {
if (typeof value === "string") {
parts.push({
headers: httpHeaders_createHttpHeaders({
"Content-Disposition": `form-data; name="${fieldName}"`,
}),
body: bytesEncoding_stringToUint8Array(value, "utf-8"),
});
}
else if (value === undefined || value === null || typeof value !== "object") {
throw new Error(`Unexpected value for key ${fieldName}: ${value}. Value should be serialized to string first.`);
}
else {
// using || instead of ?? here since if value.name is empty we should create a file name
const fileName = value.name || "blob";
const headers = httpHeaders_createHttpHeaders();
headers.set("Content-Disposition", `form-data; name="${fieldName}"; filename="${fileName}"`);
// again, || is used since an empty value.type means the content type is unset
headers.set("Content-Type", value.type || "application/octet-stream");
parts.push({
headers,
body: value,
});
}
}
}
request.multipartBody = { parts };
}
//# sourceMappingURL=formDataPolicy.js.map
// EXTERNAL MODULE: ./node_modules/https-proxy-agent/dist/index.js
var dist = __webpack_require__(3669);
// EXTERNAL MODULE: ./node_modules/http-proxy-agent/dist/index.js
var http_proxy_agent_dist = __webpack_require__(1970);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/proxyPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const HTTPS_PROXY = "HTTPS_PROXY";
const HTTP_PROXY = "HTTP_PROXY";
const ALL_PROXY = "ALL_PROXY";
const NO_PROXY = "NO_PROXY";
/**
* The programmatic identifier of the proxyPolicy.
*/
const proxyPolicyName = "proxyPolicy";
/**
* Stores the patterns specified in NO_PROXY environment variable.
* @internal
*/
const globalNoProxyList = [];
let noProxyListLoaded = false;
/** A cache of whether a host should bypass the proxy. */
const globalBypassedMap = new Map();
function getEnvironmentValue(name) {
if (process.env[name]) {
return process.env[name];
}
else if (process.env[name.toLowerCase()]) {
return process.env[name.toLowerCase()];
}
return undefined;
}
function loadEnvironmentProxyValue() {
if (!process) {
return undefined;
}
const httpsProxy = getEnvironmentValue(HTTPS_PROXY);
const allProxy = getEnvironmentValue(ALL_PROXY);
const httpProxy = getEnvironmentValue(HTTP_PROXY);
return httpsProxy || allProxy || httpProxy;
}
/**
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
*/
function isBypassed(uri, noProxyList, bypassedMap) {
if (noProxyList.length === 0) {
return false;
}
const host = new URL(uri).hostname;
if (bypassedMap?.has(host)) {
return bypassedMap.get(host);
}
let isBypassedFlag = false;
for (const pattern of noProxyList) {
if (pattern[0] === ".") {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if (host.endsWith(pattern)) {
isBypassedFlag = true;
}
else {
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
isBypassedFlag = true;
}
}
}
else {
if (host === pattern) {
isBypassedFlag = true;
}
}
}
bypassedMap?.set(host, isBypassedFlag);
return isBypassedFlag;
}
function loadNoProxy() {
const noProxy = getEnvironmentValue(NO_PROXY);
noProxyListLoaded = true;
if (noProxy) {
return noProxy
.split(",")
.map((item) => item.trim())
.filter((item) => item.length);
}
return [];
}
/**
* This method converts a proxy url into `ProxySettings` for use with ProxyPolicy.
* If no argument is given, it attempts to parse a proxy URL from the environment
* variables `HTTPS_PROXY` or `HTTP_PROXY`.
* @param proxyUrl - The url of the proxy to use. May contain authentication information.
* @deprecated - Internally this method is no longer necessary when setting proxy information.
*/
function getDefaultProxySettings(proxyUrl) {
if (!proxyUrl) {
proxyUrl = loadEnvironmentProxyValue();
if (!proxyUrl) {
return undefined;
}
}
const parsedUrl = new URL(proxyUrl);
const schema = parsedUrl.protocol ? parsedUrl.protocol + "//" : "";
return {
host: schema + parsedUrl.hostname,
port: Number.parseInt(parsedUrl.port || "80"),
username: parsedUrl.username,
password: parsedUrl.password,
};
}
/**
* This method attempts to parse a proxy URL from the environment
* variables `HTTPS_PROXY` or `HTTP_PROXY`.
*/
function getDefaultProxySettingsInternal() {
const envProxy = loadEnvironmentProxyValue();
return envProxy ? new URL(envProxy) : undefined;
}
function getUrlFromProxySettings(settings) {
let parsedProxyUrl;
try {
parsedProxyUrl = new URL(settings.host);
}
catch {
throw new Error(`Expecting a valid host string in proxy settings, but found "${settings.host}".`);
}
parsedProxyUrl.port = String(settings.port);
if (settings.username) {
parsedProxyUrl.username = settings.username;
}
if (settings.password) {
parsedProxyUrl.password = settings.password;
}
return parsedProxyUrl;
}
function setProxyAgentOnRequest(request, cachedAgents, proxyUrl) {
// Custom Agent should take precedence so if one is present
// we should skip to avoid overwriting it.
if (request.agent) {
return;
}
const url = new URL(request.url);
const isInsecure = url.protocol !== "https:";
if (request.tlsSettings) {
log_logger.warning("TLS settings are not supported in combination with custom Proxy, certificates provided to the client will be ignored.");
}
if (isInsecure) {
if (!cachedAgents.httpProxyAgent) {
cachedAgents.httpProxyAgent = new http_proxy_agent_dist.HttpProxyAgent(proxyUrl);
}
request.agent = cachedAgents.httpProxyAgent;
}
else {
if (!cachedAgents.httpsProxyAgent) {
cachedAgents.httpsProxyAgent = new dist.HttpsProxyAgent(proxyUrl);
}
request.agent = cachedAgents.httpsProxyAgent;
}
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function proxyPolicy_proxyPolicy(proxySettings, options) {
if (!noProxyListLoaded) {
globalNoProxyList.push(...loadNoProxy());
}
const defaultProxy = proxySettings
? getUrlFromProxySettings(proxySettings)
: getDefaultProxySettingsInternal();
const cachedAgents = {};
return {
name: proxyPolicyName,
async sendRequest(request, next) {
if (!request.proxySettings &&
defaultProxy &&
!isBypassed(request.url, options?.customNoProxyList ?? globalNoProxyList, options?.customNoProxyList ? undefined : globalBypassedMap)) {
setProxyAgentOnRequest(request, cachedAgents, defaultProxy);
}
else if (request.proxySettings) {
setProxyAgentOnRequest(request, cachedAgents, getUrlFromProxySettings(request.proxySettings));
}
return next(request);
},
};
}
//# sourceMappingURL=proxyPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/redirectPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the redirectPolicy.
*/
const redirectPolicyName = "redirectPolicy";
/**
* Methods that are allowed to follow redirects 301 and 302
*/
const allowedRedirect = ["GET", "HEAD"];
/**
* A policy to follow Location headers from the server in order
* to support server-side redirection.
* In the browser, this policy is not used.
* @param options - Options to control policy behavior.
*/
function redirectPolicy_redirectPolicy(options = {}) {
const { maxRetries = 20, allowCrossOriginRedirects = false } = options;
return {
name: redirectPolicyName,
async sendRequest(request, next) {
const response = await next(request);
return handleRedirect(next, response, maxRetries, allowCrossOriginRedirects);
},
};
}
async function handleRedirect(next, response, maxRetries, allowCrossOriginRedirects, currentRetries = 0) {
const { request, status, headers } = response;
const locationHeader = headers.get("location");
if (locationHeader &&
(status === 300 ||
(status === 301 && allowedRedirect.includes(request.method)) ||
(status === 302 && allowedRedirect.includes(request.method)) ||
(status === 303 && request.method === "POST") ||
status === 307) &&
currentRetries < maxRetries) {
const url = new URL(locationHeader, request.url);
// Only follow redirects to the same origin by default.
if (!allowCrossOriginRedirects) {
const originalUrl = new URL(request.url);
if (url.origin !== originalUrl.origin) {
log_logger.verbose(`Skipping cross-origin redirect from ${originalUrl.origin} to ${url.origin}.`);
return response;
}
}
request.url = url.toString();
// POST request with Status code 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
if (status === 303) {
request.method = "GET";
request.headers.delete("Content-Length");
delete request.body;
}
request.headers.delete("Authorization");
const res = await next(request);
return handleRedirect(next, res, maxRetries, allowCrossOriginRedirects, currentRetries + 1);
}
return response;
}
//# sourceMappingURL=redirectPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/platformPolicies.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Add platform-specific policies to the pipeline.
*
* On Node.js, this adds agent, TLS, proxy, decompression, and redirect
* policies. On browser and React Native these concerns are handled
* natively by the runtime, so this is a no-op.
*
* @internal
*/
function platformPolicies_addPlatformPolicies(pipeline, options) {
if (options.agent) {
pipeline.addPolicy(agentPolicy(options.agent));
}
if (options.tlsOptions) {
pipeline.addPolicy(tlsPolicy(options.tlsOptions));
}
pipeline.addPolicy(proxyPolicy(options.proxyOptions));
pipeline.addPolicy(decompressResponsePolicy());
// Both XHR and Fetch expect to handle redirects automatically,
// so this only takes effect on Node.
pipeline.addPolicy(redirectPolicy(options.redirectOptions), { afterPhase: "Retry" });
}
//# sourceMappingURL=platformPolicies.js.map
// EXTERNAL MODULE: external "stream"
var external_stream_ = __webpack_require__(2203);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/typeGuards-node.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Checks if the given value is a Node.js readable stream.
*
* @internal
*/
function typeGuards_node_isNodeReadableStream(x) {
return x instanceof Readable;
}
/**
* Checks if the given value is a web ReadableStream.
*
* @internal
*/
function typeGuards_node_isWebReadableStream(x) {
return x instanceof ReadableStream;
}
//# sourceMappingURL=typeGuards-node.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/typeGuards.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function typeGuards_isBinaryBody(body) {
return (body !== undefined &&
(body instanceof Uint8Array ||
typeGuards_isReadableStream(body) ||
typeof body === "function" ||
body instanceof Blob));
}
function typeGuards_isReadableStream(x) {
return isNodeReadableStream(x) || isWebReadableStream(x);
}
function typeGuards_isBlob(x) {
return x instanceof Blob;
}
//# sourceMappingURL=typeGuards.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/concat.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
async function* streamAsyncIterator() {
const reader = this.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
return;
}
yield value;
}
}
finally {
reader.releaseLock();
}
}
function makeAsyncIterable(webStream) {
if (!webStream[Symbol.asyncIterator]) {
webStream[Symbol.asyncIterator] = streamAsyncIterator.bind(webStream);
}
if (!webStream.values) {
webStream.values = streamAsyncIterator.bind(webStream);
}
}
function ensureNodeStream(stream) {
if (stream instanceof ReadableStream) {
makeAsyncIterable(stream);
return external_stream_.Readable.fromWeb(stream);
}
else {
return stream;
}
}
function toStream(source) {
if (source instanceof Uint8Array) {
return external_stream_.Readable.from(Buffer.from(source));
}
else if (typeGuards_isBlob(source)) {
return ensureNodeStream(source.stream());
}
else {
return ensureNodeStream(source);
}
}
/**
* Utility function that concatenates a set of binary inputs into one combined output.
*
* @param sources - array of sources for the concatenation
* @returns - in Node, a (() =\> NodeJS.ReadableStream) which, when read, produces a concatenation of all the inputs.
* In browser, returns a `Blob` representing all the concatenated inputs.
*
* @internal
*/
async function concat(sources) {
return function () {
const streams = sources.map((x) => (typeof x === "function" ? x() : x)).map(toStream);
return external_stream_.Readable.from((async function* () {
for (const stream of streams) {
for await (const chunk of stream) {
yield chunk;
}
}
})());
};
}
//# sourceMappingURL=concat.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/multipartPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function generateBoundary() {
return `----AzSDKFormBoundary${randomUUID()}`;
}
function encodeHeaders(headers) {
let result = "";
for (const [key, value] of headers) {
result += `${key}: ${value}\r\n`;
}
return result;
}
function getLength(source) {
if (source instanceof Uint8Array) {
return source.byteLength;
}
else if (typeGuards_isBlob(source)) {
// if was created using createFile then -1 means we have an unknown size
return source.size === -1 ? undefined : source.size;
}
else {
return undefined;
}
}
function getTotalLength(sources) {
let total = 0;
for (const source of sources) {
const partLength = getLength(source);
if (partLength === undefined) {
return undefined;
}
else {
total += partLength;
}
}
return total;
}
async function buildRequestBody(request, parts, boundary) {
const sources = [
bytesEncoding_stringToUint8Array(`--${boundary}`, "utf-8"),
...parts.flatMap((part) => [
bytesEncoding_stringToUint8Array("\r\n", "utf-8"),
bytesEncoding_stringToUint8Array(encodeHeaders(part.headers), "utf-8"),
bytesEncoding_stringToUint8Array("\r\n", "utf-8"),
part.body,
bytesEncoding_stringToUint8Array(`\r\n--${boundary}`, "utf-8"),
]),
bytesEncoding_stringToUint8Array("--\r\n\r\n", "utf-8"),
];
const contentLength = getTotalLength(sources);
if (contentLength) {
request.headers.set("Content-Length", contentLength);
}
// The public BodyPart.body type uses Uint8Array (= Uint8Array<ArrayBufferLike>) for
// backward compatibility. Internally, concat requires Uint8Array<ArrayBuffer> to ensure
// SharedArrayBuffer-backed arrays don't flow into Blob construction. In practice, HTTP
// request bodies are always ArrayBuffer-backed, so this narrowing is safe.
request.body = await concat(sources);
}
/**
* Name of multipart policy
*/
const multipartPolicy_multipartPolicyName = "multipartPolicy";
const maxBoundaryLength = 70;
const validBoundaryCharacters = new Set(`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'()+,-./:=?`);
function assertValidBoundary(boundary) {
if (boundary.length > maxBoundaryLength) {
throw new Error(`Multipart boundary "${boundary}" exceeds maximum length of 70 characters`);
}
if (Array.from(boundary).some((x) => !validBoundaryCharacters.has(x))) {
throw new Error(`Multipart boundary "${boundary}" contains invalid characters`);
}
}
/**
* Pipeline policy for multipart requests
*/
function multipartPolicy_multipartPolicy() {
return {
name: multipartPolicy_multipartPolicyName,
async sendRequest(request, next) {
if (!request.multipartBody) {
return next(request);
}
if (request.body) {
throw new Error("multipartBody and regular body cannot be set at the same time");
}
let boundary = request.multipartBody.boundary;
const contentTypeHeader = request.headers.get("Content-Type") ?? "multipart/mixed";
const parsedHeader = contentTypeHeader.match(/^(multipart\/[^ ;]+)(?:; *boundary=(.+))?$/);
if (!parsedHeader) {
throw new Error(`Got multipart request body, but content-type header was not multipart: ${contentTypeHeader}`);
}
const [, contentType, parsedBoundary] = parsedHeader;
if (parsedBoundary && boundary && parsedBoundary !== boundary) {
throw new Error(`Multipart boundary was specified as ${parsedBoundary} in the header, but got ${boundary} in the request body`);
}
boundary ??= parsedBoundary;
if (boundary) {
assertValidBoundary(boundary);
}
else {
boundary = generateBoundary();
}
request.headers.set("Content-Type", `${contentType}; boundary=${boundary}`);
await buildRequestBody(request, request.multipartBody.parts, boundary);
request.multipartBody = undefined;
return next(request);
},
};
}
//# sourceMappingURL=multipartPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/createPipelineFromOptions.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Create a new pipeline with a default set of customizable policies.
* @param options - Options to configure a custom pipeline.
*/
function createPipelineFromOptions_createPipelineFromOptions(options) {
const pipeline = createEmptyPipeline();
addPlatformPolicies(pipeline, options);
pipeline.addPolicy(formDataPolicy(), { beforePolicies: [multipartPolicyName] });
pipeline.addPolicy(userAgentPolicy(options.userAgentOptions));
// The multipart policy is added after policies with no phase, so that
// policies can be added between it and formDataPolicy to modify
// properties (e.g., making the boundary constant in recorded tests).
pipeline.addPolicy(multipartPolicy(), { afterPhase: "Deserialize" });
pipeline.addPolicy(defaultRetryPolicy(options.retryOptions), { phase: "Retry" });
pipeline.addPolicy(logPolicy(options.loggingOptions), { afterPhase: "Sign" });
return pipeline;
}
//# sourceMappingURL=createPipelineFromOptions.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/auth/checkInsecureConnection.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// Ensure the warining is only emitted once
let insecureConnectionWarningEmmitted = false;
/**
* Checks if the request is allowed to be sent over an insecure connection.
*
* A request is allowed to be sent over an insecure connection when:
* - The `allowInsecureConnection` option is set to `true`.
* - The request has the `allowInsecureConnection` property set to `true`.
* - The request is being sent to `localhost` or `127.0.0.1`
*/
function allowInsecureConnection(request, options) {
if (options.allowInsecureConnection && request.allowInsecureConnection) {
const url = new URL(request.url);
if (url.hostname === "localhost" || url.hostname === "127.0.0.1") {
return true;
}
}
return false;
}
/**
* Logs a warning about sending a token over an insecure connection.
*
* This function will emit a node warning once, but log the warning every time.
*/
function emitInsecureConnectionWarning() {
const warning = "Sending token over insecure transport. Assume any token issued is compromised.";
logger.warning(warning);
if (!insecureConnectionWarningEmmitted) {
insecureConnectionWarningEmmitted = true;
emitNodeWarning(warning);
}
}
/**
* Ensures that authentication is only allowed over HTTPS unless explicitly allowed.
* Throws an error if the connection is not secure and not explicitly allowed.
*/
function checkInsecureConnection_ensureSecureConnection(request, options) {
if (!request.url.toLowerCase().startsWith("https://")) {
if (allowInsecureConnection(request, options)) {
emitInsecureConnectionWarning();
}
else {
throw new Error("Authentication is not permitted for non-TLS protected (non-https) URLs when allowInsecureConnection is false.");
}
}
}
//# sourceMappingURL=checkInsecureConnection.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/auth/apiKeyAuthenticationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the API Key Authentication Policy
*/
const apiKeyAuthenticationPolicyName = "apiKeyAuthenticationPolicy";
/**
* Gets a pipeline policy that adds API key authentication to requests
*/
function apiKeyAuthenticationPolicy_apiKeyAuthenticationPolicy(options) {
return {
name: apiKeyAuthenticationPolicyName,
async sendRequest(request, next) {
// Ensure allowInsecureConnection is explicitly set when sending request to non-https URLs
ensureSecureConnection(request, options);
const scheme = (request.authSchemes ?? options.authSchemes)?.find((x) => x.kind === "apiKey");
// Skip adding authentication header if no API key authentication scheme is found
if (!scheme) {
return next(request);
}
if (scheme.apiKeyLocation !== "header") {
throw new Error(`Unsupported API key location: ${scheme.apiKeyLocation}`);
}
request.headers.set(scheme.name, options.credential.key);
return next(request);
},
};
}
//# sourceMappingURL=apiKeyAuthenticationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/auth/basicAuthenticationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the Basic Authentication Policy
*/
const basicAuthenticationPolicyName = "bearerAuthenticationPolicy";
/**
* Gets a pipeline policy that adds basic authentication to requests
*/
function basicAuthenticationPolicy_basicAuthenticationPolicy(options) {
return {
name: basicAuthenticationPolicyName,
async sendRequest(request, next) {
// Ensure allowInsecureConnection is explicitly set when sending request to non-https URLs
ensureSecureConnection(request, options);
const scheme = (request.authSchemes ?? options.authSchemes)?.find((x) => x.kind === "http" && x.scheme === "basic");
// Skip adding authentication header if no basic authentication scheme is found
if (!scheme) {
return next(request);
}
const { username, password } = options.credential;
const headerValue = uint8ArrayToString(stringToUint8Array(`${username}:${password}`, "utf-8"), "base64");
request.headers.set("Authorization", `Basic ${headerValue}`);
return next(request);
},
};
}
//# sourceMappingURL=basicAuthenticationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/auth/bearerAuthenticationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the Bearer Authentication Policy
*/
const bearerAuthenticationPolicyName = "bearerAuthenticationPolicy";
/**
* Gets a pipeline policy that adds bearer token authentication to requests
*/
function bearerAuthenticationPolicy_bearerAuthenticationPolicy(options) {
return {
name: bearerAuthenticationPolicyName,
async sendRequest(request, next) {
// Ensure allowInsecureConnection is explicitly set when sending request to non-https URLs
ensureSecureConnection(request, options);
const scheme = (request.authSchemes ?? options.authSchemes)?.find((x) => x.kind === "http" && x.scheme === "bearer");
// Skip adding authentication header if no bearer authentication scheme is found
if (!scheme) {
return next(request);
}
const token = await options.credential.getBearerToken({
abortSignal: request.abortSignal,
});
request.headers.set("Authorization", `Bearer ${token}`);
return next(request);
},
};
}
//# sourceMappingURL=bearerAuthenticationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/auth/oauth2AuthenticationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the OAuth2 Authentication Policy
*/
const oauth2AuthenticationPolicyName = "oauth2AuthenticationPolicy";
/**
* Gets a pipeline policy that adds authorization header from OAuth2 schemes
*/
function oauth2AuthenticationPolicy_oauth2AuthenticationPolicy(options) {
return {
name: oauth2AuthenticationPolicyName,
async sendRequest(request, next) {
// Ensure allowInsecureConnection is explicitly set when sending request to non-https URLs
ensureSecureConnection(request, options);
const scheme = (request.authSchemes ?? options.authSchemes)?.find((x) => x.kind === "oauth2");
// Skip adding authentication header if no OAuth2 authentication scheme is found
if (!scheme) {
return next(request);
}
const token = await options.credential.getOAuth2Token(scheme.flows, {
abortSignal: request.abortSignal,
});
request.headers.set("Authorization", `Bearer ${token}`);
return next(request);
},
};
}
//# sourceMappingURL=oauth2AuthenticationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/client/clientHelpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
let cachedHttpClient;
/**
* Creates a default rest pipeline to re-use accross Rest Level Clients
*/
function clientHelpers_createDefaultPipeline(options = {}) {
const pipeline = createPipelineFromOptions(options);
pipeline.addPolicy(apiVersionPolicy(options));
const { credential, authSchemes, allowInsecureConnection } = options;
if (credential) {
if (isApiKeyCredential(credential)) {
pipeline.addPolicy(apiKeyAuthenticationPolicy({ authSchemes, credential, allowInsecureConnection }));
}
else if (isBasicCredential(credential)) {
pipeline.addPolicy(basicAuthenticationPolicy({ authSchemes, credential, allowInsecureConnection }));
}
else if (isBearerTokenCredential(credential)) {
pipeline.addPolicy(bearerAuthenticationPolicy({ authSchemes, credential, allowInsecureConnection }));
}
else if (isOAuth2TokenCredential(credential)) {
pipeline.addPolicy(oauth2AuthenticationPolicy({ authSchemes, credential, allowInsecureConnection }));
}
}
return pipeline;
}
function clientHelpers_getCachedDefaultHttpsClient() {
if (!cachedHttpClient) {
cachedHttpClient = createDefaultHttpClient();
}
return cachedHttpClient;
}
//# sourceMappingURL=clientHelpers.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/client/multipart.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Get value of a header in the part descriptor ignoring case
*/
function getHeaderValue(descriptor, headerName) {
if (descriptor.headers) {
const actualHeaderName = Object.keys(descriptor.headers).find((x) => x.toLowerCase() === headerName.toLowerCase());
if (actualHeaderName) {
return descriptor.headers[actualHeaderName];
}
}
return undefined;
}
function getPartContentType(descriptor) {
const contentTypeHeader = getHeaderValue(descriptor, "content-type");
if (contentTypeHeader) {
return contentTypeHeader;
}
// Special value of null means content type is to be omitted
if (descriptor.contentType === null) {
return undefined;
}
if (descriptor.contentType) {
return descriptor.contentType;
}
const { body } = descriptor;
if (body === null || body === undefined) {
return undefined;
}
if (typeof body === "string" || typeof body === "number" || typeof body === "boolean") {
return "text/plain; charset=UTF-8";
}
if (body instanceof Blob) {
return body.type || "application/octet-stream";
}
if (isBinaryBody(body)) {
return "application/octet-stream";
}
// arbitrary non-text object -> generic JSON content type by default. We will try to JSON.stringify the body.
return "application/json";
}
/**
* Enclose value in quotes and escape special characters, for use in the Content-Disposition header
*/
function escapeDispositionField(value) {
return JSON.stringify(value);
}
function getContentDisposition(descriptor) {
const contentDispositionHeader = getHeaderValue(descriptor, "content-disposition");
if (contentDispositionHeader) {
return contentDispositionHeader;
}
if (descriptor.dispositionType === undefined &&
descriptor.name === undefined &&
descriptor.filename === undefined) {
return undefined;
}
const dispositionType = descriptor.dispositionType ?? "form-data";
let disposition = dispositionType;
if (descriptor.name) {
disposition += `; name=${escapeDispositionField(descriptor.name)}`;
}
let filename = undefined;
if (descriptor.filename) {
filename = descriptor.filename;
}
else if (typeof File !== "undefined" && descriptor.body instanceof File) {
const filenameFromFile = descriptor.body.name;
if (filenameFromFile !== "") {
filename = filenameFromFile;
}
}
if (filename) {
disposition += `; filename=${escapeDispositionField(filename)}`;
}
return disposition;
}
function normalizeBody(body, contentType) {
if (body === undefined) {
// zero-length body
return new Uint8Array([]);
}
// binary and primitives should go straight on the wire regardless of content type
if (isBinaryBody(body)) {
return body;
}
if (typeof body === "string" || typeof body === "number" || typeof body === "boolean") {
return stringToUint8Array(String(body), "utf-8");
}
// stringify objects for JSON-ish content types e.g. application/json, application/merge-patch+json, application/vnd.oci.manifest.v1+json, application.json; charset=UTF-8
if (contentType && /application\/(.+\+)?json(;.+)?/i.test(String(contentType))) {
return stringToUint8Array(JSON.stringify(body), "utf-8");
}
throw new RestError(`Unsupported body/content-type combination: ${body}, ${contentType}`);
}
function buildBodyPart(descriptor) {
const contentType = getPartContentType(descriptor);
const contentDisposition = getContentDisposition(descriptor);
const headers = createHttpHeaders(descriptor.headers ?? {});
if (contentType) {
headers.set("content-type", contentType);
}
if (contentDisposition) {
headers.set("content-disposition", contentDisposition);
}
const body = normalizeBody(descriptor.body, contentType);
return {
headers,
body,
};
}
function multipart_buildMultipartBody(parts) {
return { parts: parts.map(buildBodyPart) };
}
//# sourceMappingURL=multipart.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/client/sendRequest.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Helper function to send request used by the client
* @param method - method to use to send the request
* @param url - url to send the request to
* @param pipeline - pipeline with the policies to run when sending the request
* @param options - request options
* @param customHttpClient - a custom HttpClient to use when making the request
* @returns returns and HttpResponse
*/
async function sendRequest_sendRequest(method, url, pipeline, options = {}, customHttpClient) {
const httpClient = customHttpClient ?? getCachedDefaultHttpsClient();
const request = buildPipelineRequest(method, url, options);
try {
const response = await pipeline.sendRequest(httpClient, request);
const headers = response.headers.toJSON();
const stream = response.readableStreamBody ?? response.browserStreamBody;
const parsedBody = options.responseAsStream || stream !== undefined ? undefined : getResponseBody(response);
const body = stream ?? parsedBody;
if (options?.onResponse) {
options.onResponse({ ...response, request, rawHeaders: headers, parsedBody });
}
return {
request,
headers,
status: `${response.status}`,
body,
};
}
catch (e) {
if (isRestError(e) && e.response && options.onResponse) {
const { response } = e;
const rawHeaders = response.headers.toJSON();
// UNBRANDED DIFFERENCE: onResponse callback does not have a second __legacyError property
options?.onResponse({ ...response, request, rawHeaders }, e);
}
throw e;
}
}
/**
* Function to determine the request content type
* @param options - request options InternalRequestParameters
* @returns returns the content-type
*/
function getRequestContentType(options = {}) {
if (options.contentType) {
return options.contentType;
}
const headerContentType = options.headers?.["content-type"];
if (typeof headerContentType === "string") {
return headerContentType;
}
return getContentType(options.body);
}
/**
* Function to determine the content-type of a body
* this is used if an explicit content-type is not provided
* @param body - body in the request
* @returns returns the content-type
*/
function getContentType(body) {
if (body === undefined) {
return undefined;
}
if (ArrayBuffer.isView(body)) {
return "application/octet-stream";
}
if (isBlob(body) && body.type) {
return body.type;
}
if (typeof body === "string") {
try {
JSON.parse(body);
return "application/json";
}
catch (error) {
// If we fail to parse the body, it is not json
return undefined;
}
}
// By default return json
return "application/json";
}
function buildPipelineRequest(method, url, options = {}) {
const requestContentType = getRequestContentType(options);
const { body, multipartBody } = getRequestBody(options.body, requestContentType);
const headers = createHttpHeaders({
...(options.headers ? options.headers : {}),
accept: options.accept ?? options.headers?.accept ?? "application/json",
...(requestContentType && {
"content-type": requestContentType,
}),
});
const { allowInsecureConnection, abortSignal, onUploadProgress, onDownloadProgress, timeout, responseAsStream, url: _url, method: _method, body: _body, multipartBody: _multiBody, headers: _headers, ...rest } = options;
const request = createPipelineRequest({
url,
method,
body,
multipartBody,
headers,
allowInsecureConnection,
abortSignal,
onUploadProgress,
onDownloadProgress,
timeout,
enableBrowserStreams: true,
streamResponseStatusCodes: responseAsStream ? new Set([Number.POSITIVE_INFINITY]) : undefined,
});
Object.assign(request, rest);
return request;
}
/**
* Prepares the body before sending the request
*/
function getRequestBody(body, contentType = "") {
if (body === undefined) {
return { body: undefined };
}
if (typeof FormData !== "undefined" && body instanceof FormData) {
return { body };
}
if (isBlob(body)) {
return { body };
}
if (isReadableStream(body)) {
return { body };
}
if (typeof body === "function") {
return { body: body };
}
if (ArrayBuffer.isView(body)) {
return {
body: body instanceof Uint8Array ? body : JSON.stringify(body),
};
}
const firstType = contentType.split(";")[0];
switch (firstType) {
case "application/json":
return { body: JSON.stringify(body) };
case "multipart/form-data":
if (Array.isArray(body)) {
return { multipartBody: buildMultipartBody(body) };
}
return { body: JSON.stringify(body) };
case "text/plain":
return { body: String(body) };
default:
if (typeof body === "string") {
return { body };
}
return { body: JSON.stringify(body) };
}
}
/**
* Prepares the response body
*/
function getResponseBody(response) {
// Set the default response type
const contentType = response.headers.get("content-type") ?? "";
const firstType = contentType.split(";")[0];
const bodyToParse = response.bodyAsText ?? "";
if (firstType === "text/plain") {
return String(bodyToParse);
}
// Default to "application/json" and fallback to string;
try {
return bodyToParse ? JSON.parse(bodyToParse) : undefined;
}
catch (error) {
// If we were supposed to get a JSON object and failed to
// parse, throw a parse error
if (firstType === "application/json") {
throw createParseError(response, error);
}
// We are not sure how to handle the response so we return it as
// plain text.
return String(bodyToParse);
}
}
function createParseError(response, err) {
const msg = `Error "${err}" occurred while parsing the response body - ${response.bodyAsText}.`;
const errCode = err.code ?? RestError.PARSE_ERROR;
return new RestError(msg, {
code: errCode,
statusCode: response.status,
request: response.request,
response: response,
});
}
//# sourceMappingURL=sendRequest.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/client/getClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a client with a default pipeline
* @param endpoint - Base endpoint for the client
* @param credentials - Credentials to authenticate the requests
* @param options - Client options
*/
function getClient(endpoint, clientOptions = {}) {
const pipeline = clientOptions.pipeline ?? createDefaultPipeline(clientOptions);
if (clientOptions.additionalPolicies?.length) {
for (const { policy, position } of clientOptions.additionalPolicies) {
// Sign happens after Retry and is commonly needed to occur
// before policies that intercept post-retry.
const afterPhase = position === "perRetry" ? "Sign" : undefined;
pipeline.addPolicy(policy, {
afterPhase,
});
}
}
const { allowInsecureConnection, httpClient } = clientOptions;
const endpointUrl = clientOptions.endpoint ?? endpoint;
const client = (path, ...args) => {
const getUrl = (requestOptions) => buildRequestUrl(endpointUrl, path, args, { allowInsecureConnection, ...requestOptions });
return {
get: (requestOptions = {}) => {
return buildOperation("GET", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
post: (requestOptions = {}) => {
return buildOperation("POST", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
put: (requestOptions = {}) => {
return buildOperation("PUT", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
patch: (requestOptions = {}) => {
return buildOperation("PATCH", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
delete: (requestOptions = {}) => {
return buildOperation("DELETE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
head: (requestOptions = {}) => {
return buildOperation("HEAD", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
options: (requestOptions = {}) => {
return buildOperation("OPTIONS", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
trace: (requestOptions = {}) => {
return buildOperation("TRACE", getUrl(requestOptions), pipeline, requestOptions, allowInsecureConnection, httpClient);
},
};
};
return {
path: client,
pathUnchecked: client,
pipeline,
};
}
function buildOperation(method, url, pipeline, options, allowInsecureConnection, httpClient) {
allowInsecureConnection = options.allowInsecureConnection ?? allowInsecureConnection;
return {
then: function (onFulfilled, onrejected) {
return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection }, httpClient).then(onFulfilled, onrejected);
},
async asBrowserStream() {
if (isNodeLike) {
throw new Error("`asBrowserStream` is supported only in the browser environment. Use `asNodeStream` instead to obtain the response body stream. If you require a Web stream of the response in Node, consider using `Readable.toWeb` on the result of `asNodeStream`.");
}
else {
return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient);
}
},
async asNodeStream() {
if (isNodeLike) {
return sendRequest(method, url, pipeline, { ...options, allowInsecureConnection, responseAsStream: true }, httpClient);
}
else {
throw new Error("`isNodeStream` is not supported in the browser environment. Use `asBrowserStream` to obtain the response body stream.");
}
},
};
}
//# sourceMappingURL=getClient.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/client/restError.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function createRestError(messageOrResponse, response) {
const resp = typeof messageOrResponse === "string" ? response : messageOrResponse;
const internalError = resp.body?.error ?? resp.body;
const message = typeof messageOrResponse === "string"
? messageOrResponse
: (internalError?.message ?? `Unexpected status code: ${resp.status}`);
return new RestError(message, {
statusCode: statusCodeToNumber(resp.status),
code: internalError?.code,
request: resp.request,
response: toPipelineResponse(resp),
});
}
function toPipelineResponse(errorResponse) {
return {
headers: createHttpHeaders(errorResponse.headers),
request: errorResponse.request,
status: statusCodeToNumber(errorResponse.status) ?? -1,
...(typeof errorResponse.body === "string" ? { bodyAsText: errorResponse.body } : {}),
};
}
function statusCodeToNumber(statusCode) {
const status = Number.parseInt(statusCode);
return Number.isNaN(status) ? undefined : status;
}
//# sourceMappingURL=restError.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/pipeline.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a totally empty pipeline.
* Useful for testing or creating a custom one.
*/
function esm_pipeline_createEmptyPipeline() {
return pipeline_createEmptyPipeline();
}
//# sourceMappingURL=pipeline.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/logger/internal.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=internal.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/logger/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const esm_context = createLoggerContext({
logLevelEnvVarName: "AZURE_LOG_LEVEL",
namespace: "azure",
});
/**
* The AzureLogger provides a mechanism for overriding where logs are output to.
* By default, logs are sent to stderr.
* Override the `log` method to redirect logs to another location.
*/
const AzureLogger = esm_context.logger;
/**
* Immediately enables logging at the specified log level. If no level is specified, logging is disabled.
* @param level - The log level to enable for logging.
* Options from most verbose to least verbose are:
* - verbose
* - info
* - warning
* - error
*/
function esm_setLogLevel(level) {
esm_context.setLogLevel(level);
}
/**
* Retrieves the currently specified log level.
*/
function esm_getLogLevel() {
return esm_context.getLogLevel();
}
/**
* Creates a logger for use by the Azure SDKs that inherits from `AzureLogger`.
* @param namespace - The name of the SDK package.
* @hidden
*/
function esm_createClientLogger(namespace) {
return esm_context.createClientLogger(namespace);
}
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const esm_log_logger = esm_createClientLogger("core-rest-pipeline");
//# sourceMappingURL=log.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/agentPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the Agent Policy
*/
const agentPolicyName = "agentPolicy";
/**
* Gets a pipeline policy that sets http.agent
*/
function agentPolicy_agentPolicy(agent) {
return {
name: agentPolicyName,
sendRequest: async (req, next) => {
// Users may define an agent on the request, honor it over the client level one
if (!req.agent) {
req.agent = agent;
}
return next(req);
},
};
}
//# sourceMappingURL=agentPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/decompressResponsePolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the decompressResponsePolicy.
*/
const decompressResponsePolicyName = "decompressResponsePolicy";
/**
* A policy to enable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
function decompressResponsePolicy_decompressResponsePolicy() {
return {
name: decompressResponsePolicyName,
async sendRequest(request, next) {
// HEAD requests have no body
if (request.method !== "HEAD") {
request.headers.set("Accept-Encoding", "gzip,deflate");
}
return next(request);
},
};
}
//# sourceMappingURL=decompressResponsePolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/exponentialRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the exponentialRetryPolicy.
*/
const exponentialRetryPolicyName = "exponentialRetryPolicy";
/**
* A policy that attempts to retry requests while introducing an exponentially increasing delay.
* @param options - Options that configure retry logic.
*/
function exponentialRetryPolicy(options = {}) {
return retryPolicy([
exponentialRetryStrategy({
...options,
ignoreSystemErrors: true,
}),
], {
maxRetries: options.maxRetries ?? DEFAULT_RETRY_POLICY_COUNT,
});
}
//# sourceMappingURL=exponentialRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/systemErrorRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link systemErrorRetryPolicy}
*/
const systemErrorRetryPolicyName = "systemErrorRetryPolicy";
/**
* A retry policy that specifically seeks to handle errors in the
* underlying transport layer (e.g. DNS lookup failures) rather than
* retryable error codes from the server itself.
* @param options - Options that customize the policy.
*/
function systemErrorRetryPolicy(options = {}) {
return {
name: systemErrorRetryPolicyName,
sendRequest: retryPolicy([
exponentialRetryStrategy({
...options,
ignoreHttpStatusCodes: true,
}),
], {
maxRetries: options.maxRetries ?? DEFAULT_RETRY_POLICY_COUNT,
}).sendRequest,
};
}
//# sourceMappingURL=systemErrorRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/throttlingRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link throttlingRetryPolicy}
*/
const throttlingRetryPolicyName = "throttlingRetryPolicy";
/**
* A policy that retries when the server sends a 429 response with a Retry-After header.
*
* To learn more, please refer to
* https://learn.microsoft.com/azure/azure-resource-manager/resource-manager-request-limits,
* https://learn.microsoft.com/azure/azure-subscription-service-limits and
* https://learn.microsoft.com/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
*
* @param options - Options that configure retry logic.
*/
function throttlingRetryPolicy(options = {}) {
return {
name: throttlingRetryPolicyName,
sendRequest: retryPolicy([throttlingRetryStrategy()], {
maxRetries: options.maxRetries ?? DEFAULT_RETRY_POLICY_COUNT,
}).sendRequest,
};
}
//# sourceMappingURL=throttlingRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/tlsPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the TLS Policy
*/
const tlsPolicyName = "tlsPolicy";
/**
* Gets a pipeline policy that adds the client certificate to the HttpClient agent for authentication.
*/
function tlsPolicy_tlsPolicy(tlsSettings) {
return {
name: tlsPolicyName,
sendRequest: async (req, next) => {
// Users may define a request tlsSettings, honor those over the client level one
if (!req.tlsSettings) {
req.tlsSettings = tlsSettings;
}
return next(req);
},
};
}
//# sourceMappingURL=tlsPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/policies/internal.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=internal.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/logPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the logPolicy.
*/
const logPolicy_logPolicyName = (/* unused pure expression or super */ null && (tspLogPolicyName));
/**
* A policy that logs all requests and responses.
* @param options - Options to configure logPolicy.
*/
function policies_logPolicy_logPolicy(options = {}) {
return logPolicy_logPolicy({
logger: esm_log_logger.info,
...options,
});
}
//# sourceMappingURL=logPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/redirectPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the redirectPolicy.
*/
const redirectPolicy_redirectPolicyName = redirectPolicyName;
/**
* A policy to follow Location headers from the server in order
* to support server-side redirection.
* In the browser, this policy is not used.
* @param options - Options to control policy behavior.
*/
function policies_redirectPolicy_redirectPolicy(options = {}) {
return redirectPolicy_redirectPolicy(options);
}
//# sourceMappingURL=redirectPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/userAgentPlatform.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @internal
*/
function userAgentPlatform_getHeaderName() {
return "User-Agent";
}
/**
* @internal
*/
async function util_userAgentPlatform_setPlatformSpecificData(map) {
if (external_node_process_ && external_node_process_.versions) {
const osInfo = `${external_node_os_.type()} ${external_node_os_.release()}; ${external_node_os_.arch()}`;
if (external_node_process_.versions.bun) {
map.set("Bun", `${external_node_process_.versions.bun} (${osInfo})`);
}
else if (external_node_process_.versions.deno) {
map.set("Deno", `${external_node_process_.versions.deno} (${osInfo})`);
}
else if (external_node_process_.versions.node) {
map.set("Node", `${external_node_process_.versions.node} (${osInfo})`);
}
}
}
//# sourceMappingURL=userAgentPlatform.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/constants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const esm_constants_SDK_VERSION = "1.25.0";
const esm_constants_DEFAULT_RETRY_POLICY_COUNT = 3;
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/userAgent.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function userAgent_getUserAgentString(telemetryInfo) {
const parts = [];
for (const [key, value] of telemetryInfo) {
const token = value ? `${key}/${value}` : key;
parts.push(token);
}
return parts.join(" ");
}
/**
* @internal
*/
function userAgent_getUserAgentHeaderName() {
return userAgentPlatform_getHeaderName();
}
/**
* @internal
*/
async function util_userAgent_getUserAgentValue(prefix) {
const runtimeInfo = new Map();
runtimeInfo.set("core-rest-pipeline", esm_constants_SDK_VERSION);
await util_userAgentPlatform_setPlatformSpecificData(runtimeInfo);
const defaultAgent = userAgent_getUserAgentString(runtimeInfo);
const userAgentValue = prefix ? `${prefix} ${defaultAgent}` : defaultAgent;
return userAgentValue;
}
//# sourceMappingURL=userAgent.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/userAgentPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const userAgentPolicy_UserAgentHeaderName = userAgent_getUserAgentHeaderName();
/**
* The programmatic identifier of the userAgentPolicy.
*/
const userAgentPolicy_userAgentPolicyName = "userAgentPolicy";
/**
* A policy that sets the User-Agent header (or equivalent) to reflect
* the library version.
* @param options - Options to customize the user agent value.
*/
function policies_userAgentPolicy_userAgentPolicy(options = {}) {
const userAgentValue = util_userAgent_getUserAgentValue(options.userAgentPrefix);
return {
name: userAgentPolicy_userAgentPolicyName,
async sendRequest(request, next) {
if (!request.headers.has(userAgentPolicy_UserAgentHeaderName)) {
request.headers.set(userAgentPolicy_UserAgentHeaderName, await userAgentValue);
}
return next(request);
},
};
}
//# sourceMappingURL=userAgentPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/createFile.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Create an object that implements the File interface. This object is intended to be
* passed into RequestBodyType.formData, and is not guaranteed to work as expected in
* other situations.
*
* Use this function to create a File object for use in RequestBodyType.formData in environments
* where the global File object is unavailable.
*
* @param content - the content of the file as a Uint8Array in memory.
* @param name - the name of the file.
* @param options - optional metadata about the file, e.g. file name, file size, MIME type.
*/
function createFile(content, name, options = {}) {
return createRawFile(content, name, options);
}
//# sourceMappingURL=createFile.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/file.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function file_isNodeReadableStream(x) {
return typeof x === "object" && x !== null && "pipe" in x && typeof x.pipe === "function";
}
const unimplementedMethods = {
arrayBuffer: () => {
throw new Error("Not implemented");
},
bytes: () => {
throw new Error("Not implemented");
},
slice: () => {
throw new Error("Not implemented");
},
text: () => {
throw new Error("Not implemented");
},
};
/**
* Private symbol used as key on objects created using createFile containing the
* original source of the file object.
*
* This is used in Node to access the original Node stream without using Blob#stream, which
* returns a web stream. This is done to avoid a couple of bugs to do with Blob#stream and
* Readable#to/fromWeb in Node versions we support:
* - https://github.com/nodejs/node/issues/42694 (fixed in Node 18.14)
* - https://github.com/nodejs/node/issues/48916 (fixed in Node 20.6)
*
* Once these versions are no longer supported, we may be able to stop doing this.
*
* @internal
*/
const rawContent = Symbol("rawContent");
/**
* Type guard to check if a given object is a blob-like object with a raw content property.
*/
function hasRawContent(x) {
return typeof x[rawContent] === "function";
}
/**
* Extract the raw content from a given blob-like object. If the input was created using createFile
* or createFileFromStream, the exact content passed into createFile/createFileFromStream will be used.
* For true instances of Blob and File, returns the actual blob.
*
* @internal
*/
function getRawContent(blob) {
if (hasRawContent(blob)) {
return blob[rawContent]();
}
else {
return blob;
}
}
/**
* @internal
*
* Creates a File-like object tagged with rawContent for efficient streaming access.
* Used by the Node createFile to avoid Blob#stream() bugs.
*/
function file_createRawFile(content, name, options = {}) {
return {
...unimplementedMethods,
type: options.type ?? "",
lastModified: options.lastModified ?? new Date().getTime(),
webkitRelativePath: options.webkitRelativePath ?? "",
size: content.byteLength,
name,
arrayBuffer: async () => toArrayBuffer(content).buffer,
stream: () => new Blob([toArrayBuffer(content)]).stream(),
[rawContent]: () => content,
};
}
/**
* Create an object that implements the File interface. This object is intended to be
* passed into RequestBodyType.formData, and is not guaranteed to work as expected in
* other situations.
*
* Use this function to:
* - Create a File object for use in RequestBodyType.formData in environments where the
* global File object is unavailable.
* - Create a File-like object from a readable stream without reading the stream into memory.
*
* @param stream - the content of the file as a callback returning a stream. When a File object made using createFile is
* passed in a request's form data map, the stream will not be read into memory
* and instead will be streamed when the request is made. In the event of a retry, the
* stream needs to be read again, so this callback SHOULD return a fresh stream if possible.
* @param name - the name of the file.
* @param options - optional metadata about the file, e.g. file name, file size, MIME type.
*/
function createFileFromStream(stream, name, options = {}) {
return {
...unimplementedMethods,
type: options.type ?? "",
lastModified: options.lastModified ?? new Date().getTime(),
webkitRelativePath: options.webkitRelativePath ?? "",
size: options.size ?? -1,
name,
stream: () => {
const s = stream();
if (file_isNodeReadableStream(s)) {
throw new Error("Not supported: a Node stream was provided as input to createFileFromStream.");
}
return s;
},
[rawContent]: stream,
};
}
function hasArrayBuffer(source) {
return "resize" in source.buffer;
}
function toArrayBuffer(source) {
if (hasArrayBuffer(source)) {
// ArrayBuffer — return a copy if the view is a subarray of a larger buffer
if (source.byteOffset !== 0 || source.byteLength !== source.buffer.byteLength) {
return new Uint8Array(source);
}
return source;
}
// SharedArrayBuffer
return source.map((x) => x);
}
//# sourceMappingURL=file.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/multipartPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of multipart policy
*/
const policies_multipartPolicy_multipartPolicyName = multipartPolicy_multipartPolicyName;
/**
* Pipeline policy for multipart requests
*/
function policies_multipartPolicy_multipartPolicy() {
const tspPolicy = multipartPolicy_multipartPolicy();
return {
name: policies_multipartPolicy_multipartPolicyName,
sendRequest: async (request, next) => {
if (request.multipartBody) {
for (const part of request.multipartBody.parts) {
if (hasRawContent(part.body)) {
part.body = getRawContent(part.body);
}
}
}
return tspPolicy.sendRequest(request, next);
},
};
}
//# sourceMappingURL=multipartPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/decompressResponsePolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the decompressResponsePolicy.
*/
const decompressResponsePolicy_decompressResponsePolicyName = decompressResponsePolicyName;
/**
* A policy to enable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
function policies_decompressResponsePolicy_decompressResponsePolicy() {
return decompressResponsePolicy_decompressResponsePolicy();
}
//# sourceMappingURL=decompressResponsePolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/defaultRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link defaultRetryPolicy}
*/
const defaultRetryPolicy_defaultRetryPolicyName = (/* unused pure expression or super */ null && (tspDefaultRetryPolicyName));
/**
* A policy that retries according to three strategies:
* - When the server sends a 429 response with a Retry-After header.
* - When there are errors in the underlying transport layer (e.g. DNS lookup failures).
* - Or otherwise if the outgoing request fails, it will retry with an exponentially increasing delay.
*/
function policies_defaultRetryPolicy_defaultRetryPolicy(options = {}) {
return defaultRetryPolicy_defaultRetryPolicy(options);
}
//# sourceMappingURL=defaultRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/formDataPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the formDataPolicy.
*/
const formDataPolicy_formDataPolicyName = (/* unused pure expression or super */ null && (tspFormDataPolicyName));
/**
* A policy that encodes FormData on the request into the body.
*/
function policies_formDataPolicy_formDataPolicy() {
return formDataPolicy_formDataPolicy();
}
//# sourceMappingURL=formDataPolicy.js.map
// EXTERNAL MODULE: external "node:crypto"
var external_node_crypto_ = __webpack_require__(7598);
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/sha256.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Generates a SHA-256 HMAC signature.
* @param key - The HMAC key represented as a base64 string, used to generate the cryptographic HMAC hash.
* @param stringToSign - The data to be signed.
* @param encoding - The textual encoding to use for the returned HMAC digest.
*/
async function computeSha256Hmac(key, stringToSign, encoding) {
const decodedKey = Buffer.from(key, "base64");
return createHmac("sha256", decodedKey).update(stringToSign).digest(encoding);
}
/**
* Generates a SHA-256 hash.
* @param content - The data to be included in the hash.
* @param encoding - The textual encoding to use for the returned hash.
*/
async function computeSha256Hash(content, encoding) {
return createHash("sha256").update(content).digest(encoding);
}
//# sourceMappingURL=sha256.js.map
;// CONCATENATED MODULE: ./node_modules/@typespec/ts-http-runtime/dist/esm/util/internal.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=internal.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/AbortError.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This error is thrown when an asynchronous operation has been aborted.
* Check for this error by testing the `name` that the name property of the
* error matches `"AbortError"`.
*
* @example
* ```ts snippet:AbortErrorSample
* import { AbortError } from "@azure/abort-controller";
*
* async function doAsyncWork(options: { abortSignal: AbortSignal }): Promise<void> {
* if (options.abortSignal.aborted) {
* throw new AbortError();
* }
*
* // do async work
* }
*
* const controller = new AbortController();
* controller.abort();
* try {
* doAsyncWork({ abortSignal: controller.signal });
* } catch (e) {
* if (e instanceof Error && e.name === "AbortError") {
* // handle abort error here.
* }
* }
* ```
*/
class AbortError_AbortError extends Error {
constructor(message) {
super(message);
this.name = "AbortError";
}
}
//# sourceMappingURL=AbortError.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/abort-controller/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/createAbortablePromise.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates an abortable promise.
* @param buildPromise - A function that takes the resolve and reject functions as parameters.
* @param options - The options for the abortable promise.
* @returns A promise that can be aborted.
*/
function createAbortablePromise(buildPromise, options) {
const { cleanupBeforeAbort, abortSignal, abortErrorMsg } = options ?? {};
return new Promise((resolve, reject) => {
function rejectOnAbort() {
reject(new AbortError_AbortError(abortErrorMsg ?? "The operation was aborted."));
}
function removeListeners() {
abortSignal?.removeEventListener("abort", onAbort);
}
function onAbort() {
cleanupBeforeAbort?.();
removeListeners();
rejectOnAbort();
}
if (abortSignal?.aborted) {
return rejectOnAbort();
}
try {
buildPromise((x) => {
removeListeners();
resolve(x);
}, (x) => {
removeListeners();
reject(x);
});
}
catch (err) {
reject(err);
}
abortSignal?.addEventListener("abort", onAbort);
});
}
//# sourceMappingURL=createAbortablePromise.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/delay.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const delay_StandardAbortMessage = "The delay was aborted.";
/**
* A wrapper for setTimeout that resolves a promise after timeInMs milliseconds.
* @param timeInMs - The number of milliseconds to be delayed.
* @param options - The options for delay - currently abort options
* @returns Promise that is resolved after timeInMs
*/
function delay_delay(timeInMs, options) {
let token;
const { abortSignal, abortErrorMsg } = options ?? {};
return createAbortablePromise((resolve) => {
token = setTimeout(resolve, timeInMs);
}, {
cleanupBeforeAbort: () => clearTimeout(token),
abortSignal,
abortErrorMsg: abortErrorMsg ?? delay_StandardAbortMessage,
});
}
//# sourceMappingURL=delay.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/error.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Given what is thought to be an error object, return the message if possible.
* If the message is missing, returns a stringified version of the input.
* @param e - Something thrown from a try block
* @returns The error message or a string of the input
*/
function getErrorMessage(e) {
if (isError(e)) {
return e.message;
}
else {
let stringified;
try {
if (typeof e === "object" && e) {
stringified = JSON.stringify(e);
}
else {
stringified = String(e);
}
}
catch (err) {
stringified = "[unable to stringify input]";
}
return `Unknown error ${stringified}`;
}
}
//# sourceMappingURL=error.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-util/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Calculates the delay interval for retry attempts using exponential delay with jitter.
*
* @param retryAttempt - The current retry attempt number.
*
* @param config - The exponential retry configuration.
*
* @returns An object containing the calculated retry delay.
*/
function esm_calculateRetryDelay(retryAttempt, config) {
return tspRuntime.calculateRetryDelay(retryAttempt, config);
}
/**
* Generates a SHA-256 hash.
*
* @param content - The data to be included in the hash.
*
* @param encoding - The textual encoding to use for the returned hash.
*/
function esm_computeSha256Hash(content, encoding) {
return tspRuntime.computeSha256Hash(content, encoding);
}
/**
* Generates a SHA-256 HMAC signature.
*
* @param key - The HMAC key represented as a base64 string, used to generate the cryptographic HMAC hash.
*
* @param stringToSign - The data to be signed.
*
* @param encoding - The textual encoding to use for the returned HMAC digest.
*/
function esm_computeSha256Hmac(key, stringToSign, encoding) {
return tspRuntime.computeSha256Hmac(key, stringToSign, encoding);
}
/**
* Returns a random integer value between a lower and upper bound, inclusive of both bounds. Note that this uses Math.random and isn't secure. If you need to use this for any kind of security purpose, find a better source of random.
*
* @param min - The smallest integer value allowed.
*
* @param max - The largest integer value allowed.
*/
function esm_getRandomIntegerInclusive(min, max) {
return tspRuntime.getRandomIntegerInclusive(min, max);
}
/**
* Typeguard for an error object shape (has name and message)
*
* @param e - Something caught by a catch clause.
*/
function esm_isError(e) {
return isError(e);
}
/**
* Helper to determine when an input is a generic JS object.
*
* @returns true when input is an object type that is not null, Array, RegExp, or Date.
*/
function esm_isObject(input) {
return tspRuntime.isObject(input);
}
/**
* Generated Universally Unique Identifier
*
* @returns RFC4122 v4 UUID.
*/
function esm_randomUUID() {
return randomUUID();
}
/**
* A constant that indicates whether the environment the code is running is a Web Browser.
*/
const esm_isBrowser = isBrowser;
/**
* A constant that indicates whether the environment the code is running is Bun.sh.
*/
const esm_isBun = isBun;
/**
* A constant that indicates whether the environment the code is running is Deno.
*/
const esm_isDeno = isDeno;
/**
* A constant that indicates whether the environment the code is running is a Node.js compatible environment.
*
* @deprecated
*
* Use `isNodeLike` instead.
*/
const isNode = env_isNodeLike;
/**
* A constant that indicates whether the environment the code is running is a Node.js compatible environment.
*/
const esm_isNodeLike = env_isNodeLike;
/**
* A constant that indicates whether the environment the code is running is Node.JS.
*/
const esm_isNodeRuntime = isNodeRuntime;
/**
* A constant that indicates whether the environment the code is running is in React-Native.
*/
const esm_isReactNative = isReactNative;
/**
* A constant that indicates whether the environment the code is running is a Web Worker.
*/
const esm_isWebWorker = isWebWorker;
/**
* The helper that transforms bytes with specific character encoding into string
* @param bytes - the uint8array bytes
* @param format - the format we use to encode the byte
* @returns a string of the encoded string
*/
function esm_uint8ArrayToString(bytes, format) {
return bytesEncoding_uint8ArrayToString(bytes, format);
}
/**
* The helper that transforms string to specific character encoded bytes array.
* @param value - the string to be converted
* @param format - the format we use to decode the value
* @returns a uint8array
*/
function esm_stringToUint8Array(value, format) {
return bytesEncoding_stringToUint8Array(value, format);
}
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/proxyPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the proxyPolicy.
*/
const proxyPolicy_proxyPolicyName = (/* unused pure expression or super */ null && (tspProxyPolicyName));
/**
* This method converts a proxy url into `ProxySettings` for use with ProxyPolicy.
* If no argument is given, it attempts to parse a proxy URL from the environment
* variables `HTTPS_PROXY` or `HTTP_PROXY`.
* @param proxyUrl - The url of the proxy to use. May contain authentication information.
* @deprecated - Internally this method is no longer necessary when setting proxy information.
*/
function proxyPolicy_getDefaultProxySettings(proxyUrl) {
return getDefaultProxySettings(proxyUrl);
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function policies_proxyPolicy_proxyPolicy(proxySettings, options) {
return proxyPolicy_proxyPolicy(proxySettings, options);
}
//# sourceMappingURL=proxyPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/setClientRequestIdPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the setClientRequestIdPolicy.
*/
const setClientRequestIdPolicyName = "setClientRequestIdPolicy";
/**
* Each PipelineRequest gets a unique id upon creation.
* This policy passes that unique id along via an HTTP header to enable better
* telemetry and tracing.
* @param requestIdHeaderName - The name of the header to pass the request ID to.
*/
function setClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
return {
name: setClientRequestIdPolicyName,
async sendRequest(request, next) {
if (!request.headers.has(requestIdHeaderName)) {
request.headers.set(requestIdHeaderName, request.requestId);
}
return next(request);
},
};
}
//# sourceMappingURL=setClientRequestIdPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/agentPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the Agent Policy
*/
const agentPolicy_agentPolicyName = (/* unused pure expression or super */ null && (tspAgentPolicyName));
/**
* Gets a pipeline policy that sets http.agent
*/
function policies_agentPolicy_agentPolicy(agent) {
return agentPolicy_agentPolicy(agent);
}
//# sourceMappingURL=agentPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/tlsPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the TLS Policy
*/
const tlsPolicy_tlsPolicyName = (/* unused pure expression or super */ null && (tspTlsPolicyName));
/**
* Gets a pipeline policy that adds the client certificate to the HttpClient agent for authentication.
*/
function policies_tlsPolicy_tlsPolicy(tlsSettings) {
return tlsPolicy_tlsPolicy(tlsSettings);
}
//# sourceMappingURL=tlsPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/tracingContext.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/** @internal */
const knownContextKeys = {
span: Symbol.for("@azure/core-tracing span"),
namespace: Symbol.for("@azure/core-tracing namespace"),
};
/**
* Creates a new {@link TracingContext} with the given options.
* @param options - A set of known keys that may be set on the context.
* @returns A new {@link TracingContext} with the given options.
*
* @internal
*/
function createTracingContext(options = {}) {
let context = new TracingContextImpl(options.parentContext);
if (options.span) {
context = context.setValue(knownContextKeys.span, options.span);
}
if (options.namespace) {
context = context.setValue(knownContextKeys.namespace, options.namespace);
}
return context;
}
/** @internal */
class TracingContextImpl {
_contextMap;
constructor(initialContext) {
this._contextMap =
initialContext instanceof TracingContextImpl
? new Map(initialContext._contextMap)
: new Map();
}
setValue(key, value) {
const newContext = new TracingContextImpl(this);
newContext._contextMap.set(key, value);
return newContext;
}
getValue(key) {
return this._contextMap.get(key);
}
deleteValue(key) {
const newContext = new TracingContextImpl(this);
newContext._contextMap.delete(key);
return newContext;
}
}
//# sourceMappingURL=tracingContext.js.map
// EXTERNAL MODULE: ./node_modules/@azure/core-tracing/dist/commonjs/state-cjs.js
var state_cjs = __webpack_require__(9437);
;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/state.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// @ts-expect-error The recommended approach to sharing module state between ESM and CJS.
// See https://github.com/isaacs/tshy/blob/main/README.md#module-local-state for additional information.
/**
* Defines the shared state between CJS and ESM by re-exporting the CJS state.
*/
const state_state = state_cjs/* state */.w;
//# sourceMappingURL=state.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/instrumenter.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function createDefaultTracingSpan() {
return {
end: () => {
// noop
},
isRecording: () => false,
recordException: () => {
// noop
},
setAttribute: () => {
// noop
},
setStatus: () => {
// noop
},
addEvent: () => {
// noop
},
};
}
function createDefaultInstrumenter() {
return {
createRequestHeaders: () => {
return {};
},
parseTraceparentHeader: () => {
return undefined;
},
startSpan: (_name, spanOptions) => {
return {
span: createDefaultTracingSpan(),
tracingContext: createTracingContext({ parentContext: spanOptions.tracingContext }),
};
},
withContext(_context, callback, ...callbackArgs) {
return callback(...callbackArgs);
},
};
}
/**
* Extends the Azure SDK with support for a given instrumenter implementation.
*
* @param instrumenter - The instrumenter implementation to use.
*/
function useInstrumenter(instrumenter) {
state.instrumenterImplementation = instrumenter;
}
/**
* Gets the currently set instrumenter, a No-Op instrumenter by default.
*
* @returns The currently set instrumenter
*/
function getInstrumenter() {
if (!state_state.instrumenterImplementation) {
state_state.instrumenterImplementation = createDefaultInstrumenter();
}
return state_state.instrumenterImplementation;
}
//# sourceMappingURL=instrumenter.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/tracingClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a new tracing client.
*
* @param options - Options used to configure the tracing client.
* @returns - An instance of {@link TracingClient}.
*/
function createTracingClient(options) {
const { namespace, packageName, packageVersion } = options;
function startSpan(name, operationOptions, spanOptions) {
const startSpanResult = getInstrumenter().startSpan(name, {
...spanOptions,
packageName,
packageVersion,
tracingContext: operationOptions?.tracingOptions?.tracingContext,
});
let tracingContext = startSpanResult.tracingContext;
const span = startSpanResult.span;
if (!tracingContext.getValue(knownContextKeys.namespace)) {
tracingContext = tracingContext.setValue(knownContextKeys.namespace, namespace);
}
span.setAttribute("az.namespace", tracingContext.getValue(knownContextKeys.namespace));
const updatedOptions = Object.assign({}, operationOptions, {
tracingOptions: { ...operationOptions?.tracingOptions, tracingContext },
});
return {
span,
updatedOptions,
};
}
async function withSpan(name, operationOptions, callback, spanOptions) {
const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions);
try {
const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => callback(updatedOptions, span));
span.setStatus({ status: "success" });
return result;
}
catch (err) {
span.setStatus({ status: "error", error: err });
throw err;
}
finally {
span.end();
}
}
function withContext(context, callback, ...callbackArgs) {
return getInstrumenter().withContext(context, callback, ...callbackArgs);
}
/**
* Parses a traceparent header value into a span identifier.
*
* @param traceparentHeader - The traceparent header to parse.
* @returns An implementation-specific identifier for the span.
*/
function parseTraceparentHeader(traceparentHeader) {
return getInstrumenter().parseTraceparentHeader(traceparentHeader);
}
/**
* Creates a set of request headers to propagate tracing information to a backend.
*
* @param tracingContext - The context containing the span to serialize.
* @returns The set of headers to add to a request.
*/
function createRequestHeaders(tracingContext) {
return getInstrumenter().createRequestHeaders(tracingContext);
}
return {
startSpan,
withSpan,
withContext,
parseTraceparentHeader,
createRequestHeaders,
};
}
//# sourceMappingURL=tracingClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-tracing/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/restError.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A custom error type for failed pipeline requests.
*/
// eslint-disable-next-line @typescript-eslint/no-redeclare
const esm_restError_RestError = restError_RestError;
/**
* Typeguard for RestError
* @param e - Something caught by a catch clause.
*/
function esm_restError_isRestError(e) {
return restError_isRestError(e);
}
//# sourceMappingURL=restError.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/tracingPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the tracingPolicy.
*/
const tracingPolicyName = "tracingPolicy";
/**
* A simple policy to create OpenTelemetry Spans for each request made by the pipeline
* that has SpanOptions with a parent.
* Requests made without a parent Span will not be recorded.
* @param options - Options to configure the telemetry logged by the tracing policy.
*/
function tracingPolicy(options = {}) {
const userAgentPromise = util_userAgent_getUserAgentValue(options.userAgentPrefix);
const sanitizer = new Sanitizer({
additionalAllowedQueryParameters: options.additionalAllowedQueryParameters,
});
const tracingClient = tryCreateTracingClient();
return {
name: tracingPolicyName,
async sendRequest(request, next) {
if (!tracingClient) {
return next(request);
}
const userAgent = await userAgentPromise;
const spanAttributes = {
"http.url": sanitizer.sanitizeUrl(request.url),
"http.method": request.method,
"http.user_agent": userAgent,
requestId: request.requestId,
};
if (userAgent) {
spanAttributes["http.user_agent"] = userAgent;
}
const { span, tracingContext } = tryCreateSpan(tracingClient, request, spanAttributes) ?? {};
if (!span || !tracingContext) {
return next(request);
}
try {
const response = await tracingClient.withContext(tracingContext, next, request);
tryProcessResponse(span, response);
return response;
}
catch (err) {
tryProcessError(span, err);
throw err;
}
},
};
}
function tryCreateTracingClient() {
try {
return createTracingClient({
namespace: "",
packageName: "@azure/core-rest-pipeline",
packageVersion: esm_constants_SDK_VERSION,
});
}
catch (e) {
esm_log_logger.warning(`Error when creating the TracingClient: ${getErrorMessage(e)}`);
return undefined;
}
}
function tryCreateSpan(tracingClient, request, spanAttributes) {
try {
// As per spec, we do not need to differentiate between HTTP and HTTPS in span name.
const { span, updatedOptions } = tracingClient.startSpan(`HTTP ${request.method}`, { tracingOptions: request.tracingOptions }, {
spanKind: "client",
spanAttributes,
});
// If the span is not recording, don't do any more work.
if (!span.isRecording()) {
span.end();
return undefined;
}
// set headers
const headers = tracingClient.createRequestHeaders(updatedOptions.tracingOptions.tracingContext);
for (const [key, value] of Object.entries(headers)) {
request.headers.set(key, value);
}
return { span, tracingContext: updatedOptions.tracingOptions.tracingContext };
}
catch (e) {
esm_log_logger.warning(`Skipping creating a tracing span due to an error: ${getErrorMessage(e)}`);
return undefined;
}
}
function tryProcessError(span, error) {
try {
span.setStatus({
status: "error",
error: esm_isError(error) ? error : undefined,
});
if (esm_restError_isRestError(error) && error.statusCode) {
span.setAttribute("http.status_code", error.statusCode);
}
span.end();
}
catch (e) {
esm_log_logger.warning(`Skipping tracing span processing due to an error: ${getErrorMessage(e)}`);
}
}
function tryProcessResponse(span, response) {
try {
span.setAttribute("http.status_code", response.status);
const serviceRequestId = response.headers.get("x-ms-request-id");
if (serviceRequestId) {
span.setAttribute("serviceRequestId", serviceRequestId);
}
// Per semantic conventions, only set the status to error if the status code is 4xx or 5xx.
// Otherwise, the status MUST remain unset.
// https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status
if (response.status >= 400) {
span.setStatus({
status: "error",
});
}
span.end();
}
catch (e) {
esm_log_logger.warning(`Skipping tracing span processing due to an error: ${getErrorMessage(e)}`);
}
}
//# sourceMappingURL=tracingPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/wrapAbortSignal.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a native AbortSignal which reflects the state of the provided AbortSignalLike.
* If the AbortSignalLike is already a native AbortSignal, it is returned as is.
* @param abortSignalLike - The AbortSignalLike to wrap.
* @returns - An object containing the native AbortSignal and an optional cleanup function. The cleanup function should be called when the AbortSignal is no longer needed.
*/
function wrapAbortSignalLike(abortSignalLike) {
if (abortSignalLike instanceof AbortSignal) {
return { abortSignal: abortSignalLike };
}
if (abortSignalLike.aborted) {
return {
abortSignal: AbortSignal.abort("reason" in abortSignalLike ? abortSignalLike.reason : undefined),
};
}
const controller = new AbortController();
let needsCleanup = true;
function cleanup() {
if (needsCleanup) {
abortSignalLike.removeEventListener("abort", listener);
needsCleanup = false;
}
}
function listener() {
controller.abort("reason" in abortSignalLike ? abortSignalLike.reason : undefined);
cleanup();
}
abortSignalLike.addEventListener("abort", listener);
return { abortSignal: controller.signal, cleanup };
}
//# sourceMappingURL=wrapAbortSignal.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/wrapAbortSignalLikePolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const wrapAbortSignalLikePolicyName = "wrapAbortSignalLikePolicy";
/**
* Policy that ensure that any AbortSignalLike is wrapped in a native AbortSignal for processing by the pipeline.
* Since the ts-http-runtime expects a native AbortSignal, this policy is used to ensure that any AbortSignalLike is wrapped in a native AbortSignal.
*
* @returns - created policy
*/
function wrapAbortSignalLikePolicy() {
return {
name: wrapAbortSignalLikePolicyName,
sendRequest: async (request, next) => {
if (!request.abortSignal) {
return next(request);
}
const { abortSignal, cleanup } = wrapAbortSignalLike(request.abortSignal);
request.abortSignal = abortSignal;
try {
return await next(request);
}
finally {
cleanup?.();
}
},
};
}
//# sourceMappingURL=wrapAbortSignalLikePolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/createPipelineFromOptions.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Create a new pipeline with a default set of customizable policies.
* @param options - Options to configure a custom pipeline.
*/
function esm_createPipelineFromOptions_createPipelineFromOptions(options) {
const pipeline = esm_pipeline_createEmptyPipeline();
if (esm_isNodeLike) {
if (options.agent) {
pipeline.addPolicy(policies_agentPolicy_agentPolicy(options.agent));
}
if (options.tlsOptions) {
pipeline.addPolicy(policies_tlsPolicy_tlsPolicy(options.tlsOptions));
}
pipeline.addPolicy(policies_proxyPolicy_proxyPolicy(options.proxyOptions));
pipeline.addPolicy(policies_decompressResponsePolicy_decompressResponsePolicy());
}
pipeline.addPolicy(wrapAbortSignalLikePolicy());
pipeline.addPolicy(policies_formDataPolicy_formDataPolicy(), { beforePolicies: [policies_multipartPolicy_multipartPolicyName] });
pipeline.addPolicy(policies_userAgentPolicy_userAgentPolicy(options.userAgentOptions));
pipeline.addPolicy(setClientRequestIdPolicy(options.telemetryOptions?.clientRequestIdHeaderName));
// The multipart policy is added after policies with no phase, so that
// policies can be added between it and formDataPolicy to modify
// properties (e.g., making the boundary constant in recorded tests).
pipeline.addPolicy(policies_multipartPolicy_multipartPolicy(), { afterPhase: "Deserialize" });
pipeline.addPolicy(policies_defaultRetryPolicy_defaultRetryPolicy(options.retryOptions), { phase: "Retry" });
pipeline.addPolicy(tracingPolicy({ ...options.userAgentOptions, ...options.loggingOptions }), {
afterPhase: "Retry",
});
if (esm_isNodeLike) {
// Both XHR and Fetch expect to handle redirects automatically,
// so only include this policy when we're in Node.
pipeline.addPolicy(policies_redirectPolicy_redirectPolicy(options.redirectOptions), { afterPhase: "Retry" });
}
pipeline.addPolicy(policies_logPolicy_logPolicy(options.loggingOptions), { afterPhase: "Sign" });
return pipeline;
}
//# sourceMappingURL=createPipelineFromOptions.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/defaultHttpClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Create the correct HttpClient for the current environment.
*/
function esm_defaultHttpClient_createDefaultHttpClient() {
const client = defaultHttpClient_createDefaultHttpClient();
return {
async sendRequest(request) {
// we wrap any AbortSignalLike here since the TypeSpec runtime expects a native AbortSignal.
// 99% of the time, this should be a no-op since a native AbortSignal is passed in.
const { abortSignal, cleanup } = request.abortSignal
? wrapAbortSignalLike(request.abortSignal)
: {};
try {
request.abortSignal = abortSignal;
return await client.sendRequest(request);
}
finally {
cleanup?.();
}
},
};
}
//# sourceMappingURL=defaultHttpClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/httpHeaders.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates an object that satisfies the `HttpHeaders` interface.
* @param rawHeaders - A simple object representing initial headers
*/
function esm_httpHeaders_createHttpHeaders(rawHeaders) {
return httpHeaders_createHttpHeaders(rawHeaders);
}
//# sourceMappingURL=httpHeaders.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/pipelineRequest.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a new pipeline request with the given options.
* This method is to allow for the easy setting of default values and not required.
* @param options - The options to create the request with.
*/
function esm_pipelineRequest_createPipelineRequest(options) {
// Cast required due to difference between ts-http-runtime requiring AbortSignal while core-rest-pipeline allows
// the more generic AbortSignalLike. The wrapAbortSignalLike pipeline policy will take care of ensuring that any AbortSignalLike in the request
// is converted into a true AbortSignal.
return pipelineRequest_createPipelineRequest(options);
}
//# sourceMappingURL=pipelineRequest.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/exponentialRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the exponentialRetryPolicy.
*/
const exponentialRetryPolicy_exponentialRetryPolicyName = (/* unused pure expression or super */ null && (tspExponentialRetryPolicyName));
/**
* A policy that attempts to retry requests while introducing an exponentially increasing delay.
* @param options - Options that configure retry logic.
*/
function exponentialRetryPolicy_exponentialRetryPolicy(options = {}) {
return tspExponentialRetryPolicy(options);
}
//# sourceMappingURL=exponentialRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/systemErrorRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link systemErrorRetryPolicy}
*/
const systemErrorRetryPolicy_systemErrorRetryPolicyName = (/* unused pure expression or super */ null && (tspSystemErrorRetryPolicyName));
/**
* A retry policy that specifically seeks to handle errors in the
* underlying transport layer (e.g. DNS lookup failures) rather than
* retryable error codes from the server itself.
* @param options - Options that customize the policy.
*/
function systemErrorRetryPolicy_systemErrorRetryPolicy(options = {}) {
return tspSystemErrorRetryPolicy(options);
}
//# sourceMappingURL=systemErrorRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/throttlingRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link throttlingRetryPolicy}
*/
const throttlingRetryPolicy_throttlingRetryPolicyName = (/* unused pure expression or super */ null && (tspThrottlingRetryPolicyName));
/**
* A policy that retries when the server sends a 429 response with a Retry-After header.
*
* To learn more, please refer to
* https://learn.microsoft.com/azure/azure-resource-manager/resource-manager-request-limits,
* https://learn.microsoft.com/azure/azure-subscription-service-limits and
* https://learn.microsoft.com/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
*
* @param options - Options that configure retry logic.
*/
function throttlingRetryPolicy_throttlingRetryPolicy(options = {}) {
return tspThrottlingRetryPolicy(options);
}
//# sourceMappingURL=throttlingRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/retryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const retryPolicy_retryPolicyLogger = esm_createClientLogger("core-rest-pipeline retryPolicy");
/**
* retryPolicy is a generic policy to enable retrying requests when certain conditions are met
*/
function policies_retryPolicy_retryPolicy(strategies, options = { maxRetries: DEFAULT_RETRY_POLICY_COUNT }) {
// Cast is required since the TSP runtime retry strategy type is slightly different
// very deep down (using real AbortSignal vs. AbortSignalLike in RestError).
// In practice the difference doesn't actually matter.
return tspRetryPolicy(strategies, {
logger: retryPolicy_retryPolicyLogger,
...options,
});
}
//# sourceMappingURL=retryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/util/tokenCycler.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// Default options for the cycler if none are provided
const DEFAULT_CYCLER_OPTIONS = {
forcedRefreshWindowInMs: 1000, // Force waiting for a refresh 1s before the token expires
retryIntervalInMs: 3000, // Allow refresh attempts every 3s
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
};
/**
* Converts an an unreliable access token getter (which may resolve with null)
* into an AccessTokenGetter by retrying the unreliable getter in a regular
* interval.
*
* @param getAccessToken - A function that produces a promise of an access token that may fail by returning null.
* @param retryIntervalInMs - The time (in milliseconds) to wait between retry attempts.
* @param refreshTimeout - The timestamp after which the refresh attempt will fail, throwing an exception.
* @returns - A promise that, if it resolves, will resolve with an access token.
*/
async function beginRefresh(getAccessToken, retryIntervalInMs, refreshTimeout) {
// This wrapper handles exceptions gracefully as long as we haven't exceeded
// the timeout.
async function tryGetAccessToken() {
if (Date.now() < refreshTimeout) {
try {
return await getAccessToken();
}
catch {
return null;
}
}
else {
const finalToken = await getAccessToken();
// Timeout is up, so throw if it's still null
if (finalToken === null) {
throw new Error("Failed to refresh access token.");
}
return finalToken;
}
}
let token = await tryGetAccessToken();
while (token === null) {
await delay_delay(retryIntervalInMs);
token = await tryGetAccessToken();
}
return token;
}
/**
* Creates a token cycler from a credential, scopes, and optional settings.
*
* A token cycler represents a way to reliably retrieve a valid access token
* from a TokenCredential. It will handle initializing the token, refreshing it
* when it nears expiration, and synchronizes refresh attempts to avoid
* concurrency hazards.
*
* @param credential - the underlying TokenCredential that provides the access
* token
* @param tokenCyclerOptions - optionally override default settings for the cycler
*
* @returns - a function that reliably produces a valid access token
*/
function tokenCycler_createTokenCycler(credential, tokenCyclerOptions) {
let refreshWorker = null;
let token = null;
let tenantId;
const options = {
...DEFAULT_CYCLER_OPTIONS,
...tokenCyclerOptions,
};
/**
* This little holder defines several predicates that we use to construct
* the rules of refreshing the token.
*/
const cycler = {
/**
* Produces true if a refresh job is currently in progress.
*/
get isRefreshing() {
return refreshWorker !== null;
},
/**
* Produces true if the cycler SHOULD refresh (we are within the refresh
* window and not already refreshing)
*/
get shouldRefresh() {
if (token === null) {
return true;
}
if (cycler.isRefreshing) {
return false;
}
if (token.refreshAfterTimestamp && token.refreshAfterTimestamp < Date.now()) {
return true;
}
return token.expiresOnTimestamp - options.refreshWindowInMs < Date.now();
},
/**
* Produces true if the cycler MUST refresh (null or nearly-expired
* token).
*/
get mustRefresh() {
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
},
};
/**
* Starts a refresh job or returns the existing job if one is already
* running.
*/
function refresh(scopes, getTokenOptions) {
if (!cycler.isRefreshing) {
// We bind `scopes` here to avoid passing it around a lot
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
// Take advantage of promise chaining to insert an assignment to `token`
// before the refresh can be considered done.
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
// If we don't have a token, then we should timeout immediately
token?.expiresOnTimestamp ?? Date.now())
.then((_token) => {
refreshWorker = null;
token = _token;
tenantId = getTokenOptions.tenantId;
return token;
})
.catch((reason) => {
// We also should reset the refresher if we enter a failed state. All
// existing awaiters will throw, but subsequent requests will start a
// new retry chain.
refreshWorker = null;
token = null;
tenantId = undefined;
throw reason;
});
}
return refreshWorker;
}
return async (scopes, tokenOptions) => {
//
// Simple rules:
// - If we MUST refresh, then return the refresh task, blocking
// the pipeline until a token is available.
// - If we SHOULD refresh, then run refresh but don't return it
// (we can still use the cached token).
// - Return the token, since it's fine if we didn't return in
// step 1.
//
const hasClaimChallenge = Boolean(tokenOptions.claims);
const tenantIdChanged = tenantId !== tokenOptions.tenantId;
if (hasClaimChallenge) {
// If we've received a claim, we know the existing token isn't valid
// We want to clear it so that that refresh worker won't use the old expiration time as a timeout
token = null;
}
// If the tenantId passed in token options is different to the one we have
// Or if we are in claim challenge and the token was rejected and a new access token need to be issued, we need to
// refresh the token with the new tenantId or token.
const mustRefresh = tenantIdChanged || hasClaimChallenge || cycler.mustRefresh;
if (mustRefresh) {
return refresh(scopes, tokenOptions);
}
if (cycler.shouldRefresh) {
refresh(scopes, tokenOptions);
}
return token;
};
}
//# sourceMappingURL=tokenCycler.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/bearerTokenAuthenticationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the bearerTokenAuthenticationPolicy.
*/
const bearerTokenAuthenticationPolicyName = "bearerTokenAuthenticationPolicy";
/**
* Try to send the given request.
*
* When a response is received, returns a tuple of the response received and, if the response was received
* inside a thrown RestError, the RestError that was thrown.
*
* Otherwise, if an error was thrown while sending the request that did not provide an underlying response, it
* will be rethrown.
*/
async function trySendRequest(request, next) {
try {
return [await next(request), undefined];
}
catch (e) {
if (esm_restError_isRestError(e) && e.response) {
return [e.response, e];
}
else {
throw e;
}
}
}
/**
* Default authorize request handler
*/
async function defaultAuthorizeRequest(options) {
const { scopes, getAccessToken, request } = options;
// Enable CAE true by default
const getTokenOptions = {
abortSignal: request.abortSignal,
tracingOptions: request.tracingOptions,
enableCae: true,
};
const accessToken = await getAccessToken(scopes, getTokenOptions);
if (accessToken) {
options.request.headers.set("Authorization", `Bearer ${accessToken.token}`);
}
}
/**
* We will retrieve the challenge only if the response status code was 401,
* and if the response contained the header "WWW-Authenticate" with a non-empty value.
*/
function isChallengeResponse(response) {
return response.status === 401 && response.headers.has("WWW-Authenticate");
}
/**
* Re-authorize the request for CAE challenge.
* The response containing the challenge is `options.response`.
* If this method returns true, the underlying request will be sent once again.
*/
async function authorizeRequestOnCaeChallenge(onChallengeOptions, caeClaims) {
const { scopes } = onChallengeOptions;
const accessToken = await onChallengeOptions.getAccessToken(scopes, {
enableCae: true,
claims: caeClaims,
});
if (!accessToken) {
return false;
}
onChallengeOptions.request.headers.set("Authorization", `${accessToken.tokenType ?? "Bearer"} ${accessToken.token}`);
return true;
}
/**
* A policy that can request a token from a TokenCredential implementation and
* then apply it to the Authorization header of a request as a Bearer token.
*/
function bearerTokenAuthenticationPolicy(options) {
const { credential, scopes, challengeCallbacks } = options;
const logger = options.logger || esm_log_logger;
const callbacks = {
authorizeRequest: challengeCallbacks?.authorizeRequest?.bind(challengeCallbacks) ?? defaultAuthorizeRequest,
authorizeRequestOnChallenge: challengeCallbacks?.authorizeRequestOnChallenge?.bind(challengeCallbacks),
};
// This function encapsulates the entire process of reliably retrieving the token
// The options are left out of the public API until there's demand to configure this.
// Remember to extend `BearerTokenAuthenticationPolicyOptions` with `TokenCyclerOptions`
// in order to pass through the `options` object.
const getAccessToken = credential
? tokenCycler_createTokenCycler(credential /* , options */)
: () => Promise.resolve(null);
return {
name: bearerTokenAuthenticationPolicyName,
/**
* If there's no challenge parameter:
* - It will try to retrieve the token using the cache, or the credential's getToken.
* - Then it will try the next policy with or without the retrieved token.
*
* It uses the challenge parameters to:
* - Skip a first attempt to get the token from the credential if there's no cached token,
* since it expects the token to be retrievable only after the challenge.
* - Prepare the outgoing request if the `prepareRequest` method has been provided.
* - Send an initial request to receive the challenge if it fails.
* - Process a challenge if the response contains it.
* - Retrieve a token with the challenge information, then re-send the request.
*/
async sendRequest(request, next) {
if (!request.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
}
await callbacks.authorizeRequest({
scopes: Array.isArray(scopes) ? scopes : [scopes],
request,
getAccessToken,
logger,
});
let response;
let error;
let shouldSendRequest;
[response, error] = await trySendRequest(request, next);
if (isChallengeResponse(response)) {
let claims = getCaeChallengeClaims(response.headers.get("WWW-Authenticate"));
// Handle CAE by default when receive CAE claim
if (claims) {
let parsedClaim;
// Return the response immediately if claims is not a valid base64 encoded string
try {
parsedClaim = atob(claims);
}
catch (e) {
logger.warning(`The WWW-Authenticate header contains "claims" that cannot be parsed. Unable to perform the Continuous Access Evaluation authentication flow. Unparsable claims: ${claims}`);
return response;
}
shouldSendRequest = await authorizeRequestOnCaeChallenge({
scopes: Array.isArray(scopes) ? scopes : [scopes],
response,
request,
getAccessToken,
logger,
}, parsedClaim);
// Send updated request and handle response for RestError
if (shouldSendRequest) {
[response, error] = await trySendRequest(request, next);
}
}
else if (callbacks.authorizeRequestOnChallenge) {
// Handle custom challenges when client provides custom callback
shouldSendRequest = await callbacks.authorizeRequestOnChallenge({
scopes: Array.isArray(scopes) ? scopes : [scopes],
request,
response,
getAccessToken,
logger,
});
// Send updated request and handle response for RestError
if (shouldSendRequest) {
[response, error] = await trySendRequest(request, next);
}
// If we get another CAE Claim, we will handle it by default and return whatever value we receive for this
if (isChallengeResponse(response)) {
claims = getCaeChallengeClaims(response.headers.get("WWW-Authenticate") ?? "");
if (claims) {
let parsedClaim;
try {
parsedClaim = atob(claims);
}
catch (e) {
logger.warning(`The WWW-Authenticate header contains "claims" that cannot be parsed. Unable to perform the Continuous Access Evaluation authentication flow. Unparsable claims: ${claims}`);
return response;
}
shouldSendRequest = await authorizeRequestOnCaeChallenge({
scopes: Array.isArray(scopes) ? scopes : [scopes],
response,
request,
getAccessToken,
logger,
}, parsedClaim);
// Send updated request and handle response for RestError
if (shouldSendRequest) {
[response, error] = await trySendRequest(request, next);
}
}
}
}
}
if (error) {
throw error;
}
else {
return response;
}
},
};
}
/**
* Converts: `Bearer a="b", c="d", Pop e="f", g="h"`.
* Into: `[ { scheme: 'Bearer', params: { a: 'b', c: 'd' } }, { scheme: 'Pop', params: { e: 'f', g: 'h' } } ]`.
*
* @internal
*/
function parseChallenges(challenges) {
// Challenge regex seperates the string to individual challenges with different schemes in the format `Scheme a="b", c=d`
// The challenge regex captures parameteres with either quotes values or unquoted values
const challengeRegex = /(\w+)\s+((?:\w+=(?:"[^"]*"|[^,]*),?\s*)+)/g;
// Parameter regex captures the claims group removed from the scheme in the format `a="b"` and `c="d"`
// CAE challenge always have quoted parameters. For more reference, https://learn.microsoft.com/entra/identity-platform/claims-challenge
const paramRegex = /(\w+)="([^"]*)"/g;
const parsedChallenges = [];
let match;
// Iterate over each challenge match
while ((match = challengeRegex.exec(challenges)) !== null) {
const scheme = match[1];
const paramsString = match[2];
const params = {};
let paramMatch;
// Iterate over each parameter match
while ((paramMatch = paramRegex.exec(paramsString)) !== null) {
params[paramMatch[1]] = paramMatch[2];
}
parsedChallenges.push({ scheme, params });
}
return parsedChallenges;
}
/**
* Parse a pipeline response and look for a CAE challenge with "Bearer" scheme
* Return the value in the header without parsing the challenge
* @internal
*/
function getCaeChallengeClaims(challenges) {
if (!challenges) {
return;
}
// Find all challenges present in the header
const parsedChallenges = parseChallenges(challenges);
return parsedChallenges.find((x) => x.scheme === "Bearer" && x.params.claims && x.params.error === "insufficient_claims")?.params.claims;
}
//# sourceMappingURL=bearerTokenAuthenticationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/policies/auxiliaryAuthenticationHeaderPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the auxiliaryAuthenticationHeaderPolicy.
*/
const auxiliaryAuthenticationHeaderPolicyName = "auxiliaryAuthenticationHeaderPolicy";
const AUTHORIZATION_AUXILIARY_HEADER = "x-ms-authorization-auxiliary";
async function sendAuthorizeRequest(options) {
const { scopes, getAccessToken, request } = options;
const getTokenOptions = {
abortSignal: request.abortSignal,
tracingOptions: request.tracingOptions,
};
return (await getAccessToken(scopes, getTokenOptions))?.token ?? "";
}
/**
* A policy for external tokens to `x-ms-authorization-auxiliary` header.
* This header will be used when creating a cross-tenant application we may need to handle authentication requests
* for resources that are in different tenants.
* You could see [ARM docs](https://learn.microsoft.com/azure/azure-resource-manager/management/authenticate-multi-tenant) for a rundown of how this feature works
*/
function auxiliaryAuthenticationHeaderPolicy(options) {
const { credentials, scopes } = options;
const logger = options.logger || coreLogger;
const tokenCyclerMap = new WeakMap();
return {
name: auxiliaryAuthenticationHeaderPolicyName,
async sendRequest(request, next) {
if (!request.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication for auxiliary header is not permitted for non-TLS protected (non-https) URLs.");
}
if (!credentials || credentials.length === 0) {
logger.info(`${auxiliaryAuthenticationHeaderPolicyName} header will not be set due to empty credentials.`);
return next(request);
}
const tokenPromises = [];
for (const credential of credentials) {
let getAccessToken = tokenCyclerMap.get(credential);
if (!getAccessToken) {
getAccessToken = createTokenCycler(credential);
tokenCyclerMap.set(credential, getAccessToken);
}
tokenPromises.push(sendAuthorizeRequest({
scopes: Array.isArray(scopes) ? scopes : [scopes],
request,
getAccessToken,
logger,
}));
}
const auxiliaryTokens = (await Promise.all(tokenPromises)).filter((token) => Boolean(token));
if (auxiliaryTokens.length === 0) {
logger.warning(`None of the auxiliary tokens are valid. ${AUTHORIZATION_AUXILIARY_HEADER} header will not be set.`);
return next(request);
}
request.headers.set(AUTHORIZATION_AUXILIARY_HEADER, auxiliaryTokens.map((token) => `Bearer ${token}`).join(", "));
return next(request);
},
};
}
//# sourceMappingURL=auxiliaryAuthenticationHeaderPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-rest-pipeline/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/keyCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Tests an object to determine whether it implements KeyCredential.
*
* @param credential - The assumed KeyCredential to be tested.
*/
function isKeyCredential(credential) {
return isObjectWithProperties(credential, ["key"]) && typeof credential.key === "string";
}
//# sourceMappingURL=keyCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/azureNamedKeyCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A static name/key-based credential that supports updating
* the underlying name and key values.
*/
class AzureNamedKeyCredential {
_key;
_name;
/**
* The value of the key to be used in authentication.
*/
get key() {
return this._key;
}
/**
* The value of the name to be used in authentication.
*/
get name() {
return this._name;
}
/**
* Create an instance of an AzureNamedKeyCredential for use
* with a service client.
*
* @param name - The initial value of the name to use in authentication.
* @param key - The initial value of the key to use in authentication.
*/
constructor(name, key) {
if (!name || !key) {
throw new TypeError("name and key must be non-empty strings");
}
this._name = name;
this._key = key;
}
/**
* Change the value of the key.
*
* Updates will take effect upon the next request after
* updating the key value.
*
* @param newName - The new name value to be used.
* @param newKey - The new key value to be used.
*/
update(newName, newKey) {
if (!newName || !newKey) {
throw new TypeError("newName and newKey must be non-empty strings");
}
this._name = newName;
this._key = newKey;
}
}
/**
* Tests an object to determine whether it implements NamedKeyCredential.
*
* @param credential - The assumed NamedKeyCredential to be tested.
*/
function isNamedKeyCredential(credential) {
return (isObjectWithProperties(credential, ["name", "key"]) &&
typeof credential.key === "string" &&
typeof credential.name === "string");
}
//# sourceMappingURL=azureNamedKeyCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/azureSASCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A static-signature-based credential that supports updating
* the underlying signature value.
*/
class AzureSASCredential {
_signature;
/**
* The value of the shared access signature to be used in authentication
*/
get signature() {
return this._signature;
}
/**
* Create an instance of an AzureSASCredential for use
* with a service client.
*
* @param signature - The initial value of the shared access signature to use in authentication
*/
constructor(signature) {
if (!signature) {
throw new Error("shared access signature must be a non-empty string");
}
this._signature = signature;
}
/**
* Change the value of the signature.
*
* Updates will take effect upon the next request after
* updating the signature value.
*
* @param newSignature - The new shared access signature value to be used
*/
update(newSignature) {
if (!newSignature) {
throw new Error("shared access signature must be a non-empty string");
}
this._signature = newSignature;
}
}
/**
* Tests an object to determine whether it implements SASCredential.
*
* @param credential - The assumed SASCredential to be tested.
*/
function isSASCredential(credential) {
return (isObjectWithProperties(credential, ["signature"]) && typeof credential.signature === "string");
}
//# sourceMappingURL=azureSASCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/tokenCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Tests an object to determine whether it implements TokenCredential.
*
* @param credential - The assumed TokenCredential to be tested.
*/
function isTokenCredential(credential) {
// Check for an object with a 'getToken' function and possibly with
// a 'signRequest' function. We do this check to make sure that
// a ServiceClientCredentials implementor (like TokenClientCredentials
// in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if
// it doesn't actually implement TokenCredential also.
const castCredential = credential;
return (castCredential &&
typeof castCredential.getToken === "function" &&
(castCredential.signRequest === undefined || castCredential.getToken.length > 0));
}
//# sourceMappingURL=tokenCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-auth/dist/esm/index.js
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/policies/disableKeepAlivePolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const disableKeepAlivePolicyName = "DisableKeepAlivePolicy";
function createDisableKeepAlivePolicy() {
return {
name: disableKeepAlivePolicyName,
sendRequest(request, next) {
request.disableKeepAlive = true;
return next(request);
},
};
}
/**
* @internal
*/
function pipelineContainsDisableKeepAlivePolicy(pipeline) {
return pipeline.getOrderedPolicies().some((policy) => policy.name === disableKeepAlivePolicyName);
}
//# sourceMappingURL=disableKeepAlivePolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/base64.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Encodes a string in base64 format.
* @param value - the string to encode
* @internal
*/
function encodeString(value) {
return uint8ArrayToString(stringToUint8Array(value, "utf-8"), "base64");
}
/**
* Encodes a byte array in base64 format.
* @param value - the Uint8Array to encode
* @internal
*/
function encodeByteArray(value) {
return esm_uint8ArrayToString(value, "base64");
}
/**
* Decodes a base64 string into a byte array.
* @param value - the base64 string to decode
* @internal
*/
function decodeString(value) {
return esm_stringToUint8Array(value, "base64");
}
/**
* Decodes a base64 string into a string.
* @param value - the base64 string to decode
* @internal
*/
function base64_decodeStringToString(value) {
return uint8ArrayToString(stringToUint8Array(value, "base64"), "utf-8");
}
//# sourceMappingURL=base64.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/interfaces.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Default key used to access the XML attributes.
*/
const XML_ATTRKEY = "$";
/**
* Default key used to access the XML value content.
*/
const XML_CHARKEY = "_";
//# sourceMappingURL=interfaces.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/utils.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A type guard for a primitive response body.
* @param value - Value to test
*
* @internal
*/
function isPrimitiveBody(value, mapperTypeName) {
return (mapperTypeName !== "Composite" &&
mapperTypeName !== "Dictionary" &&
(typeof value === "string" ||
typeof value === "number" ||
typeof value === "boolean" ||
mapperTypeName?.match(/^(Date|DateTime|DateTimeRfc1123|UnixTime|ByteArray|Base64Url)$/i) !==
null ||
value === undefined ||
value === null));
}
const validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
/**
* Returns true if the given string is in ISO 8601 format.
* @param value - The value to be validated for ISO 8601 duration format.
* @internal
*/
function isDuration(value) {
return validateISODuration.test(value);
}
const validUuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i;
/**
* Returns true if the provided uuid is valid.
*
* @param uuid - The uuid that needs to be validated.
*
* @internal
*/
function isValidUuid(uuid) {
return validUuidRegex.test(uuid);
}
/**
* Maps the response as follows:
* - wraps the response body if needed (typically if its type is primitive).
* - returns null if the combination of the headers and the body is empty.
* - otherwise, returns the combination of the headers and the body.
*
* @param responseObject - a representation of the parsed response
* @returns the response that will be returned to the user which can be null and/or wrapped
*
* @internal
*/
function handleNullableResponseAndWrappableBody(responseObject) {
const combinedHeadersAndBody = {
...responseObject.headers,
...responseObject.body,
};
if (responseObject.hasNullableType &&
Object.getOwnPropertyNames(combinedHeadersAndBody).length === 0) {
return responseObject.shouldWrapBody ? { body: null } : null;
}
else {
return responseObject.shouldWrapBody
? {
...responseObject.headers,
body: responseObject.body,
}
: combinedHeadersAndBody;
}
}
/**
* Take a `FullOperationResponse` and turn it into a flat
* response object to hand back to the consumer.
* @param fullResponse - The processed response from the operation request
* @param responseSpec - The response map from the OperationSpec
*
* @internal
*/
function flattenResponse(fullResponse, responseSpec) {
const parsedHeaders = fullResponse.parsedHeaders;
// head methods never have a body, but we return a boolean set to body property
// to indicate presence/absence of the resource
if (fullResponse.request.method === "HEAD") {
return {
...parsedHeaders,
body: fullResponse.parsedBody,
};
}
const bodyMapper = responseSpec && responseSpec.bodyMapper;
const isNullable = Boolean(bodyMapper?.nullable);
const expectedBodyTypeName = bodyMapper?.type.name;
/** If the body is asked for, we look at the expected body type to handle it */
if (expectedBodyTypeName === "Stream") {
return {
...parsedHeaders,
blobBody: fullResponse.blobBody,
readableStreamBody: fullResponse.readableStreamBody,
};
}
const modelProperties = (expectedBodyTypeName === "Composite" &&
bodyMapper.type.modelProperties) ||
{};
const isPageableResponse = Object.keys(modelProperties).some((k) => modelProperties[k].serializedName === "");
if (expectedBodyTypeName === "Sequence" || isPageableResponse) {
const arrayResponse = fullResponse.parsedBody ?? [];
for (const key of Object.keys(modelProperties)) {
if (modelProperties[key].serializedName) {
arrayResponse[key] = fullResponse.parsedBody?.[key];
}
}
if (parsedHeaders) {
for (const key of Object.keys(parsedHeaders)) {
arrayResponse[key] = parsedHeaders[key];
}
}
return isNullable &&
!fullResponse.parsedBody &&
!parsedHeaders &&
Object.getOwnPropertyNames(modelProperties).length === 0
? null
: arrayResponse;
}
return handleNullableResponseAndWrappableBody({
body: fullResponse.parsedBody,
headers: parsedHeaders,
hasNullableType: isNullable,
shouldWrapBody: isPrimitiveBody(fullResponse.parsedBody, expectedBodyTypeName),
});
}
//# sourceMappingURL=utils.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/serializer.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
class SerializerImpl {
modelMappers;
isXML;
constructor(modelMappers = {}, isXML = false) {
this.modelMappers = modelMappers;
this.isXML = isXML;
}
/**
* @deprecated Removing the constraints validation on client side.
*/
validateConstraints(mapper, value, objectName) {
const failValidation = (constraintName, constraintValue) => {
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
};
if (mapper.constraints && value !== undefined && value !== null) {
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints;
if (ExclusiveMaximum !== undefined && value >= ExclusiveMaximum) {
failValidation("ExclusiveMaximum", ExclusiveMaximum);
}
if (ExclusiveMinimum !== undefined && value <= ExclusiveMinimum) {
failValidation("ExclusiveMinimum", ExclusiveMinimum);
}
if (InclusiveMaximum !== undefined && value > InclusiveMaximum) {
failValidation("InclusiveMaximum", InclusiveMaximum);
}
if (InclusiveMinimum !== undefined && value < InclusiveMinimum) {
failValidation("InclusiveMinimum", InclusiveMinimum);
}
if (MaxItems !== undefined && value.length > MaxItems) {
failValidation("MaxItems", MaxItems);
}
if (MaxLength !== undefined && value.length > MaxLength) {
failValidation("MaxLength", MaxLength);
}
if (MinItems !== undefined && value.length < MinItems) {
failValidation("MinItems", MinItems);
}
if (MinLength !== undefined && value.length < MinLength) {
failValidation("MinLength", MinLength);
}
if (MultipleOf !== undefined && value % MultipleOf !== 0) {
failValidation("MultipleOf", MultipleOf);
}
if (Pattern) {
const pattern = typeof Pattern === "string" ? new RegExp(Pattern) : Pattern;
if (typeof value !== "string" || value.match(pattern) === null) {
failValidation("Pattern", Pattern);
}
}
if (UniqueItems &&
value.some((item, i, ar) => ar.indexOf(item) !== i)) {
failValidation("UniqueItems", UniqueItems);
}
}
}
/**
* Serialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object
*
* @param object - A valid Javascript object to be serialized
*
* @param objectName - Name of the serialized object
*
* @param options - additional options to serialization
*
* @returns A valid serialized Javascript object
*/
serialize(mapper, object, objectName, options = { xml: {} }) {
const updatedOptions = {
xml: {
rootName: options.xml.rootName ?? "",
includeRoot: options.xml.includeRoot ?? false,
xmlCharKey: options.xml.xmlCharKey ?? XML_CHARKEY,
},
};
let payload = {};
const mapperType = mapper.type.name;
if (!objectName) {
objectName = mapper.serializedName;
}
if (mapperType.match(/^Sequence$/i) !== null) {
payload = [];
}
if (mapper.isConstant) {
object = mapper.defaultValue;
}
// This table of allowed values should help explain
// the mapper.required and mapper.nullable properties.
// X means "neither undefined or null are allowed".
// || required
// || true | false
// nullable || ==========================
// true || null | undefined/null
// false || X | undefined
// undefined || X | undefined/null
const { required, nullable } = mapper;
if (required && nullable && object === undefined) {
throw new Error(`${objectName} cannot be undefined.`);
}
if (required && !nullable && (object === undefined || object === null)) {
throw new Error(`${objectName} cannot be null or undefined.`);
}
if (!required && nullable === false && object === null) {
throw new Error(`${objectName} cannot be null.`);
}
if (object === undefined || object === null) {
payload = object;
}
else {
if (mapperType.match(/^any$/i) !== null) {
payload = object;
}
else if (mapperType.match(/^(Number|String|Boolean|Object|Stream|Uuid)$/i) !== null) {
payload = serializeBasicTypes(mapperType, objectName, object);
}
else if (mapperType.match(/^Enum$/i) !== null) {
const enumMapper = mapper;
payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object);
}
else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/i) !== null) {
payload = serializeDateTypes(mapperType, object, objectName);
}
else if (mapperType.match(/^ByteArray$/i) !== null) {
payload = serializeByteArrayType(objectName, object);
}
else if (mapperType.match(/^Base64Url$/i) !== null) {
payload = serializeBase64UrlType(objectName, object);
}
else if (mapperType.match(/^Sequence$/i) !== null) {
payload = serializeSequenceType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
}
else if (mapperType.match(/^Dictionary$/i) !== null) {
payload = serializeDictionaryType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
}
else if (mapperType.match(/^Composite$/i) !== null) {
payload = serializeCompositeType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
}
}
return payload;
}
/**
* Deserialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object
*
* @param responseBody - A valid Javascript entity to be deserialized
*
* @param objectName - Name of the deserialized object
*
* @param options - Controls behavior of XML parser and builder.
*
* @returns A valid deserialized Javascript object
*/
deserialize(mapper, responseBody, objectName, options = { xml: {} }) {
const updatedOptions = {
xml: {
rootName: options.xml.rootName ?? "",
includeRoot: options.xml.includeRoot ?? false,
xmlCharKey: options.xml.xmlCharKey ?? XML_CHARKEY,
},
ignoreUnknownProperties: options.ignoreUnknownProperties ?? false,
};
if (responseBody === undefined || responseBody === null) {
if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
// Edge case for empty XML non-wrapped lists. xml2js can't distinguish
// between the list being empty versus being missing,
// so let's do the more user-friendly thing and return an empty list.
responseBody = [];
}
// specifically check for undefined as default value can be a falsey value `0, "", false, null`
if (mapper.defaultValue !== undefined) {
responseBody = mapper.defaultValue;
}
return responseBody;
}
let payload;
const mapperType = mapper.type.name;
if (!objectName) {
objectName = mapper.serializedName;
}
if (mapperType.match(/^Composite$/i) !== null) {
payload = deserializeCompositeType(this, mapper, responseBody, objectName, updatedOptions);
}
else {
if (this.isXML) {
const xmlCharKey = updatedOptions.xml.xmlCharKey;
/**
* If the mapper specifies this as a non-composite type value but the responseBody contains
* both header ("$" i.e., XML_ATTRKEY) and body ("#" i.e., XML_CHARKEY) properties,
* then just reduce the responseBody value to the body ("#" i.e., XML_CHARKEY) property.
*/
if (responseBody[XML_ATTRKEY] !== undefined && responseBody[xmlCharKey] !== undefined) {
responseBody = responseBody[xmlCharKey];
}
}
if (mapperType.match(/^Number$/i) !== null) {
payload = parseFloat(responseBody);
if (isNaN(payload)) {
payload = responseBody;
}
}
else if (mapperType.match(/^Boolean$/i) !== null) {
if (responseBody === "true") {
payload = true;
}
else if (responseBody === "false") {
payload = false;
}
else {
payload = responseBody;
}
}
else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/i) !== null) {
payload = responseBody;
}
else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/i) !== null) {
payload = new Date(responseBody);
}
else if (mapperType.match(/^UnixTime$/i) !== null) {
payload = unixTimeToDate(responseBody);
}
else if (mapperType.match(/^ByteArray$/i) !== null) {
payload = decodeString(responseBody);
}
else if (mapperType.match(/^Base64Url$/i) !== null) {
payload = base64UrlToByteArray(responseBody);
}
else if (mapperType.match(/^Sequence$/i) !== null) {
payload = deserializeSequenceType(this, mapper, responseBody, objectName, updatedOptions);
}
else if (mapperType.match(/^Dictionary$/i) !== null) {
payload = deserializeDictionaryType(this, mapper, responseBody, objectName, updatedOptions);
}
}
if (mapper.isConstant) {
payload = mapper.defaultValue;
}
return payload;
}
}
/**
* Method that creates and returns a Serializer.
* @param modelMappers - Known models to map
* @param isXML - If XML should be supported
*/
function createSerializer(modelMappers = {}, isXML = false) {
return new SerializerImpl(modelMappers, isXML);
}
function trimEnd(str, ch) {
let len = str.length;
while (len - 1 >= 0 && str[len - 1] === ch) {
--len;
}
return str.substr(0, len);
}
function bufferToBase64Url(buffer) {
if (!buffer) {
return undefined;
}
if (!(buffer instanceof Uint8Array)) {
throw new Error(`Please provide an input of type Uint8Array for converting to Base64Url.`);
}
// Uint8Array to Base64.
const str = encodeByteArray(buffer);
// Base64 to Base64Url.
return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
}
function base64UrlToByteArray(str) {
if (!str) {
return undefined;
}
if (str && typeof str.valueOf() !== "string") {
throw new Error("Please provide an input of type string for converting to Uint8Array");
}
// Base64Url to Base64.
str = str.replace(/-/g, "+").replace(/_/g, "/");
// Base64 to Uint8Array.
return decodeString(str);
}
function splitSerializeName(prop) {
const classes = [];
let partialclass = "";
if (prop) {
const subwords = prop.split(".");
for (const item of subwords) {
if (item.charAt(item.length - 1) === "\\") {
partialclass += item.substr(0, item.length - 1) + ".";
}
else {
partialclass += item;
classes.push(partialclass);
partialclass = "";
}
}
}
return classes;
}
function dateToUnixTime(d) {
if (!d) {
return undefined;
}
if (typeof d.valueOf() === "string") {
d = new Date(d);
}
return Math.floor(d.getTime() / 1000);
}
function unixTimeToDate(n) {
if (!n) {
return undefined;
}
return new Date(n * 1000);
}
function serializeBasicTypes(typeName, objectName, value) {
if (value !== null && value !== undefined) {
if (typeName.match(/^Number$/i) !== null) {
if (typeof value !== "number") {
throw new Error(`${objectName} with value ${value} must be of type number.`);
}
}
else if (typeName.match(/^String$/i) !== null) {
if (typeof value.valueOf() !== "string") {
throw new Error(`${objectName} with value "${value}" must be of type string.`);
}
}
else if (typeName.match(/^Uuid$/i) !== null) {
if (!(typeof value.valueOf() === "string" && isValidUuid(value))) {
throw new Error(`${objectName} with value "${value}" must be of type string and a valid uuid.`);
}
}
else if (typeName.match(/^Boolean$/i) !== null) {
if (typeof value !== "boolean") {
throw new Error(`${objectName} with value ${value} must be of type boolean.`);
}
}
else if (typeName.match(/^Stream$/i) !== null) {
const objectType = typeof value;
if (objectType !== "string" &&
typeof value.pipe !== "function" && // NodeJS.ReadableStream
typeof value.tee !== "function" && // browser ReadableStream
!(value instanceof ArrayBuffer) &&
!ArrayBuffer.isView(value) &&
// File objects count as a type of Blob, so we want to use instanceof explicitly
!((typeof Blob === "function" || typeof Blob === "object") && value instanceof Blob) &&
objectType !== "function") {
throw new Error(`${objectName} must be a string, Blob, ArrayBuffer, ArrayBufferView, ReadableStream, or () => ReadableStream.`);
}
}
}
return value;
}
function serializeEnumType(objectName, allowedValues, value) {
if (!allowedValues) {
throw new Error(`Please provide a set of allowedValues to validate ${objectName} as an Enum Type.`);
}
const isPresent = allowedValues.some((item) => {
if (typeof item.valueOf() === "string") {
return item.toLowerCase() === value.toLowerCase();
}
return item === value;
});
if (!isPresent) {
throw new Error(`${value} is not a valid value for ${objectName}. The valid values are: ${JSON.stringify(allowedValues)}.`);
}
return value;
}
function serializeByteArrayType(objectName, value) {
if (value !== undefined && value !== null) {
if (!(value instanceof Uint8Array)) {
throw new Error(`${objectName} must be of type Uint8Array.`);
}
value = encodeByteArray(value);
}
return value;
}
function serializeBase64UrlType(objectName, value) {
if (value !== undefined && value !== null) {
if (!(value instanceof Uint8Array)) {
throw new Error(`${objectName} must be of type Uint8Array.`);
}
value = bufferToBase64Url(value);
}
return value;
}
function serializeDateTypes(typeName, value, objectName) {
if (value !== undefined && value !== null) {
if (typeName.match(/^Date$/i) !== null) {
if (!(value instanceof Date ||
(typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);
}
value =
value instanceof Date
? value.toISOString().substring(0, 10)
: new Date(value).toISOString().substring(0, 10);
}
else if (typeName.match(/^DateTime$/i) !== null) {
if (!(value instanceof Date ||
(typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);
}
value = value instanceof Date ? value.toISOString() : new Date(value).toISOString();
}
else if (typeName.match(/^DateTimeRfc1123$/i) !== null) {
if (!(value instanceof Date ||
(typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123 format.`);
}
value = value instanceof Date ? value.toUTCString() : new Date(value).toUTCString();
}
else if (typeName.match(/^UnixTime$/i) !== null) {
if (!(value instanceof Date ||
(typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) {
throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123/ISO8601 format ` +
`for it to be serialized in UnixTime/Epoch format.`);
}
value = dateToUnixTime(value);
}
else if (typeName.match(/^TimeSpan$/i) !== null) {
if (!isDuration(value)) {
throw new Error(`${objectName} must be a string in ISO 8601 format. Instead was "${value}".`);
}
}
}
return value;
}
function serializeSequenceType(serializer, mapper, object, objectName, isXml, options) {
if (!Array.isArray(object)) {
throw new Error(`${objectName} must be of type Array.`);
}
let elementType = mapper.type.element;
if (!elementType || typeof elementType !== "object") {
throw new Error(`"element" metadata for an Array must be defined in the ` +
`mapper and it must be of type "object" in ${objectName}.`);
}
// Quirk: Composite mappers referenced by `element` might
// not have *all* properties declared (like uberParent),
// so let's try to look up the full definition by name.
if (elementType.type.name === "Composite" && elementType.type.className) {
elementType = serializer.modelMappers[elementType.type.className] ?? elementType;
}
const tempArray = [];
for (let i = 0; i < object.length; i++) {
const serializedValue = serializer.serialize(elementType, object[i], objectName, options);
if (isXml && elementType.xmlNamespace) {
const xmlnsKey = elementType.xmlNamespacePrefix
? `xmlns:${elementType.xmlNamespacePrefix}`
: "xmlns";
if (elementType.type.name === "Composite") {
tempArray[i] = { ...serializedValue };
tempArray[i][XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace };
}
else {
tempArray[i] = {};
tempArray[i][options.xml.xmlCharKey] = serializedValue;
tempArray[i][XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace };
}
}
else {
tempArray[i] = serializedValue;
}
}
return tempArray;
}
function serializeDictionaryType(serializer, mapper, object, objectName, isXml, options) {
if (typeof object !== "object") {
throw new Error(`${objectName} must be of type object.`);
}
const valueType = mapper.type.value;
if (!valueType || typeof valueType !== "object") {
throw new Error(`"value" metadata for a Dictionary must be defined in the ` +
`mapper and it must of type "object" in ${objectName}.`);
}
const tempDictionary = {};
for (const key of Object.keys(object)) {
const serializedValue = serializer.serialize(valueType, object[key], objectName, options);
// If the element needs an XML namespace we need to add it within the $ property
tempDictionary[key] = getXmlObjectValue(valueType, serializedValue, isXml, options);
}
// Add the namespace to the root element if needed
if (isXml && mapper.xmlNamespace) {
const xmlnsKey = mapper.xmlNamespacePrefix ? `xmlns:${mapper.xmlNamespacePrefix}` : "xmlns";
const result = tempDictionary;
result[XML_ATTRKEY] = { [xmlnsKey]: mapper.xmlNamespace };
return result;
}
return tempDictionary;
}
/**
* Resolves the additionalProperties property from a referenced mapper
* @param serializer - the serializer containing the entire set of mappers
* @param mapper - the composite mapper to resolve
* @param objectName - name of the object being serialized
*/
function resolveAdditionalProperties(serializer, mapper, objectName) {
const additionalProperties = mapper.type.additionalProperties;
if (!additionalProperties && mapper.type.className) {
const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);
return modelMapper?.type.additionalProperties;
}
return additionalProperties;
}
/**
* Finds the mapper referenced by className
* @param serializer - the serializer containing the entire set of mappers
* @param mapper - the composite mapper to resolve
* @param objectName - name of the object being serialized
*/
function resolveReferencedMapper(serializer, mapper, objectName) {
const className = mapper.type.className;
if (!className) {
throw new Error(`Class name for model "${objectName}" is not provided in the mapper "${JSON.stringify(mapper, undefined, 2)}".`);
}
return serializer.modelMappers[className];
}
/**
* Resolves a composite mapper's modelProperties.
* @param serializer - the serializer containing the entire set of mappers
* @param mapper - the composite mapper to resolve
*/
function resolveModelProperties(serializer, mapper, objectName) {
let modelProps = mapper.type.modelProperties;
if (!modelProps) {
const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);
if (!modelMapper) {
throw new Error(`mapper() cannot be null or undefined for model "${mapper.type.className}".`);
}
modelProps = modelMapper?.type.modelProperties;
if (!modelProps) {
throw new Error(`modelProperties cannot be null or undefined in the ` +
`mapper "${JSON.stringify(modelMapper)}" of type "${mapper.type.className}" for object "${objectName}".`);
}
}
return modelProps;
}
function serializeCompositeType(serializer, mapper, object, objectName, isXml, options) {
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
mapper = getPolymorphicMapper(serializer, mapper, object, "clientName");
}
if (object !== undefined && object !== null) {
const payload = {};
const modelProps = resolveModelProperties(serializer, mapper, objectName);
for (const key of Object.keys(modelProps)) {
const propertyMapper = modelProps[key];
if (propertyMapper.readOnly) {
continue;
}
let propName;
let parentObject = payload;
if (serializer.isXML) {
if (propertyMapper.xmlIsWrapped) {
propName = propertyMapper.xmlName;
}
else {
propName = propertyMapper.xmlElementName || propertyMapper.xmlName;
}
}
else {
const paths = splitSerializeName(propertyMapper.serializedName);
propName = paths.pop();
for (const pathName of paths) {
const childObject = parentObject[pathName];
if ((childObject === undefined || childObject === null) &&
((object[key] !== undefined && object[key] !== null) ||
propertyMapper.defaultValue !== undefined)) {
parentObject[pathName] = {};
}
parentObject = parentObject[pathName];
}
}
if (parentObject !== undefined && parentObject !== null) {
if (isXml && mapper.xmlNamespace) {
const xmlnsKey = mapper.xmlNamespacePrefix
? `xmlns:${mapper.xmlNamespacePrefix}`
: "xmlns";
parentObject[XML_ATTRKEY] = {
...parentObject[XML_ATTRKEY],
[xmlnsKey]: mapper.xmlNamespace,
};
}
const propertyObjectName = propertyMapper.serializedName !== ""
? objectName + "." + propertyMapper.serializedName
: objectName;
let toSerialize = object[key];
const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
if (polymorphicDiscriminator &&
polymorphicDiscriminator.clientName === key &&
(toSerialize === undefined || toSerialize === null)) {
toSerialize = mapper.serializedName;
}
const serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName, options);
if (serializedValue !== undefined && propName !== undefined && propName !== null) {
const value = getXmlObjectValue(propertyMapper, serializedValue, isXml, options);
if (isXml && propertyMapper.xmlIsAttribute) {
// XML_ATTRKEY, i.e., $ is the key attributes are kept under in xml2js.
// This keeps things simple while preventing name collision
// with names in user documents.
parentObject[XML_ATTRKEY] = parentObject[XML_ATTRKEY] || {};
parentObject[XML_ATTRKEY][propName] = serializedValue;
}
else if (isXml && propertyMapper.xmlIsWrapped) {
parentObject[propName] = { [propertyMapper.xmlElementName]: value };
}
else {
parentObject[propName] = value;
}
}
}
}
const additionalPropertiesMapper = resolveAdditionalProperties(serializer, mapper, objectName);
if (additionalPropertiesMapper) {
const propNames = Object.keys(modelProps);
for (const clientPropName of Object.keys(object)) {
const isAdditionalProperty = propNames.every((pn) => pn !== clientPropName);
if (isAdditionalProperty) {
Object.defineProperty(payload, clientPropName, {
value: serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]', options),
enumerable: true,
configurable: true,
writable: true,
});
}
}
}
return payload;
}
return object;
}
function getXmlObjectValue(propertyMapper, serializedValue, isXml, options) {
if (!isXml || !propertyMapper.xmlNamespace) {
return serializedValue;
}
const xmlnsKey = propertyMapper.xmlNamespacePrefix
? `xmlns:${propertyMapper.xmlNamespacePrefix}`
: "xmlns";
const xmlNamespace = { [xmlnsKey]: propertyMapper.xmlNamespace };
if (["Composite"].includes(propertyMapper.type.name)) {
if (serializedValue[XML_ATTRKEY]) {
return serializedValue;
}
else {
const result = { ...serializedValue };
result[XML_ATTRKEY] = xmlNamespace;
return result;
}
}
const result = {};
result[options.xml.xmlCharKey] = serializedValue;
result[XML_ATTRKEY] = xmlNamespace;
return result;
}
function isSpecialXmlProperty(propertyName, options) {
return [XML_ATTRKEY, options.xml.xmlCharKey].includes(propertyName);
}
function deserializeCompositeType(serializer, mapper, responseBody, objectName, options) {
const xmlCharKey = options.xml.xmlCharKey ?? XML_CHARKEY;
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName");
}
const modelProps = resolveModelProperties(serializer, mapper, objectName);
let instance = {};
const handledPropertyNames = [];
for (const key of Object.keys(modelProps)) {
const propertyMapper = modelProps[key];
const paths = splitSerializeName(modelProps[key].serializedName);
handledPropertyNames.push(paths[0]);
const { serializedName, xmlName, xmlElementName } = propertyMapper;
let propertyObjectName = objectName;
if (serializedName !== "" && serializedName !== undefined) {
propertyObjectName = objectName + "." + serializedName;
}
const headerCollectionPrefix = propertyMapper.headerCollectionPrefix;
if (headerCollectionPrefix) {
const dictionary = {};
for (const headerKey of Object.keys(responseBody)) {
if (headerKey.startsWith(headerCollectionPrefix)) {
dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName, options);
}
handledPropertyNames.push(headerKey);
}
instance[key] = dictionary;
}
else if (serializer.isXML) {
if (propertyMapper.xmlIsAttribute && responseBody[XML_ATTRKEY]) {
instance[key] = serializer.deserialize(propertyMapper, responseBody[XML_ATTRKEY][xmlName], propertyObjectName, options);
}
else if (propertyMapper.xmlIsMsText) {
if (responseBody[xmlCharKey] !== undefined) {
instance[key] = responseBody[xmlCharKey];
}
else if (typeof responseBody === "string") {
// The special case where xml parser parses "<Name>content</Name>" into JSON of
// `{ name: "content"}` instead of `{ name: { "_": "content" }}`
instance[key] = responseBody;
}
}
else {
const propertyName = xmlElementName || xmlName || serializedName;
if (propertyMapper.xmlIsWrapped) {
/* a list of <xmlElementName> wrapped by <xmlName>
For the xml example below
<Cors>
<CorsRule>...</CorsRule>
<CorsRule>...</CorsRule>
</Cors>
the responseBody has
{
Cors: {
CorsRule: [{...}, {...}]
}
}
xmlName is "Cors" and xmlElementName is"CorsRule".
*/
const wrapped = responseBody[xmlName];
const elementList = wrapped?.[xmlElementName] ?? [];
Object.defineProperty(instance, key, {
value: serializer.deserialize(propertyMapper, elementList, propertyObjectName, options),
enumerable: true,
configurable: true,
writable: true,
});
handledPropertyNames.push(xmlName);
}
else {
const property = responseBody[propertyName];
instance[key] = serializer.deserialize(propertyMapper, property, propertyObjectName, options);
handledPropertyNames.push(propertyName);
}
}
}
else {
// deserialize the property if it is present in the provided responseBody instance
let propertyInstance;
let res = responseBody;
// traversing the object step by step.
let steps = 0;
for (const item of paths) {
if (!res)
break;
steps++;
res = res[item];
}
// only accept null when reaching the last position of object otherwise it would be undefined
if (res === null && steps < paths.length) {
res = undefined;
}
propertyInstance = res;
const polymorphicDiscriminator = mapper.type.polymorphicDiscriminator;
// checking that the model property name (key)(ex: "fishtype") and the
// clientName of the polymorphicDiscriminator {metadata} (ex: "fishtype")
// instead of the serializedName of the polymorphicDiscriminator (ex: "fish.type")
// is a better approach. The generator is not consistent with escaping '\.' in the
// serializedName of the property (ex: "fish\.type") that is marked as polymorphic discriminator
// and the serializedName of the metadata polymorphicDiscriminator (ex: "fish.type"). However,
// the clientName transformation of the polymorphicDiscriminator (ex: "fishtype") and
// the transformation of model property name (ex: "fishtype") is done consistently.
// Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator.
if (polymorphicDiscriminator &&
key === polymorphicDiscriminator.clientName &&
(propertyInstance === undefined || propertyInstance === null)) {
propertyInstance = mapper.serializedName;
}
let serializedValue;
// paging
if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") {
propertyInstance = responseBody[key];
const arrayInstance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);
// Copy over any properties that have already been added into the instance, where they do
// not exist on the newly de-serialized array
for (const [k, v] of Object.entries(instance)) {
if (!Object.prototype.hasOwnProperty.call(arrayInstance, k)) {
arrayInstance[k] = v;
}
}
instance = arrayInstance;
}
else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) {
serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);
instance[key] = serializedValue;
}
}
}
const additionalPropertiesMapper = mapper.type.additionalProperties;
if (additionalPropertiesMapper) {
const isAdditionalProperty = (responsePropName) => {
for (const clientPropName of Object.keys(modelProps)) {
const paths = splitSerializeName(modelProps[clientPropName].serializedName);
if (paths[0] === responsePropName) {
return false;
}
}
return true;
};
for (const responsePropName of Object.keys(responseBody)) {
if (isAdditionalProperty(responsePropName)) {
const deserializedValue = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]', options);
Object.defineProperty(instance, responsePropName, {
value: deserializedValue,
enumerable: true,
configurable: true,
writable: true,
});
}
}
}
else if (responseBody && !options.ignoreUnknownProperties) {
for (const key of Object.keys(responseBody)) {
if (instance[key] === undefined &&
!handledPropertyNames.includes(key) &&
!isSpecialXmlProperty(key, options)) {
Object.defineProperty(instance, key, {
value: responseBody[key],
enumerable: true,
configurable: true,
writable: true,
});
}
}
}
return instance;
}
function deserializeDictionaryType(serializer, mapper, responseBody, objectName, options) {
/* jshint validthis: true */
const value = mapper.type.value;
if (!value || typeof value !== "object") {
throw new Error(`"value" metadata for a Dictionary must be defined in the ` +
`mapper and it must of type "object" in ${objectName}`);
}
if (responseBody) {
const tempDictionary = {};
for (const key of Object.keys(responseBody)) {
tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName, options);
}
return tempDictionary;
}
return responseBody;
}
function deserializeSequenceType(serializer, mapper, responseBody, objectName, options) {
let element = mapper.type.element;
if (!element || typeof element !== "object") {
throw new Error(`"element" metadata for an Array must be defined in the ` +
`mapper and it must be of type "object" in ${objectName}`);
}
if (responseBody) {
if (!Array.isArray(responseBody)) {
// xml2js will interpret a single element array as just the element, so force it to be an array
responseBody = [responseBody];
}
// Quirk: Composite mappers referenced by `element` might
// not have *all* properties declared (like uberParent),
// so let's try to look up the full definition by name.
if (element.type.name === "Composite" && element.type.className) {
element = serializer.modelMappers[element.type.className] ?? element;
}
const tempArray = [];
for (let i = 0; i < responseBody.length; i++) {
tempArray[i] = serializer.deserialize(element, responseBody[i], `${objectName}[${i}]`, options);
}
return tempArray;
}
return responseBody;
}
function getIndexDiscriminator(discriminators, discriminatorValue, typeName) {
const typeNamesToCheck = [typeName];
while (typeNamesToCheck.length) {
const currentName = typeNamesToCheck.shift();
const indexDiscriminator = discriminatorValue === currentName
? discriminatorValue
: currentName + "." + discriminatorValue;
if (Object.prototype.hasOwnProperty.call(discriminators, indexDiscriminator)) {
return discriminators[indexDiscriminator];
}
else {
for (const [name, mapper] of Object.entries(discriminators)) {
if (name.startsWith(currentName + ".") &&
mapper.type.uberParent === currentName &&
mapper.type.className) {
typeNamesToCheck.push(mapper.type.className);
}
}
}
}
return undefined;
}
function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) {
const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
if (polymorphicDiscriminator) {
let discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];
if (discriminatorName) {
// The serializedName might have \\, which we just want to ignore
if (polymorphicPropertyName === "serializedName") {
discriminatorName = discriminatorName.replace(/\\/gi, "");
}
const discriminatorValue = object[discriminatorName];
const typeName = mapper.type.uberParent ?? mapper.type.className;
if (typeof discriminatorValue === "string" && typeName) {
const polymorphicMapper = getIndexDiscriminator(serializer.modelMappers.discriminators, discriminatorValue, typeName);
if (polymorphicMapper) {
mapper = polymorphicMapper;
}
}
}
}
return mapper;
}
function getPolymorphicDiscriminatorRecursively(serializer, mapper) {
return (mapper.type.polymorphicDiscriminator ||
getPolymorphicDiscriminatorSafely(serializer, mapper.type.uberParent) ||
getPolymorphicDiscriminatorSafely(serializer, mapper.type.className));
}
function getPolymorphicDiscriminatorSafely(serializer, typeName) {
return (typeName &&
serializer.modelMappers[typeName] &&
serializer.modelMappers[typeName].type.polymorphicDiscriminator);
}
/**
* Known types of Mappers
*/
const MapperTypeNames = {
Base64Url: "Base64Url",
Boolean: "Boolean",
ByteArray: "ByteArray",
Composite: "Composite",
Date: "Date",
DateTime: "DateTime",
DateTimeRfc1123: "DateTimeRfc1123",
Dictionary: "Dictionary",
Enum: "Enum",
Number: "Number",
Object: "Object",
Sequence: "Sequence",
String: "String",
Stream: "Stream",
TimeSpan: "TimeSpan",
UnixTime: "UnixTime",
};
//# sourceMappingURL=serializer.js.map
// EXTERNAL MODULE: ./node_modules/@azure/core-client/dist/commonjs/state-cjs.js
var commonjs_state_cjs = __webpack_require__(30);
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/state.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// @ts-expect-error The recommended approach to sharing module state between ESM and CJS.
// See https://github.com/isaacs/tshy/blob/main/README.md#module-local-state for additional information.
/**
* Defines the shared state between CJS and ESM by re-exporting the CJS state.
*/
const esm_state_state = commonjs_state_cjs/* state */.w;
//# sourceMappingURL=state.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/operationHelpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @internal
* Retrieves the value to use for a given operation argument
* @param operationArguments - The arguments passed from the generated client
* @param parameter - The parameter description
* @param fallbackObject - If something isn't found in the arguments bag, look here.
* Generally used to look at the service client properties.
*/
function getOperationArgumentValueFromParameter(operationArguments, parameter, fallbackObject) {
let parameterPath = parameter.parameterPath;
const parameterMapper = parameter.mapper;
let value;
if (typeof parameterPath === "string") {
parameterPath = [parameterPath];
}
if (Array.isArray(parameterPath)) {
if (parameterPath.length > 0) {
if (parameterMapper.isConstant) {
value = parameterMapper.defaultValue;
}
else {
let propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);
if (!propertySearchResult.propertyFound && fallbackObject) {
propertySearchResult = getPropertyFromParameterPath(fallbackObject, parameterPath);
}
let useDefaultValue = false;
if (!propertySearchResult.propertyFound) {
useDefaultValue =
parameterMapper.required ||
(parameterPath[0] === "options" && parameterPath.length === 2);
}
value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;
}
}
}
else {
if (parameterMapper.required) {
value = {};
}
for (const [propertyName, propertyPath] of Object.entries(parameterPath)) {
const propertyMapper = parameterMapper.type.modelProperties[propertyName];
const propertyValue = getOperationArgumentValueFromParameter(operationArguments, {
parameterPath: propertyPath,
mapper: propertyMapper,
}, fallbackObject);
if (propertyValue !== undefined) {
if (!value) {
value = {};
}
Object.defineProperty(value, propertyName, {
value: propertyValue,
enumerable: true,
configurable: true,
writable: true,
});
}
}
}
return value;
}
function getPropertyFromParameterPath(parent, parameterPath) {
const result = { propertyFound: false };
let i = 0;
for (; i < parameterPath.length; ++i) {
const parameterPathPart = parameterPath[i];
// Make sure to check inherited properties too, so don't use hasOwnProperty().
if (parent && parameterPathPart in parent) {
parent = parent[parameterPathPart];
}
else {
break;
}
}
if (i === parameterPath.length) {
result.propertyValue = parent;
result.propertyFound = true;
}
return result;
}
const originalRequestSymbol = Symbol.for("@azure/core-client original request");
function hasOriginalRequest(request) {
return originalRequestSymbol in request;
}
function getOperationRequestInfo(request) {
if (hasOriginalRequest(request)) {
return getOperationRequestInfo(request[originalRequestSymbol]);
}
let info = esm_state_state.operationRequestMap.get(request);
if (!info) {
info = {};
esm_state_state.operationRequestMap.set(request, info);
}
return info;
}
//# sourceMappingURL=operationHelpers.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/deserializationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const defaultJsonContentTypes = ["application/json", "text/json"];
const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
/**
* The programmatic identifier of the deserializationPolicy.
*/
const deserializationPolicyName = "deserializationPolicy";
/**
* This policy handles parsing out responses according to OperationSpecs on the request.
*/
function deserializationPolicy(options = {}) {
const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;
const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;
const parseXML = options.parseXML;
const serializerOptions = options.serializerOptions;
const updatedOptions = {
xml: {
rootName: serializerOptions?.xml.rootName ?? "",
includeRoot: serializerOptions?.xml.includeRoot ?? false,
xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,
},
};
return {
name: deserializationPolicyName,
async sendRequest(request, next) {
const response = await next(request);
return deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, updatedOptions, parseXML);
},
};
}
function getOperationResponseMap(parsedResponse) {
let result;
const request = parsedResponse.request;
const operationInfo = getOperationRequestInfo(request);
const operationSpec = operationInfo?.operationSpec;
if (operationSpec) {
if (!operationInfo?.operationResponseGetter) {
result = operationSpec.responses[parsedResponse.status];
}
else {
result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);
}
}
return result;
}
function shouldDeserializeResponse(parsedResponse) {
const request = parsedResponse.request;
const operationInfo = getOperationRequestInfo(request);
const shouldDeserialize = operationInfo?.shouldDeserialize;
let result;
if (shouldDeserialize === undefined) {
result = true;
}
else if (typeof shouldDeserialize === "boolean") {
result = shouldDeserialize;
}
else {
result = shouldDeserialize(parsedResponse);
}
return result;
}
async function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options, parseXML) {
const parsedResponse = await parse(jsonContentTypes, xmlContentTypes, response, options, parseXML);
if (!shouldDeserializeResponse(parsedResponse)) {
return parsedResponse;
}
const operationInfo = getOperationRequestInfo(parsedResponse.request);
const operationSpec = operationInfo?.operationSpec;
if (!operationSpec || !operationSpec.responses) {
return parsedResponse;
}
const responseSpec = getOperationResponseMap(parsedResponse);
const { error, shouldReturnResponse } = handleErrorResponse(parsedResponse, operationSpec, responseSpec, options);
if (error) {
throw error;
}
else if (shouldReturnResponse) {
return parsedResponse;
}
// An operation response spec does exist for current status code, so
// use it to deserialize the response.
if (responseSpec) {
if (responseSpec.bodyMapper) {
let valueToDeserialize = parsedResponse.parsedBody;
if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {
valueToDeserialize =
typeof valueToDeserialize === "object"
? valueToDeserialize[responseSpec.bodyMapper.xmlElementName]
: [];
}
try {
parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options);
}
catch (deserializeError) {
const restError = new esm_restError_RestError(`Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`, {
statusCode: parsedResponse.status,
request: parsedResponse.request,
response: parsedResponse,
});
throw restError;
}
}
else if (operationSpec.httpMethod === "HEAD") {
// head methods never have a body, but we return a boolean to indicate presence/absence of the resource
parsedResponse.parsedBody = response.status >= 200 && response.status < 300;
}
if (responseSpec.headersMapper) {
parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders", { xml: {}, ignoreUnknownProperties: true });
}
}
return parsedResponse;
}
function isOperationSpecEmpty(operationSpec) {
const expectedStatusCodes = Object.keys(operationSpec.responses);
return (expectedStatusCodes.length === 0 ||
(expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default"));
}
function handleErrorResponse(parsedResponse, operationSpec, responseSpec, options) {
const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;
const isExpectedStatusCode = isOperationSpecEmpty(operationSpec)
? isSuccessByStatus
: !!responseSpec;
if (isExpectedStatusCode) {
if (responseSpec) {
if (!responseSpec.isError) {
return { error: null, shouldReturnResponse: false };
}
}
else {
return { error: null, shouldReturnResponse: false };
}
}
const errorResponseSpec = responseSpec ?? operationSpec.responses.default;
const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(parsedResponse.status)
? `Unexpected status code: ${parsedResponse.status}`
: parsedResponse.bodyAsText;
const error = new esm_restError_RestError(initialErrorMessage, {
statusCode: parsedResponse.status,
request: parsedResponse.request,
response: parsedResponse,
});
// If the item failed but there's no error spec or default spec to deserialize the error,
// and the parsed body doesn't look like an error object,
// we should fail so we just throw the parsed response
if (!errorResponseSpec &&
!(parsedResponse.parsedBody?.error?.code && parsedResponse.parsedBody?.error?.message)) {
throw error;
}
const defaultBodyMapper = errorResponseSpec?.bodyMapper;
const defaultHeadersMapper = errorResponseSpec?.headersMapper;
try {
// If error response has a body, try to deserialize it using default body mapper.
// Then try to extract error code & message from it
if (parsedResponse.parsedBody) {
const parsedBody = parsedResponse.parsedBody;
let deserializedError;
if (defaultBodyMapper) {
let valueToDeserialize = parsedBody;
if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {
valueToDeserialize = [];
const elementName = defaultBodyMapper.xmlElementName;
if (typeof parsedBody === "object" && elementName) {
valueToDeserialize = parsedBody[elementName];
}
}
deserializedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody", options);
}
const internalError = parsedBody.error || deserializedError || parsedBody;
error.code = internalError.code;
if (internalError.message) {
error.message = internalError.message;
}
if (defaultBodyMapper) {
error.response.parsedBody = deserializedError;
}
}
// If error response has headers, try to deserialize it using default header mapper
if (parsedResponse.headers && defaultHeadersMapper) {
error.response.parsedHeaders =
operationSpec.serializer.deserialize(defaultHeadersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders");
}
}
catch (defaultError) {
error.message = `Error "${defaultError.message}" occurred in deserializing the responseBody - "${parsedResponse.bodyAsText}" for the default response.`;
}
return { error, shouldReturnResponse: false };
}
async function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts, parseXML) {
if (!operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&
operationResponse.bodyAsText) {
const text = operationResponse.bodyAsText;
const contentType = operationResponse.headers.get("Content-Type") || "";
const contentComponents = !contentType
? []
: contentType.split(";").map((component) => component.toLowerCase());
try {
if (contentComponents.length === 0 ||
contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) {
operationResponse.parsedBody = JSON.parse(text);
return operationResponse;
}
else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {
if (!parseXML) {
throw new Error("Parsing XML not supported.");
}
const body = await parseXML(text, opts.xml);
operationResponse.parsedBody = body;
return operationResponse;
}
}
catch (err) {
const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;
const errCode = err.code || esm_restError_RestError.PARSE_ERROR;
const e = new esm_restError_RestError(msg, {
code: errCode,
statusCode: operationResponse.status,
request: operationResponse.request,
response: operationResponse,
});
throw e;
}
}
return operationResponse;
}
//# sourceMappingURL=deserializationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/interfaceHelpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Gets the list of status codes for streaming responses.
* @internal
*/
function getStreamingResponseStatusCodes(operationSpec) {
const result = new Set();
for (const [statusCode, operationResponse] of Object.entries(operationSpec.responses)) {
if (operationResponse.bodyMapper &&
operationResponse.bodyMapper.type.name === MapperTypeNames.Stream) {
result.add(Number(statusCode));
}
}
return result;
}
/**
* Get the path to this parameter's value as a dotted string (a.b.c).
* @param parameter - The parameter to get the path string for.
* @returns The path to this parameter's value as a dotted string.
* @internal
*/
function getPathStringFromParameter(parameter) {
const { parameterPath, mapper } = parameter;
let result;
if (typeof parameterPath === "string") {
result = parameterPath;
}
else if (Array.isArray(parameterPath)) {
result = parameterPath.join(".");
}
else {
result = mapper.serializedName;
}
return result;
}
//# sourceMappingURL=interfaceHelpers.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/serializationPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the serializationPolicy.
*/
const serializationPolicyName = "serializationPolicy";
/**
* This policy handles assembling the request body and headers using
* an OperationSpec and OperationArguments on the request.
*/
function serializationPolicy(options = {}) {
const stringifyXML = options.stringifyXML;
return {
name: serializationPolicyName,
sendRequest(request, next) {
const operationInfo = getOperationRequestInfo(request);
const operationSpec = operationInfo?.operationSpec;
const operationArguments = operationInfo?.operationArguments;
if (operationSpec && operationArguments) {
serializeHeaders(request, operationArguments, operationSpec);
serializeRequestBody(request, operationArguments, operationSpec, stringifyXML);
}
return next(request);
},
};
}
/**
* @internal
*/
function serializeHeaders(request, operationArguments, operationSpec) {
if (operationSpec.headerParameters) {
for (const headerParameter of operationSpec.headerParameters) {
let headerValue = getOperationArgumentValueFromParameter(operationArguments, headerParameter);
if ((headerValue !== null && headerValue !== undefined) || headerParameter.mapper.required) {
headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter));
const headerCollectionPrefix = headerParameter.mapper
.headerCollectionPrefix;
if (headerCollectionPrefix) {
for (const key of Object.keys(headerValue)) {
request.headers.set(headerCollectionPrefix + key, headerValue[key]);
}
}
else {
request.headers.set(headerParameter.mapper.serializedName || getPathStringFromParameter(headerParameter), headerValue);
}
}
}
}
const customHeaders = operationArguments.options?.requestOptions?.customHeaders;
if (customHeaders) {
for (const customHeaderName of Object.keys(customHeaders)) {
request.headers.set(customHeaderName, customHeaders[customHeaderName]);
}
}
}
/**
* @internal
*/
function serializeRequestBody(request, operationArguments, operationSpec, stringifyXML = function () {
throw new Error("XML serialization unsupported!");
}) {
const serializerOptions = operationArguments.options?.serializerOptions;
const updatedOptions = {
xml: {
rootName: serializerOptions?.xml.rootName ?? "",
includeRoot: serializerOptions?.xml.includeRoot ?? false,
xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,
},
};
const xmlCharKey = updatedOptions.xml.xmlCharKey;
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
request.body = getOperationArgumentValueFromParameter(operationArguments, operationSpec.requestBody);
const bodyMapper = operationSpec.requestBody.mapper;
const { required, serializedName, xmlName, xmlElementName, xmlNamespace, xmlNamespacePrefix, nullable, } = bodyMapper;
const typeName = bodyMapper.type.name;
try {
if ((request.body !== undefined && request.body !== null) ||
(nullable && request.body === null) ||
required) {
const requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody);
request.body = operationSpec.serializer.serialize(bodyMapper, request.body, requestBodyParameterPathString, updatedOptions);
const isStream = typeName === MapperTypeNames.Stream;
if (operationSpec.isXML) {
const xmlnsKey = xmlNamespacePrefix ? `xmlns:${xmlNamespacePrefix}` : "xmlns";
const value = getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, request.body, updatedOptions);
if (typeName === MapperTypeNames.Sequence) {
request.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), { rootName: xmlName || serializedName, xmlCharKey });
}
else if (!isStream) {
request.body = stringifyXML(value, {
rootName: xmlName || serializedName,
xmlCharKey,
});
}
}
else if (typeName === MapperTypeNames.String &&
(operationSpec.contentType?.match("text/plain") || operationSpec.mediaType === "text")) {
// the String serializer has validated that request body is a string
// so just send the string.
return;
}
else if (!isStream) {
request.body = JSON.stringify(request.body);
}
}
}
catch (error) {
throw new Error(`Error "${error.message}" occurred in serializing the payload - ${JSON.stringify(serializedName, undefined, " ")}.`);
}
}
else if (operationSpec.formDataParameters && operationSpec.formDataParameters.length > 0) {
request.formData = {};
for (const formDataParameter of operationSpec.formDataParameters) {
const formDataParameterValue = getOperationArgumentValueFromParameter(operationArguments, formDataParameter);
if (formDataParameterValue !== undefined && formDataParameterValue !== null) {
const formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);
request.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter), updatedOptions);
}
}
}
}
/**
* Adds an xml namespace to the xml serialized object if needed, otherwise it just returns the value itself
*/
function getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, serializedValue, options) {
// Composite and Sequence schemas already got their root namespace set during serialization
// We just need to add xmlns to the other schema types
if (xmlNamespace && !["Composite", "Sequence", "Dictionary"].includes(typeName)) {
const result = {};
result[options.xml.xmlCharKey] = serializedValue;
result[XML_ATTRKEY] = { [xmlnsKey]: xmlNamespace };
return result;
}
return serializedValue;
}
function prepareXMLRootList(obj, elementName, xmlNamespaceKey, xmlNamespace) {
if (!Array.isArray(obj)) {
obj = [obj];
}
if (!xmlNamespaceKey || !xmlNamespace) {
return { [elementName]: obj };
}
const result = { [elementName]: obj };
result[XML_ATTRKEY] = { [xmlNamespaceKey]: xmlNamespace };
return result;
}
//# sourceMappingURL=serializationPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/pipeline.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a new Pipeline for use with a Service Client.
* Adds in deserializationPolicy by default.
* Also adds in bearerTokenAuthenticationPolicy if passed a TokenCredential.
* @param options - Options to customize the created pipeline.
*/
function createClientPipeline(options = {}) {
const pipeline = esm_createPipelineFromOptions_createPipelineFromOptions(options ?? {});
if (options.credentialOptions) {
pipeline.addPolicy(bearerTokenAuthenticationPolicy({
credential: options.credentialOptions.credential,
scopes: options.credentialOptions.credentialScopes,
}));
}
pipeline.addPolicy(serializationPolicy(options.serializationOptions), { phase: "Serialize" });
pipeline.addPolicy(deserializationPolicy(options.deserializationOptions), {
phase: "Deserialize",
});
return pipeline;
}
//# sourceMappingURL=pipeline.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/httpClientCache.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
let httpClientCache_cachedHttpClient;
function getCachedDefaultHttpClient() {
if (!httpClientCache_cachedHttpClient) {
httpClientCache_cachedHttpClient = esm_defaultHttpClient_createDefaultHttpClient();
}
return httpClientCache_cachedHttpClient;
}
//# sourceMappingURL=httpClientCache.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/urlHelpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const CollectionFormatToDelimiterMap = {
CSV: ",",
SSV: " ",
Multi: "Multi",
TSV: "\t",
Pipes: "|",
};
function getRequestUrl(baseUri, operationSpec, operationArguments, fallbackObject) {
const urlReplacements = calculateUrlReplacements(operationSpec, operationArguments, fallbackObject);
let isAbsolutePath = false;
let requestUrl = replaceAll(baseUri, urlReplacements);
if (operationSpec.path) {
let path = replaceAll(operationSpec.path, urlReplacements);
// QUIRK: sometimes we get a path component like /{nextLink}
// which may be a fully formed URL with a leading /. In that case, we should
// remove the leading /
if (operationSpec.path === "/{nextLink}" && path.startsWith("/")) {
path = path.substring(1);
}
// QUIRK: sometimes we get a path component like {nextLink}
// which may be a fully formed URL. In that case, we should
// ignore the baseUri.
if (isAbsoluteUrl(path)) {
requestUrl = path;
isAbsolutePath = true;
}
else {
requestUrl = appendPath(requestUrl, path);
}
}
const { queryParams, sequenceParams } = calculateQueryParameters(operationSpec, operationArguments, fallbackObject);
/**
* Notice that this call sets the `noOverwrite` parameter to true if the `requestUrl`
* is an absolute path. This ensures that existing query parameter values in `requestUrl`
* do not get overwritten. On the other hand when `requestUrl` is not absolute path, it
* is still being built so there is nothing to overwrite.
*/
requestUrl = appendQueryParams(requestUrl, queryParams, sequenceParams, isAbsolutePath);
return requestUrl;
}
function replaceAll(input, replacements) {
let result = input;
for (const [searchValue, replaceValue] of replacements) {
result = result.split(searchValue).join(replaceValue);
}
return result;
}
function calculateUrlReplacements(operationSpec, operationArguments, fallbackObject) {
const result = new Map();
if (operationSpec.urlParameters?.length) {
for (const urlParameter of operationSpec.urlParameters) {
let urlParameterValue = getOperationArgumentValueFromParameter(operationArguments, urlParameter, fallbackObject);
const parameterPathString = getPathStringFromParameter(urlParameter);
urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, parameterPathString);
if (!urlParameter.skipEncoding) {
urlParameterValue = encodeURIComponent(urlParameterValue);
}
result.set(`{${urlParameter.mapper.serializedName || parameterPathString}}`, urlParameterValue);
}
}
return result;
}
function isAbsoluteUrl(url) {
return url.includes("://");
}
function appendPath(url, pathToAppend) {
if (!pathToAppend) {
return url;
}
const parsedUrl = new URL(url);
let newPath = parsedUrl.pathname;
if (!newPath.endsWith("/")) {
newPath = `${newPath}/`;
}
if (pathToAppend.startsWith("/")) {
pathToAppend = pathToAppend.substring(1);
}
const searchStart = pathToAppend.indexOf("?");
if (searchStart !== -1) {
const path = pathToAppend.substring(0, searchStart);
const search = pathToAppend.substring(searchStart + 1);
newPath = newPath + path;
if (search) {
parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search;
}
}
else {
newPath = newPath + pathToAppend;
}
// Use Object.assign to bypass react-native's incorrect readonly URL.pathname declaration
Object.assign(parsedUrl, { pathname: newPath });
return parsedUrl.toString();
}
function calculateQueryParameters(operationSpec, operationArguments, fallbackObject) {
const result = new Map();
const sequenceParams = new Set();
if (operationSpec.queryParameters?.length) {
for (const queryParameter of operationSpec.queryParameters) {
if (queryParameter.mapper.type.name === "Sequence" && queryParameter.mapper.serializedName) {
sequenceParams.add(queryParameter.mapper.serializedName);
}
let queryParameterValue = getOperationArgumentValueFromParameter(operationArguments, queryParameter, fallbackObject);
if ((queryParameterValue !== undefined && queryParameterValue !== null) ||
queryParameter.mapper.required) {
queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter));
const delimiter = queryParameter.collectionFormat
? CollectionFormatToDelimiterMap[queryParameter.collectionFormat]
: "";
if (Array.isArray(queryParameterValue)) {
// replace null and undefined
queryParameterValue = queryParameterValue.map((item) => {
if (item === null || item === undefined) {
return "";
}
return item;
});
}
if (queryParameter.collectionFormat === "Multi" && queryParameterValue.length === 0) {
continue;
}
else if (Array.isArray(queryParameterValue) &&
(queryParameter.collectionFormat === "SSV" || queryParameter.collectionFormat === "TSV")) {
queryParameterValue = queryParameterValue.join(delimiter);
}
if (!queryParameter.skipEncoding) {
if (Array.isArray(queryParameterValue)) {
queryParameterValue = queryParameterValue.map((item) => {
return encodeURIComponent(item);
});
}
else {
queryParameterValue = encodeURIComponent(queryParameterValue);
}
}
// Join pipes and CSV *after* encoding, or the server will be upset.
if (Array.isArray(queryParameterValue) &&
(queryParameter.collectionFormat === "CSV" || queryParameter.collectionFormat === "Pipes")) {
queryParameterValue = queryParameterValue.join(delimiter);
}
result.set(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);
}
}
}
return {
queryParams: result,
sequenceParams,
};
}
function simpleParseQueryParams(queryString) {
const result = new Map();
if (!queryString || queryString[0] !== "?") {
return result;
}
// remove the leading ?
queryString = queryString.slice(1);
const pairs = queryString.split("&");
for (const pair of pairs) {
const [name, value] = pair.split("=", 2);
const existingValue = result.get(name);
if (existingValue) {
if (Array.isArray(existingValue)) {
existingValue.push(value);
}
else {
result.set(name, [existingValue, value]);
}
}
else {
result.set(name, value);
}
}
return result;
}
/** @internal */
function appendQueryParams(url, queryParams, sequenceParams, noOverwrite = false) {
if (queryParams.size === 0) {
return url;
}
const parsedUrl = new URL(url);
// QUIRK: parsedUrl.searchParams will have their name/value pairs decoded, which
// can change their meaning to the server, such as in the case of a SAS signature.
// To avoid accidentally un-encoding a query param, we parse the key/values ourselves
const combinedParams = simpleParseQueryParams(parsedUrl.search);
for (const [name, value] of queryParams) {
const existingValue = combinedParams.get(name);
if (Array.isArray(existingValue)) {
if (Array.isArray(value)) {
existingValue.push(...value);
const valueSet = new Set(existingValue);
combinedParams.set(name, Array.from(valueSet));
}
else {
existingValue.push(value);
}
}
else if (existingValue) {
if (Array.isArray(value)) {
value.unshift(existingValue);
}
else if (sequenceParams.has(name)) {
combinedParams.set(name, [existingValue, value]);
}
if (!noOverwrite) {
combinedParams.set(name, value);
}
}
else {
combinedParams.set(name, value);
}
}
const searchPieces = [];
for (const [name, value] of combinedParams) {
if (typeof value === "string") {
searchPieces.push(`${name}=${value}`);
}
else if (Array.isArray(value)) {
// QUIRK: If we get an array of values, include multiple key/value pairs
for (const subValue of value) {
searchPieces.push(`${name}=${subValue}`);
}
}
else {
searchPieces.push(`${name}=${value}`);
}
}
// QUIRK: we have to set search manually as searchParams will encode comma when it shouldn't.
parsedUrl.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
return parsedUrl.toString();
}
//# sourceMappingURL=urlHelpers.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const dist_esm_log_logger = esm_createClientLogger("core-client");
//# sourceMappingURL=log.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/serviceClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Initializes a new instance of the ServiceClient.
*/
class ServiceClient {
/**
* If specified, this is the base URI that requests will be made against for this ServiceClient.
* If it is not specified, then all OperationSpecs must contain a baseUrl property.
*/
_endpoint;
/**
* The default request content type for the service.
* Used if no requestContentType is present on an OperationSpec.
*/
_requestContentType;
/**
* Set to true if the request is sent over HTTP instead of HTTPS
*/
_allowInsecureConnection;
/**
* The HTTP client that will be used to send requests.
*/
_httpClient;
/**
* The pipeline used by this client to make requests
*/
pipeline;
/**
* The ServiceClient constructor
* @param options - The service client options that govern the behavior of the client.
*/
constructor(options = {}) {
this._requestContentType = options.requestContentType;
this._endpoint = options.endpoint ?? options.baseUri;
if (options.baseUri) {
dist_esm_log_logger.warning("The baseUri option for SDK Clients has been deprecated, please use endpoint instead.");
}
this._allowInsecureConnection = options.allowInsecureConnection;
this._httpClient = options.httpClient || getCachedDefaultHttpClient();
this.pipeline = options.pipeline || serviceClient_createDefaultPipeline(options);
if (options.additionalPolicies?.length) {
for (const { policy, position } of options.additionalPolicies) {
// Sign happens after Retry and is commonly needed to occur
// before policies that intercept post-retry.
const afterPhase = position === "perRetry" ? "Sign" : undefined;
this.pipeline.addPolicy(policy, {
afterPhase,
});
}
}
}
/**
* Send the provided httpRequest.
*/
sendRequest(request) {
return this.pipeline.sendRequest(this._httpClient, request);
}
/**
* Send an HTTP request that is populated using the provided OperationSpec.
* @typeParam T - The typed result of the request, based on the OperationSpec.
* @param operationArguments - The arguments that the HTTP request's templated values will be populated from.
* @param operationSpec - The OperationSpec to use to populate the httpRequest.
*/
async sendOperationRequest(operationArguments, operationSpec) {
const endpoint = operationSpec.baseUrl || this._endpoint;
if (!endpoint) {
throw new Error("If operationSpec.baseUrl is not specified, then the ServiceClient must have a endpoint string property that contains the base URL to use.");
}
// Templatized URLs sometimes reference properties on the ServiceClient child class,
// so we have to pass `this` below in order to search these properties if they're
// not part of OperationArguments
const url = getRequestUrl(endpoint, operationSpec, operationArguments, this);
const request = esm_pipelineRequest_createPipelineRequest({
url,
});
request.method = operationSpec.httpMethod;
const operationInfo = getOperationRequestInfo(request);
operationInfo.operationSpec = operationSpec;
operationInfo.operationArguments = operationArguments;
const contentType = operationSpec.contentType || this._requestContentType;
if (contentType && operationSpec.requestBody) {
request.headers.set("Content-Type", contentType);
}
const options = operationArguments.options;
if (options) {
const requestOptions = options.requestOptions;
if (requestOptions) {
if (requestOptions.timeout) {
request.timeout = requestOptions.timeout;
}
if (requestOptions.onUploadProgress) {
request.onUploadProgress = requestOptions.onUploadProgress;
}
if (requestOptions.onDownloadProgress) {
request.onDownloadProgress = requestOptions.onDownloadProgress;
}
if (requestOptions.shouldDeserialize !== undefined) {
operationInfo.shouldDeserialize = requestOptions.shouldDeserialize;
}
if (requestOptions.allowInsecureConnection) {
request.allowInsecureConnection = true;
}
}
if (options.abortSignal) {
request.abortSignal = options.abortSignal;
}
if (options.tracingOptions) {
request.tracingOptions = options.tracingOptions;
}
}
if (this._allowInsecureConnection) {
request.allowInsecureConnection = true;
}
if (request.streamResponseStatusCodes === undefined) {
request.streamResponseStatusCodes = getStreamingResponseStatusCodes(operationSpec);
}
try {
const rawResponse = await this.sendRequest(request);
const flatResponse = flattenResponse(rawResponse, operationSpec.responses[rawResponse.status]);
if (options?.onResponse) {
options.onResponse(rawResponse, flatResponse);
}
return flatResponse;
}
catch (error) {
if (typeof error === "object" && error?.response) {
const rawResponse = error.response;
const flatResponse = flattenResponse(rawResponse, operationSpec.responses[error.statusCode] || operationSpec.responses["default"]);
error.details = flatResponse;
if (options?.onResponse) {
options.onResponse(rawResponse, flatResponse, error);
}
}
throw error;
}
}
}
function serviceClient_createDefaultPipeline(options) {
const credentialScopes = getCredentialScopes(options);
const credentialOptions = options.credential && credentialScopes
? { credentialScopes, credential: options.credential }
: undefined;
return createClientPipeline({
...options,
credentialOptions,
});
}
function getCredentialScopes(options) {
if (options.credentialScopes) {
return options.credentialScopes;
}
if (options.endpoint) {
return `${options.endpoint}/.default`;
}
if (options.baseUri) {
return `${options.baseUri}/.default`;
}
if (options.credential) {
throw new Error(`When using credentials, the ServiceClientOptions must contain either a endpoint or a credentialScopes. Unable to create a bearerTokenAuthenticationPolicy`);
}
return undefined;
}
//# sourceMappingURL=serviceClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/authorizeRequestOnClaimChallenge.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Converts: `Bearer a="b", c="d", Bearer d="e", f="g"`.
* Into: `[ { a: 'b', c: 'd' }, { d: 'e', f: 'g' } ]`.
*
* @internal
*/
function parseCAEChallenge(challenges) {
const bearerChallenges = `, ${challenges.trim()}`.split(", Bearer ").filter((x) => x);
return bearerChallenges.map((challenge) => {
const challengeParts = `${challenge.trim()}, `.split('", ').filter((x) => x);
const keyValuePairs = challengeParts.map((keyValue) => (([key, value]) => ({ [key]: value }))(keyValue.trim().split('="')));
// Key-value pairs to plain object:
return keyValuePairs.reduce((a, b) => ({ ...a, ...b }), {});
});
}
/**
* This function can be used as a callback for the `bearerTokenAuthenticationPolicy` of `@azure/core-rest-pipeline`, to support CAE challenges:
* [Continuous Access Evaluation](https://learn.microsoft.com/azure/active-directory/conditional-access/concept-continuous-access-evaluation).
*
* Call the `bearerTokenAuthenticationPolicy` with the following options:
*
* ```ts snippet:AuthorizeRequestOnClaimChallenge
* import { bearerTokenAuthenticationPolicy } from "@azure/core-rest-pipeline";
* import { authorizeRequestOnClaimChallenge } from "@azure/core-client";
*
* const policy = bearerTokenAuthenticationPolicy({
* challengeCallbacks: {
* authorizeRequestOnChallenge: authorizeRequestOnClaimChallenge,
* },
* scopes: ["https://service/.default"],
* });
* ```
*
* Once provided, the `bearerTokenAuthenticationPolicy` policy will internally handle Continuous Access Evaluation (CAE) challenges.
* When it can't complete a challenge it will return the 401 (unauthorized) response from ARM.
*
* Example challenge with claims:
*
* ```
* Bearer authorization_uri="https://login.windows-ppe.net/", error="invalid_token",
* error_description="User session has been revoked",
* claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwMzc0MjgwMCJ9fX0="
* ```
*/
async function authorizeRequestOnClaimChallenge(onChallengeOptions) {
const { scopes, response } = onChallengeOptions;
const logger = onChallengeOptions.logger || coreClientLogger;
const challenge = response.headers.get("WWW-Authenticate");
if (!challenge) {
logger.info(`The WWW-Authenticate header was missing. Failed to perform the Continuous Access Evaluation authentication flow.`);
return false;
}
const challenges = parseCAEChallenge(challenge) || [];
const parsedChallenge = challenges.find((x) => x.claims);
if (!parsedChallenge) {
logger.info(`The WWW-Authenticate header was missing the necessary "claims" to perform the Continuous Access Evaluation authentication flow.`);
return false;
}
const accessToken = await onChallengeOptions.getAccessToken(parsedChallenge.scope ? [parsedChallenge.scope] : scopes, {
claims: decodeStringToString(parsedChallenge.claims),
});
if (!accessToken) {
return false;
}
onChallengeOptions.request.headers.set("Authorization", `${accessToken.tokenType ?? "Bearer"} ${accessToken.token}`);
return true;
}
//# sourceMappingURL=authorizeRequestOnClaimChallenge.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/authorizeRequestOnTenantChallenge.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A set of constants used internally when processing requests.
*/
const Constants = {
DefaultScope: "/.default",
/**
* Defines constants for use with HTTP headers.
*/
HeaderConstants: {
/**
* The Authorization header.
*/
AUTHORIZATION: "authorization",
},
};
function isUuid(text) {
return /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/.test(text);
}
/**
* Defines a callback to handle auth challenge for Storage APIs.
* This implements the bearer challenge process described here: https://learn.microsoft.com/rest/api/storageservices/authorize-with-azure-active-directory#bearer-challenge
* Handling has specific features for storage that departs to the general AAD challenge docs.
**/
const authorizeRequestOnTenantChallenge = async (challengeOptions) => {
const requestOptions = requestToOptions(challengeOptions.request);
const challenge = getChallenge(challengeOptions.response);
if (challenge) {
const challengeInfo = parseChallenge(challenge);
const challengeScopes = buildScopes(challengeOptions, challengeInfo);
const tenantId = extractTenantId(challengeInfo);
if (!tenantId) {
return false;
}
const accessToken = await challengeOptions.getAccessToken(challengeScopes, {
...requestOptions,
tenantId,
});
if (!accessToken) {
return false;
}
challengeOptions.request.headers.set(Constants.HeaderConstants.AUTHORIZATION, `${accessToken.tokenType ?? "Bearer"} ${accessToken.token}`);
return true;
}
return false;
};
/**
* Extracts the tenant id from the challenge information
* The tenant id is contained in the authorization_uri as the first
* path part.
*/
function extractTenantId(challengeInfo) {
const parsedAuthUri = new URL(challengeInfo.authorization_uri);
const pathSegments = parsedAuthUri.pathname.split("/");
const tenantId = pathSegments[1];
if (tenantId && isUuid(tenantId)) {
return tenantId;
}
return undefined;
}
/**
* Builds the authentication scopes based on the information that comes in the
* challenge information. Scopes url is present in the resource_id, if it is empty
* we keep using the original scopes.
*/
function buildScopes(challengeOptions, challengeInfo) {
if (!challengeInfo.resource_id) {
return challengeOptions.scopes;
}
const challengeScopes = new URL(challengeInfo.resource_id);
let scope = new URL(Constants.DefaultScope, challengeScopes.origin).toString();
if (scope === "https://disk.azure.com/.default") {
// the extra slash is required by the service
scope = "https://disk.azure.com//.default";
}
return [scope];
}
/**
* We will retrieve the challenge only if the response status code was 401,
* and if the response contained the header "WWW-Authenticate" with a non-empty value.
*/
function getChallenge(response) {
const challenge = response.headers.get("WWW-Authenticate");
if (response.status === 401 && challenge) {
return challenge;
}
return;
}
/**
* Converts: `Bearer a="b" c="d"`.
* Into: `[ { a: 'b', c: 'd' }]`.
*
* @internal
*/
function parseChallenge(challenge) {
const bearerChallenge = challenge.slice("Bearer ".length);
const challengeParts = `${bearerChallenge.trim()} `.split(" ").filter((x) => x);
const keyValuePairs = challengeParts.map((keyValue) => (([key, value]) => ({ [key]: value }))(keyValue.trim().split("=")));
// Key-value pairs to plain object:
return keyValuePairs.reduce((a, b) => ({ ...a, ...b }), {});
}
/**
* Extracts the options form a Pipeline Request for later re-use
*/
function requestToOptions(request) {
return {
abortSignal: request.abortSignal,
requestOptions: {
timeout: request.timeout,
},
tracingOptions: request.tracingOptions,
};
}
//# sourceMappingURL=authorizeRequestOnTenantChallenge.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-client/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/util.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// We use a custom symbol to cache a reference to the original request without
// exposing it on the public interface.
const util_originalRequestSymbol = Symbol("Original PipelineRequest");
// Symbol.for() will return the same symbol if it's already been created
// This particular one is used in core-client to handle the case of when a request is
// cloned but we need to retrieve the OperationSpec and OperationArguments from the
// original request.
const originalClientRequestSymbol = Symbol.for("@azure/core-client original request");
const passThroughProps = new Set([
"url",
"method",
"withCredentials",
"timeout",
"requestId",
"abortSignal",
"body",
"formData",
"onDownloadProgress",
"onUploadProgress",
"proxySettings",
"streamResponseStatusCodes",
"agent",
"requestOverrides",
]);
function toPipelineRequest(webResource, options = {}) {
const compatWebResource = webResource;
const request = compatWebResource[util_originalRequestSymbol];
const headers = esm_httpHeaders_createHttpHeaders(webResource.headers.toJson({ preserveCase: true }));
if (request) {
request.headers = headers;
return request;
}
else {
const newRequest = esm_pipelineRequest_createPipelineRequest({
url: webResource.url,
method: webResource.method,
headers,
withCredentials: webResource.withCredentials,
timeout: webResource.timeout,
requestId: webResource.requestId,
abortSignal: webResource.abortSignal,
body: webResource.body,
formData: webResource.formData,
disableKeepAlive: !!webResource.keepAlive,
onDownloadProgress: webResource.onDownloadProgress,
onUploadProgress: webResource.onUploadProgress,
proxySettings: webResource.proxySettings,
streamResponseStatusCodes: webResource.streamResponseStatusCodes,
agent: webResource.agent,
requestOverrides: webResource.requestOverrides,
});
if (options.originalRequest) {
newRequest[originalClientRequestSymbol] =
options.originalRequest;
}
return newRequest;
}
}
function toWebResourceLike(request, options) {
const originalRequest = options?.originalRequest ?? request;
const webResource = {
url: request.url,
method: request.method,
headers: toHttpHeadersLike(request.headers),
withCredentials: request.withCredentials,
timeout: request.timeout,
requestId: request.headers.get("x-ms-client-request-id") || request.requestId,
abortSignal: request.abortSignal,
body: request.body,
formData: request.formData,
keepAlive: !!request.disableKeepAlive,
onDownloadProgress: request.onDownloadProgress,
onUploadProgress: request.onUploadProgress,
proxySettings: request.proxySettings,
streamResponseStatusCodes: request.streamResponseStatusCodes,
agent: request.agent,
requestOverrides: request.requestOverrides,
clone() {
throw new Error("Cannot clone a non-proxied WebResourceLike");
},
prepare() {
throw new Error("WebResourceLike.prepare() is not supported by @azure/core-http-compat");
},
validateRequestProperties() {
/** do nothing */
},
};
if (options?.createProxy) {
return new Proxy(webResource, {
get(target, prop, receiver) {
if (prop === util_originalRequestSymbol) {
return request;
}
else if (prop === "clone") {
return () => {
return toWebResourceLike(toPipelineRequest(webResource, { originalRequest }), {
createProxy: true,
originalRequest,
});
};
}
return Reflect.get(target, prop, receiver);
},
set(target, prop, value, receiver) {
if (prop === "keepAlive") {
request.disableKeepAlive = !value;
}
if (typeof prop === "string" && passThroughProps.has(prop)) {
request[prop] = value;
}
return Reflect.set(target, prop, value, receiver);
},
});
}
else {
return webResource;
}
}
/**
* Converts HttpHeaders from core-rest-pipeline to look like
* HttpHeaders from core-http.
* @param headers - HttpHeaders from core-rest-pipeline
* @returns HttpHeaders as they looked in core-http
*/
function toHttpHeadersLike(headers) {
return new HttpHeaders(headers.toJSON({ preserveCase: true }));
}
/**
* A collection of HttpHeaders that can be sent with a HTTP request.
*/
function getHeaderKey(headerName) {
return headerName.toLowerCase();
}
/**
* A collection of HTTP header key/value pairs.
*/
class HttpHeaders {
_headersMap;
constructor(rawHeaders) {
this._headersMap = {};
if (rawHeaders) {
for (const headerName in rawHeaders) {
this.set(headerName, rawHeaders[headerName]);
}
}
}
/**
* Set a header in this collection with the provided name and value. The name is
* case-insensitive.
* @param headerName - The name of the header to set. This value is case-insensitive.
* @param headerValue - The value of the header to set.
*/
set(headerName, headerValue) {
this._headersMap[getHeaderKey(headerName)] = {
name: headerName,
value: headerValue.toString(),
};
}
/**
* Get the header value for the provided header name, or undefined if no header exists in this
* collection with the provided name.
* @param headerName - The name of the header.
*/
get(headerName) {
const header = this._headersMap[getHeaderKey(headerName)];
return !header ? undefined : header.value;
}
/**
* Get whether or not this header collection contains a header entry for the provided header name.
*/
contains(headerName) {
return !!this._headersMap[getHeaderKey(headerName)];
}
/**
* Remove the header with the provided headerName. Return whether or not the header existed and
* was removed.
* @param headerName - The name of the header to remove.
*/
remove(headerName) {
const result = this.contains(headerName);
delete this._headersMap[getHeaderKey(headerName)];
return result;
}
/**
* Get the headers that are contained this collection as an object.
*/
rawHeaders() {
return this.toJson({ preserveCase: true });
}
/**
* Get the headers that are contained in this collection as an array.
*/
headersArray() {
const headers = [];
for (const headerKey in this._headersMap) {
headers.push(this._headersMap[headerKey]);
}
return headers;
}
/**
* Get the header names that are contained in this collection.
*/
headerNames() {
const headerNames = [];
const headers = this.headersArray();
for (let i = 0; i < headers.length; ++i) {
headerNames.push(headers[i].name);
}
return headerNames;
}
/**
* Get the header values that are contained in this collection.
*/
headerValues() {
const headerValues = [];
const headers = this.headersArray();
for (let i = 0; i < headers.length; ++i) {
headerValues.push(headers[i].value);
}
return headerValues;
}
/**
* Get the JSON object representation of this HTTP header collection.
*/
toJson(options = {}) {
const result = {};
if (options.preserveCase) {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[header.name] = header.value;
}
}
else {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[getHeaderKey(header.name)] = header.value;
}
}
return result;
}
/**
* Get the string representation of this HTTP header collection.
*/
toString() {
return JSON.stringify(this.toJson({ preserveCase: true }));
}
/**
* Create a deep clone/copy of this HttpHeaders collection.
*/
clone() {
const resultPreservingCasing = {};
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
resultPreservingCasing[header.name] = header.value;
}
return new HttpHeaders(resultPreservingCasing);
}
}
//# sourceMappingURL=util.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/response.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const originalResponse = Symbol("Original FullOperationResponse");
/**
* A helper to convert response objects from the new pipeline back to the old one.
* @param response - A response object from core-client.
* @returns A response compatible with `HttpOperationResponse` from core-http.
*/
function toCompatResponse(response, options) {
let request = toWebResourceLike(response.request);
let headers = toHttpHeadersLike(response.headers);
if (options?.createProxy) {
return new Proxy(response, {
get(target, prop, receiver) {
if (prop === "headers") {
return headers;
}
else if (prop === "request") {
return request;
}
else if (prop === originalResponse) {
return response;
}
return Reflect.get(target, prop, receiver);
},
set(target, prop, value, receiver) {
if (prop === "headers") {
headers = value;
}
else if (prop === "request") {
request = value;
}
return Reflect.set(target, prop, value, receiver);
},
});
}
else {
return {
...response,
request,
headers,
};
}
}
/**
* A helper to convert back to a PipelineResponse
* @param compatResponse - A response compatible with `HttpOperationResponse` from core-http.
*/
function response_toPipelineResponse(compatResponse) {
const extendedCompatResponse = compatResponse;
const response = extendedCompatResponse[originalResponse];
const headers = esm_httpHeaders_createHttpHeaders(compatResponse.headers.toJson({ preserveCase: true }));
if (response) {
response.headers = headers;
return response;
}
else {
return {
...compatResponse,
headers,
request: toPipelineRequest(compatResponse.request),
};
}
}
//# sourceMappingURL=response.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/extendedClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Client to provide compatability between core V1 & V2.
*/
class ExtendedServiceClient extends ServiceClient {
constructor(options) {
super(options);
if (options.keepAliveOptions?.enable === false &&
!pipelineContainsDisableKeepAlivePolicy(this.pipeline)) {
this.pipeline.addPolicy(createDisableKeepAlivePolicy());
}
if (options.redirectOptions?.handleRedirects === false) {
this.pipeline.removePolicy({
name: redirectPolicy_redirectPolicyName,
});
}
}
/**
* Compatible send operation request function.
*
* @param operationArguments - Operation arguments
* @param operationSpec - Operation Spec
* @returns
*/
async sendOperationRequest(operationArguments, operationSpec) {
const userProvidedCallBack = operationArguments?.options?.onResponse;
let lastResponse;
function onResponse(rawResponse, flatResponse, error) {
lastResponse = rawResponse;
if (userProvidedCallBack) {
userProvidedCallBack(rawResponse, flatResponse, error);
}
}
operationArguments.options = {
...operationArguments.options,
onResponse,
};
const result = await super.sendOperationRequest(operationArguments, operationSpec);
if (lastResponse) {
Object.defineProperty(result, "_response", {
value: toCompatResponse(lastResponse),
});
}
return result;
}
}
//# sourceMappingURL=extendedClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/policies/requestPolicyFactoryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* An enum for compatibility with RequestPolicy
*/
var HttpPipelineLogLevel;
(function (HttpPipelineLogLevel) {
HttpPipelineLogLevel[HttpPipelineLogLevel["ERROR"] = 1] = "ERROR";
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
HttpPipelineLogLevel[HttpPipelineLogLevel["OFF"] = 0] = "OFF";
HttpPipelineLogLevel[HttpPipelineLogLevel["WARNING"] = 2] = "WARNING";
})(HttpPipelineLogLevel || (HttpPipelineLogLevel = {}));
const mockRequestPolicyOptions = {
log(_logLevel, _message) {
/* do nothing */
},
shouldLog(_logLevel) {
return false;
},
};
/**
* The name of the RequestPolicyFactoryPolicy
*/
const requestPolicyFactoryPolicyName = "RequestPolicyFactoryPolicy";
/**
* A policy that wraps policies written for core-http.
* @param factories - An array of `RequestPolicyFactory` objects from a core-http pipeline
*/
function createRequestPolicyFactoryPolicy(factories) {
const orderedFactories = factories.slice().reverse();
return {
name: requestPolicyFactoryPolicyName,
async sendRequest(request, next) {
let httpPipeline = {
async sendRequest(httpRequest) {
const response = await next(toPipelineRequest(httpRequest));
return toCompatResponse(response, { createProxy: true });
},
};
for (const factory of orderedFactories) {
httpPipeline = factory.create(httpPipeline, mockRequestPolicyOptions);
}
const webResourceLike = toWebResourceLike(request, { createProxy: true });
const response = await httpPipeline.sendRequest(webResourceLike);
return response_toPipelineResponse(response);
},
};
}
//# sourceMappingURL=requestPolicyFactoryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/httpClientAdapter.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Converts a RequestPolicy based HttpClient to a PipelineRequest based HttpClient.
* @param requestPolicyClient - A HttpClient compatible with core-http
* @returns A HttpClient compatible with core-rest-pipeline
*/
function convertHttpClient(requestPolicyClient) {
return {
sendRequest: async (request) => {
const response = await requestPolicyClient.sendRequest(toWebResourceLike(request, { createProxy: true }));
return response_toPipelineResponse(response);
},
};
}
//# sourceMappingURL=httpClientAdapter.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-http-compat/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A Shim Library that provides compatibility between Core V1 & V2 Packages.
*
* @packageDocumentation
*/
//# sourceMappingURL=index.js.map
// EXTERNAL MODULE: ./node_modules/path-expression-matcher/src/Expression.js
var Expression = __webpack_require__(3945);
// EXTERNAL MODULE: ./node_modules/path-expression-matcher/src/Matcher.js
var Matcher = __webpack_require__(8257);
;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/util.js
function safeComment(val) {
return String(val)
.replace(/--/g, '- -') // -- is illegal anywhere in comment content
.replace(/--/g, '- -') // handle the scenario when 2 consiucative dashes appears
.replace(/-$/, '- '); // trailing - would form -- with the closing -->
}
function safeCdata(val) {
return String(val).replace(/\]\]>/g, ']]]]><![CDATA[>')
}
function escapeAttribute(val) {
return String(val).replace(/"/g, '&quot;').replace(/'/g, '&apos;')
}
// EXTERNAL MODULE: ./node_modules/xml-naming/src/index.js
var src = __webpack_require__(4658);
;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/orderedJs2Xml.js
const EOL = "\n";
/**
* Detect XML version from the first element of the ordered array input.
* The first element must be a ?xml processing instruction with a version attribute.
* Returns '1.0' if not found.
*
* @param {array} jArray
* @param {object} options
*/
function detectXmlVersionFromArray(jArray, options) {
if (!Array.isArray(jArray) || jArray.length === 0) return '1.0';
const first = jArray[0];
const firstKey = propName(first);
if (firstKey === '?xml') {
const attrs = first[':@'];
if (attrs) {
const versionKey = options.attributeNamePrefix + 'version';
if (attrs[versionKey]) return attrs[versionKey];
}
}
return '1.0';
}
/**
* Resolve a tag or attribute name through sanitizeName if configured.
* Validation via xml-naming's qName is performed first; the sanitizeName
* callback is invoked only when the name is invalid. If sanitizeName is
* false (default), no validation occurs and the name is used as-is.
*
* @param {string} name - raw name from the JS object
* @param {boolean} isAttribute - true when resolving an attribute name
* @param {object} options
* @param {Matcher} matcher - current matcher state (readonly from callback perspective)
* @param {function} qNameValidator - function to validate tag names
*/
function resolveTagName(name, isAttribute, options, matcher, qNameValidator) {
if (!options.sanitizeName) return name;
if (qNameValidator(name)) return name;
return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() });
}
/**
* @param {array} jArray
* @param {any} options
* @returns
*/
function toXml(jArray, options) {
let indentation = "";
if (options.format) {
indentation = EOL;
}
// Pre-compile stopNode expressions for pattern matching
const stopNodeExpressions = [];
if (options.stopNodes && Array.isArray(options.stopNodes)) {
for (let i = 0; i < options.stopNodes.length; i++) {
const node = options.stopNodes[i];
if (typeof node === 'string') {
stopNodeExpressions.push(new Expression/* default */.A(node));
} else if (node instanceof Expression/* default */.A) {
stopNodeExpressions.push(node);
}
}
}
// Detect XML version for use in name validation
const xmlVersion = detectXmlVersionFromArray(jArray, options);
const qNameValidator = (0,src/* createValidator */.fH)('qName', { xmlVersion });
// Initialize matcher for path tracking
const matcher = new Matcher/* default */.A();
return arrToStr(jArray, options, indentation, matcher, stopNodeExpressions, qNameValidator);
}
function arrToStr(arr, options, indentation, matcher, stopNodeExpressions, qNameValidator) {
let xmlStr = "";
let isPreviousElementTag = false;
if (options.maxNestedTags && matcher.getDepth() > options.maxNestedTags) {
throw new Error("Maximum nested tags exceeded");
}
if (!Array.isArray(arr)) {
// Non-array values (e.g. string tag values) should be treated as text content
if (arr !== undefined && arr !== null) {
let text = arr.toString();
text = replaceEntitiesValue(text, options);
return text;
}
return "";
}
for (let i = 0; i < arr.length; i++) {
const tagObj = arr[i];
const rawTagName = propName(tagObj);
if (rawTagName === undefined) continue;
// Special names are exempt from sanitizeName: internal conventions and PI tags
// are not user-supplied XML element names.
const isSpecialName = rawTagName === options.textNodeName
|| rawTagName === options.cdataPropName
|| rawTagName === options.commentPropName
|| rawTagName[0] === '?';
// Resolve tag name (may transform it; may throw for invalid names)
const tagName = isSpecialName
? rawTagName
: resolveTagName(rawTagName, false, options, matcher, qNameValidator);
// Extract attributes from ":@" property
const attrValues = extractAttributeValues(tagObj[":@"], options);
// Push resolved tag to matcher WITH attributes
matcher.push(tagName, attrValues);
// Check if this is a stop node using Expression matching
const isStopNode = checkStopNode(matcher, stopNodeExpressions);
if (tagName === options.textNodeName) {
let tagText = tagObj[rawTagName];
if (!isStopNode) {
tagText = options.tagValueProcessor(tagName, tagText);
tagText = replaceEntitiesValue(tagText, options);
}
if (isPreviousElementTag) {
xmlStr += indentation;
}
xmlStr += tagText;
isPreviousElementTag = false;
matcher.pop();
continue;
} else if (tagName === options.cdataPropName) {
if (isPreviousElementTag) {
xmlStr += indentation;
}
const val = tagObj[rawTagName][0][options.textNodeName];
const safeVal = safeCdata(val);
xmlStr += `<![CDATA[${safeVal}]]>`;
isPreviousElementTag = false;
matcher.pop();
continue;
} else if (tagName === options.commentPropName) {
const val = tagObj[rawTagName][0][options.textNodeName];
const safeVal = safeComment(val);
xmlStr += indentation + `<!--${safeVal}-->`;
isPreviousElementTag = true;
matcher.pop();
continue;
} else if (tagName[0] === "?") {
const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator);
const tempInd = tagName === "?xml" ? "" : indentation;
// Text node content on PI/XML declaration tags is intentionally ignored.
// Only attributes are valid on these tags per the XML spec.
xmlStr += tempInd + `<${tagName}${attStr}?>`;
isPreviousElementTag = true;
matcher.pop();
continue;
}
let newIdentation = indentation;
if (newIdentation !== "") {
newIdentation += options.indentBy;
}
// Pass isStopNode to attr_to_str so attributes are also not processed for stopNodes
const attStr = attr_to_str(tagObj[":@"], options, isStopNode, matcher, qNameValidator);
const tagStart = indentation + `<${tagName}${attStr}`;
// If this is a stopNode, get raw content without processing
let tagValue;
if (isStopNode) {
tagValue = orderedJs2Xml_getRawContent(tagObj[rawTagName], options);
} else {
tagValue = arrToStr(tagObj[rawTagName], options, newIdentation, matcher, stopNodeExpressions, qNameValidator);
}
if (options.unpairedTags.indexOf(tagName) !== -1) {
if (options.suppressUnpairedNode) xmlStr += tagStart + ">";
else xmlStr += tagStart + "/>";
} else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) {
xmlStr += tagStart + "/>";
} else if (tagValue && tagValue.endsWith(">")) {
xmlStr += tagStart + `>${tagValue}${indentation}</${tagName}>`;
} else {
xmlStr += tagStart + ">";
if (tagValue && indentation !== "" && (tagValue.includes("/>") || tagValue.includes("</"))) {
xmlStr += indentation + options.indentBy + tagValue + indentation;
} else {
xmlStr += tagValue;
}
xmlStr += `</${tagName}>`;
}
isPreviousElementTag = true;
// Pop tag from matcher
matcher.pop();
}
return xmlStr;
}
/**
* Extract attribute values from the ":@" object and return as plain object
* for passing to matcher.push()
*/
function extractAttributeValues(attrMap, options) {
if (!attrMap || options.ignoreAttributes) return null;
const attrValues = {};
let hasAttrs = false;
for (let attr in attrMap) {
if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue;
// Remove the attribute prefix to get clean attribute name
const cleanAttrName = attr.startsWith(options.attributeNamePrefix)
? attr.substr(options.attributeNamePrefix.length)
: attr;
attrValues[cleanAttrName] = escapeAttribute(attrMap[attr]);
hasAttrs = true;
}
return hasAttrs ? attrValues : null;
}
/**
* Extract raw content from a stopNode without any processing
* This preserves the content exactly as-is, including special characters
*/
function orderedJs2Xml_getRawContent(arr, options) {
if (!Array.isArray(arr)) {
// Non-array values return as-is
if (arr !== undefined && arr !== null) {
return arr.toString();
}
return "";
}
let content = "";
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
const tagName = propName(item);
if (tagName === options.textNodeName) {
// Raw text content - NO processing, NO entity replacement
content += item[tagName];
} else if (tagName === options.cdataPropName) {
// CDATA content
content += item[tagName][0][options.textNodeName];
} else if (tagName === options.commentPropName) {
// Comment content
content += item[tagName][0][options.textNodeName];
} else if (tagName && tagName[0] === "?") {
// Processing instruction - skip for stopNodes
continue;
} else if (tagName) {
// Nested tags within stopNode — no sanitizeName, content is raw
const attStr = attr_to_str_raw(item[":@"], options);
const nestedContent = orderedJs2Xml_getRawContent(item[tagName], options);
if (!nestedContent || nestedContent.length === 0) {
content += `<${tagName}${attStr}/>`;
} else {
content += `<${tagName}${attStr}>${nestedContent}</${tagName}>`;
}
}
}
return content;
}
/**
* Build attribute string for stopNodes - NO entity replacement
*/
function attr_to_str_raw(attrMap, options) {
let attrStr = "";
if (attrMap && !options.ignoreAttributes) {
for (let attr in attrMap) {
if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue;
// For stopNodes, use raw value without processing
let attrVal = attrMap[attr];
if (attrVal === true && options.suppressBooleanAttributes) {
attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`;
} else {
attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${escapeAttribute(attrVal)}"`;
}
}
}
return attrStr;
}
function propName(obj) {
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
if (key !== ":@") return key;
}
}
/**
* Build attribute string, resolving attribute names through sanitizeName when configured.
* Accepts matcher so the callback has path context.
*/
function attr_to_str(attrMap, options, isStopNode, matcher, qNameValidator) {
let attrStr = "";
if (attrMap && !options.ignoreAttributes) {
for (let attr in attrMap) {
if (!Object.prototype.hasOwnProperty.call(attrMap, attr)) continue;
// Strip prefix to get the clean XML attribute name, then optionally sanitize it
const cleanAttrName = attr.substr(options.attributeNamePrefix.length);
const resolvedAttrName = isStopNode
? cleanAttrName // stopNodes are raw — skip sanitizeName for attr names too
: resolveTagName(cleanAttrName, true, options, matcher, qNameValidator);
let attrVal;
if (isStopNode) {
// For stopNodes, use raw value without any processing
attrVal = attrMap[attr];
} else {
// Normal processing: apply attributeValueProcessor and entity replacement
attrVal = options.attributeValueProcessor(attr, attrMap[attr]);
attrVal = replaceEntitiesValue(attrVal, options);
}
if (attrVal === true && options.suppressBooleanAttributes) {
attrStr += ` ${resolvedAttrName}`;
} else {
attrStr += ` ${resolvedAttrName}="${escapeAttribute(attrVal)}"`;
}
}
}
return attrStr;
}
function checkStopNode(matcher, stopNodeExpressions) {
if (!stopNodeExpressions || stopNodeExpressions.length === 0) return false;
for (let i = 0; i < stopNodeExpressions.length; i++) {
if (matcher.matches(stopNodeExpressions[i])) {
return true;
}
}
return false;
}
function replaceEntitiesValue(textValue, options) {
if (textValue && textValue.length > 0 && options.processEntities) {
for (let i = 0; i < options.entities.length; i++) {
const entity = options.entities[i];
textValue = textValue.replace(entity.regex, entity.val);
}
}
return textValue;
}
;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/ignoreAttributes.js
function getIgnoreAttributesFn(ignoreAttributes) {
if (typeof ignoreAttributes === 'function') {
return ignoreAttributes
}
if (Array.isArray(ignoreAttributes)) {
return (attrName) => {
for (const pattern of ignoreAttributes) {
if (typeof pattern === 'string' && attrName === pattern) {
return true
}
if (pattern instanceof RegExp && pattern.test(attrName)) {
return true
}
}
}
}
return () => false
}
;// CONCATENATED MODULE: ./node_modules/fast-xml-builder/src/fxb.js
//parse Empty Node as self closing node
const defaultOptions = {
attributeNamePrefix: '@_',
attributesGroupName: false,
textNodeName: '#text',
ignoreAttributes: true,
cdataPropName: false,
format: false,
indentBy: ' ',
suppressEmptyNode: false,
suppressUnpairedNode: true,
suppressBooleanAttributes: true,
tagValueProcessor: function (key, a) {
return a;
},
attributeValueProcessor: function (attrName, a) {
return a;
},
preserveOrder: false,
commentPropName: false,
unpairedTags: [],
entities: [
{ regex: new RegExp("&", "g"), val: "&amp;" },//it must be on top
{ regex: new RegExp(">", "g"), val: "&gt;" },
{ regex: new RegExp("<", "g"), val: "&lt;" },
{ regex: new RegExp("\'", "g"), val: "&apos;" },
{ regex: new RegExp("\"", "g"), val: "&quot;" }
],
processEntities: true,
stopNodes: [],
// transformTagName: false,
// transformAttributeName: false,
oneListGroup: false,
maxNestedTags: 100,
jPath: true, // When true, callbacks receive string jPath; when false, receive Matcher instance
sanitizeName: false // false = allow all names as-is (default, backward-compatible).
// Set to a function (name, { isAttribute, matcher }) => string to
// validate/sanitize tag and attribute names. Throw inside the function
// to reject an invalid name.
};
function Builder(options) {
this.options = Object.assign({}, defaultOptions, options);
// Convert old-style stopNodes for backward compatibility
// Old syntax: "*.tag" meant "tag anywhere in tree"
// New syntax: "..tag" means "tag anywhere in tree"
if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) {
this.options.stopNodes = this.options.stopNodes.map(node => {
if (typeof node === 'string' && node.startsWith('*.')) {
// Convert old wildcard syntax to deep wildcard
return '..' + node.substring(2);
}
return node;
});
}
// Pre-compile stopNode expressions for pattern matching
this.stopNodeExpressions = [];
if (this.options.stopNodes && Array.isArray(this.options.stopNodes)) {
for (let i = 0; i < this.options.stopNodes.length; i++) {
const node = this.options.stopNodes[i];
if (typeof node === 'string') {
this.stopNodeExpressions.push(new Expression/* default */.A(node));
} else if (node instanceof Expression/* default */.A) {
this.stopNodeExpressions.push(node);
}
}
}
if (this.options.ignoreAttributes === true || this.options.attributesGroupName) {
this.isAttribute = function (/*a*/) {
return false;
};
} else {
this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes)
this.attrPrefixLen = this.options.attributeNamePrefix.length;
this.isAttribute = isAttribute;
}
this.processTextOrObjNode = processTextOrObjNode
if (this.options.format) {
this.indentate = indentate;
this.tagEndChar = '>\n';
this.newLine = '\n';
} else {
this.indentate = function () {
return '';
};
this.tagEndChar = '>';
this.newLine = '';
}
}
/**
* Detect XML version from the ?xml declaration at the root of a plain-object input.
* Checks both attributesGroupName and flat attribute forms.
* Returns '1.0' if no declaration is found.
*/
function detectXmlVersionFromObj(jObj, options) {
const decl = jObj['?xml'];
if (decl && typeof decl === 'object') {
// attributesGroupName path e.g. { '$$': { '@_version': '1.1' } }
if (options.attributesGroupName && decl[options.attributesGroupName]) {
const v = decl[options.attributesGroupName][options.attributeNamePrefix + 'version'];
if (v) return v;
}
// flat attribute path e.g. { '@_version': '1.1' }
const v = decl[options.attributeNamePrefix + 'version'];
if (v) return v;
}
return '1.0';
}
/**
* Resolve a tag or attribute name through sanitizeName if configured.
* Validation via xml-naming's qName is performed first; the sanitizeName
* callback is invoked only when the name is invalid. If sanitizeName is
* false (default), no validation occurs and the name is used as-is.
*
* @param {string} name - raw name from the JS object
* @param {boolean} isAttribute - true when resolving an attribute name
* @param {object} options
* @param {Matcher} matcher - current matcher state (readonly from callback perspective)
* @param {function} qNameValidator - function to validate tag names
*/
function fxb_resolveTagName(name, isAttribute, options, matcher, qNameValidator) {
if (!options.sanitizeName) return name;
if (qNameValidator(name)) return name;
return options.sanitizeName(name, { isAttribute, matcher: matcher.readOnly() });
}
Builder.prototype.build = function (jObj) {
if (this.options.preserveOrder) {
return toXml(jObj, this.options);
} else {
if (Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1) {
jObj = {
[this.options.arrayNodeName]: jObj
}
}
// Initialize matcher for path tracking
const matcher = new Matcher/* default */.A();
const xmlVersion = detectXmlVersionFromObj(jObj, this.options);
const qNameValidator = (0,src/* createValidator */.fH)('qName', { xmlVersion });
return this.j2x(jObj, 0, matcher, qNameValidator).val;
}
};
Builder.prototype.j2x = function (jObj, level, matcher, qNameValidator) {
let attrStr = '';
let val = '';
if (this.options.maxNestedTags && matcher.getDepth() >= this.options.maxNestedTags) {
throw new Error("Maximum nested tags exceeded");
}
// Get jPath based on option: string for backward compatibility, or Matcher for new features
const jPath = this.options.jPath ? matcher.toString() : matcher;
// Check if current node is a stopNode (will be used for attribute encoding)
const isCurrentStopNode = this.checkStopNode(matcher);
for (let key in jObj) {
if (!Object.prototype.hasOwnProperty.call(jObj, key)) continue;
// Resolve the key through sanitizeName before any use.
// Special keys (textNodeName, cdataPropName, commentPropName, attributeNamePrefix,
// attributesGroupName, "?" PI tags) are exempt — they are builder-internal conventions,
// not user-supplied XML names.
const isSpecialKey = key === this.options.textNodeName
|| key === this.options.cdataPropName
|| key === this.options.commentPropName
|| (this.options.attributesGroupName && key === this.options.attributesGroupName)
|| this.isAttribute(key)
|| key[0] === '?';
const resolvedKey = isSpecialKey
? key
: fxb_resolveTagName(key, false, this.options, matcher, qNameValidator);
if (typeof jObj[key] === 'undefined') {
// supress undefined node only if it is not an attribute
if (this.isAttribute(key)) {
val += '';
}
} else if (jObj[key] === null) {
// null attribute should be ignored by the attribute list, but should not cause the tag closing
if (this.isAttribute(key)) {
val += '';
} else if (resolvedKey === this.options.cdataPropName || resolvedKey === this.options.commentPropName) {
val += '';
} else if (resolvedKey[0] === '?') {
val += this.indentate(level) + '<' + resolvedKey + '?' + this.tagEndChar;
} else {
val += this.indentate(level) + '<' + resolvedKey + '/' + this.tagEndChar;
}
} else if (jObj[key] instanceof Date) {
val += this.buildTextValNode(jObj[key], resolvedKey, '', level, matcher);
} else if (typeof jObj[key] !== 'object') {
//premitive type
const attr = this.isAttribute(key);
if (attr && !this.ignoreAttributesFn(attr, jPath)) {
// Resolve the attribute name through sanitizeName
const resolvedAttr = fxb_resolveTagName(attr, true, this.options, matcher, qNameValidator);
attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key], isCurrentStopNode);
} else if (!attr) {
//tag value
if (key === this.options.textNodeName) {
let newval = this.options.tagValueProcessor(key, '' + jObj[key]);
val += this.replaceEntitiesValue(newval);
} else {
// Check if this is a stopNode before building
matcher.push(resolvedKey);
const isStopNode = this.checkStopNode(matcher);
matcher.pop();
if (isStopNode) {
// Build as raw content without encoding
const textValue = '' + jObj[key];
if (textValue === '') {
val += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar;
} else {
val += this.indentate(level) + '<' + resolvedKey + '>' + textValue + '</' + resolvedKey + this.tagEndChar;
}
} else {
val += this.buildTextValNode(jObj[key], resolvedKey, '', level, matcher);
}
}
}
} else if (Array.isArray(jObj[key])) {
//repeated nodes
const arrLen = jObj[key].length;
let listTagVal = "";
let listTagAttr = "";
for (let j = 0; j < arrLen; j++) {
const item = jObj[key][j];
if (typeof item === 'undefined') {
// supress undefined node
} else if (item === null) {
if (resolvedKey[0] === "?") val += this.indentate(level) + '<' + resolvedKey + '?' + this.tagEndChar;
else val += this.indentate(level) + '<' + resolvedKey + '/' + this.tagEndChar;
} else if (typeof item === 'object') {
if (this.options.oneListGroup) {
// Push tag to matcher before recursive call
matcher.push(resolvedKey);
const result = this.j2x(item, level + 1, matcher, qNameValidator);
// Pop tag from matcher after recursive call
matcher.pop();
listTagVal += result.val;
if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) {
listTagAttr += result.attrStr
}
} else {
listTagVal += this.processTextOrObjNode(item, resolvedKey, level, matcher, qNameValidator)
}
} else {
if (this.options.oneListGroup) {
let textValue = this.options.tagValueProcessor(resolvedKey, item);
textValue = this.replaceEntitiesValue(textValue);
listTagVal += textValue;
} else {
// Check if this is a stopNode before building
matcher.push(resolvedKey);
const isStopNode = this.checkStopNode(matcher);
matcher.pop();
if (isStopNode) {
// Build as raw content without encoding
const textValue = '' + item;
if (textValue === '') {
listTagVal += this.indentate(level) + '<' + resolvedKey + this.closeTag(resolvedKey) + this.tagEndChar;
} else {
listTagVal += this.indentate(level) + '<' + resolvedKey + '>' + textValue + '</' + resolvedKey + this.tagEndChar;
}
} else {
listTagVal += this.buildTextValNode(item, resolvedKey, '', level, matcher);
}
}
}
}
if (this.options.oneListGroup) {
listTagVal = this.buildObjectNode(listTagVal, resolvedKey, listTagAttr, level);
}
val += listTagVal;
} else {
//nested node
if (this.options.attributesGroupName && key === this.options.attributesGroupName) {
const Ks = Object.keys(jObj[key]);
const L = Ks.length;
for (let j = 0; j < L; j++) {
// Resolve attribute names inside attributesGroupName
const resolvedAttr = fxb_resolveTagName(Ks[j], true, this.options, matcher, qNameValidator);
attrStr += this.buildAttrPairStr(resolvedAttr, '' + jObj[key][Ks[j]], isCurrentStopNode);
}
} else {
val += this.processTextOrObjNode(jObj[key], resolvedKey, level, matcher, qNameValidator)
}
}
}
return { attrStr: attrStr, val: val };
};
Builder.prototype.buildAttrPairStr = function (attrName, val, isStopNode) {
if (!isStopNode) {
val = this.options.attributeValueProcessor(attrName, '' + val);
val = this.replaceEntitiesValue(val);
}
if (this.options.suppressBooleanAttributes && val === "true") {
return ' ' + attrName;
} else return ' ' + attrName + '="' + escapeAttribute(val) + '"';
}
function processTextOrObjNode(object, key, level, matcher, qNameValidator) {
// Extract attributes to pass to matcher
const attrValues = this.extractAttributes(object);
// Push tag to matcher before recursion WITH attributes
matcher.push(key, attrValues);
// Check if this entire node is a stopNode
const isStopNode = this.checkStopNode(matcher);
if (isStopNode) {
// For stopNodes, build raw content without entity encoding
const rawContent = this.buildRawContent(object);
const attrStr = this.buildAttributesForStopNode(object);
matcher.pop();
return this.buildObjectNode(rawContent, key, attrStr, level);
}
const result = this.j2x(object, level + 1, matcher, qNameValidator);
// Pop tag from matcher after recursion
matcher.pop();
// PI/XML-declaration tags must never emit text content — route through
// buildTextValNode which correctly ignores the text node for "?" tags.
if (key[0] === '?') {
return this.buildTextValNode('', key, result.attrStr, level, matcher);
} else if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) {
return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level, matcher);
} else {
return this.buildObjectNode(result.val, key, result.attrStr, level);
}
}
// Helper method to extract attributes from an object
Builder.prototype.extractAttributes = function (obj) {
if (!obj || typeof obj !== 'object') return null;
const attrValues = {};
let hasAttrs = false;
// Check for attributesGroupName (when attributes are grouped)
if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) {
const attrGroup = obj[this.options.attributesGroupName];
for (let attrKey in attrGroup) {
if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue;
// Remove attribute prefix if present
const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix)
? attrKey.substring(this.options.attributeNamePrefix.length)
: attrKey;
attrValues[cleanKey] = escapeAttribute(attrGroup[attrKey]);
hasAttrs = true;
}
} else {
// Look for individual attributes (prefixed with attributeNamePrefix)
for (let key in obj) {
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
const attr = this.isAttribute(key);
if (attr) {
attrValues[attr] = escapeAttribute(obj[key]);
hasAttrs = true;
}
}
}
return hasAttrs ? attrValues : null;
};
// Build raw content for stopNode without entity encoding
Builder.prototype.buildRawContent = function (obj) {
if (typeof obj === 'string') {
return obj; // Already a string, return as-is
}
if (typeof obj !== 'object' || obj === null) {
return String(obj);
}
// Check if this is a stopNode data from parser: { "#text": "raw xml", "@_attr": "val" }
if (obj[this.options.textNodeName] !== undefined) {
return obj[this.options.textNodeName]; // Return raw text without encoding
}
// Build raw XML from nested structure
let content = '';
for (let key in obj) {
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
// Skip attributes
if (this.isAttribute(key)) continue;
if (this.options.attributesGroupName && key === this.options.attributesGroupName) continue;
const value = obj[key];
if (key === this.options.textNodeName) {
content += value; // Raw text
} else if (Array.isArray(value)) {
// Array of same tag
for (let item of value) {
if (typeof item === 'string' || typeof item === 'number') {
content += `<${key}>${item}</${key}>`;
} else if (typeof item === 'object' && item !== null) {
const nestedContent = this.buildRawContent(item);
const nestedAttrs = this.buildAttributesForStopNode(item);
if (nestedContent === '') {
content += `<${key}${nestedAttrs}/>`;
} else {
content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`;
}
}
}
} else if (typeof value === 'object' && value !== null) {
// Nested object
const nestedContent = this.buildRawContent(value);
const nestedAttrs = this.buildAttributesForStopNode(value);
if (nestedContent === '') {
content += `<${key}${nestedAttrs}/>`;
} else {
content += `<${key}${nestedAttrs}>${nestedContent}</${key}>`;
}
} else {
// Primitive value
content += `<${key}>${value}</${key}>`;
}
}
return content;
};
// Build attribute string for stopNode (no entity encoding)
Builder.prototype.buildAttributesForStopNode = function (obj) {
if (!obj || typeof obj !== 'object') return '';
let attrStr = '';
// Check for attributesGroupName (when attributes are grouped)
if (this.options.attributesGroupName && obj[this.options.attributesGroupName]) {
const attrGroup = obj[this.options.attributesGroupName];
for (let attrKey in attrGroup) {
if (!Object.prototype.hasOwnProperty.call(attrGroup, attrKey)) continue;
const cleanKey = attrKey.startsWith(this.options.attributeNamePrefix)
? attrKey.substring(this.options.attributeNamePrefix.length)
: attrKey;
const val = attrGroup[attrKey];
if (val === true && this.options.suppressBooleanAttributes) {
attrStr += ' ' + cleanKey;
} else {
// stopNode content is raw, but the quote delimiter is always escaped
// so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str)
attrStr += ' ' + cleanKey + '="' + escapeAttribute(val) + '"';
}
}
} else {
// Look for individual attributes
for (let key in obj) {
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
const attr = this.isAttribute(key);
if (attr) {
const val = obj[key];
if (val === true && this.options.suppressBooleanAttributes) {
attrStr += ' ' + attr;
} else {
// stopNode content is raw, but the quote delimiter is always escaped
// so a quote in the value cannot break out of the attribute (see orderedJs2Xml attr_to_str)
attrStr += ' ' + attr + '="' + escapeAttribute(val) + '"';
}
}
}
}
return attrStr;
};
Builder.prototype.buildObjectNode = function (val, key, attrStr, level) {
if (val === "") {
if (key[0] === "?") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
else {
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
}
} else if (key[0] === "?") {
// PI/XML-declaration tags never have body content — treat them like empty.
return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
} else {
let tagEndExp = '</' + key + this.tagEndChar;
let piClosingChar = "";
if (key[0] === "?") {
piClosingChar = "?";
tagEndExp = "";
}
// attrStr is an empty string in case the attribute came as undefined or null
if ((attrStr || attrStr === '') && val.indexOf('<') === -1) {
return (this.indentate(level) + '<' + key + attrStr + piClosingChar + '>' + val + tagEndExp);
} else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
return this.indentate(level) + `<!--${safeComment(val)}-->` + this.newLine;
} else {
return (
this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar +
val +
this.indentate(level) + tagEndExp);
}
}
}
Builder.prototype.closeTag = function (key) {
let closeTag = "";
if (this.options.unpairedTags.indexOf(key) !== -1) { //unpaired
if (!this.options.suppressUnpairedNode) closeTag = "/"
} else if (this.options.suppressEmptyNode) { //empty
closeTag = "/";
} else {
closeTag = `></${key}`
}
return closeTag;
}
Builder.prototype.checkStopNode = function (matcher) {
if (!this.stopNodeExpressions || this.stopNodeExpressions.length === 0) return false;
for (let i = 0; i < this.stopNodeExpressions.length; i++) {
if (matcher.matches(this.stopNodeExpressions[i])) {
return true;
}
}
return false;
}
function buildEmptyObjNode(val, key, attrStr, level) {
if (val !== '') {
return this.buildObjectNode(val, key, attrStr, level);
} else {
if (key[0] === "?") return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
else {
return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;
}
}
}
Builder.prototype.buildTextValNode = function (val, key, attrStr, level, matcher) {
if (this.options.cdataPropName !== false && key === this.options.cdataPropName) {
const safeVal = safeCdata(val);
return this.indentate(level) + `<![CDATA[${safeVal}]]>` + this.newLine;
} else if (this.options.commentPropName !== false && key === this.options.commentPropName) {
const safeVal = safeComment(val);
return this.indentate(level) + `<!--${safeVal}-->` + this.newLine;
} else if (key[0] === "?") {//PI tag
return this.indentate(level) + '<' + key + attrStr + '?' + this.tagEndChar;
} else {
// Normal processing: apply tagValueProcessor and entity replacement
let textValue = this.options.tagValueProcessor(key, val);
textValue = this.replaceEntitiesValue(textValue);
if (textValue === '') {
return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar;
} else {
return this.indentate(level) + '<' + key + attrStr + '>' +
textValue +
'</' + key + this.tagEndChar;
}
}
}
Builder.prototype.replaceEntitiesValue = function (textValue) {
if (textValue && textValue.length > 0 && this.options.processEntities) {
for (let i = 0; i < this.options.entities.length; i++) {
const entity = this.options.entities[i];
textValue = textValue.replace(entity.regex, entity.val);
}
}
return textValue;
}
function indentate(level) {
return this.options.indentBy.repeat(level);
}
function isAttribute(name /*, options*/) {
if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {
return name.substr(this.attrPrefixLen);
} else {
return false;
}
}
;// CONCATENATED MODULE: ./node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js
// Re-export from fast-xml-builder for backward compatibility
/* harmony default export */ const json2xml = (Builder);
// If there are any named exports you also want to re-export:
// EXTERNAL MODULE: ./node_modules/fast-xml-parser/src/fxp.js
var fxp = __webpack_require__(5824);
// EXTERNAL MODULE: ./node_modules/fast-xml-parser/src/xmlparser/XMLParser.js + 22 modules
var XMLParser = __webpack_require__(6009);
;// CONCATENATED MODULE: ./node_modules/@azure/core-xml/dist/esm/xml.common.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Default key used to access the XML attributes.
*/
const xml_common_XML_ATTRKEY = "$";
/**
* Default key used to access the XML value content.
*/
const xml_common_XML_CHARKEY = "_";
//# sourceMappingURL=xml.common.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-xml/dist/esm/xml.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function getCommonOptions(options) {
return {
attributesGroupName: xml_common_XML_ATTRKEY,
textNodeName: options.xmlCharKey ?? xml_common_XML_CHARKEY,
ignoreAttributes: false,
suppressBooleanAttributes: false,
};
}
function getSerializerOptions(options = {}) {
return {
...getCommonOptions(options),
attributeNamePrefix: "@_",
format: true,
suppressEmptyNode: true,
indentBy: "",
rootNodeName: options.rootName ?? "root",
cdataPropName: options.cdataPropName ?? "__cdata",
};
}
function getParserOptions(options = {}) {
return {
...getCommonOptions(options),
parseAttributeValue: false,
parseTagValue: false,
attributeNamePrefix: "",
stopNodes: options.stopNodes,
processEntities: true,
trimValues: false,
};
}
/**
* Converts given JSON object to XML string
* @param obj - JSON object to be converted into XML string
* @param opts - Options that govern the XML building of given JSON object
* `rootName` indicates the name of the root element in the resulting XML
*/
function stringifyXML(obj, opts = {}) {
const parserOptions = getSerializerOptions(opts);
const j2x = new json2xml(parserOptions);
const node = { [parserOptions.rootNodeName]: obj };
const xmlData = j2x.build(node);
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>${xmlData}`.replace(/\n/g, "");
}
/**
* Converts given XML string into JSON
* @param str - String containing the XML content to be parsed into JSON
* @param opts - Options that govern the parsing of given xml string
* `includeRoot` indicates whether the root element is to be included or not in the output
*/
async function parseXML(str, opts = {}) {
if (!str) {
throw new Error("Document is empty");
}
const validation = fxp/* XMLValidator */.i.validate(str);
if (validation !== true) {
throw validation;
}
const parser = new XMLParser/* default */.A(getParserOptions(opts));
const parsedXml = parser.parse(str);
// Remove the <?xml version="..." ?> node.
// This is a change in behavior on fxp v4. Issue #424
if (parsedXml["?xml"]) {
delete parsedXml["?xml"];
}
if (!opts.includeRoot) {
const key = Object.keys(parsedXml)[0];
if (key !== undefined) {
const value = parsedXml[key];
return typeof value === "object" ? { ...value } : value;
}
}
return parsedXml;
}
//# sourceMappingURL=xml.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The `@azure/logger` configuration for this package.
*/
const storage_blob_dist_esm_log_logger = esm_createClientLogger("storage-blob");
//# sourceMappingURL=log.js.map
// EXTERNAL MODULE: external "events"
var external_events_ = __webpack_require__(4434);
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/BuffersStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This class generates a readable stream from the data in an array of buffers.
*/
class BuffersStream extends external_node_stream_.Readable {
buffers;
byteLength;
/**
* The offset of data to be read in the current buffer.
*/
byteOffsetInCurrentBuffer;
/**
* The index of buffer to be read in the array of buffers.
*/
bufferIndex;
/**
* The total length of data already read.
*/
pushedBytesLength;
/**
* Creates an instance of BuffersStream that will emit the data
* contained in the array of buffers.
*
* @param buffers - Array of buffers containing the data
* @param byteLength - The total length of data contained in the buffers
*/
constructor(buffers, byteLength, options) {
super(options);
this.buffers = buffers;
this.byteLength = byteLength;
this.byteOffsetInCurrentBuffer = 0;
this.bufferIndex = 0;
this.pushedBytesLength = 0;
// check byteLength is no larger than buffers[] total length
let buffersLength = 0;
for (const buf of this.buffers) {
buffersLength += buf.byteLength;
}
if (buffersLength < this.byteLength) {
throw new Error("Data size shouldn't be larger than the total length of buffers.");
}
}
/**
* Internal _read() that will be called when the stream wants to pull more data in.
*
* @param size - Optional. The size of data to be read
*/
_read(size) {
if (this.pushedBytesLength >= this.byteLength) {
this.push(null);
}
if (!size) {
size = this.readableHighWaterMark;
}
const outBuffers = [];
let i = 0;
while (i < size && this.pushedBytesLength < this.byteLength) {
// The last buffer may be longer than the data it contains.
const remainingDataInAllBuffers = this.byteLength - this.pushedBytesLength;
const remainingCapacityInThisBuffer = this.buffers[this.bufferIndex].byteLength - this.byteOffsetInCurrentBuffer;
const remaining = Math.min(remainingCapacityInThisBuffer, remainingDataInAllBuffers);
if (remaining > size - i) {
// chunkSize = size - i
const end = this.byteOffsetInCurrentBuffer + size - i;
outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end));
this.pushedBytesLength += size - i;
this.byteOffsetInCurrentBuffer = end;
i = size;
break;
}
else {
// chunkSize = remaining
const end = this.byteOffsetInCurrentBuffer + remaining;
outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end));
if (remaining === remainingCapacityInThisBuffer) {
// this.buffers[this.bufferIndex] used up, shift to next one
this.byteOffsetInCurrentBuffer = 0;
this.bufferIndex++;
}
else {
this.byteOffsetInCurrentBuffer = end;
}
this.pushedBytesLength += remaining;
i += remaining;
}
}
if (outBuffers.length > 1) {
this.push(Buffer.concat(outBuffers));
}
else if (outBuffers.length === 1) {
this.push(outBuffers[0]);
}
}
}
//# sourceMappingURL=BuffersStream.js.map
// EXTERNAL MODULE: external "node:buffer"
var external_node_buffer_ = __webpack_require__(4573);
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/PooledBuffer.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* maxBufferLength is max size of each buffer in the pooled buffers.
*/
const maxBufferLength = external_node_buffer_.constants.MAX_LENGTH;
/**
* This class provides a buffer container which conceptually has no hard size limit.
* It accepts a capacity, an array of input buffers and the total length of input data.
* It will allocate an internal "buffer" of the capacity and fill the data in the input buffers
* into the internal "buffer" serially with respect to the total length.
* Then by calling PooledBuffer.getReadableStream(), you can get a readable stream
* assembled from all the data in the internal "buffer".
*/
class PooledBuffer {
/**
* Internal buffers used to keep the data.
* Each buffer has a length of the maxBufferLength except last one.
*/
buffers = [];
/**
* The total size of internal buffers.
*/
capacity;
/**
* The total size of data contained in internal buffers.
*/
_size;
/**
* The size of the data contained in the pooled buffers.
*/
get size() {
return this._size;
}
constructor(capacity, buffers, totalLength) {
this.capacity = capacity;
this._size = 0;
// allocate
const bufferNum = Math.ceil(capacity / maxBufferLength);
for (let i = 0; i < bufferNum; i++) {
let len = i === bufferNum - 1 ? capacity % maxBufferLength : maxBufferLength;
if (len === 0) {
len = maxBufferLength;
}
this.buffers.push(Buffer.allocUnsafe(len));
}
if (buffers) {
this.fill(buffers, totalLength);
}
}
/**
* Fill the internal buffers with data in the input buffers serially
* with respect to the total length and the total capacity of the internal buffers.
* Data copied will be shift out of the input buffers.
*
* @param buffers - Input buffers containing the data to be filled in the pooled buffer
* @param totalLength - Total length of the data to be filled in.
*
*/
fill(buffers, totalLength) {
this._size = Math.min(this.capacity, totalLength);
let i = 0, j = 0, targetOffset = 0, sourceOffset = 0, totalCopiedNum = 0;
while (totalCopiedNum < this._size) {
const source = buffers[i];
const target = this.buffers[j];
const copiedNum = source.copy(target, targetOffset, sourceOffset);
totalCopiedNum += copiedNum;
sourceOffset += copiedNum;
targetOffset += copiedNum;
if (sourceOffset === source.length) {
i++;
sourceOffset = 0;
}
if (targetOffset === target.length) {
j++;
targetOffset = 0;
}
}
// clear copied from source buffers
buffers.splice(0, i);
if (buffers.length > 0) {
buffers[0] = buffers[0].slice(sourceOffset);
}
}
/**
* Get the readable stream assembled from all the data in the internal buffers.
*
*/
getReadableStream() {
return new BuffersStream(this.buffers, this.size);
}
}
//# sourceMappingURL=PooledBuffer.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/BufferScheduler.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This class accepts a Node.js Readable stream as input, and keeps reading data
* from the stream into the internal buffer structure, until it reaches maxBuffers.
* Every available buffer will try to trigger outgoingHandler.
*
* The internal buffer structure includes an incoming buffer array, and a outgoing
* buffer array. The incoming buffer array includes the "empty" buffers can be filled
* with new incoming data. The outgoing array includes the filled buffers to be
* handled by outgoingHandler. Every above buffer size is defined by parameter bufferSize.
*
* NUM_OF_ALL_BUFFERS = BUFFERS_IN_INCOMING + BUFFERS_IN_OUTGOING + BUFFERS_UNDER_HANDLING
*
* NUM_OF_ALL_BUFFERS lesser than or equal to maxBuffers
*
* PERFORMANCE IMPROVEMENT TIPS:
* 1. Input stream highWaterMark is better to set a same value with bufferSize
* parameter, which will avoid Buffer.concat() operations.
* 2. concurrency should set a smaller value than maxBuffers, which is helpful to
* reduce the possibility when a outgoing handler waits for the stream data.
* in this situation, outgoing handlers are blocked.
* Outgoing queue shouldn't be empty.
*/
class BufferScheduler {
/**
* Size of buffers in incoming and outgoing queues. This class will try to align
* data read from Readable stream into buffer chunks with bufferSize defined.
*/
bufferSize;
/**
* How many buffers can be created or maintained.
*/
maxBuffers;
/**
* A Node.js Readable stream.
*/
readable;
/**
* OutgoingHandler is an async function triggered by BufferScheduler when there
* are available buffers in outgoing array.
*/
outgoingHandler;
/**
* An internal event emitter.
*/
emitter = new external_events_.EventEmitter();
/**
* Concurrency of executing outgoingHandlers. (0 lesser than concurrency lesser than or equal to maxBuffers)
*/
concurrency;
/**
* An internal offset marker to track data offset in bytes of next outgoingHandler.
*/
offset = 0;
/**
* An internal marker to track whether stream is end.
*/
isStreamEnd = false;
/**
* An internal marker to track whether stream or outgoingHandler returns error.
*/
isError = false;
/**
* How many handlers are executing.
*/
executingOutgoingHandlers = 0;
/**
* Encoding of the input Readable stream which has string data type instead of Buffer.
*/
encoding;
/**
* How many buffers have been allocated.
*/
numBuffers = 0;
/**
* Because this class doesn't know how much data every time stream pops, which
* is defined by highWaterMarker of the stream. So BufferScheduler will cache
* data received from the stream, when data in unresolvedDataArray exceeds the
* blockSize defined, it will try to concat a blockSize of buffer, fill into available
* buffers from incoming and push to outgoing array.
*/
unresolvedDataArray = [];
/**
* How much data consisted in unresolvedDataArray.
*/
unresolvedLength = 0;
/**
* The array includes all the available buffers can be used to fill data from stream.
*/
incoming = [];
/**
* The array (queue) includes all the buffers filled from stream data.
*/
outgoing = [];
/**
* Creates an instance of BufferScheduler.
*
* @param readable - A Node.js Readable stream
* @param bufferSize - Buffer size of every maintained buffer
* @param maxBuffers - How many buffers can be allocated
* @param outgoingHandler - An async function scheduled to be
* triggered when a buffer fully filled
* with stream data
* @param concurrency - Concurrency of executing outgoingHandlers (&gt;0)
* @param encoding - [Optional] Encoding of Readable stream when it's a string stream
*/
constructor(readable, bufferSize, maxBuffers, outgoingHandler, concurrency, encoding) {
if (bufferSize <= 0) {
throw new RangeError(`bufferSize must be larger than 0, current is ${bufferSize}`);
}
if (maxBuffers <= 0) {
throw new RangeError(`maxBuffers must be larger than 0, current is ${maxBuffers}`);
}
if (concurrency <= 0) {
throw new RangeError(`concurrency must be larger than 0, current is ${concurrency}`);
}
this.bufferSize = bufferSize;
this.maxBuffers = maxBuffers;
this.readable = readable;
this.outgoingHandler = outgoingHandler;
this.concurrency = concurrency;
this.encoding = encoding;
}
/**
* Start the scheduler, will return error when stream of any of the outgoingHandlers
* returns error.
*
*/
async do() {
return new Promise((resolve, reject) => {
this.readable.on("data", (data) => {
data = typeof data === "string" ? Buffer.from(data, this.encoding) : data;
this.appendUnresolvedData(data);
if (!this.resolveData()) {
this.readable.pause();
}
});
this.readable.on("error", (err) => {
this.emitter.emit("error", err);
});
this.readable.on("end", () => {
this.isStreamEnd = true;
this.emitter.emit("checkEnd");
});
this.emitter.on("error", (err) => {
this.isError = true;
this.readable.pause();
reject(err);
});
this.emitter.on("checkEnd", () => {
if (this.outgoing.length > 0) {
this.triggerOutgoingHandlers();
return;
}
if (this.isStreamEnd && this.executingOutgoingHandlers === 0) {
if (this.unresolvedLength > 0 && this.unresolvedLength < this.bufferSize) {
const buffer = this.shiftBufferFromUnresolvedDataArray();
this.outgoingHandler(() => buffer.getReadableStream(), buffer.size, this.offset)
.then(resolve)
.catch(reject);
}
else if (this.unresolvedLength >= this.bufferSize) {
return;
}
else {
resolve();
}
}
});
});
}
/**
* Insert a new data into unresolved array.
*
* @param data -
*/
appendUnresolvedData(data) {
this.unresolvedDataArray.push(data);
this.unresolvedLength += data.length;
}
/**
* Try to shift a buffer with size in blockSize. The buffer returned may be less
* than blockSize when data in unresolvedDataArray is less than bufferSize.
*
*/
shiftBufferFromUnresolvedDataArray(buffer) {
if (!buffer) {
buffer = new PooledBuffer(this.bufferSize, this.unresolvedDataArray, this.unresolvedLength);
}
else {
buffer.fill(this.unresolvedDataArray, this.unresolvedLength);
}
this.unresolvedLength -= buffer.size;
return buffer;
}
/**
* Resolve data in unresolvedDataArray. For every buffer with size in blockSize
* shifted, it will try to get (or allocate a buffer) from incoming, and fill it,
* then push it into outgoing to be handled by outgoing handler.
*
* Return false when available buffers in incoming are not enough, else true.
*
* @returns Return false when buffers in incoming are not enough, else true.
*/
resolveData() {
while (this.unresolvedLength >= this.bufferSize) {
let buffer;
if (this.incoming.length > 0) {
buffer = this.incoming.shift();
this.shiftBufferFromUnresolvedDataArray(buffer);
}
else {
if (this.numBuffers < this.maxBuffers) {
buffer = this.shiftBufferFromUnresolvedDataArray();
this.numBuffers++;
}
else {
// No available buffer, wait for buffer returned
return false;
}
}
this.outgoing.push(buffer);
this.triggerOutgoingHandlers();
}
return true;
}
/**
* Try to trigger a outgoing handler for every buffer in outgoing. Stop when
* concurrency reaches.
*/
async triggerOutgoingHandlers() {
let buffer;
do {
if (this.executingOutgoingHandlers >= this.concurrency) {
return;
}
buffer = this.outgoing.shift();
if (buffer) {
this.triggerOutgoingHandler(buffer);
}
} while (buffer);
}
/**
* Trigger a outgoing handler for a buffer shifted from outgoing.
*
* @param buffer -
*/
async triggerOutgoingHandler(buffer) {
const bufferLength = buffer.size;
this.executingOutgoingHandlers++;
this.offset += bufferLength;
try {
await this.outgoingHandler(() => buffer.getReadableStream(), bufferLength, this.offset - bufferLength);
}
catch (err) {
this.emitter.emit("error", err);
return;
}
this.executingOutgoingHandlers--;
this.reuseBuffer(buffer);
this.emitter.emit("checkEnd");
}
/**
* Return buffer used by outgoing handler into incoming.
*
* @param buffer -
*/
reuseBuffer(buffer) {
this.incoming.push(buffer);
if (!this.isError && this.resolveData() && !this.isStreamEnd) {
this.readable.resume();
}
}
}
//# sourceMappingURL=BufferScheduler.js.map
// EXTERNAL MODULE: external "node:module"
var external_node_module_ = __webpack_require__(8995);
// EXTERNAL MODULE: external "node:path"
var external_node_path_ = __webpack_require__(6760);
// EXTERNAL MODULE: external "node:url"
var external_node_url_ = __webpack_require__(3136);
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/crc64.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// ESM-COMPAT-START (this block is stripped from dist/commonjs by copyJSFiles.cjs)
// In ESM under Node, `require`, `__filename`, and `__dirname` are not defined.
// Synthesize them from `import.meta.url` so the Emscripten Node branch below works as-is.
// Specifiers are held in variables to prevent web bundlers from statically resolving `node:*`.
// The detection check below MUST stay byte-for-byte identical to the Emscripten-generated
// `ENVIRONMENT_IS_NODE` check later in this file; otherwise the polyfill and the Node branch
// can disagree and the ESM `ReferenceError: require is not defined` bug returns.
const __isNode__ =
typeof process === "object" &&
typeof process.versions === "object" &&
typeof process.versions.node === "string";
let crc64_require;
let crc64_filename;
let crc64_dirname;
if (__isNode__) {
crc64_require = (0,external_node_module_.createRequire)(import.meta.url);
crc64_filename = (0,external_node_url_.fileURLToPath)(import.meta.url);
crc64_dirname = (0,external_node_path_.dirname)(crc64_filename);
}
// ESM-COMPAT-END
var NativeCRC64 = (() => {
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
if (typeof crc64_filename !== 'undefined') _scriptDir = _scriptDir || crc64_filename;
return (
function(NativeCRC64) {
NativeCRC64 = NativeCRC64 || {};
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module = typeof NativeCRC64 != 'undefined' ? NativeCRC64 : {};
// See https://caniuse.com/mdn-javascript_builtins_object_assign
// See https://caniuse.com/mdn-javascript_builtins_bigint64array
// Set up the promise that indicates the Module is initialized
var readyPromiseResolve, readyPromiseReject;
Module['ready'] = new Promise(function(resolve, reject) {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
["_malloc","_free","_emscripten_bind_VoidPtr___destroy___0","_emscripten_bind_Crc64Hash_Crc64Hash_0","_emscripten_bind_Crc64Hash_OnAppend_2","_emscripten_bind_Crc64Hash_OnFinal_3","_emscripten_bind_Crc64Hash___destroy___0","_fflush","onRuntimeInitialized"].forEach((prop) => {
if (!Object.getOwnPropertyDescriptor(Module['ready'], prop)) {
Object.defineProperty(Module['ready'], prop, {
get: () => abort('You are getting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
set: () => abort('You are setting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
});
}
});
// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = Object.assign({}, Module);
var arguments_ = [];
var thisProgram = './this.program';
var quit_ = (status, toThrow) => {
throw toThrow;
};
// Determine the runtime environment we are in. You can customize this by
// setting the ENVIRONMENT setting at compile time (see settings.js).
// Attempt to auto-detect the environment
var ENVIRONMENT_IS_WEB = typeof window == 'object';
var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';
// N.b. Electron.js environment is simultaneously a NODE-environment, but
// also a web environment.
var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string';
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
if (Module['ENVIRONMENT']) {
throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)');
}
// `/` should be present at the end if `scriptDirectory` is not empty
var scriptDirectory = '';
function locateFile(path) {
if (Module['locateFile']) {
return Module['locateFile'](path, scriptDirectory);
}
return scriptDirectory + path;
}
// Hooks that are implemented differently in different runtime environments.
var read_,
readAsync,
readBinary,
setWindowTitle;
// Normally we don't log exceptions but instead let them bubble out the top
// level where the embedding environment (e.g. the browser) can handle
// them.
// However under v8 and node we sometimes exit the process direcly in which case
// its up to use us to log the exception before exiting.
// If we fix https://github.com/emscripten-core/emscripten/issues/15080
// this may no longer be needed under node.
function logExceptionOnExit(e) {
if (e instanceof ExitStatus) return;
let toLog = e;
if (e && typeof e == 'object' && e.stack) {
toLog = [e, e.stack];
}
err('exiting due to exception: ' + toLog);
}
if (ENVIRONMENT_IS_NODE) {
if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
// NODE-READ-START (this block is replaced with a no-op in dist/browser and dist/react-native by copyJSFiles.cjs)
// `require()` is no-op in an ESM module, use `createRequire()` to construct
// the require()` function. This is only necessary for multi-environment
// builds, `-sENVIRONMENT=node` emits a static import declaration instead.
// TODO: Swap all `require()`'s with `import()`'s?
// These modules will usually be used on Node.js. Load them eagerly to avoid
// the complexity of lazy-loading.
var fs = crc64_require('fs');
var nodePath = crc64_require('path');
if (ENVIRONMENT_IS_WORKER) {
scriptDirectory = nodePath.dirname(scriptDirectory) + '/';
} else {
scriptDirectory = crc64_dirname + '/';
}
// include: node_shell_read.js
read_ = (filename, binary) => {
// We need to re-wrap `file://` strings to URLs. Normalizing isn't
// necessary in that case, the path should already be absolute.
filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
return fs.readFileSync(filename, binary ? undefined : 'utf8');
};
readBinary = (filename) => {
var ret = read_(filename, true);
if (!ret.buffer) {
ret = new Uint8Array(ret);
}
assert(ret.buffer);
return ret;
};
readAsync = (filename, onload, onerror) => {
// See the comment in the `read_` function.
filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
fs.readFile(filename, function(err, data) {
if (err) onerror(err);
else onload(data.buffer);
});
};
// end include: node_shell_read.js
// NODE-READ-END
if (process['argv'].length > 1) {
thisProgram = process['argv'][1].replace(/\\/g, '/');
}
arguments_ = process['argv'].slice(2);
// MODULARIZE will export the module in the proper place outside, we don't need to export here
process['on']('uncaughtException', function(ex) {
// suppress ExitStatus exceptions from showing an error
if (!(ex instanceof ExitStatus)) {
throw ex;
}
});
// Without this older versions of node (< v15) will log unhandled rejections
// but return 0, which is not normally the desired behaviour. This is
// not be needed with node v15 and about because it is now the default
// behaviour:
// See https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode
process['on']('unhandledRejection', function(reason) { throw reason; });
quit_ = (status, toThrow) => {
if (keepRuntimeAlive()) {
process['exitCode'] = status;
throw toThrow;
}
logExceptionOnExit(toThrow);
process['exit'](status);
};
Module['inspect'] = function () { return '[Emscripten Module object]'; };
} else
if (ENVIRONMENT_IS_SHELL) {
if ((typeof process == 'object' && typeof crc64_require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
if (typeof read != 'undefined') {
read_ = function shell_read(f) {
return read(f);
};
}
readBinary = function readBinary(f) {
let data;
if (typeof readbuffer == 'function') {
return new Uint8Array(readbuffer(f));
}
data = read(f, 'binary');
assert(typeof data == 'object');
return data;
};
readAsync = function readAsync(f, onload, onerror) {
setTimeout(() => onload(readBinary(f)), 0);
};
if (typeof scriptArgs != 'undefined') {
arguments_ = scriptArgs;
} else if (typeof arguments != 'undefined') {
arguments_ = arguments;
}
if (typeof quit == 'function') {
quit_ = (status, toThrow) => {
logExceptionOnExit(toThrow);
quit(status);
};
}
if (typeof print != 'undefined') {
// Prefer to use print/printErr where they exist, as they usually work better.
if (typeof console == 'undefined') console = /** @type{!Console} */({});
console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);
console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr != 'undefined' ? printErr : print);
}
} else
// Note that this includes Node.js workers when relevant (pthreads is enabled).
// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
// ENVIRONMENT_IS_NODE.
if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled
scriptDirectory = self.location.href;
} else if (typeof document != 'undefined' && document.currentScript) { // web
scriptDirectory = document.currentScript.src;
}
// When MODULARIZE, this JS may be executed later, after document.currentScript
// is gone, so we saved it, and we use it here instead of any other info.
if (_scriptDir) {
scriptDirectory = _scriptDir;
}
// blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
// otherwise, slice off the final part of the url to find the script directory.
// if scriptDirectory does not contain a slash, lastIndexOf will return -1,
// and scriptDirectory will correctly be replaced with an empty string.
// If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),
// they are removed because they could contain a slash.
if (scriptDirectory.indexOf('blob:') !== 0) {
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1);
} else {
scriptDirectory = '';
}
if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
// Differentiate the Web Worker from the Node Worker case, as reading must
// be done differently.
{
// include: web_or_worker_shell_read.js
read_ = (url) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
return xhr.responseText;
}
if (ENVIRONMENT_IS_WORKER) {
readBinary = (url) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.responseType = 'arraybuffer';
xhr.send(null);
return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));
};
}
readAsync = (url, onload, onerror) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
onload(xhr.response);
return;
}
onerror();
};
xhr.onerror = onerror;
xhr.send(null);
}
// end include: web_or_worker_shell_read.js
}
setWindowTitle = (title) => document.title = title;
} else
{
throw new Error('environment detection error');
}
var out = Module['print'] || console.log.bind(console);
var err = Module['printErr'] || console.warn.bind(console);
// Merge back in the overrides
Object.assign(Module, moduleOverrides);
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
moduleOverrides = null;
checkIncomingModuleAPI();
// Emit code to handle expected values on the Module object. This applies Module.x
// to the proper local x. This has two benefits: first, we only emit it if it is
// expected to arrive, and second, by using a local everywhere else that can be
// minified.
if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_');
if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram');
if (Module['quit']) quit_ = Module['quit'];legacyModuleProp('quit', 'quit_');
// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
// Assertions on removed incoming Module JS APIs.
assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['read'] == 'undefined', 'Module.read option was removed (modify read_ in JS)');
assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');
assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');
assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
legacyModuleProp('read', 'read_');
legacyModuleProp('readAsync', 'readAsync');
legacyModuleProp('readBinary', 'readBinary');
legacyModuleProp('setWindowTitle', 'setWindowTitle');
var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js';
var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';
var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';
var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';
assert(!ENVIRONMENT_IS_SHELL, "shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.");
var STACK_ALIGN = 16;
var POINTER_SIZE = 4;
function getNativeTypeSize(type) {
switch (type) {
case 'i1': case 'i8': case 'u8': return 1;
case 'i16': case 'u16': return 2;
case 'i32': case 'u32': return 4;
case 'i64': case 'u64': return 8;
case 'float': return 4;
case 'double': return 8;
default: {
if (type[type.length - 1] === '*') {
return POINTER_SIZE;
}
if (type[0] === 'i') {
const bits = Number(type.substr(1));
assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);
return bits / 8;
}
return 0;
}
}
}
// include: runtime_debug.js
function legacyModuleProp(prop, newName) {
if (!Object.getOwnPropertyDescriptor(Module, prop)) {
Object.defineProperty(Module, prop, {
configurable: true,
get: function() {
abort('Module.' + prop + ' has been replaced with plain ' + newName + ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)');
}
});
}
}
function ignoredModuleProp(prop) {
if (Object.getOwnPropertyDescriptor(Module, prop)) {
abort('`Module.' + prop + '` was supplied but `' + prop + '` not included in INCOMING_MODULE_JS_API');
}
}
// forcing the filesystem exports a few things by default
function isExportedByForceFilesystem(name) {
return name === 'FS_createPath' ||
name === 'FS_createDataFile' ||
name === 'FS_createPreloadedFile' ||
name === 'FS_unlink' ||
name === 'addRunDependency' ||
// The old FS has some functionality that WasmFS lacks.
name === 'FS_createLazyFile' ||
name === 'FS_createDevice' ||
name === 'removeRunDependency';
}
function missingLibrarySymbol(sym) {
if (typeof globalThis !== 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {
Object.defineProperty(globalThis, sym, {
configurable: true,
get: function() {
// Can't `abort()` here because it would break code that does runtime
// checks. e.g. `if (typeof SDL === 'undefined')`.
var msg = '`' + sym + '` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line';
// DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in
// library.js, which means $name for a JS name with no prefix, or name
// for a JS name like _name.
var librarySymbol = sym;
if (!librarySymbol.startsWith('_')) {
librarySymbol = '$' + sym;
}
msg += " (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE=" + librarySymbol + ")";
if (isExportedByForceFilesystem(sym)) {
msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
}
warnOnce(msg);
return undefined;
}
});
}
}
function unexportedRuntimeSymbol(sym) {
if (!Object.getOwnPropertyDescriptor(Module, sym)) {
Object.defineProperty(Module, sym, {
configurable: true,
get: function() {
var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";
if (isExportedByForceFilesystem(sym)) {
msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
}
abort(msg);
}
});
}
}
// end include: runtime_debug.js
// === Preamble library stuff ===
// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
var wasmBinary;
if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary');
var noExitRuntime = Module['noExitRuntime'] || true;legacyModuleProp('noExitRuntime', 'noExitRuntime');
if (typeof WebAssembly != 'object') {
abort('no native wasm support detected');
}
// Wasm globals
var wasmMemory;
//========================================
// Runtime essentials
//========================================
// whether we are quitting the application. no code should run after this.
// set in exit() and abort()
var ABORT = false;
// set by exit() and abort(). Passed to 'onExit' handler.
// NOTE: This is also used as the process return code code in shell environments
// but only when noExitRuntime is false.
var EXITSTATUS;
/** @type {function(*, string=)} */
function assert(condition, text) {
if (!condition) {
abort('Assertion failed' + (text ? ': ' + text : ''));
}
}
// We used to include malloc/free by default in the past. Show a helpful error in
// builds with assertions.
// include: runtime_strings.js
// runtime_strings.js: String related runtime functions that are part of both
// MINIMAL_RUNTIME and regular runtime.
var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined;
/**
* Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given
* array that contains uint8 values, returns a copy of that string as a
* Javascript String object.
* heapOrArray is either a regular array, or a JavaScript typed array view.
* @param {number} idx
* @param {number=} maxBytesToRead
* @return {string}
*/
function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
var endIdx = idx + maxBytesToRead;
var endPtr = idx;
// TextDecoder needs to know the byte length in advance, it doesn't stop on
// null terminator by itself. Also, use the length info to avoid running tiny
// strings through TextDecoder, since .subarray() allocates garbage.
// (As a tiny code save trick, compare endPtr against endIdx using a negation,
// so that undefined means Infinity)
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
}
var str = '';
// If building with TextDecoder, we have already computed the string length
// above, so test loop end condition against that
while (idx < endPtr) {
// For UTF8 byte structure, see:
// http://en.wikipedia.org/wiki/UTF-8#Description
// https://www.ietf.org/rfc/rfc2279.txt
// https://tools.ietf.org/html/rfc3629
var u0 = heapOrArray[idx++];
if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
var u1 = heapOrArray[idx++] & 63;
if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
var u2 = heapOrArray[idx++] & 63;
if ((u0 & 0xF0) == 0xE0) {
u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
} else {
if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!');
u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);
}
if (u0 < 0x10000) {
str += String.fromCharCode(u0);
} else {
var ch = u0 - 0x10000;
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
}
}
return str;
}
/**
* Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the
* emscripten HEAP, returns a copy of that string as a Javascript String object.
*
* @param {number} ptr
* @param {number=} maxBytesToRead - An optional length that specifies the
* maximum number of bytes to read. You can omit this parameter to scan the
* string until the first \0 byte. If maxBytesToRead is passed, and the string
* at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the
* string will cut short at that byte index (i.e. maxBytesToRead will not
* produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing
* frequent uses of UTF8ToString() with and without maxBytesToRead may throw
* JS JIT optimizations off, so it is worth to consider consistently using one
* @return {string}
*/
function UTF8ToString(ptr, maxBytesToRead) {
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
}
/**
* Copies the given Javascript String object 'str' to the given byte array at
* address 'outIdx', encoded in UTF8 form and null-terminated. The copy will
* require at most str.length*4+1 bytes of space in the HEAP. Use the function
* lengthBytesUTF8 to compute the exact number of bytes (excluding null
* terminator) that this function will write.
*
* @param {string} str - The Javascript string to copy.
* @param {ArrayBufferView|Array<number>} heap - The array to copy to. Each
* index in this array is assumed
* to be one 8-byte element.
* @param {number} outIdx - The starting offset in the array to begin the copying.
* @param {number} maxBytesToWrite - The maximum number of bytes this function
* can write to the array. This count should
* include the null terminator, i.e. if
* maxBytesToWrite=1, only the null terminator
* will be written and nothing else.
* maxBytesToWrite=0 does not write any bytes
* to the output, not even the null
* terminator.
* @return {number} The number of bytes written, EXCLUDING the null terminator.
*/
function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
// Parameter maxBytesToWrite is not optional. Negative values, 0, null,
// undefined and false each don't write out any bytes.
if (!(maxBytesToWrite > 0))
return 0;
var startIdx = outIdx;
var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
// unit, not a Unicode code point of the character! So decode
// UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
// For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description
// and https://www.ietf.org/rfc/rfc2279.txt
// and https://tools.ietf.org/html/rfc3629
var u = str.charCodeAt(i); // possibly a lead surrogate
if (u >= 0xD800 && u <= 0xDFFF) {
var u1 = str.charCodeAt(++i);
u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);
}
if (u <= 0x7F) {
if (outIdx >= endIdx) break;
heap[outIdx++] = u;
} else if (u <= 0x7FF) {
if (outIdx + 1 >= endIdx) break;
heap[outIdx++] = 0xC0 | (u >> 6);
heap[outIdx++] = 0x80 | (u & 63);
} else if (u <= 0xFFFF) {
if (outIdx + 2 >= endIdx) break;
heap[outIdx++] = 0xE0 | (u >> 12);
heap[outIdx++] = 0x80 | ((u >> 6) & 63);
heap[outIdx++] = 0x80 | (u & 63);
} else {
if (outIdx + 3 >= endIdx) break;
if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).');
heap[outIdx++] = 0xF0 | (u >> 18);
heap[outIdx++] = 0x80 | ((u >> 12) & 63);
heap[outIdx++] = 0x80 | ((u >> 6) & 63);
heap[outIdx++] = 0x80 | (u & 63);
}
}
// Null-terminate the pointer to the buffer.
heap[outIdx] = 0;
return outIdx - startIdx;
}
/**
* Copies the given Javascript String object 'str' to the emscripten HEAP at
* address 'outPtr', null-terminated and encoded in UTF8 form. The copy will
* require at most str.length*4+1 bytes of space in the HEAP.
* Use the function lengthBytesUTF8 to compute the exact number of bytes
* (excluding null terminator) that this function will write.
*
* @return {number} The number of bytes written, EXCLUDING the null terminator.
*/
function stringToUTF8(str, outPtr, maxBytesToWrite) {
assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
}
/**
* Returns the number of bytes the given Javascript string takes if encoded as a
* UTF8 byte array, EXCLUDING the null terminator byte.
*
* @param {string} str - JavaScript string to operator on
* @return {number} Length, in bytes, of the UTF8 encoded string.
*/
function lengthBytesUTF8(str) {
var len = 0;
for (var i = 0; i < str.length; ++i) {
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
// unit, not a Unicode code point of the character! So decode
// UTF16->UTF32->UTF8.
// See http://unicode.org/faq/utf_bom.html#utf16-3
var c = str.charCodeAt(i); // possibly a lead surrogate
if (c <= 0x7F) {
len++;
} else if (c <= 0x7FF) {
len += 2;
} else if (c >= 0xD800 && c <= 0xDFFF) {
len += 4; ++i;
} else {
len += 3;
}
}
return len;
}
// end include: runtime_strings.js
// Memory management
var HEAP,
/** @type {!ArrayBuffer} */
buffer,
/** @type {!Int8Array} */
HEAP8,
/** @type {!Uint8Array} */
HEAPU8,
/** @type {!Int16Array} */
HEAP16,
/** @type {!Uint16Array} */
HEAPU16,
/** @type {!Int32Array} */
HEAP32,
/** @type {!Uint32Array} */
HEAPU32,
/** @type {!Float32Array} */
HEAPF32,
/** @type {!Float64Array} */
HEAPF64;
function updateGlobalBufferAndViews(buf) {
buffer = buf;
Module['HEAP8'] = HEAP8 = new Int8Array(buf);
Module['HEAP16'] = HEAP16 = new Int16Array(buf);
Module['HEAP32'] = HEAP32 = new Int32Array(buf);
Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);
Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);
Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);
Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);
Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);
}
var STACK_SIZE = 5242880;
if (Module['STACK_SIZE']) assert(STACK_SIZE === Module['STACK_SIZE'], 'the stack size can no longer be determined at runtime')
var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;legacyModuleProp('INITIAL_MEMORY', 'INITIAL_MEMORY');
assert(INITIAL_MEMORY >= STACK_SIZE, 'INITIAL_MEMORY should be larger than STACK_SIZE, was ' + INITIAL_MEMORY + '! (STACK_SIZE=' + STACK_SIZE + ')');
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined,
'JS engine does not provide full typed array support');
// If memory is defined in wasm, the user can't provide it.
assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally');
assert(INITIAL_MEMORY == 16777216, 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically');
// include: runtime_init_table.js
// In regular non-RELOCATABLE mode the table is exported
// from the wasm module and this will be assigned once
// the exports are available.
var wasmTable;
// end include: runtime_init_table.js
// include: runtime_stack_check.js
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
function writeStackCookie() {
var max = _emscripten_stack_get_end();
assert((max & 3) == 0);
// If the stack ends at address zero we write our cookies 4 bytes into the
// stack. This prevents interference with the (separate) address-zero check
// below.
if (max == 0) {
max += 4;
}
// The stack grow downwards towards _emscripten_stack_get_end.
// We write cookies to the final two words in the stack and detect if they are
// ever overwritten.
HEAPU32[((max)>>2)] = 0x2135467;
HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE;
// Also test the global address 0 for integrity.
HEAPU32[0] = 0x63736d65; /* 'emsc' */
}
function checkStackCookie() {
if (ABORT) return;
var max = _emscripten_stack_get_end();
// See writeStackCookie().
if (max == 0) {
max += 4;
}
var cookie1 = HEAPU32[((max)>>2)];
var cookie2 = HEAPU32[(((max)+(4))>>2)];
if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) {
abort('Stack overflow! Stack cookie has been overwritten at ' + ptrToString(max) + ', expected hex dwords 0x89BACDFE and 0x2135467, but received ' + ptrToString(cookie2) + ' ' + ptrToString(cookie1));
}
// Also test the global address 0 for integrity.
if (HEAPU32[0] !== 0x63736d65 /* 'emsc' */) {
abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
}
}
// end include: runtime_stack_check.js
// include: runtime_assertions.js
// Endianness check
(function() {
var h16 = new Int16Array(1);
var h8 = new Int8Array(h16.buffer);
h16[0] = 0x6373;
if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';
})();
// end include: runtime_assertions.js
var __ATPRERUN__ = []; // functions called before the runtime is initialized
var __ATINIT__ = []; // functions called during startup
var __ATEXIT__ = []; // functions called during shutdown
var __ATPOSTRUN__ = []; // functions called after the main() is called
var runtimeInitialized = false;
function keepRuntimeAlive() {
return noExitRuntime;
}
function preRun() {
if (Module['preRun']) {
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
callRuntimeCallbacks(__ATPRERUN__);
}
function initRuntime() {
assert(!runtimeInitialized);
runtimeInitialized = true;
checkStackCookie();
callRuntimeCallbacks(__ATINIT__);
}
function postRun() {
checkStackCookie();
if (Module['postRun']) {
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
function addOnExit(cb) {
}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
// include: runtime_math.js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
// end include: runtime_math.js
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// Module.preRun (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
var runDependencyTracking = {};
function getUniqueRunDependency(id) {
var orig = id;
while (1) {
if (!runDependencyTracking[id]) return id;
id = orig + Math.random();
}
}
function addRunDependency(id) {
runDependencies++;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(!runDependencyTracking[id]);
runDependencyTracking[id] = 1;
if (runDependencyWatcher === null && typeof setInterval != 'undefined') {
// Check for missing dependencies every few seconds
runDependencyWatcher = setInterval(function() {
if (ABORT) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
return;
}
var shown = false;
for (var dep in runDependencyTracking) {
if (!shown) {
shown = true;
err('still waiting on run dependencies:');
}
err('dependency: ' + dep);
}
if (shown) {
err('(end of list)');
}
}, 10000);
}
} else {
err('warning: run dependency added without ID');
}
}
function removeRunDependency(id) {
runDependencies--;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(runDependencyTracking[id]);
delete runDependencyTracking[id];
} else {
err('warning: run dependency removed without ID');
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback(); // can add another dependenciesFulfilled
}
}
}
/** @param {string|number=} what */
function abort(what) {
if (Module['onAbort']) {
Module['onAbort'](what);
}
what = 'Aborted(' + what + ')';
// TODO(sbc): Should we remove printing and leave it up to whoever
// catches the exception?
err(what);
ABORT = true;
EXITSTATUS = 1;
// Use a wasm runtime error, because a JS error might be seen as a foreign
// exception, which means we'd run destructors on it. We need the error to
// simply make the program stop.
// FIXME This approach does not work in Wasm EH because it currently does not assume
// all RuntimeErrors are from traps; it decides whether a RuntimeError is from
// a trap or not based on a hidden field within the object. So at the moment
// we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
// allows this in the wasm spec.
// Suppress closure compiler warning here. Closure compiler's builtin extern
// defintion for WebAssembly.RuntimeError claims it takes no arguments even
// though it can.
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
/** @suppress {checkTypes} */
var e = new WebAssembly.RuntimeError(what);
readyPromiseReject(e);
// Throw the error whether or not MODULARIZE is set because abort is used
// in code paths apart from instantiation where an exception is expected
// to be thrown when abort is called.
throw e;
}
// {{MEM_INITIALIZER}}
// include: memoryprofiler.js
// end include: memoryprofiler.js
// show errors on likely calls to FS when it was not included
var FS = {
error: function() {
abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM');
},
init: function() { FS.error() },
createDataFile: function() { FS.error() },
createPreloadedFile: function() { FS.error() },
createLazyFile: function() { FS.error() },
open: function() { FS.error() },
mkdev: function() { FS.error() },
registerDevice: function() { FS.error() },
analyzePath: function() { FS.error() },
loadFilesFromDB: function() { FS.error() },
ErrnoError: function ErrnoError() { FS.error() },
};
Module['FS_createDataFile'] = FS.createDataFile;
Module['FS_createPreloadedFile'] = FS.createPreloadedFile;
// include: URIUtils.js
// Prefix of data URIs emitted by SINGLE_FILE and related options.
var dataURIPrefix = 'data:application/octet-stream;base64,';
// Indicates whether filename is a base64 data URI.
function isDataURI(filename) {
// Prefix of data URIs emitted by SINGLE_FILE and related options.
return filename.startsWith(dataURIPrefix);
}
// Indicates whether filename is delivered via file protocol (as opposed to http/https)
function isFileURI(filename) {
return filename.startsWith('file://');
}
// end include: URIUtils.js
/** @param {boolean=} fixedasm */
function createExportWrapper(name, fixedasm) {
return function() {
var displayName = name;
var asm = fixedasm;
if (!fixedasm) {
asm = Module['asm'];
}
assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization');
if (!asm[name]) {
assert(asm[name], 'exported native function `' + displayName + '` not found');
}
return asm[name].apply(null, arguments);
};
}
var wasmBinaryFile;
wasmBinaryFile = 'crc64.wasm';
if (!isDataURI(wasmBinaryFile)) {
wasmBinaryFile = locateFile(wasmBinaryFile);
}
var binaryInString = ["AGFzbQEAAAABzYCAgAAMYAF/AX9gAAF/YAF/AGAAAGADf35/AX5gA39/fwBgBH9/f38AYAN/f38Bf2AFf39",
"/f38Bf2AEf39/fwF/YAR/f35/AX5gBH9+f38BfwKPgYCAAAUDZW52BWFib3J0AAMDZW52FmVtc2NyaXB0ZW",
"5fcmVzaXplX2hlYXAAABZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxCGZkX2Nsb3NlAAAWd2FzaV9zbmFwc2hvd",
"F9wcmV2aWV3MQhmZF93cml0ZQAJFndhc2lfc25hcHNob3RfcHJldmlldzEHZmRfc2VlawAIA62AgIAALAMF",
"BgIBAAUGAgEBAAACAAIAAAAHBAQCAgEDAAIAAQIBAQIAAQMBAQEACggLBIWAgIAAAXABBAQFh4CAgAABAYA",
"CgIACBsiAgIAACn8BQYCAwAILfwFBAAt/AUEAC38BQQALfwBBnJHBAgt/AEGwkcECC38AQZyRwQILfwBBsJ",
"HBAgt/AEGwkcECC38AQZKSwQILB/qEgIAAGwZtZW1vcnkCABFfX3dhc21fY2FsbF9jdG9ycwAFJWVtc2Nya",
"XB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzAACCVlbXNjcmlwdGVuX2JpbmRfQ3JjNjRIYXNoX0Ny",
"YzY0SGFzaF8wAAkkZW1zY3JpcHRlbl9iaW5kX0NyYzY0SGFzaF9PbkFwcGVuZF8yAAsjZW1zY3JpcHRlbl9",
"iaW5kX0NyYzY0SGFzaF9PbkZpbmFsXzMADCdlbXNjcmlwdGVuX2JpbmRfQ3JjNjRIYXNoX19fZGVzdHJveV",
"9fXzAADRtfX2VtX2xpYl9kZXBzX3dlYmlkbF9iaW5kZXIDBCFfX2VtX2pzX19hcnJheV9ib3VuZHNfY2hlY",
"2tfZXJyb3IDBRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQAQX19lcnJub19sb2NhdGlvbgAPBmZmbHVz",
"aAAtBm1hbGxvYwARBGZyZWUAEhVlbXNjcmlwdGVuX3N0YWNrX2luaXQAKRllbXNjcmlwdGVuX3N0YWNrX2d",
"ldF9mcmVlACoZZW1zY3JpcHRlbl9zdGFja19nZXRfYmFzZQArGGVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2VuZA",
"AsCXN0YWNrU2F2ZQAlDHN0YWNrUmVzdG9yZQAmCnN0YWNrQWxsb2MAJxxlbXNjcmlwdGVuX3N0YWNrX2dld",
"F9jdXJyZW50ACgTX19zdGFydF9lbV9saWJfZGVwcwMGEl9fc3RvcF9lbV9saWJfZGVwcwMHDV9fc3RhcnRf",
"ZW1fanMDCAxfX3N0b3BfZW1fanMDCQxkeW5DYWxsX2ppamkALwmJgICAAAEAQQELAxYYGgqtkYGAACwEABA",
"pC81IAvcCf6EFfiMAIQNBgAEhBCADIARrIQUgBSAANgJ8IAUgATYCeCAFIAI2AnQgBSgCfCEGIAUoAnghBy",
"AFIAc2AnAgBSgCdCEIIAghCSAJrCH6AiAGKQMIIfsCIPsCIPoCfCH8AiAGIPwCNwMIIAYpAwAh/QJCfyH+A",
"iD9AiD+AoUh/wIgBSD/AjcDaEIAIYADIAUggAM3A2AgBSgCdCEKIAUoAnQhC0EgIQwgCyAMbyENIAogDWsh",
"DiAFIA42AlwgBSgCXCEPQcAAIRAgDyERIBAhEiARIBJPIRNBASEUIBMgFHEhFQJAIBVFDQAgBSgCcCEWIAU",
"gFjYCWEIAIYEDIAUggQM3A1BCACGCAyAFIIIDNwNIQgAhgwMgBSCDAzcDQEIAIYQDIAUghAM3AzggBSkDYC",
"GFAyAFKAJcIRcgFyEYIBitIYYDIIUDIIYDfCGHA0IgIYgDIIcDIIgDfSGJAyAFIIkDNwMwIAUoAlwhGSAFK",
"AJ0IRogGiAZayEbIAUgGzYCdCAFKQNoIYoDIAUgigM3A1ACQANAIAUpA2AhiwMgBSkDMCGMAyCLAyGNAyCM",
"AyGOAyCNAyCOA1QhHEEBIR0gHCAdcSEeIB5FDQEgBSgCWCEfIB8pAwAhjwMgBSkDUCGQAyCPAyCQA4UhkQM",
"gBSCRAzcDKCAFKAJYISAgICkDCCGSAyAFKQNIIZMDIJIDIJMDhSGUAyAFIJQDNwMgIAUoAlghISAhKQMQIZ",
"UDIAUpA0AhlgMglQMglgOFIZcDIAUglwM3AxggBSgCWCEiICIpAxghmAMgBSkDOCGZAyCYAyCZA4UhmgMgB",
"SCaAzcDECAFKQMoIZsDQv8BIZwDIJsDIJwDgyGdA0KADiGeAyCdAyCeA3whnwMgnwOnISNBgIDAAiEkQQMh",
"JSAjICV0ISYgJCAmaiEnICcpAwAhoAMgBSCgAzcDUCAFKQMoIaEDQgghogMgoQMgogOIIaMDIAUgowM3Ayg",
"gBSkDICGkA0L/ASGlAyCkAyClA4MhpgNCgA4hpwMgpgMgpwN8IagDIKgDpyEoQYCAwAIhKUEDISogKCAqdC",
"ErICkgK2ohLCAsKQMAIakDIAUgqQM3A0ggBSkDICGqA0IIIasDIKoDIKsDiCGsAyAFIKwDNwMgIAUpAxghr",
"QNC/wEhrgMgrQMgrgODIa8DQoAOIbADIK8DILADfCGxAyCxA6chLUGAgMACIS5BAyEvIC0gL3QhMCAuIDBq",
"ITEgMSkDACGyAyAFILIDNwNAIAUpAxghswNCCCG0AyCzAyC0A4ghtQMgBSC1AzcDGCAFKQMQIbYDQv8BIbc",
"DILYDILcDgyG4A0KADiG5AyC4AyC5A3whugMgugOnITJBgIDAAiEzQQMhNCAyIDR0ITUgMyA1aiE2IDYpAw",
"AhuwMgBSC7AzcDOCAFKQMQIbwDQgghvQMgvAMgvQOIIb4DIAUgvgM3AxAgBSkDKCG/A0L/ASHAAyC/AyDAA",
"4MhwQNCgAwhwgMgwQMgwgN8IcMDIMMDpyE3QYCAwAIhOEEDITkgNyA5dCE6IDggOmohOyA7KQMAIcQDIAUp",
"A1AhxQMgxQMgxAOFIcYDIAUgxgM3A1AgBSkDKCHHA0IIIcgDIMcDIMgDiCHJAyAFIMkDNwMoIAUpAyAhygN",
"C/wEhywMgygMgywODIcwDQoAMIc0DIMwDIM0DfCHOAyDOA6chPEGAgMACIT1BAyE+IDwgPnQhPyA9ID9qIU",
"AgQCkDACHPAyAFKQNIIdADINADIM8DhSHRAyAFINEDNwNIIAUpAyAh0gNCCCHTAyDSAyDTA4gh1AMgBSDUA",
"zcDICAFKQMYIdUDQv8BIdYDINUDINYDgyHXA0KADCHYAyDXAyDYA3wh2QMg2QOnIUFBgIDAAiFCQQMhQyBB",
"IEN0IUQgQiBEaiFFIEUpAwAh2gMgBSkDQCHbAyDbAyDaA4Uh3AMgBSDcAzcDQCAFKQMYId0DQggh3gMg3QM",
"g3gOIId8DIAUg3wM3AxggBSkDECHgA0L/ASHhAyDgAyDhA4Mh4gNCgAwh4wMg4gMg4wN8IeQDIOQDpyFGQY",
"CAwAIhR0EDIUggRiBIdCFJIEcgSWohSiBKKQMAIeUDIAUpAzgh5gMg5gMg5QOFIecDIAUg5wM3AzggBSkDE",
"CHoA0IIIekDIOgDIOkDiCHqAyAFIOoDNwMQIAUpAygh6wNC/wEh7AMg6wMg7AODIe0DQoAKIe4DIO0DIO4D",
"fCHvAyDvA6chS0GAgMACIUxBAyFNIEsgTXQhTiBMIE5qIU8gTykDACHwAyAFKQNQIfEDIPEDIPADhSHyAyA",
"FIPIDNwNQIAUpAygh8wNCCCH0AyDzAyD0A4gh9QMgBSD1AzcDKCAFKQMgIfYDQv8BIfcDIPYDIPcDgyH4A0",
"KACiH5AyD4AyD5A3wh+gMg+gOnIVBBgIDAAiFRQQMhUiBQIFJ0IVMgUSBTaiFUIFQpAwAh+wMgBSkDSCH8A",
"yD8AyD7A4Uh/QMgBSD9AzcDSCAFKQMgIf4DQggh/wMg/gMg/wOIIYAEIAUggAQ3AyAgBSkDGCGBBEL/ASGC",
"BCCBBCCCBIMhgwRCgAohhAQggwQghAR8IYUEIIUEpyFVQYCAwAIhVkEDIVcgVSBXdCFYIFYgWGohWSBZKQM",
"AIYYEIAUpA0AhhwQghwQghgSFIYgEIAUgiAQ3A0AgBSkDGCGJBEIIIYoEIIkEIIoEiCGLBCAFIIsENwMYIA",
"UpAxAhjARC/wEhjQQgjAQgjQSDIY4EQoAKIY8EII4EII8EfCGQBCCQBKchWkGAgMACIVtBAyFcIFogXHQhX",
"SBbIF1qIV4gXikDACGRBCAFKQM4IZIEIJIEIJEEhSGTBCAFIJMENwM4IAUpAxAhlARCCCGVBCCUBCCVBIgh",
"lgQgBSCWBDcDECAFKQMoIZcEQv8BIZgEIJcEIJgEgyGZBEKACCGaBCCZBCCaBHwhmwQgmwSnIV9BgIDAAiF",
"gQQMhYSBfIGF0IWIgYCBiaiFjIGMpAwAhnAQgBSkDUCGdBCCdBCCcBIUhngQgBSCeBDcDUCAFKQMoIZ8EQg",
"ghoAQgnwQgoASIIaEEIAUgoQQ3AyggBSkDICGiBEL/ASGjBCCiBCCjBIMhpARCgAghpQQgpAQgpQR8IaYEI",
"KYEpyFkQYCAwAIhZUEDIWYgZCBmdCFnIGUgZ2ohaCBoKQMAIacEIAUpA0ghqAQgqAQgpwSFIakEIAUgqQQ3",
"A0ggBSkDICGqBEIIIasEIKoEIKsEiCGsBCAFIKwENwMgIAUpAxghrQRC/wEhrgQgrQQgrgSDIa8EQoAIIbA",
"EIK8EILAEfCGxBCCxBKchaUGAgMACIWpBAyFrIGkga3QhbCBqIGxqIW0gbSkDACGyBCAFKQNAIbMEILMEIL",
"IEhSG0BCAFILQENwNAIAUpAxghtQRCCCG2BCC1BCC2BIghtwQgBSC3BDcDGCAFKQMQIbgEQv8BIbkEILgEI",
"LkEgyG6BEKACCG7BCC6BCC7BHwhvAQgvASnIW5BgIDAAiFvQQMhcCBuIHB0IXEgbyBxaiFyIHIpAwAhvQQg",
"BSkDOCG+BCC+BCC9BIUhvwQgBSC/BDcDOCAFKQMQIcAEQgghwQQgwAQgwQSIIcIEIAUgwgQ3AxAgBSkDKCH",
"DBEL/ASHEBCDDBCDEBIMhxQRCgAYhxgQgxQQgxgR8IccEIMcEpyFzQYCAwAIhdEEDIXUgcyB1dCF2IHQgdm",
"ohdyB3KQMAIcgEIAUpA1AhyQQgyQQgyASFIcoEIAUgygQ3A1AgBSkDKCHLBEIIIcwEIMsEIMwEiCHNBCAFI",
"M0ENwMoIAUpAyAhzgRC/wEhzwQgzgQgzwSDIdAEQoAGIdEEINAEINEEfCHSBCDSBKcheEGAgMACIXlBAyF6",
"IHggenQheyB5IHtqIXwgfCkDACHTBCAFKQNIIdQEINQEINMEhSHVBCAFINUENwNIIAUpAyAh1gRCCCHXBCD",
"WBCDXBIgh2AQgBSDYBDcDICAFKQMYIdkEQv8BIdoEINkEINoEgyHbBEKABiHcBCDbBCDcBHwh3QQg3QSnIX",
"1BgIDAAiF+QQMhfyB9IH90IYABIH4ggAFqIYEBIIEBKQMAId4EIAUpA0Ah3wQg3wQg3gSFIeAEIAUg4AQ3A",
"0AgBSkDGCHhBEIIIeIEIOEEIOIEiCHjBCAFIOMENwMYIAUpAxAh5ARC/wEh5QQg5AQg5QSDIeYEQoAGIecE",
"IOYEIOcEfCHoBCDoBKchggFBgIDAAiGDAUEDIYQBIIIBIIQBdCGFASCDASCFAWohhgEghgEpAwAh6QQgBSk",
"DOCHqBCDqBCDpBIUh6wQgBSDrBDcDOCAFKQMQIewEQggh7QQg7AQg7QSIIe4EIAUg7gQ3AxAgBSkDKCHvBE",
"L/ASHwBCDvBCDwBIMh8QRCgAQh8gQg8QQg8gR8IfMEIPMEpyGHAUGAgMACIYgBQQMhiQEghwEgiQF0IYoBI",
"IgBIIoBaiGLASCLASkDACH0BCAFKQNQIfUEIPUEIPQEhSH2BCAFIPYENwNQIAUpAygh9wRCCCH4BCD3BCD4",
"BIgh+QQgBSD5BDcDKCAFKQMgIfoEQv8BIfsEIPoEIPsEgyH8BEKABCH9BCD8BCD9BHwh/gQg/gSnIYwBQYC",
"AwAIhjQFBAyGOASCMASCOAXQhjwEgjQEgjwFqIZABIJABKQMAIf8EIAUpA0ghgAUggAUg/wSFIYEFIAUggQ",
"U3A0ggBSkDICGCBUIIIYMFIIIFIIMFiCGEBSAFIIQFNwMgIAUpAxghhQVC/wEhhgUghQUghgWDIYcFQoAEI",
"YgFIIcFIIgFfCGJBSCJBachkQFBgIDAAiGSAUEDIZMBIJEBIJMBdCGUASCSASCUAWohlQEglQEpAwAhigUg",
"BSkDQCGLBSCLBSCKBYUhjAUgBSCMBTcDQCAFKQMYIY0FQgghjgUgjQUgjgWIIY8FIAUgjwU3AxggBSkDECG",
"QBUL/ASGRBSCQBSCRBYMhkgVCgAQhkwUgkgUgkwV8IZQFIJQFpyGWAUGAgMACIZcBQQMhmAEglgEgmAF0IZ",
"kBIJcBIJkBaiGaASCaASkDACGVBSAFKQM4IZYFIJYFIJUFhSGXBSAFIJcFNwM4IAUpAxAhmAVCCCGZBSCYB",
"SCZBYghmgUgBSCaBTcDECAFKQMoIZsFQv8BIZwFIJsFIJwFgyGdBUKAAiGeBSCdBSCeBXwhnwUgnwWnIZsB",
"QYCAwAIhnAFBAyGdASCbASCdAXQhngEgnAEgngFqIZ8BIJ8BKQMAIaAFIAUpA1AhoQUgoQUgoAWFIaIFIAU",
"gogU3A1AgBSkDKCGjBUIIIaQFIKMFIKQFiCGlBSAFIKUFNwMoIAUpAyAhpgVC/wEhpwUgpgUgpwWDIagFQo",
"ACIakFIKgFIKkFfCGqBSCqBachoAFBgIDAAiGhAUEDIaIBIKABIKIBdCGjASChASCjAWohpAEgpAEpAwAhq",
"wUgBSkDSCGsBSCsBSCrBYUhrQUgBSCtBTcDSCAFKQMgIa4FQgghrwUgrgUgrwWIIbAFIAUgsAU3AyAgBSkD",
"GCGxBUL/ASGyBSCxBSCyBYMhswVCgAIhtAUgswUgtAV8IbUFILUFpyGlAUGAgMACIaYBQQMhpwEgpQEgpwF",
"0IagBIKYBIKgBaiGpASCpASkDACG2BSAFKQNAIbcFILcFILYFhSG4BSAFILgFNwNAIAUpAxghuQVCCCG6BS",
"C5BSC6BYghuwUgBSC7BTcDGCAFKQMQIbwFQv8BIb0FILwFIL0FgyG+BUKAAiG/BSC+BSC/BXwhwAUgwAWnI",
"aoBQYCAwAIhqwFBAyGsASCqASCsAXQhrQEgqwEgrQFqIa4BIK4BKQMAIcEFIAUpAzghwgUgwgUgwQWFIcMF",
"IAUgwwU3AzggBSkDECHEBUIIIcUFIMQFIMUFiCHGBSAFIMYFNwMQIAUpAyghxwVC/wEhyAUgxwUgyAWDIck",
"FQgAhygUgyQUgygV8IcsFIMsFpyGvAUGAgMACIbABQQMhsQEgrwEgsQF0IbIBILABILIBaiGzASCzASkDAC",
"HMBSAFKQNQIc0FIM0FIMwFhSHOBSAFIM4FNwNQIAUpAyAhzwVC/wEh0AUgzwUg0AWDIdEFQgAh0gUg0QUg0",
"gV8IdMFINMFpyG0AUGAgMACIbUBQQMhtgEgtAEgtgF0IbcBILUBILcBaiG4ASC4ASkDACHUBSAFKQNIIdUF",
"INUFINQFhSHWBSAFINYFNwNIIAUpAxgh1wVC/wEh2AUg1wUg2AWDIdkFQgAh2gUg2QUg2gV8IdsFINsFpyG",
"5AUGAgMACIboBQQMhuwEguQEguwF0IbwBILoBILwBaiG9ASC9ASkDACHcBSAFKQNAId0FIN0FINwFhSHeBS",
"AFIN4FNwNAIAUpAxAh3wVC/wEh4AUg3wUg4AWDIeEFQgAh4gUg4QUg4gV8IeMFIOMFpyG+AUGAgMACIb8BQ",
"QMhwAEgvgEgwAF0IcEBIL8BIMEBaiHCASDCASkDACHkBSAFKQM4IeUFIOUFIOQFhSHmBSAFIOYFNwM4IAUp",
"A2Ah5wVCICHoBSDnBSDoBXwh6QUgBSDpBTcDYCAFKAJYIcMBQSAhxAEgwwEgxAFqIcUBIAUgxQE2AlgMAAs",
"AC0IAIeoFIAUg6gU3A2ggBSgCWCHGASDGASkDACHrBSAFKQNQIewFIOsFIOwFhSHtBSAFKQNoIe4FIO4FIO",
"0FhSHvBSAFIO8FNwNoIAUpA2gh8AVCCCHxBSDwBSDxBYgh8gUgBSkDaCHzBUL/ASH0BSDzBSD0BYMh9QUg9",
"QWnIccBQYCAwQIhyAFBAyHJASDHASDJAXQhygEgyAEgygFqIcsBIMsBKQMAIfYFIPIFIPYFhSH3BSAFIPcF",
"NwNoIAUpA2gh+AVCCCH5BSD4BSD5BYgh+gUgBSkDaCH7BUL/ASH8BSD7BSD8BYMh/QUg/QWnIcwBQYCAwQI",
"hzQFBAyHOASDMASDOAXQhzwEgzQEgzwFqIdABINABKQMAIf4FIPoFIP4FhSH/BSAFIP8FNwNoIAUpA2ghgA",
"ZCCCGBBiCABiCBBoghggYgBSkDaCGDBkL/ASGEBiCDBiCEBoMhhQYghQanIdEBQYCAwQIh0gFBAyHTASDRA",
"SDTAXQh1AEg0gEg1AFqIdUBINUBKQMAIYYGIIIGIIYGhSGHBiAFIIcGNwNoIAUpA2ghiAZCCCGJBiCIBiCJ",
"BoghigYgBSkDaCGLBkL/ASGMBiCLBiCMBoMhjQYgjQanIdYBQYCAwQIh1wFBAyHYASDWASDYAXQh2QEg1wE",
"g2QFqIdoBINoBKQMAIY4GIIoGII4GhSGPBiAFII8GNwNoIAUpA2ghkAZCCCGRBiCQBiCRBoghkgYgBSkDaC",
"GTBkL/ASGUBiCTBiCUBoMhlQYglQanIdsBQYCAwQIh3AFBAyHdASDbASDdAXQh3gEg3AEg3gFqId8BIN8BK",
"QMAIZYGIJIGIJYGhSGXBiAFIJcGNwNoIAUpA2ghmAZCCCGZBiCYBiCZBoghmgYgBSkDaCGbBkL/ASGcBiCb",
"BiCcBoMhnQYgnQanIeABQYCAwQIh4QFBAyHiASDgASDiAXQh4wEg4QEg4wFqIeQBIOQBKQMAIZ4GIJoGIJ4",
"GhSGfBiAFIJ8GNwNoIAUpA2ghoAZCCCGhBiCgBiChBoghogYgBSkDaCGjBkL/ASGkBiCjBiCkBoMhpQYgpQ",
"anIeUBQYCAwQIh5gFBAyHnASDlASDnAXQh6AEg5gEg6AFqIekBIOkBKQMAIaYGIKIGIKYGhSGnBiAFIKcGN",
"wNoIAUpA2ghqAZCCCGpBiCoBiCpBoghqgYgBSkDaCGrBkL/ASGsBiCrBiCsBoMhrQYgrQanIeoBQYCAwQIh",
"6wFBAyHsASDqASDsAXQh7QEg6wEg7QFqIe4BIO4BKQMAIa4GIKoGIK4GhSGvBiAFIK8GNwNoIAUoAlgh7wE",
"g7wEpAwghsAYgBSkDSCGxBiCwBiCxBoUhsgYgBSkDaCGzBiCzBiCyBoUhtAYgBSC0BjcDaCAFKQNoIbUGQg",
"ghtgYgtQYgtgaIIbcGIAUpA2ghuAZC/wEhuQYguAYguQaDIboGILoGpyHwAUGAgMECIfEBQQMh8gEg8AEg8",
"gF0IfMBIPEBIPMBaiH0ASD0ASkDACG7BiC3BiC7BoUhvAYgBSC8BjcDaCAFKQNoIb0GQgghvgYgvQYgvgaI",
"Ib8GIAUpA2ghwAZC/wEhwQYgwAYgwQaDIcIGIMIGpyH1AUGAgMECIfYBQQMh9wEg9QEg9wF0IfgBIPYBIPg",
"BaiH5ASD5ASkDACHDBiC/BiDDBoUhxAYgBSDEBjcDaCAFKQNoIcUGQgghxgYgxQYgxgaIIccGIAUpA2ghyA",
"ZC/wEhyQYgyAYgyQaDIcoGIMoGpyH6AUGAgMECIfsBQQMh/AEg+gEg/AF0If0BIPsBIP0BaiH+ASD+ASkDA",
"CHLBiDHBiDLBoUhzAYgBSDMBjcDaCAFKQNoIc0GQgghzgYgzQYgzgaIIc8GIAUpA2gh0AZC/wEh0QYg0AYg",
"0QaDIdIGINIGpyH/AUGAgMECIYACQQMhgQIg/wEggQJ0IYICIIACIIICaiGDAiCDAikDACHTBiDPBiDTBoU",
"h1AYgBSDUBjcDaCAFKQNoIdUGQggh1gYg1QYg1gaIIdcGIAUpA2gh2AZC/wEh2QYg2AYg2QaDIdoGINoGpy",
"GEAkGAgMECIYUCQQMhhgIghAIghgJ0IYcCIIUCIIcCaiGIAiCIAikDACHbBiDXBiDbBoUh3AYgBSDcBjcDa",
"CAFKQNoId0GQggh3gYg3QYg3gaIId8GIAUpA2gh4AZC/wEh4QYg4AYg4QaDIeIGIOIGpyGJAkGAgMECIYoC",
"QQMhiwIgiQIgiwJ0IYwCIIoCIIwCaiGNAiCNAikDACHjBiDfBiDjBoUh5AYgBSDkBjcDaCAFKQNoIeUGQgg",
"h5gYg5QYg5gaIIecGIAUpA2gh6AZC/wEh6QYg6AYg6QaDIeoGIOoGpyGOAkGAgMECIY8CQQMhkAIgjgIgkA",
"J0IZECII8CIJECaiGSAiCSAikDACHrBiDnBiDrBoUh7AYgBSDsBjcDaCAFKQNoIe0GQggh7gYg7QYg7gaII",
"e8GIAUpA2gh8AZC/wEh8QYg8AYg8QaDIfIGIPIGpyGTAkGAgMECIZQCQQMhlQIgkwIglQJ0IZYCIJQCIJYC",
"aiGXAiCXAikDACHzBiDvBiDzBoUh9AYgBSD0BjcDaCAFKAJYIZgCIJgCKQMQIfUGIAUpA0Ah9gYg9QYg9ga",
"FIfcGIAUpA2gh+AYg+AYg9waFIfkGIAUg+QY3A2ggBSkDaCH6BkIIIfsGIPoGIPsGiCH8BiAFKQNoIf0GQv",
"8BIf4GIP0GIP4GgyH/BiD/BqchmQJBgIDBAiGaAkEDIZsCIJkCIJsCdCGcAiCaAiCcAmohnQIgnQIpAwAhg",
"Acg/AYggAeFIYEHIAUggQc3A2ggBSkDaCGCB0IIIYMHIIIHIIMHiCGEByAFKQNoIYUHQv8BIYYHIIUHIIYH",
"gyGHByCHB6chngJBgIDBAiGfAkEDIaACIJ4CIKACdCGhAiCfAiChAmohogIgogIpAwAhiAcghAcgiAeFIYk",
"HIAUgiQc3A2ggBSkDaCGKB0IIIYsHIIoHIIsHiCGMByAFKQNoIY0HQv8BIY4HII0HII4HgyGPByCPB6chow",
"JBgIDBAiGkAkEDIaUCIKMCIKUCdCGmAiCkAiCmAmohpwIgpwIpAwAhkAcgjAcgkAeFIZEHIAUgkQc3A2ggB",
"SkDaCGSB0IIIZMHIJIHIJMHiCGUByAFKQNoIZUHQv8BIZYHIJUHIJYHgyGXByCXB6chqAJBgIDBAiGpAkED",
"IaoCIKgCIKoCdCGrAiCpAiCrAmohrAIgrAIpAwAhmAcglAcgmAeFIZkHIAUgmQc3A2ggBSkDaCGaB0IIIZs",
"HIJoHIJsHiCGcByAFKQNoIZ0HQv8BIZ4HIJ0HIJ4HgyGfByCfB6chrQJBgIDBAiGuAkEDIa8CIK0CIK8CdC",
"GwAiCuAiCwAmohsQIgsQIpAwAhoAcgnAcgoAeFIaEHIAUgoQc3A2ggBSkDaCGiB0IIIaMHIKIHIKMHiCGkB",
"yAFKQNoIaUHQv8BIaYHIKUHIKYHgyGnByCnB6chsgJBgIDBAiGzAkEDIbQCILICILQCdCG1AiCzAiC1Amoh",
"tgIgtgIpAwAhqAcgpAcgqAeFIakHIAUgqQc3A2ggBSkDaCGqB0IIIasHIKoHIKsHiCGsByAFKQNoIa0HQv8",
"BIa4HIK0HIK4HgyGvByCvB6chtwJBgIDBAiG4AkEDIbkCILcCILkCdCG6AiC4AiC6AmohuwIguwIpAwAhsA",
"cgrAcgsAeFIbEHIAUgsQc3A2ggBSkDaCGyB0IIIbMHILIHILMHiCG0ByAFKQNoIbUHQv8BIbYHILUHILYHg",
"yG3ByC3B6chvAJBgIDBAiG9AkEDIb4CILwCIL4CdCG/AiC9AiC/AmohwAIgwAIpAwAhuAcgtAcguAeFIbkH",
"IAUguQc3A2ggBSgCWCHBAiDBAikDGCG6ByAFKQM4IbsHILoHILsHhSG8ByAFKQNoIb0HIL0HILwHhSG+ByA",
"FIL4HNwNoIAUpA2ghvwdCCCHAByC/ByDAB4ghwQcgBSkDaCHCB0L/ASHDByDCByDDB4MhxAcgxAenIcICQY",
"CAwQIhwwJBAyHEAiDCAiDEAnQhxQIgwwIgxQJqIcYCIMYCKQMAIcUHIMEHIMUHhSHGByAFIMYHNwNoIAUpA",
"2ghxwdCCCHIByDHByDIB4ghyQcgBSkDaCHKB0L/ASHLByDKByDLB4MhzAcgzAenIccCQYCAwQIhyAJBAyHJ",
"AiDHAiDJAnQhygIgyAIgygJqIcsCIMsCKQMAIc0HIMkHIM0HhSHOByAFIM4HNwNoIAUpA2ghzwdCCCHQByD",
"PByDQB4gh0QcgBSkDaCHSB0L/ASHTByDSByDTB4Mh1Acg1AenIcwCQYCAwQIhzQJBAyHOAiDMAiDOAnQhzw",
"IgzQIgzwJqIdACINACKQMAIdUHINEHINUHhSHWByAFINYHNwNoIAUpA2gh1wdCCCHYByDXByDYB4gh2QcgB",
"SkDaCHaB0L/ASHbByDaByDbB4Mh3Acg3AenIdECQYCAwQIh0gJBAyHTAiDRAiDTAnQh1AIg0gIg1AJqIdUC",
"INUCKQMAId0HINkHIN0HhSHeByAFIN4HNwNoIAUpA2gh3wdCCCHgByDfByDgB4gh4QcgBSkDaCHiB0L/ASH",
"jByDiByDjB4Mh5Acg5AenIdYCQYCAwQIh1wJBAyHYAiDWAiDYAnQh2QIg1wIg2QJqIdoCINoCKQMAIeUHIO",
"EHIOUHhSHmByAFIOYHNwNoIAUpA2gh5wdCCCHoByDnByDoB4gh6QcgBSkDaCHqB0L/ASHrByDqByDrB4Mh7",
"Acg7AenIdsCQYCAwQIh3AJBAyHdAiDbAiDdAnQh3gIg3AIg3gJqId8CIN8CKQMAIe0HIOkHIO0HhSHuByAF",
"IO4HNwNoIAUpA2gh7wdCCCHwByDvByDwB4gh8QcgBSkDaCHyB0L/ASHzByDyByDzB4Mh9Acg9AenIeACQYC",
"AwQIh4QJBAyHiAiDgAiDiAnQh4wIg4QIg4wJqIeQCIOQCKQMAIfUHIPEHIPUHhSH2ByAFIPYHNwNoIAUpA2",
"gh9wdCCCH4ByD3ByD4B4gh+QcgBSkDaCH6B0L/ASH7ByD6ByD7B4Mh/Acg/AenIeUCQYCAwQIh5gJBAyHnA",
"iDlAiDnAnQh6AIg5gIg6AJqIekCIOkCKQMAIf0HIPkHIP0HhSH+ByAFIP4HNwNoIAUpA2Ah/wdCICGACCD/",
"ByCACHwhgQggBSCBCDcDYAtCACGCCCAFIIIINwMIAkADQCAFKQMIIYMIIAUoAnQh6gIg6gIh6wIg6wKsIYQ",
"IIIMIIYUIIIQIIYYIIIUIIIYIVCHsAkEBIe0CIOwCIO0CcSHuAiDuAkUNASAFKQNoIYcIQgghiAgghwggiA",
"iIIYkIIAUpA2ghigggBSgCcCHvAiAFKQNgIYsIIIsIpyHwAiDvAiDwAmoh8QIg8QItAAAh8gJB/wEh8wIg8",
"gIg8wJxIfQCIPQCrSGMCCCKCCCMCIUhjQhC/wEhjgggjQggjgiDIY8III8IpyH1AkGAgMECIfYCQQMh9wIg",
"9QIg9wJ0IfgCIPYCIPgCaiH5AiD5AikDACGQCCCJCCCQCIUhkQggBSCRCDcDaCAFKQMIIZIIQgEhkwggkgg",
"gkwh8IZQIIAUglAg3AwggBSkDYCGVCEIBIZYIIJUIIJYIfCGXCCAFIJcINwNgDAALAAsgBSkDaCGYCEJ/IZ",
"kIIJgIIJkIhSGaCCAGIJoINwMADwudAgIcfwV+IwAhBEEgIQUgBCAFayEGIAYkACAGIAA2AhwgBiABNgIYI",
"AYgAjYCFCAGIAM2AhAgBigCHCEHIAYoAhghCCAGKAIUIQkgByAIIAkQBiAGKAIQIQogBiAKNgIMQQAhCyAG",
"IAs2AggCQANAIAYoAgghDEEIIQ0gDCEOIA0hDyAOIA9JIRBBASERIBAgEXEhEiASRQ0BIAcpAwAhICAGKAI",
"IIRNBAyEUIBMgFHQhFSAVIRYgFq0hISAgICGIISJC/wEhIyAiICODISQgJKchFyAGKAIMIRggBigCCCEZIB",
"ggGWohGiAaIBc6AAAgBigCCCEbQQEhHCAbIBxqIR0gBiAdNgIIDAALAAtBICEeIAYgHmohHyAfJAAPC14BD",
"H8jACEBQRAhAiABIAJrIQMgAyQAIAMgADYCDCADKAIMIQRBACEFIAQhBiAFIQcgBiAHRiEIQQEhCSAIIAlx",
"IQoCQCAKDQAgBBAUC0EQIQsgAyALaiEMIAwkAA8LNQIEfwF+QRAhACAAEBMhAUIAIQQgASAENwMAQQghAiA",
"BIAJqIQMgAyAENwMAIAEQChogAQ8LPAIEfwJ+IwAhAUEQIQIgASACayEDIAMgADYCDCADKAIMIQRCACEFIA",
"QgBTcDAEIAIQYgBCAGNwMIIAQPC1kBCH8jACEDQRAhBCADIARrIQUgBSQAIAUgADYCDCAFIAE2AgggBSACN",
"gIEIAUoAgwhBiAFKAIIIQcgBSgCBCEIIAYgByAIEAZBECEJIAUgCWohCiAKJAAPC2kBCX8jACEEQRAhBSAE",
"IAVrIQYgBiQAIAYgADYCDCAGIAE2AgggBiACNgIEIAYgAzYCACAGKAIMIQcgBigCCCEIIAYoAgQhCSAGKAI",
"AIQogByAIIAkgChAHQRAhCyAGIAtqIQwgDCQADwteAQx/IwAhAUEQIQIgASACayEDIAMkACADIAA2AgwgAy",
"gCDCEEQQAhBSAEIQYgBSEHIAYgB0YhCEEBIQkgCCAJcSEKAkAgCg0AIAQQFAtBECELIAMgC2ohDCAMJAAPC",
"wcAPwBBEHQLBwBBlJLBAgtUAQJ/QQAoAoCQwQIiASAAQQdqQXhxIgJqIQACQAJAIAJFDQAgACABTQ0BCwJA",
"IAAQDk0NACAAEAFFDQELQQAgADYCgJDBAiABDwsQD0EwNgIAQX8LviwBC38jAEEQayIBJAACQAJAAkACQAJ",
"AAkACQAJAAkACQAJAAkACQAJAAkAgAEH0AUsNAAJAQQAoApiSwQIiAkEQIABBC2pBeHEgAEELSRsiA0EDdi",
"IEdiIAQQNxRQ0AAkACQCAAQX9zQQFxIARqIgVBA3QiBEHAksECaiIAIARByJLBAmooAgAiBCgCCCIDRw0AQ",
"QAgAkF+IAV3cTYCmJLBAgwBCyADIAA2AgwgACADNgIICyAEQQhqIQAgBCAFQQN0IgVBA3I2AgQgBCAFaiIE",
"IAQoAgRBAXI2AgQMDwsgA0EAKAKgksECIgZNDQECQCAARQ0AAkACQCAAIAR0QQIgBHQiAEEAIABrcnEiAEE",
"AIABrcWgiBEEDdCIAQcCSwQJqIgUgAEHIksECaigCACIAKAIIIgdHDQBBACACQX4gBHdxIgI2ApiSwQIMAQ",
"sgByAFNgIMIAUgBzYCCAsgACADQQNyNgIEIAAgA2oiByAEQQN0IgQgA2siBUEBcjYCBCAAIARqIAU2AgACQ",
"CAGRQ0AIAZBeHFBwJLBAmohA0EAKAKsksECIQQCQAJAIAJBASAGQQN2dCIIcQ0AQQAgAiAIcjYCmJLBAiAD",
"IQgMAQsgAygCCCEICyADIAQ2AgggCCAENgIMIAQgAzYCDCAEIAg2AggLIABBCGohAEEAIAc2AqySwQJBACA",
"FNgKgksECDA8LQQAoApySwQIiCUUNASAJQQAgCWtxaEECdEHIlMECaigCACIHKAIEQXhxIANrIQQgByEFAk",
"ADQAJAIAUoAhAiAA0AIAVBFGooAgAiAEUNAgsgACgCBEF4cSADayIFIAQgBSAESSIFGyEEIAAgByAFGyEHI",
"AAhBQwACwALIAcoAhghCgJAIAcoAgwiCCAHRg0AIAcoAggiAEEAKAKoksECSRogACAINgIMIAggADYCCAwO",
"CwJAIAdBFGoiBSgCACIADQAgBygCECIARQ0DIAdBEGohBQsDQCAFIQsgACIIQRRqIgUoAgAiAA0AIAhBEGo",
"hBSAIKAIQIgANAAsgC0EANgIADA0LQX8hAyAAQb9/Sw0AIABBC2oiAEF4cSEDQQAoApySwQIiBkUNAEEAIQ",
"sCQCADQYACSQ0AQR8hCyADQf///wdLDQAgA0EmIABBCHZnIgBrdkEBcSAAQQF0a0E+aiELC0EAIANrIQQCQ",
"AJAAkACQCALQQJ0QciUwQJqKAIAIgUNAEEAIQBBACEIDAELQQAhACADQQBBGSALQQF2ayALQR9GG3QhB0EA",
"IQgDQAJAIAUoAgRBeHEgA2siAiAETw0AIAIhBCAFIQggAg0AQQAhBCAFIQggBSEADAMLIAAgBUEUaigCACI",
"CIAIgBSAHQR12QQRxakEQaigCACIFRhsgACACGyEAIAdBAXQhByAFDQALCwJAIAAgCHINAEEAIQhBAiALdC",
"IAQQAgAGtyIAZxIgBFDQMgAEEAIABrcWhBAnRByJTBAmooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIANrIgIgB",
"EkhBwJAIAAoAhAiBQ0AIABBFGooAgAhBQsgAiAEIAcbIQQgACAIIAcbIQggBSEAIAUNAAsLIAhFDQAgBEEA",
"KAKgksECIANrTw0AIAgoAhghCwJAIAgoAgwiByAIRg0AIAgoAggiAEEAKAKoksECSRogACAHNgIMIAcgADY",
"CCAwMCwJAIAhBFGoiBSgCACIADQAgCCgCECIARQ0DIAhBEGohBQsDQCAFIQIgACIHQRRqIgUoAgAiAA0AIA",
"dBEGohBSAHKAIQIgANAAsgAkEANgIADAsLAkBBACgCoJLBAiIAIANJDQBBACgCrJLBAiEEAkACQCAAIANrI",
"gVBEEkNAEEAIAU2AqCSwQJBACAEIANqIgc2AqySwQIgByAFQQFyNgIEIAQgAGogBTYCACAEIANBA3I2AgQM",
"AQtBAEEANgKsksECQQBBADYCoJLBAiAEIABBA3I2AgQgBCAAaiIAIAAoAgRBAXI2AgQLIARBCGohAAwNCwJ",
"AQQAoAqSSwQIiByADTQ0AQQAgByADayIENgKkksECQQBBACgCsJLBAiIAIANqIgU2ArCSwQIgBSAEQQFyNg",
"IEIAAgA0EDcjYCBCAAQQhqIQAMDQsCQAJAQQAoAvCVwQJFDQBBACgC+JXBAiEEDAELQQBCfzcC/JXBAkEAQ",
"oCggICAgAQ3AvSVwQJBACABQQxqQXBxQdiq1aoFczYC8JXBAkEAQQA2AoSWwQJBAEEANgLUlcECQYAgIQQL",
"QQAhACAEIANBL2oiBmoiAkEAIARrIgtxIgggA00NDEEAIQACQEEAKALQlcECIgRFDQBBACgCyJXBAiIFIAh",
"qIgkgBU0NDSAJIARLDQ0LAkACQEEALQDUlcECQQRxDQACQAJAAkACQAJAQQAoArCSwQIiBEUNAEHYlcECIQ",
"ADQAJAIAAoAgAiBSAESw0AIAUgACgCBGogBEsNAwsgACgCCCIADQALC0EAEBAiB0F/Rg0DIAghAgJAQQAoA",
"vSVwQIiAEF/aiIEIAdxRQ0AIAggB2sgBCAHakEAIABrcWohAgsgAiADTQ0DAkBBACgC0JXBAiIARQ0AQQAo",
"AsiVwQIiBCACaiIFIARNDQQgBSAASw0ECyACEBAiACAHRw0BDAULIAIgB2sgC3EiAhAQIgcgACgCACAAKAI",
"EakYNASAHIQALIABBf0YNAQJAIANBMGogAksNACAAIQcMBAsgBiACa0EAKAL4lcECIgRqQQAgBGtxIgQQEE",
"F/Rg0BIAQgAmohAiAAIQcMAwsgB0F/Rw0CC0EAQQAoAtSVwQJBBHI2AtSVwQILIAgQECEHQQAQECEAIAdBf",
"0YNBSAAQX9GDQUgByAATw0FIAAgB2siAiADQShqTQ0FC0EAQQAoAsiVwQIgAmoiADYCyJXBAgJAIABBACgC",
"zJXBAk0NAEEAIAA2AsyVwQILAkACQEEAKAKwksECIgRFDQBB2JXBAiEAA0AgByAAKAIAIgUgACgCBCIIakY",
"NAiAAKAIIIgANAAwFCwALAkACQEEAKAKoksECIgBFDQAgByAATw0BC0EAIAc2AqiSwQILQQAhAEEAIAI2At",
"yVwQJBACAHNgLYlcECQQBBfzYCuJLBAkEAQQAoAvCVwQI2ArySwQJBAEEANgLklcECA0AgAEEDdCIEQciSw",
"QJqIARBwJLBAmoiBTYCACAEQcySwQJqIAU2AgAgAEEBaiIAQSBHDQALQQAgAkFYaiIAQXggB2tBB3FBACAH",
"QQhqQQdxGyIEayIFNgKkksECQQAgByAEaiIENgKwksECIAQgBUEBcjYCBCAHIABqQSg2AgRBAEEAKAKAlsE",
"CNgK0ksECDAQLIAAtAAxBCHENAiAEIAVJDQIgBCAHTw0CIAAgCCACajYCBEEAIARBeCAEa0EHcUEAIARBCG",
"pBB3EbIgBqIgU2ArCSwQJBAEEAKAKkksECIAJqIgcgAGsiADYCpJLBAiAFIABBAXI2AgQgBCAHakEoNgIEQ",
"QBBACgCgJbBAjYCtJLBAgwDC0EAIQgMCgtBACEHDAgLAkAgB0EAKAKoksECIghPDQBBACAHNgKoksECIAch",
"CAsgByACaiEFQdiVwQIhAAJAAkACQAJAA0AgACgCACAFRg0BIAAoAggiAA0ADAILAAsgAC0ADEEIcUUNAQt",
"B2JXBAiEAA0ACQCAAKAIAIgUgBEsNACAFIAAoAgRqIgUgBEsNAwsgACgCCCEADAALAAsgACAHNgIAIAAgAC",
"gCBCACajYCBCAHQXggB2tBB3FBACAHQQhqQQdxG2oiCyADQQNyNgIEIAVBeCAFa0EHcUEAIAVBCGpBB3Eba",
"iICIAsgA2oiA2shAAJAIAIgBEcNAEEAIAM2ArCSwQJBAEEAKAKkksECIABqIgA2AqSSwQIgAyAAQQFyNgIE",
"DAgLAkAgAkEAKAKsksECRw0AQQAgAzYCrJLBAkEAQQAoAqCSwQIgAGoiADYCoJLBAiADIABBAXI2AgQgAyA",
"AaiAANgIADAgLIAIoAgQiBEEDcUEBRw0GIARBeHEhBgJAIARB/wFLDQAgAigCCCIFIARBA3YiCEEDdEHAks",
"ECaiIHRhoCQCACKAIMIgQgBUcNAEEAQQAoApiSwQJBfiAId3E2ApiSwQIMBwsgBCAHRhogBSAENgIMIAQgB",
"TYCCAwGCyACKAIYIQkCQCACKAIMIgcgAkYNACACKAIIIgQgCEkaIAQgBzYCDCAHIAQ2AggMBQsCQCACQRRq",
"IgUoAgAiBA0AIAIoAhAiBEUNBCACQRBqIQULA0AgBSEIIAQiB0EUaiIFKAIAIgQNACAHQRBqIQUgBygCECI",
"EDQALIAhBADYCAAwEC0EAIAJBWGoiAEF4IAdrQQdxQQAgB0EIakEHcRsiCGsiCzYCpJLBAkEAIAcgCGoiCD",
"YCsJLBAiAIIAtBAXI2AgQgByAAakEoNgIEQQBBACgCgJbBAjYCtJLBAiAEIAVBJyAFa0EHcUEAIAVBWWpBB",
"3EbakFRaiIAIAAgBEEQakkbIghBGzYCBCAIQRBqQQApAuCVwQI3AgAgCEEAKQLYlcECNwIIQQAgCEEIajYC",
"4JXBAkEAIAI2AtyVwQJBACAHNgLYlcECQQBBADYC5JXBAiAIQRhqIQADQCAAQQc2AgQgAEEIaiEHIABBBGo",
"hACAHIAVJDQALIAggBEYNACAIIAgoAgRBfnE2AgQgBCAIIARrIgdBAXI2AgQgCCAHNgIAAkAgB0H/AUsNAC",
"AHQXhxQcCSwQJqIQACQAJAQQAoApiSwQIiBUEBIAdBA3Z0IgdxDQBBACAFIAdyNgKYksECIAAhBQwBCyAAK",
"AIIIQULIAAgBDYCCCAFIAQ2AgwgBCAANgIMIAQgBTYCCAwBC0EfIQACQCAHQf///wdLDQAgB0EmIAdBCHZn",
"IgBrdkEBcSAAQQF0a0E+aiEACyAEIAA2AhwgBEIANwIQIABBAnRByJTBAmohBQJAAkACQEEAKAKcksECIgh",
"BASAAdCICcQ0AQQAgCCACcjYCnJLBAiAFIAQ2AgAgBCAFNgIYDAELIAdBAEEZIABBAXZrIABBH0YbdCEAIA",
"UoAgAhCANAIAgiBSgCBEF4cSAHRg0CIABBHXYhCCAAQQF0IQAgBSAIQQRxaiICQRBqKAIAIggNAAsgAkEQa",
"iAENgIAIAQgBTYCGAsgBCAENgIMIAQgBDYCCAwBCyAFKAIIIgAgBDYCDCAFIAQ2AgggBEEANgIYIAQgBTYC",
"DCAEIAA2AggLQQAoAqSSwQIiACADTQ0AQQAgACADayIENgKkksECQQBBACgCsJLBAiIAIANqIgU2ArCSwQI",
"gBSAEQQFyNgIEIAAgA0EDcjYCBCAAQQhqIQAMCAsQD0EwNgIAQQAhAAwHC0EAIQcLIAlFDQACQAJAIAIgAi",
"gCHCIFQQJ0QciUwQJqIgQoAgBHDQAgBCAHNgIAIAcNAUEAQQAoApySwQJBfiAFd3E2ApySwQIMAgsgCUEQQ",
"RQgCSgCECACRhtqIAc2AgAgB0UNAQsgByAJNgIYAkAgAigCECIERQ0AIAcgBDYCECAEIAc2AhgLIAJBFGoo",
"AgAiBEUNACAHQRRqIAQ2AgAgBCAHNgIYCyAGIABqIQAgAiAGaiICKAIEIQQLIAIgBEF+cTYCBCADIABBAXI",
"2AgQgAyAAaiAANgIAAkAgAEH/AUsNACAAQXhxQcCSwQJqIQQCQAJAQQAoApiSwQIiBUEBIABBA3Z0IgBxDQ",
"BBACAFIAByNgKYksECIAQhAAwBCyAEKAIIIQALIAQgAzYCCCAAIAM2AgwgAyAENgIMIAMgADYCCAwBC0EfI",
"QQCQCAAQf///wdLDQAgAEEmIABBCHZnIgRrdkEBcSAEQQF0a0E+aiEECyADIAQ2AhwgA0IANwIQIARBAnRB",
"yJTBAmohBQJAAkACQEEAKAKcksECIgdBASAEdCIIcQ0AQQAgByAIcjYCnJLBAiAFIAM2AgAgAyAFNgIYDAE",
"LIABBAEEZIARBAXZrIARBH0YbdCEEIAUoAgAhBwNAIAciBSgCBEF4cSAARg0CIARBHXYhByAEQQF0IQQgBS",
"AHQQRxaiIIQRBqKAIAIgcNAAsgCEEQaiADNgIAIAMgBTYCGAsgAyADNgIMIAMgAzYCCAwBCyAFKAIIIgAgA",
"zYCDCAFIAM2AgggA0EANgIYIAMgBTYCDCADIAA2AggLIAtBCGohAAwCCwJAIAtFDQACQAJAIAggCCgCHCIF",
"QQJ0QciUwQJqIgAoAgBHDQAgACAHNgIAIAcNAUEAIAZBfiAFd3EiBjYCnJLBAgwCCyALQRBBFCALKAIQIAh",
"GG2ogBzYCACAHRQ0BCyAHIAs2AhgCQCAIKAIQIgBFDQAgByAANgIQIAAgBzYCGAsgCEEUaigCACIARQ0AIA",
"dBFGogADYCACAAIAc2AhgLAkACQCAEQQ9LDQAgCCAEIANqIgBBA3I2AgQgCCAAaiIAIAAoAgRBAXI2AgQMA",
"QsgCCADQQNyNgIEIAggA2oiByAEQQFyNgIEIAcgBGogBDYCAAJAIARB/wFLDQAgBEF4cUHAksECaiEAAkAC",
"QEEAKAKYksECIgVBASAEQQN2dCIEcQ0AQQAgBSAEcjYCmJLBAiAAIQQMAQsgACgCCCEECyAAIAc2AgggBCA",
"HNgIMIAcgADYCDCAHIAQ2AggMAQtBHyEAAkAgBEH///8HSw0AIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPm",
"ohAAsgByAANgIcIAdCADcCECAAQQJ0QciUwQJqIQUCQAJAAkAgBkEBIAB0IgNxDQBBACAGIANyNgKcksECI",
"AUgBzYCACAHIAU2AhgMAQsgBEEAQRkgAEEBdmsgAEEfRht0IQAgBSgCACEDA0AgAyIFKAIEQXhxIARGDQIg",
"AEEddiEDIABBAXQhACAFIANBBHFqIgJBEGooAgAiAw0ACyACQRBqIAc2AgAgByAFNgIYCyAHIAc2AgwgByA",
"HNgIIDAELIAUoAggiACAHNgIMIAUgBzYCCCAHQQA2AhggByAFNgIMIAcgADYCCAsgCEEIaiEADAELAkAgCk",
"UNAAJAAkAgByAHKAIcIgVBAnRByJTBAmoiACgCAEcNACAAIAg2AgAgCA0BQQAgCUF+IAV3cTYCnJLBAgwCC",
"yAKQRBBFCAKKAIQIAdGG2ogCDYCACAIRQ0BCyAIIAo2AhgCQCAHKAIQIgBFDQAgCCAANgIQIAAgCDYCGAsg",
"B0EUaigCACIARQ0AIAhBFGogADYCACAAIAg2AhgLAkACQCAEQQ9LDQAgByAEIANqIgBBA3I2AgQgByAAaiI",
"AIAAoAgRBAXI2AgQMAQsgByADQQNyNgIEIAcgA2oiBSAEQQFyNgIEIAUgBGogBDYCAAJAIAZFDQAgBkF4cU",
"HAksECaiEDQQAoAqySwQIhAAJAAkBBASAGQQN2dCIIIAJxDQBBACAIIAJyNgKYksECIAMhCAwBCyADKAIII",
"QgLIAMgADYCCCAIIAA2AgwgACADNgIMIAAgCDYCCAtBACAFNgKsksECQQAgBDYCoJLBAgsgB0EIaiEACyAB",
"QRBqJAAgAAuDDQEHfwJAIABFDQAgAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkAgAkEBcQ0AIAJBA3FFDQE",
"gASABKAIAIgJrIgFBACgCqJLBAiIESQ0BIAIgAGohAAJAAkACQCABQQAoAqySwQJGDQACQCACQf8BSw0AIA",
"EoAggiBCACQQN2IgVBA3RBwJLBAmoiBkYaAkAgASgCDCICIARHDQBBAEEAKAKYksECQX4gBXdxNgKYksECD",
"AULIAIgBkYaIAQgAjYCDCACIAQ2AggMBAsgASgCGCEHAkAgASgCDCIGIAFGDQAgASgCCCICIARJGiACIAY2",
"AgwgBiACNgIIDAMLAkAgAUEUaiIEKAIAIgINACABKAIQIgJFDQIgAUEQaiEECwNAIAQhBSACIgZBFGoiBCg",
"CACICDQAgBkEQaiEEIAYoAhAiAg0ACyAFQQA2AgAMAgsgAygCBCICQQNxQQNHDQJBACAANgKgksECIAMgAk",
"F+cTYCBCABIABBAXI2AgQgAyAANgIADwtBACEGCyAHRQ0AAkACQCABIAEoAhwiBEECdEHIlMECaiICKAIAR",
"w0AIAIgBjYCACAGDQFBAEEAKAKcksECQX4gBHdxNgKcksECDAILIAdBEEEUIAcoAhAgAUYbaiAGNgIAIAZF",
"DQELIAYgBzYCGAJAIAEoAhAiAkUNACAGIAI2AhAgAiAGNgIYCyABQRRqKAIAIgJFDQAgBkEUaiACNgIAIAI",
"gBjYCGAsgASADTw0AIAMoAgQiAkEBcUUNAAJAAkACQAJAAkAgAkECcQ0AAkAgA0EAKAKwksECRw0AQQAgAT",
"YCsJLBAkEAQQAoAqSSwQIgAGoiADYCpJLBAiABIABBAXI2AgQgAUEAKAKsksECRw0GQQBBADYCoJLBAkEAQ",
"QA2AqySwQIPCwJAIANBACgCrJLBAkcNAEEAIAE2AqySwQJBAEEAKAKgksECIABqIgA2AqCSwQIgASAAQQFy",
"NgIEIAEgAGogADYCAA8LIAJBeHEgAGohAAJAIAJB/wFLDQAgAygCCCIEIAJBA3YiBUEDdEHAksECaiIGRho",
"CQCADKAIMIgIgBEcNAEEAQQAoApiSwQJBfiAFd3E2ApiSwQIMBQsgAiAGRhogBCACNgIMIAIgBDYCCAwECy",
"ADKAIYIQcCQCADKAIMIgYgA0YNACADKAIIIgJBACgCqJLBAkkaIAIgBjYCDCAGIAI2AggMAwsCQCADQRRqI",
"gQoAgAiAg0AIAMoAhAiAkUNAiADQRBqIQQLA0AgBCEFIAIiBkEUaiIEKAIAIgINACAGQRBqIQQgBigCECIC",
"DQALIAVBADYCAAwCCyADIAJBfnE2AgQgASAAQQFyNgIEIAEgAGogADYCAAwDC0EAIQYLIAdFDQACQAJAIAM",
"gAygCHCIEQQJ0QciUwQJqIgIoAgBHDQAgAiAGNgIAIAYNAUEAQQAoApySwQJBfiAEd3E2ApySwQIMAgsgB0",
"EQQRQgBygCECADRhtqIAY2AgAgBkUNAQsgBiAHNgIYAkAgAygCECICRQ0AIAYgAjYCECACIAY2AhgLIANBF",
"GooAgAiAkUNACAGQRRqIAI2AgAgAiAGNgIYCyABIABBAXI2AgQgASAAaiAANgIAIAFBACgCrJLBAkcNAEEA",
"IAA2AqCSwQIPCwJAIABB/wFLDQAgAEF4cUHAksECaiECAkACQEEAKAKYksECIgRBASAAQQN2dCIAcQ0AQQA",
"gBCAAcjYCmJLBAiACIQAMAQsgAigCCCEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0EfIQICQC",
"AAQf///wdLDQAgAEEmIABBCHZnIgJrdkEBcSACQQF0a0E+aiECCyABIAI2AhwgAUIANwIQIAJBAnRByJTBA",
"mohBAJAAkACQAJAQQAoApySwQIiBkEBIAJ0IgNxDQBBACAGIANyNgKcksECIAQgATYCACABIAQ2AhgMAQsg",
"AEEAQRkgAkEBdmsgAkEfRht0IQIgBCgCACEGA0AgBiIEKAIEQXhxIABGDQIgAkEddiEGIAJBAXQhAiAEIAZ",
"BBHFqIgNBEGooAgAiBg0ACyADQRBqIAE2AgAgASAENgIYCyABIAE2AgwgASABNgIIDAELIAQoAggiACABNg",
"IMIAQgATYCCCABQQA2AhggASAENgIMIAEgADYCCAtBAEEAKAK4ksECQX9qIgFBfyABGzYCuJLBAgsLMQEBf",
"yAAQQEgABshAQJAA0AgARARIgANAQJAECIiAEUNACAAEQMADAELCxAAAAsgAAsGACAAEBILBAAgAAsLACAA",
"KAI8EBUQAgsVAAJAIAANAEEADwsQDyAANgIAQX8L4wIBB38jAEEgayIDJAAgAyAAKAIcIgQ2AhAgACgCFCE",
"FIAMgAjYCHCADIAE2AhggAyAFIARrIgE2AhQgASACaiEGIANBEGohBEECIQcCQAJAAkACQAJAIAAoAjwgA0",
"EQakECIANBDGoQAxAXRQ0AIAQhBQwBCwNAIAYgAygCDCIBRg0CAkAgAUF/Sg0AIAQhBQwECyAEIAEgBCgCB",
"CIISyIJQQN0aiIFIAUoAgAgASAIQQAgCRtrIghqNgIAIARBDEEEIAkbaiIEIAQoAgAgCGs2AgAgBiABayEG",
"IAUhBCAAKAI8IAUgByAJayIHIANBDGoQAxAXRQ0ACwsgBkF/Rw0BCyAAIAAoAiwiATYCHCAAIAE2AhQgACA",
"BIAAoAjBqNgIQIAIhAQwBC0EAIQEgAEEANgIcIABCADcDECAAIAAoAgBBIHI2AgAgB0ECRg0AIAIgBSgCBG",
"shAQsgA0EgaiQAIAELNwEBfyMAQRBrIgMkACAAIAEgAkH/AXEgA0EIahAwEBchAiADKQMIIQEgA0EQaiQAQ",
"n8gASACGwsNACAAKAI8IAEgAhAZCwIACwIACw4AQZCWwQIQG0GUlsECCwkAQZCWwQIQHAsEAEEBCwIACwcA",
"IAAoAgALCQBBnJbBAhAhCwYAIAAkAQsEACMBCwQAIwALBgAgACQACxIBAn8jACAAa0FwcSIBJAAgAQsEACM",
"ACxMAQYCAwAIkA0EAQQ9qQXBxJAILBwAjACMCawsEACMDCwQAIwILuAIBA38CQCAADQBBACEBAkBBACgCmJ",
"bBAkUNAEEAKAKYlsECEC0hAQsCQEEAKAKYkcECRQ0AQQAoApiRwQIQLSABciEBCwJAEB0oAgAiAEUNAANAQ",
"QAhAgJAIAAoAkxBAEgNACAAEB8hAgsCQCAAKAIUIAAoAhxGDQAgABAtIAFyIQELAkAgAkUNACAAECALIAAo",
"AjgiAA0ACwsQHiABDwtBACECAkAgACgCTEEASA0AIAAQHyECCwJAAkACQCAAKAIUIAAoAhxGDQAgAEEAQQA",
"gACgCJBEHABogACgCFA0AQX8hASACDQEMAgsCQCAAKAIEIgEgACgCCCIDRg0AIAAgASADa6xBASAAKAIoEQ",
"QAGgtBACEBIABBADYCHCAAQgA3AxAgAEIANwIEIAJFDQELIAAQIAsgAQsNACABIAIgAyAAEQQACyMBAX4gA",
"CABIAKtIAOtQiCGhCAEEC4hBSAFQiCIpxAjIAWnCxMAIAAgAacgAUIgiKcgAiADEAQLC7aSgYAABABBgIDA",
"AguAkAEAAAAAAAAAADGyfhfBM8W4CfdqdtFBU0U4RRRhEHKW/RLu1eyig6aKI1yr+2OwYzIbGb+ac8L1zyq",
"rwY2y8TB3T088gRYhlCF+/UKW1xJRmUa4VvfHYMdkdwoo4AZTAtxdoelttKIyq2wTl3p1kfcTVFaDG2XjYe",
"5l5P0MpNCkVp6eeAItQihDrywGFexx7fuXaRJ0/AN7BqbbbGM9ML6+jHCt7o/Bjsm9wtP5TvJLcYWHx5heg",
"N2MtDW5j5+zGDTR0USDO2O8YuBjOpT6UHna2CYu9eoi7yfplFDiKxEqn8M/kW+Z4Bro8o3veFjT31DKyPsZ",
"SKFJrft6hQ6JkowVPD3xBFqEUIYNj48Tm7eVPjXKm3KLxQPDBHjlZUr2xnsu0yTo+Af2DB9hWv85NDO0JyR",
"OnilGpUkWljCJ6HVg8XNyzYVMpcSnQsCzko2WAR96hafzneSX4ks32eRc11JaYZwYae4mYi1QLmZ+LxWnlW",
"hrch8/ZzFoWdkMCP5U9NCio4kGd8Z4xZMR9xG29b19q1TjcKaHK4Ca5p1nZ7TuOLBNXOrVRd5Pgf8i/RR2G",
"/e5ujacBASNCogISIvFN0iy7ey1h2Hn7OTcXsuQoNQpXOQb3/Gwpr+h1amh5nGVehn/AmBrw2RKbs6wHnwC",
"V4/W9vUKHRIlGSvHR3QK0xbckxPpdVHnLng4IlsLRiYdvYAaHh8nNm8rfSusYTD3XO7FAQegvUWt3rIwtd6",
"qhJ4bCgjwysuU7I33OUK03FXfSE9cpknQ8Q/sGW0UN8cwPCmhVVEjpiBOv1xk412x4X165E5InDxTjEqTf/",
"riK5K/jytHv/ZKgs0Z1nYNiF1D/txujXcNU8psUHu8xXNEC1+Vw4SAZyUbLQM+tTIZMtoexoafmdi/aO/28",
"a4rpqip3DNJlm6yybmupbSn3MzeeJ1gDMI4MdLcTcRa84pPxR1+AeLLz1ukDQyXH/p9JbPMP1Kn0NbkPn7O",
"YtDhZJopv/2naNkhjkivjzGV6JPwX2689C0v1IRVvaoovh5m+kJ8me0GJiPuI2zre/sXkZA0rdi+Qz06Ubk",
"fKY40DIgvrt4aS4w0zTvPzmjdcQV/RdgPWxjJYJu41KuLvJ9RKcbDarh5J2ls0qJ6yu/aWN6stbv5KmJydW",
"04CQgaFUPHEy/IO9+te4IHTthJSVBKMHlZGXqM6LFK/FeQ6AD9gPiCQFHbxUW4vZYhQalTuIkP6DaAmpYAo",
"6QpuzJrpneSFles81hjz6pTQ83jKvUym+E92iIZMIr+BcDWhsmU3M+3vsFH+lFk9/KqoFeIx5nGQNS3lrsC",
"IezrFTokSjJW3VlrLeV59+7lHH9M9QthE9SuAVs0OKSrJtLros5d8HAXYJW1D241yC8lgdQfHKM1Hpf/w94",
"vZo00PD5ObN5W+gWOQFmt7ZNCPctUOL2fBb8MeSovfKzAB2md1yPYfGRRWC+pNBlPoelgar1VCT03FFHYw0",
"LIDvKse3MCz3r/wttKwXzYu8wHY3KEaLmrvpGeQzYWrmqNVCa4TJOg4x/YM4n+7bciLB2Lsbv51jJei3aAC",
"YfB821OzqqiRkxBnH65mxA4W4CvuwGjVSw6kN0t/JLnUi1R7uhE9wOvIfU+TBLGsdE2NA2Jqv70xVckfx9X",
"z0a7QOVM2u/l7XrNV73qmNRfBNqWji8g7BoQu4b8ud3dqG6sR898ZRrvGqaU2aD2K11ksVXqZU4TGHDQRZj",
"zsyKqDseEqzYLCAHPSjZaBnw5s7Fd92nDxAH2pTznG1U5METbKyYokIFVoCYngvg012QSWDBDy/FvXFdMUV",
"O5Z5Jt5TJGkoqiKkdO88sge5JddvyN3OFIV+VOuZm98TrBGH8L56owCQSghHFipLmbiLW1wxyzeKhNDY2GC",
"NJo2tvwvDR2xanpHkiWn7dIGxguP6ctyV/aK+uHn2jdPspZfXqu2qMpC2q4wss+XiWvuhyU+owgMm6J2SzC",
"yTRTfvtP0fN7SkS/yIpp2dCLyQ05uh7oYvXezAp/ptAn4b/ceOlb4ZWfqB1LLOM1O57zKXOISASJ4OToQE3",
"wPMz0hfgy2w0NfoqSOQEetSfVSx+L8C7CFmc1CErD63ouIiFpWrF9hx+QX36bgrg/enSicj9SHGlLxtxl/m",
"HZ0XODyATuE08sQjG2Ey8gipRomneendG641koCYlc4n9bYW0d6EyQ6aZQ32P/jaMsHqul5vEEMaALmheY5",
"sUCZbOiUoyH1XDzTpPg8pAUQzb2uUszHaayBoGI+U0KZ4HDObC8WWt381XEgQ4nfLbAkHzk6tpwEhA0KtVY",
"pGfTI/GS7R2wBsNRZ2/cr84RAmKi1/YED5ywk5Kgx7Zxi3GgVxj/82XqYdLB5c5BG/2g4QRdCQZv93P32M4",
"4tBHgssQddgDxBYGitouLMUN7lmOFTjMb6Lob0XR+RCpaxAwQR7v8Eh/QbQA1LQEjra56wQbouUZJU3Zl1k",
"zvd/stYaTliVdPvjkAtJcfqn4MRxd1pNoSVKeGmsdV6mVlFfiNBmYv3V1Q7OwWFLkgbOKS+9cnfJiXmBf1X",
"rXwjaYqaeKfhjU1nm99g4/0o8iv3QOUTsdmcIV2whn8NlYHtMS8Dj0Fk7+MgahvLXcFQr0z1njsRMD62Ncr",
"dEiUZKzpZVVjiaehFNEgQQKZ1Tfp4JI/FVjm8lHKOf6Y6hfCJvuLgI8rJAeew86U7jtWkWPyfOr5+mVU2wA",
"AAAAAAAAASEfgaLc09/b7HVeJPU832bNat+GKe8Avnag5Sii4t4bV79kin4xAcGa1bsMV94BfLvKOq6LDd6",
"lRwuTMA1a2ORmFBKS0YkHPqt+zRT4ZgeDimFMtiS12Fsxq3YYr7gG/hC097pza9kk3d4oPFqE2Zn8wamehl",
"cGQooTJmQesbHPqwynxsJibhVmZnhA641uqEd5+eI3XrFw/LPDTLxTb9XdrELuYICwDxDGnWhJb7CyMdkcy",
"pW8b2vNGLVUE+tpKuwHNPbPOLbwIW3rcObXtk0AcmrSOgRplbu4UHyxCbcwmqfR3m3aaOpXzQ5YRDVoV3bS",
"j/qY5reNECZMzD1jZ5gxOc1u4bC4QvxTEujIX7j/3UyTShSMZydmhqnkn4G5gkeZKEZDUmZYivP3wGq9ZuW",
"r7HZitm65PFct3/wwOb99djJeXuzqYKe7WIHYxQVgGppHAHoZ1r/CIY061JLbYWcAkrt2Tgi+vc34ZPBn57",
"4A7OflUrs0YduaNWqoI9LWVrsq6wr/AQmMdkA0jNbuCTFXX7UuCj3W6eyVj4CBMAhMzYoOIl3j15YA4NGkd",
"AzXKyH/UAao3wjy3T75mC6IDrP8IXg68lvRaTFLp7zbtNHUEFQmHgdnDgyrnhywjGrQqYqBnRJQuQ9zR+tC",
"lHlWD85m9MM2pYXQF44GxP02Wa/mrxlFX+qKcDxic5rZw2VwgUNsG3sftq9Z+KYh1ZS7cfzZuaB3SGiuJhT",
"Tf/Fhh66bNcz+U71UcULJDVfNOwN3A+gS1m/n0KjZJXgJ6c4/qGQEZ4hLEux3vL+tsuWZ4akZnrIzR0Uyds",
"NT2OzBbN12fnLHbWOwDqmlBBXimSjoHiglCmM79DvB8uhgvL3d1MFPyX89HwEHHpdytQexigrAMlOqhhNW2",
"R/onsBZlX82H1W/39g3o+XAjEMecaklssbNYgHwC/lhGRevay+N0I4Zqo50ri8MXcZyNb6UgYdQGNcUoRUj",
"W4PHDdnLyqVybMew+NRLB66/GGqeIIgxCzrIf78/CZPX6RelclXWFf4GFxhTSle3ItXIwOiAbRmp2BZlyZ/",
"su3ULyb8E9TM9XOTJAiXqsp+ANxbb2SsbAQZgEJr4NJqj2rPPQDVeRSXzXM/9FEHEhy+PECWvi/4ppILOgI",
"6Uf4t4URFaQ/6gDVG+Eedi4SGvjW3OPBQzrlUVi3mxNSwv98lYpmv4RvBx4Lem1tlZcdM8ZHkOYpNLfbdpp",
"6tDjMrfa7p4cY7mFVlCVXjMr/mU+56GpxVTOD1lGNGhVHInvMfEAn6Ov01jQe3tfjOeUuLjMT6h6yWY2E26",
"M39OBIdZ72bgoJTJ7YZpTw+gKejyB8uT3H/ytkPQnyQoOxuXXFE9+PvkwVo2jrvRFOR8eykPGQ3HO6TA4zW",
"3hsrlAeH8tBVaGTrbLJZrk3P2OmYNieoxryXlv/FIQ68pcuP+0FfCDfWhPCQdPR2L3E48mTwinCkAneNBh+",
"imh4uQPeSm9yclV0PiPmud+KN+rOKDSoJ5AaJ/PVg8UPb7OpmK1R1Pd1nmSlUP0CWo38+lVbLxOil9E3aKa",
"krwE9OYe1TPa++ScUSoixWmhU33bUeLqIeazFWxlFRxe1tlyzfDUjBaRORp6xCN6pcuO+/C/41XtjG6TR4s",
"Uo8N+4DjlSGMKizkAUFJ8lPw4Y7ex2AdU03AkV9lvM6Ml6ZlnFMZS1yCh3od8cWYg1hKEMJ37HeD5WsPQ9U",
"wpFw90MV5e7upgpjx2vjZZ3pdQjywJ19OlV3/Ha+m/ZJGgibhbg9jFBGEZ8BxjsHIwlu9DRtRR+EtWwAsBN",
"DlPf6E2JfO6ku281p9ttFr6Woghad7u7RvQ8+FGlqkNc2fHFrBLHa6Nwf67UwNaTuV2ykylsAD5BPyxjIr4",
"RxlsS4V7fNa1l8fpRgzVnvJ3r15y+yMtqMBO1Ak7DGXvICZjPcz6Gt9KQcKoDWpSmKopdZz6nOHCHcj/5zq",
"zqYX9oEjTzUWHd3ML6hC67M8wk2NdJE0afGokgtdfjTU0LcTqYGt6w04RRRiEnGU/BlalcDOoksm1DBKRud",
"NS5v1L8vkO56UQ07l8Uqwk0rmb/pw6GxAlTyikK9uRa+VgYOPLsyZfEpYf06HUh8rTBleUQbww/iTw5M72X",
"bqF5N+siRY1DbETKYJ7mJ6vcmSAyjx49hhGk3Z5Zs8Xkj1TWTEhL38lCaSv7JWMgYMwCUyk0mzpNAT+uheI",
"2wi+fz6VX887YAlLyWNxPbXLq4i+yjl6VaMcvEk8iiDiQpbHiRPCZwIqIfN+5b1XaE2AZr919RCIJTdSSIN",
"GSj/EvSmIrA4N36wKHX9aIP9RB6jeCPNouLFvH+r/BdviBo6VkT8qk6Xm5iKlyNwKGNYri8S82UJfNkM88E",
"sv8QWBoraLiwC5QmHKAb989pew72GjfAtf3/cPCRRI/KlsrbjonjM8hiTqWIApB8twW9oy54iSCuATndKPP",
"6b9FqDHZW613T056ICFBgLpys/GcgutoCq9Zo4168UXHkqQPW9cJJ1lir91KLxMKlF9SaicH7KMaNCq4Nv/",
"2jtcJ1xTgUg7sSfncxvGqFMGExCFNTQm+KTQZyx9c8aQE+SQ2s4pcXGZn1D1hm6RGS6rpwP5Xvt+jz5mk7E",
"ZGxY4CpFlAkOs97JxUUpKBEyfBUWmvGT2wjSnhtEVLLEiXBCyJuOf65W9msnmzNesddUt/RE6AAAAAAAAAA",
"BdMxKlPcGwcbpmJEp7gmHj51U270ZD0ZIfXt/MpSIa8kJtzWmY46qDpTj7ht6gexH4C+kj42HLYFUvKcEYY",
"+3QCBw7ZCWiXaHvSQ2LY+GMM7J6Hy5eIDxCSnH2Db1B9yIXQuSogIBHU/AX0kfGw5bBrSTA4vsCJrDBzcXa",
"YuADlZz+139fIbPke6vhkBliYnYmmPM1JKPSB96TGhbHwhlng6AIs/oDqRZk9T5cvEB4hDnGLPmBgcj1lOL",
"sG3qD7kXJ0f6+R0JeNC6EyFEBAY+mc7fa9DzAP9eLvDPX36H0t9aPIXLiYETGMdoXnaQjlVRs6QU4meIlJe",
"kIHO2W5t4etDsOSKsnbm9Tbjin7WS//Q5dKgLQpQ+M9lbDITPExOyrZdGEDgV0nUww52tIRqUPEQP1znWHF",
"X68JzUsjoUzzuEUJ4mzRIO/BkERZvUHUi1bcgPDyMbiXKN56uArpyk8/kr4RRZmmU0ZH86qUCVI30Qs3A9t",
"5PiuKMXZN/QG3Yt19suSycdt+pKj/X2PhLxoz5Dv2LJFDBk3mwb7USTHeWqoFF5s5XcIjf0isSqmpprQzjA",
"UF2cW633q8PbsZTBbINniU9GkgCrHjNS8l+dRuJq/xhmqJuHJYrQvOklHKqk/hz2fdIaa2NjSC3AyxUtKhe",
"EZ1Q8E+zvSETjaLc29PY8iKn8QDA1MaHcckFZP3N41RA41a45sr81P5xaI76fPkHz1s7UuF753KcNc823GL",
"Coa0fnOrHZdhz4RGzWuUO3aDQO+CG/gnD1YNVFOLDEOYGsn9HPtgX+YYM7XkIxKH8VT3HKtTfpuIgbqnesO",
"K/x/Nfg41s+bjRPc/QBPLb6oTu/vpXLsDtmputlKNK/fS/SJy+8Jbm86DIIizOoPpFpRsTBp184UK7bkBoa",
"RjcW569cUI6xMdchG89TBV05TeBvAxmRqj+MJ/JXwiyzMMpuhpuIuEQ2C6lmtCw3ybEmKBJ4ZqM+t+fvjyy",
"9Hie4oab74PeK0L5gYOxkkN7srYyNmKjaShurTUoF/AH3AqQLA3EwS2P1osrEkR/v7Hgl50Xl06V4jyMmgn",
"iHfsWWLGDLDEs0UWEqoQ242DfajSI7zMwUfU56JPoLUUCm82MrvEIljOxnlC19hcWjSOgZqlAEsW8CfO6sk",
"cMsO9nB96PXilj3k1UApRZP61OHt2ctgtqfn80jkCtDHQLLFp6JJAVUdgdcCn4ixJOWKPiF86XpEuLkshEE",
"oyjVf7BprB2sbpwLfCM46qqvWr/vILMGojWbyyNqJ/Gk9FxWd7Ga6KuyFSK7+w4frXPSwpRfgZIqXlO2WBU",
"VZSyflCsMzqh8I9ndX8CEPIslGBqQjcLRbmnt7+RBiEWZbywoeRVT+IBgamEN2Rlsd2arpu32veP64YYnmT",
"r3dw3nR+AEbizKFOgBqXCiZl7j7sBvxDFl1Q/mWq6w/S9B+OCbaS2p9Pzh790gWWW+aBbpHOe5Shrnm24xZ",
"s2GUHNsaPChUNKLznVntugkHsFagmF3LZe61bjl6eO443afLBLvIn9+IkSRC+BkNgruDgX85qXx6sGqinFh",
"iHCeDeAehmdJtwNZO6OfaA/+d5VxN2huzjjDBnK8hGZU+bfKOChzYJU+Kp7jlWpv03deUqkBnWkSsL59DY4",
"Q7j8xyrFHGufo/vZX5Zyn/ue4vyMp1jMJ4Xl5NK2xZzXylZRAYfvzwvRUU901IE7b+xIaqflq2iz9091J1s",
"5VoXr+XD0ahMFWfD+boE5ffE9zedLUghXouHW4FGARFmNUfSLVFN1c96N74xKJiYdKunSlW/1Fzd5NcmScH",
"WppUcD1SR1ppiPFN/OI2vTy+Hgu/M6TgD6y7Nn6D1YzmqYOvnKbw0dW7JpJdFoE2gI3J1B7HE2uzn2zp33d",
"ik7h2Twq+vALOi2TqN38McyneUgVxPN3hdO1AoEz9bZDZyYBCt/9LIIT6kueKPvtRY6+kCMx9KsM+nLat8b",
"yassaXX44S3VHSm6RNKy8c4aN88XvEaV8wMSHCaWFUnoBAdjJIbnZXxkYrAVrLS5Z2N8xUbCQN1aelkWd+g",
"TAUF9RpbJei03XctDRfhQfutGzF0wqz6Kj3vVeOOaFNlTYNJiMdYa9uNCuWfi5zClP1m+eZe0XlFbZKdcRI",
"V0Aod/oEPEO+Y8sWMWRhcKzG9teBFYYlmimwlFCH2xaIjI1V4Pa3/420FLfF0+rMnxEpdnWiDZmp/m81pDB",
"QqrtbUvQUQaihUnixld8h9ZJA3YxUb1ASx3Yyyhe+wk/0ZJf31g6z4tCkdQzUKAO/47bQMRWYcli2gD93Vk",
"ngBYWSmkqX+ZH9jnu5qfYy8aC9aRyUN4KAR+hf89J0UxIa201W77XjY586VIPgsRhYwglGJt1wqCklXHDJm",
"zN5u3hvYmym8snKgGSLT0WTAqrdV5nqeFKy2zoCrwU+EWNJZzG9oAPQ0zjKFX1C+NL1iJcmb+fFE0X5cHNZ",
"CINQlGstQEutvpEkGtVLoo5d8O96iHiwK2AxXwtvLYbEJnKOmTIelGEbsz7oXveRWYJRG80DxIP8v5CrvOS",
"RtRP503ouuaKntsQSyl9BqU6VJ3MBPxyaXDAasrFO+89q31zxYNym/Hh6YTDQrQvYuJiaMvYdVuuqPafzRm",
"yxvpzS4bCX/uyNjnfccSePFIZnVD8Q7O9JtXXxAtFcnq7gQx5Eko0M89NRu3lTPX0AAAAAAAAAAF6RFQ9Ib",
"Nu/17G8RsP+b0uJIKlJi5K09K5jeY2G/d+W8PJsgs6RBCl50sXLRQOw3SdD0MQNb2tiN1RlQl7dZhlpxXBN",
"FrG9puDl2QSdIwlSvnTMC9VP0u2ZNxzP2CC5j8emCcCQTGIwToagiRve1sQQF7WGU7INe26oyoS8us0yMDn",
"fi/TWFo25GXbCf0SieeeIY803KHnGwMuzCTpHEqSeWqYGcivJGxd6D0/5uX3vSesaQLHVplBZ/K/G4merKw",
"dtusmqC3CUjk0TgCGZxGDQ3AaPafUf3/ef1ktkmnS9qQ7DRCz2rwIgLmoNp2Qb9n6/fwLvCMBJ3FCVCXl1m",
"2WCwYAGMRlA2gvhKU+6i/QuVXA8QPLnL5FyM+yE/4hE8yyi+Yu35J9MpYJQwjx2K7j7E0XNdBrwB+sE8Esn",
"qP18tZXlRG/EJsM8tUwN5FaSN2IkWQKsOkmIRWeJxqFVIuob9pzJ6Tn5VZLWNYBiq02hzEcgjyrHlh6y+F+",
"Nxc9WV+xpSoKNo43oZUnjywYxORw72PbETl3ioxybJgBDMonBQgozDwteUn7LKppGgMzmipW7j0nIoD01ha",
"w6z5sSME7bPS/A037r8VIdholY7F8FDIyThhCAhLorz0NCHe/v2HVeVk1VgzRn/H7/BN4RgJOi7+oLln1bL",
"LihKhPy6jbL5jA/HLqG7XRvEJZVMRRZgDGBg1p5eII/FsJTnnQX6V1IU0aRPHsy4sFz79i36YYWn+L61/+F",
"XamP9U9RrDdQ0tFkWl7kW4ttWETzF2/JP5kG1eYYJ6XkJiGWNtwqyo9Efwcj02KmVPv2J4qa6TTgD6i2n5W",
"hWDuw1gngl05Q+/mImPWYBjwgRgG4XNGNrpSyXylJ3sXCTw14apkayK0kbyb7jBWAwf/Qr9slXAtTSyTxSj",
"BTQz+Qm+FdhdUQjZ3gv8yQ2ljhRl827DmT03Pyq2h9LJybHykUTz78WJZwQnYRr+lX3hyZyZiPQB5Vji09x",
"h5VER3i9oJk8b8ai5+trjpgqhXD83YRs0ADXEhhwuXt0RZTAA0ZWsqSxpcNYnI4lAPTmEUOqYcdI3rRzpwd",
"c0Oyb96G8MbMU6XaWNVCy7cNNM9XnS4QCIQUZh4WvKT82oVzEV7Qf0P9xqPVU78UIaNXttob08+eKncfk5B",
"Be2p05gqc2C2g1QpZdZ43JWCcVMhgkX9JuyPd6MnY9NsP14N53Ne8t9RopDoME7HYvwr6qxkc+bRktXOLsF",
"VyJtBBLRqlWjpKC/49DRDcafgGhWOcBdMhlN066rysmqoGac60LbmV4mqycZNuaVHvBdkTzf98XqdpAqxE3",
"9UXLPu2WBpOwBhkl23nG9DCfrfztKJFQddx/59vHcxhfjh0DdvpkvBrNzxhAFa1s7vzMQ5rNOsirvx5YrCL",
"YgIHtfLwBH88kxK6upzfwCyEpzzpLtK7chWyM6FCCQT7NRt6KtC98KWkDnVivGZPgufesW/TDS3cdsu+J7/",
"WklVWYvesLWJmC8d3+ORBudl1eAj6C0l5kCvpHfVDJaIvosm0vMi3Ftv8WKGzgNvNZNsbcXeNtKYGhYpkeM",
"XYfbkMqs0xTkrJTVI72D4GJhLyQixtuFWUH4kcvXi3HfjENpWd0f6WanDCywzE8d4Gq33sTxQ102nAH7LeA",
"TqbBRugO/6ocxCXr1Rlb718WPt068eAV3fOhi/HmRFCeIbq9HgQMesxDXhAjE6g/j5FFJszaeMu+kh78FE3",
"cjv1ABcr7r5SkryLhZ8a4MOHs8PpRKXw1DI1kFtJ3q5FJzrYN5JhJ2WOc1OlJpV59Jt8G8n9Kl63S7gWppZ",
"IACZet17KTfeJBvf+1Vj5A9eX4vGdNCK8qSid83I84vX3uYj8OlA5Sn6ZIbWxwo2+IAg0uvmuVgEHS+R+9M",
"E9Y1na8XG8rebc0PpYODc/UiiOa003f1OJl558+LEs4YTswO3tvmSNX1NJzUT37x/rpxdcUfinczAYMB+BP",
"KocW3pujpQz4nCAxeeuPXpp4jQxuT8odSGO746jcehtRRmCaf3g/WINdVnWdMBUK4bn7SIqUUEkzos2nQ0S",
"keDD5F3/U4OE74uIhkDaoy2mABoytIQyOKlIdukLlCWNLxvE5HDKtJggU6g/z0OUMWnYOos7HQUkZpBWUIQ",
"6RvSinTk75mTX4a3VVeBZ7fdI5F7HVK2zZl3rFquPEs3ZIun5o09bk0g35rHPlOQaaJ6vOl0gEET5i6ByMf",
"uvY7pbZH9ekM09K05rNzJLcrQL5yK8oP+G6pryLfTMJDn6jUerp34pQqQcUqTvEvL9LTz77WSARglzre7iL",
"OydtlTuPiYhg/bUCn8rKWnvLWuDX4Jg4n2Zn93Ol2+qEUIgfyF9ZDxsGQwhsGhrdADCs6iQwSL/knZH9gHU",
"Lbf+rfjRQgTpupHGmo/TEeby/R0lBvO4r3lvqdFYYq2gMQNybkh1GCZisX8VFuQNKSrdpKqfxKRgoU8QXsF",
"VsW/pI8vh5hZhq+RMoIO4h3SkrCB7PDGn3e0nss/IbzbI4m/eFHcRibfggNbUPk8You/Iug+BxjgLpkMou3",
"WYqR6pC0Rgyr/qzm0GKwuo4XvbYk5H0BdoW3IrxdVk4zbKZySNub9cJt3Sot4Lsid4TMetlmdpmPFsbuQd9",
"d1sr/1761WZBtOIvqsvWPZtsdYvviAQmrYOXw8XaZsIAvoBngJm02TZRQAAAAAAAAAAdw3hKr0Wpj7uGsJV",
"ei1MfZkXI3/HO+pD3DWEq/RamPqrOGWBSUw+xDIvRv6Od9SHRSKn1DNhcrnT+J8PupPpwaT1fiUHhU//PeJ",
"dWsC+pbxK77xwfagDgg/NG6ROyXE7eMD6jvPf1wXh19nxNOQ9RpbaONuJ8pt4zWKoRycBCre6b0ltmhesiS",
"N4ahJdLEbKVHWLOOA64PQRVyzs01uSTWZazcZuTTRz/03uual23jCIQA+TFGB4Dh6aN0idkuN2aZfWYiCER",
"UjwgPUd57+vC4eNFDdaqQk1wq+z42nIe4y1olLJ1N7dsiy1cbYT5TfxW7iQnK7zkc/xVsfXHSTNWoZbJv2g",
"MmtkH0wFgmcJgSdoQeSo2h8nGS1jQ3zpflWgWm6iVlRo857DeYEpk1MZ3bR0YAMuRb/jIq5Y2Ke3JJtVo7n",
"yGqGCpcy0mo3dmmjmu7l7p2CMztj+m9xzU+28YYmWPVnu+xpfEIEeJinA8BxnjP8MlNZWIjw0b5A6JcftSz",
"mOuoczYdPSLq3FQAiLkKUjTO/9Hi2u4AHrO85/XxeXDAoRc2n5KQ4bKW60UhNqeRbIRAlEtVTvzPCfgLYuL",
"JjBEbU9oIgSAdYyyvqbYlF229PgR43EbzP5dDR07LbWRPSVHsn6EOjd47ZhDsH6q6ruV0uz11yV4q2OrztI",
"mrWVoG+Fhl48iwy3TPpBZdbIe7qt0PxzcPY+mAoEzxICT0mV6y5yBKRx0ILIUbU/TjKnjyl7CCnoDDFVEaC",
"B23N0RljwijzN1UrfT9P1+/Y/CahCMt9G4Jk37WCVC3WB646abXQhyJdNsAN6V14PrKfzdHe2dLK6Ac0vzy",
"boHEmQAljCx8KhXzY8wdXkvWZk3H+22AWX23J6QfP6okPoEwj4hPdDaVUFrsYd4GAWkj5EhWrtgTwvKOK7/",
"De556baecOLOljNG8zf/RIte7Lc9zW+ZSCamGHhk4AgAj1MUoDhOVcP3GbvlkcHzhj/GSitrUS5FR4zlbsL",
"ehP7SXgmbFfvZPaoUpt68dH94YstXEEbkorsagfhV72sz87N09I2zxW4wyz5byBpKyHUD4aoG4NoVtnurBU",
"NJVbAA9Z3nP++LrcON10h6RgQLhkUIubS8lNZFPUIW8RUbRw2UtxopSbUazuz9tWzgOryLJCJEohqqYUhca",
"OvnsyX3pnhPwFtXViplAAVvHv7ZjCDI2p7QBElR47CQMZWtxsCrGWU9TfFonWhhL5IIWOc7LanwY8aid+bu",
"0brMgwv4Q1hfjC7/rSZemyfGgboEqfje7xlwdP45JR2XU98xV7a0VT6m0+kLGOmWRux8rKKXT9OOM41iWAe",
"SEPZ5IifxiCvyIoHJLbtX9jFay2ZoEthQdJIUl6boSI236l4440HHHP9DqzQ7HWlBPDvhm3605ud58z5qsE",
"52OrqLdMX15/mfDAVCJ4lBJ4LPfQiIzOioJIq113kCEjj5Sc2d1ke7t2gBZGjan+cZNcIcInXaTpaTh9T9h",
"BS0Bk5ErLcrUR2J2KqIkADt+foFafDar6hQdaMsOAVeZqrlfu9AT/EjA2rvp+m6/ftfxLJkkfBSvvZLFCFZ",
"L6NwDNvJ4iFlDDWlVGxUr1PuSQOKcZfXGUEMqgXX0h/GsMJQlQoRZ4wfh/kam1nOeRNfpbTGmrYzvBoMO2D",
"ffuxN1ParvRwGpuKRXyQXp5N0DmSIAUpk6z6hISGO7CEj4VDv2x4x4lur/6pykaCq8l7zci4//WmKFFw3h7",
"BbLELLrfl9IIbvOoECvNSvI1m0t+DAcnE+msz9T4Xb/pjfBCK+SyFuRRx8aBEOiOHUVNWdHdbUT4mXrdeyk",
"33AL9JlCENdh1DyER1C7Bgu32T/OWXHpMqsuTxBL2jhYyMfeYnwmS+Zs8K68bo2ajA8U/JYTzqybJIOMSAF",
"lffFHah06NpkOT+NdbeQkMt8lgLQAR6mKQAw3M3CZuyGRZlTa4euM3eLY8O2RNZ52M7KTCcMf4zUFpbies8",
"HxntTP23cis8Zip3F/QFJt1Ml2Gxyk1lBKgf/nfqOmjlgqLo0dSjf8b9ZdM7l9RyJ9fYxZ2pkVCAA+uk7xD",
"mXWEpVrJJLn9KQlaRiaNtCEejfCyfBVOenZunpW2eK+mQeo0YezgVcIdZ8t9A0lYHirjYYlZ0aEKoHwxRNw",
"bRNaX+JuwhoO+sst1ZKxpKrNu/PHOWDOySgAes7zj/fV33Ck3FhenbY24dbrpC0jEgGRCPkP/Elx5cMihEz",
"KXlpys/yW5xs0OZsijqEbaIqdrFJQs7C54P5FP/M+CCbJScJPLSyj96MqK95fG1+EHY4croEJ9FV37fj8q3",
"S3Y2DGb4x1ZhyyCqWGHQdR4MG0AbFt2UNLEN5iW8M8N/Atq6sMs+IlW/zByOUikBKnj39s0lJOAAxeFQ82A",
"GR9T2gCJKFwum/kuWhHSOHIWBjK1uN/kRZKsxu8gJb8tccLhJU3EYxr1aBV/1T4HRniXCZB8M9tx/D39yuT",
"Kz/tjbTBPLi8TzOfHxBW21XeQajjY+h/Yq6fukiyghyHFRazgl27AHBlyKEpjNFjmfS6ltX/b8euhGSEfi4",
"FpErWTvk9GBKP3aaQ65bJeOw0N+LcarrGSANHPM7Ba6wr6iqfQ3n0hZxtWkFR0iXv/4TLM2YuVlFbs7vtdI",
"WHOzhX6ccJxrEsE8CZGRttYEZwKQhrLJET+NQeeLU+OsKSt/AAAAAAAAAADlUZmWzImUFsqjMi2ZEyktL/K",
"ru1WavTuUR2VaMidSWnEW/Mz+rsZMXuRXd6s0e3e7tc7hZ73vYSiPyrRkTqS0zd5TIqjHMKLiLPiZ/V2NmQ",
"d9YQ8x1BmPvMiv7lZp9u5ZmTZ4muBi+HZrncPPet/DkzoEVQPzS9U7jQIxmrqRXd7cm6dWMwVL8S4wHAOpu",
"HAUf6mKzyAsZq/KZ2uoncMHSpv+/WQUVxFlaVVGMY7qKoA4zND9B348EwLIhf70Nen2U1ETMn2h/9mh+qhn",
"5xzEPPBjPqtuiNKHRa3fzNNns2IUNEkAWvOlTeaf8lXATp6otwZkmUnaiHYaBWI0dSO7k0uc9Pj8t628uTd",
"PrWYKllnortlh756A4l1gOAZSceEHDPmuytvl9yj+UhWfQVjMza/Lg1PIzNpelc/WUDuHD7vEVkCcshMZlD",
"b9+8koriJxZ2RtBaE6NMrSqoxiHNVVL4MzGq6VQUMAcZih+w/8eOUgATc3hmhuTZcHU67Psuaoxp7FYkYm8",
"Ic0NX433JvLYmWs6PtVD93Z0GIJnOjgvDyB+59QYXSqE3NQJAX7yZH2IsmyyXJdh2UYzefKgRZSgElUcQYI",
"gkSvu//KU5I/f0rqZlyfG6tp8V+ovfimRAgUDjErNC/QHjv8mpBhtW0l3q0DBq08+TOHp52cO8yfQmL2BAr",
"3RQtUTQSvsaLftm+oVTYnblYieRPg+MYJ680Y9rFhUMViWQ7ZQ8rrkPjkNTwSU31ccXAjryhXKF+CO/ZKec",
"6+kwuv4GWLZQXGkRLbgNr8kwoYhs07bzJybaVprN4+q+ShLP268cwAX/S2QIEUnZnJOD/Ul7wqn62hdg4fW",
"XsGO23/mgl2ia2AOGUnMpPYNBb07LMkKG3695NRXEXNPGNhX9jIU+LOyNoKQnVoB59RTMbL4X6UpVUZxTiq",
"q3H0zI8JsT69XgZnNFwrg4a7V/6ikKIXkADiMEP3H/jx5bOp1TuWbOfKQQJubgzR3C8Qm/iihUXK8b2Y/g+",
"5vPkU7AFowzAo7zseqtOWqpXU3k8zRVojAcJl+v2kPZ7uo4CrZDLxF3q1r1nPiaSNx45KCFYfaARTmNkyUk",
"pr9xhNPGPL3Kd+jFsTkWBn8uQxYPbA+fE+baV2TXU3EFnQSheoJK6GlVneAYfWBT3Aw2M6YoecqwxK9yzKM",
"JrPlQMtpC9hA1lZirmyAJOo4gwQBInlwjF0wJmQn153/5WnJH/+uyZmA2ut6+iU1M24PjdW03GFVC7yvsLF",
"4r9Qe/FNiRAH7sntPcQdBigcYlZoXqA9zU37wKTXNCt2+DUhw2rbSpOprLcP409cvFsHDFp58mdZCp6alvB",
"mcQ5POzl3mD+F6x6ir7sRq5PE7AkU7osWqCG9kIIiAoK+mgheY0W/bd9/Wcf1iTb5yVCrbE7crETytfr12B",
"Al0OQmwPGNE9abMcORaBvfXw8n7GPDoIrFshwJMlo2RkwmCrKHlNch8clrV9YNQe14XX14JKb6uOLgRp11P",
"2x0a3RQNcI5CO0irtjQk6CeIas6zv9hCyV0MYf1GjCSs7i4E+OhhVxS3wX8gkTUxcQTjGiUayZuf0YW1a+O",
"d/fpip9BuR1N87yJbAps+BxqKkXlnnrX7sGREH8jQTK/WAfc9rdXiQqW5rtLWDZsWw9wd8LMIEOppMsiWHE",
"bpvg9Xe7R5Q14VT5bQ+0cPp0Ep82PZIgosvYMdtr+NRNXp5XgFnehBewSWwFxyk5kCUPCl71D2nImsWks6N",
"lnScPg8LokUPNfUNr07yejuIq1i2156yosnJp5xsK+sJGnfyhfVHI5BbHEnZG1FYTq0CHMCCPZDX7GDj6jm",
"IyXw/3rbzoOQB5X60PYPGrZV41jpoml/BXeGXWJew5HQESkTmwql9GMzTBY159ZMOtw3zkyzsCmJ/lLLx08",
"ax1yY/YU+G3yi77qYgJrV/bevRkp144Gb0hxkL3BofTE8yQKAPpEpV1l6IOU7P8Qk4SPPnuNGkEKEkO375s",
"1s6GpFi1SoNDiOD/apMa2ieimpUxUoMdsuT8zgN000UNLlIjVR4nqphoNHhnOHfwdr8P/fnPynfj+Wmmy+m",
"aL1wzx0udg27AyXWhEK+lPpqFnbBEoGgRzRDb1h+STkGVrxF48sQktXo6Vx6p9gLlINSAJSxo9VinQcZDd1",
"rTCP/+DO2aDLn8EGtKi8E+n6xKyZaSU1u4xmlc0PQIaZ6WMeMaWuU/9GLedlw8vg3SMoSYiwc7kyWPAw3NY",
"WChA99bsgfPjfdpK7QnQanWxU977mupuILKglS5/u/e2fikBOFBJXA0rs7wDtRjFm+c6KBUOrQt6gIfHdOv",
"8kuxMDlNixA45VxmU7lkhX6DB1R16T//yo8d4IYN8GqM6UbSoF2o1UZHq4TKqUdAACHwtuz5Ha7XGnUoG0S",
"aO5F8Lho9FMKEW9LDTFfgLREdtJh+cbB3XfWlzHG8nyDIs8OXQ5rPeHd5bXoV8DuX4j8LISfWa80M6DCkuS",
"HWSpmuVv+LB4YSJmT4Et1tcv2zIp5J70sipxH+h9uKbEiEhLjhgLhKGNw7ck9t7iDsM640KTbcBrxpQOMSs",
"0LxAe7VpXTocNdRtmpv2gUmvaVZ/ym8XhSb9QOzwa0KG1baVCaHy1EpcIoMmU1lvH8afuMMCwPnTTwuueLc",
"OGLTy5M+d5peOeHtw2bIUPDUt4c3iV0Wlo+FoWfQAAAAAAAAAAH+du6PRNu0K/jp3R6Nt2hWBp8zkcls3H/",
"x17o5G27Qrg+hVLZftWSECT5nJ5bZuPn3SImo0gIM0+OvcHY22aVeHdme+XICEXQbRq1ou27NCeUwQ+f/tX",
"kgEnjKTy23dfHsDiTAaWzB2+qRF1GgAB2mFOf53uTbqY/DXuTsabdOuj0oCmMtbPqQO7c58uQAJu3Fwdd9o",
"NuSxDKJXtVy2Z4VzP+wWjYCKj/KYIPL/272QjQWbUS7tUJoIPGUml9u6+Xeh3oVG7Vfz9gYSYTS2YOyJm6n",
"C5YCN5vRJi6jRAA7Si9QwCwA249gKc/zvcm3Ux3XuR0yjWznNizzkL2f8f2n0oV+MtsqSY3UGk2jEkaV8Cp",
"soyxWnSHZ3SQqhISfLQgjUsQLwESZIiXN95oJKEVf27sZFU3z8XXPXODLqShY+DEqDkTt8+zSN7U91SSfMK",
"/Jw9NaYESEhj6LWvKyRohXwP20ffadPH3GYofsP/HgADgUaWN7KlQp7610UfZGsxwR25resp0HNhdEqU978",
"dtL6TJHwD8qb2Iees5o7Shjs+AMIOep89eZ5pMTdmCfC+QY5f35JES/zgwCBCfAnxZD8nTqqIREomn069k5",
"TSh+FAqdN7YJ88o9/dW+HtvxxuwDo1CRnypyxgU8YwBWRq67+0qNjxKdGpBZ5yF/O+P/SaeRz/B/OEtjoQ7",
"8YbZUlx5feBLu8o8jN6gwm0YgjS/mVkZ1yWRWm8xQ2UZYrTpHsa6vqNfp4fObukhRCQ06WhZEPr+GSeHuPE",
"KhjBeAjTJBvNdimMRWhmhLn+swFlSKubXpBb9Sjz6Ts3Y2Lpvj4u5NANih3zhWx5q5xZNSVLHyZM8rHBaPB",
"dhiUBiN3+PZpZwm9gKbOG2Ma25/qkk6YV2VGJElDeHVd5OHorTEjQkKbfFMO4BWvSB5FrXlZI0UrYdgW2og",
"VqCHgf9o++k6fPp/iYZ0reHI04jBD9x/48QCdrfhUzs4cChwKNLC8lSsVY5ePE22jxh+dRSxwqQSAu+LYl9",
"N4Mm2xY39bNwppWq4c4uCU21+3pGEwwv7v3zSQHq15XT7p2ZqfCrW5TLLuheCXDhqdhAOPZa7wbSSy6ewaM",
"0vO9YQE5puUhyqH3zP55Ak8iVbp3vOZ2x7jYmldx+ZGpUCzX7DNZ+FppMEEh9IYfNIHEDJq2G2SlUuzaVMV",
"Eg8u6GJfvh+TqOIMEASJAOw1Wa/BMmQKked7xfWy5z7uesBmJIQKNG/dDIJW3z0rEEC3IYfp0CGVeUlWPt8",
"6Qurk8vXv6ddIa0M+EZ2y4FcU3oWyTIQNXWkMp9h4BI5pFpEce6kyY2OXNtCf22lUfOirazwKX7l2R2EH58",
"/XJpE4/LxEHuHLm7lbcKBsuvyExsbLA72MEY67FOlpiQySusSJUspYOn+wRS6eLiphSK86syWN+1elpb+K2",
"/pCYU/GwBdgWZNXosxBsKy94QyV0z4tFx4wOnjZQ/81dAS6++08Yo7X1YwW573FQjOn1yH4wlj5kHbhzPK3",
"tr7c1br1P8grBX8EjBg1SYzJm3bXLyo2EXI4p+HCIEvDUFKTYUEUNF7r8UJXrB61+ScVMAybAcpknLbhOnY",
"LT11iwVgMnGgwwNliiTpxYrFnFYb7YUZ9zvquJSpXq3ezKIxPHtcoQ8y1N+zP4cVJTRL7CL268lYyj0CrbI",
"wfXMxd48ioK1n4s8BYa3kdtPIyZ5SPC0aD7U36LyzacG7nMCgNRu7w7dNPtbblP8YA2c4SegFNnTfGsY/Bo",
"pyr2sw0tj/VJZ0wr0srhHb0q92lyoxIkobw6rq1EfMxV8YHsMjD0VtjRoSEt15q+LJwaY42+aYcwCtekUlk",
"Hb8RHbObPIpa87JGilZDF+FQY3BnXMKwLbQRK1BDvS2WF8AdvUnA/7R99J0+fb9iD94lq9N3PsXDOlfw5Gh",
"BWHiZhsYJYsRhhu4/8OMBu/w9Te7GDgs6W/GpnJ05FEXGSgpNq9QeOBRoYHkrVypHidPDqB26IMYuHyfaRo",
"0/ubOkhAtwYDVRGM+4AS/ZQy6FdBvQGTRJryK4/6JCA1bQvwNcc3TuXK1tITZH9G1o0vCalZbCgGJTV1Zx5",
"Jm3fSzK7dI1r1p3qfMTpYyZsBTWbqgGXa9dHlfJZOIv9GoBKFTfQf7ChwtVhv0rykIEPyobRogbdOk1q7yK",
"bGkv3irUITHPuBkzIKHPdoMbQgrt3lLNIMp05+df9QHEuC/Q+CBoumdpGT3yXbqYDV2ZvsYiJyOujK9TzKO",
"A70r+9GTT3B1U6S/CidlZJKqelvRjuia5ET1Hwo6wpx7d2TWZua/Yg2Z65K9UpaVRRBDQL9eR2sz/swEZOp",
"tbazNXc0INhCT2iPSidOCO2iQrl2bTpiqluZA0t+VLICQeXNDFvnw/W4PncxSIkTUmUcUZIAgSAVnMfrrxP",
"v8L2GuyXoNlyBSn9gn9UlMlHiLP94rrZc99XVJMKTpTInfc9YDNSAgVaKNoO26ZPvhi3roZBK2+e1ahJ6Kn",
"fIiWXCCAbkMO06FDXx3V4N/lTEkq85KsfL51hFVuKQ+tiJiO1Mnl69/Tr5GrVF5IDuVCm9aGfCI6ZcGvqRv",
"HgetTLKUovAtlmQgbulchsMZIPvaw0hhOsfEIHNOthfUSID7x2SwiOfZSZcbGU7+CVYNTK8wubaA/t9Oo+F",
"HwG5xm5UXy0FfXeBS+cu2vymzbxYif5wAAAAAAAAAAAPUEklguvLBreZ584nqhVWuMmu66VB3l1vI8+cT1Q",
"qvWBzhrnNv+G72LooUmj+P+vX6mF36hX07Hdu6q2s1cYseD6jiC4+DSrA9w1ji3/Tes+nREYJlBhxGE0lMe",
"OB7JEXHWwUYWonl6/Uwv/EK/nHoISL2kbAMsju3cVbWbucSOGNjH7bUFdOWUQilX4RiR5WFGuw/PpCFYH+C",
"scW77b1jq5D4pQEffM2Z+0JMUWjozk3pCyzrmikmbMv9vVuWmSW42bTd4WRYi4qyDjSxE8yIXqBHVAvhDn2",
"kOBqujpw2fnAqU840bvfQQkHpJ2QZY9OWU6BH3uuh3SC7zORGqvXe9KmFhPxYNHDGwj9trC+gcxLQdg0W3W",
"KG6Egr95OgWoU8WmKXKVKbKw4x2H55JQ8o2iORHsPXzsD7AWePc9t+wy8TLu/JKb9tHXiUBpleK27Jat1mI",
"6zpmzPygJym0dGY5+DJ/BwjEDbVi3MVTFSENQGZOnX2pkfml8qaMihN5+VD2NNSkr8mS3GzabvCyLJIpaEg",
"23g6cL1fOX0h/UdIvosrNEFHtYkQuUCOqBfCHRNtUsfIrTDc+0xwMVkdPGz4mGJ4OafOrVaqCcLQ97k5VX4",
"bi7BNS/ughIPWSsg2w6NQkZ8qcsQCDWL6JcMis5YOtuhso5hBVhQPLviAEjU+F9s8seCox/+56VcLCfiwa7",
"o9RUJpQkKpT8fdH5PHP5FME89W833NUOIhpOwaLbrE4fW2pXqXSAUJ1JRT6ydEtQoAhhqLnbZ0pDLtoGLNw",
"eCn5v/pAnczIlIcZ7T48k4aUch1/ZhIvNv/+h5HcRjLT/wuDA4RojmML7hfrlZ80iwsbE3nNsYg7YJeJl3f",
"lld5gYo0FL8spbt0cKxJRanYg3ekvgAlEypC2ZbVusxDXdbaQsfzrPmvFzJj5QU9SaOnMbf3TF3zUWafhZz",
"2tKMm8pxRjr/UGdQwaasW4i6cqQhqfwSrTiZbycRNbxGndixdx5l9WMfM3p/JL5U0ZFSfy8r7h30E7m0KZM",
"nsx+2+Gp5nHf6OjQToXJLnZtN3gZVkkTN0mhc7Z6U/AR8g/msQMTzVDWme0eLw1PQvnw9h7kDXID3Wb9scg",
"XkSVmyGi2sVesZEJeYxmdePPNx4HLTk74zozjF8DhYuItqli5VeYbohDrfC9eSTefKY5GKyOnjZ8Uz2K9KA",
"ihhffp2RO9D9jFyqj9hbag9OqVAXhaHvcnaqhAXMwVWAtwS2bnYoBfcjB2J8P0i/BeLvQ17J2Q8JUuyXTIC",
"5tfuTQqUnOlDljAdBcTVzMF9+xbSLrS7K2gP9t1+/Z6pg8TwZbdTdQzCGqBq5xpQjinRoKB5Z9QQganwryk",
"u8ZJqYvYX4IAaNyu8phiwyT+1wHetz1qoSF/Vg03ACuFt3T5IS3jDT4Z4f5Ybd5MGo/qUXRzXF415vFRv3N",
"hHxFw+v6TaYI5qt5v+eopv3iOSGRWxgbg0QuXzAEVht2QLwHHrjmcPraUr1KpQNwD97A5WQZs4TqSij0k6N",
"bhB9Ouqy9H+vvk9RUFukCDu9m0MZOx76+Uhh20TBm4fBS7XJDaEhdQDlh6K3SHEClOZTsP4oy/BVDnKSCLl",
"7/OUNpoBB2cEOJKOU6/swkXmwoED5slAri3JVumHvqq72SlZuc6bKFASL+FwYHCNEcx/7iApVQ/6B3fU+4j",
"ngZsCJ9urwcIDcMkhY2JvKaYxF3FsMiYMJNrcervYR3vOzyiatIgOXkwk45wMQaC16WU9zAMR6ZBrjvbLo5",
"ViSi1OxAusxStvr6UPDRQMhYQK5NFdG1zMoYgPGlbMtq3WYhrutsPm5PPg8SWwey9KGEWw++B0fwM9x1sw7",
"zomTbzYIJ5vNXYEmVrLVWmNv6py/4qLOYLv41d9YUAyVQWCIJd0tNJaVcsFFZ9/1OKcZe6w3qGE7cwsyzI1",
"aoNNSKcRdPVYQ0IY7jT2HpNF+tFA31NfTRX1gQn60bSGHiJraI07oXL+LTshqLlKufiV8o9DHAtnqJqixma",
"e4Kyo8EXcNhDJfQj/FZUTkiK2DkfcO/g3Y2heSIxy3bWIo1WfZhOqX51XtZA2Wo/ddpyzKP/0ZHg3QuMnr7",
"1B+tyJ5IcrNpu8HLskiHt/vj73cCIwstFVm7aucj/imHAZXWV56Aj5B/NIkZnnWLAicaNan1+RHsnU4oTPU",
"MFX7FYJT8AemBltSXLhQBHIUEjLmSpGqQH+o27Y9BamUbeG7DM/HXG71vEGJsv9fuuf1ITNAPvGIjE/IYze",
"q8lyeBqjZxWsafbzwOWnJ2xmprrlZ0zsat5vFA7CDTI60T9dK0Dm+TEG1TxcqvMN0QmFdXkoGMbXsUzbko1",
"ZGIe+HJK3D7LTj4THMwWB09bfi5d6IAM4HdkzXtTLpnnDiTwOne4kkgiC6+T8mc6H/GLktLW8TGw3ZFx9G1",
"fpLek0Uy1ScmvGIjPzqdmoLQYQ8/z5kI2v7dv1RDA+ZgqsBaVLYHdDiEfOrpyKFjRiUjpOk9pfEeC58UgrE",
"/H6RfgvGCRDuN/HE+QXahr2XthoSpdlSr97WoOBkd2DEZD/wl/B0tNYtX0plMoFOTnClzxgKgppcOcV16ss",
"sqDeDLCWdXy98JcpMn2+ex10HPN0vYy7EiRV1vZWR72q7fs9UxeZ7aW9shjR/FLmclfTbzvppgZ9B5pKuQJ",
"tAMXONKEcQ7NQyp59hJ6oeFAAAAAAAAAAB5iTUwyPBuf/ISa2CQ4d3+i5teUFgRs4GPtkGYc+ViyfY/dKi7",
"FQy2faQq+OMEvzcELR/IK/TRSHX+FGi07BymDHchWHwcctmH7H8IJA3BWP5lSjjs/a8n+khV8McJfm+DwWD",
"AD/kQEAhaPpBX6KORcdMLoJ8Yze6Bb76IO//gePjmi7jzD44Hc33V6KsePYYK9ODYY+5T+Q7Z/xBIGoKxd1",
"DKIIDq7M78y5Rw2PtfT4VCoUAQCzEw9JGq4I8T/N6NGJ/QR+OSoQaDwYAf8iEgfwr0sNcCT197J+t4/PaeF",
"wKu3kg0BvBoiTWAGGwXQ+nwvLUopOctlgLffBF3/sHxe1ZJIb8Or47wzRdx5x8cD4lEIkEv73JwjWk9iQQb",
"ozj04Ai5zOvNR397VumU+n7GBvJj2VwKELl3IWh5wxLdVw6oXUkL4rMohTMDGVPzAKn8ujYpmwNu1viXKeG",
"w97+egR4c0XgH0eEKhUKBIBZiYHMMd7Ho5gwfg7DCmUwBIYn6OfephPFP9nGiqfnc4Px3CCucyRQQkggMBo",
"MBP+RDQHWPtjH3FC0//hToYa8Fnr6Hnd1RZ/XwwfZO1vH47T0vj8fjwTAdU1AEXL2RaAzg0X3ViKGg/I6ue",
"fiXaYsIX+YAcaJZQ/gxmYvq/Akb6YIY8mPJOdMZ7GdvLW56vdpa1xakW0p1KjSonT8FGi07hynktjAq5cvp",
"VuCbL+LOPzgemRIa0gbPVmESiUSCXt7l4GsAcbKWLoufGtN6Egk2RnFjWk8iwcYoDujBEXKZ15uPkUgkQlE",
"n9fCVZTuKetMkuOzsDrqyI0rHZ3dQ6uoy+UYe/mXaIsKXOe5C0PKGJbqvl8vlwk7V1NAcULuSFsRnUWXZjq",
"LeNAkuYfSRavXA2GYYfaRaPTC2GZPm+gplIQWY6m/POq3Ra+ebvMSaMsmmCeI18ar6Och2aa6v+qIoe/cQJ",
"5rKatgViBQKhQJBLMTAbYOwMoncqr/mGO5i0c0ZPp+R21IZPXdBbfISa8okmyYUeydbAtT1WZ/geQtaxUbY",
"5mlMO5I1KKfiRFPzucH575vNZsNxMZeQEFY4kykgJBFp3w2j4dBKbhgMBgN+yIeAYYUzM7Y46f/qHm1j7il",
"afpOXWFMm2TQBl7pHmw0t5UnuM3Krxd2LNmWoLPudzDi3HCEZy1U8Vsjsnazj8dt7XpUUmdM5KxUhHo/Hg2",
"E6pqBnBvKzqcrI32Mr7XuCPhmXGqLYS0rOd+iROYYbEt/EaeiwsyvaL6oWmWO4i0U3Z/jg6o27jccJh2tx0",
"+vV1roGEvjm2x0m1HkW1fkTNtIFMW9czCP+ImtO5MeSc6Yz2M+dTqdDbsO2sLXJS6wpk2yazEB+nOFjAuVH",
"2yDMuXKxZD5SFfxxgt8bOn8KNFp2DlND9j8EkoZgLMhtYVTKl9OtseRUZAJnvdLAN1/EnX9wPLm+avRVjx5",
"DMiU0pA2ercJLrAGUxW7DvU+BHlzumhL1NggrbCZqfIq9k3U8fnvPC8QaQAy2i6F0NKb1JBJsjOJNL8AU2p",
"zinca0nkSCjVEcvz2rdEp9P2O7ELS8YYnuK8KZgYypeYBUSQLf3PFoM9Uwi+rsOZhdqkFY4UymgJBEONHUf",
"G5w/juzSoosNmFNusrDvxz+kSPFzu6g1NVl8o23Z5XkHZWc8jz8y7RFhC9zRXX+hI10QQy3Fje9Xm2ta86f",
"Ao2WncMURQRc3c6McJU8jWntBnwe6jigdiUtiM+iQSlDFeV4od3Ksh1FvWkSXLM7KHV1mXwjwugj1eqBsc2",
"7YRblInHfsjD6SLV6YGwzSXN9hbKQAkxNXmJNmWTTBDTXV31RlL17v0wJLQmFDvrGxTwdwXVghTZ5iTVlkk",
"0TT/C8Ba1iI2zEa+JV9XOQ7b3i12U9g/6Suc/IrRZ3L9rARv2d3odBpUvdo82GlvIkMlSW/U5mnFtDh51d0",
"X5RtToOqG0Zjj/KsZX2PUGfjEvIHMMNiW/iNMwx3MWimzN8tbjp9WprXQM+I7elMnrugkeqgpX6ioD92uQl",
"1pRJNk2jbRDmXLlYMij2TrYEqOuzUX97hsxYhcxVUmRO56xUhCzbUX4vXDr7p0APLndNiXreyToev73nBa8",
"aMb4gpSrr1pMEjuhVRJRdCFresET3FSSBb+54tJlqIKxwJlNASCJZJUUWm7AmXdK+G0bDoZXcqzcudgtR+6",
"Nbi5ter7bWNSICrm5nRrhKqZnwPj9XC8vQEMUO96dltNQ92sbcU7T8rbTv9hSj2oMmL7GmTLJpAl+mhJaEQ",
"gd9LnWPNhtaypNX/LoG06qk7Nxn5FaLuxdtpe7RZkNLeRKhw86uaL+oWthK+56gT8YlU9GlzvhedaQqWJD+",
"MK4b29g7Wcfjt/e8obJs9ytHmcMqKTKnc1YqQlOgB5e7pkQ9V40YX5BSlXUuBC1vWKL7CqWfcz8As0iL3BZ",
"GD8hDJvStxU2vV1vrGtRMeJ+fq4VlX9cmz8e6NuQmXhP/D0pYmyJzDDckvonTW/o5B+xO56zQYWdXtF9ULa",
"noUmd8rzpSWVTnT9hIF8Qg3dJ/ELh5u6tGjC9Iqco60s+5H4BZpEXW4qbXq611Da9rk+djXRtyJPDNtztMq",
"PNdefiH87zGjCyq8ydspAtiVSPGF6RUZR3euJhH/EXWnKcxrXc0tbjjoxyyvx9BaavalYeP17EH1FEO2d+P",
"oLRVKIfs70dQ2ioAQYCQwQILnAEgS1AAAAAAAAUAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"AAAIAAAADAAAAEEtQAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIUAAAQZyRwQILFCRpb",
"nRBcnJheUZyb21TdHJpbmcAAEGwkcECC2Ioc2l6ZV90IGlkeCwgc2l6ZV90IHNpemUpPDo6PnsgdGhyb3cg",
"J0FycmF5IGluZGV4ICcgKyBpZHggKyAnIG91dCBvZiBib3VuZHM6IFswLCcgKyBzaXplICsgJyknOyB9AA=="
].join("");
function _base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes;
}
function getBinary(file) {
if (typeof Buffer == "function"){
return Buffer.from(binaryInString, "base64");
}
else {
return _base64ToArrayBuffer(binaryInString);
}
}
function getBinaryPromise() {
// If we don't have the binary yet, try to to load it asynchronously.
// Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.
// See https://github.com/github/fetch/pull/92#issuecomment-140665932
// Cordova or Electron apps are typically loaded from a file:// url.
// So use fetch if it is available and the url is not a file, otherwise fall back to XHR.
// if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
// if (typeof fetch == 'function'
// && !isFileURI(wasmBinaryFile)
// ) {
// return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {
// if (!response['ok']) {
// throw "failed to load wasm binary file at '" + wasmBinaryFile + "'";
// }
// return response['arrayBuffer']();
// }).catch(function () {
// return getBinary(wasmBinaryFile);
// });
// }
// else {
// if (readAsync) {
// // fetch is not available or url is file => try XHR (readAsync uses XHR internally)
// return new Promise(function(resolve, reject) {
// readAsync(wasmBinaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject)
// });
// }
// }
// }
// Otherwise, getBinary should be able to get it synchronously
return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); });
}
// Create the wasm instance.
// Receives the wasm imports, returns the exports.
function createWasm() {
// prepare imports
var info = {
'env': asmLibraryArg,
'wasi_snapshot_preview1': asmLibraryArg,
};
// Load the wasm module and create an instance of using native support in the JS engine.
// handle a generated wasm instance, receiving its exports and
// performing other necessary setup
/** @param {WebAssembly.Module=} module*/
function receiveInstance(instance, module) {
var exports = instance.exports;
Module['asm'] = exports;
wasmMemory = Module['asm']['memory'];
assert(wasmMemory, "memory not found in wasm exports");
// This assertion doesn't hold when emscripten is run in --post-link
// mode.
// TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode.
//assert(wasmMemory.buffer.byteLength === 16777216);
updateGlobalBufferAndViews(wasmMemory.buffer);
wasmTable = Module['asm']['__indirect_function_table'];
assert(wasmTable, "table not found in wasm exports");
addOnInit(Module['asm']['__wasm_call_ctors']);
removeRunDependency('wasm-instantiate');
}
// we can't run yet (except in a pthread, where we have a custom sync instantiator)
addRunDependency('wasm-instantiate');
// Prefer streaming instantiation if available.
// Async compilation can be confusing when an error on the page overwrites Module
// (for example, if the order of elements is wrong, and the one defining Module is
// later), so we save Module and check it later.
var trueModule = Module;
function receiveInstantiationResult(result) {
// 'result' is a ResultObject object which has both the module and instance.
// receiveInstance() will swap in the exports (to Module.asm) so they can be called
assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');
trueModule = null;
// TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
// When the regression is fixed, can restore the above USE_PTHREADS-enabled path.
receiveInstance(result['instance']);
}
function instantiateArrayBuffer(receiver) {
return getBinaryPromise().then(function(binary) {
return WebAssembly.instantiate(binary, info);
}).then(function (instance) {
return instance;
}).then(receiver, function(reason) {
err('failed to asynchronously prepare wasm: ' + reason);
// Warn on some common problems.
if (isFileURI(wasmBinaryFile)) {
err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing');
}
abort(reason);
});
}
function instantiateAsync() {
// if (!wasmBinary &&
// typeof WebAssembly.instantiateStreaming == 'function' &&
// !isDataURI(wasmBinaryFile) &&
// // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
// !isFileURI(wasmBinaryFile) &&
// // Avoid instantiateStreaming() on Node.js environment for now, as while
// // Node.js v18.1.0 implements it, it does not have a full fetch()
// // implementation yet.
// //
// // Reference:
// // https://github.com/emscripten-core/emscripten/pull/16917
// !ENVIRONMENT_IS_NODE &&
// typeof fetch == 'function') {
// return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {
// // Suppress closure warning here since the upstream definition for
// // instantiateStreaming only allows Promise<Repsponse> rather than
// // an actual Response.
// // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.
// /** @suppress {checkTypes} */
// var result = WebAssembly.instantiateStreaming(response, info);
// return result.then(
// receiveInstantiationResult,
// function(reason) {
// // We expect the most common failure cause to be a bad MIME type for the binary,
// // in which case falling back to ArrayBuffer instantiation should work.
// err('wasm streaming compile failed: ' + reason);
// err('falling back to ArrayBuffer instantiation');
// return instantiateArrayBuffer(receiveInstantiationResult);
// });
// });
// } else {
return instantiateArrayBuffer(receiveInstantiationResult);
//}
}
// User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
// to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
// to any other async startup actions they are performing.
// Also pthreads and wasm workers initialize the wasm instance through this path.
if (Module['instantiateWasm']) {
try {
var exports = Module['instantiateWasm'](info, receiveInstance);
return exports;
} catch(e) {
err('Module.instantiateWasm callback failed with error: ' + e);
// If instantiation fails, reject the module ready promise.
readyPromiseReject(e);
}
}
// If instantiation fails, reject the module ready promise.
instantiateAsync().catch(readyPromiseReject);
return {}; // no exports yet; we'll fill them in later
}
// Globals used by JS i64 conversions (see makeSetValue)
var tempDouble;
var tempI64;
// === Body ===
var ASM_CONSTS = {
};
function array_bounds_check_error(idx,size) { throw 'Array index ' + idx + ' out of bounds: [0,' + size + ')'; }
/** @constructor */
function ExitStatus(status) {
this.name = 'ExitStatus';
this.message = 'Program terminated with exit(' + status + ')';
this.status = status;
}
function callRuntimeCallbacks(callbacks) {
while (callbacks.length > 0) {
// Pass the module as the first argument.
callbacks.shift()(Module);
}
}
/**
* @param {number} ptr
* @param {string} type
*/
function getValue(ptr, type = 'i8') {
if (type.endsWith('*')) type = '*';
switch (type) {
case 'i1': return HEAP8[((ptr)>>0)];
case 'i8': return HEAP8[((ptr)>>0)];
case 'i16': return HEAP16[((ptr)>>1)];
case 'i32': return HEAP32[((ptr)>>2)];
case 'i64': return HEAP32[((ptr)>>2)];
case 'float': return HEAPF32[((ptr)>>2)];
case 'double': return HEAPF64[((ptr)>>3)];
case '*': return HEAPU32[((ptr)>>2)];
default: abort('invalid type for getValue: ' + type);
}
return null;
}
function ptrToString(ptr) {
return '0x' + ptr.toString(16).padStart(8, '0');
}
/**
* @param {number} ptr
* @param {number} value
* @param {string} type
*/
function setValue(ptr, value, type = 'i8') {
if (type.endsWith('*')) type = '*';
switch (type) {
case 'i1': HEAP8[((ptr)>>0)] = value; break;
case 'i8': HEAP8[((ptr)>>0)] = value; break;
case 'i16': HEAP16[((ptr)>>1)] = value; break;
case 'i32': HEAP32[((ptr)>>2)] = value; break;
case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break;
case 'float': HEAPF32[((ptr)>>2)] = value; break;
case 'double': HEAPF64[((ptr)>>3)] = value; break;
case '*': HEAPU32[((ptr)>>2)] = value; break;
default: abort('invalid type for setValue: ' + type);
}
}
function warnOnce(text) {
if (!warnOnce.shown) warnOnce.shown = {};
if (!warnOnce.shown[text]) {
warnOnce.shown[text] = 1;
if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;
err(text);
}
}
function _abort() {
abort('native code called abort()');
}
function getHeapMax() {
// Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate
// full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side
// for any code that deals with heap sizes, which would require special
// casing all heap size related code to treat 0 specially.
return 2147483648;
}
function emscripten_realloc_buffer(size) {
try {
// round size grow request up to wasm page size (fixed 64KB per spec)
wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16); // .grow() takes a delta compared to the previous size
updateGlobalBufferAndViews(wasmMemory.buffer);
return 1 /*success*/;
} catch(e) {
err('emscripten_realloc_buffer: Attempted to grow heap from ' + buffer.byteLength + ' bytes to ' + size + ' bytes, but got error: ' + e);
}
// implicit 0 return to save code size (caller will cast "undefined" into 0
// anyhow)
}
function _emscripten_resize_heap(requestedSize) {
var oldSize = HEAPU8.length;
requestedSize = requestedSize >>> 0;
// With multithreaded builds, races can happen (another thread might increase the size
// in between), so return a failure, and let the caller retry.
assert(requestedSize > oldSize);
// Memory resize rules:
// 1. Always increase heap size to at least the requested size, rounded up
// to next page multiple.
// 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap
// geometrically: increase the heap size according to
// MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most
// overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).
// 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap
// linearly: increase the heap size by at least
// MEMORY_GROWTH_LINEAR_STEP bytes.
// 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by
// MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest
// 4. If we were unable to allocate as much memory, it may be due to
// over-eager decision to excessively reserve due to (3) above.
// Hence if an allocation fails, cut down on the amount of excess
// growth, in an attempt to succeed to perform a smaller allocation.
// A limit is set for how much we can grow. We should not exceed that
// (the wasm binary specifies it, so if we tried, we'd fail anyhow).
var maxHeapSize = getHeapMax();
if (requestedSize > maxHeapSize) {
err('Cannot enlarge memory, asked to go up to ' + requestedSize + ' bytes, but the limit is ' + maxHeapSize + ' bytes!');
return false;
}
let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;
// Loop through potential heap size increases. If we attempt a too eager
// reservation that fails, cut down on the attempted size and reserve a
// smaller bump instead. (max 3 times, chosen somewhat arbitrarily)
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth
// but limit overreserving (default to capping at +96MB overgrowth at most)
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 );
var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));
var replacement = emscripten_realloc_buffer(newSize);
if (replacement) {
return true;
}
}
err('Failed to grow the heap from ' + oldSize + ' bytes to ' + newSize + ' bytes, not enough memory!');
return false;
}
var SYSCALLS = {varargs:undefined,get:function() {
assert(SYSCALLS.varargs != undefined);
SYSCALLS.varargs += 4;
var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
return ret;
},getStr:function(ptr) {
var ret = UTF8ToString(ptr);
return ret;
}};
function _fd_close(fd) {
abort('fd_close called without SYSCALLS_REQUIRE_FILESYSTEM');
}
function convertI32PairToI53Checked(lo, hi) {
assert(lo == (lo >>> 0) || lo == (lo|0)); // lo should either be a i32 or a u32
assert(hi === (hi|0)); // hi should be a i32
return ((hi + 0x200000) >>> 0 < 0x400001 - !!lo) ? (lo >>> 0) + hi * 4294967296 : NaN;
}
function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
return 70;
}
var printCharBuffers = [null,[],[]];
function printChar(stream, curr) {
var buffer = printCharBuffers[stream];
assert(buffer);
if (curr === 0 || curr === 10) {
(stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));
buffer.length = 0;
} else {
buffer.push(curr);
}
}
function flush_NO_FILESYSTEM() {
// flush anything remaining in the buffers during shutdown
_fflush(0);
if (printCharBuffers[1].length) printChar(1, 10);
if (printCharBuffers[2].length) printChar(2, 10);
}
function _fd_write(fd, iov, iovcnt, pnum) {
// hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0
var num = 0;
for (var i = 0; i < iovcnt; i++) {
var ptr = HEAPU32[((iov)>>2)];
var len = HEAPU32[(((iov)+(4))>>2)];
iov += 8;
for (var j = 0; j < len; j++) {
printChar(fd, HEAPU8[ptr+j]);
}
num += len;
}
HEAPU32[((pnum)>>2)] = num;
return 0;
}
/** @type {function(string, boolean=, number=)} */
function intArrayFromString(stringy, dontAddNull, length) {
var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
var u8array = new Array(len);
var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
if (dontAddNull) u8array.length = numBytesWritten;
return u8array;
}
var ASSERTIONS = true;
function checkIncomingModuleAPI() {
ignoredModuleProp('fetchSettings');
}
var asmLibraryArg = {
"abort": _abort,
"array_bounds_check_error": array_bounds_check_error,
"emscripten_resize_heap": _emscripten_resize_heap,
"fd_close": _fd_close,
"fd_seek": _fd_seek,
"fd_write": _fd_write
};
var asm = createWasm();
/** @type {function(...*):?} */
var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors");
/** @type {function(...*):?} */
var _emscripten_bind_VoidPtr___destroy___0 = Module["_emscripten_bind_VoidPtr___destroy___0"] = createExportWrapper("emscripten_bind_VoidPtr___destroy___0");
/** @type {function(...*):?} */
var _emscripten_bind_Crc64Hash_Crc64Hash_0 = Module["_emscripten_bind_Crc64Hash_Crc64Hash_0"] = createExportWrapper("emscripten_bind_Crc64Hash_Crc64Hash_0");
/** @type {function(...*):?} */
var _emscripten_bind_Crc64Hash_OnAppend_2 = Module["_emscripten_bind_Crc64Hash_OnAppend_2"] = createExportWrapper("emscripten_bind_Crc64Hash_OnAppend_2");
/** @type {function(...*):?} */
var _emscripten_bind_Crc64Hash_OnFinal_3 = Module["_emscripten_bind_Crc64Hash_OnFinal_3"] = createExportWrapper("emscripten_bind_Crc64Hash_OnFinal_3");
/** @type {function(...*):?} */
var _emscripten_bind_Crc64Hash___destroy___0 = Module["_emscripten_bind_Crc64Hash___destroy___0"] = createExportWrapper("emscripten_bind_Crc64Hash___destroy___0");
/** @type {function(...*):?} */
var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location");
/** @type {function(...*):?} */
var _fflush = Module["_fflush"] = createExportWrapper("fflush");
/** @type {function(...*):?} */
var _malloc = Module["_malloc"] = createExportWrapper("malloc");
/** @type {function(...*):?} */
var _free = Module["_free"] = createExportWrapper("free");
/** @type {function(...*):?} */
var _emscripten_stack_init = Module["_emscripten_stack_init"] = function() {
return (_emscripten_stack_init = Module["_emscripten_stack_init"] = Module["asm"]["emscripten_stack_init"]).apply(null, arguments);
};
/** @type {function(...*):?} */
var _emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = function() {
return (_emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments);
};
/** @type {function(...*):?} */
var _emscripten_stack_get_base = Module["_emscripten_stack_get_base"] = function() {
return (_emscripten_stack_get_base = Module["_emscripten_stack_get_base"] = Module["asm"]["emscripten_stack_get_base"]).apply(null, arguments);
};
/** @type {function(...*):?} */
var _emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = function() {
return (_emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments);
};
/** @type {function(...*):?} */
var stackSave = Module["stackSave"] = createExportWrapper("stackSave");
/** @type {function(...*):?} */
var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore");
/** @type {function(...*):?} */
var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc");
/** @type {function(...*):?} */
var _emscripten_stack_get_current = Module["_emscripten_stack_get_current"] = function() {
return (_emscripten_stack_get_current = Module["_emscripten_stack_get_current"] = Module["asm"]["emscripten_stack_get_current"]).apply(null, arguments);
};
/** @type {function(...*):?} */
var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji");
var ___start_em_js = Module['___start_em_js'] = 5261488;
var ___stop_em_js = Module['___stop_em_js'] = 5261586;
// === Auto-generated postamble setup entry stuff ===
var unexportedRuntimeSymbols = [
'run',
'UTF8ArrayToString',
'UTF8ToString',
'stringToUTF8Array',
'stringToUTF8',
'lengthBytesUTF8',
'addOnPreRun',
'addOnInit',
'addOnPreMain',
'addOnExit',
'addOnPostRun',
'addRunDependency',
'removeRunDependency',
'FS_createFolder',
'FS_createPath',
'FS_createDataFile',
'FS_createPreloadedFile',
'FS_createLazyFile',
'FS_createLink',
'FS_createDevice',
'FS_unlink',
'getLEB',
'getFunctionTables',
'alignFunctionTables',
'registerFunctions',
'prettyPrint',
'getCompilerSetting',
'out',
'err',
'callMain',
'abort',
'keepRuntimeAlive',
'wasmMemory',
'stackAlloc',
'stackSave',
'stackRestore',
'getTempRet0',
'setTempRet0',
'writeStackCookie',
'checkStackCookie',
'ptrToString',
'zeroMemory',
'stringToNewUTF8',
'exitJS',
'getHeapMax',
'emscripten_realloc_buffer',
'ENV',
'ERRNO_CODES',
'ERRNO_MESSAGES',
'setErrNo',
'inetPton4',
'inetNtop4',
'inetPton6',
'inetNtop6',
'readSockaddr',
'writeSockaddr',
'DNS',
'getHostByName',
'Protocols',
'Sockets',
'getRandomDevice',
'warnOnce',
'traverseStack',
'UNWIND_CACHE',
'convertPCtoSourceLocation',
'readEmAsmArgsArray',
'readEmAsmArgs',
'runEmAsmFunction',
'runMainThreadEmAsm',
'jstoi_q',
'jstoi_s',
'getExecutableName',
'listenOnce',
'autoResumeAudioContext',
'dynCallLegacy',
'getDynCaller',
'dynCall',
'handleException',
'runtimeKeepalivePush',
'runtimeKeepalivePop',
'callUserCallback',
'maybeExit',
'safeSetTimeout',
'asmjsMangle',
'asyncLoad',
'alignMemory',
'mmapAlloc',
'writeI53ToI64',
'writeI53ToI64Clamped',
'writeI53ToI64Signaling',
'writeI53ToU64Clamped',
'writeI53ToU64Signaling',
'readI53FromI64',
'readI53FromU64',
'convertI32PairToI53',
'convertI32PairToI53Checked',
'convertU32PairToI53',
'getCFunc',
'ccall',
'cwrap',
'uleb128Encode',
'sigToWasmTypes',
'generateFuncType',
'convertJsFunctionToWasm',
'freeTableIndexes',
'functionsInTableMap',
'getEmptyTableSlot',
'updateTableMap',
'addFunction',
'removeFunction',
'reallyNegative',
'unSign',
'strLen',
'reSign',
'formatString',
'setValue',
'getValue',
'PATH',
'PATH_FS',
'intArrayFromString',
'intArrayToString',
'AsciiToString',
'stringToAscii',
'UTF16Decoder',
'UTF16ToString',
'stringToUTF16',
'lengthBytesUTF16',
'UTF32ToString',
'stringToUTF32',
'lengthBytesUTF32',
'allocateUTF8',
'allocateUTF8OnStack',
'writeStringToMemory',
'writeArrayToMemory',
'writeAsciiToMemory',
'SYSCALLS',
'getSocketFromFD',
'getSocketAddress',
'JSEvents',
'registerKeyEventCallback',
'specialHTMLTargets',
'maybeCStringToJsString',
'findEventTarget',
'findCanvasEventTarget',
'getBoundingClientRect',
'fillMouseEventData',
'registerMouseEventCallback',
'registerWheelEventCallback',
'registerUiEventCallback',
'registerFocusEventCallback',
'fillDeviceOrientationEventData',
'registerDeviceOrientationEventCallback',
'fillDeviceMotionEventData',
'registerDeviceMotionEventCallback',
'screenOrientation',
'fillOrientationChangeEventData',
'registerOrientationChangeEventCallback',
'fillFullscreenChangeEventData',
'registerFullscreenChangeEventCallback',
'JSEvents_requestFullscreen',
'JSEvents_resizeCanvasForFullscreen',
'registerRestoreOldStyle',
'hideEverythingExceptGivenElement',
'restoreHiddenElements',
'setLetterbox',
'currentFullscreenStrategy',
'restoreOldWindowedStyle',
'softFullscreenResizeWebGLRenderTarget',
'doRequestFullscreen',
'fillPointerlockChangeEventData',
'registerPointerlockChangeEventCallback',
'registerPointerlockErrorEventCallback',
'requestPointerLock',
'fillVisibilityChangeEventData',
'registerVisibilityChangeEventCallback',
'registerTouchEventCallback',
'fillGamepadEventData',
'registerGamepadEventCallback',
'registerBeforeUnloadEventCallback',
'fillBatteryEventData',
'battery',
'registerBatteryEventCallback',
'setCanvasElementSize',
'getCanvasElementSize',
'demangle',
'demangleAll',
'jsStackTrace',
'stackTrace',
'ExitStatus',
'getEnvStrings',
'checkWasiClock',
'flush_NO_FILESYSTEM',
'dlopenMissingError',
'createDyncallWrapper',
'setImmediateWrapped',
'clearImmediateWrapped',
'polyfillSetImmediate',
'uncaughtExceptionCount',
'exceptionLast',
'exceptionCaught',
'ExceptionInfo',
'exception_addRef',
'exception_decRef',
'Browser',
'setMainLoop',
'wget',
'FS',
'MEMFS',
'TTY',
'PIPEFS',
'SOCKFS',
'_setNetworkCallback',
'tempFixedLengthArray',
'miniTempWebGLFloatBuffers',
'heapObjectForWebGLType',
'heapAccessShiftForWebGLHeap',
'GL',
'emscriptenWebGLGet',
'computeUnpackAlignedImageSize',
'emscriptenWebGLGetTexPixelData',
'emscriptenWebGLGetUniform',
'webglGetUniformLocation',
'webglPrepareUniformLocationsBeforeFirstUse',
'webglGetLeftBracePos',
'emscriptenWebGLGetVertexAttrib',
'writeGLArray',
'AL',
'SDL_unicode',
'SDL_ttfContext',
'SDL_audio',
'SDL',
'SDL_gfx',
'GLUT',
'EGL',
'GLFW_Window',
'GLFW',
'GLEW',
'IDBStore',
'runAndAbortIfError',
'ALLOC_NORMAL',
'ALLOC_STACK',
'allocate',
];
unexportedRuntimeSymbols.forEach(unexportedRuntimeSymbol);
var missingLibrarySymbols = [
'zeroMemory',
'stringToNewUTF8',
'exitJS',
'setErrNo',
'inetPton4',
'inetNtop4',
'inetPton6',
'inetNtop6',
'readSockaddr',
'writeSockaddr',
'getHostByName',
'getRandomDevice',
'traverseStack',
'convertPCtoSourceLocation',
'readEmAsmArgs',
'runEmAsmFunction',
'runMainThreadEmAsm',
'jstoi_q',
'jstoi_s',
'getExecutableName',
'listenOnce',
'autoResumeAudioContext',
'dynCallLegacy',
'getDynCaller',
'dynCall',
'handleException',
'runtimeKeepalivePush',
'runtimeKeepalivePop',
'callUserCallback',
'maybeExit',
'safeSetTimeout',
'asmjsMangle',
'asyncLoad',
'alignMemory',
'mmapAlloc',
'writeI53ToI64',
'writeI53ToI64Clamped',
'writeI53ToI64Signaling',
'writeI53ToU64Clamped',
'writeI53ToU64Signaling',
'readI53FromI64',
'readI53FromU64',
'convertI32PairToI53',
'convertU32PairToI53',
'getCFunc',
'ccall',
'cwrap',
'uleb128Encode',
'sigToWasmTypes',
'generateFuncType',
'convertJsFunctionToWasm',
'getEmptyTableSlot',
'updateTableMap',
'addFunction',
'removeFunction',
'reallyNegative',
'unSign',
'strLen',
'reSign',
'formatString',
'intArrayToString',
'AsciiToString',
'stringToAscii',
'UTF16ToString',
'stringToUTF16',
'lengthBytesUTF16',
'UTF32ToString',
'stringToUTF32',
'lengthBytesUTF32',
'allocateUTF8',
'allocateUTF8OnStack',
'writeStringToMemory',
'writeArrayToMemory',
'writeAsciiToMemory',
'getSocketFromFD',
'getSocketAddress',
'registerKeyEventCallback',
'maybeCStringToJsString',
'findEventTarget',
'findCanvasEventTarget',
'getBoundingClientRect',
'fillMouseEventData',
'registerMouseEventCallback',
'registerWheelEventCallback',
'registerUiEventCallback',
'registerFocusEventCallback',
'fillDeviceOrientationEventData',
'registerDeviceOrientationEventCallback',
'fillDeviceMotionEventData',
'registerDeviceMotionEventCallback',
'screenOrientation',
'fillOrientationChangeEventData',
'registerOrientationChangeEventCallback',
'fillFullscreenChangeEventData',
'registerFullscreenChangeEventCallback',
'JSEvents_requestFullscreen',
'JSEvents_resizeCanvasForFullscreen',
'registerRestoreOldStyle',
'hideEverythingExceptGivenElement',
'restoreHiddenElements',
'setLetterbox',
'softFullscreenResizeWebGLRenderTarget',
'doRequestFullscreen',
'fillPointerlockChangeEventData',
'registerPointerlockChangeEventCallback',
'registerPointerlockErrorEventCallback',
'requestPointerLock',
'fillVisibilityChangeEventData',
'registerVisibilityChangeEventCallback',
'registerTouchEventCallback',
'fillGamepadEventData',
'registerGamepadEventCallback',
'registerBeforeUnloadEventCallback',
'fillBatteryEventData',
'battery',
'registerBatteryEventCallback',
'setCanvasElementSize',
'getCanvasElementSize',
'demangle',
'demangleAll',
'jsStackTrace',
'stackTrace',
'getEnvStrings',
'checkWasiClock',
'createDyncallWrapper',
'setImmediateWrapped',
'clearImmediateWrapped',
'polyfillSetImmediate',
'ExceptionInfo',
'exception_addRef',
'exception_decRef',
'setMainLoop',
'_setNetworkCallback',
'heapObjectForWebGLType',
'heapAccessShiftForWebGLHeap',
'emscriptenWebGLGet',
'computeUnpackAlignedImageSize',
'emscriptenWebGLGetTexPixelData',
'emscriptenWebGLGetUniform',
'webglGetUniformLocation',
'webglPrepareUniformLocationsBeforeFirstUse',
'webglGetLeftBracePos',
'emscriptenWebGLGetVertexAttrib',
'writeGLArray',
'SDL_unicode',
'SDL_ttfContext',
'SDL_audio',
'GLFW_Window',
'runAndAbortIfError',
'ALLOC_NORMAL',
'ALLOC_STACK',
'allocate',
];
missingLibrarySymbols.forEach(missingLibrarySymbol)
var calledRun;
dependenciesFulfilled = function runCaller() {
// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
if (!calledRun) run();
if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
};
function stackCheckInit() {
// This is normally called automatically during __wasm_call_ctors but need to
// get these values before even running any of the ctors so we call it redundantly
// here.
_emscripten_stack_init();
// TODO(sbc): Move writeStackCookie to native to to avoid this.
writeStackCookie();
}
/** @type {function(Array=)} */
function run(args) {
args = args || arguments_;
if (runDependencies > 0) {
return;
}
stackCheckInit();
preRun();
// a preRun added a dependency, run will be called later
if (runDependencies > 0) {
return;
}
function doRun() {
// run may have just been called through dependencies being fulfilled just in this very frame,
// or while the async setStatus time below was happening
if (calledRun) return;
calledRun = true;
Module['calledRun'] = true;
if (ABORT) return;
initRuntime();
readyPromiseResolve(Module);
if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();
assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');
postRun();
}
if (Module['setStatus']) {
Module['setStatus']('Running...');
setTimeout(function() {
setTimeout(function() {
Module['setStatus']('');
}, 1);
doRun();
}, 1);
} else
{
doRun();
}
checkStackCookie();
}
function checkUnflushedContent() {
// Compiler settings do not allow exiting the runtime, so flushing
// the streams is not possible. but in ASSERTIONS mode we check
// if there was something to flush, and if so tell the user they
// should request that the runtime be exitable.
// Normally we would not even include flush() at all, but in ASSERTIONS
// builds we do so just for this check, and here we see if there is any
// content to flush, that is, we check if there would have been
// something a non-ASSERTIONS build would have not seen.
// How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0
// mode (which has its own special function for this; otherwise, all
// the code is inside libc)
var oldOut = out;
var oldErr = err;
var has = false;
out = err = (x) => {
has = true;
}
try { // it doesn't matter if it fails
flush_NO_FILESYSTEM();
} catch(e) {}
out = oldOut;
err = oldErr;
if (has) {
warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');
warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)');
}
}
if (Module['preInit']) {
if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
while (Module['preInit'].length > 0) {
Module['preInit'].pop()();
}
}
run();
// Bindings utilities
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function WrapperObject() {
}
WrapperObject.prototype = Object.create(WrapperObject.prototype);
WrapperObject.prototype.constructor = WrapperObject;
WrapperObject.prototype.__class__ = WrapperObject;
WrapperObject.__cache__ = {};
Module['WrapperObject'] = WrapperObject;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant)
@param {*=} __class__ */
function getCache(__class__) {
return (__class__ || WrapperObject).__cache__;
}
Module['getCache'] = getCache;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant)
@param {*=} __class__ */
function wrapPointer(ptr, __class__) {
var cache = getCache(__class__);
var ret = cache[ptr];
if (ret) return ret;
ret = Object.create((__class__ || WrapperObject).prototype);
ret.ptr = ptr;
return cache[ptr] = ret;
}
Module['wrapPointer'] = wrapPointer;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function castObject(obj, __class__) {
return wrapPointer(obj.ptr, __class__);
}
Module['castObject'] = castObject;
Module['NULL'] = wrapPointer(0);
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function destroy(obj) {
if (!obj['__destroy__']) throw 'Error: Cannot destroy object. (Did you create it yourself?)';
obj['__destroy__']();
// Remove from cache, so the object can be GC'd and refs added onto it released
delete getCache(obj.__class__)[obj.ptr];
}
Module['destroy'] = destroy;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function compare(obj1, obj2) {
return obj1.ptr === obj2.ptr;
}
Module['compare'] = compare;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function getPointer(obj) {
return obj.ptr;
}
Module['getPointer'] = getPointer;
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function getClass(obj) {
return obj.__class__;
}
Module['getClass'] = getClass;
// Converts big (string or array) values into a C-style storage, in temporary space
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
var ensureCache = {
buffer: 0, // the main buffer of temporary storage
size: 0, // the size of buffer
pos: 0, // the next free offset in buffer
temps: [], // extra allocations
needed: 0, // the total size we need next time
prepare: function() {
if (ensureCache.needed) {
// clear the temps
for (var i = 0; i < ensureCache.temps.length; i++) {
Module['_free'](ensureCache.temps[i]);
}
ensureCache.temps.length = 0;
// prepare to allocate a bigger buffer
Module['_free'](ensureCache.buffer);
ensureCache.buffer = 0;
ensureCache.size += ensureCache.needed;
// clean up
ensureCache.needed = 0;
}
if (!ensureCache.buffer) { // happens first time, or when we need to grow
ensureCache.size += 128; // heuristic, avoid many small grow events
ensureCache.buffer = Module['_malloc'](ensureCache.size);
assert(ensureCache.buffer);
}
ensureCache.pos = 0;
},
alloc: function(array, view) {
assert(ensureCache.buffer);
var bytes = view.BYTES_PER_ELEMENT;
var len = array.length * bytes;
len = (len + 7) & -8; // keep things aligned to 8 byte boundaries
var ret;
if (ensureCache.pos + len >= ensureCache.size) {
// we failed to allocate in the buffer, ensureCache time around :(
assert(len > 0); // null terminator, at least
ensureCache.needed += len;
ret = Module['_malloc'](len);
ensureCache.temps.push(ret);
} else {
// we can allocate in the buffer
ret = ensureCache.buffer + ensureCache.pos;
ensureCache.pos += len;
}
return ret;
},
copy: function(array, view, offset) {
offset >>>= 0;
var bytes = view.BYTES_PER_ELEMENT;
switch (bytes) {
case 2: offset >>>= 1; break;
case 4: offset >>>= 2; break;
case 8: offset >>>= 3; break;
}
for (var i = 0; i < array.length; i++) {
view[offset + i] = array[i];
}
},
};
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureString(value) {
if (typeof value === 'string') {
var intArray = intArrayFromString(value);
var offset = ensureCache.alloc(intArray, HEAP8);
ensureCache.copy(intArray, HEAP8, offset);
return offset;
}
return value;
}
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureInt8(value) {
if (typeof value === 'object') {
var offset = ensureCache.alloc(value, HEAP8);
ensureCache.copy(value, HEAP8, offset);
return offset;
}
return value;
}
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureInt16(value) {
if (typeof value === 'object') {
var offset = ensureCache.alloc(value, HEAP16);
ensureCache.copy(value, HEAP16, offset);
return offset;
}
return value;
}
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureInt32(value) {
if (typeof value === 'object') {
var offset = ensureCache.alloc(value, HEAP32);
ensureCache.copy(value, HEAP32, offset);
return offset;
}
return value;
}
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureFloat32(value) {
if (typeof value === 'object') {
var offset = ensureCache.alloc(value, HEAPF32);
ensureCache.copy(value, HEAPF32, offset);
return offset;
}
return value;
}
/** @suppress {duplicate} (TODO: avoid emitting this multiple times, it is redundant) */
function ensureFloat64(value) {
if (typeof value === 'object') {
var offset = ensureCache.alloc(value, HEAPF64);
ensureCache.copy(value, HEAPF64, offset);
return offset;
}
return value;
}
// VoidPtr
/** @suppress {undefinedVars, duplicate} @this{Object} */function VoidPtr() { throw "cannot construct a VoidPtr, no constructor in IDL" }
VoidPtr.prototype = Object.create(WrapperObject.prototype);
VoidPtr.prototype.constructor = VoidPtr;
VoidPtr.prototype.__class__ = VoidPtr;
VoidPtr.__cache__ = {};
Module['VoidPtr'] = VoidPtr;
VoidPtr.prototype['__destroy__'] = VoidPtr.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() {
var self = this.ptr;
_emscripten_bind_VoidPtr___destroy___0(self);
};
// Crc64Hash
/** @suppress {undefinedVars, duplicate} @this{Object} */function Crc64Hash() {
this.ptr = _emscripten_bind_Crc64Hash_Crc64Hash_0();
getCache(Crc64Hash)[this.ptr] = this;
};;
Crc64Hash.prototype = Object.create(WrapperObject.prototype);
Crc64Hash.prototype.constructor = Crc64Hash;
Crc64Hash.prototype.__class__ = Crc64Hash;
Crc64Hash.__cache__ = {};
Module['Crc64Hash'] = Crc64Hash;
Crc64Hash.prototype['OnAppend'] = Crc64Hash.prototype.OnAppend = /** @suppress {undefinedVars, duplicate} @this{Object} */function(data, length) {
var self = this.ptr;
if (data && typeof data === 'object') data = data.ptr;
if (length && typeof length === 'object') length = length.ptr;
_emscripten_bind_Crc64Hash_OnAppend_2(self, data, length);
};;
Crc64Hash.prototype['OnFinal'] = Crc64Hash.prototype.OnFinal = /** @suppress {undefinedVars, duplicate} @this{Object} */function(data, length, result) {
var self = this.ptr;
if (data && typeof data === 'object') data = data.ptr;
if (length && typeof length === 'object') length = length.ptr;
if (result && typeof result === 'object') result = result.ptr;
_emscripten_bind_Crc64Hash_OnFinal_3(self, data, length, result);
};;
Crc64Hash.prototype['__destroy__'] = Crc64Hash.prototype.__destroy__ = /** @suppress {undefinedVars, duplicate} @this{Object} */function() {
var self = this.ptr;
_emscripten_bind_Crc64Hash___destroy___0(self);
};
return NativeCRC64.ready
}
);
})();
// if (typeof exports === 'object' && typeof module === 'object')
// module.exports = NativeCRC64;
// else if (typeof define === 'function' && define['amd'])
// define([], function() { return NativeCRC64; });
// else if (typeof exports === 'object')
// exports["NativeCRC64"] = NativeCRC64;
// ESM-EXPORT-START (rewritten to `module.exports = NativeCRC64;` in dist/commonjs by copyJSFiles.cjs)
/* harmony default export */ const crc64 = (NativeCRC64);
// ESM-EXPORT-END
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StorageCRC64Calculator.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// @ts-expect-error the crc64 js file is auto generated
/**
* Class used to calculator CRC64 checksum
*/
class StorageCRC64Calculator {
nativeCrc64Hash;
static nativeInstance;
constructor() {
this.nativeCrc64Hash = new StorageCRC64Calculator.nativeInstance.Crc64Hash();
}
static initPromise;
/**
* Initialize environment for CRC64 checksum calculator
*/
static async init() {
if (!this.initPromise) {
this.initPromise = crc64().then((instance) => {
this.nativeInstance = instance;
return;
});
}
return this.initPromise;
}
/**
* Append data for CRC64 checksum calculator
* @param body - content to be append
* @param length - length of the content
*/
append(body, length) {
const ptr = StorageCRC64Calculator.nativeInstance._malloc(length);
StorageCRC64Calculator.nativeInstance.HEAPU8.set(body, ptr);
this.nativeCrc64Hash.OnAppend(ptr, length);
StorageCRC64Calculator.nativeInstance._free(ptr);
}
/**
* Complete CRC64 checksum calculating and get the final result.
* @param body -
* @param length -
* @returns
*/
final(body, length) {
const ptr = StorageCRC64Calculator.nativeInstance._malloc(length);
StorageCRC64Calculator.nativeInstance.HEAPU8.set(body, ptr);
const result = StorageCRC64Calculator.nativeInstance._malloc(8);
this.nativeCrc64Hash.OnFinal(ptr, length, result);
StorageCRC64Calculator.nativeInstance._free(ptr);
const resultArray = new Uint8Array(8);
resultArray.set(StorageCRC64Calculator.nativeInstance.HEAPU8.subarray(result, result + 8));
StorageCRC64Calculator.nativeInstance._free(result);
return resultArray;
}
}
//# sourceMappingURL=StorageCRC64Calculator.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/streamHelpers.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Signals the end of a stream by pushing null.
* In Node.js, this is required to signal the end of a Readable stream.
* @internal
*/
function signalStreamEnd(pushData) {
pushData(null);
}
//# sourceMappingURL=streamHelpers.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StructuredMessageEncoding.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const MESSAGE_VERSION = 1;
const MESSAGE_HEADER_LENGTH = 13;
const SEGMENT_HEADER_LENGTH = 10;
const FOOTER_LENGTH = 8;
const MAX_SEGMENT_CONTENT_LENGTH = 4 * 1024 * 1024;
var SMRegion;
(function (SMRegion) {
SMRegion[SMRegion["StreamHeader"] = 0] = "StreamHeader";
SMRegion[SMRegion["StreamFooter"] = 1] = "StreamFooter";
SMRegion[SMRegion["SegmentHeader"] = 2] = "SegmentHeader";
SMRegion[SMRegion["SegmentFooter"] = 3] = "SegmentFooter";
SMRegion[SMRegion["SegmentContent"] = 4] = "SegmentContent";
SMRegion[SMRegion["Completed"] = 5] = "Completed";
})(SMRegion || (SMRegion = {}));
class StructuredMessageEncoding {
pushData;
contentLength;
messageLength;
constructor(pushData, contentLength) {
this.pushData = pushData;
this.contentLength = contentLength;
this.contentOffset = 0;
this.currentDataOffset = 0;
this.segmentsCount = Math.ceil(this.contentLength / MAX_SEGMENT_CONTENT_LENGTH);
this.messageLength =
this.contentLength +
MESSAGE_HEADER_LENGTH +
(SEGMENT_HEADER_LENGTH + FOOTER_LENGTH) * this.segmentsCount +
FOOTER_LENGTH;
this.messageHeaderBuffer = new Uint8Array(MESSAGE_HEADER_LENGTH);
this.segmentNumber = 0;
this.segmentContentLength = 0;
this.segmentContentOffset = 0;
this.state = SMRegion.StreamHeader;
this.segmentCrc64 = new StorageCRC64Calculator();
this.messageCrc64 = new StorageCRC64Calculator();
}
currentDataOffset;
contentOffset;
segmentsCount;
messageHeaderBuffer;
segmentNumber;
segmentContentLength;
segmentContentOffset;
segmentCrc64;
messageCrc64;
state;
sourceDataHandler = (data) => {
this.currentDataOffset = 0;
if (this.state === SMRegion.StreamHeader) {
this.handlingMessageHeader();
}
while (this.segmentNumber < this.segmentsCount) {
this.segmentContentLength = Math.min(MAX_SEGMENT_CONTENT_LENGTH, this.contentLength - this.contentOffset);
if (this.state === SMRegion.SegmentHeader) {
this.handlingSegmentHeader();
}
if (this.state === SMRegion.SegmentContent) {
this.handlingSegmentContent(data);
}
if (this.state === SMRegion.SegmentFooter) {
this.handlingSegmentFooter();
this.contentOffset += this.segmentContentLength;
}
if (this.currentDataOffset === data.length) {
break;
}
}
if (this.state === SMRegion.StreamFooter) {
this.handlingMessageFooter();
}
};
handlingMessageHeader() {
this.messageHeaderBuffer[0] = MESSAGE_VERSION;
this.fillInt64(this.messageHeaderBuffer, 1, this.messageLength); // content length
this.fillInt16(this.messageHeaderBuffer, 9, 1);
this.fillInt16(this.messageHeaderBuffer, 11, this.segmentsCount);
this.pushData(this.messageHeaderBuffer);
this.state = SMRegion.SegmentHeader;
}
handlingSegmentHeader() {
const segmentHeaderBuffer = new Uint8Array(SEGMENT_HEADER_LENGTH);
this.fillInt16(segmentHeaderBuffer, 0, this.segmentNumber + 1);
this.fillInt64(segmentHeaderBuffer, 2, this.segmentContentLength);
this.segmentContentOffset = 0;
this.pushData(segmentHeaderBuffer);
this.state = SMRegion.SegmentContent;
}
handlingSegmentContent(data) {
const length = Math.min(this.segmentContentLength - this.segmentContentOffset, data.length - this.currentDataOffset);
if (length !== 0) {
const current_content = Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length);
this.messageCrc64.append(current_content, length);
this.segmentCrc64.append(current_content, length);
this.pushData(current_content);
}
this.segmentContentOffset += length;
this.currentDataOffset += length;
if (this.segmentContentOffset === this.segmentContentLength) {
this.state = SMRegion.SegmentFooter;
}
}
handlingSegmentFooter() {
const crc64Result = this.segmentCrc64.final(new Uint8Array([]), 0);
this.pushData(crc64Result);
this.segmentCrc64 = new StorageCRC64Calculator();
++this.segmentNumber;
if (this.segmentNumber === this.segmentsCount) {
this.state = SMRegion.StreamFooter;
}
else {
this.state = SMRegion.SegmentHeader;
}
}
handlingMessageFooter() {
const crc64Result = this.messageCrc64.final(new Uint8Array([]), 0);
this.pushData(crc64Result);
signalStreamEnd(this.pushData);
this.state = SMRegion.Completed;
}
fillInt64(buffer, offset, input) {
if (buffer.length < offset + 8) {
throw new Error("Uint8Array length is not expected.");
}
const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 8);
view.setBigUint64(0, BigInt(input), true);
}
fillInt16(buffer, offset, input) {
if (buffer.length < offset + 2) {
throw new Error("Uint8Array length is not expected.");
}
const view = new DataView(buffer.buffer, buffer.byteOffset + offset, 2);
view.setUint16(0, input, true);
}
}
//# sourceMappingURL=StructuredMessageEncoding.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StructuredMessageEncodingStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function StructuredMessageEncodingStream_isNodeReadableStream(source) {
return (source !== null &&
source instanceof external_node_stream_ &&
typeof source._read === "function" &&
typeof source._readableState === "object" &&
typeof source.pipe === "function");
}
/**
*
* To encode structured body for CRC64 content validtion in storage uploading.
* @param source -
* @param contentLength -
* @returns
*/
async function structuredMessageEncoding(source, contentLength) {
if (source === null) {
return {
body: source,
encodedContentLength: contentLength,
};
}
if (StructuredMessageEncodingStream_isNodeReadableStream(source)) {
const encodingMessage = new StructuredMessageEncodingStream(source, contentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
if (typeof source === "function") {
const encodingMessage = new StructuredMessageEncodingStream(source(), contentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
if (source instanceof Blob) {
const encoding = await BrowserStream(source, contentLength);
return {
body: encoding.content,
encodedContentLength: encoding.encodedContentLength,
};
}
if (typeof source === "string") {
const s = new external_node_stream_.Readable();
s._read = () => { };
s.push(source);
s.push(null);
const stringContentLength = Buffer.byteLength(source);
const encodingMessage = await new StructuredMessageEncodingStream(s, stringContentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
if (source instanceof ArrayBuffer) {
const stream = external_node_stream_.Readable.from(Buffer.from(source));
const encodingMessage = await new StructuredMessageEncodingStream(stream, contentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
if (source instanceof Buffer) {
const stream = external_node_stream_.Readable.from(source);
const encodingMessage = await new StructuredMessageEncodingStream(stream, contentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
if (ArrayBuffer.isView(source)) {
const stream = external_node_stream_.Readable.from(Buffer.from(source.buffer, source.byteOffset, source.byteLength));
const encodingMessage = await new StructuredMessageEncodingStream(stream, contentLength, {});
return {
body: encodingMessage,
encodedContentLength: encodingMessage.messageLength(),
};
}
throw new Error("The specified request body type is not supported for CRC64 checksum");
}
async function pump(reader, controller, encodingStream) {
const { done, value } = await reader.read();
// When no more data needs to be consumed, close the stream
if (done) {
controller.close();
return;
}
// Enqueue the next data chunk into our target stream
encodingStream.sourceDataHandler(Buffer.from(value));
}
async function BrowserStream(source, contentLength) {
const sourceStream = source instanceof Blob ? source.stream() : source;
const reader = sourceStream.getReader();
let encodingStream = undefined;
const stream = new ReadableStream({
start(controller) {
encodingStream = new StructuredMessageEncoding((data) => {
controller.enqueue(data);
}, contentLength);
},
pull(controller) {
pump(reader, controller, encodingStream)
.then(() => {
return;
})
.catch(function (error) {
controller.error(error);
});
},
});
const response = new Response(stream);
return {
content: await response.blob(),
encodedContentLength: encodingStream.messageLength,
};
}
class StructuredMessageEncodingStream extends external_node_stream_.Readable {
source;
encodingMethods;
constructor(source, contentLength, options) {
super({ highWaterMark: options.highWaterMark });
this.source = source;
this.encodingMethods = new StructuredMessageEncoding((dataToHandle) => {
if (!this.push(dataToHandle)) {
source.pause();
}
}, contentLength);
this.setSourceEventHandlers();
}
messageLength() {
return this.encodingMethods.messageLength;
}
setSourceEventHandlers() {
this.source.on("data", this.sourceDataHandler);
this.source.on("end", this.sourceErrorOrEndHandler);
this.source.on("error", this.sourceErrorOrEndHandler);
// needed for Node14
this.source.on("aborted", this.sourceAbortedHandler);
}
removeSourceEventHandlers() {
this.source.removeListener("data", this.sourceDataHandler);
this.source.removeListener("end", this.sourceErrorOrEndHandler);
this.source.removeListener("error", this.sourceErrorOrEndHandler);
this.source.removeListener("aborted", this.sourceAbortedHandler);
}
sourceDataHandler = (data) => {
this.encodingMethods.sourceDataHandler(data);
};
sourceAbortedHandler = () => {
const abortError = new AbortError_AbortError("The operation was aborted.");
this.destroy(abortError);
};
sourceErrorOrEndHandler = (err) => {
if (err && err.name === "AbortError") {
this.destroy(err);
return;
}
// console.log(
// `Source stream emits end or error, offset: ${
// this.offset
// }, dest end : ${this.end}`
// );
this.removeSourceEventHandlers();
};
_read() {
this.source.resume();
}
_destroy(error, callback) {
// remove listener from source and release source
this.removeSourceEventHandlers();
this.source.destroy();
callback(error === null ? undefined : error);
}
}
//# sourceMappingURL=StructuredMessageEncodingStream.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StructuredMessageDecoding.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const StructuredMessageDecoding_MESSAGE_VERSION = 1;
const StructuredMessageDecoding_MESSAGE_HEADER_LENGTH = 13;
const StructuredMessageDecoding_SEGMENT_HEADER_LENGTH = 10;
const StructuredMessageDecoding_FOOTER_LENGTH = 8;
var StructuredMessageDecoding_SMRegion;
(function (SMRegion) {
SMRegion[SMRegion["StreamHeader"] = 0] = "StreamHeader";
SMRegion[SMRegion["StreamFooter"] = 1] = "StreamFooter";
SMRegion[SMRegion["SegmentHeader"] = 2] = "SegmentHeader";
SMRegion[SMRegion["SegmentFooter"] = 3] = "SegmentFooter";
SMRegion[SMRegion["SegmentContent"] = 4] = "SegmentContent";
})(StructuredMessageDecoding_SMRegion || (StructuredMessageDecoding_SMRegion = {}));
class StructuredMessageDecoding {
pushData;
segmentsCount;
// private currentState: SMRegion;
currentOffset;
currentDataOffset;
messageHeaderBuffer;
messageHeaderOffset;
segmentNumber;
segmentHeaderOffset;
segmentHeaderBuffer;
segmentContentOffset;
segmentContentLength;
segmentFooterOffset;
segmentFooterBuffer;
messageFooterOffset;
messageFooterBuffer;
segmentCrc64;
messageCrc64;
state;
constructor(pushData) {
this.pushData = pushData;
this.currentOffset = 0;
this.segmentsCount = 0;
this.messageHeaderOffset = 0;
this.messageHeaderBuffer = new Uint8Array(StructuredMessageDecoding_MESSAGE_HEADER_LENGTH);
this.currentDataOffset = 0;
this.segmentNumber = 0;
this.segmentHeaderOffset = 0;
this.segmentHeaderBuffer = new Uint8Array(StructuredMessageDecoding_SEGMENT_HEADER_LENGTH);
this.segmentContentOffset = 0;
this.segmentContentLength = 0;
this.state = StructuredMessageDecoding_SMRegion.StreamHeader;
this.segmentFooterOffset = 0;
this.segmentFooterBuffer = new Uint8Array(StructuredMessageDecoding_FOOTER_LENGTH);
this.messageFooterOffset = 0;
this.messageFooterBuffer = new Uint8Array(StructuredMessageDecoding_FOOTER_LENGTH);
this.segmentCrc64 = new StorageCRC64Calculator();
this.messageCrc64 = new StorageCRC64Calculator();
}
sourceDataHandler = (data) => {
this.currentDataOffset = 0;
if (this.state === StructuredMessageDecoding_SMRegion.StreamHeader) {
this.parseMessageHeader(data);
}
while (this.segmentNumber < this.segmentsCount && this.currentDataOffset < data.length) {
if (this.state === StructuredMessageDecoding_SMRegion.SegmentHeader) {
this.parseSegmentHeader(data);
}
if (this.state === StructuredMessageDecoding_SMRegion.SegmentContent) {
this.parseSegmentContent(data);
}
if (this.state === StructuredMessageDecoding_SMRegion.SegmentFooter) {
this.parseSegmentFooter(data);
}
}
if (this.state === StructuredMessageDecoding_SMRegion.StreamFooter) {
this.parseMessageFooter(data);
}
};
parseMessageHeader(data) {
const length = Math.min(StructuredMessageDecoding_MESSAGE_HEADER_LENGTH - this.messageHeaderOffset, data.length - this.currentDataOffset);
this.messageHeaderBuffer.set(Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length), this.messageHeaderOffset);
this.currentDataOffset += length;
this.messageHeaderOffset += length;
this.currentOffset += length;
if (this.messageHeaderOffset === StructuredMessageDecoding_MESSAGE_HEADER_LENGTH) {
const currentVersion = this.messageHeaderBuffer[0];
if (currentVersion !== StructuredMessageDecoding_MESSAGE_VERSION) {
throw new Error("Unexpected message version");
}
this.segmentsCount = this.toInt16(Uint8Array.prototype.slice.call(this.messageHeaderBuffer, 11, 13));
this.state = StructuredMessageDecoding_SMRegion.SegmentHeader;
}
}
parseSegmentHeader(data) {
const length = Math.min(StructuredMessageDecoding_SEGMENT_HEADER_LENGTH - this.segmentHeaderOffset, data.length - this.currentDataOffset);
this.segmentHeaderBuffer.set(Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length), this.segmentHeaderOffset);
this.currentDataOffset += length;
this.segmentHeaderOffset += length;
this.currentOffset += length;
if (this.segmentHeaderOffset === StructuredMessageDecoding_SEGMENT_HEADER_LENGTH) {
const currentSegmentNumber = this.toInt16(Uint8Array.prototype.slice.call(this.segmentHeaderBuffer, 0, 2));
if (currentSegmentNumber !== this.segmentNumber + 1) {
throw new Error("Segment number is unexpected.");
}
this.segmentContentLength = this.toInt64(this.segmentHeaderBuffer, 2);
this.segmentContentOffset = 0;
this.state = StructuredMessageDecoding_SMRegion.SegmentContent;
}
}
parseSegmentContent(data) {
const length = Math.min(this.segmentContentLength - this.segmentContentOffset, data.length - this.currentDataOffset);
const dataToHandle = Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length);
this.segmentCrc64.append(dataToHandle, length);
this.messageCrc64.append(dataToHandle, length);
this.pushData(dataToHandle);
this.currentDataOffset += length;
this.segmentContentOffset += length;
this.currentOffset += length;
if (this.segmentContentOffset === this.segmentContentLength) {
this.state = StructuredMessageDecoding_SMRegion.SegmentFooter;
}
}
parseSegmentFooter(data) {
const length = Math.min(StructuredMessageDecoding_FOOTER_LENGTH - this.segmentFooterOffset, data.length - this.currentDataOffset);
this.segmentFooterBuffer.set(Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length), this.segmentFooterOffset);
this.currentDataOffset += length;
this.segmentFooterOffset += length;
this.currentOffset += length;
if (this.segmentFooterOffset === StructuredMessageDecoding_FOOTER_LENGTH) {
const crc64Result = this.segmentCrc64.final(new Uint8Array([]), 0);
if (!this.checkCrc64CheckSum(crc64Result, this.segmentFooterBuffer)) {
throw new Error(`Segment check sum mismatch, segmentNumber: ${this.segmentNumber}`);
}
++this.segmentNumber;
if (this.segmentNumber === this.segmentsCount) {
this.state = StructuredMessageDecoding_SMRegion.StreamFooter;
}
else {
this.segmentHeaderOffset = 0;
this.segmentFooterOffset = 0;
this.segmentCrc64 = new StorageCRC64Calculator();
this.state = StructuredMessageDecoding_SMRegion.SegmentHeader;
}
}
}
parseMessageFooter(data) {
const length = Math.min(StructuredMessageDecoding_FOOTER_LENGTH - this.messageFooterOffset, data.length - this.currentDataOffset);
this.messageFooterBuffer.set(Uint8Array.prototype.slice.call(data, this.currentDataOffset, this.currentDataOffset + length), this.messageFooterOffset);
this.currentDataOffset += length;
this.messageFooterOffset += length;
this.currentOffset += length;
if (this.messageFooterOffset === StructuredMessageDecoding_FOOTER_LENGTH) {
const crc64Result = this.messageCrc64.final(new Uint8Array([]), 0);
if (!this.checkCrc64CheckSum(crc64Result, this.messageFooterBuffer)) {
throw new Error("Check sum mismatch");
}
this.pushData(null);
}
}
toInt64(input, offset) {
if (input.length < offset + 8) {
throw new Error("CRC64 buffer error, something wrong with crc64 calculator");
}
const view = new DataView(input.buffer, input.byteOffset + offset, 8);
return Number(view.getBigUint64(0, true));
}
toInt16(input) {
if (input.length !== 2) {
throw new Error("CRC64 buffer error, something wrong with crc64 calculator");
}
return input[0] + input[1] * 256;
}
checkCrc64CheckSum(first, second) {
if (first.length !== 8 || second.length !== 8) {
throw new Error("CRC64 buffer error, something wrong with crc64 calculator");
}
for (let index = 0; index < 8; ++index) {
if (first[index] !== second[index]) {
return false;
}
}
return true;
}
}
//# sourceMappingURL=StructuredMessageDecoding.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StructuredMessageDecodingStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* To decode structured body for CRC64 content validtion in storage downloading.
* @param source -
*/
async function structuredMessageDecodingBrowser(source) {
/* eslint-disable no-unused-expressions */
source;
throw new Error("structuredMessageDecodingBrowser is only for Browser");
}
/**
* To decode structured body for CRC64 content validtion in storage downloading.
* @param source -
* @param options -
* @returns
*/
function structuredMessageDecodingStream(source, options) {
return new StructuredMessageDecodingStream(source, options);
}
class StructuredMessageDecodingStream extends external_node_stream_.Readable {
source;
decodingMethods;
constructor(source, options) {
super({ highWaterMark: options.highWaterMark });
this.source = source;
this.decodingMethods = new StructuredMessageDecoding((dataToHandle) => {
if (!this.push(dataToHandle)) {
source.pause();
}
});
this.setSourceEventHandlers();
}
_read() {
this.source.resume();
}
setSourceEventHandlers() {
this.source.on("data", this.sourceDataHandler);
this.source.on("end", this.sourceErrorOrEndHandler);
this.source.on("error", this.sourceErrorOrEndHandler);
// needed for Node14
this.source.on("aborted", this.sourceAbortedHandler);
}
removeSourceEventHandlers() {
this.source.removeListener("data", this.sourceDataHandler);
this.source.removeListener("end", this.sourceErrorOrEndHandler);
this.source.removeListener("error", this.sourceErrorOrEndHandler);
this.source.removeListener("aborted", this.sourceAbortedHandler);
}
sourceDataHandler = (data) => {
try {
this.decodingMethods.sourceDataHandler(data);
}
catch (err) {
this.destroy(err);
}
};
sourceAbortedHandler = () => {
const abortError = new AbortError_AbortError("The operation was aborted.");
this.destroy(abortError);
};
sourceErrorOrEndHandler = (err) => {
if (err) {
this.destroy(err);
return;
}
this.removeSourceEventHandlers();
};
_destroy(error, callback) {
// remove listener from source and release source
this.removeSourceEventHandlers();
this.source.destroy();
callback(error === null ? undefined : error);
}
}
//# sourceMappingURL=StructuredMessageDecodingStream.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/cache.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
let _defaultHttpClient;
function cache_getCachedDefaultHttpClient() {
if (!_defaultHttpClient) {
_defaultHttpClient = esm_defaultHttpClient_createDefaultHttpClient();
}
return _defaultHttpClient;
}
//# sourceMappingURL=cache.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/RequestPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The base class from which all request policies derive.
*/
class BaseRequestPolicy {
_nextPolicy;
_options;
/**
* The main method to implement that manipulates a request/response.
*/
constructor(
/**
* The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.
*/
_nextPolicy,
/**
* The options that can be passed to a given request policy.
*/
_options) {
this._nextPolicy = _nextPolicy;
this._options = _options;
}
/**
* Get whether or not a log with the provided log level should be logged.
* @param logLevel - The log level of the log that will be logged.
* @returns Whether or not a log with the provided log level should be logged.
*/
shouldLog(logLevel) {
return this._options.shouldLog(logLevel);
}
/**
* Attempt to log the provided message to the provided logger. If no logger was provided or if
* the log level does not meat the logger's threshold, then nothing will be logged.
* @param logLevel - The log level of this log.
* @param message - The message of this log.
*/
log(logLevel, message) {
this._options.log(logLevel, message);
}
}
//# sourceMappingURL=RequestPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageBrowserPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* StorageBrowserPolicy will handle differences between Node.js and browser runtime, including:
*
* 1. Browsers cache GET/HEAD requests by adding conditional headers such as 'IF_MODIFIED_SINCE'.
* StorageBrowserPolicy is a policy used to add a timestamp query to GET/HEAD request URL
* thus avoid the browser cache.
*
* 2. Remove cookie header for security
*
* 3. Remove content-length header to avoid browsers warning
*
* In Node.js, this policy is a no-op pass-through.
*/
class StorageBrowserPolicy extends BaseRequestPolicy {
/**
* Creates an instance of StorageBrowserPolicy.
* @param nextPolicy -
* @param options -
*/
// The base class has a protected constructor. Adding a public one to enable constructing of this class.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends out request.
*
* @param request -
*/
async sendRequest(request) {
return this._nextPolicy.sendRequest(request);
}
}
//# sourceMappingURL=StorageBrowserPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StorageBrowserPolicyFactory.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects.
*/
class StorageBrowserPolicyFactory {
/**
* Creates a StorageBrowserPolicyFactory object.
*
* @param nextPolicy -
* @param options -
*/
create(nextPolicy, options) {
return new StorageBrowserPolicy(nextPolicy, options);
}
}
//# sourceMappingURL=StorageBrowserPolicyFactory.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/CredentialPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Credential policy used to sign HTTP(S) requests before sending. This is an
* abstract class.
*/
class CredentialPolicy extends BaseRequestPolicy {
/**
* Sends out request.
*
* @param request -
*/
sendRequest(request) {
return this._nextPolicy.sendRequest(this.signRequest(request));
}
/**
* Child classes must implement this method with request signing. This method
* will be executed in {@link sendRequest}.
*
* @param request -
*/
signRequest(request) {
// Child classes must override this method with request signing. This method
// will be executed in sendRequest().
return request;
}
}
//# sourceMappingURL=CredentialPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/AnonymousCredentialPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources
* or for use with Shared Access Signatures (SAS).
*/
class AnonymousCredentialPolicy extends CredentialPolicy {
/**
* Creates an instance of AnonymousCredentialPolicy.
* @param nextPolicy -
* @param options -
*/
// The base class has a protected constructor. Adding a public one to enable constructing of this class.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
}
//# sourceMappingURL=AnonymousCredentialPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/credentials/Credential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Credential is an abstract class for Azure Storage HTTP requests signing. This
* class will host an credentialPolicyCreator factory which generates CredentialPolicy.
*/
class Credential {
/**
* Creates a RequestPolicy object.
*
* @param _nextPolicy -
* @param _options -
*/
create(_nextPolicy, _options) {
throw new Error("Method should be implemented in children classes.");
}
}
//# sourceMappingURL=Credential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/credentials/AnonymousCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* AnonymousCredential provides a credentialPolicyCreator member used to create
* AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with
* HTTP(S) requests that read public resources or for use with Shared Access
* Signatures (SAS).
*/
class AnonymousCredential extends Credential {
/**
* Creates an {@link AnonymousCredentialPolicy} object.
*
* @param nextPolicy -
* @param options -
*/
create(nextPolicy, options) {
return new AnonymousCredentialPolicy(nextPolicy, options);
}
}
//# sourceMappingURL=AnonymousCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/utils/constants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const utils_constants_SDK_VERSION = "12.4.0";
const constants_URLConstants = {
Parameters: {
FORCE_BROWSER_NO_CACHE: "_",
SIGNATURE: "sig",
SNAPSHOT: "snapshot",
VERSIONID: "versionid",
TIMEOUT: "timeout",
},
};
const constants_HeaderConstants = {
AUTHORIZATION: "Authorization",
AUTHORIZATION_SCHEME: "Bearer",
CONTENT_ENCODING: "Content-Encoding",
CONTENT_ID: "Content-ID",
CONTENT_LANGUAGE: "Content-Language",
CONTENT_LENGTH: "Content-Length",
CONTENT_MD5: "Content-Md5",
CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding",
CONTENT_TYPE: "Content-Type",
COOKIE: "Cookie",
DATE: "date",
IF_MATCH: "if-match",
IF_MODIFIED_SINCE: "if-modified-since",
IF_NONE_MATCH: "if-none-match",
IF_UNMODIFIED_SINCE: "if-unmodified-since",
PREFIX_FOR_STORAGE: "x-ms-",
RANGE: "Range",
USER_AGENT: "User-Agent",
X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id",
X_MS_COPY_SOURCE: "x-ms-copy-source",
X_MS_DATE: "x-ms-date",
X_MS_ERROR_CODE: "x-ms-error-code",
X_MS_VERSION: "x-ms-version",
X_MS_CopySourceErrorCode: "x-ms-copy-source-error-code",
};
const constants_DevelopmentConnectionString = (/* unused pure expression or super */ null && (`DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;`));
/// List of ports used for path style addressing.
/// Path style addressing means that storage account is put in URI's Path segment in instead of in host.
const constants_PathStylePorts = (/* unused pure expression or super */ null && ([
"10000",
"10001",
"10002",
"10003",
"10004",
"10100",
"10101",
"10102",
"10103",
"10104",
"11000",
"11001",
"11002",
"11003",
"11004",
"11100",
"11101",
"11102",
"11103",
"11104",
]));
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/utils/utils.common.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Reserved URL characters must be properly escaped for Storage services like Blob or File.
*
* ## URL encode and escape strategy for JS SDKs
*
* When customers pass a URL string into XxxClient classes constructor, the URL string may already be URL encoded or not.
* But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL
* string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XxxClient constructors.
*
* ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK.
*
* This is what legacy V2 SDK does, simple and works for most of the cases.
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
* SDK will encode it to "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
* SDK will encode it to "http://account.blob.core.windows.net/con/b%253A" and send to server. A blob named "b%3A" will be created.
*
* But this strategy will make it not possible to create a blob with "?" in it's name. Because when customer URL string is
* "http://account.blob.core.windows.net/con/blob?name", the "?name" will be treated as URL paramter instead of blob name.
* If customer URL string is "http://account.blob.core.windows.net/con/blob%3Fname", a blob named "blob%3Fname" will be created.
* V2 SDK doesn't have this issue because it doesn't allow customer pass in a full URL, it accepts a separate blob name and encodeURIComponent for it.
* We cannot accept a SDK cannot create a blob name with "?". So we implement strategy two:
*
* ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters.
*
* This is what V10 Blob Go SDK does. It accepts a URL type in Go, and call url.EscapedPath() to escape the special chars unescaped.
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
* SDK will escape ":" like "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%3A" to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%253A",
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%253A" to server. A blob named "b%3A" will be created.
*
* This strategy gives us flexibility to create with any special characters. But "%" will be treated as a special characters, if the URL string
* is not encoded, there shouldn't a "%" in the URL string, otherwise the URL is not a valid URL.
* If customer needs to create a blob with "%" in it's blob name, use "%25" instead of "%". Just like above 3rd sample.
* And following URL strings are invalid:
* - "http://account.blob.core.windows.net/con/b%"
* - "http://account.blob.core.windows.net/con/b%2"
* - "http://account.blob.core.windows.net/con/b%G"
*
* Another special character is "?", use "%2F" to represent a blob name with "?" in a URL string.
*
* ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `containerClient.getBlobClient(blobName)`
*
* We will apply strategy one, and call encodeURIComponent for these parameters like blobName. Because what customers passes in is a plain name instead of a URL.
*
* @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
* @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata
*
* @param url -
*/
function escapeURLPath(url) {
const urlParsed = new URL(url);
let path = urlParsed.pathname;
path = path || "/";
path = utils_common_escape(path);
urlParsed.pathname = path;
return urlParsed.toString();
}
function getProxyUriFromDevConnString(connectionString) {
// Development Connection String
// https://learn.microsoft.com/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key
let proxyUri = "";
if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) {
// CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri
const matchCredentials = connectionString.split(";");
for (const element of matchCredentials) {
if (element.trim().startsWith("DevelopmentStorageProxyUri=")) {
proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1];
}
}
}
return proxyUri;
}
function getValueInConnString(connectionString, argument) {
const elements = connectionString.split(";");
for (const element of elements) {
if (element.trim().startsWith(argument)) {
return element.trim().match(argument + "=(.*)")[1];
}
}
return "";
}
/**
* Extracts the parts of an Azure Storage account connection string.
*
* @param connectionString - Connection string.
* @returns String key value pairs of the storage account's url and credentials.
*/
function extractConnectionStringParts(connectionString) {
let proxyUri = "";
if (connectionString.startsWith("UseDevelopmentStorage=true")) {
// Development connection string
proxyUri = getProxyUriFromDevConnString(connectionString);
connectionString = DevelopmentConnectionString;
}
// Matching BlobEndpoint in the Account connection string
let blobEndpoint = getValueInConnString(connectionString, "BlobEndpoint");
// Slicing off '/' at the end if exists
// (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end)
blobEndpoint = blobEndpoint.endsWith("/") ? blobEndpoint.slice(0, -1) : blobEndpoint;
if (connectionString.search("DefaultEndpointsProtocol=") !== -1 &&
connectionString.search("AccountKey=") !== -1) {
// Account connection string
let defaultEndpointsProtocol = "";
let accountName = "";
let accountKey = stringToUint8Array("accountKey", "base64");
let endpointSuffix = "";
// Get account name and key
accountName = getValueInConnString(connectionString, "AccountName");
accountKey = stringToUint8Array(getValueInConnString(connectionString, "AccountKey"), "base64");
if (!blobEndpoint) {
// BlobEndpoint is not present in the Account connection string
// Can be obtained from `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`
defaultEndpointsProtocol = getValueInConnString(connectionString, "DefaultEndpointsProtocol");
const protocol = defaultEndpointsProtocol.toLowerCase();
if (protocol !== "https" && protocol !== "http") {
throw new Error("Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'");
}
endpointSuffix = getValueInConnString(connectionString, "EndpointSuffix");
if (!endpointSuffix) {
throw new Error("Invalid EndpointSuffix in the provided Connection String");
}
blobEndpoint = `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
}
if (!accountName) {
throw new Error("Invalid AccountName in the provided Connection String");
}
else if (accountKey.length === 0) {
throw new Error("Invalid AccountKey in the provided Connection String");
}
return {
kind: "AccountConnString",
url: blobEndpoint,
accountName,
accountKey,
proxyUri,
};
}
else {
// SAS connection string
let accountSas = getValueInConnString(connectionString, "SharedAccessSignature");
let accountName = getValueInConnString(connectionString, "AccountName");
// if accountName is empty, try to read it from BlobEndpoint
if (!accountName) {
accountName = getAccountNameFromUrl(blobEndpoint);
}
if (!blobEndpoint) {
throw new Error("Invalid BlobEndpoint in the provided SAS Connection String");
}
else if (!accountSas) {
throw new Error("Invalid SharedAccessSignature in the provided SAS Connection String");
}
// client constructors assume accountSas does *not* start with ?
if (accountSas.startsWith("?")) {
accountSas = accountSas.substring(1);
}
return { kind: "SASConnString", url: blobEndpoint, accountName, accountSas };
}
}
/**
* Internal escape method implemented Strategy Two mentioned in escapeURL() description.
*
* @param text -
*/
function utils_common_escape(text) {
return encodeURIComponent(text)
.replace(/%2F/g, "/") // Don't escape for "/"
.replace(/'/g, "%27") // Escape for "'"
.replace(/\+/g, "%20")
.replace(/%25/g, "%"); // Revert encoded "%"
}
/**
* Append a string to URL path. Will remove duplicated "/" in front of the string
* when URL path ends with a "/".
*
* @param url - Source URL string
* @param name - String to be appended to URL
* @returns An updated URL string
*/
function appendToURLPath(url, name) {
const urlParsed = new URL(url);
let path = urlParsed.pathname;
path = path ? (path.endsWith("/") ? `${path}${name}` : `${path}/${name}`) : name;
urlParsed.pathname = path;
return urlParsed.toString();
}
/**
* Set URL parameter name and value. If name exists in URL parameters, old value
* will be replaced by name key. If not provide value, the parameter will be deleted.
*
* @param url - Source URL string
* @param name - Parameter name
* @param value - Parameter value
* @returns An updated URL string
*/
function setURLParameter(url, name, value) {
const urlParsed = new URL(url);
const encodedName = encodeURIComponent(name);
const encodedValue = value ? encodeURIComponent(value) : undefined;
// mutating searchParams will change the encoding, so we have to do this ourselves
const searchString = urlParsed.search === "" ? "?" : urlParsed.search;
const searchPieces = [];
for (const pair of searchString.slice(1).split("&")) {
if (pair) {
const [key] = pair.split("=", 2);
if (key !== encodedName) {
searchPieces.push(pair);
}
}
}
if (encodedValue) {
searchPieces.push(`${encodedName}=${encodedValue}`);
}
urlParsed.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
return urlParsed.toString();
}
/**
* Get URL parameter by name.
*
* @param url -
* @param name -
*/
function getURLParameter(url, name) {
const urlParsed = new URL(url);
return urlParsed.searchParams.get(name) ?? undefined;
}
/**
* Set URL host.
*
* @param url - Source URL string
* @param host - New host string
* @returns An updated URL string
*/
function setURLHost(url, host) {
const urlParsed = new URL(url);
urlParsed.hostname = host;
return urlParsed.toString();
}
/**
* Get URL path from an URL string.
*
* @param url - Source URL string
*/
function getURLPath(url) {
try {
const urlParsed = new URL(url);
return urlParsed.pathname;
}
catch (e) {
return undefined;
}
}
/**
* Get URL scheme from an URL string.
*
* @param url - Source URL string
*/
function getURLScheme(url) {
try {
const urlParsed = new URL(url);
return urlParsed.protocol.endsWith(":") ? urlParsed.protocol.slice(0, -1) : urlParsed.protocol;
}
catch (e) {
return undefined;
}
}
/**
* Get URL path and query from an URL string.
*
* @param url - Source URL string
*/
function getURLPathAndQuery(url) {
const urlParsed = new URL(url);
const pathString = urlParsed.pathname;
if (!pathString) {
throw new RangeError("Invalid url without valid path.");
}
let queryString = urlParsed.search || "";
queryString = queryString.trim();
if (queryString !== "") {
queryString = queryString.startsWith("?") ? queryString : `?${queryString}`; // Ensure query string start with '?'
}
return `${pathString}${queryString}`;
}
/**
* Get URL query key value pairs from an URL string.
*
* @param url -
*/
function getURLQueries(url) {
let queryString = new URL(url).search;
if (!queryString) {
return {};
}
queryString = queryString.trim();
queryString = queryString.startsWith("?") ? queryString.substring(1) : queryString;
let querySubStrings = queryString.split("&");
querySubStrings = querySubStrings.filter((value) => {
const indexOfEqual = value.indexOf("=");
const lastIndexOfEqual = value.lastIndexOf("=");
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
});
const queries = {};
for (const querySubString of querySubStrings) {
const splitResults = querySubString.split("=");
const key = splitResults[0];
const value = splitResults[1];
queries[key] = value;
}
return queries;
}
/**
* Append a string to URL query.
*
* @param url - Source URL string.
* @param queryParts - String to be appended to the URL query.
* @returns An updated URL string.
*/
function appendToURLQuery(url, queryParts) {
const urlParsed = new URL(url);
let query = urlParsed.search;
if (query) {
query += "&" + queryParts;
}
else {
query = queryParts;
}
urlParsed.search = query;
return urlParsed.toString();
}
/**
* Rounds a date off to seconds.
*
* @param date -
* @param withMilliseconds - If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;
* If false, YYYY-MM-DDThh:mm:ssZ will be returned.
* @returns Date string in ISO8061 format, with or without 7 milliseconds component
*/
function truncatedISO8061Date(date, withMilliseconds = true) {
// Date.toISOString() will return like "2018-10-29T06:34:36.139Z"
const dateString = date.toISOString();
return withMilliseconds
? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
: dateString.substring(0, dateString.length - 5) + "Z";
}
/**
* Generate a 64 bytes base64 block ID string.
*
* @param blockIndex -
*/
function generateBlockID(blockIDPrefix, blockIndex) {
// To generate a 64 bytes base64 string, source string should be 48
const maxSourceStringLength = 48;
// A blob can have a maximum of 100,000 uncommitted blocks at any given time
const maxBlockIndexLength = 6;
const maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;
if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {
blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);
}
const res = blockIDPrefix +
padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0");
return uint8ArrayToString(stringToUint8Array(res, "utf-8"), "base64");
}
/**
* Delay specified time interval.
*
* @param timeInMs -
* @param aborter -
* @param abortError -
*/
async function utils_common_delay(timeInMs, aborter, abortError) {
return new Promise((resolve, reject) => {
/* eslint-disable-next-line prefer-const */
let timeout;
const abortHandler = () => {
if (timeout !== undefined) {
clearTimeout(timeout);
}
reject(abortError);
};
const resolveHandler = () => {
if (aborter !== undefined) {
aborter.removeEventListener("abort", abortHandler);
}
resolve();
};
timeout = setTimeout(resolveHandler, timeInMs);
if (aborter !== undefined) {
aborter.addEventListener("abort", abortHandler);
}
});
}
/**
* String.prototype.padStart()
*
* @param currentString -
* @param targetLength -
* @param padString -
*/
function padStart(currentString, targetLength, padString = " ") {
// @ts-expect-error: TS doesn't know this code needs to run downlevel sometimes
if (String.prototype.padStart) {
return currentString.padStart(targetLength, padString);
}
padString = padString || " ";
if (currentString.length > targetLength) {
return currentString;
}
else {
targetLength = targetLength - currentString.length;
if (targetLength > padString.length) {
padString += padString.repeat(targetLength / padString.length);
}
return padString.slice(0, targetLength) + currentString;
}
}
function sanitizeURL(url) {
let safeURL = url;
if (getURLParameter(safeURL, URLConstants.Parameters.SIGNATURE)) {
safeURL = setURLParameter(safeURL, URLConstants.Parameters.SIGNATURE, "*****");
}
return safeURL;
}
function sanitizeHeaders(originalHeader) {
const headers = createHttpHeaders();
for (const [name, value] of originalHeader) {
if (name.toLowerCase() === HeaderConstants.AUTHORIZATION.toLowerCase()) {
headers.set(name, "*****");
}
else if (name.toLowerCase() === HeaderConstants.X_MS_COPY_SOURCE) {
headers.set(name, sanitizeURL(value));
}
else {
headers.set(name, value);
}
}
return headers;
}
/**
* If two strings are equal when compared case insensitive.
*
* @param str1 -
* @param str2 -
*/
function iEqual(str1, str2) {
return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();
}
/**
* Extracts account name from the url
* @param url - url to extract the account name from
* @returns with the account name
*/
function getAccountNameFromUrl(url) {
const parsedUrl = new URL(url);
let accountName;
try {
if (parsedUrl.hostname.split(".")[1] === "blob") {
// `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
accountName = parsedUrl.hostname.split(".")[0];
}
else if (isIpEndpointStyle(parsedUrl)) {
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/
// .getPath() -> /devstoreaccount1/
accountName = parsedUrl.pathname.split("/")[1];
}
else {
// Custom domain case: "https://customdomain.com/containername/blob".
accountName = "";
}
return accountName;
}
catch (error) {
throw new Error("Unable to extract accountName with provided information.");
}
}
function isIpEndpointStyle(parsedUrl) {
const host = parsedUrl.host;
// Case 1: Ipv6, use a broad regex to find out candidates whose host contains two ':'.
// Case 2: localhost(:port) or host.docker.internal, use broad regex to match port part.
// Case 3: Ipv4, use broad regex which just check if host contains Ipv4.
// For valid host please refer to https://man7.org/linux/man-pages/man7/hostname.7.html.
return (/^.*:.*:.*$|^(localhost|host.docker.internal)(:[0-9]+)?$|^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}(:[0-9]+)?$/.test(host) ||
(Boolean(parsedUrl.port) && PathStylePorts.includes(parsedUrl.port)));
}
/**
* Attach a TokenCredential to an object.
*
* @param thing -
* @param credential -
*/
function attachCredential(thing, credential) {
thing.credential = credential;
return thing;
}
function httpAuthorizationToString(httpAuthorization) {
return httpAuthorization ? httpAuthorization.scheme + " " + httpAuthorization.value : undefined;
}
/**
* Escape the blobName but keep path separator ('/').
*/
function EscapePath(blobName) {
const split = blobName.split("/");
for (let i = 0; i < split.length; i++) {
split[i] = encodeURIComponent(split[i]);
}
return split.join("/");
}
/**
* A typesafe helper for ensuring that a given response object has
* the original _response attached.
* @param response - A response object from calling a client operation
* @returns The same object, but with known _response property
*/
function assertResponse(response) {
if (`_response` in response) {
return response;
}
throw new TypeError(`Unexpected response object ${response}`);
}
//# sourceMappingURL=utils.common.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/utils/SharedKeyComparator.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/*
* We need to imitate .Net culture-aware sorting, which is used in storage service.
* Below tables contain sort-keys for en-US culture.
*/
const table_lv0 = new Uint32Array([
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x71c, 0x0, 0x71f, 0x721,
0x723, 0x725, 0x0, 0x0, 0x0, 0x72d, 0x803, 0x0, 0x0, 0x733, 0x0, 0xd03, 0xd1a, 0xd1c, 0xd1e,
0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe02, 0xe09, 0xe0a,
0xe1a, 0xe21, 0xe23, 0xe25, 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, 0xe70, 0xe7c, 0xe7e, 0xe89,
0xe8a, 0xe91, 0xe99, 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, 0x0, 0x0, 0x0, 0x743, 0x744, 0x748,
0xe02, 0xe09, 0xe0a, 0xe1a, 0xe21, 0xe23, 0xe25, 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, 0xe70,
0xe7c, 0xe7e, 0xe89, 0xe8a, 0xe91, 0xe99, 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, 0x0, 0x74c,
0x0, 0x750, 0x0,
]);
const table_lv2 = new Uint32Array([
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
]);
const table_lv4 = new Uint32Array([
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x8012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8212, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
]);
function compareHeader(lhs, rhs) {
if (isLessThan(lhs, rhs))
return -1;
return 1;
}
function isLessThan(lhs, rhs) {
const tables = [table_lv0, table_lv2, table_lv4];
let curr_level = 0;
let i = 0;
let j = 0;
while (curr_level < tables.length) {
if (curr_level === tables.length - 1 && i !== j) {
return i > j;
}
const weight1 = i < lhs.length ? tables[curr_level][lhs[i].charCodeAt(0)] : 0x1;
const weight2 = j < rhs.length ? tables[curr_level][rhs[j].charCodeAt(0)] : 0x1;
if (weight1 === 0x1 && weight2 === 0x1) {
i = 0;
j = 0;
++curr_level;
}
else if (weight1 === weight2) {
++i;
++j;
}
else if (weight1 === 0) {
++i;
}
else if (weight2 === 0) {
++j;
}
else {
return weight1 < weight2;
}
}
return false;
}
//# sourceMappingURL=SharedKeyComparator.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageSharedKeyCredentialPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key.
*/
class StorageSharedKeyCredentialPolicy extends CredentialPolicy {
/**
* Reference to StorageSharedKeyCredential which generates StorageSharedKeyCredentialPolicy
*/
factory;
/**
* Creates an instance of StorageSharedKeyCredentialPolicy.
* @param nextPolicy -
* @param options -
* @param factory -
*/
constructor(nextPolicy, options, factory) {
super(nextPolicy, options);
this.factory = factory;
}
/**
* Signs request.
*
* @param request -
*/
signRequest(request) {
request.headers.set(constants_HeaderConstants.X_MS_DATE, new Date().toUTCString());
if (request.body &&
(typeof request.body === "string" || request.body !== undefined) &&
request.body.length > 0) {
request.headers.set(constants_HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
}
const stringToSign = [
request.method.toUpperCase(),
this.getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_LANGUAGE),
this.getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_ENCODING),
this.getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_LENGTH),
this.getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_MD5),
this.getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_TYPE),
this.getHeaderValueToSign(request, constants_HeaderConstants.DATE),
this.getHeaderValueToSign(request, constants_HeaderConstants.IF_MODIFIED_SINCE),
this.getHeaderValueToSign(request, constants_HeaderConstants.IF_MATCH),
this.getHeaderValueToSign(request, constants_HeaderConstants.IF_NONE_MATCH),
this.getHeaderValueToSign(request, constants_HeaderConstants.IF_UNMODIFIED_SINCE),
this.getHeaderValueToSign(request, constants_HeaderConstants.RANGE),
].join("\n") +
"\n" +
this.getCanonicalizedHeadersString(request) +
this.getCanonicalizedResourceString(request);
const signature = this.factory.computeHMACSHA256(stringToSign);
request.headers.set(constants_HeaderConstants.AUTHORIZATION, `SharedKey ${this.factory.accountName}:${signature}`);
// console.log(`[URL]:${request.url}`);
// console.log(`[HEADERS]:${request.headers.toString()}`);
// console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);
// console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);
return request;
}
/**
* Retrieve header value according to shared key sign rules.
* @see https://learn.microsoft.com/rest/api/storageservices/authenticate-with-shared-key
*
* @param request -
* @param headerName -
*/
getHeaderValueToSign(request, headerName) {
const value = request.headers.get(headerName);
if (!value) {
return "";
}
// When using version 2015-02-21 or later, if Content-Length is zero, then
// set the Content-Length part of the StringToSign to an empty string.
// https://learn.microsoft.com/rest/api/storageservices/authenticate-with-shared-key
if (headerName === constants_HeaderConstants.CONTENT_LENGTH && value === "0") {
return "";
}
return value;
}
/**
* To construct the CanonicalizedHeaders portion of the signature string, follow these steps:
* 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.
* 2. Convert each HTTP header name to lowercase.
* 3. Sort the headers lexicographically by header name, in ascending order.
* Each header may appear only once in the string.
* 4. Replace any linear whitespace in the header value with a single space.
* 5. Trim any whitespace around the colon in the header.
* 6. Finally, append a new-line character to each canonicalized header in the resulting list.
* Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.
*
* @param request -
*/
getCanonicalizedHeadersString(request) {
let headersArray = request.headers.headersArray().filter((value) => {
return value.name.toLowerCase().startsWith(constants_HeaderConstants.PREFIX_FOR_STORAGE);
});
headersArray.sort((a, b) => {
return compareHeader(a.name.toLowerCase(), b.name.toLowerCase());
});
// Remove duplicate headers
headersArray = headersArray.filter((value, index, array) => {
if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
return false;
}
return true;
});
let canonicalizedHeadersStringToSign = "";
headersArray.forEach((header) => {
canonicalizedHeadersStringToSign += `${header.name
.toLowerCase()
.trimRight()}:${header.value.trimLeft()}\n`;
});
return canonicalizedHeadersStringToSign;
}
/**
* Retrieves the webResource canonicalized resource string.
*
* @param request -
*/
getCanonicalizedResourceString(request) {
const path = getURLPath(request.url) || "/";
let canonicalizedResourceString = "";
canonicalizedResourceString += `/${this.factory.accountName}${path}`;
const queries = getURLQueries(request.url);
const lowercaseQueries = {};
if (queries) {
const queryKeys = [];
for (const key in queries) {
if (Object.prototype.hasOwnProperty.call(queries, key)) {
const lowercaseKey = key.toLowerCase();
lowercaseQueries[lowercaseKey] = queries[key];
queryKeys.push(lowercaseKey);
}
}
queryKeys.sort();
for (const key of queryKeys) {
canonicalizedResourceString += `\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;
}
}
return canonicalizedResourceString;
}
}
//# sourceMappingURL=StorageSharedKeyCredentialPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/credentials/StorageSharedKeyCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* StorageSharedKeyCredential for account key authorization of Azure Storage service.
*/
class StorageSharedKeyCredential extends Credential {
/**
* Azure Storage account name; readonly.
*/
accountName;
/**
* Azure Storage account key; readonly.
*/
accountKey;
/**
* Creates an instance of StorageSharedKeyCredential.
* @param accountName -
* @param accountKey -
*/
constructor(accountName, accountKey) {
super();
this.accountName = accountName;
this.accountKey = Buffer.from(accountKey, "base64");
}
/**
* Creates a StorageSharedKeyCredentialPolicy object.
*
* @param nextPolicy -
* @param options -
*/
create(nextPolicy, options) {
return new StorageSharedKeyCredentialPolicy(nextPolicy, options, this);
}
/**
* Generates a hash signature for an HTTP request or for a SAS.
*
* @param stringToSign -
*/
computeHMACSHA256(stringToSign) {
return (0,external_node_crypto_.createHmac)("sha256", this.accountKey).update(stringToSign, "utf8").digest("base64");
}
}
//# sourceMappingURL=StorageSharedKeyCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/log.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The `@azure/logger` configuration for this package.
*/
const storage_common_dist_esm_log_logger = esm_createClientLogger("storage-common");
//# sourceMappingURL=log.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageRetryPolicyType.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* RetryPolicy types.
*/
var StorageRetryPolicyType;
(function (StorageRetryPolicyType) {
/**
* Exponential retry. Retry time delay grows exponentially.
*/
StorageRetryPolicyType[StorageRetryPolicyType["EXPONENTIAL"] = 0] = "EXPONENTIAL";
/**
* Linear retry. Retry time delay grows linearly.
*/
StorageRetryPolicyType[StorageRetryPolicyType["FIXED"] = 1] = "FIXED";
})(StorageRetryPolicyType || (StorageRetryPolicyType = {}));
//# sourceMappingURL=StorageRetryPolicyType.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageRetryPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A factory method used to generated a RetryPolicy factory.
*
* @param retryOptions -
*/
function NewRetryPolicyFactory(retryOptions) {
return {
create: (nextPolicy, options) => {
return new StorageRetryPolicy(nextPolicy, options, retryOptions);
},
};
}
// Default values of StorageRetryOptions
const DEFAULT_RETRY_OPTIONS = {
maxRetryDelayInMs: 120 * 1000,
maxTries: 4,
retryDelayInMs: 4 * 1000,
retryPolicyType: StorageRetryPolicyType.EXPONENTIAL,
secondaryHost: "",
tryTimeoutInMs: undefined, // Use server side default timeout strategy
};
const RETRY_ABORT_ERROR = new AbortError_AbortError("The operation was aborted.");
/**
* Retry policy with exponential retry and linear retry implemented.
*/
class StorageRetryPolicy extends BaseRequestPolicy {
/**
* RetryOptions.
*/
retryOptions;
/**
* Creates an instance of RetryPolicy.
*
* @param nextPolicy -
* @param options -
* @param retryOptions -
*/
constructor(nextPolicy, options, retryOptions = DEFAULT_RETRY_OPTIONS) {
super(nextPolicy, options);
// Initialize retry options
this.retryOptions = {
retryPolicyType: retryOptions.retryPolicyType
? retryOptions.retryPolicyType
: DEFAULT_RETRY_OPTIONS.retryPolicyType,
maxTries: retryOptions.maxTries && retryOptions.maxTries >= 1
? Math.floor(retryOptions.maxTries)
: DEFAULT_RETRY_OPTIONS.maxTries,
tryTimeoutInMs: retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0
? retryOptions.tryTimeoutInMs
: DEFAULT_RETRY_OPTIONS.tryTimeoutInMs,
retryDelayInMs: retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0
? Math.min(retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs
? retryOptions.maxRetryDelayInMs
: DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs)
: DEFAULT_RETRY_OPTIONS.retryDelayInMs,
maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0
? retryOptions.maxRetryDelayInMs
: DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs,
secondaryHost: retryOptions.secondaryHost
? retryOptions.secondaryHost
: DEFAULT_RETRY_OPTIONS.secondaryHost,
};
}
/**
* Sends request.
*
* @param request -
*/
async sendRequest(request) {
return this.attemptSendRequest(request, false, 1);
}
/**
* Decide and perform next retry. Won't mutate request parameter.
*
* @param request -
* @param secondaryHas404 - If attempt was against the secondary & it returned a StatusNotFound (404), then
* the resource was not found. This may be due to replication delay. So, in this
* case, we'll never try the secondary again for this operation.
* @param attempt - How many retries has been attempted to performed, starting from 1, which includes
* the attempt will be performed by this method call.
*/
async attemptSendRequest(request, secondaryHas404, attempt) {
const newRequest = request.clone();
const isPrimaryRetry = secondaryHas404 ||
!this.retryOptions.secondaryHost ||
!(request.method === "GET" || request.method === "HEAD" || request.method === "OPTIONS") ||
attempt % 2 === 1;
if (!isPrimaryRetry) {
newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost);
}
// Set the server-side timeout query parameter "timeout=[seconds]"
if (this.retryOptions.tryTimeoutInMs) {
newRequest.url = setURLParameter(newRequest.url, constants_URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
}
let response;
try {
storage_common_dist_esm_log_logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
response = await this._nextPolicy.sendRequest(newRequest);
if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {
return response;
}
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
}
catch (err) {
storage_common_dist_esm_log_logger.error(`RetryPolicy: Caught error, message: ${err.message}, code: ${err.code}`);
if (!this.shouldRetry(isPrimaryRetry, attempt, response, err)) {
throw err;
}
}
await this.delay(isPrimaryRetry, attempt, request.abortSignal);
return this.attemptSendRequest(request, secondaryHas404, ++attempt);
}
/**
* Decide whether to retry according to last HTTP response and retry counters.
*
* @param isPrimaryRetry -
* @param attempt -
* @param response -
* @param err -
*/
shouldRetry(isPrimaryRetry, attempt, response, err) {
if (attempt >= this.retryOptions.maxTries) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions
.maxTries}, no further try.`);
return false;
}
// Handle network failures, you may need to customize the list when you implement
// your own http client
const retriableErrors = [
"ETIMEDOUT",
"ESOCKETTIMEDOUT",
"ECONNREFUSED",
"ECONNRESET",
"ENOENT",
"ENOTFOUND",
"TIMEOUT",
"EPIPE",
"REQUEST_SEND_ERROR", // For default xhr based http client provided in ms-rest-js
];
if (err) {
for (const retriableError of retriableErrors) {
if (err.name.toUpperCase().includes(retriableError) ||
err.message.toUpperCase().includes(retriableError) ||
(err.code && err.code.toString().toUpperCase() === retriableError)) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
return true;
}
}
}
// If attempt was against the secondary & it returned a StatusNotFound (404), then
// the resource was not found. This may be due to replication delay. So, in this
// case, we'll never try the secondary again for this operation.
if (response || err) {
const statusCode = response ? response.status : err ? err.statusCode : 0;
if (!isPrimaryRetry && statusCode === 404) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Secondary access with 404, will retry.`);
return true;
}
// Server internal error or server timeout
if (statusCode === 503 || statusCode === 500) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);
return true;
}
}
if (response) {
// Retry select Copy Source Error Codes.
if (response?.status >= 400) {
const copySourceError = response.headers.get(constants_HeaderConstants.X_MS_CopySourceErrorCode);
if (copySourceError !== undefined) {
switch (copySourceError) {
case "InternalError":
case "OperationTimedOut":
case "ServerBusy":
return true;
}
}
}
}
if (err?.code === "PARSE_ERROR" && err?.message.startsWith(`Error "Error: Unclosed root tag`)) {
storage_common_dist_esm_log_logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
return true;
}
return false;
}
/**
* Delay a calculated time between retries.
*
* @param isPrimaryRetry -
* @param attempt -
* @param abortSignal -
*/
async delay(isPrimaryRetry, attempt, abortSignal) {
let delayTimeInMs = 0;
if (isPrimaryRetry) {
switch (this.retryOptions.retryPolicyType) {
case StorageRetryPolicyType.EXPONENTIAL:
delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs, this.retryOptions.maxRetryDelayInMs);
break;
case StorageRetryPolicyType.FIXED:
delayTimeInMs = this.retryOptions.retryDelayInMs;
break;
}
}
else {
delayTimeInMs = Math.random() * 1000;
}
storage_common_dist_esm_log_logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
return utils_common_delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR);
}
}
//# sourceMappingURL=StorageRetryPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/StorageRetryPolicyFactory.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects.
*/
class StorageRetryPolicyFactory {
retryOptions;
/**
* Creates an instance of StorageRetryPolicyFactory.
* @param retryOptions -
*/
constructor(retryOptions) {
this.retryOptions = retryOptions;
}
/**
* Creates a StorageRetryPolicy object.
*
* @param nextPolicy -
* @param options -
*/
create(nextPolicy, options) {
return new StorageRetryPolicy(nextPolicy, options, this.retryOptions);
}
}
//# sourceMappingURL=StorageRetryPolicyFactory.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageBrowserPolicyV2.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the StorageBrowserPolicy.
*/
const storageBrowserPolicyName = "storageBrowserPolicy";
/**
* storageBrowserPolicy is a policy used to prevent browsers from caching requests
* and to remove cookies and explicit content-length headers.
*
* In Node.js, this policy is a no-op pass-through.
*/
function storageBrowserPolicy() {
return {
name: storageBrowserPolicyName,
async sendRequest(request, next) {
return next(request);
},
};
}
//# sourceMappingURL=StorageBrowserPolicyV2.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageCorrectContentLengthPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the storageCorrectContentLengthPolicy.
*/
const storageCorrectContentLengthPolicyName = "StorageCorrectContentLengthPolicy";
/**
* storageCorrectContentLengthPolicy to correctly set Content-Length header with request body length.
*/
function storageCorrectContentLengthPolicy() {
function correctContentLength(request) {
if (request.body &&
(typeof request.body === "string" || Buffer.isBuffer(request.body)) &&
request.body.length > 0) {
request.headers.set(constants_HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
}
}
return {
name: storageCorrectContentLengthPolicyName,
async sendRequest(request, next) {
correctContentLength(request);
return next(request);
},
};
}
//# sourceMappingURL=StorageCorrectContentLengthPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageRetryPolicyV2.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Name of the {@link storageRetryPolicy}
*/
const storageRetryPolicyName = "storageRetryPolicy";
// Default values of StorageRetryOptions
const StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS = {
maxRetryDelayInMs: 120 * 1000,
maxTries: 4,
retryDelayInMs: 4 * 1000,
retryPolicyType: StorageRetryPolicyType.EXPONENTIAL,
secondaryHost: "",
tryTimeoutInMs: undefined, // Use server side default timeout strategy
};
const retriableErrors = [
"ETIMEDOUT",
"ESOCKETTIMEDOUT",
"ECONNREFUSED",
"ECONNRESET",
"ENOENT",
"ENOTFOUND",
"TIMEOUT",
"EPIPE",
"REQUEST_SEND_ERROR",
];
const StorageRetryPolicyV2_RETRY_ABORT_ERROR = new AbortError_AbortError("The operation was aborted.");
/**
* Retry policy with exponential retry and linear retry implemented.
*/
function storageRetryPolicy(options = {}) {
const retryPolicyType = options.retryPolicyType ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.retryPolicyType;
const maxTries = options.maxTries ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.maxTries;
const retryDelayInMs = options.retryDelayInMs ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.retryDelayInMs;
const maxRetryDelayInMs = options.maxRetryDelayInMs ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs;
const secondaryHost = options.secondaryHost ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.secondaryHost;
const tryTimeoutInMs = options.tryTimeoutInMs ?? StorageRetryPolicyV2_DEFAULT_RETRY_OPTIONS.tryTimeoutInMs;
function shouldRetry({ isPrimaryRetry, attempt, response, error, }) {
if (attempt >= maxTries) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${maxTries}, no further try.`);
return false;
}
if (error) {
for (const retriableError of retriableErrors) {
if (error.name.toUpperCase().includes(retriableError) ||
error.message.toUpperCase().includes(retriableError) ||
(error.code && error.code.toString().toUpperCase() === retriableError)) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
return true;
}
}
if (error?.code === "PARSE_ERROR" &&
error?.message.startsWith(`Error "Error: Unclosed root tag`)) {
storage_common_dist_esm_log_logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
return true;
}
}
// If attempt was against the secondary & it returned a StatusNotFound (404), then
// the resource was not found. This may be due to replication delay. So, in this
// case, we'll never try the secondary again for this operation.
if (response || error) {
const statusCode = response?.status ?? error?.statusCode ?? 0;
if (!isPrimaryRetry && statusCode === 404) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Secondary access with 404, will retry.`);
return true;
}
// Server internal error or server timeout
if (statusCode === 503 || statusCode === 500) {
storage_common_dist_esm_log_logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);
return true;
}
}
if (response) {
// Retry select Copy Source Error Codes.
if (response?.status >= 400) {
const copySourceError = response.headers.get(constants_HeaderConstants.X_MS_CopySourceErrorCode);
if (copySourceError !== undefined) {
switch (copySourceError) {
case "InternalError":
case "OperationTimedOut":
case "ServerBusy":
return true;
}
}
}
}
return false;
}
function calculateDelay(isPrimaryRetry, attempt) {
let delayTimeInMs = 0;
if (isPrimaryRetry) {
switch (retryPolicyType) {
case StorageRetryPolicyType.EXPONENTIAL:
delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * retryDelayInMs, maxRetryDelayInMs);
break;
case StorageRetryPolicyType.FIXED:
delayTimeInMs = retryDelayInMs;
break;
}
}
else {
delayTimeInMs = Math.random() * 1000;
}
storage_common_dist_esm_log_logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
return delayTimeInMs;
}
return {
name: storageRetryPolicyName,
async sendRequest(request, next) {
// Set the server-side timeout query parameter "timeout=[seconds]"
if (tryTimeoutInMs) {
request.url = setURLParameter(request.url, constants_URLConstants.Parameters.TIMEOUT, String(Math.floor(tryTimeoutInMs / 1000)));
}
const primaryUrl = request.url;
const secondaryUrl = secondaryHost ? setURLHost(request.url, secondaryHost) : undefined;
let secondaryHas404 = false;
let attempt = 1;
let retryAgain = true;
let response;
let error;
while (retryAgain) {
const isPrimaryRetry = secondaryHas404 ||
!secondaryUrl ||
!["GET", "HEAD", "OPTIONS"].includes(request.method) ||
attempt % 2 === 1;
request.url = isPrimaryRetry ? primaryUrl : secondaryUrl;
response = undefined;
error = undefined;
try {
storage_common_dist_esm_log_logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
response = await next(request);
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
}
catch (e) {
if (esm_restError_isRestError(e)) {
storage_common_dist_esm_log_logger.error(`RetryPolicy: Caught error, message: ${e.message}, code: ${e.code}`);
error = e;
}
else {
storage_common_dist_esm_log_logger.error(`RetryPolicy: Caught error, message: ${getErrorMessage(e)}`);
throw e;
}
}
retryAgain = shouldRetry({ isPrimaryRetry, attempt, response, error });
if (retryAgain) {
await utils_common_delay(calculateDelay(isPrimaryRetry, attempt), request.abortSignal, StorageRetryPolicyV2_RETRY_ABORT_ERROR);
}
attempt++;
}
if (response) {
return response;
}
throw error ?? new esm_restError_RestError("RetryPolicy failed without known error.");
},
};
}
//# sourceMappingURL=StorageRetryPolicyV2.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageSharedKeyCredentialPolicyV2.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the storageSharedKeyCredentialPolicy.
*/
const storageSharedKeyCredentialPolicyName = "storageSharedKeyCredentialPolicy";
/**
* storageSharedKeyCredentialPolicy handles signing requests using storage account keys.
*/
function storageSharedKeyCredentialPolicy(options) {
function signRequest(request) {
request.headers.set(constants_HeaderConstants.X_MS_DATE, new Date().toUTCString());
if (request.body &&
(typeof request.body === "string" || Buffer.isBuffer(request.body)) &&
request.body.length > 0) {
request.headers.set(constants_HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
}
const stringToSign = [
request.method.toUpperCase(),
getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_LANGUAGE),
getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_ENCODING),
getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_LENGTH),
getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_MD5),
getHeaderValueToSign(request, constants_HeaderConstants.CONTENT_TYPE),
getHeaderValueToSign(request, constants_HeaderConstants.DATE),
getHeaderValueToSign(request, constants_HeaderConstants.IF_MODIFIED_SINCE),
getHeaderValueToSign(request, constants_HeaderConstants.IF_MATCH),
getHeaderValueToSign(request, constants_HeaderConstants.IF_NONE_MATCH),
getHeaderValueToSign(request, constants_HeaderConstants.IF_UNMODIFIED_SINCE),
getHeaderValueToSign(request, constants_HeaderConstants.RANGE),
].join("\n") +
"\n" +
getCanonicalizedHeadersString(request) +
getCanonicalizedResourceString(request);
const signature = (0,external_node_crypto_.createHmac)("sha256", options.accountKey)
.update(stringToSign, "utf8")
.digest("base64");
request.headers.set(constants_HeaderConstants.AUTHORIZATION, `SharedKey ${options.accountName}:${signature}`);
// console.log(`[URL]:${request.url}`);
// console.log(`[HEADERS]:${request.headers.toString()}`);
// console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);
// console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);
}
/**
* Retrieve header value according to shared key sign rules.
* @see https://learn.microsoft.com/rest/api/storageservices/authenticate-with-shared-key
*/
function getHeaderValueToSign(request, headerName) {
const value = request.headers.get(headerName);
if (!value) {
return "";
}
// When using version 2015-02-21 or later, if Content-Length is zero, then
// set the Content-Length part of the StringToSign to an empty string.
// https://learn.microsoft.com/rest/api/storageservices/authenticate-with-shared-key
if (headerName === constants_HeaderConstants.CONTENT_LENGTH && value === "0") {
return "";
}
return value;
}
/**
* To construct the CanonicalizedHeaders portion of the signature string, follow these steps:
* 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.
* 2. Convert each HTTP header name to lowercase.
* 3. Sort the headers lexicographically by header name, in ascending order.
* Each header may appear only once in the string.
* 4. Replace any linear whitespace in the header value with a single space.
* 5. Trim any whitespace around the colon in the header.
* 6. Finally, append a new-line character to each canonicalized header in the resulting list.
* Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.
*
*/
function getCanonicalizedHeadersString(request) {
let headersArray = [];
for (const [name, value] of request.headers) {
if (name.toLowerCase().startsWith(constants_HeaderConstants.PREFIX_FOR_STORAGE)) {
headersArray.push({ name, value });
}
}
headersArray.sort((a, b) => {
return compareHeader(a.name.toLowerCase(), b.name.toLowerCase());
});
// Remove duplicate headers
headersArray = headersArray.filter((value, index, array) => {
if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
return false;
}
return true;
});
let canonicalizedHeadersStringToSign = "";
headersArray.forEach((header) => {
canonicalizedHeadersStringToSign += `${header.name
.toLowerCase()
.trimRight()}:${header.value.trimLeft()}\n`;
});
return canonicalizedHeadersStringToSign;
}
function getCanonicalizedResourceString(request) {
const path = getURLPath(request.url) || "/";
let canonicalizedResourceString = "";
canonicalizedResourceString += `/${options.accountName}${path}`;
const queries = getURLQueries(request.url);
const lowercaseQueries = {};
if (queries) {
const queryKeys = [];
for (const key in queries) {
if (Object.prototype.hasOwnProperty.call(queries, key)) {
const lowercaseKey = key.toLowerCase();
lowercaseQueries[lowercaseKey] = queries[key];
queryKeys.push(lowercaseKey);
}
}
queryKeys.sort();
for (const key of queryKeys) {
canonicalizedResourceString += `\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;
}
}
return canonicalizedResourceString;
}
return {
name: storageSharedKeyCredentialPolicyName,
async sendRequest(request, next) {
signRequest(request);
return next(request);
},
};
}
//# sourceMappingURL=StorageSharedKeyCredentialPolicyV2.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/policies/StorageRequestFailureDetailsParserPolicy.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* The programmatic identifier of the StorageRequestFailureDetailsParserPolicy.
*/
const storageRequestFailureDetailsParserPolicyName = "storageRequestFailureDetailsParserPolicy";
/**
* StorageRequestFailureDetailsParserPolicy
*/
function storageRequestFailureDetailsParserPolicy() {
return {
name: storageRequestFailureDetailsParserPolicyName,
async sendRequest(request, next) {
try {
const response = await next(request);
return response;
}
catch (err) {
if (typeof err === "object" &&
err !== null &&
err.response &&
err.response.parsedBody) {
if (err.response.parsedBody.code === "InvalidHeaderValue" &&
err.response.parsedBody.HeaderName === "x-ms-version") {
err.message =
"The provided service version is not enabled on this storage account. Please see https://learn.microsoft.com/rest/api/storageservices/versioning-for-the-azure-storage-services for additional information.\n";
}
}
throw err;
}
},
};
}
//# sourceMappingURL=StorageRequestFailureDetailsParserPolicy.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/credentials/UserDelegationKeyCredential.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* UserDelegationKeyCredential is only used for generation of user delegation SAS.
* @see https://learn.microsoft.com/rest/api/storageservices/create-user-delegation-sas
*/
class UserDelegationKeyCredential {
/**
* Azure Storage account name; readonly.
*/
accountName;
/**
* Azure Storage user delegation key; readonly.
*/
userDelegationKey;
/**
* Key value in Buffer type.
*/
key;
/**
* Creates an instance of UserDelegationKeyCredential.
* @param accountName -
* @param userDelegationKey -
*/
constructor(accountName, userDelegationKey) {
this.accountName = accountName;
this.userDelegationKey = userDelegationKey;
this.key = Buffer.from(userDelegationKey.value, "base64");
}
/**
* Generates a hash signature for an HTTP request or for a SAS.
*
* @param stringToSign -
*/
computeHMACSHA256(stringToSign) {
return (0,external_node_crypto_.createHmac)("sha256", this.key).update(stringToSign, "utf8").digest("base64");
}
}
//# sourceMappingURL=UserDelegationKeyCredential.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/indexPlatform.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=indexPlatform.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-common/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/constants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const esm_utils_constants_SDK_VERSION = "12.33.0";
const SERVICE_VERSION = "2026-06-06";
const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB
const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB
const BLOCK_BLOB_MAX_BLOCKS = 50000;
const DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB
const DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB
const DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;
const REQUEST_TIMEOUT = 100 * 1000; // In ms
/**
* The OAuth scope to use with Azure Storage.
*/
const StorageOAuthScopes = "https://storage.azure.com/.default";
const utils_constants_URLConstants = {
Parameters: {
FORCE_BROWSER_NO_CACHE: "_",
SIGNATURE: "sig",
SNAPSHOT: "snapshot",
VERSIONID: "versionid",
TIMEOUT: "timeout",
},
};
const HTTPURLConnection = {
HTTP_ACCEPTED: 202,
HTTP_CONFLICT: 409,
HTTP_NOT_FOUND: 404,
HTTP_PRECON_FAILED: 412,
HTTP_RANGE_NOT_SATISFIABLE: 416,
};
const utils_constants_HeaderConstants = {
AUTHORIZATION: "Authorization",
AUTHORIZATION_SCHEME: "Bearer",
CONTENT_ENCODING: "Content-Encoding",
CONTENT_ID: "Content-ID",
CONTENT_LANGUAGE: "Content-Language",
CONTENT_LENGTH: "Content-Length",
CONTENT_MD5: "Content-Md5",
CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding",
CONTENT_TYPE: "Content-Type",
COOKIE: "Cookie",
DATE: "date",
IF_MATCH: "if-match",
IF_MODIFIED_SINCE: "if-modified-since",
IF_NONE_MATCH: "if-none-match",
IF_UNMODIFIED_SINCE: "if-unmodified-since",
PREFIX_FOR_STORAGE: "x-ms-",
RANGE: "Range",
USER_AGENT: "User-Agent",
X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id",
X_MS_COPY_SOURCE: "x-ms-copy-source",
X_MS_DATE: "x-ms-date",
X_MS_ERROR_CODE: "x-ms-error-code",
X_MS_VERSION: "x-ms-version",
X_MS_CopySourceErrorCode: "x-ms-copy-source-error-code",
};
const ETagNone = "";
const ETagAny = "*";
const SIZE_1_MB = 1 * 1024 * 1024;
const BATCH_MAX_REQUEST = 256;
const BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;
const HTTP_LINE_ENDING = "\r\n";
const HTTP_VERSION_1_1 = "HTTP/1.1";
const EncryptionAlgorithmAES25 = "AES256";
const utils_constants_DevelopmentConnectionString = `DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;`;
const StorageBlobLoggingAllowedHeaderNames = [
"Access-Control-Allow-Origin",
"Cache-Control",
"Content-Length",
"Content-Type",
"Date",
"Request-Id",
"traceparent",
"Transfer-Encoding",
"User-Agent",
"x-ms-client-request-id",
"x-ms-date",
"x-ms-error-code",
"x-ms-request-id",
"x-ms-return-client-request-id",
"x-ms-version",
"Accept-Ranges",
"Content-Disposition",
"Content-Encoding",
"Content-Language",
"Content-MD5",
"Content-Range",
"ETag",
"Last-Modified",
"Server",
"Vary",
"x-ms-content-crc64",
"x-ms-copy-action",
"x-ms-copy-completion-time",
"x-ms-copy-id",
"x-ms-copy-progress",
"x-ms-copy-status",
"x-ms-has-immutability-policy",
"x-ms-has-legal-hold",
"x-ms-lease-state",
"x-ms-lease-status",
"x-ms-range",
"x-ms-request-server-encrypted",
"x-ms-server-encrypted",
"x-ms-snapshot",
"x-ms-source-range",
"If-Match",
"If-Modified-Since",
"If-None-Match",
"If-Unmodified-Since",
"x-ms-access-tier",
"x-ms-access-tier-change-time",
"x-ms-access-tier-inferred",
"x-ms-account-kind",
"x-ms-archive-status",
"x-ms-blob-append-offset",
"x-ms-blob-cache-control",
"x-ms-blob-committed-block-count",
"x-ms-blob-condition-appendpos",
"x-ms-blob-condition-maxsize",
"x-ms-blob-content-disposition",
"x-ms-blob-content-encoding",
"x-ms-blob-content-language",
"x-ms-blob-content-length",
"x-ms-blob-content-md5",
"x-ms-blob-content-type",
"x-ms-blob-public-access",
"x-ms-blob-sequence-number",
"x-ms-blob-type",
"x-ms-copy-destination-snapshot",
"x-ms-creation-time",
"x-ms-default-encryption-scope",
"x-ms-delete-snapshots",
"x-ms-delete-type-permanent",
"x-ms-deny-encryption-scope-override",
"x-ms-encryption-algorithm",
"x-ms-if-sequence-number-eq",
"x-ms-if-sequence-number-le",
"x-ms-if-sequence-number-lt",
"x-ms-incremental-copy",
"x-ms-lease-action",
"x-ms-lease-break-period",
"x-ms-lease-duration",
"x-ms-lease-id",
"x-ms-lease-time",
"x-ms-page-write",
"x-ms-proposed-lease-id",
"x-ms-range-get-content-md5",
"x-ms-rehydrate-priority",
"x-ms-sequence-number-action",
"x-ms-sku-name",
"x-ms-source-content-md5",
"x-ms-source-if-match",
"x-ms-source-if-modified-since",
"x-ms-source-if-none-match",
"x-ms-source-if-unmodified-since",
"x-ms-tag-count",
"x-ms-encryption-key-sha256",
"x-ms-copy-source-error-code",
"x-ms-copy-source-status-code",
"x-ms-if-tags",
"x-ms-source-if-tags",
];
const StorageBlobLoggingAllowedQueryParameters = [
"comp",
"maxresults",
"rscc",
"rscd",
"rsce",
"rscl",
"rsct",
"se",
"si",
"sip",
"sp",
"spr",
"sr",
"srt",
"ss",
"st",
"sv",
"include",
"marker",
"prefix",
"copyid",
"restype",
"blockid",
"blocklisttype",
"delimiter",
"prevsnapshot",
"ske",
"skoid",
"sks",
"skt",
"sktid",
"skv",
"snapshot",
];
const BlobUsesCustomerSpecifiedEncryptionMsg = "BlobUsesCustomerSpecifiedEncryption";
const BlobDoesNotUseCustomerSpecifiedEncryption = "BlobDoesNotUseCustomerSpecifiedEncryption";
/// List of ports used for path style addressing.
/// Path style addressing means that storage account is put in URI's Path segment in instead of in host.
const utils_constants_PathStylePorts = [
"10000",
"10001",
"10002",
"10003",
"10004",
"10100",
"10101",
"10102",
"10103",
"10104",
"11000",
"11001",
"11002",
"11003",
"11004",
"11100",
"11101",
"11102",
"11103",
"11104",
];
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/Pipeline.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// Export following interfaces and types for customers who want to implement their
// own RequestPolicy or HTTPClient
/**
* A helper to decide if a given argument satisfies the Pipeline contract
* @param pipeline - An argument that may be a Pipeline
* @returns true when the argument satisfies the Pipeline contract
*/
function isPipelineLike(pipeline) {
if (!pipeline || typeof pipeline !== "object") {
return false;
}
const castPipeline = pipeline;
return (Array.isArray(castPipeline.factories) &&
typeof castPipeline.options === "object" &&
typeof castPipeline.toServiceClientOptions === "function");
}
/**
* A Pipeline class containing HTTP request policies.
* You can create a default Pipeline by calling {@link newPipeline}.
* Or you can create a Pipeline with your own policies by the constructor of Pipeline.
*
* Refer to {@link newPipeline} and provided policies before implementing your
* customized Pipeline.
*/
class Pipeline {
/**
* A list of chained request policy factories.
*/
factories;
/**
* Configures pipeline logger and HTTP client.
*/
options;
/**
* Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.
*
* @param factories -
* @param options -
*/
constructor(factories, options = {}) {
this.factories = factories;
this.options = options;
}
/**
* Transfer Pipeline object to ServiceClientOptions object which is required by
* ServiceClient constructor.
*
* @returns The ServiceClientOptions object from this Pipeline.
*/
toServiceClientOptions() {
return {
httpClient: this.options.httpClient,
requestPolicyFactories: this.factories,
};
}
}
/**
* Creates a new Pipeline object with Credential provided.
*
* @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
* @param pipelineOptions - Optional. Options.
* @returns A new Pipeline object.
*/
function newPipeline(credential, pipelineOptions = {}) {
if (!credential) {
credential = new AnonymousCredential();
}
const pipeline = new Pipeline([], pipelineOptions);
pipeline._credential = credential;
return pipeline;
}
function processDownlevelPipeline(pipeline) {
const knownFactoryFunctions = [
isAnonymousCredential,
isStorageSharedKeyCredential,
isCoreHttpBearerTokenFactory,
isStorageBrowserPolicyFactory,
isStorageRetryPolicyFactory,
isStorageTelemetryPolicyFactory,
isCoreHttpPolicyFactory,
];
if (pipeline.factories.length) {
const novelFactories = pipeline.factories.filter((factory) => {
return !knownFactoryFunctions.some((knownFactory) => knownFactory(factory));
});
if (novelFactories.length) {
const hasInjector = novelFactories.some((factory) => isInjectorPolicyFactory(factory));
// if there are any left over, wrap in a requestPolicyFactoryPolicy
return {
wrappedPolicies: createRequestPolicyFactoryPolicy(novelFactories),
afterRetry: hasInjector,
};
}
}
return undefined;
}
function getCoreClientOptions(pipeline) {
const { httpClient: v1Client, ...restOptions } = pipeline.options;
let httpClient = pipeline._coreHttpClient;
if (!httpClient) {
httpClient = v1Client ? convertHttpClient(v1Client) : cache_getCachedDefaultHttpClient();
pipeline._coreHttpClient = httpClient;
}
let corePipeline = pipeline._corePipeline;
if (!corePipeline) {
const packageDetails = `azsdk-js-azure-storage-blob/${esm_utils_constants_SDK_VERSION}`;
const userAgentPrefix = restOptions.userAgentOptions && restOptions.userAgentOptions.userAgentPrefix
? `${restOptions.userAgentOptions.userAgentPrefix} ${packageDetails}`
: `${packageDetails}`;
corePipeline = createClientPipeline({
...restOptions,
loggingOptions: {
additionalAllowedHeaderNames: StorageBlobLoggingAllowedHeaderNames,
additionalAllowedQueryParameters: StorageBlobLoggingAllowedQueryParameters,
logger: storage_blob_dist_esm_log_logger.info,
},
userAgentOptions: {
userAgentPrefix,
},
serializationOptions: {
stringifyXML: stringifyXML,
serializerOptions: {
xml: {
// Use customized XML char key of "#" so we can deserialize metadata
// with "_" key
xmlCharKey: "#",
},
},
},
deserializationOptions: {
parseXML: parseXML,
serializerOptions: {
xml: {
// Use customized XML char key of "#" so we can deserialize metadata
// with "_" key
xmlCharKey: "#",
},
},
},
});
corePipeline.removePolicy({ phase: "Retry" });
corePipeline.removePolicy({ name: decompressResponsePolicy_decompressResponsePolicyName });
corePipeline.addPolicy(storageCorrectContentLengthPolicy());
corePipeline.addPolicy(storageRetryPolicy(restOptions.retryOptions), { phase: "Retry" });
corePipeline.addPolicy(storageRequestFailureDetailsParserPolicy());
corePipeline.addPolicy(storageBrowserPolicy());
const downlevelResults = processDownlevelPipeline(pipeline);
if (downlevelResults) {
corePipeline.addPolicy(downlevelResults.wrappedPolicies, downlevelResults.afterRetry ? { afterPhase: "Retry" } : undefined);
}
const credential = getCredentialFromPipeline(pipeline);
if (isTokenCredential(credential)) {
corePipeline.addPolicy(bearerTokenAuthenticationPolicy({
credential,
scopes: restOptions.audience ?? StorageOAuthScopes,
challengeCallbacks: { authorizeRequestOnChallenge: authorizeRequestOnTenantChallenge },
}), { phase: "Sign" });
}
else if (credential instanceof StorageSharedKeyCredential) {
corePipeline.addPolicy(storageSharedKeyCredentialPolicy({
accountName: credential.accountName,
accountKey: credential.accountKey,
}), { phase: "Sign" });
}
pipeline._corePipeline = corePipeline;
}
return {
...restOptions,
allowInsecureConnection: true,
httpClient,
pipeline: corePipeline,
};
}
function getCredentialFromPipeline(pipeline) {
// see if we squirreled one away on the type itself
if (pipeline._credential) {
return pipeline._credential;
}
// if it came from another package, loop over the factories and look for one like before
let credential = new AnonymousCredential();
for (const factory of pipeline.factories) {
if (isTokenCredential(factory.credential)) {
// Only works if the factory has been attached a "credential" property.
// We do that in newPipeline() when using TokenCredential.
credential = factory.credential;
}
else if (isStorageSharedKeyCredential(factory)) {
return factory;
}
}
return credential;
}
function isStorageSharedKeyCredential(factory) {
if (factory instanceof StorageSharedKeyCredential) {
return true;
}
return factory.constructor.name === "StorageSharedKeyCredential";
}
function isAnonymousCredential(factory) {
if (factory instanceof AnonymousCredential) {
return true;
}
return factory.constructor.name === "AnonymousCredential";
}
function isCoreHttpBearerTokenFactory(factory) {
return isTokenCredential(factory.credential);
}
function isStorageBrowserPolicyFactory(factory) {
if (factory instanceof StorageBrowserPolicyFactory) {
return true;
}
return factory.constructor.name === "StorageBrowserPolicyFactory";
}
function isStorageRetryPolicyFactory(factory) {
if (factory instanceof StorageRetryPolicyFactory) {
return true;
}
return factory.constructor.name === "StorageRetryPolicyFactory";
}
function isStorageTelemetryPolicyFactory(factory) {
return factory.constructor.name === "TelemetryPolicyFactory";
}
function isInjectorPolicyFactory(factory) {
return factory.constructor.name === "InjectorPolicyFactory";
}
function isCoreHttpPolicyFactory(factory) {
const knownPolicies = [
"GenerateClientRequestIdPolicy",
"TracingPolicy",
"LogPolicy",
"ProxyPolicy",
"DisableResponseDecompressionPolicy",
"KeepAlivePolicy",
"DeserializationPolicy",
];
const mockHttpClient = {
sendRequest: async (request) => {
return {
request,
headers: request.headers.clone(),
status: 500,
};
},
};
const mockRequestPolicyOptions = {
log(_logLevel, _message) {
/* do nothing */
},
shouldLog(_logLevel) {
return false;
},
};
const policyInstance = factory.create(mockHttpClient, mockRequestPolicyOptions);
const policyName = policyInstance.constructor.name;
// bundlers sometimes add a custom suffix to the class name to make it unique
return knownPolicies.some((knownPolicyName) => {
return policyName.startsWith(knownPolicyName);
});
}
//# sourceMappingURL=Pipeline.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/models/index.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Known values of {@link EncryptionAlgorithmType} that the service accepts. */
var KnownEncryptionAlgorithmType;
(function (KnownEncryptionAlgorithmType) {
/** AES256 */
KnownEncryptionAlgorithmType["AES256"] = "AES256";
})(KnownEncryptionAlgorithmType || (KnownEncryptionAlgorithmType = {}));
/** Known values of {@link FileShareTokenIntent} that the service accepts. */
var KnownFileShareTokenIntent;
(function (KnownFileShareTokenIntent) {
/** Backup */
KnownFileShareTokenIntent["Backup"] = "backup";
})(KnownFileShareTokenIntent || (KnownFileShareTokenIntent = {}));
/** Known values of {@link BlobExpiryOptions} that the service accepts. */
var KnownBlobExpiryOptions;
(function (KnownBlobExpiryOptions) {
/** NeverExpire */
KnownBlobExpiryOptions["NeverExpire"] = "NeverExpire";
/** RelativeToCreation */
KnownBlobExpiryOptions["RelativeToCreation"] = "RelativeToCreation";
/** RelativeToNow */
KnownBlobExpiryOptions["RelativeToNow"] = "RelativeToNow";
/** Absolute */
KnownBlobExpiryOptions["Absolute"] = "Absolute";
})(KnownBlobExpiryOptions || (KnownBlobExpiryOptions = {}));
/** Known values of {@link StorageErrorCode} that the service accepts. */
var KnownStorageErrorCode;
(function (KnownStorageErrorCode) {
/** AccountAlreadyExists */
KnownStorageErrorCode["AccountAlreadyExists"] = "AccountAlreadyExists";
/** AccountBeingCreated */
KnownStorageErrorCode["AccountBeingCreated"] = "AccountBeingCreated";
/** AccountIsDisabled */
KnownStorageErrorCode["AccountIsDisabled"] = "AccountIsDisabled";
/** AuthenticationFailed */
KnownStorageErrorCode["AuthenticationFailed"] = "AuthenticationFailed";
/** AuthorizationFailure */
KnownStorageErrorCode["AuthorizationFailure"] = "AuthorizationFailure";
/** ConditionHeadersNotSupported */
KnownStorageErrorCode["ConditionHeadersNotSupported"] = "ConditionHeadersNotSupported";
/** ConditionNotMet */
KnownStorageErrorCode["ConditionNotMet"] = "ConditionNotMet";
/** EmptyMetadataKey */
KnownStorageErrorCode["EmptyMetadataKey"] = "EmptyMetadataKey";
/** InsufficientAccountPermissions */
KnownStorageErrorCode["InsufficientAccountPermissions"] = "InsufficientAccountPermissions";
/** InternalError */
KnownStorageErrorCode["InternalError"] = "InternalError";
/** InvalidAuthenticationInfo */
KnownStorageErrorCode["InvalidAuthenticationInfo"] = "InvalidAuthenticationInfo";
/** InvalidHeaderValue */
KnownStorageErrorCode["InvalidHeaderValue"] = "InvalidHeaderValue";
/** InvalidHttpVerb */
KnownStorageErrorCode["InvalidHttpVerb"] = "InvalidHttpVerb";
/** InvalidInput */
KnownStorageErrorCode["InvalidInput"] = "InvalidInput";
/** InvalidMd5 */
KnownStorageErrorCode["InvalidMd5"] = "InvalidMd5";
/** InvalidMetadata */
KnownStorageErrorCode["InvalidMetadata"] = "InvalidMetadata";
/** InvalidQueryParameterValue */
KnownStorageErrorCode["InvalidQueryParameterValue"] = "InvalidQueryParameterValue";
/** InvalidRange */
KnownStorageErrorCode["InvalidRange"] = "InvalidRange";
/** InvalidResourceName */
KnownStorageErrorCode["InvalidResourceName"] = "InvalidResourceName";
/** InvalidUri */
KnownStorageErrorCode["InvalidUri"] = "InvalidUri";
/** InvalidXmlDocument */
KnownStorageErrorCode["InvalidXmlDocument"] = "InvalidXmlDocument";
/** InvalidXmlNodeValue */
KnownStorageErrorCode["InvalidXmlNodeValue"] = "InvalidXmlNodeValue";
/** Md5Mismatch */
KnownStorageErrorCode["Md5Mismatch"] = "Md5Mismatch";
/** MetadataTooLarge */
KnownStorageErrorCode["MetadataTooLarge"] = "MetadataTooLarge";
/** MissingContentLengthHeader */
KnownStorageErrorCode["MissingContentLengthHeader"] = "MissingContentLengthHeader";
/** MissingRequiredQueryParameter */
KnownStorageErrorCode["MissingRequiredQueryParameter"] = "MissingRequiredQueryParameter";
/** MissingRequiredHeader */
KnownStorageErrorCode["MissingRequiredHeader"] = "MissingRequiredHeader";
/** MissingRequiredXmlNode */
KnownStorageErrorCode["MissingRequiredXmlNode"] = "MissingRequiredXmlNode";
/** MultipleConditionHeadersNotSupported */
KnownStorageErrorCode["MultipleConditionHeadersNotSupported"] = "MultipleConditionHeadersNotSupported";
/** OperationTimedOut */
KnownStorageErrorCode["OperationTimedOut"] = "OperationTimedOut";
/** OutOfRangeInput */
KnownStorageErrorCode["OutOfRangeInput"] = "OutOfRangeInput";
/** OutOfRangeQueryParameterValue */
KnownStorageErrorCode["OutOfRangeQueryParameterValue"] = "OutOfRangeQueryParameterValue";
/** RequestBodyTooLarge */
KnownStorageErrorCode["RequestBodyTooLarge"] = "RequestBodyTooLarge";
/** ResourceTypeMismatch */
KnownStorageErrorCode["ResourceTypeMismatch"] = "ResourceTypeMismatch";
/** RequestUrlFailedToParse */
KnownStorageErrorCode["RequestUrlFailedToParse"] = "RequestUrlFailedToParse";
/** ResourceAlreadyExists */
KnownStorageErrorCode["ResourceAlreadyExists"] = "ResourceAlreadyExists";
/** ResourceNotFound */
KnownStorageErrorCode["ResourceNotFound"] = "ResourceNotFound";
/** ServerBusy */
KnownStorageErrorCode["ServerBusy"] = "ServerBusy";
/** UnsupportedHeader */
KnownStorageErrorCode["UnsupportedHeader"] = "UnsupportedHeader";
/** UnsupportedXmlNode */
KnownStorageErrorCode["UnsupportedXmlNode"] = "UnsupportedXmlNode";
/** UnsupportedQueryParameter */
KnownStorageErrorCode["UnsupportedQueryParameter"] = "UnsupportedQueryParameter";
/** UnsupportedHttpVerb */
KnownStorageErrorCode["UnsupportedHttpVerb"] = "UnsupportedHttpVerb";
/** AppendPositionConditionNotMet */
KnownStorageErrorCode["AppendPositionConditionNotMet"] = "AppendPositionConditionNotMet";
/** BlobAlreadyExists */
KnownStorageErrorCode["BlobAlreadyExists"] = "BlobAlreadyExists";
/** BlobImmutableDueToPolicy */
KnownStorageErrorCode["BlobImmutableDueToPolicy"] = "BlobImmutableDueToPolicy";
/** BlobNotFound */
KnownStorageErrorCode["BlobNotFound"] = "BlobNotFound";
/** BlobOverwritten */
KnownStorageErrorCode["BlobOverwritten"] = "BlobOverwritten";
/** BlobTierInadequateForContentLength */
KnownStorageErrorCode["BlobTierInadequateForContentLength"] = "BlobTierInadequateForContentLength";
/** BlobUsesCustomerSpecifiedEncryption */
KnownStorageErrorCode["BlobUsesCustomerSpecifiedEncryption"] = "BlobUsesCustomerSpecifiedEncryption";
/** BlockCountExceedsLimit */
KnownStorageErrorCode["BlockCountExceedsLimit"] = "BlockCountExceedsLimit";
/** BlockListTooLong */
KnownStorageErrorCode["BlockListTooLong"] = "BlockListTooLong";
/** CannotChangeToLowerTier */
KnownStorageErrorCode["CannotChangeToLowerTier"] = "CannotChangeToLowerTier";
/** CannotVerifyCopySource */
KnownStorageErrorCode["CannotVerifyCopySource"] = "CannotVerifyCopySource";
/** ContainerAlreadyExists */
KnownStorageErrorCode["ContainerAlreadyExists"] = "ContainerAlreadyExists";
/** ContainerBeingDeleted */
KnownStorageErrorCode["ContainerBeingDeleted"] = "ContainerBeingDeleted";
/** ContainerDisabled */
KnownStorageErrorCode["ContainerDisabled"] = "ContainerDisabled";
/** ContainerNotFound */
KnownStorageErrorCode["ContainerNotFound"] = "ContainerNotFound";
/** ContentLengthLargerThanTierLimit */
KnownStorageErrorCode["ContentLengthLargerThanTierLimit"] = "ContentLengthLargerThanTierLimit";
/** CopyAcrossAccountsNotSupported */
KnownStorageErrorCode["CopyAcrossAccountsNotSupported"] = "CopyAcrossAccountsNotSupported";
/** CopyIdMismatch */
KnownStorageErrorCode["CopyIdMismatch"] = "CopyIdMismatch";
/** FeatureVersionMismatch */
KnownStorageErrorCode["FeatureVersionMismatch"] = "FeatureVersionMismatch";
/** IncrementalCopyBlobMismatch */
KnownStorageErrorCode["IncrementalCopyBlobMismatch"] = "IncrementalCopyBlobMismatch";
/** IncrementalCopyOfEarlierSnapshotNotAllowed */
KnownStorageErrorCode["IncrementalCopyOfEarlierSnapshotNotAllowed"] = "IncrementalCopyOfEarlierSnapshotNotAllowed";
/** IncrementalCopySourceMustBeSnapshot */
KnownStorageErrorCode["IncrementalCopySourceMustBeSnapshot"] = "IncrementalCopySourceMustBeSnapshot";
/** InfiniteLeaseDurationRequired */
KnownStorageErrorCode["InfiniteLeaseDurationRequired"] = "InfiniteLeaseDurationRequired";
/** InvalidBlobOrBlock */
KnownStorageErrorCode["InvalidBlobOrBlock"] = "InvalidBlobOrBlock";
/** InvalidBlobTier */
KnownStorageErrorCode["InvalidBlobTier"] = "InvalidBlobTier";
/** InvalidBlobType */
KnownStorageErrorCode["InvalidBlobType"] = "InvalidBlobType";
/** InvalidBlockId */
KnownStorageErrorCode["InvalidBlockId"] = "InvalidBlockId";
/** InvalidBlockList */
KnownStorageErrorCode["InvalidBlockList"] = "InvalidBlockList";
/** InvalidOperation */
KnownStorageErrorCode["InvalidOperation"] = "InvalidOperation";
/** InvalidPageRange */
KnownStorageErrorCode["InvalidPageRange"] = "InvalidPageRange";
/** InvalidSourceBlobType */
KnownStorageErrorCode["InvalidSourceBlobType"] = "InvalidSourceBlobType";
/** InvalidSourceBlobUrl */
KnownStorageErrorCode["InvalidSourceBlobUrl"] = "InvalidSourceBlobUrl";
/** InvalidVersionForPageBlobOperation */
KnownStorageErrorCode["InvalidVersionForPageBlobOperation"] = "InvalidVersionForPageBlobOperation";
/** LeaseAlreadyPresent */
KnownStorageErrorCode["LeaseAlreadyPresent"] = "LeaseAlreadyPresent";
/** LeaseAlreadyBroken */
KnownStorageErrorCode["LeaseAlreadyBroken"] = "LeaseAlreadyBroken";
/** LeaseIdMismatchWithBlobOperation */
KnownStorageErrorCode["LeaseIdMismatchWithBlobOperation"] = "LeaseIdMismatchWithBlobOperation";
/** LeaseIdMismatchWithContainerOperation */
KnownStorageErrorCode["LeaseIdMismatchWithContainerOperation"] = "LeaseIdMismatchWithContainerOperation";
/** LeaseIdMismatchWithLeaseOperation */
KnownStorageErrorCode["LeaseIdMismatchWithLeaseOperation"] = "LeaseIdMismatchWithLeaseOperation";
/** LeaseIdMissing */
KnownStorageErrorCode["LeaseIdMissing"] = "LeaseIdMissing";
/** LeaseIsBreakingAndCannotBeAcquired */
KnownStorageErrorCode["LeaseIsBreakingAndCannotBeAcquired"] = "LeaseIsBreakingAndCannotBeAcquired";
/** LeaseIsBreakingAndCannotBeChanged */
KnownStorageErrorCode["LeaseIsBreakingAndCannotBeChanged"] = "LeaseIsBreakingAndCannotBeChanged";
/** LeaseIsBrokenAndCannotBeRenewed */
KnownStorageErrorCode["LeaseIsBrokenAndCannotBeRenewed"] = "LeaseIsBrokenAndCannotBeRenewed";
/** LeaseLost */
KnownStorageErrorCode["LeaseLost"] = "LeaseLost";
/** LeaseNotPresentWithBlobOperation */
KnownStorageErrorCode["LeaseNotPresentWithBlobOperation"] = "LeaseNotPresentWithBlobOperation";
/** LeaseNotPresentWithContainerOperation */
KnownStorageErrorCode["LeaseNotPresentWithContainerOperation"] = "LeaseNotPresentWithContainerOperation";
/** LeaseNotPresentWithLeaseOperation */
KnownStorageErrorCode["LeaseNotPresentWithLeaseOperation"] = "LeaseNotPresentWithLeaseOperation";
/** MaxBlobSizeConditionNotMet */
KnownStorageErrorCode["MaxBlobSizeConditionNotMet"] = "MaxBlobSizeConditionNotMet";
/** NoAuthenticationInformation */
KnownStorageErrorCode["NoAuthenticationInformation"] = "NoAuthenticationInformation";
/** NoPendingCopyOperation */
KnownStorageErrorCode["NoPendingCopyOperation"] = "NoPendingCopyOperation";
/** OperationNotAllowedOnIncrementalCopyBlob */
KnownStorageErrorCode["OperationNotAllowedOnIncrementalCopyBlob"] = "OperationNotAllowedOnIncrementalCopyBlob";
/** PendingCopyOperation */
KnownStorageErrorCode["PendingCopyOperation"] = "PendingCopyOperation";
/** PreviousSnapshotCannotBeNewer */
KnownStorageErrorCode["PreviousSnapshotCannotBeNewer"] = "PreviousSnapshotCannotBeNewer";
/** PreviousSnapshotNotFound */
KnownStorageErrorCode["PreviousSnapshotNotFound"] = "PreviousSnapshotNotFound";
/** PreviousSnapshotOperationNotSupported */
KnownStorageErrorCode["PreviousSnapshotOperationNotSupported"] = "PreviousSnapshotOperationNotSupported";
/** SequenceNumberConditionNotMet */
KnownStorageErrorCode["SequenceNumberConditionNotMet"] = "SequenceNumberConditionNotMet";
/** SequenceNumberIncrementTooLarge */
KnownStorageErrorCode["SequenceNumberIncrementTooLarge"] = "SequenceNumberIncrementTooLarge";
/** SnapshotCountExceeded */
KnownStorageErrorCode["SnapshotCountExceeded"] = "SnapshotCountExceeded";
/** SnapshotOperationRateExceeded */
KnownStorageErrorCode["SnapshotOperationRateExceeded"] = "SnapshotOperationRateExceeded";
/** SnapshotsPresent */
KnownStorageErrorCode["SnapshotsPresent"] = "SnapshotsPresent";
/** SourceConditionNotMet */
KnownStorageErrorCode["SourceConditionNotMet"] = "SourceConditionNotMet";
/** SystemInUse */
KnownStorageErrorCode["SystemInUse"] = "SystemInUse";
/** TargetConditionNotMet */
KnownStorageErrorCode["TargetConditionNotMet"] = "TargetConditionNotMet";
/** UnauthorizedBlobOverwrite */
KnownStorageErrorCode["UnauthorizedBlobOverwrite"] = "UnauthorizedBlobOverwrite";
/** BlobBeingRehydrated */
KnownStorageErrorCode["BlobBeingRehydrated"] = "BlobBeingRehydrated";
/** BlobArchived */
KnownStorageErrorCode["BlobArchived"] = "BlobArchived";
/** BlobNotArchived */
KnownStorageErrorCode["BlobNotArchived"] = "BlobNotArchived";
/** AuthorizationSourceIPMismatch */
KnownStorageErrorCode["AuthorizationSourceIPMismatch"] = "AuthorizationSourceIPMismatch";
/** AuthorizationProtocolMismatch */
KnownStorageErrorCode["AuthorizationProtocolMismatch"] = "AuthorizationProtocolMismatch";
/** AuthorizationPermissionMismatch */
KnownStorageErrorCode["AuthorizationPermissionMismatch"] = "AuthorizationPermissionMismatch";
/** AuthorizationServiceMismatch */
KnownStorageErrorCode["AuthorizationServiceMismatch"] = "AuthorizationServiceMismatch";
/** AuthorizationResourceTypeMismatch */
KnownStorageErrorCode["AuthorizationResourceTypeMismatch"] = "AuthorizationResourceTypeMismatch";
/** BlobAccessTierNotSupportedForAccountType */
KnownStorageErrorCode["BlobAccessTierNotSupportedForAccountType"] = "BlobAccessTierNotSupportedForAccountType";
})(KnownStorageErrorCode || (KnownStorageErrorCode = {}));
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/models/mappers.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
const BlobServiceProperties = {
serializedName: "BlobServiceProperties",
xmlName: "StorageServiceProperties",
type: {
name: "Composite",
className: "BlobServiceProperties",
modelProperties: {
blobAnalyticsLogging: {
serializedName: "Logging",
xmlName: "Logging",
type: {
name: "Composite",
className: "Logging",
},
},
hourMetrics: {
serializedName: "HourMetrics",
xmlName: "HourMetrics",
type: {
name: "Composite",
className: "Metrics",
},
},
minuteMetrics: {
serializedName: "MinuteMetrics",
xmlName: "MinuteMetrics",
type: {
name: "Composite",
className: "Metrics",
},
},
cors: {
serializedName: "Cors",
xmlName: "Cors",
xmlIsWrapped: true,
xmlElementName: "CorsRule",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "CorsRule",
},
},
},
},
defaultServiceVersion: {
serializedName: "DefaultServiceVersion",
xmlName: "DefaultServiceVersion",
type: {
name: "String",
},
},
deleteRetentionPolicy: {
serializedName: "DeleteRetentionPolicy",
xmlName: "DeleteRetentionPolicy",
type: {
name: "Composite",
className: "RetentionPolicy",
},
},
staticWebsite: {
serializedName: "StaticWebsite",
xmlName: "StaticWebsite",
type: {
name: "Composite",
className: "StaticWebsite",
},
},
},
},
};
const Logging = {
serializedName: "Logging",
type: {
name: "Composite",
className: "Logging",
modelProperties: {
version: {
serializedName: "Version",
required: true,
xmlName: "Version",
type: {
name: "String",
},
},
deleteProperty: {
serializedName: "Delete",
required: true,
xmlName: "Delete",
type: {
name: "Boolean",
},
},
read: {
serializedName: "Read",
required: true,
xmlName: "Read",
type: {
name: "Boolean",
},
},
write: {
serializedName: "Write",
required: true,
xmlName: "Write",
type: {
name: "Boolean",
},
},
retentionPolicy: {
serializedName: "RetentionPolicy",
xmlName: "RetentionPolicy",
type: {
name: "Composite",
className: "RetentionPolicy",
},
},
},
},
};
const RetentionPolicy = {
serializedName: "RetentionPolicy",
type: {
name: "Composite",
className: "RetentionPolicy",
modelProperties: {
enabled: {
serializedName: "Enabled",
required: true,
xmlName: "Enabled",
type: {
name: "Boolean",
},
},
days: {
constraints: {
InclusiveMinimum: 1,
},
serializedName: "Days",
xmlName: "Days",
type: {
name: "Number",
},
},
},
},
};
const Metrics = {
serializedName: "Metrics",
type: {
name: "Composite",
className: "Metrics",
modelProperties: {
version: {
serializedName: "Version",
xmlName: "Version",
type: {
name: "String",
},
},
enabled: {
serializedName: "Enabled",
required: true,
xmlName: "Enabled",
type: {
name: "Boolean",
},
},
includeAPIs: {
serializedName: "IncludeAPIs",
xmlName: "IncludeAPIs",
type: {
name: "Boolean",
},
},
retentionPolicy: {
serializedName: "RetentionPolicy",
xmlName: "RetentionPolicy",
type: {
name: "Composite",
className: "RetentionPolicy",
},
},
},
},
};
const CorsRule = {
serializedName: "CorsRule",
type: {
name: "Composite",
className: "CorsRule",
modelProperties: {
allowedOrigins: {
serializedName: "AllowedOrigins",
required: true,
xmlName: "AllowedOrigins",
type: {
name: "String",
},
},
allowedMethods: {
serializedName: "AllowedMethods",
required: true,
xmlName: "AllowedMethods",
type: {
name: "String",
},
},
allowedHeaders: {
serializedName: "AllowedHeaders",
required: true,
xmlName: "AllowedHeaders",
type: {
name: "String",
},
},
exposedHeaders: {
serializedName: "ExposedHeaders",
required: true,
xmlName: "ExposedHeaders",
type: {
name: "String",
},
},
maxAgeInSeconds: {
constraints: {
InclusiveMinimum: 0,
},
serializedName: "MaxAgeInSeconds",
required: true,
xmlName: "MaxAgeInSeconds",
type: {
name: "Number",
},
},
},
},
};
const StaticWebsite = {
serializedName: "StaticWebsite",
type: {
name: "Composite",
className: "StaticWebsite",
modelProperties: {
enabled: {
serializedName: "Enabled",
required: true,
xmlName: "Enabled",
type: {
name: "Boolean",
},
},
indexDocument: {
serializedName: "IndexDocument",
xmlName: "IndexDocument",
type: {
name: "String",
},
},
errorDocument404Path: {
serializedName: "ErrorDocument404Path",
xmlName: "ErrorDocument404Path",
type: {
name: "String",
},
},
defaultIndexDocumentPath: {
serializedName: "DefaultIndexDocumentPath",
xmlName: "DefaultIndexDocumentPath",
type: {
name: "String",
},
},
},
},
};
const StorageError = {
serializedName: "StorageError",
type: {
name: "Composite",
className: "StorageError",
modelProperties: {
message: {
serializedName: "Message",
xmlName: "Message",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "CopySourceStatusCode",
xmlName: "CopySourceStatusCode",
type: {
name: "Number",
},
},
copySourceErrorCode: {
serializedName: "CopySourceErrorCode",
xmlName: "CopySourceErrorCode",
type: {
name: "String",
},
},
copySourceErrorMessage: {
serializedName: "CopySourceErrorMessage",
xmlName: "CopySourceErrorMessage",
type: {
name: "String",
},
},
code: {
serializedName: "Code",
xmlName: "Code",
type: {
name: "String",
},
},
authenticationErrorDetail: {
serializedName: "AuthenticationErrorDetail",
xmlName: "AuthenticationErrorDetail",
type: {
name: "String",
},
},
},
},
};
const BlobServiceStatistics = {
serializedName: "BlobServiceStatistics",
xmlName: "StorageServiceStats",
type: {
name: "Composite",
className: "BlobServiceStatistics",
modelProperties: {
geoReplication: {
serializedName: "GeoReplication",
xmlName: "GeoReplication",
type: {
name: "Composite",
className: "GeoReplication",
},
},
},
},
};
const GeoReplication = {
serializedName: "GeoReplication",
type: {
name: "Composite",
className: "GeoReplication",
modelProperties: {
status: {
serializedName: "Status",
required: true,
xmlName: "Status",
type: {
name: "Enum",
allowedValues: ["live", "bootstrap", "unavailable"],
},
},
lastSyncOn: {
serializedName: "LastSyncTime",
required: true,
xmlName: "LastSyncTime",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ListContainersSegmentResponse = {
serializedName: "ListContainersSegmentResponse",
xmlName: "EnumerationResults",
type: {
name: "Composite",
className: "ListContainersSegmentResponse",
modelProperties: {
serviceEndpoint: {
serializedName: "ServiceEndpoint",
required: true,
xmlName: "ServiceEndpoint",
xmlIsAttribute: true,
type: {
name: "String",
},
},
prefix: {
serializedName: "Prefix",
xmlName: "Prefix",
type: {
name: "String",
},
},
marker: {
serializedName: "Marker",
xmlName: "Marker",
type: {
name: "String",
},
},
maxPageSize: {
serializedName: "MaxResults",
xmlName: "MaxResults",
type: {
name: "Number",
},
},
containerItems: {
serializedName: "ContainerItems",
required: true,
xmlName: "Containers",
xmlIsWrapped: true,
xmlElementName: "Container",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "ContainerItem",
},
},
},
},
continuationToken: {
serializedName: "NextMarker",
xmlName: "NextMarker",
type: {
name: "String",
},
},
},
},
};
const ContainerItem = {
serializedName: "ContainerItem",
xmlName: "Container",
type: {
name: "Composite",
className: "ContainerItem",
modelProperties: {
name: {
serializedName: "Name",
required: true,
xmlName: "Name",
type: {
name: "String",
},
},
deleted: {
serializedName: "Deleted",
xmlName: "Deleted",
type: {
name: "Boolean",
},
},
version: {
serializedName: "Version",
xmlName: "Version",
type: {
name: "String",
},
},
properties: {
serializedName: "Properties",
xmlName: "Properties",
type: {
name: "Composite",
className: "ContainerProperties",
},
},
metadata: {
serializedName: "Metadata",
xmlName: "Metadata",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
},
},
};
const ContainerProperties = {
serializedName: "ContainerProperties",
type: {
name: "Composite",
className: "ContainerProperties",
modelProperties: {
lastModified: {
serializedName: "Last-Modified",
required: true,
xmlName: "Last-Modified",
type: {
name: "DateTimeRfc1123",
},
},
etag: {
serializedName: "Etag",
required: true,
xmlName: "Etag",
type: {
name: "String",
},
},
leaseStatus: {
serializedName: "LeaseStatus",
xmlName: "LeaseStatus",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
leaseState: {
serializedName: "LeaseState",
xmlName: "LeaseState",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseDuration: {
serializedName: "LeaseDuration",
xmlName: "LeaseDuration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
publicAccess: {
serializedName: "PublicAccess",
xmlName: "PublicAccess",
type: {
name: "Enum",
allowedValues: ["container", "blob"],
},
},
hasImmutabilityPolicy: {
serializedName: "HasImmutabilityPolicy",
xmlName: "HasImmutabilityPolicy",
type: {
name: "Boolean",
},
},
hasLegalHold: {
serializedName: "HasLegalHold",
xmlName: "HasLegalHold",
type: {
name: "Boolean",
},
},
defaultEncryptionScope: {
serializedName: "DefaultEncryptionScope",
xmlName: "DefaultEncryptionScope",
type: {
name: "String",
},
},
preventEncryptionScopeOverride: {
serializedName: "DenyEncryptionScopeOverride",
xmlName: "DenyEncryptionScopeOverride",
type: {
name: "Boolean",
},
},
deletedOn: {
serializedName: "DeletedTime",
xmlName: "DeletedTime",
type: {
name: "DateTimeRfc1123",
},
},
remainingRetentionDays: {
serializedName: "RemainingRetentionDays",
xmlName: "RemainingRetentionDays",
type: {
name: "Number",
},
},
isImmutableStorageWithVersioningEnabled: {
serializedName: "ImmutableStorageWithVersioningEnabled",
xmlName: "ImmutableStorageWithVersioningEnabled",
type: {
name: "Boolean",
},
},
},
},
};
const KeyInfo = {
serializedName: "KeyInfo",
type: {
name: "Composite",
className: "KeyInfo",
modelProperties: {
startsOn: {
serializedName: "Start",
required: true,
xmlName: "Start",
type: {
name: "String",
},
},
expiresOn: {
serializedName: "Expiry",
required: true,
xmlName: "Expiry",
type: {
name: "String",
},
},
delegatedUserTid: {
serializedName: "DelegatedUserTid",
xmlName: "DelegatedUserTid",
type: {
name: "String",
},
},
},
},
};
const UserDelegationKey = {
serializedName: "UserDelegationKey",
type: {
name: "Composite",
className: "UserDelegationKey",
modelProperties: {
signedObjectId: {
serializedName: "SignedOid",
required: true,
xmlName: "SignedOid",
type: {
name: "String",
},
},
signedTenantId: {
serializedName: "SignedTid",
required: true,
xmlName: "SignedTid",
type: {
name: "String",
},
},
signedStartsOn: {
serializedName: "SignedStart",
required: true,
xmlName: "SignedStart",
type: {
name: "String",
},
},
signedExpiresOn: {
serializedName: "SignedExpiry",
required: true,
xmlName: "SignedExpiry",
type: {
name: "String",
},
},
signedService: {
serializedName: "SignedService",
required: true,
xmlName: "SignedService",
type: {
name: "String",
},
},
signedVersion: {
serializedName: "SignedVersion",
required: true,
xmlName: "SignedVersion",
type: {
name: "String",
},
},
signedDelegatedUserTenantId: {
serializedName: "SignedDelegatedUserTid",
xmlName: "SignedDelegatedUserTid",
type: {
name: "String",
},
},
value: {
serializedName: "Value",
required: true,
xmlName: "Value",
type: {
name: "String",
},
},
},
},
};
const FilterBlobSegment = {
serializedName: "FilterBlobSegment",
xmlName: "EnumerationResults",
type: {
name: "Composite",
className: "FilterBlobSegment",
modelProperties: {
serviceEndpoint: {
serializedName: "ServiceEndpoint",
required: true,
xmlName: "ServiceEndpoint",
xmlIsAttribute: true,
type: {
name: "String",
},
},
where: {
serializedName: "Where",
required: true,
xmlName: "Where",
type: {
name: "String",
},
},
blobs: {
serializedName: "Blobs",
required: true,
xmlName: "Blobs",
xmlIsWrapped: true,
xmlElementName: "Blob",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "FilterBlobItem",
},
},
},
},
continuationToken: {
serializedName: "NextMarker",
xmlName: "NextMarker",
type: {
name: "String",
},
},
},
},
};
const FilterBlobItem = {
serializedName: "FilterBlobItem",
xmlName: "Blob",
type: {
name: "Composite",
className: "FilterBlobItem",
modelProperties: {
name: {
serializedName: "Name",
required: true,
xmlName: "Name",
type: {
name: "String",
},
},
containerName: {
serializedName: "ContainerName",
required: true,
xmlName: "ContainerName",
type: {
name: "String",
},
},
tags: {
serializedName: "Tags",
xmlName: "Tags",
type: {
name: "Composite",
className: "BlobTags",
},
},
},
},
};
const BlobTags = {
serializedName: "BlobTags",
xmlName: "Tags",
type: {
name: "Composite",
className: "BlobTags",
modelProperties: {
blobTagSet: {
serializedName: "BlobTagSet",
required: true,
xmlName: "TagSet",
xmlIsWrapped: true,
xmlElementName: "Tag",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "BlobTag",
},
},
},
},
},
},
};
const BlobTag = {
serializedName: "BlobTag",
xmlName: "Tag",
type: {
name: "Composite",
className: "BlobTag",
modelProperties: {
key: {
serializedName: "Key",
required: true,
xmlName: "Key",
type: {
name: "String",
},
},
value: {
serializedName: "Value",
required: true,
xmlName: "Value",
type: {
name: "String",
},
},
},
},
};
const SignedIdentifier = {
serializedName: "SignedIdentifier",
xmlName: "SignedIdentifier",
type: {
name: "Composite",
className: "SignedIdentifier",
modelProperties: {
id: {
serializedName: "Id",
required: true,
xmlName: "Id",
type: {
name: "String",
},
},
accessPolicy: {
serializedName: "AccessPolicy",
xmlName: "AccessPolicy",
type: {
name: "Composite",
className: "AccessPolicy",
},
},
},
},
};
const AccessPolicy = {
serializedName: "AccessPolicy",
type: {
name: "Composite",
className: "AccessPolicy",
modelProperties: {
startsOn: {
serializedName: "Start",
xmlName: "Start",
type: {
name: "String",
},
},
expiresOn: {
serializedName: "Expiry",
xmlName: "Expiry",
type: {
name: "String",
},
},
permissions: {
serializedName: "Permission",
xmlName: "Permission",
type: {
name: "String",
},
},
},
},
};
const ListBlobsFlatSegmentResponse = {
serializedName: "ListBlobsFlatSegmentResponse",
xmlName: "EnumerationResults",
type: {
name: "Composite",
className: "ListBlobsFlatSegmentResponse",
modelProperties: {
serviceEndpoint: {
serializedName: "ServiceEndpoint",
required: true,
xmlName: "ServiceEndpoint",
xmlIsAttribute: true,
type: {
name: "String",
},
},
containerName: {
serializedName: "ContainerName",
required: true,
xmlName: "ContainerName",
xmlIsAttribute: true,
type: {
name: "String",
},
},
prefix: {
serializedName: "Prefix",
xmlName: "Prefix",
type: {
name: "String",
},
},
marker: {
serializedName: "Marker",
xmlName: "Marker",
type: {
name: "String",
},
},
maxPageSize: {
serializedName: "MaxResults",
xmlName: "MaxResults",
type: {
name: "Number",
},
},
segment: {
serializedName: "Segment",
xmlName: "Blobs",
type: {
name: "Composite",
className: "BlobFlatListSegment",
},
},
continuationToken: {
serializedName: "NextMarker",
xmlName: "NextMarker",
type: {
name: "String",
},
},
},
},
};
const BlobFlatListSegment = {
serializedName: "BlobFlatListSegment",
xmlName: "Blobs",
type: {
name: "Composite",
className: "BlobFlatListSegment",
modelProperties: {
blobItems: {
serializedName: "BlobItems",
required: true,
xmlName: "BlobItems",
xmlElementName: "Blob",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "BlobItemInternal",
},
},
},
},
},
},
};
const BlobItemInternal = {
serializedName: "BlobItemInternal",
xmlName: "Blob",
type: {
name: "Composite",
className: "BlobItemInternal",
modelProperties: {
name: {
serializedName: "Name",
xmlName: "Name",
type: {
name: "Composite",
className: "BlobName",
},
},
deleted: {
serializedName: "Deleted",
required: true,
xmlName: "Deleted",
type: {
name: "Boolean",
},
},
snapshot: {
serializedName: "Snapshot",
required: true,
xmlName: "Snapshot",
type: {
name: "String",
},
},
versionId: {
serializedName: "VersionId",
xmlName: "VersionId",
type: {
name: "String",
},
},
isCurrentVersion: {
serializedName: "IsCurrentVersion",
xmlName: "IsCurrentVersion",
type: {
name: "Boolean",
},
},
properties: {
serializedName: "Properties",
xmlName: "Properties",
type: {
name: "Composite",
className: "BlobPropertiesInternal",
},
},
metadata: {
serializedName: "Metadata",
xmlName: "Metadata",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
blobTags: {
serializedName: "BlobTags",
xmlName: "Tags",
type: {
name: "Composite",
className: "BlobTags",
},
},
objectReplicationMetadata: {
serializedName: "ObjectReplicationMetadata",
xmlName: "OrMetadata",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
hasVersionsOnly: {
serializedName: "HasVersionsOnly",
xmlName: "HasVersionsOnly",
type: {
name: "Boolean",
},
},
},
},
};
const BlobName = {
serializedName: "BlobName",
type: {
name: "Composite",
className: "BlobName",
modelProperties: {
encoded: {
serializedName: "Encoded",
xmlName: "Encoded",
xmlIsAttribute: true,
type: {
name: "Boolean",
},
},
content: {
serializedName: "content",
xmlName: "content",
xmlIsMsText: true,
type: {
name: "String",
},
},
},
},
};
const BlobPropertiesInternal = {
serializedName: "BlobPropertiesInternal",
xmlName: "Properties",
type: {
name: "Composite",
className: "BlobPropertiesInternal",
modelProperties: {
createdOn: {
serializedName: "Creation-Time",
xmlName: "Creation-Time",
type: {
name: "DateTimeRfc1123",
},
},
lastModified: {
serializedName: "Last-Modified",
required: true,
xmlName: "Last-Modified",
type: {
name: "DateTimeRfc1123",
},
},
etag: {
serializedName: "Etag",
required: true,
xmlName: "Etag",
type: {
name: "String",
},
},
contentLength: {
serializedName: "Content-Length",
xmlName: "Content-Length",
type: {
name: "Number",
},
},
contentType: {
serializedName: "Content-Type",
xmlName: "Content-Type",
type: {
name: "String",
},
},
contentEncoding: {
serializedName: "Content-Encoding",
xmlName: "Content-Encoding",
type: {
name: "String",
},
},
contentLanguage: {
serializedName: "Content-Language",
xmlName: "Content-Language",
type: {
name: "String",
},
},
contentMD5: {
serializedName: "Content-MD5",
xmlName: "Content-MD5",
type: {
name: "ByteArray",
},
},
contentDisposition: {
serializedName: "Content-Disposition",
xmlName: "Content-Disposition",
type: {
name: "String",
},
},
cacheControl: {
serializedName: "Cache-Control",
xmlName: "Cache-Control",
type: {
name: "String",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
blobType: {
serializedName: "BlobType",
xmlName: "BlobType",
type: {
name: "Enum",
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"],
},
},
leaseStatus: {
serializedName: "LeaseStatus",
xmlName: "LeaseStatus",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
leaseState: {
serializedName: "LeaseState",
xmlName: "LeaseState",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseDuration: {
serializedName: "LeaseDuration",
xmlName: "LeaseDuration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
copyId: {
serializedName: "CopyId",
xmlName: "CopyId",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "CopyStatus",
xmlName: "CopyStatus",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
copySource: {
serializedName: "CopySource",
xmlName: "CopySource",
type: {
name: "String",
},
},
copyProgress: {
serializedName: "CopyProgress",
xmlName: "CopyProgress",
type: {
name: "String",
},
},
copyCompletedOn: {
serializedName: "CopyCompletionTime",
xmlName: "CopyCompletionTime",
type: {
name: "DateTimeRfc1123",
},
},
copyStatusDescription: {
serializedName: "CopyStatusDescription",
xmlName: "CopyStatusDescription",
type: {
name: "String",
},
},
serverEncrypted: {
serializedName: "ServerEncrypted",
xmlName: "ServerEncrypted",
type: {
name: "Boolean",
},
},
incrementalCopy: {
serializedName: "IncrementalCopy",
xmlName: "IncrementalCopy",
type: {
name: "Boolean",
},
},
destinationSnapshot: {
serializedName: "DestinationSnapshot",
xmlName: "DestinationSnapshot",
type: {
name: "String",
},
},
deletedOn: {
serializedName: "DeletedTime",
xmlName: "DeletedTime",
type: {
name: "DateTimeRfc1123",
},
},
remainingRetentionDays: {
serializedName: "RemainingRetentionDays",
xmlName: "RemainingRetentionDays",
type: {
name: "Number",
},
},
accessTier: {
serializedName: "AccessTier",
xmlName: "AccessTier",
type: {
name: "Enum",
allowedValues: [
"P4",
"P6",
"P10",
"P15",
"P20",
"P30",
"P40",
"P50",
"P60",
"P70",
"P80",
"Hot",
"Cool",
"Archive",
"Cold",
"Smart",
],
},
},
accessTierInferred: {
serializedName: "AccessTierInferred",
xmlName: "AccessTierInferred",
type: {
name: "Boolean",
},
},
archiveStatus: {
serializedName: "ArchiveStatus",
xmlName: "ArchiveStatus",
type: {
name: "Enum",
allowedValues: [
"rehydrate-pending-to-hot",
"rehydrate-pending-to-cool",
"rehydrate-pending-to-cold",
"rehydrate-pending-to-smart",
],
},
},
smartAccessTier: {
serializedName: "SmartAccessTier",
xmlName: "SmartAccessTier",
type: {
name: "Enum",
allowedValues: [
"P4",
"P6",
"P10",
"P15",
"P20",
"P30",
"P40",
"P50",
"P60",
"P70",
"P80",
"Hot",
"Cool",
"Archive",
"Cold",
"Smart",
],
},
},
customerProvidedKeySha256: {
serializedName: "CustomerProvidedKeySha256",
xmlName: "CustomerProvidedKeySha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "EncryptionScope",
xmlName: "EncryptionScope",
type: {
name: "String",
},
},
accessTierChangedOn: {
serializedName: "AccessTierChangeTime",
xmlName: "AccessTierChangeTime",
type: {
name: "DateTimeRfc1123",
},
},
tagCount: {
serializedName: "TagCount",
xmlName: "TagCount",
type: {
name: "Number",
},
},
expiresOn: {
serializedName: "Expiry-Time",
xmlName: "Expiry-Time",
type: {
name: "DateTimeRfc1123",
},
},
isSealed: {
serializedName: "Sealed",
xmlName: "Sealed",
type: {
name: "Boolean",
},
},
rehydratePriority: {
serializedName: "RehydratePriority",
xmlName: "RehydratePriority",
type: {
name: "Enum",
allowedValues: ["High", "Standard"],
},
},
lastAccessedOn: {
serializedName: "LastAccessTime",
xmlName: "LastAccessTime",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyExpiresOn: {
serializedName: "ImmutabilityPolicyUntilDate",
xmlName: "ImmutabilityPolicyUntilDate",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyMode: {
serializedName: "ImmutabilityPolicyMode",
xmlName: "ImmutabilityPolicyMode",
type: {
name: "Enum",
allowedValues: ["Mutable", "Unlocked", "Locked"],
},
},
legalHold: {
serializedName: "LegalHold",
xmlName: "LegalHold",
type: {
name: "Boolean",
},
},
},
},
};
const ListBlobsHierarchySegmentResponse = {
serializedName: "ListBlobsHierarchySegmentResponse",
xmlName: "EnumerationResults",
type: {
name: "Composite",
className: "ListBlobsHierarchySegmentResponse",
modelProperties: {
serviceEndpoint: {
serializedName: "ServiceEndpoint",
required: true,
xmlName: "ServiceEndpoint",
xmlIsAttribute: true,
type: {
name: "String",
},
},
containerName: {
serializedName: "ContainerName",
required: true,
xmlName: "ContainerName",
xmlIsAttribute: true,
type: {
name: "String",
},
},
prefix: {
serializedName: "Prefix",
xmlName: "Prefix",
type: {
name: "String",
},
},
marker: {
serializedName: "Marker",
xmlName: "Marker",
type: {
name: "String",
},
},
maxPageSize: {
serializedName: "MaxResults",
xmlName: "MaxResults",
type: {
name: "Number",
},
},
delimiter: {
serializedName: "Delimiter",
xmlName: "Delimiter",
type: {
name: "String",
},
},
segment: {
serializedName: "Segment",
xmlName: "Blobs",
type: {
name: "Composite",
className: "BlobHierarchyListSegment",
},
},
continuationToken: {
serializedName: "NextMarker",
xmlName: "NextMarker",
type: {
name: "String",
},
},
},
},
};
const BlobHierarchyListSegment = {
serializedName: "BlobHierarchyListSegment",
xmlName: "Blobs",
type: {
name: "Composite",
className: "BlobHierarchyListSegment",
modelProperties: {
blobPrefixes: {
serializedName: "BlobPrefixes",
xmlName: "BlobPrefixes",
xmlElementName: "BlobPrefix",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "BlobPrefix",
},
},
},
},
blobItems: {
serializedName: "BlobItems",
required: true,
xmlName: "BlobItems",
xmlElementName: "Blob",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "BlobItemInternal",
},
},
},
},
},
},
};
const BlobPrefix = {
serializedName: "BlobPrefix",
type: {
name: "Composite",
className: "BlobPrefix",
modelProperties: {
name: {
serializedName: "Name",
xmlName: "Name",
type: {
name: "Composite",
className: "BlobName",
},
},
},
},
};
const BlockLookupList = {
serializedName: "BlockLookupList",
xmlName: "BlockList",
type: {
name: "Composite",
className: "BlockLookupList",
modelProperties: {
committed: {
serializedName: "Committed",
xmlName: "Committed",
xmlElementName: "Committed",
type: {
name: "Sequence",
element: {
type: {
name: "String",
},
},
},
},
uncommitted: {
serializedName: "Uncommitted",
xmlName: "Uncommitted",
xmlElementName: "Uncommitted",
type: {
name: "Sequence",
element: {
type: {
name: "String",
},
},
},
},
latest: {
serializedName: "Latest",
xmlName: "Latest",
xmlElementName: "Latest",
type: {
name: "Sequence",
element: {
type: {
name: "String",
},
},
},
},
},
},
};
const BlockList = {
serializedName: "BlockList",
type: {
name: "Composite",
className: "BlockList",
modelProperties: {
committedBlocks: {
serializedName: "CommittedBlocks",
xmlName: "CommittedBlocks",
xmlIsWrapped: true,
xmlElementName: "Block",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "Block",
},
},
},
},
uncommittedBlocks: {
serializedName: "UncommittedBlocks",
xmlName: "UncommittedBlocks",
xmlIsWrapped: true,
xmlElementName: "Block",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "Block",
},
},
},
},
},
},
};
const Block = {
serializedName: "Block",
type: {
name: "Composite",
className: "Block",
modelProperties: {
name: {
serializedName: "Name",
required: true,
xmlName: "Name",
type: {
name: "String",
},
},
size: {
serializedName: "Size",
required: true,
xmlName: "Size",
type: {
name: "Number",
},
},
},
},
};
const PageList = {
serializedName: "PageList",
type: {
name: "Composite",
className: "PageList",
modelProperties: {
pageRange: {
serializedName: "PageRange",
xmlName: "PageRange",
xmlElementName: "PageRange",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "PageRange",
},
},
},
},
clearRange: {
serializedName: "ClearRange",
xmlName: "ClearRange",
xmlElementName: "ClearRange",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "ClearRange",
},
},
},
},
continuationToken: {
serializedName: "NextMarker",
xmlName: "NextMarker",
type: {
name: "String",
},
},
},
},
};
const PageRange = {
serializedName: "PageRange",
xmlName: "PageRange",
type: {
name: "Composite",
className: "PageRange",
modelProperties: {
start: {
serializedName: "Start",
required: true,
xmlName: "Start",
type: {
name: "Number",
},
},
end: {
serializedName: "End",
required: true,
xmlName: "End",
type: {
name: "Number",
},
},
},
},
};
const ClearRange = {
serializedName: "ClearRange",
xmlName: "ClearRange",
type: {
name: "Composite",
className: "ClearRange",
modelProperties: {
start: {
serializedName: "Start",
required: true,
xmlName: "Start",
type: {
name: "Number",
},
},
end: {
serializedName: "End",
required: true,
xmlName: "End",
type: {
name: "Number",
},
},
},
},
};
const QueryRequest = {
serializedName: "QueryRequest",
xmlName: "QueryRequest",
type: {
name: "Composite",
className: "QueryRequest",
modelProperties: {
queryType: {
serializedName: "QueryType",
required: true,
xmlName: "QueryType",
type: {
name: "String",
},
},
expression: {
serializedName: "Expression",
required: true,
xmlName: "Expression",
type: {
name: "String",
},
},
inputSerialization: {
serializedName: "InputSerialization",
xmlName: "InputSerialization",
type: {
name: "Composite",
className: "QuerySerialization",
},
},
outputSerialization: {
serializedName: "OutputSerialization",
xmlName: "OutputSerialization",
type: {
name: "Composite",
className: "QuerySerialization",
},
},
},
},
};
const QuerySerialization = {
serializedName: "QuerySerialization",
type: {
name: "Composite",
className: "QuerySerialization",
modelProperties: {
format: {
serializedName: "Format",
xmlName: "Format",
type: {
name: "Composite",
className: "QueryFormat",
},
},
},
},
};
const QueryFormat = {
serializedName: "QueryFormat",
type: {
name: "Composite",
className: "QueryFormat",
modelProperties: {
type: {
serializedName: "Type",
required: true,
xmlName: "Type",
type: {
name: "Enum",
allowedValues: ["delimited", "json", "arrow", "parquet"],
},
},
delimitedTextConfiguration: {
serializedName: "DelimitedTextConfiguration",
xmlName: "DelimitedTextConfiguration",
type: {
name: "Composite",
className: "DelimitedTextConfiguration",
},
},
jsonTextConfiguration: {
serializedName: "JsonTextConfiguration",
xmlName: "JsonTextConfiguration",
type: {
name: "Composite",
className: "JsonTextConfiguration",
},
},
arrowConfiguration: {
serializedName: "ArrowConfiguration",
xmlName: "ArrowConfiguration",
type: {
name: "Composite",
className: "ArrowConfiguration",
},
},
parquetTextConfiguration: {
serializedName: "ParquetTextConfiguration",
xmlName: "ParquetTextConfiguration",
type: {
name: "Dictionary",
value: { type: { name: "any" } },
},
},
},
},
};
const DelimitedTextConfiguration = {
serializedName: "DelimitedTextConfiguration",
xmlName: "DelimitedTextConfiguration",
type: {
name: "Composite",
className: "DelimitedTextConfiguration",
modelProperties: {
columnSeparator: {
serializedName: "ColumnSeparator",
xmlName: "ColumnSeparator",
type: {
name: "String",
},
},
fieldQuote: {
serializedName: "FieldQuote",
xmlName: "FieldQuote",
type: {
name: "String",
},
},
recordSeparator: {
serializedName: "RecordSeparator",
xmlName: "RecordSeparator",
type: {
name: "String",
},
},
escapeChar: {
serializedName: "EscapeChar",
xmlName: "EscapeChar",
type: {
name: "String",
},
},
headersPresent: {
serializedName: "HeadersPresent",
xmlName: "HasHeaders",
type: {
name: "Boolean",
},
},
},
},
};
const JsonTextConfiguration = {
serializedName: "JsonTextConfiguration",
xmlName: "JsonTextConfiguration",
type: {
name: "Composite",
className: "JsonTextConfiguration",
modelProperties: {
recordSeparator: {
serializedName: "RecordSeparator",
xmlName: "RecordSeparator",
type: {
name: "String",
},
},
},
},
};
const ArrowConfiguration = {
serializedName: "ArrowConfiguration",
xmlName: "ArrowConfiguration",
type: {
name: "Composite",
className: "ArrowConfiguration",
modelProperties: {
schema: {
serializedName: "Schema",
required: true,
xmlName: "Schema",
xmlIsWrapped: true,
xmlElementName: "Field",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "ArrowField",
},
},
},
},
},
},
};
const ArrowField = {
serializedName: "ArrowField",
xmlName: "Field",
type: {
name: "Composite",
className: "ArrowField",
modelProperties: {
type: {
serializedName: "Type",
required: true,
xmlName: "Type",
type: {
name: "String",
},
},
name: {
serializedName: "Name",
xmlName: "Name",
type: {
name: "String",
},
},
precision: {
serializedName: "Precision",
xmlName: "Precision",
type: {
name: "Number",
},
},
scale: {
serializedName: "Scale",
xmlName: "Scale",
type: {
name: "Number",
},
},
},
},
};
const ServiceSetPropertiesHeaders = {
serializedName: "Service_setPropertiesHeaders",
type: {
name: "Composite",
className: "ServiceSetPropertiesHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceSetPropertiesExceptionHeaders = {
serializedName: "Service_setPropertiesExceptionHeaders",
type: {
name: "Composite",
className: "ServiceSetPropertiesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetPropertiesHeaders = {
serializedName: "Service_getPropertiesHeaders",
type: {
name: "Composite",
className: "ServiceGetPropertiesHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetPropertiesExceptionHeaders = {
serializedName: "Service_getPropertiesExceptionHeaders",
type: {
name: "Composite",
className: "ServiceGetPropertiesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetStatisticsHeaders = {
serializedName: "Service_getStatisticsHeaders",
type: {
name: "Composite",
className: "ServiceGetStatisticsHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetStatisticsExceptionHeaders = {
serializedName: "Service_getStatisticsExceptionHeaders",
type: {
name: "Composite",
className: "ServiceGetStatisticsExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceListContainersSegmentHeaders = {
serializedName: "Service_listContainersSegmentHeaders",
type: {
name: "Composite",
className: "ServiceListContainersSegmentHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceListContainersSegmentExceptionHeaders = {
serializedName: "Service_listContainersSegmentExceptionHeaders",
type: {
name: "Composite",
className: "ServiceListContainersSegmentExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetUserDelegationKeyHeaders = {
serializedName: "Service_getUserDelegationKeyHeaders",
type: {
name: "Composite",
className: "ServiceGetUserDelegationKeyHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetUserDelegationKeyExceptionHeaders = {
serializedName: "Service_getUserDelegationKeyExceptionHeaders",
type: {
name: "Composite",
className: "ServiceGetUserDelegationKeyExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetAccountInfoHeaders = {
serializedName: "Service_getAccountInfoHeaders",
type: {
name: "Composite",
className: "ServiceGetAccountInfoHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
skuName: {
serializedName: "x-ms-sku-name",
xmlName: "x-ms-sku-name",
type: {
name: "Enum",
allowedValues: [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Standard_GZRS",
"Premium_ZRS",
"Standard_RAGZRS",
],
},
},
accountKind: {
serializedName: "x-ms-account-kind",
xmlName: "x-ms-account-kind",
type: {
name: "Enum",
allowedValues: [
"Storage",
"BlobStorage",
"StorageV2",
"FileStorage",
"BlockBlobStorage",
],
},
},
isHierarchicalNamespaceEnabled: {
serializedName: "x-ms-is-hns-enabled",
xmlName: "x-ms-is-hns-enabled",
type: {
name: "Boolean",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceGetAccountInfoExceptionHeaders = {
serializedName: "Service_getAccountInfoExceptionHeaders",
type: {
name: "Composite",
className: "ServiceGetAccountInfoExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceSubmitBatchHeaders = {
serializedName: "Service_submitBatchHeaders",
type: {
name: "Composite",
className: "ServiceSubmitBatchHeaders",
modelProperties: {
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceSubmitBatchExceptionHeaders = {
serializedName: "Service_submitBatchExceptionHeaders",
type: {
name: "Composite",
className: "ServiceSubmitBatchExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceFilterBlobsHeaders = {
serializedName: "Service_filterBlobsHeaders",
type: {
name: "Composite",
className: "ServiceFilterBlobsHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ServiceFilterBlobsExceptionHeaders = {
serializedName: "Service_filterBlobsExceptionHeaders",
type: {
name: "Composite",
className: "ServiceFilterBlobsExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerCreateHeaders = {
serializedName: "Container_createHeaders",
type: {
name: "Composite",
className: "ContainerCreateHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerCreateExceptionHeaders = {
serializedName: "Container_createExceptionHeaders",
type: {
name: "Composite",
className: "ContainerCreateExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerGetPropertiesHeaders = {
serializedName: "Container_getPropertiesHeaders",
type: {
name: "Composite",
className: "ContainerGetPropertiesHeaders",
modelProperties: {
metadata: {
serializedName: "x-ms-meta",
headerCollectionPrefix: "x-ms-meta-",
xmlName: "x-ms-meta",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseDuration: {
serializedName: "x-ms-lease-duration",
xmlName: "x-ms-lease-duration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
leaseState: {
serializedName: "x-ms-lease-state",
xmlName: "x-ms-lease-state",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseStatus: {
serializedName: "x-ms-lease-status",
xmlName: "x-ms-lease-status",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
blobPublicAccess: {
serializedName: "x-ms-blob-public-access",
xmlName: "x-ms-blob-public-access",
type: {
name: "Enum",
allowedValues: ["container", "blob"],
},
},
hasImmutabilityPolicy: {
serializedName: "x-ms-has-immutability-policy",
xmlName: "x-ms-has-immutability-policy",
type: {
name: "Boolean",
},
},
hasLegalHold: {
serializedName: "x-ms-has-legal-hold",
xmlName: "x-ms-has-legal-hold",
type: {
name: "Boolean",
},
},
defaultEncryptionScope: {
serializedName: "x-ms-default-encryption-scope",
xmlName: "x-ms-default-encryption-scope",
type: {
name: "String",
},
},
denyEncryptionScopeOverride: {
serializedName: "x-ms-deny-encryption-scope-override",
xmlName: "x-ms-deny-encryption-scope-override",
type: {
name: "Boolean",
},
},
isImmutableStorageWithVersioningEnabled: {
serializedName: "x-ms-immutable-storage-with-versioning-enabled",
xmlName: "x-ms-immutable-storage-with-versioning-enabled",
type: {
name: "Boolean",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerGetPropertiesExceptionHeaders = {
serializedName: "Container_getPropertiesExceptionHeaders",
type: {
name: "Composite",
className: "ContainerGetPropertiesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerDeleteHeaders = {
serializedName: "Container_deleteHeaders",
type: {
name: "Composite",
className: "ContainerDeleteHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerDeleteExceptionHeaders = {
serializedName: "Container_deleteExceptionHeaders",
type: {
name: "Composite",
className: "ContainerDeleteExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerSetMetadataHeaders = {
serializedName: "Container_setMetadataHeaders",
type: {
name: "Composite",
className: "ContainerSetMetadataHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerSetMetadataExceptionHeaders = {
serializedName: "Container_setMetadataExceptionHeaders",
type: {
name: "Composite",
className: "ContainerSetMetadataExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerGetAccessPolicyHeaders = {
serializedName: "Container_getAccessPolicyHeaders",
type: {
name: "Composite",
className: "ContainerGetAccessPolicyHeaders",
modelProperties: {
blobPublicAccess: {
serializedName: "x-ms-blob-public-access",
xmlName: "x-ms-blob-public-access",
type: {
name: "Enum",
allowedValues: ["container", "blob"],
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerGetAccessPolicyExceptionHeaders = {
serializedName: "Container_getAccessPolicyExceptionHeaders",
type: {
name: "Composite",
className: "ContainerGetAccessPolicyExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerSetAccessPolicyHeaders = {
serializedName: "Container_setAccessPolicyHeaders",
type: {
name: "Composite",
className: "ContainerSetAccessPolicyHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerSetAccessPolicyExceptionHeaders = {
serializedName: "Container_setAccessPolicyExceptionHeaders",
type: {
name: "Composite",
className: "ContainerSetAccessPolicyExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerRestoreHeaders = {
serializedName: "Container_restoreHeaders",
type: {
name: "Composite",
className: "ContainerRestoreHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerRestoreExceptionHeaders = {
serializedName: "Container_restoreExceptionHeaders",
type: {
name: "Composite",
className: "ContainerRestoreExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerRenameHeaders = {
serializedName: "Container_renameHeaders",
type: {
name: "Composite",
className: "ContainerRenameHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerRenameExceptionHeaders = {
serializedName: "Container_renameExceptionHeaders",
type: {
name: "Composite",
className: "ContainerRenameExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerSubmitBatchHeaders = {
serializedName: "Container_submitBatchHeaders",
type: {
name: "Composite",
className: "ContainerSubmitBatchHeaders",
modelProperties: {
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
},
},
};
const ContainerSubmitBatchExceptionHeaders = {
serializedName: "Container_submitBatchExceptionHeaders",
type: {
name: "Composite",
className: "ContainerSubmitBatchExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerFilterBlobsHeaders = {
serializedName: "Container_filterBlobsHeaders",
type: {
name: "Composite",
className: "ContainerFilterBlobsHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerFilterBlobsExceptionHeaders = {
serializedName: "Container_filterBlobsExceptionHeaders",
type: {
name: "Composite",
className: "ContainerFilterBlobsExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerAcquireLeaseHeaders = {
serializedName: "Container_acquireLeaseHeaders",
type: {
name: "Composite",
className: "ContainerAcquireLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerAcquireLeaseExceptionHeaders = {
serializedName: "Container_acquireLeaseExceptionHeaders",
type: {
name: "Composite",
className: "ContainerAcquireLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerReleaseLeaseHeaders = {
serializedName: "Container_releaseLeaseHeaders",
type: {
name: "Composite",
className: "ContainerReleaseLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerReleaseLeaseExceptionHeaders = {
serializedName: "Container_releaseLeaseExceptionHeaders",
type: {
name: "Composite",
className: "ContainerReleaseLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerRenewLeaseHeaders = {
serializedName: "Container_renewLeaseHeaders",
type: {
name: "Composite",
className: "ContainerRenewLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerRenewLeaseExceptionHeaders = {
serializedName: "Container_renewLeaseExceptionHeaders",
type: {
name: "Composite",
className: "ContainerRenewLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerBreakLeaseHeaders = {
serializedName: "Container_breakLeaseHeaders",
type: {
name: "Composite",
className: "ContainerBreakLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseTime: {
serializedName: "x-ms-lease-time",
xmlName: "x-ms-lease-time",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerBreakLeaseExceptionHeaders = {
serializedName: "Container_breakLeaseExceptionHeaders",
type: {
name: "Composite",
className: "ContainerBreakLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerChangeLeaseHeaders = {
serializedName: "Container_changeLeaseHeaders",
type: {
name: "Composite",
className: "ContainerChangeLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const ContainerChangeLeaseExceptionHeaders = {
serializedName: "Container_changeLeaseExceptionHeaders",
type: {
name: "Composite",
className: "ContainerChangeLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerListBlobFlatSegmentHeaders = {
serializedName: "Container_listBlobFlatSegmentHeaders",
type: {
name: "Composite",
className: "ContainerListBlobFlatSegmentHeaders",
modelProperties: {
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerListBlobFlatSegmentExceptionHeaders = {
serializedName: "Container_listBlobFlatSegmentExceptionHeaders",
type: {
name: "Composite",
className: "ContainerListBlobFlatSegmentExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerListBlobHierarchySegmentHeaders = {
serializedName: "Container_listBlobHierarchySegmentHeaders",
type: {
name: "Composite",
className: "ContainerListBlobHierarchySegmentHeaders",
modelProperties: {
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerListBlobHierarchySegmentExceptionHeaders = {
serializedName: "Container_listBlobHierarchySegmentExceptionHeaders",
type: {
name: "Composite",
className: "ContainerListBlobHierarchySegmentExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const ContainerGetAccountInfoHeaders = {
serializedName: "Container_getAccountInfoHeaders",
type: {
name: "Composite",
className: "ContainerGetAccountInfoHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
skuName: {
serializedName: "x-ms-sku-name",
xmlName: "x-ms-sku-name",
type: {
name: "Enum",
allowedValues: [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Standard_GZRS",
"Premium_ZRS",
"Standard_RAGZRS",
],
},
},
accountKind: {
serializedName: "x-ms-account-kind",
xmlName: "x-ms-account-kind",
type: {
name: "Enum",
allowedValues: [
"Storage",
"BlobStorage",
"StorageV2",
"FileStorage",
"BlockBlobStorage",
],
},
},
isHierarchicalNamespaceEnabled: {
serializedName: "x-ms-is-hns-enabled",
xmlName: "x-ms-is-hns-enabled",
type: {
name: "Boolean",
},
},
},
},
};
const ContainerGetAccountInfoExceptionHeaders = {
serializedName: "Container_getAccountInfoExceptionHeaders",
type: {
name: "Composite",
className: "ContainerGetAccountInfoExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobDownloadHeaders = {
serializedName: "Blob_downloadHeaders",
type: {
name: "Composite",
className: "BlobDownloadHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
createdOn: {
serializedName: "x-ms-creation-time",
xmlName: "x-ms-creation-time",
type: {
name: "DateTimeRfc1123",
},
},
metadata: {
serializedName: "x-ms-meta",
headerCollectionPrefix: "x-ms-meta-",
xmlName: "x-ms-meta",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
objectReplicationPolicyId: {
serializedName: "x-ms-or-policy-id",
xmlName: "x-ms-or-policy-id",
type: {
name: "String",
},
},
objectReplicationRules: {
serializedName: "x-ms-or",
headerCollectionPrefix: "x-ms-or-",
xmlName: "x-ms-or",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
contentLength: {
serializedName: "content-length",
xmlName: "content-length",
type: {
name: "Number",
},
},
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
contentRange: {
serializedName: "content-range",
xmlName: "content-range",
type: {
name: "String",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
contentEncoding: {
serializedName: "content-encoding",
xmlName: "content-encoding",
type: {
name: "String",
},
},
cacheControl: {
serializedName: "cache-control",
xmlName: "cache-control",
type: {
name: "String",
},
},
contentDisposition: {
serializedName: "content-disposition",
xmlName: "content-disposition",
type: {
name: "String",
},
},
contentLanguage: {
serializedName: "content-language",
xmlName: "content-language",
type: {
name: "String",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
blobType: {
serializedName: "x-ms-blob-type",
xmlName: "x-ms-blob-type",
type: {
name: "Enum",
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"],
},
},
copyCompletedOn: {
serializedName: "x-ms-copy-completion-time",
xmlName: "x-ms-copy-completion-time",
type: {
name: "DateTimeRfc1123",
},
},
copyStatusDescription: {
serializedName: "x-ms-copy-status-description",
xmlName: "x-ms-copy-status-description",
type: {
name: "String",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyProgress: {
serializedName: "x-ms-copy-progress",
xmlName: "x-ms-copy-progress",
type: {
name: "String",
},
},
copySource: {
serializedName: "x-ms-copy-source",
xmlName: "x-ms-copy-source",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "x-ms-copy-status",
xmlName: "x-ms-copy-status",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
leaseDuration: {
serializedName: "x-ms-lease-duration",
xmlName: "x-ms-lease-duration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
leaseState: {
serializedName: "x-ms-lease-state",
xmlName: "x-ms-lease-state",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseStatus: {
serializedName: "x-ms-lease-status",
xmlName: "x-ms-lease-status",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
isCurrentVersion: {
serializedName: "x-ms-is-current-version",
xmlName: "x-ms-is-current-version",
type: {
name: "Boolean",
},
},
acceptRanges: {
serializedName: "accept-ranges",
xmlName: "accept-ranges",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
blobCommittedBlockCount: {
serializedName: "x-ms-blob-committed-block-count",
xmlName: "x-ms-blob-committed-block-count",
type: {
name: "Number",
},
},
isServerEncrypted: {
serializedName: "x-ms-server-encrypted",
xmlName: "x-ms-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
blobContentMD5: {
serializedName: "x-ms-blob-content-md5",
xmlName: "x-ms-blob-content-md5",
type: {
name: "ByteArray",
},
},
tagCount: {
serializedName: "x-ms-tag-count",
xmlName: "x-ms-tag-count",
type: {
name: "Number",
},
},
isSealed: {
serializedName: "x-ms-blob-sealed",
xmlName: "x-ms-blob-sealed",
type: {
name: "Boolean",
},
},
lastAccessed: {
serializedName: "x-ms-last-access-time",
xmlName: "x-ms-last-access-time",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyExpiresOn: {
serializedName: "x-ms-immutability-policy-until-date",
xmlName: "x-ms-immutability-policy-until-date",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyMode: {
serializedName: "x-ms-immutability-policy-mode",
xmlName: "x-ms-immutability-policy-mode",
type: {
name: "Enum",
allowedValues: ["Mutable", "Unlocked", "Locked"],
},
},
legalHold: {
serializedName: "x-ms-legal-hold",
xmlName: "x-ms-legal-hold",
type: {
name: "Boolean",
},
},
structuredBodyType: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
structuredContentLength: {
serializedName: "x-ms-structured-content-length",
xmlName: "x-ms-structured-content-length",
type: {
name: "Number",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
contentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
},
},
};
const BlobDownloadExceptionHeaders = {
serializedName: "Blob_downloadExceptionHeaders",
type: {
name: "Composite",
className: "BlobDownloadExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobGetPropertiesHeaders = {
serializedName: "Blob_getPropertiesHeaders",
type: {
name: "Composite",
className: "BlobGetPropertiesHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
createdOn: {
serializedName: "x-ms-creation-time",
xmlName: "x-ms-creation-time",
type: {
name: "DateTimeRfc1123",
},
},
metadata: {
serializedName: "x-ms-meta",
headerCollectionPrefix: "x-ms-meta-",
xmlName: "x-ms-meta",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
objectReplicationPolicyId: {
serializedName: "x-ms-or-policy-id",
xmlName: "x-ms-or-policy-id",
type: {
name: "String",
},
},
objectReplicationRules: {
serializedName: "x-ms-or",
headerCollectionPrefix: "x-ms-or-",
xmlName: "x-ms-or",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
blobType: {
serializedName: "x-ms-blob-type",
xmlName: "x-ms-blob-type",
type: {
name: "Enum",
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"],
},
},
copyCompletedOn: {
serializedName: "x-ms-copy-completion-time",
xmlName: "x-ms-copy-completion-time",
type: {
name: "DateTimeRfc1123",
},
},
copyStatusDescription: {
serializedName: "x-ms-copy-status-description",
xmlName: "x-ms-copy-status-description",
type: {
name: "String",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyProgress: {
serializedName: "x-ms-copy-progress",
xmlName: "x-ms-copy-progress",
type: {
name: "String",
},
},
copySource: {
serializedName: "x-ms-copy-source",
xmlName: "x-ms-copy-source",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "x-ms-copy-status",
xmlName: "x-ms-copy-status",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
isIncrementalCopy: {
serializedName: "x-ms-incremental-copy",
xmlName: "x-ms-incremental-copy",
type: {
name: "Boolean",
},
},
destinationSnapshot: {
serializedName: "x-ms-copy-destination-snapshot",
xmlName: "x-ms-copy-destination-snapshot",
type: {
name: "String",
},
},
leaseDuration: {
serializedName: "x-ms-lease-duration",
xmlName: "x-ms-lease-duration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
leaseState: {
serializedName: "x-ms-lease-state",
xmlName: "x-ms-lease-state",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseStatus: {
serializedName: "x-ms-lease-status",
xmlName: "x-ms-lease-status",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
contentLength: {
serializedName: "content-length",
xmlName: "content-length",
type: {
name: "Number",
},
},
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
contentEncoding: {
serializedName: "content-encoding",
xmlName: "content-encoding",
type: {
name: "String",
},
},
contentDisposition: {
serializedName: "content-disposition",
xmlName: "content-disposition",
type: {
name: "String",
},
},
contentLanguage: {
serializedName: "content-language",
xmlName: "content-language",
type: {
name: "String",
},
},
cacheControl: {
serializedName: "cache-control",
xmlName: "cache-control",
type: {
name: "String",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
acceptRanges: {
serializedName: "accept-ranges",
xmlName: "accept-ranges",
type: {
name: "String",
},
},
blobCommittedBlockCount: {
serializedName: "x-ms-blob-committed-block-count",
xmlName: "x-ms-blob-committed-block-count",
type: {
name: "Number",
},
},
isServerEncrypted: {
serializedName: "x-ms-server-encrypted",
xmlName: "x-ms-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
accessTier: {
serializedName: "x-ms-access-tier",
xmlName: "x-ms-access-tier",
type: {
name: "String",
},
},
accessTierInferred: {
serializedName: "x-ms-access-tier-inferred",
xmlName: "x-ms-access-tier-inferred",
type: {
name: "Boolean",
},
},
archiveStatus: {
serializedName: "x-ms-archive-status",
xmlName: "x-ms-archive-status",
type: {
name: "String",
},
},
accessTierChangedOn: {
serializedName: "x-ms-access-tier-change-time",
xmlName: "x-ms-access-tier-change-time",
type: {
name: "DateTimeRfc1123",
},
},
smartAccessTier: {
serializedName: "x-ms-smart-access-tier",
xmlName: "x-ms-smart-access-tier",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
isCurrentVersion: {
serializedName: "x-ms-is-current-version",
xmlName: "x-ms-is-current-version",
type: {
name: "Boolean",
},
},
tagCount: {
serializedName: "x-ms-tag-count",
xmlName: "x-ms-tag-count",
type: {
name: "Number",
},
},
expiresOn: {
serializedName: "x-ms-expiry-time",
xmlName: "x-ms-expiry-time",
type: {
name: "DateTimeRfc1123",
},
},
isSealed: {
serializedName: "x-ms-blob-sealed",
xmlName: "x-ms-blob-sealed",
type: {
name: "Boolean",
},
},
rehydratePriority: {
serializedName: "x-ms-rehydrate-priority",
xmlName: "x-ms-rehydrate-priority",
type: {
name: "Enum",
allowedValues: ["High", "Standard"],
},
},
lastAccessed: {
serializedName: "x-ms-last-access-time",
xmlName: "x-ms-last-access-time",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyExpiresOn: {
serializedName: "x-ms-immutability-policy-until-date",
xmlName: "x-ms-immutability-policy-until-date",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyMode: {
serializedName: "x-ms-immutability-policy-mode",
xmlName: "x-ms-immutability-policy-mode",
type: {
name: "Enum",
allowedValues: ["Mutable", "Unlocked", "Locked"],
},
},
legalHold: {
serializedName: "x-ms-legal-hold",
xmlName: "x-ms-legal-hold",
type: {
name: "Boolean",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobGetPropertiesExceptionHeaders = {
serializedName: "Blob_getPropertiesExceptionHeaders",
type: {
name: "Composite",
className: "BlobGetPropertiesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobDeleteHeaders = {
serializedName: "Blob_deleteHeaders",
type: {
name: "Composite",
className: "BlobDeleteHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobDeleteExceptionHeaders = {
serializedName: "Blob_deleteExceptionHeaders",
type: {
name: "Composite",
className: "BlobDeleteExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobUndeleteHeaders = {
serializedName: "Blob_undeleteHeaders",
type: {
name: "Composite",
className: "BlobUndeleteHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobUndeleteExceptionHeaders = {
serializedName: "Blob_undeleteExceptionHeaders",
type: {
name: "Composite",
className: "BlobUndeleteExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetExpiryHeaders = {
serializedName: "Blob_setExpiryHeaders",
type: {
name: "Composite",
className: "BlobSetExpiryHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobSetExpiryExceptionHeaders = {
serializedName: "Blob_setExpiryExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetExpiryExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetHttpHeadersHeaders = {
serializedName: "Blob_setHttpHeadersHeaders",
type: {
name: "Composite",
className: "BlobSetHttpHeadersHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetHttpHeadersExceptionHeaders = {
serializedName: "Blob_setHttpHeadersExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetHttpHeadersExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetImmutabilityPolicyHeaders = {
serializedName: "Blob_setImmutabilityPolicyHeaders",
type: {
name: "Composite",
className: "BlobSetImmutabilityPolicyHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyExpiry: {
serializedName: "x-ms-immutability-policy-until-date",
xmlName: "x-ms-immutability-policy-until-date",
type: {
name: "DateTimeRfc1123",
},
},
immutabilityPolicyMode: {
serializedName: "x-ms-immutability-policy-mode",
xmlName: "x-ms-immutability-policy-mode",
type: {
name: "Enum",
allowedValues: ["Mutable", "Unlocked", "Locked"],
},
},
},
},
};
const BlobSetImmutabilityPolicyExceptionHeaders = {
serializedName: "Blob_setImmutabilityPolicyExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetImmutabilityPolicyExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobDeleteImmutabilityPolicyHeaders = {
serializedName: "Blob_deleteImmutabilityPolicyHeaders",
type: {
name: "Composite",
className: "BlobDeleteImmutabilityPolicyHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobDeleteImmutabilityPolicyExceptionHeaders = {
serializedName: "Blob_deleteImmutabilityPolicyExceptionHeaders",
type: {
name: "Composite",
className: "BlobDeleteImmutabilityPolicyExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetLegalHoldHeaders = {
serializedName: "Blob_setLegalHoldHeaders",
type: {
name: "Composite",
className: "BlobSetLegalHoldHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
legalHold: {
serializedName: "x-ms-legal-hold",
xmlName: "x-ms-legal-hold",
type: {
name: "Boolean",
},
},
},
},
};
const BlobSetLegalHoldExceptionHeaders = {
serializedName: "Blob_setLegalHoldExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetLegalHoldExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetMetadataHeaders = {
serializedName: "Blob_setMetadataHeaders",
type: {
name: "Composite",
className: "BlobSetMetadataHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetMetadataExceptionHeaders = {
serializedName: "Blob_setMetadataExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetMetadataExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobAcquireLeaseHeaders = {
serializedName: "Blob_acquireLeaseHeaders",
type: {
name: "Composite",
className: "BlobAcquireLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobAcquireLeaseExceptionHeaders = {
serializedName: "Blob_acquireLeaseExceptionHeaders",
type: {
name: "Composite",
className: "BlobAcquireLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobReleaseLeaseHeaders = {
serializedName: "Blob_releaseLeaseHeaders",
type: {
name: "Composite",
className: "BlobReleaseLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobReleaseLeaseExceptionHeaders = {
serializedName: "Blob_releaseLeaseExceptionHeaders",
type: {
name: "Composite",
className: "BlobReleaseLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobRenewLeaseHeaders = {
serializedName: "Blob_renewLeaseHeaders",
type: {
name: "Composite",
className: "BlobRenewLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobRenewLeaseExceptionHeaders = {
serializedName: "Blob_renewLeaseExceptionHeaders",
type: {
name: "Composite",
className: "BlobRenewLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobChangeLeaseHeaders = {
serializedName: "Blob_changeLeaseHeaders",
type: {
name: "Composite",
className: "BlobChangeLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
leaseId: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobChangeLeaseExceptionHeaders = {
serializedName: "Blob_changeLeaseExceptionHeaders",
type: {
name: "Composite",
className: "BlobChangeLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobBreakLeaseHeaders = {
serializedName: "Blob_breakLeaseHeaders",
type: {
name: "Composite",
className: "BlobBreakLeaseHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
leaseTime: {
serializedName: "x-ms-lease-time",
xmlName: "x-ms-lease-time",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
},
},
};
const BlobBreakLeaseExceptionHeaders = {
serializedName: "Blob_breakLeaseExceptionHeaders",
type: {
name: "Composite",
className: "BlobBreakLeaseExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobCreateSnapshotHeaders = {
serializedName: "Blob_createSnapshotHeaders",
type: {
name: "Composite",
className: "BlobCreateSnapshotHeaders",
modelProperties: {
snapshot: {
serializedName: "x-ms-snapshot",
xmlName: "x-ms-snapshot",
type: {
name: "String",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobCreateSnapshotExceptionHeaders = {
serializedName: "Blob_createSnapshotExceptionHeaders",
type: {
name: "Composite",
className: "BlobCreateSnapshotExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobStartCopyFromURLHeaders = {
serializedName: "Blob_startCopyFromURLHeaders",
type: {
name: "Composite",
className: "BlobStartCopyFromURLHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "x-ms-copy-status",
xmlName: "x-ms-copy-status",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobStartCopyFromURLExceptionHeaders = {
serializedName: "Blob_startCopyFromURLExceptionHeaders",
type: {
name: "Composite",
className: "BlobStartCopyFromURLExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const BlobCopyFromURLHeaders = {
serializedName: "Blob_copyFromURLHeaders",
type: {
name: "Composite",
className: "BlobCopyFromURLHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyStatus: {
defaultValue: "success",
isConstant: true,
serializedName: "x-ms-copy-status",
type: {
name: "String",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobCopyFromURLExceptionHeaders = {
serializedName: "Blob_copyFromURLExceptionHeaders",
type: {
name: "Composite",
className: "BlobCopyFromURLExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const BlobAbortCopyFromURLHeaders = {
serializedName: "Blob_abortCopyFromURLHeaders",
type: {
name: "Composite",
className: "BlobAbortCopyFromURLHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobAbortCopyFromURLExceptionHeaders = {
serializedName: "Blob_abortCopyFromURLExceptionHeaders",
type: {
name: "Composite",
className: "BlobAbortCopyFromURLExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetTierHeaders = {
serializedName: "Blob_setTierHeaders",
type: {
name: "Composite",
className: "BlobSetTierHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetTierExceptionHeaders = {
serializedName: "Blob_setTierExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetTierExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobGetAccountInfoHeaders = {
serializedName: "Blob_getAccountInfoHeaders",
type: {
name: "Composite",
className: "BlobGetAccountInfoHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
skuName: {
serializedName: "x-ms-sku-name",
xmlName: "x-ms-sku-name",
type: {
name: "Enum",
allowedValues: [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Standard_ZRS",
"Premium_LRS",
"Standard_GZRS",
"Premium_ZRS",
"Standard_RAGZRS",
],
},
},
accountKind: {
serializedName: "x-ms-account-kind",
xmlName: "x-ms-account-kind",
type: {
name: "Enum",
allowedValues: [
"Storage",
"BlobStorage",
"StorageV2",
"FileStorage",
"BlockBlobStorage",
],
},
},
isHierarchicalNamespaceEnabled: {
serializedName: "x-ms-is-hns-enabled",
xmlName: "x-ms-is-hns-enabled",
type: {
name: "Boolean",
},
},
},
},
};
const BlobGetAccountInfoExceptionHeaders = {
serializedName: "Blob_getAccountInfoExceptionHeaders",
type: {
name: "Composite",
className: "BlobGetAccountInfoExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobQueryHeaders = {
serializedName: "Blob_queryHeaders",
type: {
name: "Composite",
className: "BlobQueryHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
metadata: {
serializedName: "x-ms-meta",
headerCollectionPrefix: "x-ms-meta-",
xmlName: "x-ms-meta",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
contentLength: {
serializedName: "content-length",
xmlName: "content-length",
type: {
name: "Number",
},
},
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
contentRange: {
serializedName: "content-range",
xmlName: "content-range",
type: {
name: "String",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
contentEncoding: {
serializedName: "content-encoding",
xmlName: "content-encoding",
type: {
name: "String",
},
},
cacheControl: {
serializedName: "cache-control",
xmlName: "cache-control",
type: {
name: "String",
},
},
contentDisposition: {
serializedName: "content-disposition",
xmlName: "content-disposition",
type: {
name: "String",
},
},
contentLanguage: {
serializedName: "content-language",
xmlName: "content-language",
type: {
name: "String",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
blobType: {
serializedName: "x-ms-blob-type",
xmlName: "x-ms-blob-type",
type: {
name: "Enum",
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"],
},
},
copyCompletionTime: {
serializedName: "x-ms-copy-completion-time",
xmlName: "x-ms-copy-completion-time",
type: {
name: "DateTimeRfc1123",
},
},
copyStatusDescription: {
serializedName: "x-ms-copy-status-description",
xmlName: "x-ms-copy-status-description",
type: {
name: "String",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyProgress: {
serializedName: "x-ms-copy-progress",
xmlName: "x-ms-copy-progress",
type: {
name: "String",
},
},
copySource: {
serializedName: "x-ms-copy-source",
xmlName: "x-ms-copy-source",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "x-ms-copy-status",
xmlName: "x-ms-copy-status",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
leaseDuration: {
serializedName: "x-ms-lease-duration",
xmlName: "x-ms-lease-duration",
type: {
name: "Enum",
allowedValues: ["infinite", "fixed"],
},
},
leaseState: {
serializedName: "x-ms-lease-state",
xmlName: "x-ms-lease-state",
type: {
name: "Enum",
allowedValues: [
"available",
"leased",
"expired",
"breaking",
"broken",
],
},
},
leaseStatus: {
serializedName: "x-ms-lease-status",
xmlName: "x-ms-lease-status",
type: {
name: "Enum",
allowedValues: ["locked", "unlocked"],
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
acceptRanges: {
serializedName: "accept-ranges",
xmlName: "accept-ranges",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
blobCommittedBlockCount: {
serializedName: "x-ms-blob-committed-block-count",
xmlName: "x-ms-blob-committed-block-count",
type: {
name: "Number",
},
},
isServerEncrypted: {
serializedName: "x-ms-server-encrypted",
xmlName: "x-ms-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
blobContentMD5: {
serializedName: "x-ms-blob-content-md5",
xmlName: "x-ms-blob-content-md5",
type: {
name: "ByteArray",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
contentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
},
},
};
const BlobQueryExceptionHeaders = {
serializedName: "Blob_queryExceptionHeaders",
type: {
name: "Composite",
className: "BlobQueryExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobGetTagsHeaders = {
serializedName: "Blob_getTagsHeaders",
type: {
name: "Composite",
className: "BlobGetTagsHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobGetTagsExceptionHeaders = {
serializedName: "Blob_getTagsExceptionHeaders",
type: {
name: "Composite",
className: "BlobGetTagsExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetTagsHeaders = {
serializedName: "Blob_setTagsHeaders",
type: {
name: "Composite",
className: "BlobSetTagsHeaders",
modelProperties: {
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlobSetTagsExceptionHeaders = {
serializedName: "Blob_setTagsExceptionHeaders",
type: {
name: "Composite",
className: "BlobSetTagsExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobCreateHeaders = {
serializedName: "PageBlob_createHeaders",
type: {
name: "Composite",
className: "PageBlobCreateHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobCreateExceptionHeaders = {
serializedName: "PageBlob_createExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobCreateExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUploadPagesHeaders = {
serializedName: "PageBlob_uploadPagesHeaders",
type: {
name: "Composite",
className: "PageBlobUploadPagesHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
structuredBodyType: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUploadPagesExceptionHeaders = {
serializedName: "PageBlob_uploadPagesExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobUploadPagesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobClearPagesHeaders = {
serializedName: "PageBlob_clearPagesHeaders",
type: {
name: "Composite",
className: "PageBlobClearPagesHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobClearPagesExceptionHeaders = {
serializedName: "PageBlob_clearPagesExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobClearPagesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUploadPagesFromURLHeaders = {
serializedName: "PageBlob_uploadPagesFromURLHeaders",
type: {
name: "Composite",
className: "PageBlobUploadPagesFromURLHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUploadPagesFromURLExceptionHeaders = {
serializedName: "PageBlob_uploadPagesFromURLExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobUploadPagesFromURLExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const PageBlobGetPageRangesHeaders = {
serializedName: "PageBlob_getPageRangesHeaders",
type: {
name: "Composite",
className: "PageBlobGetPageRangesHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
blobContentLength: {
serializedName: "x-ms-blob-content-length",
xmlName: "x-ms-blob-content-length",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobGetPageRangesExceptionHeaders = {
serializedName: "PageBlob_getPageRangesExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobGetPageRangesExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobGetPageRangesDiffHeaders = {
serializedName: "PageBlob_getPageRangesDiffHeaders",
type: {
name: "Composite",
className: "PageBlobGetPageRangesDiffHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
blobContentLength: {
serializedName: "x-ms-blob-content-length",
xmlName: "x-ms-blob-content-length",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobGetPageRangesDiffExceptionHeaders = {
serializedName: "PageBlob_getPageRangesDiffExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobGetPageRangesDiffExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobResizeHeaders = {
serializedName: "PageBlob_resizeHeaders",
type: {
name: "Composite",
className: "PageBlobResizeHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobResizeExceptionHeaders = {
serializedName: "PageBlob_resizeExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobResizeExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUpdateSequenceNumberHeaders = {
serializedName: "PageBlob_updateSequenceNumberHeaders",
type: {
name: "Composite",
className: "PageBlobUpdateSequenceNumberHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
blobSequenceNumber: {
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobUpdateSequenceNumberExceptionHeaders = {
serializedName: "PageBlob_updateSequenceNumberExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobUpdateSequenceNumberExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobCopyIncrementalHeaders = {
serializedName: "PageBlob_copyIncrementalHeaders",
type: {
name: "Composite",
className: "PageBlobCopyIncrementalHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
copyId: {
serializedName: "x-ms-copy-id",
xmlName: "x-ms-copy-id",
type: {
name: "String",
},
},
copyStatus: {
serializedName: "x-ms-copy-status",
xmlName: "x-ms-copy-status",
type: {
name: "Enum",
allowedValues: ["pending", "success", "aborted", "failed"],
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const PageBlobCopyIncrementalExceptionHeaders = {
serializedName: "PageBlob_copyIncrementalExceptionHeaders",
type: {
name: "Composite",
className: "PageBlobCopyIncrementalExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobCreateHeaders = {
serializedName: "AppendBlob_createHeaders",
type: {
name: "Composite",
className: "AppendBlobCreateHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobCreateExceptionHeaders = {
serializedName: "AppendBlob_createExceptionHeaders",
type: {
name: "Composite",
className: "AppendBlobCreateExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobAppendBlockHeaders = {
serializedName: "AppendBlob_appendBlockHeaders",
type: {
name: "Composite",
className: "AppendBlobAppendBlockHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
blobAppendOffset: {
serializedName: "x-ms-blob-append-offset",
xmlName: "x-ms-blob-append-offset",
type: {
name: "String",
},
},
blobCommittedBlockCount: {
serializedName: "x-ms-blob-committed-block-count",
xmlName: "x-ms-blob-committed-block-count",
type: {
name: "Number",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
structuredBodyType: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobAppendBlockExceptionHeaders = {
serializedName: "AppendBlob_appendBlockExceptionHeaders",
type: {
name: "Composite",
className: "AppendBlobAppendBlockExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobAppendBlockFromUrlHeaders = {
serializedName: "AppendBlob_appendBlockFromUrlHeaders",
type: {
name: "Composite",
className: "AppendBlobAppendBlockFromUrlHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
blobAppendOffset: {
serializedName: "x-ms-blob-append-offset",
xmlName: "x-ms-blob-append-offset",
type: {
name: "String",
},
},
blobCommittedBlockCount: {
serializedName: "x-ms-blob-committed-block-count",
xmlName: "x-ms-blob-committed-block-count",
type: {
name: "Number",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const AppendBlobAppendBlockFromUrlExceptionHeaders = {
serializedName: "AppendBlob_appendBlockFromUrlExceptionHeaders",
type: {
name: "Composite",
className: "AppendBlobAppendBlockFromUrlExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const AppendBlobSealHeaders = {
serializedName: "AppendBlob_sealHeaders",
type: {
name: "Composite",
className: "AppendBlobSealHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isSealed: {
serializedName: "x-ms-blob-sealed",
xmlName: "x-ms-blob-sealed",
type: {
name: "Boolean",
},
},
},
},
};
const AppendBlobSealExceptionHeaders = {
serializedName: "AppendBlob_sealExceptionHeaders",
type: {
name: "Composite",
className: "AppendBlobSealExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobUploadHeaders = {
serializedName: "BlockBlob_uploadHeaders",
type: {
name: "Composite",
className: "BlockBlobUploadHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
structuredBodyType: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobUploadExceptionHeaders = {
serializedName: "BlockBlob_uploadExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobUploadExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobPutBlobFromUrlHeaders = {
serializedName: "BlockBlob_putBlobFromUrlHeaders",
type: {
name: "Composite",
className: "BlockBlobPutBlobFromUrlHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobPutBlobFromUrlExceptionHeaders = {
serializedName: "BlockBlob_putBlobFromUrlExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobPutBlobFromUrlExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const BlockBlobStageBlockHeaders = {
serializedName: "BlockBlob_stageBlockHeaders",
type: {
name: "Composite",
className: "BlockBlobStageBlockHeaders",
modelProperties: {
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
structuredBodyType: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobStageBlockExceptionHeaders = {
serializedName: "BlockBlob_stageBlockExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobStageBlockExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobStageBlockFromURLHeaders = {
serializedName: "BlockBlob_stageBlockFromURLHeaders",
type: {
name: "Composite",
className: "BlockBlobStageBlockFromURLHeaders",
modelProperties: {
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobStageBlockFromURLExceptionHeaders = {
serializedName: "BlockBlob_stageBlockFromURLExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobStageBlockFromURLExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
copySourceErrorCode: {
serializedName: "x-ms-copy-source-error-code",
xmlName: "x-ms-copy-source-error-code",
type: {
name: "String",
},
},
copySourceStatusCode: {
serializedName: "x-ms-copy-source-status-code",
xmlName: "x-ms-copy-source-status-code",
type: {
name: "Number",
},
},
},
},
};
const BlockBlobCommitBlockListHeaders = {
serializedName: "BlockBlob_commitBlockListHeaders",
type: {
name: "Composite",
className: "BlockBlobCommitBlockListHeaders",
modelProperties: {
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
contentMD5: {
serializedName: "content-md5",
xmlName: "content-md5",
type: {
name: "ByteArray",
},
},
xMsContentCrc64: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
versionId: {
serializedName: "x-ms-version-id",
xmlName: "x-ms-version-id",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
isServerEncrypted: {
serializedName: "x-ms-request-server-encrypted",
xmlName: "x-ms-request-server-encrypted",
type: {
name: "Boolean",
},
},
encryptionKeySha256: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
encryptionScope: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobCommitBlockListExceptionHeaders = {
serializedName: "BlockBlob_commitBlockListExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobCommitBlockListExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobGetBlockListHeaders = {
serializedName: "BlockBlob_getBlockListHeaders",
type: {
name: "Composite",
className: "BlockBlobGetBlockListHeaders",
modelProperties: {
lastModified: {
serializedName: "last-modified",
xmlName: "last-modified",
type: {
name: "DateTimeRfc1123",
},
},
etag: {
serializedName: "etag",
xmlName: "etag",
type: {
name: "String",
},
},
contentType: {
serializedName: "content-type",
xmlName: "content-type",
type: {
name: "String",
},
},
blobContentLength: {
serializedName: "x-ms-blob-content-length",
xmlName: "x-ms-blob-content-length",
type: {
name: "Number",
},
},
clientRequestId: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
requestId: {
serializedName: "x-ms-request-id",
xmlName: "x-ms-request-id",
type: {
name: "String",
},
},
version: {
serializedName: "x-ms-version",
xmlName: "x-ms-version",
type: {
name: "String",
},
},
date: {
serializedName: "date",
xmlName: "date",
type: {
name: "DateTimeRfc1123",
},
},
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
const BlockBlobGetBlockListExceptionHeaders = {
serializedName: "BlockBlob_getBlockListExceptionHeaders",
type: {
name: "Composite",
className: "BlockBlobGetBlockListExceptionHeaders",
modelProperties: {
errorCode: {
serializedName: "x-ms-error-code",
xmlName: "x-ms-error-code",
type: {
name: "String",
},
},
},
},
};
//# sourceMappingURL=mappers.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/models/parameters.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
const contentType = {
parameterPath: ["options", "contentType"],
mapper: {
defaultValue: "application/xml",
isConstant: true,
serializedName: "Content-Type",
type: {
name: "String",
},
},
};
const blobServiceProperties = {
parameterPath: "blobServiceProperties",
mapper: BlobServiceProperties,
};
const accept = {
parameterPath: "accept",
mapper: {
defaultValue: "application/xml",
isConstant: true,
serializedName: "Accept",
type: {
name: "String",
},
},
};
const url = {
parameterPath: "url",
mapper: {
serializedName: "url",
required: true,
xmlName: "url",
type: {
name: "String",
},
},
skipEncoding: true,
};
const restype = {
parameterPath: "restype",
mapper: {
defaultValue: "service",
isConstant: true,
serializedName: "restype",
type: {
name: "String",
},
},
};
const comp = {
parameterPath: "comp",
mapper: {
defaultValue: "properties",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const timeoutInSeconds = {
parameterPath: ["options", "timeoutInSeconds"],
mapper: {
constraints: {
InclusiveMinimum: 0,
},
serializedName: "timeout",
xmlName: "timeout",
type: {
name: "Number",
},
},
};
const version = {
parameterPath: "version",
mapper: {
defaultValue: "2026-06-06",
isConstant: true,
serializedName: "x-ms-version",
type: {
name: "String",
},
},
};
const requestId = {
parameterPath: ["options", "requestId"],
mapper: {
serializedName: "x-ms-client-request-id",
xmlName: "x-ms-client-request-id",
type: {
name: "String",
},
},
};
const accept1 = {
parameterPath: "accept",
mapper: {
defaultValue: "application/xml",
isConstant: true,
serializedName: "Accept",
type: {
name: "String",
},
},
};
const comp1 = {
parameterPath: "comp",
mapper: {
defaultValue: "stats",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const comp2 = {
parameterPath: "comp",
mapper: {
defaultValue: "list",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const prefix = {
parameterPath: ["options", "prefix"],
mapper: {
serializedName: "prefix",
xmlName: "prefix",
type: {
name: "String",
},
},
};
const marker = {
parameterPath: ["options", "marker"],
mapper: {
serializedName: "marker",
xmlName: "marker",
type: {
name: "String",
},
},
};
const maxPageSize = {
parameterPath: ["options", "maxPageSize"],
mapper: {
constraints: {
InclusiveMinimum: 1,
},
serializedName: "maxresults",
xmlName: "maxresults",
type: {
name: "Number",
},
},
};
const include = {
parameterPath: ["options", "include"],
mapper: {
serializedName: "include",
xmlName: "include",
xmlElementName: "ListContainersIncludeType",
type: {
name: "Sequence",
element: {
type: {
name: "Enum",
allowedValues: ["metadata", "deleted", "system"],
},
},
},
},
collectionFormat: "CSV",
};
const keyInfo = {
parameterPath: "keyInfo",
mapper: KeyInfo,
};
const comp3 = {
parameterPath: "comp",
mapper: {
defaultValue: "userdelegationkey",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const restype1 = {
parameterPath: "restype",
mapper: {
defaultValue: "account",
isConstant: true,
serializedName: "restype",
type: {
name: "String",
},
},
};
const body = {
parameterPath: "body",
mapper: {
serializedName: "body",
required: true,
xmlName: "body",
type: {
name: "Stream",
},
},
};
const comp4 = {
parameterPath: "comp",
mapper: {
defaultValue: "batch",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const contentLength = {
parameterPath: "contentLength",
mapper: {
serializedName: "Content-Length",
required: true,
xmlName: "Content-Length",
type: {
name: "Number",
},
},
};
const multipartContentType = {
parameterPath: "multipartContentType",
mapper: {
serializedName: "Content-Type",
required: true,
xmlName: "Content-Type",
type: {
name: "String",
},
},
};
const comp5 = {
parameterPath: "comp",
mapper: {
defaultValue: "blobs",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const where = {
parameterPath: ["options", "where"],
mapper: {
serializedName: "where",
xmlName: "where",
type: {
name: "String",
},
},
};
const restype2 = {
parameterPath: "restype",
mapper: {
defaultValue: "container",
isConstant: true,
serializedName: "restype",
type: {
name: "String",
},
},
};
const metadata = {
parameterPath: ["options", "metadata"],
mapper: {
serializedName: "x-ms-meta",
xmlName: "x-ms-meta",
headerCollectionPrefix: "x-ms-meta-",
type: {
name: "Dictionary",
value: { type: { name: "String" } },
},
},
};
const access = {
parameterPath: ["options", "access"],
mapper: {
serializedName: "x-ms-blob-public-access",
xmlName: "x-ms-blob-public-access",
type: {
name: "Enum",
allowedValues: ["container", "blob"],
},
},
};
const defaultEncryptionScope = {
parameterPath: [
"options",
"containerEncryptionScope",
"defaultEncryptionScope",
],
mapper: {
serializedName: "x-ms-default-encryption-scope",
xmlName: "x-ms-default-encryption-scope",
type: {
name: "String",
},
},
};
const preventEncryptionScopeOverride = {
parameterPath: [
"options",
"containerEncryptionScope",
"preventEncryptionScopeOverride",
],
mapper: {
serializedName: "x-ms-deny-encryption-scope-override",
xmlName: "x-ms-deny-encryption-scope-override",
type: {
name: "Boolean",
},
},
};
const leaseId = {
parameterPath: ["options", "leaseAccessConditions", "leaseId"],
mapper: {
serializedName: "x-ms-lease-id",
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
};
const ifModifiedSince = {
parameterPath: ["options", "modifiedAccessConditions", "ifModifiedSince"],
mapper: {
serializedName: "If-Modified-Since",
xmlName: "If-Modified-Since",
type: {
name: "DateTimeRfc1123",
},
},
};
const ifUnmodifiedSince = {
parameterPath: ["options", "modifiedAccessConditions", "ifUnmodifiedSince"],
mapper: {
serializedName: "If-Unmodified-Since",
xmlName: "If-Unmodified-Since",
type: {
name: "DateTimeRfc1123",
},
},
};
const comp6 = {
parameterPath: "comp",
mapper: {
defaultValue: "metadata",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const comp7 = {
parameterPath: "comp",
mapper: {
defaultValue: "acl",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const containerAcl = {
parameterPath: ["options", "containerAcl"],
mapper: {
serializedName: "containerAcl",
xmlName: "SignedIdentifiers",
xmlIsWrapped: true,
xmlElementName: "SignedIdentifier",
type: {
name: "Sequence",
element: {
type: {
name: "Composite",
className: "SignedIdentifier",
},
},
},
},
};
const comp8 = {
parameterPath: "comp",
mapper: {
defaultValue: "undelete",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const deletedContainerName = {
parameterPath: ["options", "deletedContainerName"],
mapper: {
serializedName: "x-ms-deleted-container-name",
xmlName: "x-ms-deleted-container-name",
type: {
name: "String",
},
},
};
const deletedContainerVersion = {
parameterPath: ["options", "deletedContainerVersion"],
mapper: {
serializedName: "x-ms-deleted-container-version",
xmlName: "x-ms-deleted-container-version",
type: {
name: "String",
},
},
};
const comp9 = {
parameterPath: "comp",
mapper: {
defaultValue: "rename",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const sourceContainerName = {
parameterPath: "sourceContainerName",
mapper: {
serializedName: "x-ms-source-container-name",
required: true,
xmlName: "x-ms-source-container-name",
type: {
name: "String",
},
},
};
const sourceLeaseId = {
parameterPath: ["options", "sourceLeaseId"],
mapper: {
serializedName: "x-ms-source-lease-id",
xmlName: "x-ms-source-lease-id",
type: {
name: "String",
},
},
};
const comp10 = {
parameterPath: "comp",
mapper: {
defaultValue: "lease",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const action = {
parameterPath: "action",
mapper: {
defaultValue: "acquire",
isConstant: true,
serializedName: "x-ms-lease-action",
type: {
name: "String",
},
},
};
const duration = {
parameterPath: ["options", "duration"],
mapper: {
serializedName: "x-ms-lease-duration",
xmlName: "x-ms-lease-duration",
type: {
name: "Number",
},
},
};
const proposedLeaseId = {
parameterPath: ["options", "proposedLeaseId"],
mapper: {
serializedName: "x-ms-proposed-lease-id",
xmlName: "x-ms-proposed-lease-id",
type: {
name: "String",
},
},
};
const action1 = {
parameterPath: "action",
mapper: {
defaultValue: "release",
isConstant: true,
serializedName: "x-ms-lease-action",
type: {
name: "String",
},
},
};
const leaseId1 = {
parameterPath: "leaseId",
mapper: {
serializedName: "x-ms-lease-id",
required: true,
xmlName: "x-ms-lease-id",
type: {
name: "String",
},
},
};
const action2 = {
parameterPath: "action",
mapper: {
defaultValue: "renew",
isConstant: true,
serializedName: "x-ms-lease-action",
type: {
name: "String",
},
},
};
const action3 = {
parameterPath: "action",
mapper: {
defaultValue: "break",
isConstant: true,
serializedName: "x-ms-lease-action",
type: {
name: "String",
},
},
};
const breakPeriod = {
parameterPath: ["options", "breakPeriod"],
mapper: {
serializedName: "x-ms-lease-break-period",
xmlName: "x-ms-lease-break-period",
type: {
name: "Number",
},
},
};
const action4 = {
parameterPath: "action",
mapper: {
defaultValue: "change",
isConstant: true,
serializedName: "x-ms-lease-action",
type: {
name: "String",
},
},
};
const proposedLeaseId1 = {
parameterPath: "proposedLeaseId",
mapper: {
serializedName: "x-ms-proposed-lease-id",
required: true,
xmlName: "x-ms-proposed-lease-id",
type: {
name: "String",
},
},
};
const include1 = {
parameterPath: ["options", "include"],
mapper: {
serializedName: "include",
xmlName: "include",
xmlElementName: "ListBlobsIncludeItem",
type: {
name: "Sequence",
element: {
type: {
name: "Enum",
allowedValues: [
"copy",
"deleted",
"metadata",
"snapshots",
"uncommittedblobs",
"versions",
"tags",
"immutabilitypolicy",
"legalhold",
"deletedwithversions",
],
},
},
},
},
collectionFormat: "CSV",
};
const startFrom = {
parameterPath: ["options", "startFrom"],
mapper: {
serializedName: "startFrom",
xmlName: "startFrom",
type: {
name: "String",
},
},
};
const delimiter = {
parameterPath: "delimiter",
mapper: {
serializedName: "delimiter",
required: true,
xmlName: "delimiter",
type: {
name: "String",
},
},
};
const snapshot = {
parameterPath: ["options", "snapshot"],
mapper: {
serializedName: "snapshot",
xmlName: "snapshot",
type: {
name: "String",
},
},
};
const versionId = {
parameterPath: ["options", "versionId"],
mapper: {
serializedName: "versionid",
xmlName: "versionid",
type: {
name: "String",
},
},
};
const range = {
parameterPath: ["options", "range"],
mapper: {
serializedName: "x-ms-range",
xmlName: "x-ms-range",
type: {
name: "String",
},
},
};
const rangeGetContentMD5 = {
parameterPath: ["options", "rangeGetContentMD5"],
mapper: {
serializedName: "x-ms-range-get-content-md5",
xmlName: "x-ms-range-get-content-md5",
type: {
name: "Boolean",
},
},
};
const rangeGetContentCRC64 = {
parameterPath: ["options", "rangeGetContentCRC64"],
mapper: {
serializedName: "x-ms-range-get-content-crc64",
xmlName: "x-ms-range-get-content-crc64",
type: {
name: "Boolean",
},
},
};
const structuredBodyType = {
parameterPath: ["options", "structuredBodyType"],
mapper: {
serializedName: "x-ms-structured-body",
xmlName: "x-ms-structured-body",
type: {
name: "String",
},
},
};
const encryptionKey = {
parameterPath: ["options", "cpkInfo", "encryptionKey"],
mapper: {
serializedName: "x-ms-encryption-key",
xmlName: "x-ms-encryption-key",
type: {
name: "String",
},
},
};
const encryptionKeySha256 = {
parameterPath: ["options", "cpkInfo", "encryptionKeySha256"],
mapper: {
serializedName: "x-ms-encryption-key-sha256",
xmlName: "x-ms-encryption-key-sha256",
type: {
name: "String",
},
},
};
const encryptionAlgorithm = {
parameterPath: ["options", "cpkInfo", "encryptionAlgorithm"],
mapper: {
serializedName: "x-ms-encryption-algorithm",
xmlName: "x-ms-encryption-algorithm",
type: {
name: "String",
},
},
};
const ifMatch = {
parameterPath: ["options", "modifiedAccessConditions", "ifMatch"],
mapper: {
serializedName: "If-Match",
xmlName: "If-Match",
type: {
name: "String",
},
},
};
const ifNoneMatch = {
parameterPath: ["options", "modifiedAccessConditions", "ifNoneMatch"],
mapper: {
serializedName: "If-None-Match",
xmlName: "If-None-Match",
type: {
name: "String",
},
},
};
const ifTags = {
parameterPath: ["options", "modifiedAccessConditions", "ifTags"],
mapper: {
serializedName: "x-ms-if-tags",
xmlName: "x-ms-if-tags",
type: {
name: "String",
},
},
};
const deleteSnapshots = {
parameterPath: ["options", "deleteSnapshots"],
mapper: {
serializedName: "x-ms-delete-snapshots",
xmlName: "x-ms-delete-snapshots",
type: {
name: "Enum",
allowedValues: ["include", "only"],
},
},
};
const blobDeleteType = {
parameterPath: ["options", "blobDeleteType"],
mapper: {
serializedName: "deletetype",
xmlName: "deletetype",
type: {
name: "String",
},
},
};
const accessTierIfModifiedSince = {
parameterPath: ["options", "accessTierIfModifiedSince"],
mapper: {
serializedName: "x-ms-access-tier-if-modified-since",
xmlName: "x-ms-access-tier-if-modified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const accessTierIfUnmodifiedSince = {
parameterPath: ["options", "accessTierIfUnmodifiedSince"],
mapper: {
serializedName: "x-ms-access-tier-if-unmodified-since",
xmlName: "x-ms-access-tier-if-unmodified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const comp11 = {
parameterPath: "comp",
mapper: {
defaultValue: "expiry",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const expiryOptions = {
parameterPath: "expiryOptions",
mapper: {
serializedName: "x-ms-expiry-option",
required: true,
xmlName: "x-ms-expiry-option",
type: {
name: "String",
},
},
};
const expiresOn = {
parameterPath: ["options", "expiresOn"],
mapper: {
serializedName: "x-ms-expiry-time",
xmlName: "x-ms-expiry-time",
type: {
name: "String",
},
},
};
const blobCacheControl = {
parameterPath: ["options", "blobHttpHeaders", "blobCacheControl"],
mapper: {
serializedName: "x-ms-blob-cache-control",
xmlName: "x-ms-blob-cache-control",
type: {
name: "String",
},
},
};
const blobContentType = {
parameterPath: ["options", "blobHttpHeaders", "blobContentType"],
mapper: {
serializedName: "x-ms-blob-content-type",
xmlName: "x-ms-blob-content-type",
type: {
name: "String",
},
},
};
const blobContentMD5 = {
parameterPath: ["options", "blobHttpHeaders", "blobContentMD5"],
mapper: {
serializedName: "x-ms-blob-content-md5",
xmlName: "x-ms-blob-content-md5",
type: {
name: "ByteArray",
},
},
};
const blobContentEncoding = {
parameterPath: ["options", "blobHttpHeaders", "blobContentEncoding"],
mapper: {
serializedName: "x-ms-blob-content-encoding",
xmlName: "x-ms-blob-content-encoding",
type: {
name: "String",
},
},
};
const blobContentLanguage = {
parameterPath: ["options", "blobHttpHeaders", "blobContentLanguage"],
mapper: {
serializedName: "x-ms-blob-content-language",
xmlName: "x-ms-blob-content-language",
type: {
name: "String",
},
},
};
const blobContentDisposition = {
parameterPath: ["options", "blobHttpHeaders", "blobContentDisposition"],
mapper: {
serializedName: "x-ms-blob-content-disposition",
xmlName: "x-ms-blob-content-disposition",
type: {
name: "String",
},
},
};
const comp12 = {
parameterPath: "comp",
mapper: {
defaultValue: "immutabilityPolicies",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const immutabilityPolicyExpiry = {
parameterPath: ["options", "immutabilityPolicyExpiry"],
mapper: {
serializedName: "x-ms-immutability-policy-until-date",
xmlName: "x-ms-immutability-policy-until-date",
type: {
name: "DateTimeRfc1123",
},
},
};
const immutabilityPolicyMode = {
parameterPath: ["options", "immutabilityPolicyMode"],
mapper: {
serializedName: "x-ms-immutability-policy-mode",
xmlName: "x-ms-immutability-policy-mode",
type: {
name: "Enum",
allowedValues: ["Mutable", "Unlocked", "Locked"],
},
},
};
const comp13 = {
parameterPath: "comp",
mapper: {
defaultValue: "legalhold",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const legalHold = {
parameterPath: "legalHold",
mapper: {
serializedName: "x-ms-legal-hold",
required: true,
xmlName: "x-ms-legal-hold",
type: {
name: "Boolean",
},
},
};
const encryptionScope = {
parameterPath: ["options", "encryptionScope"],
mapper: {
serializedName: "x-ms-encryption-scope",
xmlName: "x-ms-encryption-scope",
type: {
name: "String",
},
},
};
const comp14 = {
parameterPath: "comp",
mapper: {
defaultValue: "snapshot",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const tier = {
parameterPath: ["options", "tier"],
mapper: {
serializedName: "x-ms-access-tier",
xmlName: "x-ms-access-tier",
type: {
name: "Enum",
allowedValues: [
"P4",
"P6",
"P10",
"P15",
"P20",
"P30",
"P40",
"P50",
"P60",
"P70",
"P80",
"Hot",
"Cool",
"Archive",
"Cold",
"Smart",
],
},
},
};
const rehydratePriority = {
parameterPath: ["options", "rehydratePriority"],
mapper: {
serializedName: "x-ms-rehydrate-priority",
xmlName: "x-ms-rehydrate-priority",
type: {
name: "Enum",
allowedValues: ["High", "Standard"],
},
},
};
const sourceIfModifiedSince = {
parameterPath: [
"options",
"sourceModifiedAccessConditions",
"sourceIfModifiedSince",
],
mapper: {
serializedName: "x-ms-source-if-modified-since",
xmlName: "x-ms-source-if-modified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const sourceIfUnmodifiedSince = {
parameterPath: [
"options",
"sourceModifiedAccessConditions",
"sourceIfUnmodifiedSince",
],
mapper: {
serializedName: "x-ms-source-if-unmodified-since",
xmlName: "x-ms-source-if-unmodified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const sourceIfMatch = {
parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfMatch"],
mapper: {
serializedName: "x-ms-source-if-match",
xmlName: "x-ms-source-if-match",
type: {
name: "String",
},
},
};
const sourceIfNoneMatch = {
parameterPath: [
"options",
"sourceModifiedAccessConditions",
"sourceIfNoneMatch",
],
mapper: {
serializedName: "x-ms-source-if-none-match",
xmlName: "x-ms-source-if-none-match",
type: {
name: "String",
},
},
};
const sourceIfTags = {
parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfTags"],
mapper: {
serializedName: "x-ms-source-if-tags",
xmlName: "x-ms-source-if-tags",
type: {
name: "String",
},
},
};
const copySource = {
parameterPath: "copySource",
mapper: {
serializedName: "x-ms-copy-source",
required: true,
xmlName: "x-ms-copy-source",
type: {
name: "String",
},
},
};
const blobTagsString = {
parameterPath: ["options", "blobTagsString"],
mapper: {
serializedName: "x-ms-tags",
xmlName: "x-ms-tags",
type: {
name: "String",
},
},
};
const sealBlob = {
parameterPath: ["options", "sealBlob"],
mapper: {
serializedName: "x-ms-seal-blob",
xmlName: "x-ms-seal-blob",
type: {
name: "Boolean",
},
},
};
const legalHold1 = {
parameterPath: ["options", "legalHold"],
mapper: {
serializedName: "x-ms-legal-hold",
xmlName: "x-ms-legal-hold",
type: {
name: "Boolean",
},
},
};
const xMsRequiresSync = {
parameterPath: "xMsRequiresSync",
mapper: {
defaultValue: "true",
isConstant: true,
serializedName: "x-ms-requires-sync",
type: {
name: "String",
},
},
};
const sourceContentMD5 = {
parameterPath: ["options", "sourceContentMD5"],
mapper: {
serializedName: "x-ms-source-content-md5",
xmlName: "x-ms-source-content-md5",
type: {
name: "ByteArray",
},
},
};
const copySourceAuthorization = {
parameterPath: ["options", "copySourceAuthorization"],
mapper: {
serializedName: "x-ms-copy-source-authorization",
xmlName: "x-ms-copy-source-authorization",
type: {
name: "String",
},
},
};
const copySourceTags = {
parameterPath: ["options", "copySourceTags"],
mapper: {
serializedName: "x-ms-copy-source-tag-option",
xmlName: "x-ms-copy-source-tag-option",
type: {
name: "Enum",
allowedValues: ["REPLACE", "COPY"],
},
},
};
const fileRequestIntent = {
parameterPath: ["options", "fileRequestIntent"],
mapper: {
serializedName: "x-ms-file-request-intent",
xmlName: "x-ms-file-request-intent",
type: {
name: "String",
},
},
};
const comp15 = {
parameterPath: "comp",
mapper: {
defaultValue: "copy",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const copyActionAbortConstant = {
parameterPath: "copyActionAbortConstant",
mapper: {
defaultValue: "abort",
isConstant: true,
serializedName: "x-ms-copy-action",
type: {
name: "String",
},
},
};
const copyId = {
parameterPath: "copyId",
mapper: {
serializedName: "copyid",
required: true,
xmlName: "copyid",
type: {
name: "String",
},
},
};
const comp16 = {
parameterPath: "comp",
mapper: {
defaultValue: "tier",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const tier1 = {
parameterPath: "tier",
mapper: {
serializedName: "x-ms-access-tier",
required: true,
xmlName: "x-ms-access-tier",
type: {
name: "Enum",
allowedValues: [
"P4",
"P6",
"P10",
"P15",
"P20",
"P30",
"P40",
"P50",
"P60",
"P70",
"P80",
"Hot",
"Cool",
"Archive",
"Cold",
"Smart",
],
},
},
};
const queryRequest = {
parameterPath: ["options", "queryRequest"],
mapper: QueryRequest,
};
const comp17 = {
parameterPath: "comp",
mapper: {
defaultValue: "query",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const comp18 = {
parameterPath: "comp",
mapper: {
defaultValue: "tags",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const ifModifiedSince1 = {
parameterPath: ["options", "blobModifiedAccessConditions", "ifModifiedSince"],
mapper: {
serializedName: "x-ms-blob-if-modified-since",
xmlName: "x-ms-blob-if-modified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const ifUnmodifiedSince1 = {
parameterPath: [
"options",
"blobModifiedAccessConditions",
"ifUnmodifiedSince",
],
mapper: {
serializedName: "x-ms-blob-if-unmodified-since",
xmlName: "x-ms-blob-if-unmodified-since",
type: {
name: "DateTimeRfc1123",
},
},
};
const ifMatch1 = {
parameterPath: ["options", "blobModifiedAccessConditions", "ifMatch"],
mapper: {
serializedName: "x-ms-blob-if-match",
xmlName: "x-ms-blob-if-match",
type: {
name: "String",
},
},
};
const ifNoneMatch1 = {
parameterPath: ["options", "blobModifiedAccessConditions", "ifNoneMatch"],
mapper: {
serializedName: "x-ms-blob-if-none-match",
xmlName: "x-ms-blob-if-none-match",
type: {
name: "String",
},
},
};
const tags = {
parameterPath: ["options", "tags"],
mapper: BlobTags,
};
const transactionalContentMD5 = {
parameterPath: ["options", "transactionalContentMD5"],
mapper: {
serializedName: "Content-MD5",
xmlName: "Content-MD5",
type: {
name: "ByteArray",
},
},
};
const transactionalContentCrc64 = {
parameterPath: ["options", "transactionalContentCrc64"],
mapper: {
serializedName: "x-ms-content-crc64",
xmlName: "x-ms-content-crc64",
type: {
name: "ByteArray",
},
},
};
const blobType = {
parameterPath: "blobType",
mapper: {
defaultValue: "PageBlob",
isConstant: true,
serializedName: "x-ms-blob-type",
type: {
name: "String",
},
},
};
const blobContentLength = {
parameterPath: "blobContentLength",
mapper: {
serializedName: "x-ms-blob-content-length",
required: true,
xmlName: "x-ms-blob-content-length",
type: {
name: "Number",
},
},
};
const blobSequenceNumber = {
parameterPath: ["options", "blobSequenceNumber"],
mapper: {
defaultValue: 0,
serializedName: "x-ms-blob-sequence-number",
xmlName: "x-ms-blob-sequence-number",
type: {
name: "Number",
},
},
};
const contentType1 = {
parameterPath: ["options", "contentType"],
mapper: {
defaultValue: "application/octet-stream",
isConstant: true,
serializedName: "Content-Type",
type: {
name: "String",
},
},
};
const body1 = {
parameterPath: "body",
mapper: {
serializedName: "body",
required: true,
xmlName: "body",
type: {
name: "Stream",
},
},
};
const accept2 = {
parameterPath: "accept",
mapper: {
defaultValue: "application/xml",
isConstant: true,
serializedName: "Accept",
type: {
name: "String",
},
},
};
const comp19 = {
parameterPath: "comp",
mapper: {
defaultValue: "page",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const pageWrite = {
parameterPath: "pageWrite",
mapper: {
defaultValue: "update",
isConstant: true,
serializedName: "x-ms-page-write",
type: {
name: "String",
},
},
};
const ifSequenceNumberLessThanOrEqualTo = {
parameterPath: [
"options",
"sequenceNumberAccessConditions",
"ifSequenceNumberLessThanOrEqualTo",
],
mapper: {
serializedName: "x-ms-if-sequence-number-le",
xmlName: "x-ms-if-sequence-number-le",
type: {
name: "Number",
},
},
};
const ifSequenceNumberLessThan = {
parameterPath: [
"options",
"sequenceNumberAccessConditions",
"ifSequenceNumberLessThan",
],
mapper: {
serializedName: "x-ms-if-sequence-number-lt",
xmlName: "x-ms-if-sequence-number-lt",
type: {
name: "Number",
},
},
};
const ifSequenceNumberEqualTo = {
parameterPath: [
"options",
"sequenceNumberAccessConditions",
"ifSequenceNumberEqualTo",
],
mapper: {
serializedName: "x-ms-if-sequence-number-eq",
xmlName: "x-ms-if-sequence-number-eq",
type: {
name: "Number",
},
},
};
const structuredContentLength = {
parameterPath: ["options", "structuredContentLength"],
mapper: {
serializedName: "x-ms-structured-content-length",
xmlName: "x-ms-structured-content-length",
type: {
name: "Number",
},
},
};
const pageWrite1 = {
parameterPath: "pageWrite",
mapper: {
defaultValue: "clear",
isConstant: true,
serializedName: "x-ms-page-write",
type: {
name: "String",
},
},
};
const sourceUrl = {
parameterPath: "sourceUrl",
mapper: {
serializedName: "x-ms-copy-source",
required: true,
xmlName: "x-ms-copy-source",
type: {
name: "String",
},
},
};
const sourceRange = {
parameterPath: "sourceRange",
mapper: {
serializedName: "x-ms-source-range",
required: true,
xmlName: "x-ms-source-range",
type: {
name: "String",
},
},
};
const sourceContentCrc64 = {
parameterPath: ["options", "sourceContentCrc64"],
mapper: {
serializedName: "x-ms-source-content-crc64",
xmlName: "x-ms-source-content-crc64",
type: {
name: "ByteArray",
},
},
};
const range1 = {
parameterPath: "range",
mapper: {
serializedName: "x-ms-range",
required: true,
xmlName: "x-ms-range",
type: {
name: "String",
},
},
};
const sourceEncryptionKey = {
parameterPath: ["options", "sourceCpkInfo", "sourceEncryptionKey"],
mapper: {
serializedName: "x-ms-source-encryption-key",
xmlName: "x-ms-source-encryption-key",
type: {
name: "String",
},
},
};
const sourceEncryptionKeySha256 = {
parameterPath: ["options", "sourceCpkInfo", "sourceEncryptionKeySha256"],
mapper: {
serializedName: "x-ms-source-encryption-key-sha256",
xmlName: "x-ms-source-encryption-key-sha256",
type: {
name: "String",
},
},
};
const sourceEncryptionAlgorithm = {
parameterPath: ["options", "sourceCpkInfo", "sourceEncryptionAlgorithm"],
mapper: {
serializedName: "x-ms-source-encryption-algorithm",
xmlName: "x-ms-source-encryption-algorithm",
type: {
name: "String",
},
},
};
const comp20 = {
parameterPath: "comp",
mapper: {
defaultValue: "pagelist",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const prevsnapshot = {
parameterPath: ["options", "prevsnapshot"],
mapper: {
serializedName: "prevsnapshot",
xmlName: "prevsnapshot",
type: {
name: "String",
},
},
};
const prevSnapshotUrl = {
parameterPath: ["options", "prevSnapshotUrl"],
mapper: {
serializedName: "x-ms-previous-snapshot-url",
xmlName: "x-ms-previous-snapshot-url",
type: {
name: "String",
},
},
};
const sequenceNumberAction = {
parameterPath: "sequenceNumberAction",
mapper: {
serializedName: "x-ms-sequence-number-action",
required: true,
xmlName: "x-ms-sequence-number-action",
type: {
name: "Enum",
allowedValues: ["max", "update", "increment"],
},
},
};
const comp21 = {
parameterPath: "comp",
mapper: {
defaultValue: "incrementalcopy",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const blobType1 = {
parameterPath: "blobType",
mapper: {
defaultValue: "AppendBlob",
isConstant: true,
serializedName: "x-ms-blob-type",
type: {
name: "String",
},
},
};
const comp22 = {
parameterPath: "comp",
mapper: {
defaultValue: "appendblock",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const maxSize = {
parameterPath: ["options", "appendPositionAccessConditions", "maxSize"],
mapper: {
serializedName: "x-ms-blob-condition-maxsize",
xmlName: "x-ms-blob-condition-maxsize",
type: {
name: "Number",
},
},
};
const appendPosition = {
parameterPath: [
"options",
"appendPositionAccessConditions",
"appendPosition",
],
mapper: {
serializedName: "x-ms-blob-condition-appendpos",
xmlName: "x-ms-blob-condition-appendpos",
type: {
name: "Number",
},
},
};
const sourceRange1 = {
parameterPath: ["options", "sourceRange"],
mapper: {
serializedName: "x-ms-source-range",
xmlName: "x-ms-source-range",
type: {
name: "String",
},
},
};
const comp23 = {
parameterPath: "comp",
mapper: {
defaultValue: "seal",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const blobType2 = {
parameterPath: "blobType",
mapper: {
defaultValue: "BlockBlob",
isConstant: true,
serializedName: "x-ms-blob-type",
type: {
name: "String",
},
},
};
const copySourceBlobProperties = {
parameterPath: ["options", "copySourceBlobProperties"],
mapper: {
serializedName: "x-ms-copy-source-blob-properties",
xmlName: "x-ms-copy-source-blob-properties",
type: {
name: "Boolean",
},
},
};
const comp24 = {
parameterPath: "comp",
mapper: {
defaultValue: "block",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const blockId = {
parameterPath: "blockId",
mapper: {
serializedName: "blockid",
required: true,
xmlName: "blockid",
type: {
name: "String",
},
},
};
const blocks = {
parameterPath: "blocks",
mapper: BlockLookupList,
};
const comp25 = {
parameterPath: "comp",
mapper: {
defaultValue: "blocklist",
isConstant: true,
serializedName: "comp",
type: {
name: "String",
},
},
};
const listType = {
parameterPath: "listType",
mapper: {
defaultValue: "committed",
serializedName: "blocklisttype",
required: true,
xmlName: "blocklisttype",
type: {
name: "Enum",
allowedValues: ["committed", "uncommitted", "all"],
},
},
};
//# sourceMappingURL=parameters.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/service.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing Service operations. */
class ServiceImpl {
client;
/**
* Initialize a new instance of the class Service class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* Sets properties for a storage account's Blob service endpoint, including properties for Storage
* Analytics and CORS (Cross-Origin Resource Sharing) rules
* @param blobServiceProperties The StorageService properties.
* @param options The options parameters.
*/
setProperties(blobServiceProperties, options) {
return this.client.sendOperationRequest({ blobServiceProperties, options }, setPropertiesOperationSpec);
}
/**
* gets the properties of a storage account's Blob service, including properties for Storage Analytics
* and CORS (Cross-Origin Resource Sharing) rules.
* @param options The options parameters.
*/
getProperties(options) {
return this.client.sendOperationRequest({ options }, getPropertiesOperationSpec);
}
/**
* Retrieves statistics related to replication for the Blob service. It is only available on the
* secondary location endpoint when read-access geo-redundant replication is enabled for the storage
* account.
* @param options The options parameters.
*/
getStatistics(options) {
return this.client.sendOperationRequest({ options }, getStatisticsOperationSpec);
}
/**
* The List Containers Segment operation returns a list of the containers under the specified account
* @param options The options parameters.
*/
listContainersSegment(options) {
return this.client.sendOperationRequest({ options }, listContainersSegmentOperationSpec);
}
/**
* Retrieves a user delegation key for the Blob service. This is only a valid operation when using
* bearer token authentication.
* @param keyInfo Key information
* @param options The options parameters.
*/
getUserDelegationKey(keyInfo, options) {
return this.client.sendOperationRequest({ keyInfo, options }, getUserDelegationKeyOperationSpec);
}
/**
* Returns the sku name and account kind
* @param options The options parameters.
*/
getAccountInfo(options) {
return this.client.sendOperationRequest({ options }, getAccountInfoOperationSpec);
}
/**
* The Batch operation allows multiple API calls to be embedded into a single HTTP request.
* @param contentLength The length of the request.
* @param multipartContentType Required. The value of this header must be multipart/mixed with a batch
* boundary. Example header value: multipart/mixed; boundary=batch_<GUID>
* @param body Initial data
* @param options The options parameters.
*/
submitBatch(contentLength, multipartContentType, body, options) {
return this.client.sendOperationRequest({ contentLength, multipartContentType, body, options }, submitBatchOperationSpec);
}
/**
* The Filter Blobs operation enables callers to list blobs across all containers whose tags match a
* given search expression. Filter blobs searches across all containers within a storage account but
* can be scoped within the expression to a single container.
* @param options The options parameters.
*/
filterBlobs(options) {
return this.client.sendOperationRequest({ options }, filterBlobsOperationSpec);
}
}
// Operation Specifications
const xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const setPropertiesOperationSpec = {
path: "/",
httpMethod: "PUT",
responses: {
202: {
headersMapper: ServiceSetPropertiesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceSetPropertiesExceptionHeaders,
},
},
requestBody: blobServiceProperties,
queryParameters: [
restype,
comp,
timeoutInSeconds,
],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: xmlSerializer,
};
const getPropertiesOperationSpec = {
path: "/",
httpMethod: "GET",
responses: {
200: {
bodyMapper: BlobServiceProperties,
headersMapper: ServiceGetPropertiesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceGetPropertiesExceptionHeaders,
},
},
queryParameters: [
restype,
comp,
timeoutInSeconds,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: xmlSerializer,
};
const getStatisticsOperationSpec = {
path: "/",
httpMethod: "GET",
responses: {
200: {
bodyMapper: BlobServiceStatistics,
headersMapper: ServiceGetStatisticsHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceGetStatisticsExceptionHeaders,
},
},
queryParameters: [
restype,
timeoutInSeconds,
comp1,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: xmlSerializer,
};
const listContainersSegmentOperationSpec = {
path: "/",
httpMethod: "GET",
responses: {
200: {
bodyMapper: ListContainersSegmentResponse,
headersMapper: ServiceListContainersSegmentHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceListContainersSegmentExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
comp2,
prefix,
marker,
maxPageSize,
include,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: xmlSerializer,
};
const getUserDelegationKeyOperationSpec = {
path: "/",
httpMethod: "POST",
responses: {
200: {
bodyMapper: UserDelegationKey,
headersMapper: ServiceGetUserDelegationKeyHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceGetUserDelegationKeyExceptionHeaders,
},
},
requestBody: keyInfo,
queryParameters: [
restype,
timeoutInSeconds,
comp3,
],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: xmlSerializer,
};
const getAccountInfoOperationSpec = {
path: "/",
httpMethod: "GET",
responses: {
200: {
headersMapper: ServiceGetAccountInfoHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceGetAccountInfoExceptionHeaders,
},
},
queryParameters: [
comp,
timeoutInSeconds,
restype1,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: xmlSerializer,
};
const submitBatchOperationSpec = {
path: "/",
httpMethod: "POST",
responses: {
202: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: ServiceSubmitBatchHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceSubmitBatchExceptionHeaders,
},
},
requestBody: body,
queryParameters: [timeoutInSeconds, comp4],
urlParameters: [url],
headerParameters: [
accept,
version,
requestId,
contentLength,
multipartContentType,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: xmlSerializer,
};
const filterBlobsOperationSpec = {
path: "/",
httpMethod: "GET",
responses: {
200: {
bodyMapper: FilterBlobSegment,
headersMapper: ServiceFilterBlobsHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ServiceFilterBlobsExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
marker,
maxPageSize,
comp5,
where,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: xmlSerializer,
};
//# sourceMappingURL=service.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/container.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing Container operations. */
class ContainerImpl {
client;
/**
* Initialize a new instance of the class Container class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* creates a new container under the specified account. If the container with the same name already
* exists, the operation fails
* @param options The options parameters.
*/
create(options) {
return this.client.sendOperationRequest({ options }, createOperationSpec);
}
/**
* returns all user-defined metadata and system properties for the specified container. The data
* returned does not include the container's list of blobs
* @param options The options parameters.
*/
getProperties(options) {
return this.client.sendOperationRequest({ options }, container_getPropertiesOperationSpec);
}
/**
* operation marks the specified container for deletion. The container and any blobs contained within
* it are later deleted during garbage collection
* @param options The options parameters.
*/
delete(options) {
return this.client.sendOperationRequest({ options }, deleteOperationSpec);
}
/**
* operation sets one or more user-defined name-value pairs for the specified container.
* @param options The options parameters.
*/
setMetadata(options) {
return this.client.sendOperationRequest({ options }, setMetadataOperationSpec);
}
/**
* gets the permissions for the specified container. The permissions indicate whether container data
* may be accessed publicly.
* @param options The options parameters.
*/
getAccessPolicy(options) {
return this.client.sendOperationRequest({ options }, getAccessPolicyOperationSpec);
}
/**
* sets the permissions for the specified container. The permissions indicate whether blobs in a
* container may be accessed publicly.
* @param options The options parameters.
*/
setAccessPolicy(options) {
return this.client.sendOperationRequest({ options }, setAccessPolicyOperationSpec);
}
/**
* Restores a previously-deleted container.
* @param options The options parameters.
*/
restore(options) {
return this.client.sendOperationRequest({ options }, restoreOperationSpec);
}
/**
* Renames an existing container.
* @param sourceContainerName Required. Specifies the name of the container to rename.
* @param options The options parameters.
*/
rename(sourceContainerName, options) {
return this.client.sendOperationRequest({ sourceContainerName, options }, renameOperationSpec);
}
/**
* The Batch operation allows multiple API calls to be embedded into a single HTTP request.
* @param contentLength The length of the request.
* @param multipartContentType Required. The value of this header must be multipart/mixed with a batch
* boundary. Example header value: multipart/mixed; boundary=batch_<GUID>
* @param body Initial data
* @param options The options parameters.
*/
submitBatch(contentLength, multipartContentType, body, options) {
return this.client.sendOperationRequest({ contentLength, multipartContentType, body, options }, container_submitBatchOperationSpec);
}
/**
* The Filter Blobs operation enables callers to list blobs in a container whose tags match a given
* search expression. Filter blobs searches within the given container.
* @param options The options parameters.
*/
filterBlobs(options) {
return this.client.sendOperationRequest({ options }, container_filterBlobsOperationSpec);
}
/**
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
* be 15 to 60 seconds, or can be infinite
* @param options The options parameters.
*/
acquireLease(options) {
return this.client.sendOperationRequest({ options }, acquireLeaseOperationSpec);
}
/**
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
* be 15 to 60 seconds, or can be infinite
* @param leaseId Specifies the current lease ID on the resource.
* @param options The options parameters.
*/
releaseLease(leaseId, options) {
return this.client.sendOperationRequest({ leaseId, options }, releaseLeaseOperationSpec);
}
/**
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
* be 15 to 60 seconds, or can be infinite
* @param leaseId Specifies the current lease ID on the resource.
* @param options The options parameters.
*/
renewLease(leaseId, options) {
return this.client.sendOperationRequest({ leaseId, options }, renewLeaseOperationSpec);
}
/**
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
* be 15 to 60 seconds, or can be infinite
* @param options The options parameters.
*/
breakLease(options) {
return this.client.sendOperationRequest({ options }, breakLeaseOperationSpec);
}
/**
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
* be 15 to 60 seconds, or can be infinite
* @param leaseId Specifies the current lease ID on the resource.
* @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400
* (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor
* (String) for a list of valid GUID string formats.
* @param options The options parameters.
*/
changeLease(leaseId, proposedLeaseId, options) {
return this.client.sendOperationRequest({ leaseId, proposedLeaseId, options }, changeLeaseOperationSpec);
}
/**
* [Update] The List Blobs operation returns a list of the blobs under the specified container
* @param options The options parameters.
*/
listBlobFlatSegment(options) {
return this.client.sendOperationRequest({ options }, listBlobFlatSegmentOperationSpec);
}
/**
* [Update] The List Blobs operation returns a list of the blobs under the specified container
* @param delimiter When the request includes this parameter, the operation returns a BlobPrefix
* element in the response body that acts as a placeholder for all blobs whose names begin with the
* same substring up to the appearance of the delimiter character. The delimiter may be a single
* character or a string.
* @param options The options parameters.
*/
listBlobHierarchySegment(delimiter, options) {
return this.client.sendOperationRequest({ delimiter, options }, listBlobHierarchySegmentOperationSpec);
}
/**
* Returns the sku name and account kind
* @param options The options parameters.
*/
getAccountInfo(options) {
return this.client.sendOperationRequest({ options }, container_getAccountInfoOperationSpec);
}
}
// Operation Specifications
const container_xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const createOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: ContainerCreateHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerCreateExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, restype2],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
access,
defaultEncryptionScope,
preventEncryptionScopeOverride,
],
isXML: true,
serializer: container_xmlSerializer,
};
const container_getPropertiesOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
headersMapper: ContainerGetPropertiesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerGetPropertiesExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, restype2],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
],
isXML: true,
serializer: container_xmlSerializer,
};
const deleteOperationSpec = {
path: "/{containerName}",
httpMethod: "DELETE",
responses: {
202: {
headersMapper: ContainerDeleteHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerDeleteExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, restype2],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
],
isXML: true,
serializer: container_xmlSerializer,
};
const setMetadataOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerSetMetadataHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerSetMetadataExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp6,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
leaseId,
ifModifiedSince,
],
isXML: true,
serializer: container_xmlSerializer,
};
const getAccessPolicyOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: {
type: {
name: "Sequence",
element: {
type: { name: "Composite", className: "SignedIdentifier" },
},
},
serializedName: "SignedIdentifiers",
xmlName: "SignedIdentifiers",
xmlIsWrapped: true,
xmlElementName: "SignedIdentifier",
},
headersMapper: ContainerGetAccessPolicyHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerGetAccessPolicyExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp7,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
],
isXML: true,
serializer: container_xmlSerializer,
};
const setAccessPolicyOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerSetAccessPolicyHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerSetAccessPolicyExceptionHeaders,
},
},
requestBody: containerAcl,
queryParameters: [
timeoutInSeconds,
restype2,
comp7,
],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
access,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: container_xmlSerializer,
};
const restoreOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: ContainerRestoreHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerRestoreExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp8,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
deletedContainerName,
deletedContainerVersion,
],
isXML: true,
serializer: container_xmlSerializer,
};
const renameOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerRenameHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerRenameExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp9,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
sourceContainerName,
sourceLeaseId,
],
isXML: true,
serializer: container_xmlSerializer,
};
const container_submitBatchOperationSpec = {
path: "/{containerName}",
httpMethod: "POST",
responses: {
202: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: ContainerSubmitBatchHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerSubmitBatchExceptionHeaders,
},
},
requestBody: body,
queryParameters: [
timeoutInSeconds,
comp4,
restype2,
],
urlParameters: [url],
headerParameters: [
accept,
version,
requestId,
contentLength,
multipartContentType,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: container_xmlSerializer,
};
const container_filterBlobsOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: FilterBlobSegment,
headersMapper: ContainerFilterBlobsHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerFilterBlobsExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
marker,
maxPageSize,
comp5,
where,
restype2,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: container_xmlSerializer,
};
const acquireLeaseOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: ContainerAcquireLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerAcquireLeaseExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp10,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action,
duration,
proposedLeaseId,
],
isXML: true,
serializer: container_xmlSerializer,
};
const releaseLeaseOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerReleaseLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerReleaseLeaseExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp10,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action1,
leaseId1,
],
isXML: true,
serializer: container_xmlSerializer,
};
const renewLeaseOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerRenewLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerRenewLeaseExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp10,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
leaseId1,
action2,
],
isXML: true,
serializer: container_xmlSerializer,
};
const breakLeaseOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
202: {
headersMapper: ContainerBreakLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerBreakLeaseExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp10,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action3,
breakPeriod,
],
isXML: true,
serializer: container_xmlSerializer,
};
const changeLeaseOperationSpec = {
path: "/{containerName}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: ContainerChangeLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerChangeLeaseExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
restype2,
comp10,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
leaseId1,
action4,
proposedLeaseId1,
],
isXML: true,
serializer: container_xmlSerializer,
};
const listBlobFlatSegmentOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: ListBlobsFlatSegmentResponse,
headersMapper: ContainerListBlobFlatSegmentHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerListBlobFlatSegmentExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
comp2,
prefix,
marker,
maxPageSize,
restype2,
include1,
startFrom,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: container_xmlSerializer,
};
const listBlobHierarchySegmentOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: ListBlobsHierarchySegmentResponse,
headersMapper: ContainerListBlobHierarchySegmentHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerListBlobHierarchySegmentExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
comp2,
prefix,
marker,
maxPageSize,
restype2,
include1,
startFrom,
delimiter,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: container_xmlSerializer,
};
const container_getAccountInfoOperationSpec = {
path: "/{containerName}",
httpMethod: "GET",
responses: {
200: {
headersMapper: ContainerGetAccountInfoHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: ContainerGetAccountInfoExceptionHeaders,
},
},
queryParameters: [
comp,
timeoutInSeconds,
restype1,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: container_xmlSerializer,
};
//# sourceMappingURL=container.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/blob.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing Blob operations. */
class BlobImpl {
client;
/**
* Initialize a new instance of the class Blob class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* The Download operation reads or downloads a blob from the system, including its metadata and
* properties. You can also call Download to read a snapshot.
* @param options The options parameters.
*/
download(options) {
return this.client.sendOperationRequest({ options }, downloadOperationSpec);
}
/**
* The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system
* properties for the blob. It does not return the content of the blob.
* @param options The options parameters.
*/
getProperties(options) {
return this.client.sendOperationRequest({ options }, blob_getPropertiesOperationSpec);
}
/**
* If the storage account's soft delete feature is disabled then, when a blob is deleted, it is
* permanently removed from the storage account. If the storage account's soft delete feature is
* enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible
* immediately. However, the blob service retains the blob or snapshot for the number of days specified
* by the DeleteRetentionPolicy section of [Storage service properties]
* (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is
* permanently removed from the storage account. Note that you continue to be charged for the
* soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the
* "include=deleted" query parameter to discover which blobs and snapshots have been soft deleted. You
* can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a
* soft-deleted blob or snapshot causes the service to return an HTTP status code of 404
* (ResourceNotFound).
* @param options The options parameters.
*/
delete(options) {
return this.client.sendOperationRequest({ options }, blob_deleteOperationSpec);
}
/**
* Undelete a blob that was previously soft deleted
* @param options The options parameters.
*/
undelete(options) {
return this.client.sendOperationRequest({ options }, undeleteOperationSpec);
}
/**
* Sets the time a blob will expire and be deleted.
* @param expiryOptions Required. Indicates mode of the expiry time
* @param options The options parameters.
*/
setExpiry(expiryOptions, options) {
return this.client.sendOperationRequest({ expiryOptions, options }, setExpiryOperationSpec);
}
/**
* The Set HTTP Headers operation sets system properties on the blob
* @param options The options parameters.
*/
setHttpHeaders(options) {
return this.client.sendOperationRequest({ options }, setHttpHeadersOperationSpec);
}
/**
* The Set Immutability Policy operation sets the immutability policy on the blob
* @param options The options parameters.
*/
setImmutabilityPolicy(options) {
return this.client.sendOperationRequest({ options }, setImmutabilityPolicyOperationSpec);
}
/**
* The Delete Immutability Policy operation deletes the immutability policy on the blob
* @param options The options parameters.
*/
deleteImmutabilityPolicy(options) {
return this.client.sendOperationRequest({ options }, deleteImmutabilityPolicyOperationSpec);
}
/**
* The Set Legal Hold operation sets a legal hold on the blob.
* @param legalHold Specified if a legal hold should be set on the blob.
* @param options The options parameters.
*/
setLegalHold(legalHold, options) {
return this.client.sendOperationRequest({ legalHold, options }, setLegalHoldOperationSpec);
}
/**
* The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more
* name-value pairs
* @param options The options parameters.
*/
setMetadata(options) {
return this.client.sendOperationRequest({ options }, blob_setMetadataOperationSpec);
}
/**
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
* operations
* @param options The options parameters.
*/
acquireLease(options) {
return this.client.sendOperationRequest({ options }, blob_acquireLeaseOperationSpec);
}
/**
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
* operations
* @param leaseId Specifies the current lease ID on the resource.
* @param options The options parameters.
*/
releaseLease(leaseId, options) {
return this.client.sendOperationRequest({ leaseId, options }, blob_releaseLeaseOperationSpec);
}
/**
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
* operations
* @param leaseId Specifies the current lease ID on the resource.
* @param options The options parameters.
*/
renewLease(leaseId, options) {
return this.client.sendOperationRequest({ leaseId, options }, blob_renewLeaseOperationSpec);
}
/**
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
* operations
* @param leaseId Specifies the current lease ID on the resource.
* @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400
* (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor
* (String) for a list of valid GUID string formats.
* @param options The options parameters.
*/
changeLease(leaseId, proposedLeaseId, options) {
return this.client.sendOperationRequest({ leaseId, proposedLeaseId, options }, blob_changeLeaseOperationSpec);
}
/**
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
* operations
* @param options The options parameters.
*/
breakLease(options) {
return this.client.sendOperationRequest({ options }, blob_breakLeaseOperationSpec);
}
/**
* The Create Snapshot operation creates a read-only snapshot of a blob
* @param options The options parameters.
*/
createSnapshot(options) {
return this.client.sendOperationRequest({ options }, createSnapshotOperationSpec);
}
/**
* The Start Copy From URL operation copies a blob or an internet resource to a new blob.
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
* access signature.
* @param options The options parameters.
*/
startCopyFromURL(copySource, options) {
return this.client.sendOperationRequest({ copySource, options }, startCopyFromURLOperationSpec);
}
/**
* The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return
* a response until the copy is complete.
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
* access signature.
* @param options The options parameters.
*/
copyFromURL(copySource, options) {
return this.client.sendOperationRequest({ copySource, options }, copyFromURLOperationSpec);
}
/**
* The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination
* blob with zero length and full metadata.
* @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob
* operation.
* @param options The options parameters.
*/
abortCopyFromURL(copyId, options) {
return this.client.sendOperationRequest({ copyId, options }, abortCopyFromURLOperationSpec);
}
/**
* The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium
* storage account and on a block blob in a blob storage account (locally redundant storage only). A
* premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block
* blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's
* ETag.
* @param tier Indicates the tier to be set on the blob.
* @param options The options parameters.
*/
setTier(tier, options) {
return this.client.sendOperationRequest({ tier, options }, setTierOperationSpec);
}
/**
* Returns the sku name and account kind
* @param options The options parameters.
*/
getAccountInfo(options) {
return this.client.sendOperationRequest({ options }, blob_getAccountInfoOperationSpec);
}
/**
* The Query operation enables users to select/project on blob data by providing simple query
* expressions.
* @param options The options parameters.
*/
query(options) {
return this.client.sendOperationRequest({ options }, queryOperationSpec);
}
/**
* The Get Tags operation enables users to get the tags associated with a blob.
* @param options The options parameters.
*/
getTags(options) {
return this.client.sendOperationRequest({ options }, getTagsOperationSpec);
}
/**
* The Set Tags operation enables users to set tags on a blob.
* @param options The options parameters.
*/
setTags(options) {
return this.client.sendOperationRequest({ options }, setTagsOperationSpec);
}
}
// Operation Specifications
const blob_xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const downloadOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: BlobDownloadHeaders,
},
206: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: BlobDownloadHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobDownloadExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
range,
rangeGetContentMD5,
rangeGetContentCRC64,
structuredBodyType,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_getPropertiesOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "HEAD",
responses: {
200: {
headersMapper: BlobGetPropertiesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobGetPropertiesExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_deleteOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "DELETE",
responses: {
202: {
headersMapper: BlobDeleteHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobDeleteExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
blobDeleteType,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
deleteSnapshots,
accessTierIfModifiedSince,
accessTierIfUnmodifiedSince,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const undeleteOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobUndeleteHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobUndeleteExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp8],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setExpiryOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetExpiryHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetExpiryExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp11],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
expiryOptions,
expiresOn,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setHttpHeadersOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetHttpHeadersHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetHttpHeadersExceptionHeaders,
},
},
queryParameters: [comp, timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setImmutabilityPolicyOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetImmutabilityPolicyHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetImmutabilityPolicyExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
comp12,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifUnmodifiedSince,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const deleteImmutabilityPolicyOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "DELETE",
responses: {
200: {
headersMapper: BlobDeleteImmutabilityPolicyHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobDeleteImmutabilityPolicyExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
comp12,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setLegalHoldOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetLegalHoldHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetLegalHoldExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
comp13,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
legalHold,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_setMetadataOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetMetadataHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetMetadataExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp6],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_acquireLeaseOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlobAcquireLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobAcquireLeaseExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp10],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action,
duration,
proposedLeaseId,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_releaseLeaseOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobReleaseLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobReleaseLeaseExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp10],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action1,
leaseId1,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_renewLeaseOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobRenewLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobRenewLeaseExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp10],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
leaseId1,
action2,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_changeLeaseOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobChangeLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobChangeLeaseExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp10],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
leaseId1,
action4,
proposedLeaseId1,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_breakLeaseOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
202: {
headersMapper: BlobBreakLeaseHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobBreakLeaseExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp10],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
action3,
breakPeriod,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const createSnapshotOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlobCreateSnapshotHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobCreateSnapshotExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp14],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const startCopyFromURLOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
202: {
headersMapper: BlobStartCopyFromURLHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobStartCopyFromURLExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
tier,
rehydratePriority,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
sourceIfTags,
copySource,
blobTagsString,
sealBlob,
legalHold1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const copyFromURLOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
202: {
headersMapper: BlobCopyFromURLHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobCopyFromURLExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
encryptionScope,
tier,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
copySource,
blobTagsString,
legalHold1,
xMsRequiresSync,
sourceContentMD5,
copySourceAuthorization,
copySourceTags,
fileRequestIntent,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const abortCopyFromURLOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
204: {
headersMapper: BlobAbortCopyFromURLHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobAbortCopyFromURLExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
comp15,
copyId,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
copyActionAbortConstant,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setTierOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: BlobSetTierHeaders,
},
202: {
headersMapper: BlobSetTierHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetTierExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
comp16,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifTags,
rehydratePriority,
tier1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const blob_getAccountInfoOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
headersMapper: BlobGetAccountInfoHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobGetAccountInfoExceptionHeaders,
},
},
queryParameters: [
comp,
timeoutInSeconds,
restype1,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const queryOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "POST",
responses: {
200: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: BlobQueryHeaders,
},
206: {
bodyMapper: {
type: { name: "Stream" },
serializedName: "parsedResponse",
},
headersMapper: BlobQueryHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobQueryExceptionHeaders,
},
},
requestBody: queryRequest,
queryParameters: [
timeoutInSeconds,
snapshot,
comp17,
],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: blob_xmlSerializer,
};
const getTagsOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: BlobTags,
headersMapper: BlobGetTagsHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobGetTagsExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
versionId,
comp18,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifTags,
ifModifiedSince1,
ifUnmodifiedSince1,
ifMatch1,
ifNoneMatch1,
],
isXML: true,
serializer: blob_xmlSerializer,
};
const setTagsOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
204: {
headersMapper: BlobSetTagsHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlobSetTagsExceptionHeaders,
},
},
requestBody: tags,
queryParameters: [
timeoutInSeconds,
versionId,
comp18,
],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
leaseId,
ifTags,
ifModifiedSince1,
ifUnmodifiedSince1,
ifMatch1,
ifNoneMatch1,
transactionalContentMD5,
transactionalContentCrc64,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: blob_xmlSerializer,
};
//# sourceMappingURL=blob.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/pageBlob.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing PageBlob operations. */
class PageBlobImpl {
client;
/**
* Initialize a new instance of the class PageBlob class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* The Create operation creates a new page blob.
* @param contentLength The length of the request.
* @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The
* page blob size must be aligned to a 512-byte boundary.
* @param options The options parameters.
*/
create(contentLength, blobContentLength, options) {
return this.client.sendOperationRequest({ contentLength, blobContentLength, options }, pageBlob_createOperationSpec);
}
/**
* The Upload Pages operation writes a range of pages to a page blob
* @param contentLength The length of the request.
* @param body Initial data
* @param options The options parameters.
*/
uploadPages(contentLength, body, options) {
return this.client.sendOperationRequest({ contentLength, body, options }, uploadPagesOperationSpec);
}
/**
* The Clear Pages operation clears a set of pages from a page blob
* @param contentLength The length of the request.
* @param options The options parameters.
*/
clearPages(contentLength, options) {
return this.client.sendOperationRequest({ contentLength, options }, clearPagesOperationSpec);
}
/**
* The Upload Pages operation writes a range of pages to a page blob where the contents are read from a
* URL
* @param sourceUrl Specify a URL to the copy source.
* @param sourceRange Bytes of source data in the specified range. The length of this range should
* match the ContentLength header and x-ms-range/Range destination range header.
* @param contentLength The length of the request.
* @param range The range of bytes to which the source range would be written. The range should be 512
* aligned and range-end is required.
* @param options The options parameters.
*/
uploadPagesFromURL(sourceUrl, sourceRange, contentLength, range, options) {
return this.client.sendOperationRequest({ sourceUrl, sourceRange, contentLength, range, options }, uploadPagesFromURLOperationSpec);
}
/**
* The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a
* page blob
* @param options The options parameters.
*/
getPageRanges(options) {
return this.client.sendOperationRequest({ options }, getPageRangesOperationSpec);
}
/**
* The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were
* changed between target blob and previous snapshot.
* @param options The options parameters.
*/
getPageRangesDiff(options) {
return this.client.sendOperationRequest({ options }, getPageRangesDiffOperationSpec);
}
/**
* Resize the Blob
* @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The
* page blob size must be aligned to a 512-byte boundary.
* @param options The options parameters.
*/
resize(blobContentLength, options) {
return this.client.sendOperationRequest({ blobContentLength, options }, resizeOperationSpec);
}
/**
* Update the sequence number of the blob
* @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the request.
* This property applies to page blobs only. This property indicates how the service should modify the
* blob's sequence number
* @param options The options parameters.
*/
updateSequenceNumber(sequenceNumberAction, options) {
return this.client.sendOperationRequest({ sequenceNumberAction, options }, updateSequenceNumberOperationSpec);
}
/**
* The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob.
* The snapshot is copied such that only the differential changes between the previously copied
* snapshot are transferred to the destination. The copied snapshots are complete copies of the
* original snapshot and can be read or copied from as usual. This API is supported since REST version
* 2016-05-31.
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
* access signature.
* @param options The options parameters.
*/
copyIncremental(copySource, options) {
return this.client.sendOperationRequest({ copySource, options }, copyIncrementalOperationSpec);
}
}
// Operation Specifications
const pageBlob_xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const pageBlob_createOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: PageBlobCreateHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobCreateExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
encryptionScope,
tier,
blobTagsString,
legalHold1,
blobType,
blobContentLength,
blobSequenceNumber,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const uploadPagesOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: PageBlobUploadPagesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobUploadPagesExceptionHeaders,
},
},
requestBody: body1,
queryParameters: [timeoutInSeconds, comp19],
urlParameters: [url],
headerParameters: [
version,
requestId,
contentLength,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
range,
structuredBodyType,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
transactionalContentMD5,
transactionalContentCrc64,
contentType1,
accept2,
pageWrite,
ifSequenceNumberLessThanOrEqualTo,
ifSequenceNumberLessThan,
ifSequenceNumberEqualTo,
structuredContentLength,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "binary",
serializer: pageBlob_xmlSerializer,
};
const clearPagesOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: PageBlobClearPagesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobClearPagesExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp19],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
range,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
ifSequenceNumberLessThanOrEqualTo,
ifSequenceNumberLessThan,
ifSequenceNumberEqualTo,
pageWrite1,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const uploadPagesFromURLOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: PageBlobUploadPagesFromURLHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobUploadPagesFromURLExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp19],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
sourceContentMD5,
copySourceAuthorization,
fileRequestIntent,
pageWrite,
ifSequenceNumberLessThanOrEqualTo,
ifSequenceNumberLessThan,
ifSequenceNumberEqualTo,
sourceUrl,
sourceRange,
sourceContentCrc64,
range1,
sourceEncryptionKey,
sourceEncryptionKeySha256,
sourceEncryptionAlgorithm,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const getPageRangesOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: PageList,
headersMapper: PageBlobGetPageRangesHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobGetPageRangesExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
marker,
maxPageSize,
snapshot,
comp20,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
range,
ifMatch,
ifNoneMatch,
ifTags,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const getPageRangesDiffOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: PageList,
headersMapper: PageBlobGetPageRangesDiffHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobGetPageRangesDiffExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
marker,
maxPageSize,
snapshot,
comp20,
prevsnapshot,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
range,
ifMatch,
ifNoneMatch,
ifTags,
prevSnapshotUrl,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const resizeOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: PageBlobResizeHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobResizeExceptionHeaders,
},
},
queryParameters: [comp, timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
blobContentLength,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const updateSequenceNumberOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: PageBlobUpdateSequenceNumberHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobUpdateSequenceNumberExceptionHeaders,
},
},
queryParameters: [comp, timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
blobSequenceNumber,
sequenceNumberAction,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
const copyIncrementalOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
202: {
headersMapper: PageBlobCopyIncrementalHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: PageBlobCopyIncrementalExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp21],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
ifTags,
copySource,
],
isXML: true,
serializer: pageBlob_xmlSerializer,
};
//# sourceMappingURL=pageBlob.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/appendBlob.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing AppendBlob operations. */
class AppendBlobImpl {
client;
/**
* Initialize a new instance of the class AppendBlob class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* The Create Append Blob operation creates a new append blob.
* @param contentLength The length of the request.
* @param options The options parameters.
*/
create(contentLength, options) {
return this.client.sendOperationRequest({ contentLength, options }, appendBlob_createOperationSpec);
}
/**
* The Append Block operation commits a new block of data to the end of an existing append blob. The
* Append Block operation is permitted only if the blob was created with x-ms-blob-type set to
* AppendBlob. Append Block is supported only on version 2015-02-21 version or later.
* @param contentLength The length of the request.
* @param body Initial data
* @param options The options parameters.
*/
appendBlock(contentLength, body, options) {
return this.client.sendOperationRequest({ contentLength, body, options }, appendBlockOperationSpec);
}
/**
* The Append Block operation commits a new block of data to the end of an existing append blob where
* the contents are read from a source url. The Append Block operation is permitted only if the blob
* was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version
* 2015-02-21 version or later.
* @param sourceUrl Specify a URL to the copy source.
* @param contentLength The length of the request.
* @param options The options parameters.
*/
appendBlockFromUrl(sourceUrl, contentLength, options) {
return this.client.sendOperationRequest({ sourceUrl, contentLength, options }, appendBlockFromUrlOperationSpec);
}
/**
* The Seal operation seals the Append Blob to make it read-only. Seal is supported only on version
* 2019-12-12 version or later.
* @param options The options parameters.
*/
seal(options) {
return this.client.sendOperationRequest({ options }, sealOperationSpec);
}
}
// Operation Specifications
const appendBlob_xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const appendBlob_createOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: AppendBlobCreateHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: AppendBlobCreateExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
encryptionScope,
blobTagsString,
legalHold1,
blobType1,
],
isXML: true,
serializer: appendBlob_xmlSerializer,
};
const appendBlockOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: AppendBlobAppendBlockHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: AppendBlobAppendBlockExceptionHeaders,
},
},
requestBody: body1,
queryParameters: [timeoutInSeconds, comp22],
urlParameters: [url],
headerParameters: [
version,
requestId,
contentLength,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
structuredBodyType,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
transactionalContentMD5,
transactionalContentCrc64,
contentType1,
accept2,
structuredContentLength,
maxSize,
appendPosition,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "binary",
serializer: appendBlob_xmlSerializer,
};
const appendBlockFromUrlOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: AppendBlobAppendBlockFromUrlHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: AppendBlobAppendBlockFromUrlExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp22],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
encryptionScope,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
sourceContentMD5,
copySourceAuthorization,
fileRequestIntent,
transactionalContentMD5,
sourceUrl,
sourceContentCrc64,
sourceEncryptionKey,
sourceEncryptionKeySha256,
sourceEncryptionAlgorithm,
maxSize,
appendPosition,
sourceRange1,
],
isXML: true,
serializer: appendBlob_xmlSerializer,
};
const sealOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
200: {
headersMapper: AppendBlobSealHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: AppendBlobSealExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds, comp23],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
ifMatch,
ifNoneMatch,
appendPosition,
],
isXML: true,
serializer: appendBlob_xmlSerializer,
};
//# sourceMappingURL=appendBlob.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/blockBlob.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
/** Class containing BlockBlob operations. */
class BlockBlobImpl {
client;
/**
* Initialize a new instance of the class BlockBlob class.
* @param client Reference to the service client
*/
constructor(client) {
this.client = client;
}
/**
* The Upload Block Blob operation updates the content of an existing block blob. Updating an existing
* block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put
* Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a
* partial update of the content of a block blob, use the Put Block List operation.
* @param contentLength The length of the request.
* @param body Initial data
* @param options The options parameters.
*/
upload(contentLength, body, options) {
return this.client.sendOperationRequest({ contentLength, body, options }, uploadOperationSpec);
}
/**
* The Put Blob from URL operation creates a new Block Blob where the contents of the blob are read
* from a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are
* not supported with Put Blob from URL; the content of an existing blob is overwritten with the
* content of the new blob. To perform partial updates to a block blob’s contents using a source URL,
* use the Put Block from URL API in conjunction with Put Block List.
* @param contentLength The length of the request.
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
* access signature.
* @param options The options parameters.
*/
putBlobFromUrl(contentLength, copySource, options) {
return this.client.sendOperationRequest({ contentLength, copySource, options }, putBlobFromUrlOperationSpec);
}
/**
* The Stage Block operation creates a new block to be committed as part of a blob
* @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string
* must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified
* for the blockid parameter must be the same size for each block.
* @param contentLength The length of the request.
* @param body Initial data
* @param options The options parameters.
*/
stageBlock(blockId, contentLength, body, options) {
return this.client.sendOperationRequest({ blockId, contentLength, body, options }, stageBlockOperationSpec);
}
/**
* The Stage Block operation creates a new block to be committed as part of a blob where the contents
* are read from a URL.
* @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string
* must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified
* for the blockid parameter must be the same size for each block.
* @param contentLength The length of the request.
* @param sourceUrl Specify a URL to the copy source.
* @param options The options parameters.
*/
stageBlockFromURL(blockId, contentLength, sourceUrl, options) {
return this.client.sendOperationRequest({ blockId, contentLength, sourceUrl, options }, stageBlockFromURLOperationSpec);
}
/**
* The Commit Block List operation writes a blob by specifying the list of block IDs that make up the
* blob. In order to be written as part of a blob, a block must have been successfully written to the
* server in a prior Put Block operation. You can call Put Block List to update a blob by uploading
* only those blocks that have changed, then committing the new and existing blocks together. You can
* do this by specifying whether to commit a block from the committed block list or from the
* uncommitted block list, or to commit the most recently uploaded version of the block, whichever list
* it may belong to.
* @param blocks Blob Blocks.
* @param options The options parameters.
*/
commitBlockList(blocks, options) {
return this.client.sendOperationRequest({ blocks, options }, commitBlockListOperationSpec);
}
/**
* The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block
* blob
* @param listType Specifies whether to return the list of committed blocks, the list of uncommitted
* blocks, or both lists together.
* @param options The options parameters.
*/
getBlockList(listType, options) {
return this.client.sendOperationRequest({ listType, options }, getBlockListOperationSpec);
}
}
// Operation Specifications
const blockBlob_xmlSerializer = createSerializer(mappers_namespaceObject, /* isXml */ true);
const uploadOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlockBlobUploadHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobUploadExceptionHeaders,
},
},
requestBody: body1,
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
contentLength,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
structuredBodyType,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
encryptionScope,
tier,
blobTagsString,
legalHold1,
transactionalContentMD5,
transactionalContentCrc64,
contentType1,
accept2,
structuredContentLength,
blobType2,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "binary",
serializer: blockBlob_xmlSerializer,
};
const putBlobFromUrlOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlockBlobPutBlobFromUrlHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobPutBlobFromUrlExceptionHeaders,
},
},
queryParameters: [timeoutInSeconds],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
encryptionScope,
tier,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
sourceIfTags,
copySource,
blobTagsString,
sourceContentMD5,
copySourceAuthorization,
copySourceTags,
fileRequestIntent,
transactionalContentMD5,
sourceEncryptionKey,
sourceEncryptionKeySha256,
sourceEncryptionAlgorithm,
blobType2,
copySourceBlobProperties,
],
isXML: true,
serializer: blockBlob_xmlSerializer,
};
const stageBlockOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlockBlobStageBlockHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobStageBlockExceptionHeaders,
},
},
requestBody: body1,
queryParameters: [
timeoutInSeconds,
comp24,
blockId,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
contentLength,
leaseId,
structuredBodyType,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
encryptionScope,
transactionalContentMD5,
transactionalContentCrc64,
contentType1,
accept2,
structuredContentLength,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "binary",
serializer: blockBlob_xmlSerializer,
};
const stageBlockFromURLOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlockBlobStageBlockFromURLHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobStageBlockFromURLExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
comp24,
blockId,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
contentLength,
leaseId,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
encryptionScope,
sourceIfModifiedSince,
sourceIfUnmodifiedSince,
sourceIfMatch,
sourceIfNoneMatch,
sourceContentMD5,
copySourceAuthorization,
fileRequestIntent,
sourceUrl,
sourceContentCrc64,
sourceEncryptionKey,
sourceEncryptionKeySha256,
sourceEncryptionAlgorithm,
sourceRange1,
],
isXML: true,
serializer: blockBlob_xmlSerializer,
};
const commitBlockListOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "PUT",
responses: {
201: {
headersMapper: BlockBlobCommitBlockListHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobCommitBlockListExceptionHeaders,
},
},
requestBody: blocks,
queryParameters: [timeoutInSeconds, comp25],
urlParameters: [url],
headerParameters: [
contentType,
accept,
version,
requestId,
metadata,
leaseId,
ifModifiedSince,
ifUnmodifiedSince,
encryptionKey,
encryptionKeySha256,
encryptionAlgorithm,
ifMatch,
ifNoneMatch,
ifTags,
blobCacheControl,
blobContentType,
blobContentMD5,
blobContentEncoding,
blobContentLanguage,
blobContentDisposition,
immutabilityPolicyExpiry,
immutabilityPolicyMode,
encryptionScope,
tier,
blobTagsString,
legalHold1,
transactionalContentMD5,
transactionalContentCrc64,
],
isXML: true,
contentType: "application/xml; charset=utf-8",
mediaType: "xml",
serializer: blockBlob_xmlSerializer,
};
const getBlockListOperationSpec = {
path: "/{containerName}/{blob}",
httpMethod: "GET",
responses: {
200: {
bodyMapper: BlockList,
headersMapper: BlockBlobGetBlockListHeaders,
},
default: {
bodyMapper: StorageError,
headersMapper: BlockBlobGetBlockListExceptionHeaders,
},
},
queryParameters: [
timeoutInSeconds,
snapshot,
comp25,
listType,
],
urlParameters: [url],
headerParameters: [
version,
requestId,
accept1,
leaseId,
ifTags,
],
isXML: true,
serializer: blockBlob_xmlSerializer,
};
//# sourceMappingURL=blockBlob.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/operations/index.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/storageClient.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
class StorageClient extends ExtendedServiceClient {
url;
version;
/**
* Initializes a new instance of the StorageClient class.
* @param url The URL of the service account, container, or blob that is the target of the desired
* operation.
* @param options The parameter options
*/
constructor(url, options) {
if (url === undefined) {
throw new Error("'url' cannot be null");
}
// Initializing default values for options
if (!options) {
options = {};
}
const defaults = {
requestContentType: "application/json; charset=utf-8",
};
const packageDetails = `azsdk-js-azure-storage-blob/12.33.0`;
const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
: `${packageDetails}`;
const optionsWithDefaults = {
...defaults,
...options,
userAgentOptions: {
userAgentPrefix,
},
endpoint: options.endpoint ?? options.baseUri ?? "{url}",
};
super(optionsWithDefaults);
// Parameter assignments
this.url = url;
// Assigning values to Constant parameters
this.version = options.version || "2026-06-06";
this.service = new ServiceImpl(this);
this.container = new ContainerImpl(this);
this.blob = new BlobImpl(this);
this.pageBlob = new PageBlobImpl(this);
this.appendBlob = new AppendBlobImpl(this);
this.blockBlob = new BlockBlobImpl(this);
}
service;
container;
blob;
pageBlob;
appendBlob;
blockBlob;
}
//# sourceMappingURL=storageClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generated/src/index.js
/*
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*
* Code generated by Microsoft (R) AutoRest Code Generator.
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
*/
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/StorageContextClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* @internal
*/
class StorageContextClient extends StorageClient {
async sendOperationRequest(operationArguments, operationSpec) {
const operationSpecToSend = { ...operationSpec };
if (operationSpecToSend.path === "/{containerName}" ||
operationSpecToSend.path === "/{containerName}/{blob}") {
operationSpecToSend.path = "";
}
return super.sendOperationRequest(operationArguments, operationSpecToSend);
}
}
//# sourceMappingURL=StorageContextClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/utils.common.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const accountNameSuffixes = [
"-secondary-ipv6",
"-secondary-dualstack",
"-ipv6",
"-dualstack",
"-secondary",
];
/**
* Reserved URL characters must be properly escaped for Storage services like Blob or File.
*
* ## URL encode and escape strategy for JS SDKs
*
* When customers pass a URL string into XxxClient classes constructor, the URL string may already be URL encoded or not.
* But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL
* string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XxxClient constructors.
*
* ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK.
*
* This is what legacy V2 SDK does, simple and works for most of the cases.
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
* SDK will encode it to "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
* SDK will encode it to "http://account.blob.core.windows.net/con/b%253A" and send to server. A blob named "b%3A" will be created.
*
* But this strategy will make it not possible to create a blob with "?" in it's name. Because when customer URL string is
* "http://account.blob.core.windows.net/con/blob?name", the "?name" will be treated as URL paramter instead of blob name.
* If customer URL string is "http://account.blob.core.windows.net/con/blob%3Fname", a blob named "blob%3Fname" will be created.
* V2 SDK doesn't have this issue because it doesn't allow customer pass in a full URL, it accepts a separate blob name and encodeURIComponent for it.
* We cannot accept a SDK cannot create a blob name with "?". So we implement strategy two:
*
* ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters.
*
* This is what V10 Blob Go SDK does. It accepts a URL type in Go, and call url.EscapedPath() to escape the special chars unescaped.
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
* SDK will escape ":" like "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%3A" to server. A blob named "b:" will be created.
* - When customer URL string is "http://account.blob.core.windows.net/con/b%253A",
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%253A" to server. A blob named "b%3A" will be created.
*
* This strategy gives us flexibility to create with any special characters. But "%" will be treated as a special characters, if the URL string
* is not encoded, there shouldn't a "%" in the URL string, otherwise the URL is not a valid URL.
* If customer needs to create a blob with "%" in it's blob name, use "%25" instead of "%". Just like above 3rd sample.
* And following URL strings are invalid:
* - "http://account.blob.core.windows.net/con/b%"
* - "http://account.blob.core.windows.net/con/b%2"
* - "http://account.blob.core.windows.net/con/b%G"
*
* Another special character is "?", use "%2F" to represent a blob name with "?" in a URL string.
*
* ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `containerClient.getBlobClient(blobName)`
*
* We will apply strategy one, and call encodeURIComponent for these parameters like blobName. Because what customers passes in is a plain name instead of a URL.
*
* @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
* @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata
*
* @param url -
*/
function utils_common_escapeURLPath(url) {
const urlParsed = new URL(url);
let path = urlParsed.pathname;
path = path || "/";
path = utils_utils_common_escape(path);
urlParsed.pathname = path;
return urlParsed.toString();
}
function utils_common_getProxyUriFromDevConnString(connectionString) {
// Development Connection String
// https://learn.microsoft.com/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key
let proxyUri = "";
if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) {
// CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri
const matchCredentials = connectionString.split(";");
for (const element of matchCredentials) {
if (element.trim().startsWith("DevelopmentStorageProxyUri=")) {
proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1];
}
}
}
return proxyUri;
}
function utils_common_getValueInConnString(connectionString, argument) {
const elements = connectionString.split(";");
for (const element of elements) {
if (element.trim().startsWith(argument)) {
return element.trim().match(argument + "=(.*)")[1];
}
}
return "";
}
/**
* Extracts the parts of an Azure Storage account connection string.
*
* @param connectionString - Connection string.
* @returns String key value pairs of the storage account's url and credentials.
*/
function utils_common_extractConnectionStringParts(connectionString) {
let proxyUri = "";
if (connectionString.startsWith("UseDevelopmentStorage=true")) {
// Development connection string
proxyUri = utils_common_getProxyUriFromDevConnString(connectionString);
connectionString = utils_constants_DevelopmentConnectionString;
}
// Matching BlobEndpoint in the Account connection string
let blobEndpoint = utils_common_getValueInConnString(connectionString, "BlobEndpoint");
// Slicing off '/' at the end if exists
// (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end)
blobEndpoint = blobEndpoint.endsWith("/") ? blobEndpoint.slice(0, -1) : blobEndpoint;
if (connectionString.search("DefaultEndpointsProtocol=") !== -1 &&
connectionString.search("AccountKey=") !== -1) {
// Account connection string
let defaultEndpointsProtocol = "";
let accountName = "";
let accountKey = Buffer.from("accountKey", "base64");
let endpointSuffix = "";
// Get account name and key
accountName = utils_common_getValueInConnString(connectionString, "AccountName");
accountKey = Buffer.from(utils_common_getValueInConnString(connectionString, "AccountKey"), "base64");
if (!blobEndpoint) {
// BlobEndpoint is not present in the Account connection string
// Can be obtained from `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`
defaultEndpointsProtocol = utils_common_getValueInConnString(connectionString, "DefaultEndpointsProtocol");
const protocol = defaultEndpointsProtocol.toLowerCase();
if (protocol !== "https" && protocol !== "http") {
throw new Error("Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'");
}
endpointSuffix = utils_common_getValueInConnString(connectionString, "EndpointSuffix");
if (!endpointSuffix) {
throw new Error("Invalid EndpointSuffix in the provided Connection String");
}
blobEndpoint = `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
}
if (!accountName) {
throw new Error("Invalid AccountName in the provided Connection String");
}
else if (accountKey.length === 0) {
throw new Error("Invalid AccountKey in the provided Connection String");
}
return {
kind: "AccountConnString",
url: blobEndpoint,
accountName,
accountKey,
proxyUri,
};
}
else {
// SAS connection string
let accountSas = utils_common_getValueInConnString(connectionString, "SharedAccessSignature");
let accountName = utils_common_getValueInConnString(connectionString, "AccountName");
// if accountName is empty, try to read it from BlobEndpoint
if (!accountName) {
accountName = utils_common_getAccountNameFromUrl(blobEndpoint);
}
if (!blobEndpoint) {
throw new Error("Invalid BlobEndpoint in the provided SAS Connection String");
}
else if (!accountSas) {
throw new Error("Invalid SharedAccessSignature in the provided SAS Connection String");
}
// client constructors assume accountSas does *not* start with ?
if (accountSas.startsWith("?")) {
accountSas = accountSas.substring(1);
}
return { kind: "SASConnString", url: blobEndpoint, accountName, accountSas };
}
}
/**
* Internal escape method implemented Strategy Two mentioned in escapeURL() description.
*
* @param text -
*/
function utils_utils_common_escape(text) {
return encodeURIComponent(text)
.replace(/%2F/g, "/") // Don't escape for "/"
.replace(/'/g, "%27") // Escape for "'"
.replace(/\+/g, "%20")
.replace(/%25/g, "%"); // Revert encoded "%"
}
/**
* Append a string to URL path. Will remove duplicated "/" in front of the string
* when URL path ends with a "/".
*
* @param url - Source URL string
* @param name - String to be appended to URL
* @returns An updated URL string
*/
function utils_common_appendToURLPath(url, name) {
const urlParsed = new URL(url);
let path = urlParsed.pathname;
path = path ? (path.endsWith("/") ? `${path}${name}` : `${path}/${name}`) : name;
urlParsed.pathname = path;
return urlParsed.toString();
}
/**
* Set URL parameter name and value. If name exists in URL parameters, old value
* will be replaced by name key. If not provide value, the parameter will be deleted.
*
* @param url - Source URL string
* @param name - Parameter name
* @param value - Parameter value
* @returns An updated URL string
*/
function utils_common_setURLParameter(url, name, value) {
const urlParsed = new URL(url);
const encodedName = encodeURIComponent(name);
const encodedValue = value ? encodeURIComponent(value) : undefined;
// mutating searchParams will change the encoding, so we have to do this ourselves
const searchString = urlParsed.search === "" ? "?" : urlParsed.search;
const searchPieces = [];
for (const pair of searchString.slice(1).split("&")) {
if (pair) {
const [key] = pair.split("=", 2);
if (key !== encodedName) {
searchPieces.push(pair);
}
}
}
if (encodedValue) {
searchPieces.push(`${encodedName}=${encodedValue}`);
}
urlParsed.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
return urlParsed.toString();
}
/**
* Get URL parameter by name.
*
* @param url -
* @param name -
*/
function utils_common_getURLParameter(url, name) {
const urlParsed = new URL(url);
return urlParsed.searchParams.get(name) ?? undefined;
}
/**
* Set URL host.
*
* @param url - Source URL string
* @param host - New host string
* @returns An updated URL string
*/
function utils_common_setURLHost(url, host) {
const urlParsed = new URL(url);
urlParsed.hostname = host;
return urlParsed.toString();
}
/**
* Get URL path from an URL string.
*
* @param url - Source URL string
*/
function utils_common_getURLPath(url) {
try {
const urlParsed = new URL(url);
return urlParsed.pathname;
}
catch (e) {
return undefined;
}
}
/**
* Get URL scheme from an URL string.
*
* @param url - Source URL string
*/
function utils_common_getURLScheme(url) {
try {
const urlParsed = new URL(url);
return urlParsed.protocol.endsWith(":") ? urlParsed.protocol.slice(0, -1) : urlParsed.protocol;
}
catch (e) {
return undefined;
}
}
/**
* Get URL path and query from an URL string.
*
* @param url - Source URL string
*/
function utils_common_getURLPathAndQuery(url) {
const urlParsed = new URL(url);
const pathString = urlParsed.pathname;
if (!pathString) {
throw new RangeError("Invalid url without valid path.");
}
let queryString = urlParsed.search || "";
queryString = queryString.trim();
if (queryString !== "") {
queryString = queryString.startsWith("?") ? queryString : `?${queryString}`; // Ensure query string start with '?'
}
return `${pathString}${queryString}`;
}
/**
* Get URL query key value pairs from an URL string.
*
* @param url -
*/
function utils_common_getURLQueries(url) {
let queryString = new URL(url).search;
if (!queryString) {
return {};
}
queryString = queryString.trim();
queryString = queryString.startsWith("?") ? queryString.substring(1) : queryString;
let querySubStrings = queryString.split("&");
querySubStrings = querySubStrings.filter((value) => {
const indexOfEqual = value.indexOf("=");
const lastIndexOfEqual = value.lastIndexOf("=");
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
});
const queries = {};
for (const querySubString of querySubStrings) {
const splitResults = querySubString.split("=");
const key = splitResults[0];
const value = splitResults[1];
queries[key] = value;
}
return queries;
}
/**
* Append a string to URL query.
*
* @param url - Source URL string.
* @param queryParts - String to be appended to the URL query.
* @returns An updated URL string.
*/
function utils_common_appendToURLQuery(url, queryParts) {
const urlParsed = new URL(url);
let query = urlParsed.search;
if (query) {
query += "&" + queryParts;
}
else {
query = queryParts;
}
urlParsed.search = query;
return urlParsed.toString();
}
/**
* Rounds a date off to seconds.
*
* @param date -
* @param withMilliseconds - If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;
* If false, YYYY-MM-DDThh:mm:ssZ will be returned.
* @returns Date string in ISO8061 format, with or without 7 milliseconds component
*/
function utils_common_truncatedISO8061Date(date, withMilliseconds = true) {
// Date.toISOString() will return like "2018-10-29T06:34:36.139Z"
const dateString = date.toISOString();
return withMilliseconds
? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
: dateString.substring(0, dateString.length - 5) + "Z";
}
/**
* Base64 encode.
*
* @param content -
*/
function base64encode(content) {
return !esm_isNodeLike ? btoa(content) : Buffer.from(content).toString("base64");
}
/**
* Base64 decode.
*
* @param encodedString -
*/
function base64decode(encodedString) {
return !isNodeLike ? atob(encodedString) : Buffer.from(encodedString, "base64").toString();
}
/**
* Generate a 64 bytes base64 block ID string.
*
* @param blockIndex -
*/
function utils_common_generateBlockID(blockIDPrefix, blockIndex) {
// To generate a 64 bytes base64 string, source string should be 48
const maxSourceStringLength = 48;
// A blob can have a maximum of 100,000 uncommitted blocks at any given time
const maxBlockIndexLength = 6;
const maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;
if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {
blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);
}
const res = blockIDPrefix +
utils_common_padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0");
return base64encode(res);
}
/**
* Delay specified time interval.
*
* @param timeInMs -
* @param aborter -
* @param abortError -
*/
async function utils_utils_common_delay(timeInMs, aborter, abortError) {
return new Promise((resolve, reject) => {
/* eslint-disable-next-line prefer-const */
let timeout;
const abortHandler = () => {
if (timeout !== undefined) {
clearTimeout(timeout);
}
reject(abortError);
};
const resolveHandler = () => {
if (aborter !== undefined) {
aborter.removeEventListener("abort", abortHandler);
}
resolve();
};
timeout = setTimeout(resolveHandler, timeInMs);
if (aborter !== undefined) {
aborter.addEventListener("abort", abortHandler);
}
});
}
/**
* String.prototype.padStart()
*
* @param currentString -
* @param targetLength -
* @param padString -
*/
function utils_common_padStart(currentString, targetLength, padString = " ") {
// @ts-expect-error: TS doesn't know this code needs to run downlevel sometimes
if (String.prototype.padStart) {
return currentString.padStart(targetLength, padString);
}
padString = padString || " ";
if (currentString.length > targetLength) {
return currentString;
}
else {
targetLength = targetLength - currentString.length;
if (targetLength > padString.length) {
padString += padString.repeat(targetLength / padString.length);
}
return padString.slice(0, targetLength) + currentString;
}
}
function utils_common_sanitizeURL(url) {
let safeURL = url;
if (utils_common_getURLParameter(safeURL, URLConstants.Parameters.SIGNATURE)) {
safeURL = utils_common_setURLParameter(safeURL, URLConstants.Parameters.SIGNATURE, "*****");
}
return safeURL;
}
function utils_common_sanitizeHeaders(originalHeader) {
const headers = createHttpHeaders();
for (const [name, value] of originalHeader) {
if (name.toLowerCase() === HeaderConstants.AUTHORIZATION.toLowerCase()) {
headers.set(name, "*****");
}
else if (name.toLowerCase() === HeaderConstants.X_MS_COPY_SOURCE) {
headers.set(name, utils_common_sanitizeURL(value));
}
else {
headers.set(name, value);
}
}
return headers;
}
/**
* If two strings are equal when compared case insensitive.
*
* @param str1 -
* @param str2 -
*/
function utils_common_iEqual(str1, str2) {
return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();
}
/**
* Extracts account name from the url
* @param url - url to extract the account name from
* @returns with the account name
*/
function utils_common_getAccountNameFromUrl(url) {
const parsedUrl = new URL(url);
let accountName;
try {
if (parsedUrl.hostname.split(".")[1] === "blob") {
// `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
// `${defaultEndpointsProtocol}://${accountName}-suffix.blob.${endpointSuffix}`;
accountName = parsedUrl.hostname.split(".")[0];
for (let i = 0; i < accountNameSuffixes.length; ++i) {
const suffix = accountNameSuffixes[i];
if (accountName.endsWith(suffix)) {
accountName = accountName.substring(0, accountName.length - suffix.length);
break;
}
}
}
else if (utils_common_isIpEndpointStyle(parsedUrl)) {
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/
// .getPath() -> /devstoreaccount1/
accountName = parsedUrl.pathname.split("/")[1];
}
else {
// Custom domain case: "https://customdomain.com/containername/blob".
accountName = "";
}
return accountName;
}
catch (error) {
throw new Error("Unable to extract accountName with provided information.");
}
}
function utils_common_isIpEndpointStyle(parsedUrl) {
const host = parsedUrl.host;
// Case 1: Ipv6, use a broad regex to find out candidates whose host contains two ':'.
// Case 2: localhost(:port) or host.docker.internal, use broad regex to match port part.
// Case 3: Ipv4, use broad regex which just check if host contains Ipv4.
// For valid host please refer to https://man7.org/linux/man-pages/man7/hostname.7.html.
return (/^.*:.*:.*$|^(localhost|host.docker.internal)(:[0-9]+)?$|^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}(:[0-9]+)?$/.test(host) ||
(Boolean(parsedUrl.port) && utils_constants_PathStylePorts.includes(parsedUrl.port)));
}
/**
* Convert Tags to encoded string.
*
* @param tags -
*/
function toBlobTagsString(tags) {
if (tags === undefined) {
return undefined;
}
const tagPairs = [];
for (const key in tags) {
if (Object.prototype.hasOwnProperty.call(tags, key)) {
const value = tags[key];
tagPairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
}
}
return tagPairs.join("&");
}
/**
* Convert Tags type to BlobTags.
*
* @param tags -
*/
function toBlobTags(tags) {
if (tags === undefined) {
return undefined;
}
const res = {
blobTagSet: [],
};
for (const key in tags) {
if (Object.prototype.hasOwnProperty.call(tags, key)) {
const value = tags[key];
res.blobTagSet.push({
key,
value,
});
}
}
return res;
}
/**
* Covert BlobTags to Tags type.
*
* @param tags -
*/
function toTags(tags) {
if (tags === undefined) {
return undefined;
}
const res = {};
for (const blobTag of tags.blobTagSet) {
res[blobTag.key] = blobTag.value;
}
return res;
}
/**
* Convert BlobQueryTextConfiguration to QuerySerialization type.
*
* @param textConfiguration -
*/
function toQuerySerialization(textConfiguration) {
if (textConfiguration === undefined) {
return undefined;
}
switch (textConfiguration.kind) {
case "csv":
return {
format: {
type: "delimited",
delimitedTextConfiguration: {
columnSeparator: textConfiguration.columnSeparator || ",",
fieldQuote: textConfiguration.fieldQuote || "",
recordSeparator: textConfiguration.recordSeparator,
escapeChar: textConfiguration.escapeCharacter || "",
headersPresent: textConfiguration.hasHeaders || false,
},
},
};
case "json":
return {
format: {
type: "json",
jsonTextConfiguration: {
recordSeparator: textConfiguration.recordSeparator,
},
},
};
case "arrow":
return {
format: {
type: "arrow",
arrowConfiguration: {
schema: textConfiguration.schema,
},
},
};
case "parquet":
return {
format: {
type: "parquet",
},
};
default:
throw Error("Invalid BlobQueryTextConfiguration.");
}
}
function parseObjectReplicationRecord(objectReplicationRecord) {
if (!objectReplicationRecord) {
return undefined;
}
if ("policy-id" in objectReplicationRecord) {
// If the dictionary contains a key with policy id, we are not required to do any parsing since
// the policy id should already be stored in the ObjectReplicationDestinationPolicyId.
return undefined;
}
const orProperties = [];
for (const key in objectReplicationRecord) {
const ids = key.split("_");
const policyPrefix = "or-";
if (ids[0].startsWith(policyPrefix)) {
ids[0] = ids[0].substring(policyPrefix.length);
}
const rule = {
ruleId: ids[1],
replicationStatus: objectReplicationRecord[key],
};
const policyIndex = orProperties.findIndex((policy) => policy.policyId === ids[0]);
if (policyIndex > -1) {
orProperties[policyIndex].rules.push(rule);
}
else {
orProperties.push({
policyId: ids[0],
rules: [rule],
});
}
}
return orProperties;
}
/**
* Attach a TokenCredential to an object.
*
* @param thing -
* @param credential -
*/
function utils_common_attachCredential(thing, credential) {
thing.credential = credential;
return thing;
}
function utils_common_httpAuthorizationToString(httpAuthorization) {
return httpAuthorization ? httpAuthorization.scheme + " " + httpAuthorization.value : undefined;
}
function BlobNameToString(name) {
if (name.encoded) {
return decodeURIComponent(name.content);
}
else {
return name.content;
}
}
function ConvertInternalResponseOfListBlobFlat(internalResponse) {
return {
...internalResponse,
segment: {
blobItems: internalResponse.segment.blobItems.map((blobItemInteral) => {
const blobItem = {
...blobItemInteral,
name: BlobNameToString(blobItemInteral.name),
};
return blobItem;
}),
},
};
}
function ConvertInternalResponseOfListBlobHierarchy(internalResponse) {
return {
...internalResponse,
segment: {
blobPrefixes: internalResponse.segment.blobPrefixes?.map((blobPrefixInternal) => {
const blobPrefix = {
...blobPrefixInternal,
name: BlobNameToString(blobPrefixInternal.name),
};
return blobPrefix;
}),
blobItems: internalResponse.segment.blobItems.map((blobItemInteral) => {
const blobItem = {
...blobItemInteral,
name: BlobNameToString(blobItemInteral.name),
};
return blobItem;
}),
},
};
}
function* ExtractPageRangeInfoItems(getPageRangesSegment) {
let pageRange = [];
let clearRange = [];
if (getPageRangesSegment.pageRange)
pageRange = getPageRangesSegment.pageRange;
if (getPageRangesSegment.clearRange)
clearRange = getPageRangesSegment.clearRange;
let pageRangeIndex = 0;
let clearRangeIndex = 0;
while (pageRangeIndex < pageRange.length && clearRangeIndex < clearRange.length) {
if (pageRange[pageRangeIndex].start < clearRange[clearRangeIndex].start) {
yield {
start: pageRange[pageRangeIndex].start,
end: pageRange[pageRangeIndex].end,
isClear: false,
};
++pageRangeIndex;
}
else {
yield {
start: clearRange[clearRangeIndex].start,
end: clearRange[clearRangeIndex].end,
isClear: true,
};
++clearRangeIndex;
}
}
for (; pageRangeIndex < pageRange.length; ++pageRangeIndex) {
yield {
start: pageRange[pageRangeIndex].start,
end: pageRange[pageRangeIndex].end,
isClear: false,
};
}
for (; clearRangeIndex < clearRange.length; ++clearRangeIndex) {
yield {
start: clearRange[clearRangeIndex].start,
end: clearRange[clearRangeIndex].end,
isClear: true,
};
}
}
/**
* Escape the blobName but keep path separator ('/').
*/
function utils_common_EscapePath(blobName) {
const split = blobName.split("/");
for (let i = 0; i < split.length; i++) {
split[i] = encodeURIComponent(split[i]);
}
return split.join("/");
}
/**
* A typesafe helper for ensuring that a given response object has
* the original _response attached.
* @param response - A response object from calling a client operation
* @returns The same object, but with known _response property
*/
function utils_common_assertResponse(response) {
if (`_response` in response) {
return response;
}
throw new TypeError(`Unexpected response object ${response}`);
}
async function setUploadChecksumParameters(body, contentLength, parameters, uploadOptions, configContentChecksumAlgorithm) {
let contentChecksumAlgorithm = uploadOptions.contentChecksumAlgorithm ?? configContentChecksumAlgorithm;
if (contentChecksumAlgorithm === undefined) {
contentChecksumAlgorithm = "Customized";
}
if (contentChecksumAlgorithm === "Auto") {
contentChecksumAlgorithm = "StorageCrc64";
}
let bodyInfo = undefined;
if (contentChecksumAlgorithm === "Customized") {
parameters.transactionalContentMD5 = uploadOptions.transactionalContentMD5;
parameters.transactionalContentCrc64 = uploadOptions.transactionalContentCrc64;
}
else if (contentChecksumAlgorithm === "StorageCrc64") {
await StorageCRC64Calculator.init();
bodyInfo = await structuredMessageEncoding(body, contentLength);
parameters.structuredBodyType = "XSM/1.0; properties=crc64";
parameters.structuredContentLength = contentLength;
}
return {
body: contentChecksumAlgorithm === "StorageCrc64" ? bodyInfo.body : body,
contentLength: contentChecksumAlgorithm === "StorageCrc64" ? bodyInfo.encodedContentLength : contentLength,
contentChecksumAlgorithm: contentChecksumAlgorithm,
};
}
//# sourceMappingURL=utils.common.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/StorageClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient}
* and etc.
*/
class StorageClient_StorageClient {
/**
* Encoded URL string value.
*/
url;
accountName;
/**
* Request policy pipeline.
*
* @internal
*/
pipeline;
/**
* Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
*/
credential;
/**
* StorageClient is a reference to protocol layer operations entry, which is
* generated by AutoRest generator.
*/
storageClientContext;
/**
*/
isHttps;
/**
* Creates an instance of StorageClient.
* @param url - url to resource
* @param pipeline - request policy pipeline.
*/
constructor(url, pipeline) {
// URL should be encoded and only once, protocol layer shouldn't encode URL again
this.url = utils_common_escapeURLPath(url);
this.accountName = utils_common_getAccountNameFromUrl(url);
this.pipeline = pipeline;
this.storageClientContext = new StorageContextClient(this.url, getCoreClientOptions(pipeline));
this.isHttps = utils_common_iEqual(utils_common_getURLScheme(this.url) || "", "https");
this.credential = getCredentialFromPipeline(pipeline);
// Override protocol layer's default content-type
const storageClientContext = this.storageClientContext;
storageClientContext.requestContentType = undefined;
}
}
//# sourceMappingURL=StorageClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/tracing.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a span using the global tracer.
* @internal
*/
const tracingClient = createTracingClient({
packageName: "@azure/storage-blob",
packageVersion: esm_utils_constants_SDK_VERSION,
namespace: "Microsoft.Storage",
});
//# sourceMappingURL=tracing.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/BlobSASPermissions.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a blob. Setting
* a value to true means that any SAS which uses these permissions will grant permissions for that operation. Once all
* the values are set, this should be serialized with toString and set as the permissions field on a
* {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
* the order of the permissions is particular and this class guarantees correctness.
*/
class BlobSASPermissions {
/**
* Creates a {@link BlobSASPermissions} from the specified permissions string. This method will throw an
* Error if it encounters a character that does not correspond to a valid permission.
*
* @param permissions -
*/
static parse(permissions) {
const blobSASPermissions = new BlobSASPermissions();
for (const char of permissions) {
switch (char) {
case "r":
blobSASPermissions.read = true;
break;
case "a":
blobSASPermissions.add = true;
break;
case "c":
blobSASPermissions.create = true;
break;
case "w":
blobSASPermissions.write = true;
break;
case "d":
blobSASPermissions.delete = true;
break;
case "x":
blobSASPermissions.deleteVersion = true;
break;
case "t":
blobSASPermissions.tag = true;
break;
case "m":
blobSASPermissions.move = true;
break;
case "e":
blobSASPermissions.execute = true;
break;
case "i":
blobSASPermissions.setImmutabilityPolicy = true;
break;
case "y":
blobSASPermissions.permanentDelete = true;
break;
default:
throw new RangeError(`Invalid permission: ${char}`);
}
}
return blobSASPermissions;
}
/**
* Creates a {@link BlobSASPermissions} from a raw object which contains same keys as it
* and boolean values for them.
*
* @param permissionLike -
*/
static from(permissionLike) {
const blobSASPermissions = new BlobSASPermissions();
if (permissionLike.read) {
blobSASPermissions.read = true;
}
if (permissionLike.add) {
blobSASPermissions.add = true;
}
if (permissionLike.create) {
blobSASPermissions.create = true;
}
if (permissionLike.write) {
blobSASPermissions.write = true;
}
if (permissionLike.delete) {
blobSASPermissions.delete = true;
}
if (permissionLike.deleteVersion) {
blobSASPermissions.deleteVersion = true;
}
if (permissionLike.tag) {
blobSASPermissions.tag = true;
}
if (permissionLike.move) {
blobSASPermissions.move = true;
}
if (permissionLike.execute) {
blobSASPermissions.execute = true;
}
if (permissionLike.setImmutabilityPolicy) {
blobSASPermissions.setImmutabilityPolicy = true;
}
if (permissionLike.permanentDelete) {
blobSASPermissions.permanentDelete = true;
}
return blobSASPermissions;
}
/**
* Specifies Read access granted.
*/
read = false;
/**
* Specifies Add access granted.
*/
add = false;
/**
* Specifies Create access granted.
*/
create = false;
/**
* Specifies Write access granted.
*/
write = false;
/**
* Specifies Delete access granted.
*/
delete = false;
/**
* Specifies Delete version access granted.
*/
deleteVersion = false;
/**
* Specfies Tag access granted.
*/
tag = false;
/**
* Specifies Move access granted.
*/
move = false;
/**
* Specifies Execute access granted.
*/
execute = false;
/**
* Specifies SetImmutabilityPolicy access granted.
*/
setImmutabilityPolicy = false;
/**
* Specifies that Permanent Delete is permitted.
*/
permanentDelete = false;
/**
* Converts the given permissions to a string. Using this method will guarantee the permissions are in an
* order accepted by the service.
*
* @returns A string which represents the BlobSASPermissions
*/
toString() {
const permissions = [];
if (this.read) {
permissions.push("r");
}
if (this.add) {
permissions.push("a");
}
if (this.create) {
permissions.push("c");
}
if (this.write) {
permissions.push("w");
}
if (this.delete) {
permissions.push("d");
}
if (this.deleteVersion) {
permissions.push("x");
}
if (this.tag) {
permissions.push("t");
}
if (this.move) {
permissions.push("m");
}
if (this.execute) {
permissions.push("e");
}
if (this.setImmutabilityPolicy) {
permissions.push("i");
}
if (this.permanentDelete) {
permissions.push("y");
}
return permissions.join("");
}
}
//# sourceMappingURL=BlobSASPermissions.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/ContainerSASPermissions.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container.
* Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation.
* Once all the values are set, this should be serialized with toString and set as the permissions field on a
* {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
* the order of the permissions is particular and this class guarantees correctness.
*/
class ContainerSASPermissions {
/**
* Creates an {@link ContainerSASPermissions} from the specified permissions string. This method will throw an
* Error if it encounters a character that does not correspond to a valid permission.
*
* @param permissions -
*/
static parse(permissions) {
const containerSASPermissions = new ContainerSASPermissions();
for (const char of permissions) {
switch (char) {
case "r":
containerSASPermissions.read = true;
break;
case "a":
containerSASPermissions.add = true;
break;
case "c":
containerSASPermissions.create = true;
break;
case "w":
containerSASPermissions.write = true;
break;
case "d":
containerSASPermissions.delete = true;
break;
case "l":
containerSASPermissions.list = true;
break;
case "t":
containerSASPermissions.tag = true;
break;
case "x":
containerSASPermissions.deleteVersion = true;
break;
case "m":
containerSASPermissions.move = true;
break;
case "e":
containerSASPermissions.execute = true;
break;
case "i":
containerSASPermissions.setImmutabilityPolicy = true;
break;
case "y":
containerSASPermissions.permanentDelete = true;
break;
case "f":
containerSASPermissions.filterByTags = true;
break;
default:
throw new RangeError(`Invalid permission ${char}`);
}
}
return containerSASPermissions;
}
/**
* Creates a {@link ContainerSASPermissions} from a raw object which contains same keys as it
* and boolean values for them.
*
* @param permissionLike -
*/
static from(permissionLike) {
const containerSASPermissions = new ContainerSASPermissions();
if (permissionLike.read) {
containerSASPermissions.read = true;
}
if (permissionLike.add) {
containerSASPermissions.add = true;
}
if (permissionLike.create) {
containerSASPermissions.create = true;
}
if (permissionLike.write) {
containerSASPermissions.write = true;
}
if (permissionLike.delete) {
containerSASPermissions.delete = true;
}
if (permissionLike.list) {
containerSASPermissions.list = true;
}
if (permissionLike.deleteVersion) {
containerSASPermissions.deleteVersion = true;
}
if (permissionLike.tag) {
containerSASPermissions.tag = true;
}
if (permissionLike.move) {
containerSASPermissions.move = true;
}
if (permissionLike.execute) {
containerSASPermissions.execute = true;
}
if (permissionLike.setImmutabilityPolicy) {
containerSASPermissions.setImmutabilityPolicy = true;
}
if (permissionLike.permanentDelete) {
containerSASPermissions.permanentDelete = true;
}
if (permissionLike.filterByTags) {
containerSASPermissions.filterByTags = true;
}
return containerSASPermissions;
}
/**
* Specifies Read access granted.
*/
read = false;
/**
* Specifies Add access granted.
*/
add = false;
/**
* Specifies Create access granted.
*/
create = false;
/**
* Specifies Write access granted.
*/
write = false;
/**
* Specifies Delete access granted.
*/
delete = false;
/**
* Specifies Delete version access granted.
*/
deleteVersion = false;
/**
* Specifies List access granted.
*/
list = false;
/**
* Specfies Tag access granted.
*/
tag = false;
/**
* Specifies Move access granted.
*/
move = false;
/**
* Specifies Execute access granted.
*/
execute = false;
/**
* Specifies SetImmutabilityPolicy access granted.
*/
setImmutabilityPolicy = false;
/**
* Specifies that Permanent Delete is permitted.
*/
permanentDelete = false;
/**
* Specifies that Filter Blobs by Tags is permitted.
*/
filterByTags = false;
/**
* Converts the given permissions to a string. Using this method will guarantee the permissions are in an
* order accepted by the service.
*
* The order of the characters should be as specified here to ensure correctness.
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
*/
toString() {
const permissions = [];
if (this.read) {
permissions.push("r");
}
if (this.add) {
permissions.push("a");
}
if (this.create) {
permissions.push("c");
}
if (this.write) {
permissions.push("w");
}
if (this.delete) {
permissions.push("d");
}
if (this.deleteVersion) {
permissions.push("x");
}
if (this.list) {
permissions.push("l");
}
if (this.tag) {
permissions.push("t");
}
if (this.move) {
permissions.push("m");
}
if (this.execute) {
permissions.push("e");
}
if (this.setImmutabilityPolicy) {
permissions.push("i");
}
if (this.permanentDelete) {
permissions.push("y");
}
if (this.filterByTags) {
permissions.push("f");
}
return permissions.join("");
}
}
//# sourceMappingURL=ContainerSASPermissions.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/SasIPRange.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Generate SasIPRange format string. For example:
*
* "8.8.8.8" or "1.1.1.1-255.255.255.255"
*
* @param ipRange -
*/
function ipRangeToString(ipRange) {
return ipRange.end ? `${ipRange.start}-${ipRange.end}` : ipRange.start;
}
//# sourceMappingURL=SasIPRange.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/SASQueryParameters.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Protocols for generated SAS.
*/
var SASProtocol;
(function (SASProtocol) {
/**
* Protocol that allows HTTPS only
*/
SASProtocol["Https"] = "https";
/**
* Protocol that allows both HTTPS and HTTP
*/
SASProtocol["HttpsAndHttp"] = "https,http";
})(SASProtocol || (SASProtocol = {}));
/**
* Represents the components that make up an Azure Storage SAS' query parameters. This type is not constructed directly
* by the user; it is only generated by the {@link AccountSASSignatureValues} and {@link BlobSASSignatureValues}
* types. Once generated, it can be encoded into a {@link String} and appended to a URL directly (though caution should
* be taken here in case there are existing query parameters, which might affect the appropriate means of appending
* these query parameters).
*
* NOTE: Instances of this class are immutable.
*/
class SASQueryParameters {
/**
* The storage API version.
*/
version;
/**
* Optional. The allowed HTTP protocol(s).
*/
protocol;
/**
* Optional. The start time for this SAS token.
*/
startsOn;
/**
* Optional only when identifier is provided. The expiry time for this SAS token.
*/
expiresOn;
/**
* Optional only when identifier is provided.
* Please refer to {@link AccountSASPermissions}, {@link BlobSASPermissions}, or {@link ContainerSASPermissions} for
* more details.
*/
permissions;
/**
* Optional. The storage services being accessed (only for Account SAS). Please refer to {@link AccountSASServices}
* for more details.
*/
services;
/**
* Optional. The storage resource types being accessed (only for Account SAS). Please refer to
* {@link AccountSASResourceTypes} for more details.
*/
resourceTypes;
/**
* Optional. The signed identifier (only for {@link BlobSASSignatureValues}).
*
* @see https://learn.microsoft.com/rest/api/storageservices/establishing-a-stored-access-policy
*/
identifier;
/**
* Optional. Beginning in version 2025-07-05, this value specifies the Entra ID of the user would is authorized to
* use the resulting SAS URL. The resulting SAS URL must be used in conjunction with an Entra ID token that has been
* issued to the user specified in this value.
*/
delegatedUserObjectId;
/**
* Optional. Encryption scope to use when sending requests authorized with this SAS URI.
*/
encryptionScope;
/**
* Optional. Specifies which resources are accessible via the SAS (only for {@link BlobSASSignatureValues}).
* @see https://learn.microsoft.com/rest/api/storageservices/create-service-sas#specifying-the-signed-resource-blob-service-only
*/
resource;
/**
* The signature for the SAS token.
*/
signature;
/**
* Value for cache-control header in Blob/File Service SAS.
*/
cacheControl;
/**
* Value for content-disposition header in Blob/File Service SAS.
*/
contentDisposition;
/**
* Value for content-encoding header in Blob/File Service SAS.
*/
contentEncoding;
/**
* Value for content-length header in Blob/File Service SAS.
*/
contentLanguage;
/**
* Value for content-type header in Blob/File Service SAS.
*/
contentType;
/**
* Inner value of getter ipRange.
*/
ipRangeInner;
/**
* The Azure Active Directory object ID in GUID format.
* Property of user delegation key.
*/
signedOid;
/**
* The Azure Active Directory tenant ID in GUID format.
* Property of user delegation key.
*/
signedTenantId;
/**
* The date-time the key is active.
* Property of user delegation key.
*/
signedStartsOn;
/**
* The date-time the key expires.
* Property of user delegation key.
*/
signedExpiresOn;
/**
* Abbreviation of the Azure Storage service that accepts the user delegation key.
* Property of user delegation key.
*/
signedService;
/**
* The service version that created the user delegation key.
* Property of user delegation key.
*/
signedVersion;
/**
* The delegated user tenant id in Azure AD.
* Property of user delegation key.
*/
signedDelegatedUserTid;
/**
* Authorized AAD Object ID in GUID format. The AAD Object ID of a user authorized by the owner of the User Delegation Key
* to perform the action granted by the SAS. The Azure Storage service will ensure that the owner of the user delegation key
* has the required permissions before granting access but no additional permission check for the user specified in
* this value will be performed. This is only used for User Delegation SAS.
*/
preauthorizedAgentObjectId;
/**
* A GUID value that will be logged in the storage diagnostic logs and can be used to correlate SAS generation with storage resource access.
* This is only used for User Delegation SAS.
*/
correlationId;
/**
* Keys for request headers required in the SAS token
*/
requestHeaderKeys;
/**
* Keys for request query parameters required in the SAS token
*/
requestQueryParameterKeys;
/** To indicate the depth of the virtual blob directory specified
* in the canonicalizedresource field of the string-to-sign.
*/
directoryDepth;
/**
* Optional. IP range allowed for this SAS.
*
* @readonly
*/
get ipRange() {
if (this.ipRangeInner) {
return {
end: this.ipRangeInner.end,
start: this.ipRangeInner.start,
};
}
return undefined;
}
constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId, encryptionScope, delegatedUserObjectId, requestHeaderKeys, requestQueryParameterKeys, directoryDepth) {
this.version = version;
this.signature = signature;
if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== "string") {
// SASQueryParametersOptions
this.permissions = permissionsOrOptions.permissions;
this.services = permissionsOrOptions.services;
this.resourceTypes = permissionsOrOptions.resourceTypes;
this.protocol = permissionsOrOptions.protocol;
this.startsOn = permissionsOrOptions.startsOn;
this.expiresOn = permissionsOrOptions.expiresOn;
this.ipRangeInner = permissionsOrOptions.ipRange;
this.identifier = permissionsOrOptions.identifier;
this.delegatedUserObjectId = permissionsOrOptions.delegatedUserObjectId;
this.encryptionScope = permissionsOrOptions.encryptionScope;
this.resource = permissionsOrOptions.resource;
this.cacheControl = permissionsOrOptions.cacheControl;
this.contentDisposition = permissionsOrOptions.contentDisposition;
this.contentEncoding = permissionsOrOptions.contentEncoding;
this.contentLanguage = permissionsOrOptions.contentLanguage;
this.contentType = permissionsOrOptions.contentType;
this.requestHeaderKeys = permissionsOrOptions.requestHeaderKeys;
this.requestQueryParameterKeys = permissionsOrOptions.requestQueryParameterKeys;
this.directoryDepth = permissionsOrOptions.directoryDepth;
if (permissionsOrOptions.userDelegationKey) {
this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId;
this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId;
this.signedStartsOn = permissionsOrOptions.userDelegationKey.signedStartsOn;
this.signedExpiresOn = permissionsOrOptions.userDelegationKey.signedExpiresOn;
this.signedService = permissionsOrOptions.userDelegationKey.signedService;
this.signedVersion = permissionsOrOptions.userDelegationKey.signedVersion;
this.signedDelegatedUserTid =
permissionsOrOptions.userDelegationKey.signedDelegatedUserTenantId;
this.preauthorizedAgentObjectId = permissionsOrOptions.preauthorizedAgentObjectId;
this.correlationId = permissionsOrOptions.correlationId;
}
}
else {
this.services = services;
this.resourceTypes = resourceTypes;
this.expiresOn = expiresOn;
this.permissions = permissionsOrOptions;
this.protocol = protocol;
this.startsOn = startsOn;
this.ipRangeInner = ipRange;
this.delegatedUserObjectId = delegatedUserObjectId;
this.encryptionScope = encryptionScope;
this.identifier = identifier;
this.resource = resource;
this.cacheControl = cacheControl;
this.contentDisposition = contentDisposition;
this.contentEncoding = contentEncoding;
this.contentLanguage = contentLanguage;
this.contentType = contentType;
this.requestHeaderKeys = requestHeaderKeys;
this.requestQueryParameterKeys = requestQueryParameterKeys;
this.directoryDepth = directoryDepth;
if (userDelegationKey) {
this.signedOid = userDelegationKey.signedObjectId;
this.signedTenantId = userDelegationKey.signedTenantId;
this.signedStartsOn = userDelegationKey.signedStartsOn;
this.signedExpiresOn = userDelegationKey.signedExpiresOn;
this.signedService = userDelegationKey.signedService;
this.signedVersion = userDelegationKey.signedVersion;
this.signedDelegatedUserTid = userDelegationKey.signedDelegatedUserTenantId;
this.preauthorizedAgentObjectId = preauthorizedAgentObjectId;
this.correlationId = correlationId;
}
}
}
/**
* Encodes all SAS query parameters into a string that can be appended to a URL.
*
*/
toString() {
const params = [
"sv",
"ss",
"srt",
"spr",
"st",
"se",
"sip",
"si",
"ses",
"skoid", // Signed object ID
"sktid", // Signed tenant ID
"skt", // Signed key start time
"ske", // Signed key expiry time
"sks", // Signed key service
"skv", // Signed key version
"sr",
"sp",
"rscc",
"rscd",
"rsce",
"rscl",
"rsct",
"saoid",
"scid",
"sdd",
"sduoid", // Signed key user delegation object ID
"skdutid", // Signed key user delegation tenant ID
"srh", // Request Headers
"srq", // Request QueryParameters
"sig",
];
const queries = [];
for (const param of params) {
switch (param) {
case "sv":
this.tryAppendQueryParameter(queries, param, this.version);
break;
case "ss":
this.tryAppendQueryParameter(queries, param, this.services);
break;
case "srt":
this.tryAppendQueryParameter(queries, param, this.resourceTypes);
break;
case "spr":
this.tryAppendQueryParameter(queries, param, this.protocol);
break;
case "st":
this.tryAppendQueryParameter(queries, param, this.startsOn ? utils_common_truncatedISO8061Date(this.startsOn, false) : undefined);
break;
case "se":
this.tryAppendQueryParameter(queries, param, this.expiresOn ? utils_common_truncatedISO8061Date(this.expiresOn, false) : undefined);
break;
case "sip":
this.tryAppendQueryParameter(queries, param, this.ipRange ? ipRangeToString(this.ipRange) : undefined);
break;
case "si":
this.tryAppendQueryParameter(queries, param, this.identifier);
break;
case "ses":
this.tryAppendQueryParameter(queries, param, this.encryptionScope);
break;
case "skoid": // Signed object ID
this.tryAppendQueryParameter(queries, param, this.signedOid);
break;
case "sktid": // Signed tenant ID
this.tryAppendQueryParameter(queries, param, this.signedTenantId);
break;
case "skt": // Signed key start time
this.tryAppendQueryParameter(queries, param, this.signedStartsOn ? utils_common_truncatedISO8061Date(this.signedStartsOn, false) : undefined);
break;
case "ske": // Signed key expiry time
this.tryAppendQueryParameter(queries, param, this.signedExpiresOn ? utils_common_truncatedISO8061Date(this.signedExpiresOn, false) : undefined);
break;
case "sks": // Signed key service
this.tryAppendQueryParameter(queries, param, this.signedService);
break;
case "skv": // Signed key version
this.tryAppendQueryParameter(queries, param, this.signedVersion);
break;
case "skdutid":
this.tryAppendQueryParameter(queries, param, this.signedDelegatedUserTid);
break;
case "sr":
this.tryAppendQueryParameter(queries, param, this.resource);
break;
case "sp":
this.tryAppendQueryParameter(queries, param, this.permissions);
break;
case "sig":
this.tryAppendQueryParameter(queries, param, this.signature);
break;
case "rscc":
this.tryAppendQueryParameter(queries, param, this.cacheControl);
break;
case "rscd":
this.tryAppendQueryParameter(queries, param, this.contentDisposition);
break;
case "rsce":
this.tryAppendQueryParameter(queries, param, this.contentEncoding);
break;
case "rscl":
this.tryAppendQueryParameter(queries, param, this.contentLanguage);
break;
case "rsct":
this.tryAppendQueryParameter(queries, param, this.contentType);
break;
case "saoid":
this.tryAppendQueryParameter(queries, param, this.preauthorizedAgentObjectId);
break;
case "scid":
this.tryAppendQueryParameter(queries, param, this.correlationId);
break;
case "sduoid":
this.tryAppendQueryParameter(queries, param, this.delegatedUserObjectId);
break;
case "srh": // Request headers
this.tryAppendQueryParameter(queries, param, this.requestHeaderKeys);
break;
case "srq": // Request headers
this.tryAppendQueryParameter(queries, param, this.requestQueryParameterKeys);
break;
case "sdd": // Directory depth
this.tryAppendQueryParameter(queries, param, this.directoryDepth !== undefined ? this.directoryDepth.toString() : "");
break;
}
}
return queries.join("&");
}
/**
* A private helper method used to filter and append query key/value pairs into an array.
*
* @param queries -
* @param key -
* @param value -
*/
tryAppendQueryParameter(queries, key, value) {
if (!value) {
return;
}
key = encodeURIComponent(key);
value = encodeURIComponent(value);
if (key.length > 0 && value.length > 0) {
queries.push(`${key}=${value}`);
}
}
}
//# sourceMappingURL=SASQueryParameters.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/BlobSASSignatureValues.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {
return generateBlobSASQueryParametersInternal(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName).sasQueryParameters;
}
function generateBlobSASQueryParametersInternal(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {
const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
const sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential
? sharedKeyCredentialOrUserDelegationKey
: undefined;
let userDelegationKeyCredential;
if (sharedKeyCredential === undefined && accountName !== undefined) {
userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey);
}
if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) {
throw TypeError("Invalid sharedKeyCredential, userDelegationKey or accountName.");
}
// Version 2020-12-06 adds support for encryptionscope in SAS.
if (version >= "2020-12-06") {
if (sharedKeyCredential !== undefined) {
return generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKeyCredential);
}
else {
if (version >= "2026-04-06") {
return generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userDelegationKeyCredential);
}
else if (version >= "2025-07-05") {
return generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userDelegationKeyCredential);
}
else {
return generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userDelegationKeyCredential);
}
}
}
// Version 2019-12-12 adds support for the blob tags permission.
// Version 2018-11-09 adds support for the signed resource and signed blob snapshot time fields.
// https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string
if (version >= "2018-11-09") {
if (sharedKeyCredential !== undefined) {
// Version 2020-02-10 delegation SAS signature construction supports blob name as a virtual directory.
if (version >= "2020-02-10") {
return generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential);
}
else {
return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential);
}
}
else {
// Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId.
if (version >= "2020-02-10") {
return generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential);
}
else {
return generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential);
}
}
}
if (version >= "2015-04-05") {
if (sharedKeyCredential !== undefined) {
return generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential);
}
else {
throw new RangeError("'version' must be >= '2018-11-09' when generating user delegation SAS using user delegation key.");
}
}
throw new RangeError("'version' must be >= '2015-04-05'.");
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2015-04-05 AND BEFORE 2018-11-09.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn and identifier.
*
* WARNING: When identifier is not provided, permissions and expiresOn are required.
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
* this constructor.
*
* @param blobSASSignatureValues -
* @param sharedKeyCredential -
*/
function generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
if (!blobSASSignatureValues.identifier &&
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
}
let resource = "c";
if (blobSASSignatureValues.blobName) {
resource = "b";
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
blobSASSignatureValues.identifier,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "",
].join("\n");
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn and identifier.
*
* WARNING: When identifier is not provided, permissions and expiresOn are required.
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
* this constructor.
*
* @param blobSASSignatureValues -
* @param sharedKeyCredential -
*/
function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
if (!blobSASSignatureValues.identifier &&
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
if (blobSASSignatureValues.blobName) {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
blobSASSignatureValues.identifier,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "",
].join("\n");
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-02-10.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn and identifier.
*
* WARNING: When identifier is not provided, permissions and expiresOn are required.
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
* this constructor.
*
* @param blobSASSignatureValues -
* @param sharedKeyCredential -
*/
function generateBlobSASQueryParameters20200210(blobSASSignatureValues, sharedKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
if (!blobSASSignatureValues.identifier &&
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
blobSASSignatureValues.identifier,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "",
].join("\n");
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, undefined, undefined, undefined, undefined, directoryDepth),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-12-06.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn and identifier.
*
* WARNING: When identifier is not provided, permissions and expiresOn are required.
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
* this constructor.
*
* @param blobSASSignatureValues -
* @param sharedKeyCredential -
*/
function generateBlobSASQueryParameters20201206(blobSASSignatureValues, sharedKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
if (!blobSASSignatureValues.identifier &&
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
blobSASSignatureValues.identifier,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.encryptionScope,
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "",
].join("\n");
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, undefined, undefined, undefined, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn.
*
* WARNING: identifier will be ignored, permissions and expiresOn are required.
*
* @param blobSASSignatureValues -
* @param userDelegationKeyCredential -
*/
function generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
// Stored access policies are not supported for a user delegation SAS.
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
if (blobSASSignatureValues.blobName) {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
userDelegationKeyCredential.userDelegationKey.signedObjectId,
userDelegationKeyCredential.userDelegationKey.signedTenantId,
userDelegationKeyCredential.userDelegationKey.signedStartsOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedService,
userDelegationKeyCredential.userDelegationKey.signedVersion,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.cacheControl,
blobSASSignatureValues.contentDisposition,
blobSASSignatureValues.contentEncoding,
blobSASSignatureValues.contentLanguage,
blobSASSignatureValues.contentType,
].join("\n");
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-02-10.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn.
*
* WARNING: identifier will be ignored, permissions and expiresOn are required.
*
* @param blobSASSignatureValues -
* @param userDelegationKeyCredential -
*/
function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
// Stored access policies are not supported for a user delegation SAS.
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
userDelegationKeyCredential.userDelegationKey.signedObjectId,
userDelegationKeyCredential.userDelegationKey.signedTenantId,
userDelegationKeyCredential.userDelegationKey.signedStartsOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedService,
userDelegationKeyCredential.userDelegationKey.signedVersion,
blobSASSignatureValues.preauthorizedAgentObjectId,
undefined, // agentObjectId
blobSASSignatureValues.correlationId,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.cacheControl,
blobSASSignatureValues.contentDisposition,
blobSASSignatureValues.contentEncoding,
blobSASSignatureValues.contentLanguage,
blobSASSignatureValues.contentType,
].join("\n");
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, undefined, undefined, undefined, undefined, directoryDepth),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-12-06.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn.
*
* WARNING: identifier will be ignored, permissions and expiresOn are required.
*
* @param blobSASSignatureValues -
* @param userDelegationKeyCredential -
*/
function generateBlobSASQueryParametersUDK20201206(blobSASSignatureValues, userDelegationKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
// Stored access policies are not supported for a user delegation SAS.
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
userDelegationKeyCredential.userDelegationKey.signedObjectId,
userDelegationKeyCredential.userDelegationKey.signedTenantId,
userDelegationKeyCredential.userDelegationKey.signedStartsOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedService,
userDelegationKeyCredential.userDelegationKey.signedVersion,
blobSASSignatureValues.preauthorizedAgentObjectId,
undefined, // agentObjectId
blobSASSignatureValues.correlationId,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.encryptionScope,
blobSASSignatureValues.cacheControl,
blobSASSignatureValues.contentDisposition,
blobSASSignatureValues.contentEncoding,
blobSASSignatureValues.contentLanguage,
blobSASSignatureValues.contentType,
].join("\n");
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, undefined, undefined, undefined, directoryDepth),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-12-06.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn.
*
* WARNING: identifier will be ignored, permissions and expiresOn are required.
*
* @param blobSASSignatureValues -
* @param userDelegationKeyCredential -
*/
function generateBlobSASQueryParametersUDK20250705(blobSASSignatureValues, userDelegationKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
// Stored access policies are not supported for a user delegation SAS.
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
userDelegationKeyCredential.userDelegationKey.signedObjectId,
userDelegationKeyCredential.userDelegationKey.signedTenantId,
userDelegationKeyCredential.userDelegationKey.signedStartsOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedService,
userDelegationKeyCredential.userDelegationKey.signedVersion,
blobSASSignatureValues.preauthorizedAgentObjectId,
undefined, // agentObjectId
blobSASSignatureValues.correlationId,
userDelegationKeyCredential.userDelegationKey.signedDelegatedUserTenantId, // SignedKeyDelegatedUserTenantId, will be added in a future release.
blobSASSignatureValues.delegatedUserObjectId,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.encryptionScope,
blobSASSignatureValues.cacheControl,
blobSASSignatureValues.contentDisposition,
blobSASSignatureValues.contentEncoding,
blobSASSignatureValues.contentLanguage,
blobSASSignatureValues.contentType,
].join("\n");
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, undefined, undefined, directoryDepth),
stringToSign: stringToSign,
};
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
* IMPLEMENTATION FOR API VERSION FROM 2020-12-06.
*
* Creates an instance of SASQueryParameters.
*
* Only accepts required settings needed to create a SAS. For optional settings please
* set corresponding properties directly, such as permissions, startsOn.
*
* WARNING: identifier will be ignored, permissions and expiresOn are required.
*
* @param blobSASSignatureValues -
* @param userDelegationKeyCredential -
*/
function generateBlobSASQueryParametersUDK20260406(blobSASSignatureValues, userDelegationKeyCredential) {
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
// Stored access policies are not supported for a user delegation SAS.
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
}
let resource = "c";
let timestamp = blobSASSignatureValues.snapshotTime;
let directoryDepth = undefined;
if (blobSASSignatureValues.blobName) {
if (blobSASSignatureValues.isDirectory === true) {
resource = "d";
directoryDepth = trimBlobName(blobSASSignatureValues.blobName).split("/").length;
}
else {
resource = "b";
if (blobSASSignatureValues.snapshotTime) {
resource = "bs";
}
else if (blobSASSignatureValues.versionId) {
resource = "bv";
timestamp = blobSASSignatureValues.versionId;
}
}
}
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
let verifiedPermissions;
if (blobSASSignatureValues.permissions) {
if (blobSASSignatureValues.blobName) {
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
else {
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
}
}
// Signature is generated on the un-url-encoded values.
const stringToSign = [
verifiedPermissions ? verifiedPermissions : "",
blobSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
: "",
blobSASSignatureValues.expiresOn
? utils_common_truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
: "",
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
userDelegationKeyCredential.userDelegationKey.signedObjectId,
userDelegationKeyCredential.userDelegationKey.signedTenantId,
userDelegationKeyCredential.userDelegationKey.signedStartsOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
? utils_common_truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
: "",
userDelegationKeyCredential.userDelegationKey.signedService,
userDelegationKeyCredential.userDelegationKey.signedVersion,
blobSASSignatureValues.preauthorizedAgentObjectId,
undefined, // agentObjectId
blobSASSignatureValues.correlationId,
userDelegationKeyCredential.userDelegationKey.signedDelegatedUserTenantId, // SignedKeyDelegatedUserTenantId, will be added in a future release.
blobSASSignatureValues.delegatedUserObjectId,
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
blobSASSignatureValues.version,
resource,
timestamp,
blobSASSignatureValues.encryptionScope,
formatRequestHeadersForSasSigning(blobSASSignatureValues.requestHeaders),
formatRequestQueryParametersForSasSigning(blobSASSignatureValues.requestQueryParameters),
blobSASSignatureValues.cacheControl,
blobSASSignatureValues.contentDisposition,
blobSASSignatureValues.contentEncoding,
blobSASSignatureValues.contentLanguage,
blobSASSignatureValues.contentType,
].join("\n");
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId, blobSASSignatureValues.encryptionScope, blobSASSignatureValues.delegatedUserObjectId, getKeysOfRequestHeaders(blobSASSignatureValues.requestHeaders), getKeysOfRequestHeaders(blobSASSignatureValues.requestQueryParameters), directoryDepth),
stringToSign: stringToSign,
};
}
function formatRequestHeadersForSasSigning(requestHeaders) {
if (requestHeaders === undefined) {
return undefined;
}
let canonicalValue = "";
Object.keys(requestHeaders).forEach(function (key) {
// key: the name of the object key
// index: the ordinal position of the key within the object
canonicalValue = canonicalValue + key + ":" + requestHeaders[key] + "\n";
});
return canonicalValue;
}
function formatRequestQueryParametersForSasSigning(queryParameters) {
if (queryParameters === undefined) {
return undefined;
}
let canonicalValue = "";
Object.keys(queryParameters).forEach(function (key) {
// key: the name of the object key
// index: the ordinal position of the key within the object
canonicalValue = canonicalValue + "\n" + key + ":" + queryParameters[key];
});
return canonicalValue;
}
function getKeysOfRequestHeaders(requestHeaders) {
if (requestHeaders === undefined) {
return undefined;
}
let requestKeys = "";
let index = 0;
Object.keys(requestHeaders).forEach(function (key) {
// key: the name of the object key
// index: the ordinal position of the key within the object
if (index !== 0) {
requestKeys = requestKeys + ",";
}
requestKeys = requestKeys + key;
++index;
});
return requestKeys;
}
function getCanonicalName(accountName, containerName, blobName) {
// Container: "/blob/account/containerName"
// Blob: "/blob/account/containerName/blobName"
const elements = [`/blob/${accountName}/${containerName}`];
if (blobName) {
elements.push(`/${blobName}`);
}
return elements.join("");
}
function SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) {
const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
if (blobSASSignatureValues.snapshotTime && version < "2018-11-09") {
throw RangeError("'version' must be >= '2018-11-09' when providing 'snapshotTime'.");
}
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
throw RangeError("Must provide 'blobName' when providing 'snapshotTime'.");
}
if (blobSASSignatureValues.versionId && version < "2019-10-10") {
throw RangeError("'version' must be >= '2019-10-10' when providing 'versionId'.");
}
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) {
throw RangeError("Must provide 'blobName' when providing 'versionId'.");
}
if (blobSASSignatureValues.permissions &&
blobSASSignatureValues.permissions.setImmutabilityPolicy &&
version < "2020-08-04") {
throw RangeError("'version' must be >= '2020-08-04' when provided 'i' permission.");
}
if (blobSASSignatureValues.permissions &&
blobSASSignatureValues.permissions.deleteVersion &&
version < "2019-10-10") {
throw RangeError("'version' must be >= '2019-10-10' when providing 'x' permission.");
}
if (blobSASSignatureValues.permissions &&
blobSASSignatureValues.permissions.permanentDelete &&
version < "2019-10-10") {
throw RangeError("'version' must be >= '2019-10-10' when providing 'y' permission.");
}
if (blobSASSignatureValues.permissions &&
blobSASSignatureValues.permissions.tag &&
version < "2019-12-12") {
throw RangeError("'version' must be >= '2019-12-12' when providing 't' permission.");
}
if (version < "2020-02-10" &&
blobSASSignatureValues.permissions &&
(blobSASSignatureValues.permissions.move || blobSASSignatureValues.permissions.execute)) {
throw RangeError("'version' must be >= '2020-02-10' when providing the 'm' or 'e' permission.");
}
if (version < "2021-04-10" &&
blobSASSignatureValues.permissions &&
blobSASSignatureValues.permissions.filterByTags) {
throw RangeError("'version' must be >= '2021-04-10' when providing the 'f' permission.");
}
if (version < "2020-02-10" &&
(blobSASSignatureValues.preauthorizedAgentObjectId || blobSASSignatureValues.correlationId)) {
throw RangeError("'version' must be >= '2020-02-10' when providing 'preauthorizedAgentObjectId' or 'correlationId'.");
}
if (blobSASSignatureValues.encryptionScope && version < "2020-12-06") {
throw RangeError("'version' must be >= '2020-12-06' when provided 'encryptionScope' in SAS.");
}
blobSASSignatureValues.version = version;
return blobSASSignatureValues;
}
function trimBlobName(blobName) {
let internalName = blobName;
while (internalName.startsWith("/")) {
internalName = internalName.substring(1);
}
while (internalName.endsWith("/")) {
internalName = internalName.substring(0, internalName.length - 1);
}
return internalName;
}
//# sourceMappingURL=BlobSASSignatureValues.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobLeaseClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}.
*/
class BlobLeaseClient {
_leaseId;
_url;
_containerOrBlobOperation;
_isContainer;
/**
* Gets the lease Id.
*
* @readonly
*/
get leaseId() {
return this._leaseId;
}
/**
* Gets the url.
*
* @readonly
*/
get url() {
return this._url;
}
/**
* Creates an instance of BlobLeaseClient.
* @param client - The client to make the lease operation requests.
* @param leaseId - Initial proposed lease id.
*/
constructor(client, leaseId) {
const clientContext = client.storageClientContext;
this._url = client.url;
if (client.name === undefined) {
this._isContainer = true;
this._containerOrBlobOperation = clientContext.container;
}
else {
this._isContainer = false;
this._containerOrBlobOperation = clientContext.blob;
}
if (!leaseId) {
leaseId = esm_randomUUID();
}
this._leaseId = leaseId;
}
/**
* Establishes and manages a lock on a container for delete operations, or on a blob
* for write and delete operations.
* The lock duration can be 15 to 60 seconds, or can be infinite.
* @see https://learn.microsoft.com/rest/api/storageservices/lease-container
* and
* @see https://learn.microsoft.com/rest/api/storageservices/lease-blob
*
* @param duration - Must be between 15 to 60 seconds, or infinite (-1)
* @param options - option to configure lease management operations.
* @returns Response data for acquire lease operation.
*/
async acquireLease(duration, options = {}) {
if (this._isContainer &&
((options.conditions?.ifMatch && options.conditions?.ifMatch !== ETagNone) ||
(options.conditions?.ifNoneMatch && options.conditions?.ifNoneMatch !== ETagNone) ||
options.conditions?.tagConditions)) {
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
}
return tracingClient.withSpan("BlobLeaseClient-acquireLease", options, async (updatedOptions) => {
return utils_common_assertResponse(await this._containerOrBlobOperation.acquireLease({
abortSignal: options.abortSignal,
duration,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
proposedLeaseId: this._leaseId,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* To change the ID of the lease.
* @see https://learn.microsoft.com/rest/api/storageservices/lease-container
* and
* @see https://learn.microsoft.com/rest/api/storageservices/lease-blob
*
* @param proposedLeaseId - the proposed new lease Id.
* @param options - option to configure lease management operations.
* @returns Response data for change lease operation.
*/
async changeLease(proposedLeaseId, options = {}) {
if (this._isContainer &&
((options.conditions?.ifMatch && options.conditions?.ifMatch !== ETagNone) ||
(options.conditions?.ifNoneMatch && options.conditions?.ifNoneMatch !== ETagNone) ||
options.conditions?.tagConditions)) {
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
}
return tracingClient.withSpan("BlobLeaseClient-changeLease", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, {
abortSignal: options.abortSignal,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
this._leaseId = proposedLeaseId;
return response;
});
}
/**
* To free the lease if it is no longer needed so that another client may
* immediately acquire a lease against the container or the blob.
* @see https://learn.microsoft.com/rest/api/storageservices/lease-container
* and
* @see https://learn.microsoft.com/rest/api/storageservices/lease-blob
*
* @param options - option to configure lease management operations.
* @returns Response data for release lease operation.
*/
async releaseLease(options = {}) {
if (this._isContainer &&
((options.conditions?.ifMatch && options.conditions?.ifMatch !== ETagNone) ||
(options.conditions?.ifNoneMatch && options.conditions?.ifNoneMatch !== ETagNone) ||
options.conditions?.tagConditions)) {
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
}
return tracingClient.withSpan("BlobLeaseClient-releaseLease", options, async (updatedOptions) => {
return utils_common_assertResponse(await this._containerOrBlobOperation.releaseLease(this._leaseId, {
abortSignal: options.abortSignal,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* To renew the lease.
* @see https://learn.microsoft.com/rest/api/storageservices/lease-container
* and
* @see https://learn.microsoft.com/rest/api/storageservices/lease-blob
*
* @param options - Optional option to configure lease management operations.
* @returns Response data for renew lease operation.
*/
async renewLease(options = {}) {
if (this._isContainer &&
((options.conditions?.ifMatch && options.conditions?.ifMatch !== ETagNone) ||
(options.conditions?.ifNoneMatch && options.conditions?.ifNoneMatch !== ETagNone) ||
options.conditions?.tagConditions)) {
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
}
return tracingClient.withSpan("BlobLeaseClient-renewLease", options, async (updatedOptions) => {
return this._containerOrBlobOperation.renewLease(this._leaseId, {
abortSignal: options.abortSignal,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
});
});
}
/**
* To end the lease but ensure that another client cannot acquire a new lease
* until the current lease period has expired.
* @see https://learn.microsoft.com/rest/api/storageservices/lease-container
* and
* @see https://learn.microsoft.com/rest/api/storageservices/lease-blob
*
* @param breakPeriod - Break period
* @param options - Optional options to configure lease management operations.
* @returns Response data for break lease operation.
*/
async breakLease(breakPeriod, options = {}) {
if (this._isContainer &&
((options.conditions?.ifMatch && options.conditions?.ifMatch !== ETagNone) ||
(options.conditions?.ifNoneMatch && options.conditions?.ifNoneMatch !== ETagNone) ||
options.conditions?.tagConditions)) {
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
}
return tracingClient.withSpan("BlobLeaseClient-breakLease", options, async (updatedOptions) => {
const operationOptions = {
abortSignal: options.abortSignal,
breakPeriod,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
};
return utils_common_assertResponse(await this._containerOrBlobOperation.breakLease(operationOptions));
});
}
}
//# sourceMappingURL=BlobLeaseClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/RetriableReadableStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* A Node.js ReadableStream will internally retry when internal ReadableStream unexpected ends.
*/
class RetriableReadableStream extends external_node_stream_.Readable {
start;
offset;
end;
getter;
source;
retries = 0;
maxRetryRequests;
onProgress;
options;
/**
* Creates an instance of RetriableReadableStream.
*
* @param source - The current ReadableStream returned from getter
* @param getter - A method calling downloading request returning
* a new ReadableStream from specified offset
* @param offset - Offset position in original data source to read
* @param count - How much data in original data source to read
* @param options -
*/
constructor(source, getter, offset, count, options = {}) {
super({ highWaterMark: options.highWaterMark });
this.getter = getter;
this.source = source;
this.start = offset;
this.offset = offset;
this.end = offset + count - 1;
this.maxRetryRequests =
options.maxRetryRequests && options.maxRetryRequests >= 0 ? options.maxRetryRequests : 0;
this.onProgress = options.onProgress;
this.options = options;
this.setSourceEventHandlers();
}
_read() {
this.source.resume();
}
setSourceEventHandlers() {
this.source.on("data", this.sourceDataHandler);
this.source.on("end", this.sourceErrorOrEndHandler);
this.source.on("error", this.sourceErrorOrEndHandler);
// needed for Node14
this.source.on("aborted", this.sourceAbortedHandler);
}
removeSourceEventHandlers() {
this.source.removeListener("data", this.sourceDataHandler);
this.source.removeListener("end", this.sourceErrorOrEndHandler);
this.source.removeListener("error", this.sourceErrorOrEndHandler);
this.source.removeListener("aborted", this.sourceAbortedHandler);
}
sourceDataHandler = (data) => {
if (this.options.doInjectErrorOnce) {
this.options.doInjectErrorOnce = undefined;
this.source.pause();
this.sourceErrorOrEndHandler();
this.source.destroy();
return;
}
// console.log(
// `Offset: ${this.offset}, Received ${data.length} from internal stream`
// );
this.offset += data.length;
if (this.onProgress) {
this.onProgress({ loadedBytes: this.offset - this.start });
}
if (!this.push(data)) {
this.source.pause();
}
};
sourceAbortedHandler = () => {
const abortError = new AbortError_AbortError("The operation was aborted.");
this.destroy(abortError);
};
sourceErrorOrEndHandler = (err) => {
if (err && err.name === "AbortError") {
this.destroy(err);
return;
}
// console.log(
// `Source stream emits end or error, offset: ${
// this.offset
// }, dest end : ${this.end}`
// );
this.removeSourceEventHandlers();
if (this.offset - 1 === this.end) {
this.push(null);
}
else if (this.offset <= this.end) {
// TODO if error is CRC64 not match, directly throw out the error.
// console.log(
// `retries: ${this.retries}, max retries: ${this.maxRetries}`
// );
if (this.retries < this.maxRetryRequests) {
this.retries += 1;
this.getter(this.offset)
.then((newSource) => {
this.source = newSource;
this.setSourceEventHandlers();
return;
})
.catch((error) => {
this.destroy(error);
});
}
else {
this.destroy(new Error(`Data corruption failure: received less data than required and reached maxRetires limitation. Received data offset: ${this.offset - 1}, data needed offset: ${this.end}, retries: ${this.retries}, max retries: ${this.maxRetryRequests}`));
}
}
else {
this.destroy(new Error(`Data corruption failure: Received more data than original request, data needed offset is ${this.end}, received offset: ${this.offset - 1}`));
}
};
_destroy(error, callback) {
// remove listener from source and release source
this.removeSourceEventHandlers();
this.source.destroy();
callback(error === null ? undefined : error);
}
}
//# sourceMappingURL=RetriableReadableStream.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobDownloadResponse.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* BlobDownloadResponse implements BlobDownloadResponseParsed interface, and in Node.js runtime it will
* automatically retry when internal read stream unexpected ends. (This kind of unexpected ends cannot
* trigger retries defined in pipeline retry policy.)
*
* The {@link readableStreamBody} stream will retry underlayer, you can just use it as a normal Node.js
* Readable stream.
*/
class BlobDownloadResponse {
/**
* Indicates that the service supports
* requests for partial file content.
*
* @readonly
*/
get acceptRanges() {
return this.originalResponse.acceptRanges;
}
/**
* Returns if it was previously specified
* for the file.
*
* @readonly
*/
get cacheControl() {
return this.originalResponse.cacheControl;
}
/**
* Returns the value that was specified
* for the 'x-ms-content-disposition' header and specifies how to process the
* response.
*
* @readonly
*/
get contentDisposition() {
return this.originalResponse.contentDisposition;
}
/**
* Returns the value that was specified
* for the Content-Encoding request header.
*
* @readonly
*/
get contentEncoding() {
return this.originalResponse.contentEncoding;
}
/**
* Returns the value that was specified
* for the Content-Language request header.
*
* @readonly
*/
get contentLanguage() {
return this.originalResponse.contentLanguage;
}
/**
* The current sequence number for a
* page blob. This header is not returned for block blobs or append blobs.
*
* @readonly
*/
get blobSequenceNumber() {
return this.originalResponse.blobSequenceNumber;
}
/**
* The blob's type. Possible values include:
* 'BlockBlob', 'PageBlob', 'AppendBlob'.
*
* @readonly
*/
get blobType() {
return this.originalResponse.blobType;
}
/**
* The number of bytes present in the
* response body.
*
* @readonly
*/
get contentLength() {
return this.originalResponse.contentLength;
}
/**
* If the file has an MD5 hash and the
* request is to read the full file, this response header is returned so that
* the client can check for message content integrity. If the request is to
* read a specified range and the 'x-ms-range-get-content-md5' is set to
* true, then the request returns an MD5 hash for the range, as long as the
* range size is less than or equal to 4 MB. If neither of these sets of
* conditions is true, then no value is returned for the 'Content-MD5'
* header.
*
* @readonly
*/
get contentMD5() {
return this.originalResponse.contentMD5;
}
/**
* Indicates the range of bytes returned if
* the client requested a subset of the file by setting the Range request
* header.
*
* @readonly
*/
get contentRange() {
return this.originalResponse.contentRange;
}
/**
* The content type specified for the file.
* The default content type is 'application/octet-stream'
*
* @readonly
*/
get contentType() {
return this.originalResponse.contentType;
}
/**
* Conclusion time of the last attempted
* Copy File operation where this file was the destination file. This value
* can specify the time of a completed, aborted, or failed copy attempt.
*
* @readonly
*/
get copyCompletedOn() {
return this.originalResponse.copyCompletedOn;
}
/**
* String identifier for the last attempted Copy
* File operation where this file was the destination file.
*
* @readonly
*/
get copyId() {
return this.originalResponse.copyId;
}
/**
* Contains the number of bytes copied and
* the total bytes in the source in the last attempted Copy File operation
* where this file was the destination file. Can show between 0 and
* Content-Length bytes copied.
*
* @readonly
*/
get copyProgress() {
return this.originalResponse.copyProgress;
}
/**
* URL up to 2KB in length that specifies the
* source file used in the last attempted Copy File operation where this file
* was the destination file.
*
* @readonly
*/
get copySource() {
return this.originalResponse.copySource;
}
/**
* State of the copy operation
* identified by 'x-ms-copy-id'. Possible values include: 'pending',
* 'success', 'aborted', 'failed'
*
* @readonly
*/
get copyStatus() {
return this.originalResponse.copyStatus;
}
/**
* Only appears when
* x-ms-copy-status is failed or pending. Describes cause of fatal or
* non-fatal copy operation failure.
*
* @readonly
*/
get copyStatusDescription() {
return this.originalResponse.copyStatusDescription;
}
/**
* When a blob is leased,
* specifies whether the lease is of infinite or fixed duration. Possible
* values include: 'infinite', 'fixed'.
*
* @readonly
*/
get leaseDuration() {
return this.originalResponse.leaseDuration;
}
/**
* Lease state of the blob. Possible
* values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
*
* @readonly
*/
get leaseState() {
return this.originalResponse.leaseState;
}
/**
* The current lease status of the
* blob. Possible values include: 'locked', 'unlocked'.
*
* @readonly
*/
get leaseStatus() {
return this.originalResponse.leaseStatus;
}
/**
* A UTC date/time value generated by the service that
* indicates the time at which the response was initiated.
*
* @readonly
*/
get date() {
return this.originalResponse.date;
}
/**
* The number of committed blocks
* present in the blob. This header is returned only for append blobs.
*
* @readonly
*/
get blobCommittedBlockCount() {
return this.originalResponse.blobCommittedBlockCount;
}
/**
* The ETag contains a value that you can use to
* perform operations conditionally, in quotes.
*
* @readonly
*/
get etag() {
return this.originalResponse.etag;
}
/**
* The number of tags associated with the blob
*
* @readonly
*/
get tagCount() {
return this.originalResponse.tagCount;
}
/**
* The error code.
*
* @readonly
*/
get errorCode() {
return this.originalResponse.errorCode;
}
/**
* The value of this header is set to
* true if the file data and application metadata are completely encrypted
* using the specified algorithm. Otherwise, the value is set to false (when
* the file is unencrypted, or if only parts of the file/application metadata
* are encrypted).
*
* @readonly
*/
get isServerEncrypted() {
return this.originalResponse.isServerEncrypted;
}
/**
* If the blob has a MD5 hash, and if
* request contains range header (Range or x-ms-range), this response header
* is returned with the value of the whole blob's MD5 value. This value may
* or may not be equal to the value returned in Content-MD5 header, with the
* latter calculated from the requested range.
*
* @readonly
*/
get blobContentMD5() {
return this.originalResponse.blobContentMD5;
}
/**
* Returns the date and time the file was last
* modified. Any operation that modifies the file or its properties updates
* the last modified time.
*
* @readonly
*/
get lastModified() {
return this.originalResponse.lastModified;
}
/**
* Returns the UTC date and time generated by the service that indicates the time at which the blob was
* last read or written to.
*
* @readonly
*/
get lastAccessed() {
return this.originalResponse.lastAccessed;
}
/**
* Returns the date and time the blob was created.
*
* @readonly
*/
get createdOn() {
return this.originalResponse.createdOn;
}
/**
* A name-value pair
* to associate with a file storage object.
*
* @readonly
*/
get metadata() {
return this.originalResponse.metadata;
}
/**
* This header uniquely identifies the request
* that was made and can be used for troubleshooting the request.
*
* @readonly
*/
get requestId() {
return this.originalResponse.requestId;
}
/**
* If a client request id header is sent in the request, this header will be present in the
* response with the same value.
*
* @readonly
*/
get clientRequestId() {
return this.originalResponse.clientRequestId;
}
/**
* Indicates the version of the Blob service used
* to execute the request.
*
* @readonly
*/
get version() {
return this.originalResponse.version;
}
/**
* Indicates the versionId of the downloaded blob version.
*
* @readonly
*/
get versionId() {
return this.originalResponse.versionId;
}
/**
* Indicates whether version of this blob is a current version.
*
* @readonly
*/
get isCurrentVersion() {
return this.originalResponse.isCurrentVersion;
}
/**
* The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
* when the blob was encrypted with a customer-provided key.
*
* @readonly
*/
get encryptionKeySha256() {
return this.originalResponse.encryptionKeySha256;
}
/**
* If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
* true, then the request returns a crc64 for the range, as long as the range size is less than
* or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
* specified in the same request, it will fail with 400(Bad Request)
*/
get contentCrc64() {
return this.originalResponse.contentCrc64;
}
/**
* Object Replication Policy Id of the destination blob.
*
* @readonly
*/
get objectReplicationDestinationPolicyId() {
return this.originalResponse.objectReplicationDestinationPolicyId;
}
/**
* Parsed Object Replication Policy Id, Rule Id(s) and status of the source blob.
*
* @readonly
*/
get objectReplicationSourceProperties() {
return this.originalResponse.objectReplicationSourceProperties;
}
/**
* If this blob has been sealed.
*
* @readonly
*/
get isSealed() {
return this.originalResponse.isSealed;
}
/**
* UTC date/time value generated by the service that indicates the time at which the blob immutability policy will expire.
*
* @readonly
*/
get immutabilityPolicyExpiresOn() {
return this.originalResponse.immutabilityPolicyExpiresOn;
}
/**
* Indicates immutability policy mode.
*
* @readonly
*/
get immutabilityPolicyMode() {
return this.originalResponse.immutabilityPolicyMode;
}
/**
* Indicates if a legal hold is present on the blob.
*
* @readonly
*/
get legalHold() {
return this.originalResponse.legalHold;
}
get structuredBodyType() {
return this.originalResponse.structuredBodyType;
}
/**
* The response body as a browser Blob.
* Always undefined in node.js.
*
* @readonly
*/
get contentAsBlob() {
return this.originalResponse.blobBody;
}
/**
* The response body as a node.js Readable stream.
* Always undefined in the browser.
*
* It will automatically retry when internal read stream unexpected ends.
*
* @readonly
*/
get readableStreamBody() {
return esm_isNodeLike ? this.blobDownloadStream : undefined;
}
/**
* The HTTP response.
*/
get _response() {
return this.originalResponse._response;
}
originalResponse;
blobDownloadStream;
/**
* Creates an instance of BlobDownloadResponse.
*
* @param originalResponse -
* @param getter -
* @param offset -
* @param count -
* @param options -
*/
constructor(originalResponse, getter, offset, count, options = {}) {
this.originalResponse = originalResponse;
const streamBody = this.originalResponse.structuredBodyType === undefined
? this.originalResponse.readableStreamBody
: structuredMessageDecodingStream(this.originalResponse.readableStreamBody, options);
this.blobDownloadStream = new RetriableReadableStream(streamBody, getter, offset, count, options);
}
}
//# sourceMappingURL=BlobDownloadResponse.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/AvroConstants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const AVRO_SYNC_MARKER_SIZE = 16;
const AVRO_INIT_BYTES = new Uint8Array([79, 98, 106, 1]);
const AVRO_CODEC_KEY = "avro.codec";
const AVRO_SCHEMA_KEY = "avro.schema";
//# sourceMappingURL=AvroConstants.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/AvroParser.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
class AvroParser {
/**
* Reads a fixed number of bytes from the stream.
*
* @param stream -
* @param length -
* @param options -
*/
static async readFixedBytes(stream, length, options = {}) {
const bytes = await stream.read(length, { abortSignal: options.abortSignal });
if (bytes.length !== length) {
throw new Error("Hit stream end.");
}
return bytes;
}
/**
* Reads a single byte from the stream.
*
* @param stream -
* @param options -
*/
static async readByte(stream, options = {}) {
const buf = await AvroParser.readFixedBytes(stream, 1, options);
return buf[0];
}
// int and long are stored in variable-length zig-zag coding.
// variable-length: https://lucene.apache.org/core/3_5_0/fileformats.html#VInt
// zig-zag: https://developers.google.com/protocol-buffers/docs/encoding?csw=1#types
static async readZigZagLong(stream, options = {}) {
let zigZagEncoded = 0;
let significanceInBit = 0;
let byte, haveMoreByte, significanceInFloat;
do {
byte = await AvroParser.readByte(stream, options);
haveMoreByte = byte & 0x80;
zigZagEncoded |= (byte & 0x7f) << significanceInBit;
significanceInBit += 7;
} while (haveMoreByte && significanceInBit < 28); // bitwise operation only works for 32-bit integers
if (haveMoreByte) {
// Switch to float arithmetic
// eslint-disable-next-line no-self-assign
zigZagEncoded = zigZagEncoded;
significanceInFloat = 268435456; // 2 ** 28.
do {
byte = await AvroParser.readByte(stream, options);
zigZagEncoded += (byte & 0x7f) * significanceInFloat;
significanceInFloat *= 128; // 2 ** 7
} while (byte & 0x80);
const res = (zigZagEncoded % 2 ? -(zigZagEncoded + 1) : zigZagEncoded) / 2;
if (res < Number.MIN_SAFE_INTEGER || res > Number.MAX_SAFE_INTEGER) {
throw new Error("Integer overflow.");
}
return res;
}
return (zigZagEncoded >> 1) ^ -(zigZagEncoded & 1);
}
static async readLong(stream, options = {}) {
return AvroParser.readZigZagLong(stream, options);
}
static async readInt(stream, options = {}) {
return AvroParser.readZigZagLong(stream, options);
}
static async readNull() {
return null;
}
static async readBoolean(stream, options = {}) {
const b = await AvroParser.readByte(stream, options);
if (b === 1) {
return true;
}
else if (b === 0) {
return false;
}
else {
throw new Error("Byte was not a boolean.");
}
}
static async readFloat(stream, options = {}) {
const u8arr = await AvroParser.readFixedBytes(stream, 4, options);
const view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
return view.getFloat32(0, true); // littleEndian = true
}
static async readDouble(stream, options = {}) {
const u8arr = await AvroParser.readFixedBytes(stream, 8, options);
const view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
return view.getFloat64(0, true); // littleEndian = true
}
static async readBytes(stream, options = {}) {
const size = await AvroParser.readLong(stream, options);
if (size < 0) {
throw new Error("Bytes size was negative.");
}
return stream.read(size, { abortSignal: options.abortSignal });
}
static async readString(stream, options = {}) {
const u8arr = await AvroParser.readBytes(stream, options);
const utf8decoder = new TextDecoder();
return utf8decoder.decode(u8arr);
}
static async readMapPair(stream, readItemMethod, options = {}) {
const key = await AvroParser.readString(stream, options);
// FUTURE: this won't work with readFixed (currently not supported) which needs a length as the parameter.
const value = await readItemMethod(stream, options);
return { key, value };
}
static async readMap(stream, readItemMethod, options = {}) {
const readPairMethod = (s, opts = {}) => {
return AvroParser.readMapPair(s, readItemMethod, opts);
};
const pairs = await AvroParser.readArray(stream, readPairMethod, options);
const dict = {};
for (const pair of pairs) {
dict[pair.key] = pair.value;
}
return dict;
}
static async readArray(stream, readItemMethod, options = {}) {
const items = [];
for (let count = await AvroParser.readLong(stream, options); count !== 0; count = await AvroParser.readLong(stream, options)) {
if (count < 0) {
// Ignore block sizes
await AvroParser.readLong(stream, options);
count = -count;
}
while (count--) {
const item = await readItemMethod(stream, options);
items.push(item);
}
}
return items;
}
}
var AvroComplex;
(function (AvroComplex) {
AvroComplex["RECORD"] = "record";
AvroComplex["ENUM"] = "enum";
AvroComplex["ARRAY"] = "array";
AvroComplex["MAP"] = "map";
AvroComplex["UNION"] = "union";
AvroComplex["FIXED"] = "fixed";
})(AvroComplex || (AvroComplex = {}));
var AvroPrimitive;
(function (AvroPrimitive) {
AvroPrimitive["NULL"] = "null";
AvroPrimitive["BOOLEAN"] = "boolean";
AvroPrimitive["INT"] = "int";
AvroPrimitive["LONG"] = "long";
AvroPrimitive["FLOAT"] = "float";
AvroPrimitive["DOUBLE"] = "double";
AvroPrimitive["BYTES"] = "bytes";
AvroPrimitive["STRING"] = "string";
})(AvroPrimitive || (AvroPrimitive = {}));
class AvroType {
/**
* Determines the AvroType from the Avro Schema.
*/
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
static fromSchema(schema) {
if (typeof schema === "string") {
return AvroType.fromStringSchema(schema);
}
else if (Array.isArray(schema)) {
return AvroType.fromArraySchema(schema);
}
else {
return AvroType.fromObjectSchema(schema);
}
}
static fromStringSchema(schema) {
switch (schema) {
case AvroPrimitive.NULL:
case AvroPrimitive.BOOLEAN:
case AvroPrimitive.INT:
case AvroPrimitive.LONG:
case AvroPrimitive.FLOAT:
case AvroPrimitive.DOUBLE:
case AvroPrimitive.BYTES:
case AvroPrimitive.STRING:
return new AvroPrimitiveType(schema);
default:
throw new Error(`Unexpected Avro type ${schema}`);
}
}
static fromArraySchema(schema) {
return new AvroUnionType(schema.map(AvroType.fromSchema));
}
static fromObjectSchema(schema) {
const type = schema.type;
// Primitives can be defined as strings or objects
try {
return AvroType.fromStringSchema(type);
}
catch {
// no-op
}
switch (type) {
case AvroComplex.RECORD:
if (schema.aliases) {
throw new Error(`aliases currently is not supported, schema: ${schema}`);
}
if (!schema.name) {
throw new Error(`Required attribute 'name' doesn't exist on schema: ${schema}`);
}
// eslint-disable-next-line no-case-declarations
const fields = {};
if (!schema.fields) {
throw new Error(`Required attribute 'fields' doesn't exist on schema: ${schema}`);
}
for (const field of schema.fields) {
fields[field.name] = AvroType.fromSchema(field.type);
}
return new AvroRecordType(fields, schema.name);
case AvroComplex.ENUM:
if (schema.aliases) {
throw new Error(`aliases currently is not supported, schema: ${schema}`);
}
if (!schema.symbols) {
throw new Error(`Required attribute 'symbols' doesn't exist on schema: ${schema}`);
}
return new AvroEnumType(schema.symbols);
case AvroComplex.MAP:
if (!schema.values) {
throw new Error(`Required attribute 'values' doesn't exist on schema: ${schema}`);
}
return new AvroMapType(AvroType.fromSchema(schema.values));
case AvroComplex.ARRAY: // Unused today
case AvroComplex.FIXED: // Unused today
default:
throw new Error(`Unexpected Avro type ${type} in ${schema}`);
}
}
}
class AvroPrimitiveType extends AvroType {
_primitive;
constructor(primitive) {
super();
this._primitive = primitive;
}
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
read(stream, options = {}) {
switch (this._primitive) {
case AvroPrimitive.NULL:
return AvroParser.readNull();
case AvroPrimitive.BOOLEAN:
return AvroParser.readBoolean(stream, options);
case AvroPrimitive.INT:
return AvroParser.readInt(stream, options);
case AvroPrimitive.LONG:
return AvroParser.readLong(stream, options);
case AvroPrimitive.FLOAT:
return AvroParser.readFloat(stream, options);
case AvroPrimitive.DOUBLE:
return AvroParser.readDouble(stream, options);
case AvroPrimitive.BYTES:
return AvroParser.readBytes(stream, options);
case AvroPrimitive.STRING:
return AvroParser.readString(stream, options);
default:
throw new Error("Unknown Avro Primitive");
}
}
}
class AvroEnumType extends AvroType {
_symbols;
constructor(symbols) {
super();
this._symbols = symbols;
}
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
async read(stream, options = {}) {
const value = await AvroParser.readInt(stream, options);
return this._symbols[value];
}
}
class AvroUnionType extends AvroType {
_types;
constructor(types) {
super();
this._types = types;
}
async read(stream, options = {}) {
const typeIndex = await AvroParser.readInt(stream, options);
return this._types[typeIndex].read(stream, options);
}
}
class AvroMapType extends AvroType {
_itemType;
constructor(itemType) {
super();
this._itemType = itemType;
}
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
read(stream, options = {}) {
const readItemMethod = (s, opts) => {
return this._itemType.read(s, opts);
};
return AvroParser.readMap(stream, readItemMethod, options);
}
}
class AvroRecordType extends AvroType {
_name;
_fields;
constructor(fields, name) {
super();
this._fields = fields;
this._name = name;
}
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
async read(stream, options = {}) {
// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types
const record = {};
record["$schema"] = this._name;
for (const key in this._fields) {
if (Object.prototype.hasOwnProperty.call(this._fields, key)) {
record[key] = await this._fields[key].read(stream, options);
}
}
return record;
}
}
//# sourceMappingURL=AvroParser.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/utils/utils.common.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
function arraysEqual(a, b) {
if (a === b)
return true;
if (a == null || b == null)
return false;
if (a.length !== b.length)
return false;
for (let i = 0; i < a.length; ++i) {
if (a[i] !== b[i])
return false;
}
return true;
}
//# sourceMappingURL=utils.common.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/AvroReader.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// TODO: Do a review of non-interfaces
/* eslint-disable @azure/azure-sdk/ts-use-interface-parameters */
class AvroReader {
_dataStream;
_headerStream;
_syncMarker;
_metadata;
_itemType;
_itemsRemainingInBlock;
// Remembers where we started if partial data stream was provided.
_initialBlockOffset;
/// The byte offset within the Avro file (both header and data)
/// of the start of the current block.
_blockOffset;
get blockOffset() {
return this._blockOffset;
}
_objectIndex;
get objectIndex() {
return this._objectIndex;
}
_initialized;
constructor(dataStream, headerStream, currentBlockOffset, indexWithinCurrentBlock) {
this._dataStream = dataStream;
this._headerStream = headerStream || dataStream;
this._initialized = false;
this._blockOffset = currentBlockOffset || 0;
this._objectIndex = indexWithinCurrentBlock || 0;
this._initialBlockOffset = currentBlockOffset || 0;
}
async initialize(options = {}) {
const header = await AvroParser.readFixedBytes(this._headerStream, AVRO_INIT_BYTES.length, {
abortSignal: options.abortSignal,
});
if (!arraysEqual(header, AVRO_INIT_BYTES)) {
throw new Error("Stream is not an Avro file.");
}
// File metadata is written as if defined by the following map schema:
// { "type": "map", "values": "bytes"}
this._metadata = await AvroParser.readMap(this._headerStream, AvroParser.readString, {
abortSignal: options.abortSignal,
});
// Validate codec
const codec = this._metadata[AVRO_CODEC_KEY];
if (!(codec === undefined || codec === null || codec === "null")) {
throw new Error("Codecs are not supported");
}
// The 16-byte, randomly-generated sync marker for this file.
this._syncMarker = await AvroParser.readFixedBytes(this._headerStream, AVRO_SYNC_MARKER_SIZE, {
abortSignal: options.abortSignal,
});
// Parse the schema
const schema = JSON.parse(this._metadata[AVRO_SCHEMA_KEY]);
this._itemType = AvroType.fromSchema(schema);
if (this._blockOffset === 0) {
this._blockOffset = this._initialBlockOffset + this._dataStream.position;
}
this._itemsRemainingInBlock = await AvroParser.readLong(this._dataStream, {
abortSignal: options.abortSignal,
});
// skip block length
await AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal });
this._initialized = true;
if (this._objectIndex && this._objectIndex > 0) {
for (let i = 0; i < this._objectIndex; i++) {
await this._itemType.read(this._dataStream, { abortSignal: options.abortSignal });
this._itemsRemainingInBlock--;
}
}
}
hasNext() {
return !this._initialized || this._itemsRemainingInBlock > 0;
}
async *parseObjects(options = {}) {
if (!this._initialized) {
await this.initialize(options);
}
while (this.hasNext()) {
const result = await this._itemType.read(this._dataStream, {
abortSignal: options.abortSignal,
});
this._itemsRemainingInBlock--;
this._objectIndex++;
if (this._itemsRemainingInBlock === 0) {
const marker = await AvroParser.readFixedBytes(this._dataStream, AVRO_SYNC_MARKER_SIZE, {
abortSignal: options.abortSignal,
});
this._blockOffset = this._initialBlockOffset + this._dataStream.position;
this._objectIndex = 0;
if (!arraysEqual(this._syncMarker, marker)) {
throw new Error("Stream is not a valid Avro file.");
}
try {
this._itemsRemainingInBlock = await AvroParser.readLong(this._dataStream, {
abortSignal: options.abortSignal,
});
}
catch {
// We hit the end of the stream.
this._itemsRemainingInBlock = 0;
}
if (this._itemsRemainingInBlock > 0) {
// Ignore block size
await AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal });
}
}
yield result;
}
}
}
//# sourceMappingURL=AvroReader.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/AvroReadable.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
class AvroReadable {
}
//# sourceMappingURL=AvroReadable.js.map
// EXTERNAL MODULE: external "buffer"
var external_buffer_ = __webpack_require__(181);
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/AvroReadableFromStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const ABORT_ERROR = new AbortError_AbortError("Reading from the avro stream was aborted.");
class AvroReadableFromStream extends AvroReadable {
_position;
_readable;
toUint8Array(data) {
if (typeof data === "string") {
return external_buffer_.Buffer.from(data);
}
return data;
}
constructor(readable) {
super();
this._readable = readable;
this._position = 0;
}
get position() {
return this._position;
}
async read(size, options = {}) {
if (options.abortSignal?.aborted) {
throw ABORT_ERROR;
}
if (size < 0) {
throw new Error(`size parameter should be positive: ${size}`);
}
if (size === 0) {
return new Uint8Array();
}
if (!this._readable.readable) {
throw new Error("Stream no longer readable.");
}
// See if there is already enough data.
const chunk = this._readable.read(size);
if (chunk) {
this._position += chunk.length;
// chunk.length maybe less than desired size if the stream ends.
return this.toUint8Array(chunk);
}
else {
// register callback to wait for enough data to read
return new Promise((resolve, reject) => {
/* eslint-disable @typescript-eslint/no-use-before-define */
const cleanUp = () => {
this._readable.removeListener("readable", readableCallback);
this._readable.removeListener("error", rejectCallback);
this._readable.removeListener("end", rejectCallback);
this._readable.removeListener("close", rejectCallback);
if (options.abortSignal) {
options.abortSignal.removeEventListener("abort", abortHandler);
}
};
const readableCallback = () => {
const callbackChunk = this._readable.read(size);
if (callbackChunk) {
this._position += callbackChunk.length;
cleanUp();
// callbackChunk.length maybe less than desired size if the stream ends.
resolve(this.toUint8Array(callbackChunk));
}
};
const rejectCallback = () => {
cleanUp();
reject();
};
const abortHandler = () => {
cleanUp();
reject(ABORT_ERROR);
};
this._readable.on("readable", readableCallback);
this._readable.once("error", rejectCallback);
this._readable.once("end", rejectCallback);
this._readable.once("close", rejectCallback);
if (options.abortSignal) {
options.abortSignal.addEventListener("abort", abortHandler);
}
/* eslint-enable @typescript-eslint/no-use-before-define */
});
}
}
}
//# sourceMappingURL=AvroReadableFromStream.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/internal-avro/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/BlobQuickQueryStream.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* A Node.js BlobQuickQueryStream will internally parse avro data stream for blob query.
*/
class BlobQuickQueryStream extends external_node_stream_.Readable {
source;
avroReader;
avroIter;
avroPaused = true;
onProgress;
onError;
/**
* Creates an instance of BlobQuickQueryStream.
*
* @param source - The current ReadableStream returned from getter
* @param options -
*/
constructor(source, options = {}) {
super();
this.source = source;
this.onProgress = options.onProgress;
this.onError = options.onError;
this.avroReader = new AvroReader(new AvroReadableFromStream(this.source));
this.avroIter = this.avroReader.parseObjects({ abortSignal: options.abortSignal });
}
_read() {
if (this.avroPaused) {
this.readInternal().catch((err) => {
this.emit("error", err);
});
}
}
async readInternal() {
this.avroPaused = false;
let avroNext;
do {
avroNext = await this.avroIter.next();
if (avroNext.done) {
break;
}
const obj = avroNext.value;
const schema = obj.$schema;
if (typeof schema !== "string") {
throw Error("Missing schema in avro record.");
}
switch (schema) {
case "com.microsoft.azure.storage.queryBlobContents.resultData":
{
const data = obj.data;
if (data instanceof Uint8Array === false) {
throw Error("Invalid data in avro result record.");
}
if (!this.push(Buffer.from(data))) {
this.avroPaused = true;
}
}
break;
case "com.microsoft.azure.storage.queryBlobContents.progress":
{
const bytesScanned = obj.bytesScanned;
if (typeof bytesScanned !== "number") {
throw Error("Invalid bytesScanned in avro progress record.");
}
if (this.onProgress) {
this.onProgress({ loadedBytes: bytesScanned });
}
}
break;
case "com.microsoft.azure.storage.queryBlobContents.end":
if (this.onProgress) {
const totalBytes = obj.totalBytes;
if (typeof totalBytes !== "number") {
throw Error("Invalid totalBytes in avro end record.");
}
this.onProgress({ loadedBytes: totalBytes });
}
this.push(null);
break;
case "com.microsoft.azure.storage.queryBlobContents.error":
if (this.onError) {
const fatal = obj.fatal;
if (typeof fatal !== "boolean") {
throw Error("Invalid fatal in avro error record.");
}
const name = obj.name;
if (typeof name !== "string") {
throw Error("Invalid name in avro error record.");
}
const description = obj.description;
if (typeof description !== "string") {
throw Error("Invalid description in avro error record.");
}
const position = obj.position;
if (typeof position !== "number") {
throw Error("Invalid position in avro error record.");
}
this.onError({
position,
name,
isFatal: fatal,
description,
});
}
break;
default:
throw Error(`Unknown schema ${schema} in avro progress record.`);
}
} while (!avroNext.done && !this.avroPaused);
}
}
//# sourceMappingURL=BlobQuickQueryStream.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobQueryResponse.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* BlobQueryResponse implements BlobDownloadResponseModel interface, and in Node.js runtime it will
* parse avro data returned by blob query.
*/
class BlobQueryResponse {
/**
* Indicates that the service supports
* requests for partial file content.
*
* @readonly
*/
get acceptRanges() {
return this.originalResponse.acceptRanges;
}
/**
* Returns if it was previously specified
* for the file.
*
* @readonly
*/
get cacheControl() {
return this.originalResponse.cacheControl;
}
/**
* Returns the value that was specified
* for the 'x-ms-content-disposition' header and specifies how to process the
* response.
*
* @readonly
*/
get contentDisposition() {
return this.originalResponse.contentDisposition;
}
/**
* Returns the value that was specified
* for the Content-Encoding request header.
*
* @readonly
*/
get contentEncoding() {
return this.originalResponse.contentEncoding;
}
/**
* Returns the value that was specified
* for the Content-Language request header.
*
* @readonly
*/
get contentLanguage() {
return this.originalResponse.contentLanguage;
}
/**
* The current sequence number for a
* page blob. This header is not returned for block blobs or append blobs.
*
* @readonly
*/
get blobSequenceNumber() {
return this.originalResponse.blobSequenceNumber;
}
/**
* The blob's type. Possible values include:
* 'BlockBlob', 'PageBlob', 'AppendBlob'.
*
* @readonly
*/
get blobType() {
return this.originalResponse.blobType;
}
/**
* The number of bytes present in the
* response body.
*
* @readonly
*/
get contentLength() {
return this.originalResponse.contentLength;
}
/**
* If the file has an MD5 hash and the
* request is to read the full file, this response header is returned so that
* the client can check for message content integrity. If the request is to
* read a specified range and the 'x-ms-range-get-content-md5' is set to
* true, then the request returns an MD5 hash for the range, as long as the
* range size is less than or equal to 4 MB. If neither of these sets of
* conditions is true, then no value is returned for the 'Content-MD5'
* header.
*
* @readonly
*/
get contentMD5() {
return this.originalResponse.contentMD5;
}
/**
* Indicates the range of bytes returned if
* the client requested a subset of the file by setting the Range request
* header.
*
* @readonly
*/
get contentRange() {
return this.originalResponse.contentRange;
}
/**
* The content type specified for the file.
* The default content type is 'application/octet-stream'
*
* @readonly
*/
get contentType() {
return this.originalResponse.contentType;
}
/**
* Conclusion time of the last attempted
* Copy File operation where this file was the destination file. This value
* can specify the time of a completed, aborted, or failed copy attempt.
*
* @readonly
*/
get copyCompletedOn() {
return undefined;
}
/**
* String identifier for the last attempted Copy
* File operation where this file was the destination file.
*
* @readonly
*/
get copyId() {
return this.originalResponse.copyId;
}
/**
* Contains the number of bytes copied and
* the total bytes in the source in the last attempted Copy File operation
* where this file was the destination file. Can show between 0 and
* Content-Length bytes copied.
*
* @readonly
*/
get copyProgress() {
return this.originalResponse.copyProgress;
}
/**
* URL up to 2KB in length that specifies the
* source file used in the last attempted Copy File operation where this file
* was the destination file.
*
* @readonly
*/
get copySource() {
return this.originalResponse.copySource;
}
/**
* State of the copy operation
* identified by 'x-ms-copy-id'. Possible values include: 'pending',
* 'success', 'aborted', 'failed'
*
* @readonly
*/
get copyStatus() {
return this.originalResponse.copyStatus;
}
/**
* Only appears when
* x-ms-copy-status is failed or pending. Describes cause of fatal or
* non-fatal copy operation failure.
*
* @readonly
*/
get copyStatusDescription() {
return this.originalResponse.copyStatusDescription;
}
/**
* When a blob is leased,
* specifies whether the lease is of infinite or fixed duration. Possible
* values include: 'infinite', 'fixed'.
*
* @readonly
*/
get leaseDuration() {
return this.originalResponse.leaseDuration;
}
/**
* Lease state of the blob. Possible
* values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
*
* @readonly
*/
get leaseState() {
return this.originalResponse.leaseState;
}
/**
* The current lease status of the
* blob. Possible values include: 'locked', 'unlocked'.
*
* @readonly
*/
get leaseStatus() {
return this.originalResponse.leaseStatus;
}
/**
* A UTC date/time value generated by the service that
* indicates the time at which the response was initiated.
*
* @readonly
*/
get date() {
return this.originalResponse.date;
}
/**
* The number of committed blocks
* present in the blob. This header is returned only for append blobs.
*
* @readonly
*/
get blobCommittedBlockCount() {
return this.originalResponse.blobCommittedBlockCount;
}
/**
* The ETag contains a value that you can use to
* perform operations conditionally, in quotes.
*
* @readonly
*/
get etag() {
return this.originalResponse.etag;
}
/**
* The error code.
*
* @readonly
*/
get errorCode() {
return this.originalResponse.errorCode;
}
/**
* The value of this header is set to
* true if the file data and application metadata are completely encrypted
* using the specified algorithm. Otherwise, the value is set to false (when
* the file is unencrypted, or if only parts of the file/application metadata
* are encrypted).
*
* @readonly
*/
get isServerEncrypted() {
return this.originalResponse.isServerEncrypted;
}
/**
* If the blob has a MD5 hash, and if
* request contains range header (Range or x-ms-range), this response header
* is returned with the value of the whole blob's MD5 value. This value may
* or may not be equal to the value returned in Content-MD5 header, with the
* latter calculated from the requested range.
*
* @readonly
*/
get blobContentMD5() {
return this.originalResponse.blobContentMD5;
}
/**
* Returns the date and time the file was last
* modified. Any operation that modifies the file or its properties updates
* the last modified time.
*
* @readonly
*/
get lastModified() {
return this.originalResponse.lastModified;
}
/**
* A name-value pair
* to associate with a file storage object.
*
* @readonly
*/
get metadata() {
return this.originalResponse.metadata;
}
/**
* This header uniquely identifies the request
* that was made and can be used for troubleshooting the request.
*
* @readonly
*/
get requestId() {
return this.originalResponse.requestId;
}
/**
* If a client request id header is sent in the request, this header will be present in the
* response with the same value.
*
* @readonly
*/
get clientRequestId() {
return this.originalResponse.clientRequestId;
}
/**
* Indicates the version of the File service used
* to execute the request.
*
* @readonly
*/
get version() {
return this.originalResponse.version;
}
/**
* The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
* when the blob was encrypted with a customer-provided key.
*
* @readonly
*/
get encryptionKeySha256() {
return this.originalResponse.encryptionKeySha256;
}
/**
* If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
* true, then the request returns a crc64 for the range, as long as the range size is less than
* or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
* specified in the same request, it will fail with 400(Bad Request)
*/
get contentCrc64() {
return this.originalResponse.contentCrc64;
}
/**
* The response body as a browser Blob.
* Always undefined in node.js.
*
* @readonly
*/
get blobBody() {
return undefined;
}
/**
* The response body as a node.js Readable stream.
* Always undefined in the browser.
*
* It will parse avor data returned by blob query.
*
* @readonly
*/
get readableStreamBody() {
return esm_isNodeLike ? this.blobDownloadStream : undefined;
}
/**
* The HTTP response.
*/
get _response() {
return this.originalResponse._response;
}
originalResponse;
blobDownloadStream;
/**
* Creates an instance of BlobQueryResponse.
*
* @param originalResponse -
* @param options -
*/
constructor(originalResponse, options = {}) {
this.originalResponse = originalResponse;
this.blobDownloadStream = new BlobQuickQueryStream(this.originalResponse.readableStreamBody, options);
}
}
//# sourceMappingURL=BlobQueryResponse.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/models.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Represents the access tier on a blob.
* For detailed information about block blob level tiering see {@link https://learn.microsoft.com/azure/storage/blobs/storage-blob-storage-tiers|Hot, cool and archive storage tiers.}
*/
var BlockBlobTier;
(function (BlockBlobTier) {
/**
* Optimized for storing data that is accessed frequently.
*/
BlockBlobTier["Hot"] = "Hot";
/**
* Optimized for storing data that is infrequently accessed and stored for at least 30 days.
*/
BlockBlobTier["Cool"] = "Cool";
/**
* Optimized for storing data that is rarely accessed.
*/
BlockBlobTier["Cold"] = "Cold";
/**
* Optimized for storing data that is rarely accessed and stored for at least 180 days
* with flexible latency requirements (on the order of hours).
*/
BlockBlobTier["Archive"] = "Archive";
})(BlockBlobTier || (BlockBlobTier = {}));
/**
* Specifies the page blob tier to set the blob to. This is only applicable to page blobs on premium storage accounts.
* Please see {@link https://learn.microsoft.com/azure/storage/storage-premium-storage#scalability-and-performance-targets|here}
* for detailed information on the corresponding IOPS and throughput per PageBlobTier.
*/
var PremiumPageBlobTier;
(function (PremiumPageBlobTier) {
/**
* P4 Tier.
*/
PremiumPageBlobTier["P4"] = "P4";
/**
* P6 Tier.
*/
PremiumPageBlobTier["P6"] = "P6";
/**
* P10 Tier.
*/
PremiumPageBlobTier["P10"] = "P10";
/**
* P15 Tier.
*/
PremiumPageBlobTier["P15"] = "P15";
/**
* P20 Tier.
*/
PremiumPageBlobTier["P20"] = "P20";
/**
* P30 Tier.
*/
PremiumPageBlobTier["P30"] = "P30";
/**
* P40 Tier.
*/
PremiumPageBlobTier["P40"] = "P40";
/**
* P50 Tier.
*/
PremiumPageBlobTier["P50"] = "P50";
/**
* P60 Tier.
*/
PremiumPageBlobTier["P60"] = "P60";
/**
* P70 Tier.
*/
PremiumPageBlobTier["P70"] = "P70";
/**
* P80 Tier.
*/
PremiumPageBlobTier["P80"] = "P80";
})(PremiumPageBlobTier || (PremiumPageBlobTier = {}));
function toAccessTier(tier) {
if (tier === undefined) {
return undefined;
}
return tier; // No more check if string is a valid AccessTier, and left this to underlay logic to decide(service).
}
function ensureCpkIfSpecified(cpk, isHttps) {
if (cpk && !isHttps) {
throw new RangeError("Customer-provided encryption key must be used over HTTPS.");
}
if (cpk && !cpk.encryptionAlgorithm) {
cpk.encryptionAlgorithm = EncryptionAlgorithmAES25;
}
}
/**
* Defines the known cloud audiences for Storage.
*/
var StorageBlobAudience;
(function (StorageBlobAudience) {
/**
* The OAuth scope to use to retrieve an AAD token for Azure Storage.
*/
StorageBlobAudience["StorageOAuthScopes"] = "https://storage.azure.com/.default";
/**
* The OAuth scope to use to retrieve an AAD token for Azure Disk.
*/
StorageBlobAudience["DiskComputeOAuthScopes"] = "https://disk.compute.azure.com/.default";
})(StorageBlobAudience || (StorageBlobAudience = {}));
/**
*
* To get OAuth audience for a storage account for blob service.
*/
function getBlobServiceAccountAudience(storageAccountName) {
return `https://${storageAccountName}.blob.core.windows.net/.default`;
}
//# sourceMappingURL=models.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/PageBlobRangeResponse.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Function that converts PageRange and ClearRange to a common Range object.
* PageRange and ClearRange have start and end while Range offset and count
* this function normalizes to Range.
* @param response - Model PageBlob Range response
*/
function rangeResponseFromModel(response) {
const pageRange = (response._response.parsedBody.pageRange || []).map((x) => ({
offset: x.start,
count: x.end - x.start,
}));
const clearRange = (response._response.parsedBody.clearRange || []).map((x) => ({
offset: x.start,
count: x.end - x.start,
}));
return {
...response,
pageRange,
clearRange,
_response: {
...response._response,
parsedBody: {
pageRange,
clearRange,
},
},
};
}
//# sourceMappingURL=PageBlobRangeResponse.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/logger.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The `@azure/logger` configuration for this package.
* @internal
*/
const logger_logger = esm_createClientLogger("core-lro");
//# sourceMappingURL=logger.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/poller/constants.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The default time interval to wait before sending the next polling request.
*/
const constants_POLL_INTERVAL_IN_MS = 2000;
/**
* The closed set of terminal states.
*/
const terminalStates = ["succeeded", "canceled", "failed"];
//# sourceMappingURL=constants.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/poller/operation.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Deserializes the state
*/
function operation_deserializeState(serializedState) {
try {
return JSON.parse(serializedState).state;
}
catch (e) {
throw new Error(`Unable to deserialize input state: ${serializedState}`);
}
}
function setStateError(inputs) {
const { state, stateProxy, isOperationError } = inputs;
return (error) => {
if (isOperationError(error)) {
stateProxy.setError(state, error);
stateProxy.setFailed(state);
}
throw error;
};
}
function appendReadableErrorMessage(currentMessage, innerMessage) {
let message = currentMessage;
if (message.slice(-1) !== ".") {
message = message + ".";
}
return message + " " + innerMessage;
}
function simplifyError(err) {
let message = err.message;
let code = err.code;
let curErr = err;
while (curErr.innererror) {
curErr = curErr.innererror;
code = curErr.code;
message = appendReadableErrorMessage(message, curErr.message);
}
return {
code,
message,
};
}
function processOperationStatus(result) {
const { state, stateProxy, status, isDone, processResult, getError, response, setErrorAsResult } = result;
switch (status) {
case "succeeded": {
stateProxy.setSucceeded(state);
break;
}
case "failed": {
const err = getError === null || getError === void 0 ? void 0 : getError(response);
let postfix = "";
if (err) {
const { code, message } = simplifyError(err);
postfix = `. ${code}. ${message}`;
}
const errStr = `The long-running operation has failed${postfix}`;
stateProxy.setError(state, new Error(errStr));
stateProxy.setFailed(state);
logger_logger.warning(errStr);
break;
}
case "canceled": {
stateProxy.setCanceled(state);
break;
}
}
if ((isDone === null || isDone === void 0 ? void 0 : isDone(response, state)) ||
(isDone === undefined &&
["succeeded", "canceled"].concat(setErrorAsResult ? [] : ["failed"]).includes(status))) {
stateProxy.setResult(state, buildResult({
response,
state,
processResult,
}));
}
}
function buildResult(inputs) {
const { processResult, response, state } = inputs;
return processResult ? processResult(response, state) : response;
}
/**
* Initiates the long-running operation.
*/
async function operation_initOperation(inputs) {
const { init, stateProxy, processResult, getOperationStatus, withOperationLocation, setErrorAsResult, } = inputs;
const { operationLocation, resourceLocation, metadata, response } = await init();
if (operationLocation)
withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(operationLocation, false);
const config = {
metadata,
operationLocation,
resourceLocation,
};
logger_logger.verbose(`LRO: Operation description:`, config);
const state = stateProxy.initState(config);
const status = getOperationStatus({ response, state, operationLocation });
processOperationStatus({ state, status, stateProxy, response, setErrorAsResult, processResult });
return state;
}
async function pollOperationHelper(inputs) {
const { poll, state, stateProxy, operationLocation, getOperationStatus, getResourceLocation, isOperationError, options, } = inputs;
const response = await poll(operationLocation, options).catch(setStateError({
state,
stateProxy,
isOperationError,
}));
const status = getOperationStatus(response, state);
logger_logger.verbose(`LRO: Status:\n\tPolling from: ${state.config.operationLocation}\n\tOperation status: ${status}\n\tPolling status: ${terminalStates.includes(status) ? "Stopped" : "Running"}`);
if (status === "succeeded") {
const resourceLocation = getResourceLocation(response, state);
if (resourceLocation !== undefined) {
return {
response: await poll(resourceLocation).catch(setStateError({ state, stateProxy, isOperationError })),
status,
};
}
}
return { response, status };
}
/** Polls the long-running operation. */
async function operation_pollOperation(inputs) {
const { poll, state, stateProxy, options, getOperationStatus, getResourceLocation, getOperationLocation, isOperationError, withOperationLocation, getPollingInterval, processResult, getError, updateState, setDelay, isDone, setErrorAsResult, } = inputs;
const { operationLocation } = state.config;
if (operationLocation !== undefined) {
const { response, status } = await pollOperationHelper({
poll,
getOperationStatus,
state,
stateProxy,
operationLocation,
getResourceLocation,
isOperationError,
options,
});
processOperationStatus({
status,
response,
state,
stateProxy,
isDone,
processResult,
getError,
setErrorAsResult,
});
if (!terminalStates.includes(status)) {
const intervalInMs = getPollingInterval === null || getPollingInterval === void 0 ? void 0 : getPollingInterval(response);
if (intervalInMs)
setDelay(intervalInMs);
const location = getOperationLocation === null || getOperationLocation === void 0 ? void 0 : getOperationLocation(response, state);
if (location !== undefined) {
const isUpdated = operationLocation !== location;
state.config.operationLocation = location;
withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(location, isUpdated);
}
else
withOperationLocation === null || withOperationLocation === void 0 ? void 0 : withOperationLocation(operationLocation, false);
}
updateState === null || updateState === void 0 ? void 0 : updateState(state, response);
}
}
//# sourceMappingURL=operation.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/http/operation.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
function getOperationLocationPollingUrl(inputs) {
const { azureAsyncOperation, operationLocation } = inputs;
return operationLocation !== null && operationLocation !== void 0 ? operationLocation : azureAsyncOperation;
}
function getLocationHeader(rawResponse) {
return rawResponse.headers["location"];
}
function getOperationLocationHeader(rawResponse) {
return rawResponse.headers["operation-location"];
}
function getAzureAsyncOperationHeader(rawResponse) {
return rawResponse.headers["azure-asyncoperation"];
}
function findResourceLocation(inputs) {
var _a;
const { location, requestMethod, requestPath, resourceLocationConfig } = inputs;
switch (requestMethod) {
case "PUT": {
return requestPath;
}
case "DELETE": {
return undefined;
}
case "PATCH": {
return (_a = getDefault()) !== null && _a !== void 0 ? _a : requestPath;
}
default: {
return getDefault();
}
}
function getDefault() {
switch (resourceLocationConfig) {
case "azure-async-operation": {
return undefined;
}
case "original-uri": {
return requestPath;
}
case "location":
default: {
return location;
}
}
}
}
function operation_inferLroMode(inputs) {
const { rawResponse, requestMethod, requestPath, resourceLocationConfig } = inputs;
const operationLocation = getOperationLocationHeader(rawResponse);
const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);
const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });
const location = getLocationHeader(rawResponse);
const normalizedRequestMethod = requestMethod === null || requestMethod === void 0 ? void 0 : requestMethod.toLocaleUpperCase();
if (pollingUrl !== undefined) {
return {
mode: "OperationLocation",
operationLocation: pollingUrl,
resourceLocation: findResourceLocation({
requestMethod: normalizedRequestMethod,
location,
requestPath,
resourceLocationConfig,
}),
};
}
else if (location !== undefined) {
return {
mode: "ResourceLocation",
operationLocation: location,
};
}
else if (normalizedRequestMethod === "PUT" && requestPath) {
return {
mode: "Body",
operationLocation: requestPath,
};
}
else {
return undefined;
}
}
function transformStatus(inputs) {
const { status, statusCode } = inputs;
if (typeof status !== "string" && status !== undefined) {
throw new Error(`Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`);
}
switch (status === null || status === void 0 ? void 0 : status.toLocaleLowerCase()) {
case undefined:
return toOperationStatus(statusCode);
case "succeeded":
return "succeeded";
case "failed":
return "failed";
case "running":
case "accepted":
case "started":
case "canceling":
case "cancelling":
return "running";
case "canceled":
case "cancelled":
return "canceled";
default: {
logger_logger.verbose(`LRO: unrecognized operation status: ${status}`);
return status;
}
}
}
function getStatus(rawResponse) {
var _a;
const { status } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
return transformStatus({ status, statusCode: rawResponse.statusCode });
}
function getProvisioningState(rawResponse) {
var _a, _b;
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
const status = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
return transformStatus({ status, statusCode: rawResponse.statusCode });
}
function toOperationStatus(statusCode) {
if (statusCode === 202) {
return "running";
}
else if (statusCode < 300) {
return "succeeded";
}
else {
return "failed";
}
}
function operation_parseRetryAfter({ rawResponse }) {
const retryAfter = rawResponse.headers["retry-after"];
if (retryAfter !== undefined) {
// Retry-After header value is either in HTTP date format, or in seconds
const retryAfterInSeconds = parseInt(retryAfter);
return isNaN(retryAfterInSeconds)
? calculatePollingIntervalFromDate(new Date(retryAfter))
: retryAfterInSeconds * 1000;
}
return undefined;
}
function operation_getErrorFromResponse(response) {
const error = accessBodyProperty(response, "error");
if (!error) {
logger_logger.warning(`The long-running operation failed but there is no error property in the response's body`);
return;
}
if (!error.code || !error.message) {
logger_logger.warning(`The long-running operation failed but the error property in the response's body doesn't contain code or message`);
return;
}
return error;
}
function calculatePollingIntervalFromDate(retryAfterDate) {
const timeNow = Math.floor(new Date().getTime());
const retryAfterTime = retryAfterDate.getTime();
if (timeNow < retryAfterTime) {
return retryAfterTime - timeNow;
}
return undefined;
}
function operation_getStatusFromInitialResponse(inputs) {
const { response, state, operationLocation } = inputs;
function helper() {
var _a;
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
switch (mode) {
case undefined:
return toOperationStatus(response.rawResponse.statusCode);
case "Body":
return operation_getOperationStatus(response, state);
default:
return "running";
}
}
const status = helper();
return status === "running" && operationLocation === undefined ? "succeeded" : status;
}
/**
* Initiates the long-running operation.
*/
async function initHttpOperation(inputs) {
const { stateProxy, resourceLocationConfig, processResult, lro, setErrorAsResult } = inputs;
return operation_initOperation({
init: async () => {
const response = await lro.sendInitialRequest();
const config = operation_inferLroMode({
rawResponse: response.rawResponse,
requestPath: lro.requestPath,
requestMethod: lro.requestMethod,
resourceLocationConfig,
});
return Object.assign({ response, operationLocation: config === null || config === void 0 ? void 0 : config.operationLocation, resourceLocation: config === null || config === void 0 ? void 0 : config.resourceLocation }, ((config === null || config === void 0 ? void 0 : config.mode) ? { metadata: { mode: config.mode } } : {}));
},
stateProxy,
processResult: processResult
? ({ flatResponse }, state) => processResult(flatResponse, state)
: ({ flatResponse }) => flatResponse,
getOperationStatus: operation_getStatusFromInitialResponse,
setErrorAsResult,
});
}
function operation_getOperationLocation({ rawResponse }, state) {
var _a;
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
switch (mode) {
case "OperationLocation": {
return getOperationLocationPollingUrl({
operationLocation: getOperationLocationHeader(rawResponse),
azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),
});
}
case "ResourceLocation": {
return getLocationHeader(rawResponse);
}
case "Body":
default: {
return undefined;
}
}
}
function operation_getOperationStatus({ rawResponse }, state) {
var _a;
const mode = (_a = state.config.metadata) === null || _a === void 0 ? void 0 : _a["mode"];
switch (mode) {
case "OperationLocation": {
return getStatus(rawResponse);
}
case "ResourceLocation": {
return toOperationStatus(rawResponse.statusCode);
}
case "Body": {
return getProvisioningState(rawResponse);
}
default:
throw new Error(`Internal error: Unexpected operation mode: ${mode}`);
}
}
function accessBodyProperty({ flatResponse, rawResponse }, prop) {
var _a, _b;
return (_a = flatResponse === null || flatResponse === void 0 ? void 0 : flatResponse[prop]) !== null && _a !== void 0 ? _a : (_b = rawResponse.body) === null || _b === void 0 ? void 0 : _b[prop];
}
function operation_getResourceLocation(res, state) {
const loc = accessBodyProperty(res, "resourceLocation");
if (loc && typeof loc === "string") {
state.config.resourceLocation = loc;
}
return state.config.resourceLocation;
}
function operation_isOperationError(e) {
return e.name === "RestError";
}
/** Polls the long-running operation. */
async function pollHttpOperation(inputs) {
const { lro, stateProxy, options, processResult, updateState, setDelay, state, setErrorAsResult, } = inputs;
return operation_pollOperation({
state,
stateProxy,
setDelay,
processResult: processResult
? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)
: ({ flatResponse }) => flatResponse,
getError: operation_getErrorFromResponse,
updateState,
getPollingInterval: operation_parseRetryAfter,
getOperationLocation: operation_getOperationLocation,
getOperationStatus: operation_getOperationStatus,
isOperationError: operation_isOperationError,
getResourceLocation: operation_getResourceLocation,
options,
/**
* The expansion here is intentional because `lro` could be an object that
* references an inner this, so we need to preserve a reference to it.
*/
poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions),
setErrorAsResult,
});
}
//# sourceMappingURL=operation.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/poller/poller.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
const createStateProxy = () => ({
/**
* The state at this point is created to be of type OperationState<TResult>.
* It will be updated later to be of type TState when the
* customer-provided callback, `updateState`, is called during polling.
*/
initState: (config) => ({ status: "running", config }),
setCanceled: (state) => (state.status = "canceled"),
setError: (state, error) => (state.error = error),
setResult: (state, result) => (state.result = result),
setRunning: (state) => (state.status = "running"),
setSucceeded: (state) => (state.status = "succeeded"),
setFailed: (state) => (state.status = "failed"),
getError: (state) => state.error,
getResult: (state) => state.result,
isCanceled: (state) => state.status === "canceled",
isFailed: (state) => state.status === "failed",
isRunning: (state) => state.status === "running",
isSucceeded: (state) => state.status === "succeeded",
});
/**
* Returns a poller factory.
*/
function poller_buildCreatePoller(inputs) {
const { getOperationLocation, getStatusFromInitialResponse, getStatusFromPollResponse, isOperationError, getResourceLocation, getPollingInterval, getError, resolveOnUnsuccessful, } = inputs;
return async ({ init, poll }, options) => {
const { processResult, updateState, withOperationLocation: withOperationLocationCallback, intervalInMs = POLL_INTERVAL_IN_MS, restoreFrom, } = options || {};
const stateProxy = createStateProxy();
const withOperationLocation = withOperationLocationCallback
? (() => {
let called = false;
return (operationLocation, isUpdated) => {
if (isUpdated)
withOperationLocationCallback(operationLocation);
else if (!called)
withOperationLocationCallback(operationLocation);
called = true;
};
})()
: undefined;
const state = restoreFrom
? deserializeState(restoreFrom)
: await initOperation({
init,
stateProxy,
processResult,
getOperationStatus: getStatusFromInitialResponse,
withOperationLocation,
setErrorAsResult: !resolveOnUnsuccessful,
});
let resultPromise;
const abortController = new AbortController();
const handlers = new Map();
const handleProgressEvents = async () => handlers.forEach((h) => h(state));
const cancelErrMsg = "Operation was canceled";
let currentPollIntervalInMs = intervalInMs;
const poller = {
getOperationState: () => state,
getResult: () => state.result,
isDone: () => ["succeeded", "failed", "canceled"].includes(state.status),
isStopped: () => resultPromise === undefined,
stopPolling: () => {
abortController.abort();
},
toString: () => JSON.stringify({
state,
}),
onProgress: (callback) => {
const s = Symbol();
handlers.set(s, callback);
return () => handlers.delete(s);
},
pollUntilDone: (pollOptions) => (resultPromise !== null && resultPromise !== void 0 ? resultPromise : (resultPromise = (async () => {
const { abortSignal: inputAbortSignal } = pollOptions || {};
// In the future we can use AbortSignal.any() instead
function abortListener() {
abortController.abort();
}
const abortSignal = abortController.signal;
if (inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.aborted) {
abortController.abort();
}
else if (!abortSignal.aborted) {
inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.addEventListener("abort", abortListener, { once: true });
}
try {
if (!poller.isDone()) {
await poller.poll({ abortSignal });
while (!poller.isDone()) {
await delay(currentPollIntervalInMs, { abortSignal });
await poller.poll({ abortSignal });
}
}
}
finally {
inputAbortSignal === null || inputAbortSignal === void 0 ? void 0 : inputAbortSignal.removeEventListener("abort", abortListener);
}
if (resolveOnUnsuccessful) {
return poller.getResult();
}
else {
switch (state.status) {
case "succeeded":
return poller.getResult();
case "canceled":
throw new Error(cancelErrMsg);
case "failed":
throw state.error;
case "notStarted":
case "running":
throw new Error(`Polling completed without succeeding or failing`);
}
}
})().finally(() => {
resultPromise = undefined;
}))),
async poll(pollOptions) {
if (resolveOnUnsuccessful) {
if (poller.isDone())
return;
}
else {
switch (state.status) {
case "succeeded":
return;
case "canceled":
throw new Error(cancelErrMsg);
case "failed":
throw state.error;
}
}
await pollOperation({
poll,
state,
stateProxy,
getOperationLocation,
isOperationError,
withOperationLocation,
getPollingInterval,
getOperationStatus: getStatusFromPollResponse,
getResourceLocation,
processResult,
getError,
updateState,
options: pollOptions,
setDelay: (pollIntervalInMs) => {
currentPollIntervalInMs = pollIntervalInMs;
},
setErrorAsResult: !resolveOnUnsuccessful,
});
await handleProgressEvents();
if (!resolveOnUnsuccessful) {
switch (state.status) {
case "canceled":
throw new Error(cancelErrMsg);
case "failed":
throw state.error;
}
}
},
};
return poller;
};
}
//# sourceMappingURL=poller.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/http/poller.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Creates a poller that can be used to poll a long-running operation.
* @param lro - Description of the long-running operation
* @param options - options to configure the poller
* @returns an initialized poller
*/
async function createHttpPoller(lro, options) {
const { resourceLocationConfig, intervalInMs, processResult, restoreFrom, updateState, withOperationLocation, resolveOnUnsuccessful = false, } = options || {};
return buildCreatePoller({
getStatusFromInitialResponse,
getStatusFromPollResponse: getOperationStatus,
isOperationError,
getOperationLocation,
getResourceLocation,
getPollingInterval: parseRetryAfter,
getError: getErrorFromResponse,
resolveOnUnsuccessful,
})({
init: async () => {
const response = await lro.sendInitialRequest();
const config = inferLroMode({
rawResponse: response.rawResponse,
requestPath: lro.requestPath,
requestMethod: lro.requestMethod,
resourceLocationConfig,
});
return Object.assign({ response, operationLocation: config === null || config === void 0 ? void 0 : config.operationLocation, resourceLocation: config === null || config === void 0 ? void 0 : config.resourceLocation }, ((config === null || config === void 0 ? void 0 : config.mode) ? { metadata: { mode: config.mode } } : {}));
},
poll: lro.sendPollRequest,
}, {
intervalInMs,
withOperationLocation,
restoreFrom,
updateState,
processResult: processResult
? ({ flatResponse }, state) => processResult(flatResponse, state)
: ({ flatResponse }) => flatResponse,
});
}
//# sourceMappingURL=poller.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/legacy/lroEngine/operation.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
const operation_createStateProxy = () => ({
initState: (config) => ({ config, isStarted: true }),
setCanceled: (state) => (state.isCancelled = true),
setError: (state, error) => (state.error = error),
setResult: (state, result) => (state.result = result),
setRunning: (state) => (state.isStarted = true),
setSucceeded: (state) => (state.isCompleted = true),
setFailed: () => {
/** empty body */
},
getError: (state) => state.error,
getResult: (state) => state.result,
isCanceled: (state) => !!state.isCancelled,
isFailed: (state) => !!state.error,
isRunning: (state) => !!state.isStarted,
isSucceeded: (state) => Boolean(state.isCompleted && !state.isCancelled && !state.error),
});
class GenericPollOperation {
constructor(state, lro, setErrorAsResult, lroResourceLocationConfig, processResult, updateState, isDone) {
this.state = state;
this.lro = lro;
this.setErrorAsResult = setErrorAsResult;
this.lroResourceLocationConfig = lroResourceLocationConfig;
this.processResult = processResult;
this.updateState = updateState;
this.isDone = isDone;
}
setPollerConfig(pollerConfig) {
this.pollerConfig = pollerConfig;
}
async update(options) {
var _a;
const stateProxy = operation_createStateProxy();
if (!this.state.isStarted) {
this.state = Object.assign(Object.assign({}, this.state), (await initHttpOperation({
lro: this.lro,
stateProxy,
resourceLocationConfig: this.lroResourceLocationConfig,
processResult: this.processResult,
setErrorAsResult: this.setErrorAsResult,
})));
}
const updateState = this.updateState;
const isDone = this.isDone;
if (!this.state.isCompleted && this.state.error === undefined) {
await pollHttpOperation({
lro: this.lro,
state: this.state,
stateProxy,
processResult: this.processResult,
updateState: updateState
? (state, { rawResponse }) => updateState(state, rawResponse)
: undefined,
isDone: isDone
? ({ flatResponse }, state) => isDone(flatResponse, state)
: undefined,
options,
setDelay: (intervalInMs) => {
this.pollerConfig.intervalInMs = intervalInMs;
},
setErrorAsResult: this.setErrorAsResult,
});
}
(_a = options === null || options === void 0 ? void 0 : options.fireProgress) === null || _a === void 0 ? void 0 : _a.call(options, this.state);
return this;
}
async cancel() {
logger_logger.error("`cancelOperation` is deprecated because it wasn't implemented");
return this;
}
/**
* Serializes the Poller operation.
*/
toString() {
return JSON.stringify({
state: this.state,
});
}
}
//# sourceMappingURL=operation.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/legacy/poller.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* When a poller is manually stopped through the `stopPolling` method,
* the poller will be rejected with an instance of the PollerStoppedError.
*/
class PollerStoppedError extends Error {
constructor(message) {
super(message);
this.name = "PollerStoppedError";
Object.setPrototypeOf(this, PollerStoppedError.prototype);
}
}
/**
* When the operation is cancelled, the poller will be rejected with an instance
* of the PollerCancelledError.
*/
class PollerCancelledError extends Error {
constructor(message) {
super(message);
this.name = "PollerCancelledError";
Object.setPrototypeOf(this, PollerCancelledError.prototype);
}
}
/**
* A class that represents the definition of a program that polls through consecutive requests
* until it reaches a state of completion.
*
* A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed.
* It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes.
* Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation.
*
* ```ts
* const poller = new MyPoller();
*
* // Polling just once:
* await poller.poll();
*
* // We can try to cancel the request here, by calling:
* //
* // await poller.cancelOperation();
* //
*
* // Getting the final result:
* const result = await poller.pollUntilDone();
* ```
*
* The Poller is defined by two types, a type representing the state of the poller, which
* must include a basic set of properties from `PollOperationState<TResult>`,
* and a return type defined by `TResult`, which can be anything.
*
* The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having
* to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type.
*
* ```ts
* class Client {
* public async makePoller: PollerLike<MyOperationState, MyResult> {
* const poller = new MyPoller({});
* // It might be preferred to return the poller after the first request is made,
* // so that some information can be obtained right away.
* await poller.poll();
* return poller;
* }
* }
*
* const poller: PollerLike<MyOperationState, MyResult> = myClient.makePoller();
* ```
*
* A poller can be created through its constructor, then it can be polled until it's completed.
* At any point in time, the state of the poller can be obtained without delay through the getOperationState method.
* At any point in time, the intermediate forms of the result type can be requested without delay.
* Once the underlying operation is marked as completed, the poller will stop and the final value will be returned.
*
* ```ts
* const poller = myClient.makePoller();
* const state: MyOperationState = poller.getOperationState();
*
* // The intermediate result can be obtained at any time.
* const result: MyResult | undefined = poller.getResult();
*
* // The final result can only be obtained after the poller finishes.
* const result: MyResult = await poller.pollUntilDone();
* ```
*
*/
// eslint-disable-next-line no-use-before-define
class Poller {
/**
* A poller needs to be initialized by passing in at least the basic properties of the `PollOperation<TState, TResult>`.
*
* When writing an implementation of a Poller, this implementation needs to deal with the initialization
* of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's
* operation has already been defined, at least its basic properties. The code below shows how to approach
* the definition of the constructor of a new custom poller.
*
* ```ts
* export class MyPoller extends Poller<MyOperationState, string> {
* constructor({
* // Anything you might need outside of the basics
* }) {
* let state: MyOperationState = {
* privateProperty: private,
* publicProperty: public,
* };
*
* const operation = {
* state,
* update,
* cancel,
* toString
* }
*
* // Sending the operation to the parent's constructor.
* super(operation);
*
* // You can assign more local properties here.
* }
* }
* ```
*
* Inside of this constructor, a new promise is created. This will be used to
* tell the user when the poller finishes (see `pollUntilDone()`). The promise's
* resolve and reject methods are also used internally to control when to resolve
* or reject anyone waiting for the poller to finish.
*
* The constructor of a custom implementation of a poller is where any serialized version of
* a previous poller's operation should be deserialized into the operation sent to the
* base constructor. For example:
*
* ```ts
* export class MyPoller extends Poller<MyOperationState, string> {
* constructor(
* baseOperation: string | undefined
* ) {
* let state: MyOperationState = {};
* if (baseOperation) {
* state = {
* ...JSON.parse(baseOperation).state,
* ...state
* };
* }
* const operation = {
* state,
* // ...
* }
* super(operation);
* }
* }
* ```
*
* @param operation - Must contain the basic properties of `PollOperation<State, TResult>`.
*/
constructor(operation) {
/** controls whether to throw an error if the operation failed or was canceled. */
this.resolveOnUnsuccessful = false;
this.stopped = true;
this.pollProgressCallbacks = [];
this.operation = operation;
this.promise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
// This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown.
// The above warning would get thrown if `poller.poll` is called, it returns an error,
// and pullUntilDone did not have a .catch or await try/catch on it's return value.
this.promise.catch(() => {
/* intentionally blank */
});
}
/**
* Starts a loop that will break only if the poller is done
* or if the poller is stopped.
*/
async startPolling(pollOptions = {}) {
if (this.stopped) {
this.stopped = false;
}
while (!this.isStopped() && !this.isDone()) {
await this.poll(pollOptions);
await this.delay();
}
}
/**
* pollOnce does one polling, by calling to the update method of the underlying
* poll operation to make any relevant change effective.
*
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
*
* @param options - Optional properties passed to the operation's update method.
*/
async pollOnce(options = {}) {
if (!this.isDone()) {
this.operation = await this.operation.update({
abortSignal: options.abortSignal,
fireProgress: this.fireProgress.bind(this),
});
}
this.processUpdatedState();
}
/**
* fireProgress calls the functions passed in via onProgress the method of the poller.
*
* It loops over all of the callbacks received from onProgress, and executes them, sending them
* the current operation state.
*
* @param state - The current operation state.
*/
fireProgress(state) {
for (const callback of this.pollProgressCallbacks) {
callback(state);
}
}
/**
* Invokes the underlying operation's cancel method.
*/
async cancelOnce(options = {}) {
this.operation = await this.operation.cancel(options);
}
/**
* Returns a promise that will resolve once a single polling request finishes.
* It does this by calling the update method of the Poller's operation.
*
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
*
* @param options - Optional properties passed to the operation's update method.
*/
poll(options = {}) {
if (!this.pollOncePromise) {
this.pollOncePromise = this.pollOnce(options);
const clearPollOncePromise = () => {
this.pollOncePromise = undefined;
};
this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject);
}
return this.pollOncePromise;
}
processUpdatedState() {
if (this.operation.state.error) {
this.stopped = true;
if (!this.resolveOnUnsuccessful) {
this.reject(this.operation.state.error);
throw this.operation.state.error;
}
}
if (this.operation.state.isCancelled) {
this.stopped = true;
if (!this.resolveOnUnsuccessful) {
const error = new PollerCancelledError("Operation was canceled");
this.reject(error);
throw error;
}
}
if (this.isDone() && this.resolve) {
// If the poller has finished polling, this means we now have a result.
// However, it can be the case that TResult is instantiated to void, so
// we are not expecting a result anyway. To assert that we might not
// have a result eventually after finishing polling, we cast the result
// to TResult.
this.resolve(this.getResult());
}
}
/**
* Returns a promise that will resolve once the underlying operation is completed.
*/
async pollUntilDone(pollOptions = {}) {
if (this.stopped) {
this.startPolling(pollOptions).catch(this.reject);
}
// This is needed because the state could have been updated by
// `cancelOperation`, e.g. the operation is canceled or an error occurred.
this.processUpdatedState();
return this.promise;
}
/**
* Invokes the provided callback after each polling is completed,
* sending the current state of the poller's operation.
*
* It returns a method that can be used to stop receiving updates on the given callback function.
*/
onProgress(callback) {
this.pollProgressCallbacks.push(callback);
return () => {
this.pollProgressCallbacks = this.pollProgressCallbacks.filter((c) => c !== callback);
};
}
/**
* Returns true if the poller has finished polling.
*/
isDone() {
const state = this.operation.state;
return Boolean(state.isCompleted || state.isCancelled || state.error);
}
/**
* Stops the poller from continuing to poll.
*/
stopPolling() {
if (!this.stopped) {
this.stopped = true;
if (this.reject) {
this.reject(new PollerStoppedError("This poller is already stopped"));
}
}
}
/**
* Returns true if the poller is stopped.
*/
isStopped() {
return this.stopped;
}
/**
* Attempts to cancel the underlying operation.
*
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
*
* If it's called again before it finishes, it will throw an error.
*
* @param options - Optional properties passed to the operation's update method.
*/
cancelOperation(options = {}) {
if (!this.cancelPromise) {
this.cancelPromise = this.cancelOnce(options);
}
else if (options.abortSignal) {
throw new Error("A cancel request is currently pending");
}
return this.cancelPromise;
}
/**
* Returns the state of the operation.
*
* Even though TState will be the same type inside any of the methods of any extension of the Poller class,
* implementations of the pollers can customize what's shared with the public by writing their own
* version of the `getOperationState` method, and by defining two types, one representing the internal state of the poller
* and a public type representing a safe to share subset of the properties of the internal state.
* Their definition of getOperationState can then return their public type.
*
* Example:
*
* ```ts
* // Let's say we have our poller's operation state defined as:
* interface MyOperationState extends PollOperationState<ResultType> {
* privateProperty?: string;
* publicProperty?: string;
* }
*
* // To allow us to have a true separation of public and private state, we have to define another interface:
* interface PublicState extends PollOperationState<ResultType> {
* publicProperty?: string;
* }
*
* // Then, we define our Poller as follows:
* export class MyPoller extends Poller<MyOperationState, ResultType> {
* // ... More content is needed here ...
*
* public getOperationState(): PublicState {
* const state: PublicState = this.operation.state;
* return {
* // Properties from PollOperationState<TResult>
* isStarted: state.isStarted,
* isCompleted: state.isCompleted,
* isCancelled: state.isCancelled,
* error: state.error,
* result: state.result,
*
* // The only other property needed by PublicState.
* publicProperty: state.publicProperty
* }
* }
* }
* ```
*
* You can see this in the tests of this repository, go to the file:
* `../test/utils/testPoller.ts`
* and look for the getOperationState implementation.
*/
getOperationState() {
return this.operation.state;
}
/**
* Returns the result value of the operation,
* regardless of the state of the poller.
* It can return undefined or an incomplete form of the final TResult value
* depending on the implementation.
*/
getResult() {
const state = this.operation.state;
return state.result;
}
/**
* Returns a serialized version of the poller's operation
* by invoking the operation's toString method.
*/
toString() {
return this.operation.toString();
}
}
//# sourceMappingURL=poller.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/legacy/lroEngine/lroEngine.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The LRO Engine, a class that performs polling.
*/
class LroEngine extends Poller {
constructor(lro, options) {
const { intervalInMs = constants_POLL_INTERVAL_IN_MS, resumeFrom, resolveOnUnsuccessful = false, isDone, lroResourceLocationConfig, processResult, updateState, } = options || {};
const state = resumeFrom
? operation_deserializeState(resumeFrom)
: {};
const operation = new GenericPollOperation(state, lro, !resolveOnUnsuccessful, lroResourceLocationConfig, processResult, updateState, isDone);
super(operation);
this.resolveOnUnsuccessful = resolveOnUnsuccessful;
this.config = { intervalInMs: intervalInMs };
operation.setPollerConfig(this.config);
}
/**
* The method used by the poller to wait before attempting to update its operation.
*/
delay() {
return new Promise((resolve) => setTimeout(() => resolve(), this.config.intervalInMs));
}
}
//# sourceMappingURL=lroEngine.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/legacy/lroEngine/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/core-lro/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* This can be uncommented to expose the protocol-agnostic poller
*/
// export {
// BuildCreatePollerOptions,
// Operation,
// CreatePollerOptions,
// OperationConfig,
// RestorableOperationState,
// } from "./poller/models";
// export { buildCreatePoller } from "./poller/poller";
/** legacy */
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/pollers/BlobStartCopyFromUrlPoller.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* This is the poller returned by {@link BlobClient.beginCopyFromURL}.
* This can not be instantiated directly outside of this package.
*
* @hidden
*/
class BlobBeginCopyFromUrlPoller extends Poller {
intervalInMs;
constructor(options) {
const { blobClient, copySource, intervalInMs = 15000, onProgress, resumeFrom, startCopyFromURLOptions, } = options;
let state;
if (resumeFrom) {
state = JSON.parse(resumeFrom).state;
}
const operation = makeBlobBeginCopyFromURLPollOperation({
...state,
blobClient,
copySource,
startCopyFromURLOptions,
});
super(operation);
if (typeof onProgress === "function") {
this.onProgress(onProgress);
}
this.intervalInMs = intervalInMs;
}
delay() {
return delay_delay(this.intervalInMs);
}
}
/**
* Note: Intentionally using function expression over arrow function expression
* so that the function can be invoked with a different context.
* This affects what `this` refers to.
* @hidden
*/
const cancel = async function cancel(options = {}) {
const state = this.state;
const { copyId } = state;
if (state.isCompleted) {
return makeBlobBeginCopyFromURLPollOperation(state);
}
if (!copyId) {
state.isCancelled = true;
return makeBlobBeginCopyFromURLPollOperation(state);
}
// if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
await state.blobClient.abortCopyFromURL(copyId, {
abortSignal: options.abortSignal,
});
state.isCancelled = true;
return makeBlobBeginCopyFromURLPollOperation(state);
};
/**
* Note: Intentionally using function expression over arrow function expression
* so that the function can be invoked with a different context.
* This affects what `this` refers to.
* @hidden
*/
const update = async function update(options = {}) {
const state = this.state;
const { blobClient, copySource, startCopyFromURLOptions } = state;
if (!state.isStarted) {
state.isStarted = true;
const result = await blobClient.startCopyFromURL(copySource, startCopyFromURLOptions);
// copyId is needed to abort
state.copyId = result.copyId;
if (result.copyStatus === "success") {
state.result = result;
state.isCompleted = true;
}
}
else if (!state.isCompleted) {
try {
const result = await state.blobClient.getProperties({ abortSignal: options.abortSignal });
const { copyStatus, copyProgress } = result;
const prevCopyProgress = state.copyProgress;
if (copyProgress) {
state.copyProgress = copyProgress;
}
if (copyStatus === "pending" &&
copyProgress !== prevCopyProgress &&
typeof options.fireProgress === "function") {
// trigger in setTimeout, or swallow error?
options.fireProgress(state);
}
else if (copyStatus === "success") {
state.result = result;
state.isCompleted = true;
}
else if (copyStatus === "failed") {
state.error = new Error(`Blob copy failed with reason: "${result.copyStatusDescription || "unknown"}"`);
state.isCompleted = true;
}
}
catch (err) {
state.error = err;
state.isCompleted = true;
}
}
return makeBlobBeginCopyFromURLPollOperation(state);
};
/**
* Note: Intentionally using function expression over arrow function expression
* so that the function can be invoked with a different context.
* This affects what `this` refers to.
* @hidden
*/
const BlobStartCopyFromUrlPoller_toString = function toString() {
return JSON.stringify({ state: this.state }, (key, value) => {
// remove blobClient from serialized state since a client can't be hydrated from this info.
if (key === "blobClient") {
return undefined;
}
return value;
});
};
/**
* Creates a poll operation given the provided state.
* @hidden
*/
function makeBlobBeginCopyFromURLPollOperation(state) {
return {
state: { ...state },
cancel,
toString: BlobStartCopyFromUrlPoller_toString,
update,
};
}
//# sourceMappingURL=BlobStartCopyFromUrlPoller.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/Range.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Generate a range string. For example:
*
* "bytes=255-" or "bytes=0-511"
*
* @param iRange -
*/
function rangeToString(iRange) {
if (iRange.offset < 0) {
throw new RangeError(`Range.offset cannot be smaller than 0.`);
}
if (iRange.count && iRange.count <= 0) {
throw new RangeError(`Range.count must be larger than 0. Leave it undefined if you want a range from offset to the end.`);
}
return iRange.count
? `bytes=${iRange.offset}-${iRange.offset + iRange.count - 1}`
: `bytes=${iRange.offset}-`;
}
//# sourceMappingURL=Range.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/Batch.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// In browser, during webpack or browserify bundling, this module will be replaced by 'events'
// https://github.com/Gozala/events
/**
* States for Batch.
*/
var BatchStates;
(function (BatchStates) {
BatchStates[BatchStates["Good"] = 0] = "Good";
BatchStates[BatchStates["Error"] = 1] = "Error";
})(BatchStates || (BatchStates = {}));
/**
* Batch provides basic parallel execution with concurrency limits.
* Will stop execute left operations when one of the executed operation throws an error.
* But Batch cannot cancel ongoing operations, you need to cancel them by yourself.
*/
class Batch {
/**
* Concurrency. Must be lager than 0.
*/
concurrency;
/**
* Number of active operations under execution.
*/
actives = 0;
/**
* Number of completed operations under execution.
*/
completed = 0;
/**
* Offset of next operation to be executed.
*/
offset = 0;
/**
* Operation array to be executed.
*/
operations = [];
/**
* States of Batch. When an error happens, state will turn into error.
* Batch will stop execute left operations.
*/
state = BatchStates.Good;
/**
* A private emitter used to pass events inside this class.
*/
emitter;
/**
* Creates an instance of Batch.
* @param concurrency -
*/
constructor(concurrency = 5) {
if (concurrency < 1) {
throw new RangeError("concurrency must be larger than 0");
}
this.concurrency = concurrency;
this.emitter = new external_events_.EventEmitter();
}
/**
* Add a operation into queue.
*
* @param operation -
*/
addOperation(operation) {
this.operations.push(async () => {
try {
this.actives++;
await operation();
this.actives--;
this.completed++;
this.parallelExecute();
}
catch (error) {
this.emitter.emit("error", error);
}
});
}
/**
* Start execute operations in the queue.
*
*/
async do() {
if (this.operations.length === 0) {
return Promise.resolve();
}
this.parallelExecute();
return new Promise((resolve, reject) => {
this.emitter.on("finish", resolve);
this.emitter.on("error", (error) => {
this.state = BatchStates.Error;
reject(error);
});
});
}
/**
* Get next operation to be executed. Return null when reaching ends.
*
*/
nextOperation() {
if (this.offset < this.operations.length) {
return this.operations[this.offset++];
}
return null;
}
/**
* Start execute operations. One one the most important difference between
* this method with do() is that do() wraps as an sync method.
*
*/
parallelExecute() {
if (this.state === BatchStates.Error) {
return;
}
if (this.completed >= this.operations.length) {
this.emitter.emit("finish");
return;
}
while (this.actives < this.concurrency) {
const operation = this.nextOperation();
if (operation) {
operation();
}
else {
return;
}
}
}
}
//# sourceMappingURL=Batch.js.map
// EXTERNAL MODULE: external "node:fs"
var external_node_fs_ = __webpack_require__(3024);
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/utils.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Reads a readable stream into buffer. Fill the buffer from offset to end.
*
* @param stream - A Node.js Readable stream
* @param buffer - Buffer to be filled, length must greater than or equal to offset
* @param offset - From which position in the buffer to be filled, inclusive
* @param end - To which position in the buffer to be filled, exclusive
* @param encoding - Encoding of the Readable stream
*/
async function streamToBuffer(stream, buffer, offset, end, encoding) {
let pos = 0; // Position in stream
const count = end - offset; // Total amount of data needed in stream
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject(new Error(`The operation cannot be completed in timeout.`)), REQUEST_TIMEOUT);
stream.on("readable", () => {
// Already filled the requested amount; ignore any further `readable` events.
if (pos >= count) {
clearTimeout(timeout);
resolve();
return;
}
// Drain all currently-buffered chunks. Required since Node.js v26, where
// `stream.read()` returns one buffered chunk at a time instead of the
// concatenation of all queued data (see nodejs/node#60441).
let chunk;
while ((chunk = stream.read()) !== null) {
if (typeof chunk === "string") {
chunk = Buffer.from(chunk, encoding);
}
// How much data needed in this chunk
const chunkLength = pos + chunk.length > count ? count - pos : chunk.length;
buffer.fill(chunk.slice(0, chunkLength), offset + pos, offset + pos + chunkLength);
pos += chunkLength;
if (pos >= count) {
clearTimeout(timeout);
resolve();
return;
}
}
});
stream.on("end", () => {
clearTimeout(timeout);
if (pos < count) {
reject(new Error(`Stream drains before getting enough data needed. Data read: ${pos}, data need: ${count}`));
}
resolve();
});
stream.on("error", (msg) => {
clearTimeout(timeout);
reject(msg);
});
});
}
/**
* Reads a readable stream into buffer entirely.
*
* @param stream - A Node.js Readable stream
* @param buffer - Buffer to be filled, length must greater than or equal to offset
* @param encoding - Encoding of the Readable stream
* @returns with the count of bytes read.
* @throws `RangeError` If buffer size is not big enough.
*/
async function streamToBuffer2(stream, buffer, encoding) {
let pos = 0; // Position in stream
const bufferSize = buffer.length;
return new Promise((resolve, reject) => {
stream.on("readable", () => {
// Drain all currently-buffered chunks. Required since Node.js v26, where
// `stream.read()` returns one buffered chunk at a time instead of the
// concatenation of all queued data (see nodejs/node#60441).
let chunk;
while ((chunk = stream.read()) !== null) {
if (typeof chunk === "string") {
chunk = Buffer.from(chunk, encoding);
}
if (pos + chunk.length > bufferSize) {
reject(new Error(`Stream exceeds buffer size. Buffer size: ${bufferSize}`));
return;
}
buffer.fill(chunk, pos, pos + chunk.length);
pos += chunk.length;
}
});
stream.on("end", () => {
resolve(pos);
});
stream.on("error", reject);
});
}
/**
* Reads a readable stream into a buffer.
*
* @param stream - A Node.js Readable stream
* @param encoding - Encoding of the Readable stream
* @returns with the count of bytes read.
*/
async function streamToBuffer3(readableStream, encoding) {
return new Promise((resolve, reject) => {
const chunks = [];
readableStream.on("data", (data) => {
chunks.push(typeof data === "string" ? Buffer.from(data, encoding) : data);
});
readableStream.on("end", () => {
resolve(Buffer.concat(chunks));
});
readableStream.on("error", reject);
});
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Writes the content of a readstream to a local file. Returns a Promise which is completed after the file handle is closed.
*
* @param rs - The read stream.
* @param file - Destination file path.
*/
async function readStreamToLocalFile(rs, file) {
return new Promise((resolve, reject) => {
const ws = external_node_fs_.createWriteStream(file);
rs.on("error", (err) => {
reject(err);
});
ws.on("error", (err) => {
reject(err);
});
ws.on("close", resolve);
rs.pipe(ws);
});
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Promisified version of fs.stat().
*/
const fsStat = external_node_util_.promisify(external_node_fs_.stat);
const fsCreateReadStream = external_node_fs_.createReadStream;
//# sourceMappingURL=utils.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/Clients.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob,
* append blob, or page blob.
*/
class Clients_BlobClient extends StorageClient_StorageClient {
/**
* blobContext provided by protocol layer.
*/
blobContext;
_name;
_containerName;
_versionId;
_snapshot;
/**
* Config used in creating blob client instances.
*/
blobClientConfig;
/**
* The name of the blob.
*/
get name() {
return this._name;
}
/**
* The name of the storage container the blob is associated with.
*/
get containerName() {
return this._containerName;
}
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
options = options || {};
let pipeline;
let url;
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
// (url: string, pipeline: Pipeline)
url = urlOrConnectionString;
pipeline = credentialOrPipelineOrContainerName;
options = blobNameOrOptions;
}
else if ((esm_isNodeLike && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipelineOrContainerName)) {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
url = urlOrConnectionString;
options = blobNameOrOptions;
pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
}
else if (!credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName !== "string") {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
// The second parameter is undefined. Use anonymous credential.
url = urlOrConnectionString;
if (blobNameOrOptions && typeof blobNameOrOptions !== "string") {
options = blobNameOrOptions;
}
pipeline = newPipeline(new AnonymousCredential(), options);
}
else if (credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName === "string" &&
blobNameOrOptions &&
typeof blobNameOrOptions === "string") {
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
const containerName = credentialOrPipelineOrContainerName;
const blobName = blobNameOrOptions;
const extractedCreds = utils_common_extractConnectionStringParts(urlOrConnectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
url = utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
pipeline = newPipeline(sharedKeyCredential, options);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
url =
utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
"?" +
extractedCreds.accountSas;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
else {
throw new Error("Expecting non-empty strings for containerName and blobName parameters");
}
super(url, pipeline);
({ blobName: this._name, containerName: this._containerName } =
this.getBlobAndContainerNamesFromUrl());
this.blobContext = this.storageClientContext.blob;
this._snapshot = utils_common_getURLParameter(this.url, utils_constants_URLConstants.Parameters.SNAPSHOT);
this._versionId = utils_common_getURLParameter(this.url, utils_constants_URLConstants.Parameters.VERSIONID);
this.blobClientConfig = options;
}
/**
* Creates a new BlobClient object identical to the source but with the specified snapshot timestamp.
* Provide "" will remove the snapshot and return a Client to the base blob.
*
* @param snapshot - The snapshot timestamp.
* @returns A new BlobClient object identical to the source but with the specified snapshot timestamp
*/
withSnapshot(snapshot) {
return new Clients_BlobClient(utils_common_setURLParameter(this.url, utils_constants_URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline, this.blobClientConfig);
}
/**
* Creates a new BlobClient object pointing to a version of this blob.
* Provide "" will remove the versionId and return a Client to the base blob.
*
* @param versionId - The versionId.
* @returns A new BlobClient object pointing to the version of this blob.
*/
withVersion(versionId) {
return new Clients_BlobClient(utils_common_setURLParameter(this.url, utils_constants_URLConstants.Parameters.VERSIONID, versionId.length === 0 ? undefined : versionId), this.pipeline, this.blobClientConfig);
}
/**
* Creates a AppendBlobClient object.
*
*/
getAppendBlobClient() {
return new AppendBlobClient(this.url, this.pipeline, this.blobClientConfig);
}
/**
* Creates a BlockBlobClient object.
*
*/
getBlockBlobClient() {
return new BlockBlobClient(this.url, this.pipeline, this.blobClientConfig);
}
/**
* Creates a PageBlobClient object.
*
*/
getPageBlobClient() {
return new PageBlobClient(this.url, this.pipeline, this.blobClientConfig);
}
/**
* Reads or downloads a blob from the system, including its metadata and properties.
* You can also call Get Blob to read a snapshot.
*
* * In Node.js, data returns in a Readable stream readableStreamBody
* * In browsers, data returns in a promise blobBody
*
* @see https://learn.microsoft.com/rest/api/storageservices/get-blob
*
* @param offset - From which position of the blob to download, greater than or equal to 0
* @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined
* @param options - Optional options to Blob Download operation.
*
*
* Example usage (Node.js):
*
* ```ts snippet:ReadmeSampleDownloadBlob_Node
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
* import { buffer } from "node:stream/consumers";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blobClient = containerClient.getBlobClient(blobName);
*
* // Get blob content from position 0 to the end
* // In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody
* const downloadBlockBlobResponse = await blobClient.download();
* if (downloadBlockBlobResponse.readableStreamBody) {
* // Download the raw bytes of the blob. Use `text` from "node:stream/consumers"
* // instead if you want to read the content as a string directly.
* const downloaded = await buffer(downloadBlockBlobResponse.readableStreamBody);
* console.log(`Downloaded blob content: ${downloaded.toString()}`);
* }
* ```
*
* Example usage (browser):
*
* ```ts snippet:ReadmeSampleDownloadBlob_Browser
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blobClient = containerClient.getBlobClient(blobName);
*
* // Get blob content from position 0 to the end
* // In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody
* const downloadBlockBlobResponse = await blobClient.download();
* const blobBody = await downloadBlockBlobResponse.blobBody;
* if (blobBody) {
* const downloaded = await blobBody.text();
* console.log(`Downloaded blob content: ${downloaded}`);
* }
* ```
*/
async download(offset = 0, count, options = {}) {
options.conditions = options.conditions || {};
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlobClient-download", options, async (updatedOptions) => {
let contentChecksumAlgorithm = options.contentChecksumAlgorithm ?? this.blobClientConfig?.downloadContentChecksumAlgorithm;
if (contentChecksumAlgorithm === undefined) {
contentChecksumAlgorithm = "Customized";
}
else if (contentChecksumAlgorithm === "Auto") {
contentChecksumAlgorithm = "StorageCrc64";
}
if (contentChecksumAlgorithm === "StorageCrc64") {
await StorageCRC64Calculator.init();
}
const res = utils_common_assertResponse((await this.blobContext.download({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
requestOptions: {
onDownloadProgress: esm_isNodeLike ? undefined : options.onProgress, // for Node.js, progress is reported by RetriableReadableStream
},
range: offset === 0 && !count ? undefined : rangeToString({ offset, count }),
rangeGetContentMD5: options.rangeGetContentMD5,
rangeGetContentCRC64: options.rangeGetContentCrc64,
snapshot: options.snapshot,
cpkInfo: options.customerProvidedKey,
tracingOptions: updatedOptions.tracingOptions,
structuredBodyType: contentChecksumAlgorithm === "StorageCrc64" ? "XSM/1.0; properties=crc64" : undefined,
})));
const wrappedRes = {
...res,
_response: res._response, // _response is made non-enumerable
objectReplicationDestinationPolicyId: res.objectReplicationPolicyId,
objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules),
};
// Return browser response immediately
if (!esm_isNodeLike) {
if (contentChecksumAlgorithm === "StorageCrc64") {
wrappedRes.blobBody = structuredMessageDecodingBrowser(await wrappedRes.blobBody);
}
return wrappedRes;
}
// We support retrying when download stream unexpected ends in Node.js runtime
// Following code shouldn't be bundled into browser build, however some
// bundlers may try to bundle following code and "FileReadResponse.ts".
// In this case, "FileDownloadResponse.browser.ts" will be used as a shim of "FileDownloadResponse.ts"
// The config is in package.json "browser" field
if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) {
// TODO: Default value or make it a required parameter?
options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS;
}
if (res.contentLength === undefined) {
throw new RangeError(`File download response doesn't contain valid content length header`);
}
if (contentChecksumAlgorithm === "StorageCrc64" &&
res.structuredContentLength === undefined) {
throw new RangeError(`Unexpected structured content length`);
}
if (!res.etag) {
throw new RangeError(`File download response doesn't contain valid etag header`);
}
const expectedContentLength = contentChecksumAlgorithm === "StorageCrc64"
? res.structuredContentLength
: res.contentLength;
return new BlobDownloadResponse(wrappedRes, async (start) => {
const updatedDownloadOptions = {
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
ifMatch: options.conditions.ifMatch || res.etag,
ifModifiedSince: options.conditions.ifModifiedSince,
ifNoneMatch: options.conditions.ifNoneMatch,
ifUnmodifiedSince: options.conditions.ifUnmodifiedSince,
ifTags: options.conditions?.tagConditions,
},
range: rangeToString({
count: offset + expectedContentLength - start,
offset: start,
}),
rangeGetContentMD5: options.rangeGetContentMD5,
rangeGetContentCRC64: options.rangeGetContentCrc64,
snapshot: options.snapshot,
cpkInfo: options.customerProvidedKey,
structuredBodyType: contentChecksumAlgorithm === "StorageCrc64" ? "XSM/1.0; properties=crc64" : undefined,
};
// Debug purpose only
// console.log(
// `Read from internal stream, range: ${
// updatedOptions.range
// }, options: ${JSON.stringify(updatedOptions)}`
// );
const resBody = (await this.blobContext.download({
abortSignal: options.abortSignal,
...updatedDownloadOptions,
})).readableStreamBody;
if (contentChecksumAlgorithm === "StorageCrc64") {
return structuredMessageDecodingStream(resBody, {});
}
else {
return resBody;
}
}, offset, expectedContentLength, {
maxRetryRequests: options.maxRetryRequests,
onProgress: options.onProgress,
});
});
}
/**
* Returns true if the Azure blob resource represented by this client exists; false otherwise.
*
* NOTE: use this function with care since an existing blob might be deleted by other clients or
* applications. Vice versa new blobs might be added by other clients or applications after this
* function completes.
*
* @param options - options to Exists operation.
*/
async exists(options = {}) {
return tracingClient.withSpan("BlobClient-exists", options, async (updatedOptions) => {
try {
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
await this.getProperties({
abortSignal: options.abortSignal,
customerProvidedKey: options.customerProvidedKey,
conditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
});
return true;
}
catch (e) {
if (e.statusCode === 404) {
// Expected exception when checking blob existence
return false;
}
else if (e.statusCode === 409 &&
(e.details.errorCode === BlobUsesCustomerSpecifiedEncryptionMsg ||
e.details.errorCode === BlobDoesNotUseCustomerSpecifiedEncryption)) {
// Expected exception when checking blob existence
return true;
}
throw e;
}
});
}
/**
* Returns all user-defined metadata, standard HTTP properties, and system properties
* for the blob. It does not return the content of the blob.
* @see https://learn.microsoft.com/rest/api/storageservices/get-blob-properties
*
* WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if
* they originally contained uppercase characters. This differs from the metadata keys returned by
* the methods of {@link ContainerClient} that list blobs using the `includeMetadata` option, which
* will retain their original casing.
*
* @param options - Optional options to Get Properties operation.
*/
async getProperties(options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlobClient-getProperties", options, async (updatedOptions) => {
const res = utils_common_assertResponse(await this.blobContext.getProperties({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
tracingOptions: updatedOptions.tracingOptions,
}));
return {
...res,
_response: res._response, // _response is made non-enumerable
objectReplicationDestinationPolicyId: res.objectReplicationPolicyId,
objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules),
};
});
}
/**
* Marks the specified blob or snapshot for deletion. The blob is later deleted
* during garbage collection. Note that in order to delete a blob, you must delete
* all of its snapshots. You can delete both at the same time with the Delete
* Blob operation.
* @see https://learn.microsoft.com/rest/api/storageservices/delete-blob
*
* @param options - Optional options to Blob Delete operation.
*/
async delete(options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("BlobClient-delete", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.delete({
abortSignal: options.abortSignal,
deleteSnapshots: options.deleteSnapshots,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
accessTierIfModifiedSince: options.conditions?.accessTierIfModifiedSince,
accessTierIfUnmodifiedSince: options.conditions?.accessTierIfUnmodifiedSince,
}));
});
}
/**
* Marks the specified blob or snapshot for deletion if it exists. The blob is later deleted
* during garbage collection. Note that in order to delete a blob, you must delete
* all of its snapshots. You can delete both at the same time with the Delete
* Blob operation.
* @see https://learn.microsoft.com/rest/api/storageservices/delete-blob
*
* @param options - Optional options to Blob Delete operation.
*/
async deleteIfExists(options = {}) {
return tracingClient.withSpan("BlobClient-deleteIfExists", options, async (updatedOptions) => {
try {
const res = utils_common_assertResponse(await this.delete(updatedOptions));
return {
succeeded: true,
...res,
_response: res._response, // _response is made non-enumerable
};
}
catch (e) {
if (e.details?.errorCode === "BlobNotFound") {
return {
succeeded: false,
...e.response?.parsedHeaders,
_response: e.response,
};
}
throw e;
}
});
}
/**
* Restores the contents and metadata of soft deleted blob and any associated
* soft deleted snapshots. Undelete Blob is supported only on version 2017-07-29
* or later.
* @see https://learn.microsoft.com/rest/api/storageservices/undelete-blob
*
* @param options - Optional options to Blob Undelete operation.
*/
async undelete(options = {}) {
return tracingClient.withSpan("BlobClient-undelete", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.undelete({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets system properties on the blob.
*
* If no value provided, or no value provided for the specified blob HTTP headers,
* these blob HTTP headers without a value will be cleared.
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-properties
*
* @param blobHTTPHeaders - If no value provided, or no value provided for
* the specified blob HTTP headers, these blob HTTP
* headers without a value will be cleared.
* A common header to set is `blobContentType`
* enabling the browser to provide functionality
* based on file type.
* @param options - Optional options to Blob Set HTTP Headers operation.
*/
async setHTTPHeaders(blobHTTPHeaders, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlobClient-setHTTPHeaders", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setHttpHeaders({
abortSignal: options.abortSignal,
blobHttpHeaders: blobHTTPHeaders,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
// cpkInfo: options.customerProvidedKey, // CPK is not included in Swagger, should change this back when this issue is fixed in Swagger.
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets user-defined metadata for the specified blob as one or more name-value pairs.
*
* If no option provided, or no metadata defined in the parameter, the blob
* metadata will be removed.
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-metadata
*
* @param metadata - Replace existing metadata with this value.
* If no value provided the existing metadata will be removed.
* @param options - Optional options to Set Metadata operation.
*/
async setMetadata(metadata, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlobClient-setMetadata", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setMetadata({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets tags on the underlying blob.
* A blob can have up to 10 tags. Tag keys must be between 1 and 128 characters. Tag values must be between 0 and 256 characters.
* Valid tag key and value characters include lower and upper case letters, digits (0-9),
* space (' '), plus ('+'), minus ('-'), period ('.'), foward slash ('/'), colon (':'), equals ('='), and underscore ('_').
*
* @param tags -
* @param options -
*/
async setTags(tags, options = {}) {
return tracingClient.withSpan("BlobClient-setTags", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setTags({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
blobModifiedAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
tags: toBlobTags(tags),
}));
});
}
/**
* Gets the tags associated with the underlying blob.
*
* @param options -
*/
async getTags(options = {}) {
return tracingClient.withSpan("BlobClient-getTags", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.blobContext.getTags({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
blobModifiedAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
const wrappedResponse = {
...response,
_response: response._response, // _response is made non-enumerable
tags: toTags({ blobTagSet: response.blobTagSet }) || {},
};
return wrappedResponse;
});
}
/**
* Get a {@link BlobLeaseClient} that manages leases on the blob.
*
* @param proposeLeaseId - Initial proposed lease Id.
* @returns A new BlobLeaseClient object for managing leases on the blob.
*/
getBlobLeaseClient(proposeLeaseId) {
return new BlobLeaseClient(this, proposeLeaseId);
}
/**
* Creates a read-only snapshot of a blob.
* @see https://learn.microsoft.com/rest/api/storageservices/snapshot-blob
*
* @param options - Optional options to the Blob Create Snapshot operation.
*/
async createSnapshot(options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlobClient-createSnapshot", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.createSnapshot({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Asynchronously copies a blob to a destination within the storage account.
* This method returns a long running operation poller that allows you to wait
* indefinitely until the copy is completed.
* You can also cancel a copy before it is completed by calling `cancelOperation` on the poller.
* Note that the onProgress callback will not be invoked if the operation completes in the first
* request, and attempting to cancel a completed copy will result in an error being thrown.
*
* In version 2012-02-12 and later, the source for a Copy Blob operation can be
* a committed blob in any Azure storage account.
* Beginning with version 2015-02-21, the source for a Copy Blob operation can be
* an Azure file in any Azure storage account.
* Only storage accounts created on or after June 7th, 2012 allow the Copy Blob
* operation to copy from another storage account.
* @see https://learn.microsoft.com/rest/api/storageservices/copy-blob
*
* ```ts snippet:ClientsBeginCopyFromURL
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blobClient = containerClient.getBlobClient(blobName);
*
* // Example using automatic polling
* const automaticCopyPoller = await blobClient.beginCopyFromURL("url");
* const automaticResult = await automaticCopyPoller.pollUntilDone();
*
* // Example using manual polling
* const manualCopyPoller = await blobClient.beginCopyFromURL("url");
* while (!manualCopyPoller.isDone()) {
* await manualCopyPoller.poll();
* }
* const manualResult = manualCopyPoller.getResult();
*
* // Example using progress updates
* const progressUpdatesCopyPoller = await blobClient.beginCopyFromURL("url", {
* onProgress(state) {
* console.log(`Progress: ${state.copyProgress}`);
* },
* });
* const progressUpdatesResult = await progressUpdatesCopyPoller.pollUntilDone();
*
* // Example using a changing polling interval (default 15 seconds)
* const pollingIntervalCopyPoller = await blobClient.beginCopyFromURL("url", {
* intervalInMs: 1000, // poll blob every 1 second for copy progress
* });
* const pollingIntervalResult = await pollingIntervalCopyPoller.pollUntilDone();
*
* // Example using copy cancellation:
* const cancelCopyPoller = await blobClient.beginCopyFromURL("url");
* // cancel operation after starting it.
* try {
* await cancelCopyPoller.cancelOperation();
* // calls to get the result now throw PollerCancelledError
* cancelCopyPoller.getResult();
* } catch (err: any) {
* if (err.name === "PollerCancelledError") {
* console.log("The copy was cancelled.");
* }
* }
* ```
*
* @param copySource - url to the source Azure Blob/File.
* @param options - Optional options to the Blob Start Copy From URL operation.
*/
async beginCopyFromURL(copySource, options = {}) {
const client = {
abortCopyFromURL: (...args) => this.abortCopyFromURL(...args),
getProperties: (...args) => this.getProperties(...args),
startCopyFromURL: (...args) => this.startCopyFromURL(...args),
};
const poller = new BlobBeginCopyFromUrlPoller({
blobClient: client,
copySource,
intervalInMs: options.intervalInMs,
onProgress: options.onProgress,
resumeFrom: options.resumeFrom,
startCopyFromURLOptions: options,
});
// Trigger the startCopyFromURL call by calling poll.
// Any errors from this method should be surfaced to the user.
await poller.poll();
return poller;
}
/**
* Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero
* length and full metadata. Version 2012-02-12 and newer.
* @see https://learn.microsoft.com/rest/api/storageservices/abort-copy-blob
*
* @param copyId - Id of the Copy From URL operation.
* @param options - Optional options to the Blob Abort Copy From URL operation.
*/
async abortCopyFromURL(copyId, options = {}) {
return tracingClient.withSpan("BlobClient-abortCopyFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.abortCopyFromURL(copyId, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* The synchronous Copy From URL operation copies a blob or an internet resource to a new blob. It will not
* return a response until the copy is complete.
* @see https://learn.microsoft.com/rest/api/storageservices/copy-blob-from-url
*
* @param copySource - The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication
* @param options -
*/
async syncCopyFromURL(copySource, options = {}) {
options.conditions = options.conditions || {};
options.sourceConditions = options.sourceConditions || {};
return tracingClient.withSpan("BlobClient-syncCopyFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.copyFromURL(copySource, {
abortSignal: options.abortSignal,
metadata: options.metadata,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
sourceModifiedAccessConditions: {
sourceIfMatch: options.sourceConditions?.ifMatch,
sourceIfModifiedSince: options.sourceConditions?.ifModifiedSince,
sourceIfNoneMatch: options.sourceConditions?.ifNoneMatch,
sourceIfUnmodifiedSince: options.sourceConditions?.ifUnmodifiedSince,
},
sourceContentMD5: options.sourceContentMD5,
copySourceAuthorization: utils_common_httpAuthorizationToString(options.sourceAuthorization),
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
encryptionScope: options.encryptionScope,
copySourceTags: options.copySourceTags,
fileRequestIntent: options.sourceShareTokenIntent,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets the tier on a blob. The operation is allowed on a page blob in a premium
* storage account and on a block blob in a blob storage account (locally redundant
* storage only). A premium page blob's tier determines the allowed size, IOPS,
* and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive
* storage type. This operation does not update the blob's ETag.
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-tier
*
* @param tier - The tier to be set on the blob. Valid values are Hot, Cool, or Archive.
* @param options - Optional options to the Blob Set Tier operation.
*/
async setAccessTier(tier, options = {}) {
return tracingClient.withSpan("BlobClient-setAccessTier", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setTier(toAccessTier(tier), {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
rehydratePriority: options.rehydratePriority,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
async downloadToBuffer(param1, param2, param3, param4 = {}) {
let buffer;
let offset = 0;
let count = 0;
let options = param4;
if (param1 instanceof Buffer) {
buffer = param1;
offset = param2 || 0;
count = typeof param3 === "number" ? param3 : 0;
}
else {
offset = typeof param1 === "number" ? param1 : 0;
count = typeof param2 === "number" ? param2 : 0;
options = param3 || {};
}
let blockSize = options.blockSize ?? 0;
if (blockSize < 0) {
throw new RangeError("blockSize option must be >= 0");
}
if (blockSize === 0) {
blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
}
if (offset < 0) {
throw new RangeError("offset option must be >= 0");
}
if (count && count <= 0) {
throw new RangeError("count option must be greater than 0");
}
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("BlobClient-downloadToBuffer", options, async (updatedOptions) => {
// Customer doesn't specify length, get it
if (!count) {
const response = await this.getProperties({
...options,
tracingOptions: updatedOptions.tracingOptions,
});
count = response.contentLength - offset;
if (count < 0) {
throw new RangeError(`offset ${offset} shouldn't be larger than blob size ${response.contentLength}`);
}
}
// Allocate the buffer of size = count if the buffer is not provided
if (!buffer) {
try {
buffer = Buffer.alloc(count);
}
catch (error) {
throw new Error(`Unable to allocate the buffer of size: ${count}(in bytes). Please try passing your own buffer to the "downloadToBuffer" method or try using other methods like "download" or "downloadToFile".\t ${error.message}`);
}
}
if (buffer.length < count) {
throw new RangeError(`The buffer's size should be equal to or larger than the request count of bytes: ${count}`);
}
let transferProgress = 0;
const batch = new Batch(options.concurrency);
for (let off = offset; off < offset + count; off = off + blockSize) {
batch.addOperation(async () => {
// Exclusive chunk end position
let chunkEnd = offset + count;
if (off + blockSize < chunkEnd) {
chunkEnd = off + blockSize;
}
const response = await this.download(off, chunkEnd - off, {
abortSignal: options.abortSignal,
conditions: options.conditions,
maxRetryRequests: options.maxRetryRequestsPerBlock,
customerProvidedKey: options.customerProvidedKey,
contentChecksumAlgorithm: options.contentChecksumAlgorithm,
tracingOptions: updatedOptions.tracingOptions,
});
const stream = response.readableStreamBody;
await streamToBuffer(stream, buffer, off - offset, chunkEnd - offset);
// Update progress after block is downloaded, in case of block trying
// Could provide finer grained progress updating inside HTTP requests,
// only if convenience layer download try is enabled
transferProgress += chunkEnd - off;
if (options.onProgress) {
options.onProgress({ loadedBytes: transferProgress });
}
});
}
await batch.do();
return buffer;
});
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Downloads an Azure Blob to a local file.
* Fails if the the given file path already exits.
* Offset and count are optional, pass 0 and undefined respectively to download the entire blob.
*
* @param filePath -
* @param offset - From which position of the block blob to download.
* @param count - How much data to be downloaded. Will download to the end when passing undefined.
* @param options - Options to Blob download options.
* @returns The response data for blob download operation,
* but with readableStreamBody set to undefined since its
* content is already read and written into a local file
* at the specified path.
*/
async downloadToFile(filePath, offset = 0, count, options = {}) {
return tracingClient.withSpan("BlobClient-downloadToFile", options, async (updatedOptions) => {
const response = await this.download(offset, count, {
...options,
tracingOptions: updatedOptions.tracingOptions,
});
if (response.readableStreamBody) {
await readStreamToLocalFile(response.readableStreamBody, filePath);
}
// The stream is no longer accessible so setting it to undefined.
response.blobDownloadStream = undefined;
return response;
});
}
getBlobAndContainerNamesFromUrl() {
let containerName;
let blobName;
try {
// URL may look like the following
// "https://myaccount.blob.core.windows.net/mycontainer/blob?sasString";
// "https://myaccount.blob.core.windows.net/mycontainer/blob";
// "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt?sasString";
// "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt";
// IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername/blob`
// http://localhost:10001/devstoreaccount1/containername/blob
const parsedUrl = new URL(this.url);
if (parsedUrl.host.split(".")[1] === "blob") {
// "https://myaccount.blob.core.windows.net/containername/blob".
// .getPath() -> /containername/blob
const pathComponents = parsedUrl.pathname.match("/([^/]*)(/(.*))?");
containerName = pathComponents[1];
blobName = pathComponents[3];
}
else if (utils_common_isIpEndpointStyle(parsedUrl)) {
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername/blob
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername/blob
// .getPath() -> /devstoreaccount1/containername/blob
const pathComponents = parsedUrl.pathname.match("/([^/]*)/([^/]*)(/(.*))?");
containerName = pathComponents[2];
blobName = pathComponents[4];
}
else {
// "https://customdomain.com/containername/blob".
// .getPath() -> /containername/blob
const pathComponents = parsedUrl.pathname.match("/([^/]*)(/(.*))?");
containerName = pathComponents[1];
blobName = pathComponents[3];
}
// decode the encoded blobName, containerName - to get all the special characters that might be present in them
containerName = decodeURIComponent(containerName);
blobName = decodeURIComponent(blobName);
// Azure Storage Server will replace "\" with "/" in the blob names
// doing the same in the SDK side so that the user doesn't have to replace "\" instances in the blobName
blobName = blobName.replace(/\\/g, "/");
if (!containerName) {
throw new Error("Provided containerName is invalid.");
}
return { blobName, containerName };
}
catch (error) {
throw new Error("Unable to extract blobName and containerName with provided information.");
}
}
/**
* Asynchronously copies a blob to a destination within the storage account.
* In version 2012-02-12 and later, the source for a Copy Blob operation can be
* a committed blob in any Azure storage account.
* Beginning with version 2015-02-21, the source for a Copy Blob operation can be
* an Azure file in any Azure storage account.
* Only storage accounts created on or after June 7th, 2012 allow the Copy Blob
* operation to copy from another storage account.
* @see https://learn.microsoft.com/rest/api/storageservices/copy-blob
*
* @param copySource - url to the source Azure Blob/File.
* @param options - Optional options to the Blob Start Copy From URL operation.
*/
async startCopyFromURL(copySource, options = {}) {
return tracingClient.withSpan("BlobClient-startCopyFromURL", options, async (updatedOptions) => {
options.conditions = options.conditions || {};
options.sourceConditions = options.sourceConditions || {};
return utils_common_assertResponse(await this.blobContext.startCopyFromURL(copySource, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
sourceModifiedAccessConditions: {
sourceIfMatch: options.sourceConditions.ifMatch,
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince,
sourceIfTags: options.sourceConditions.tagConditions,
},
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
rehydratePriority: options.rehydratePriority,
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
sealBlob: options.sealBlob,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Only available for BlobClient constructed with a shared key credential.
*
* Generates a Blob Service Shared Access Signature (SAS) URI based on the client properties
* and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateSasUrl(options) {
return new Promise((resolve) => {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
}
const sas = generateBlobSASQueryParameters({
containerName: this._containerName,
blobName: this._name,
snapshotTime: this._snapshot,
versionId: this._versionId,
...options,
}, this.credential).toString();
resolve(utils_common_appendToURLQuery(this.url, sas));
});
}
/**
* Only available for BlobClient constructed with a shared key credential.
*
* Generates string to sign for a Blob Service Shared Access Signature (SAS) URI based on
* the client properties and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
generateSasStringToSign(options) {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
}
return generateBlobSASQueryParametersInternal({
containerName: this._containerName,
blobName: this._name,
snapshotTime: this._snapshot,
versionId: this._versionId,
...options,
}, this.credential).stringToSign;
}
/**
*
* Generates a Blob Service Shared Access Signature (SAS) URI based on
* the client properties and parameters passed in. The SAS is signed by the input user delegation key.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @param userDelegationKey - Return value of `blobServiceClient.getUserDelegationKey()`
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateUserDelegationSasUrl(options, userDelegationKey) {
return new Promise((resolve) => {
const sas = generateBlobSASQueryParameters({
containerName: this._containerName,
blobName: this._name,
snapshotTime: this._snapshot,
versionId: this._versionId,
...options,
}, userDelegationKey, this.accountName).toString();
resolve(utils_common_appendToURLQuery(this.url, sas));
});
}
/**
* Only available for BlobClient constructed with a shared key credential.
*
* Generates string to sign for a Blob Service Shared Access Signature (SAS) URI based on
* the client properties and parameters passed in. The SAS is signed by the input user delegation key.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @param userDelegationKey - Return value of `blobServiceClient.getUserDelegationKey()`
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateUserDelegationSasStringToSign(options, userDelegationKey) {
return generateBlobSASQueryParametersInternal({
containerName: this._containerName,
blobName: this._name,
snapshotTime: this._snapshot,
versionId: this._versionId,
...options,
}, userDelegationKey, this.accountName).stringToSign;
}
/**
* Delete the immutablility policy on the blob.
*
* @param options - Optional options to delete immutability policy on the blob.
*/
async deleteImmutabilityPolicy(options = {}) {
return tracingClient.withSpan("BlobClient-deleteImmutabilityPolicy", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.deleteImmutabilityPolicy({
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Set immutability policy on the blob.
*
* @param options - Optional options to set immutability policy on the blob.
*/
async setImmutabilityPolicy(immutabilityPolicy, options = {}) {
return tracingClient.withSpan("BlobClient-setImmutabilityPolicy", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setImmutabilityPolicy({
immutabilityPolicyExpiry: immutabilityPolicy.expiriesOn,
immutabilityPolicyMode: immutabilityPolicy.policyMode,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Set legal hold on the blob.
*
* @param options - Optional options to set legal hold on the blob.
*/
async setLegalHold(legalHoldEnabled, options = {}) {
return tracingClient.withSpan("BlobClient-setLegalHold", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.setLegalHold(legalHoldEnabled, {
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* The Get Account Information operation returns the sku name and account kind
* for the specified account.
* The Get Account Information operation is available on service versions beginning
* with version 2018-03-28.
* @see https://learn.microsoft.com/rest/api/storageservices/get-account-information
*
* @param options - Options to the Service Get Account Info operation.
* @returns Response data for the Service Get Account Info operation.
*/
async getAccountInfo(options = {}) {
return tracingClient.withSpan("BlobClient-getAccountInfo", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blobContext.getAccountInfo({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
}
/**
* AppendBlobClient defines a set of operations applicable to append blobs.
*/
class AppendBlobClient extends Clients_BlobClient {
/**
* appendBlobsContext provided by protocol layer.
*/
appendBlobContext;
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
let pipeline;
let url;
options = options || {};
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
// (url: string, pipeline: Pipeline)
url = urlOrConnectionString;
pipeline = credentialOrPipelineOrContainerName;
options = blobNameOrOptions;
}
else if ((esm_isNodeLike && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipelineOrContainerName)) {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString;
url = urlOrConnectionString;
options = blobNameOrOptions;
pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
}
else if (!credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName !== "string") {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
url = urlOrConnectionString;
options = blobNameOrOptions;
// The second parameter is undefined. Use anonymous credential.
pipeline = newPipeline(new AnonymousCredential(), options);
}
else if (credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName === "string" &&
blobNameOrOptions &&
typeof blobNameOrOptions === "string") {
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
const containerName = credentialOrPipelineOrContainerName;
const blobName = blobNameOrOptions;
const extractedCreds = utils_common_extractConnectionStringParts(urlOrConnectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
url = utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
pipeline = newPipeline(sharedKeyCredential, options);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
url =
utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
"?" +
extractedCreds.accountSas;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
else {
throw new Error("Expecting non-empty strings for containerName and blobName parameters");
}
super(url, pipeline);
this.appendBlobContext = this.storageClientContext.appendBlob;
this.blobClientConfig = options;
}
/**
* Creates a new AppendBlobClient object identical to the source but with the
* specified snapshot timestamp.
* Provide "" will remove the snapshot and return a Client to the base blob.
*
* @param snapshot - The snapshot timestamp.
* @returns A new AppendBlobClient object identical to the source but with the specified snapshot timestamp.
*/
withSnapshot(snapshot) {
return new AppendBlobClient(utils_common_setURLParameter(this.url, utils_constants_URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline, this.blobClientConfig);
}
/**
* Creates a 0-length append blob. Call AppendBlock to append data to an append blob.
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param options - Options to the Append Block Create operation.
*
*
* Example usage:
*
* ```ts snippet:ClientsCreateAppendBlob
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
*
* const appendBlobClient = containerClient.getAppendBlobClient(blobName);
* await appendBlobClient.create();
* ```
*/
async create(options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("AppendBlobClient-create", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.appendBlobContext.create(0, {
abortSignal: options.abortSignal,
blobHttpHeaders: options.blobHTTPHeaders,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
blobTagsString: toBlobTagsString(options.tags),
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Creates a 0-length append blob. Call AppendBlock to append data to an append blob.
* If the blob with the same name already exists, the content of the existing blob will remain unchanged.
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param options -
*/
async createIfNotExists(options = {}) {
const conditions = { ifNoneMatch: ETagAny };
return tracingClient.withSpan("AppendBlobClient-createIfNotExists", options, async (updatedOptions) => {
try {
const res = utils_common_assertResponse(await this.create({
...updatedOptions,
conditions,
}));
return {
succeeded: true,
...res,
_response: res._response, // _response is made non-enumerable
};
}
catch (e) {
if (e.details?.errorCode === "BlobAlreadyExists") {
return {
succeeded: false,
...e.response?.parsedHeaders,
_response: e.response,
};
}
throw e;
}
});
}
/**
* Seals the append blob, making it read only.
*
* @param options -
*/
async seal(options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("AppendBlobClient-seal", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.appendBlobContext.seal({
abortSignal: options.abortSignal,
appendPositionAccessConditions: options.conditions,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Commits a new block of data to the end of the existing append blob.
* @see https://learn.microsoft.com/rest/api/storageservices/append-block
*
* @param body - Data to be appended.
* @param contentLength - Length of the body in bytes.
* @param options - Options to the Append Block operation.
*
*
* Example usage:
*
* ```ts snippet:ClientsAppendBlock
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
*
* const content = "Hello World!";
*
* // Create a new append blob and append data to the blob.
* const newAppendBlobClient = containerClient.getAppendBlobClient(blobName);
* await newAppendBlobClient.create();
* await newAppendBlobClient.appendBlock(content, content.length);
*
* // Append data to an existing append blob.
* const existingAppendBlobClient = containerClient.getAppendBlobClient(blobName);
* await existingAppendBlobClient.appendBlock(content, content.length);
* ```
*/
async appendBlock(body, contentLength, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("AppendBlobClient-appendBlock", options, async (updatedOptions) => {
const parameters = {
abortSignal: options.abortSignal,
appendPositionAccessConditions: options.conditions,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
requestOptions: {
onUploadProgress: options.onProgress,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
};
const uploadBodyParameters = await setUploadChecksumParameters(body, contentLength, parameters, options, this.blobClientConfig?.uploadContentChecksumAlgorithm);
return utils_common_assertResponse(await this.appendBlobContext.appendBlock(uploadBodyParameters.contentLength, uploadBodyParameters.body, parameters));
});
}
/**
* The Append Block operation commits a new block of data to the end of an existing append blob
* where the contents are read from a source url.
* @see https://learn.microsoft.com/rest/api/storageservices/append-block-from-url
*
* @param sourceURL -
* The url to the blob that will be the source of the copy. A source blob in the same storage account can
* be authenticated via Shared Key. However, if the source is a blob in another account, the source blob
* must either be public or must be authenticated via a shared access signature. If the source blob is
* public, no authentication is required to perform the operation.
* @param sourceOffset - Offset in source to be appended
* @param count - Number of bytes to be appended as a block
* @param options -
*/
async appendBlockFromURL(sourceURL, sourceOffset, count, options = {}) {
options.conditions = options.conditions || {};
options.sourceConditions = options.sourceConditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("AppendBlobClient-appendBlockFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, {
abortSignal: options.abortSignal,
sourceRange: rangeToString({ offset: sourceOffset, count }),
sourceContentMD5: options.sourceContentMD5,
sourceContentCrc64: options.sourceContentCrc64,
leaseAccessConditions: options.conditions,
appendPositionAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
sourceModifiedAccessConditions: {
sourceIfMatch: options.sourceConditions?.ifMatch,
sourceIfModifiedSince: options.sourceConditions?.ifModifiedSince,
sourceIfNoneMatch: options.sourceConditions?.ifNoneMatch,
sourceIfUnmodifiedSince: options.sourceConditions?.ifUnmodifiedSince,
},
copySourceAuthorization: utils_common_httpAuthorizationToString(options.sourceAuthorization),
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
fileRequestIntent: options.sourceShareTokenIntent,
tracingOptions: updatedOptions.tracingOptions,
sourceCpkInfo: {
sourceEncryptionKey: options.sourceCustomerProvidedKey?.encryptionKey,
sourceEncryptionAlgorithm: options.sourceCustomerProvidedKey?.encryptionAlgorithm,
sourceEncryptionKeySha256: options.sourceCustomerProvidedKey?.encryptionKeySha256,
},
}));
});
}
}
/**
* BlockBlobClient defines a set of operations applicable to block blobs.
*/
class BlockBlobClient extends Clients_BlobClient {
/**
* blobContext provided by protocol layer.
*
* Note. Ideally BlobClient should set BlobClient.blobContext to protected. However, API
* extractor has issue blocking that. Here we redecelare _blobContext in BlockBlobClient.
*/
_blobContext;
/**
* blockBlobContext provided by protocol layer.
*/
blockBlobContext;
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
let pipeline;
let url;
options = options || {};
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
// (url: string, pipeline: Pipeline)
url = urlOrConnectionString;
pipeline = credentialOrPipelineOrContainerName;
options = blobNameOrOptions;
}
else if ((esm_isNodeLike && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipelineOrContainerName)) {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
url = urlOrConnectionString;
options = blobNameOrOptions;
pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
}
else if (!credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName !== "string") {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
// The second parameter is undefined. Use anonymous credential.
url = urlOrConnectionString;
if (blobNameOrOptions && typeof blobNameOrOptions !== "string") {
options = blobNameOrOptions;
}
pipeline = newPipeline(new AnonymousCredential(), options);
}
else if (credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName === "string" &&
blobNameOrOptions &&
typeof blobNameOrOptions === "string") {
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
const containerName = credentialOrPipelineOrContainerName;
const blobName = blobNameOrOptions;
const extractedCreds = utils_common_extractConnectionStringParts(urlOrConnectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
url = utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
pipeline = newPipeline(sharedKeyCredential, options);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
url =
utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
"?" +
extractedCreds.accountSas;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
else {
throw new Error("Expecting non-empty strings for containerName and blobName parameters");
}
super(url, pipeline);
this.blockBlobContext = this.storageClientContext.blockBlob;
this._blobContext = this.storageClientContext.blob;
this.blobClientConfig = options;
}
/**
* Creates a new BlockBlobClient object identical to the source but with the
* specified snapshot timestamp.
* Provide "" will remove the snapshot and return a URL to the base blob.
*
* @param snapshot - The snapshot timestamp.
* @returns A new BlockBlobClient object identical to the source but with the specified snapshot timestamp.
*/
withSnapshot(snapshot) {
return new BlockBlobClient(utils_common_setURLParameter(this.url, utils_constants_URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline, this.blobClientConfig);
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Quick query for a JSON or CSV formatted blob.
*
* Example usage (Node.js):
*
* ```ts snippet:ClientsQuery
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
* import { buffer } from "node:stream/consumers";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blockBlobClient = containerClient.getBlockBlobClient(blobName);
*
* // Query and convert a blob to a string
* const queryBlockBlobResponse = await blockBlobClient.query("select from BlobStorage");
* if (queryBlockBlobResponse.readableStreamBody) {
* // Read the response bytes. Use `text` from "node:stream/consumers" instead
* // if you want the response as a string directly.
* const downloadedBuffer = await buffer(queryBlockBlobResponse.readableStreamBody);
* console.log(`Query blob content: ${downloadedBuffer.toString()}`);
* }
* ```
*
* @param query -
* @param options -
*/
async query(query, options = {}) {
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
if (!esm_isNodeLike) {
throw new Error("This operation currently is only supported in Node.js.");
}
return tracingClient.withSpan("BlockBlobClient-query", options, async (updatedOptions) => {
const response = utils_common_assertResponse((await this._blobContext.query({
abortSignal: options.abortSignal,
queryRequest: {
queryType: "SQL",
expression: query,
inputSerialization: toQuerySerialization(options.inputTextConfiguration),
outputSerialization: toQuerySerialization(options.outputTextConfiguration),
},
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
tracingOptions: updatedOptions.tracingOptions,
})));
return new BlobQueryResponse(response, {
abortSignal: options.abortSignal,
onProgress: options.onProgress,
onError: options.onError,
});
});
}
/**
* Creates a new block blob, or updates the content of an existing block blob.
* Updating an existing block blob overwrites any existing metadata on the blob.
* Partial updates are not supported; the content of the existing blob is
* overwritten with the new content. To perform a partial update of a block blob's,
* use {@link stageBlock} and {@link commitBlockList}.
*
* This is a non-parallel uploading method, please use {@link uploadFile},
* {@link uploadStream} or {@link uploadBrowserData} for better performance
* with concurrency uploading.
*
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function
* which returns a new Readable stream whose offset is from data source beginning.
* @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
* string including non non-Base64/Hex-encoded characters.
* @param options - Options to the Block Blob Upload operation.
* @returns Response data for the Block Blob Upload operation.
*
* Example usage:
*
* ```ts snippet:ClientsUpload
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blockBlobClient = containerClient.getBlockBlobClient(blobName);
*
* const content = "Hello world!";
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
* ```
*/
async upload(body, contentLength, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlockBlobClient-upload", options, async (updatedOptions) => {
const parameters = {
abortSignal: options.abortSignal,
blobHttpHeaders: options.blobHTTPHeaders,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
requestOptions: {
onUploadProgress: options.onProgress,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
tracingOptions: updatedOptions.tracingOptions,
};
const uploadBodyParameters = await setUploadChecksumParameters(body, contentLength, parameters, options, this.blobClientConfig?.uploadContentChecksumAlgorithm);
return utils_common_assertResponse(await this.blockBlobContext.upload(uploadBodyParameters.contentLength, uploadBodyParameters.body, parameters));
});
}
/**
* Creates a new Block Blob where the contents of the blob are read from a given URL.
* This API is supported beginning with the 2020-04-08 version. Partial updates
* are not supported with Put Blob from URL; the content of an existing blob is overwritten with
* the content of the new blob. To perform partial updates to a block blob’s contents using a
* source URL, use {@link stageBlockFromURL} and {@link commitBlockList}.
*
* @param sourceURL - Specifies the URL of the blob. The value
* may be a URL of up to 2 KB in length that specifies a blob.
* The value should be URL-encoded as it would appear
* in a request URI. The source blob must either be public
* or must be authenticated via a shared access signature.
* If the source blob is public, no authentication is required
* to perform the operation. Here are some examples of source object URLs:
* - https://myaccount.blob.core.windows.net/mycontainer/myblob
* - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
* @param options - Optional parameters.
*/
async syncUploadFromURL(sourceURL, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlockBlobClient-syncUploadFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blockBlobContext.putBlobFromUrl(0, sourceURL, {
...options,
blobHttpHeaders: options.blobHTTPHeaders,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
sourceModifiedAccessConditions: {
sourceIfMatch: options.sourceConditions?.ifMatch,
sourceIfModifiedSince: options.sourceConditions?.ifModifiedSince,
sourceIfNoneMatch: options.sourceConditions?.ifNoneMatch,
sourceIfUnmodifiedSince: options.sourceConditions?.ifUnmodifiedSince,
sourceIfTags: options.sourceConditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
copySourceAuthorization: utils_common_httpAuthorizationToString(options.sourceAuthorization),
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
copySourceTags: options.copySourceTags,
fileRequestIntent: options.sourceShareTokenIntent,
tracingOptions: updatedOptions.tracingOptions,
sourceCpkInfo: {
sourceEncryptionKey: options.sourceCustomerProvidedKey?.encryptionKey,
sourceEncryptionAlgorithm: options.sourceCustomerProvidedKey?.encryptionAlgorithm,
sourceEncryptionKeySha256: options.sourceCustomerProvidedKey?.encryptionKeySha256,
},
}));
});
}
/**
* Uploads the specified block to the block blob's "staging area" to be later
* committed by a call to commitBlockList.
* @see https://learn.microsoft.com/rest/api/storageservices/put-block
*
* @param blockId - A 64-byte value that is base64-encoded
* @param body - Data to upload to the staging area.
* @param contentLength - Number of bytes to upload.
* @param options - Options to the Block Blob Stage Block operation.
* @returns Response data for the Block Blob Stage Block operation.
*/
async stageBlock(blockId, body, contentLength, options = {}) {
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlockBlobClient-stageBlock", options, async (updatedOptions) => {
const parameters = {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
requestOptions: {
onUploadProgress: options.onProgress,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
};
const uploadBodyParameters = await setUploadChecksumParameters(body, contentLength, parameters, options, this.blobClientConfig?.uploadContentChecksumAlgorithm);
return utils_common_assertResponse(await this.blockBlobContext.stageBlock(blockId, uploadBodyParameters.contentLength, uploadBodyParameters.body, parameters));
});
}
/**
* The Stage Block From URL operation creates a new block to be committed as part
* of a blob where the contents are read from a URL.
* This API is available starting in version 2018-03-28.
* @see https://learn.microsoft.com/rest/api/storageservices/put-block-from-url
*
* @param blockId - A 64-byte value that is base64-encoded
* @param sourceURL - Specifies the URL of the blob. The value
* may be a URL of up to 2 KB in length that specifies a blob.
* The value should be URL-encoded as it would appear
* in a request URI. The source blob must either be public
* or must be authenticated via a shared access signature.
* If the source blob is public, no authentication is required
* to perform the operation. Here are some examples of source object URLs:
* - https://myaccount.blob.core.windows.net/mycontainer/myblob
* - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
* @param offset - From which position of the blob to download, greater than or equal to 0
* @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined
* @param options - Options to the Block Blob Stage Block From URL operation.
* @returns Response data for the Block Blob Stage Block From URL operation.
*/
async stageBlockFromURL(blockId, sourceURL, offset = 0, count, options = {}) {
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlockBlobClient-stageBlockFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
sourceContentMD5: options.sourceContentMD5,
sourceContentCrc64: options.sourceContentCrc64,
sourceRange: offset === 0 && !count ? undefined : rangeToString({ offset, count }),
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
copySourceAuthorization: utils_common_httpAuthorizationToString(options.sourceAuthorization),
fileRequestIntent: options.sourceShareTokenIntent,
tracingOptions: updatedOptions.tracingOptions,
sourceCpkInfo: {
sourceEncryptionKey: options.sourceCustomerProvidedKey?.encryptionKey,
sourceEncryptionAlgorithm: options.sourceCustomerProvidedKey?.encryptionAlgorithm,
sourceEncryptionKeySha256: options.sourceCustomerProvidedKey?.encryptionKeySha256,
},
}));
});
}
/**
* Writes a blob by specifying the list of block IDs that make up the blob.
* In order to be written as part of a blob, a block must have been successfully written
* to the server in a prior {@link stageBlock} operation. You can call {@link commitBlockList} to
* update a blob by uploading only those blocks that have changed, then committing the new and existing
* blocks together. Any blocks not specified in the block list and permanently deleted.
* @see https://learn.microsoft.com/rest/api/storageservices/put-block-list
*
* @param blocks - Array of 64-byte value that is base64-encoded
* @param options - Options to the Block Blob Commit Block List operation.
* @returns Response data for the Block Blob Commit Block List operation.
*/
async commitBlockList(blocks, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("BlockBlobClient-commitBlockList", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.blockBlobContext.commitBlockList({ latest: blocks }, {
abortSignal: options.abortSignal,
blobHttpHeaders: options.blobHTTPHeaders,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Returns the list of blocks that have been uploaded as part of a block blob
* using the specified block list filter.
* @see https://learn.microsoft.com/rest/api/storageservices/get-block-list
*
* @param listType - Specifies whether to return the list of committed blocks,
* the list of uncommitted blocks, or both lists together.
* @param options - Options to the Block Blob Get Block List operation.
* @returns Response data for the Block Blob Get Block List operation.
*/
async getBlockList(listType, options = {}) {
return tracingClient.withSpan("BlockBlobClient-getBlockList", options, async (updatedOptions) => {
const res = utils_common_assertResponse(await this.blockBlobContext.getBlockList(listType, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
if (!res.committedBlocks) {
res.committedBlocks = [];
}
if (!res.uncommittedBlocks) {
res.uncommittedBlocks = [];
}
return res;
});
}
// High level functions
/**
* Uploads a Buffer(Node.js)/Blob(browsers)/ArrayBuffer/ArrayBufferView object to a BlockBlob.
*
* When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is
* {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}
* to commit the block list.
*
* A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is
* `blobContentType`, enabling the browser to provide
* functionality based on file type.
*
* @param data - Buffer(Node.js), Blob, ArrayBuffer or ArrayBufferView
* @param options -
*/
async uploadData(data, options = {}) {
return tracingClient.withSpan("BlockBlobClient-uploadData", options, async (updatedOptions) => {
if (esm_isNodeLike) {
let buffer;
if (data instanceof Buffer) {
buffer = data;
}
else if (data instanceof ArrayBuffer) {
buffer = Buffer.from(data);
}
else {
data = data;
buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
}
return this.uploadSeekableInternal((offset, size) => buffer.slice(offset, offset + size), buffer.byteLength, updatedOptions);
}
else {
const browserBlob = new Blob([data]);
return this.uploadSeekableInternal((offset, size) => browserBlob.slice(offset, offset + size), browserBlob.size, updatedOptions);
}
});
}
/**
* ONLY AVAILABLE IN BROWSERS.
*
* Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.
*
* When buffer length lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call
* {@link commitBlockList} to commit the block list.
*
* A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is
* `blobContentType`, enabling the browser to provide
* functionality based on file type.
*
* @deprecated Use {@link uploadData} instead.
*
* @param browserData - Blob, File, ArrayBuffer or ArrayBufferView
* @param options - Options to upload browser data.
* @returns Response data for the Blob Upload operation.
*/
async uploadBrowserData(browserData, options = {}) {
return tracingClient.withSpan("BlockBlobClient-uploadBrowserData", options, async (updatedOptions) => {
const browserBlob = new Blob([browserData]);
return this.uploadSeekableInternal((offset, size) => browserBlob.slice(offset, offset + size), browserBlob.size, updatedOptions);
});
}
/**
*
* Uploads data to block blob. Requires a bodyFactory as the data source,
* which need to return a {@link HttpRequestBody} object with the offset and size provided.
*
* When data length is no more than the specified {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is
* {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}
* to commit the block list.
*
* @param bodyFactory -
* @param size - size of the data to upload.
* @param options - Options to Upload to Block Blob operation.
* @returns Response data for the Blob Upload operation.
*/
async uploadSeekableInternal(bodyFactory, size, options = {}) {
let blockSize = options.blockSize ?? 0;
if (blockSize < 0 || blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
throw new RangeError(`blockSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES}`);
}
const maxSingleShotSize = options.maxSingleShotSize ?? BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;
if (maxSingleShotSize < 0 || maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {
throw new RangeError(`maxSingleShotSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}`);
}
if (blockSize === 0) {
if (size > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES * BLOCK_BLOB_MAX_BLOCKS) {
throw new RangeError(`${size} is too larger to upload to a block blob.`);
}
if (size > maxSingleShotSize) {
blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);
if (blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {
blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
}
}
}
if (!options.blobHTTPHeaders) {
options.blobHTTPHeaders = {};
}
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("BlockBlobClient-uploadSeekableInternal", options, async (updatedOptions) => {
if (size <= maxSingleShotSize) {
return utils_common_assertResponse(await this.upload(bodyFactory(0, size), size, updatedOptions));
}
const numBlocks = Math.floor((size - 1) / blockSize) + 1;
if (numBlocks > BLOCK_BLOB_MAX_BLOCKS) {
throw new RangeError(`The buffer's size is too big or the BlockSize is too small;` +
`the number of blocks must be <= ${BLOCK_BLOB_MAX_BLOCKS}`);
}
const blockList = [];
const blockIDPrefix = esm_randomUUID();
let transferProgress = 0;
const batch = new Batch(options.concurrency);
for (let i = 0; i < numBlocks; i++) {
batch.addOperation(async () => {
const blockID = utils_common_generateBlockID(blockIDPrefix, i);
const start = blockSize * i;
const end = i === numBlocks - 1 ? size : start + blockSize;
const contentLength = end - start;
blockList.push(blockID);
await this.stageBlock(blockID, bodyFactory(start, contentLength), contentLength, {
abortSignal: options.abortSignal,
conditions: options.conditions,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
contentChecksumAlgorithm: options.contentChecksumAlgorithm,
});
// Update progress after block is successfully uploaded to server, in case of block trying
// TODO: Hook with convenience layer progress event in finer level
transferProgress += contentLength;
if (options.onProgress) {
options.onProgress({
loadedBytes: transferProgress,
});
}
});
}
await batch.do();
return this.commitBlockList(blockList, updatedOptions);
});
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Uploads a local file in blocks to a block blob.
*
* When file size lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.
* Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList
* to commit the block list.
*
* @param filePath - Full path of local file
* @param options - Options to Upload to Block Blob operation.
* @returns Response data for the Blob Upload operation.
*/
async uploadFile(filePath, options = {}) {
return tracingClient.withSpan("BlockBlobClient-uploadFile", options, async (updatedOptions) => {
const size = (await fsStat(filePath)).size;
return this.uploadSeekableInternal((offset, count) => {
return () => fsCreateReadStream(filePath, {
autoClose: true,
end: count ? offset + count - 1 : Infinity,
start: offset,
});
}, size, {
...options,
tracingOptions: updatedOptions.tracingOptions,
});
});
}
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Uploads a Node.js Readable stream into block blob.
*
* PERFORMANCE IMPROVEMENT TIPS:
* * Input stream highWaterMark is better to set a same value with bufferSize
* parameter, which will avoid Buffer.concat() operations.
*
* @param stream - Node.js Readable stream
* @param bufferSize - Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB
* @param maxConcurrency - Max concurrency indicates the max number of buffers that can be allocated,
* positive correlation with max uploading concurrency. Default value is 5
* @param options - Options to Upload Stream to Block Blob operation.
* @returns Response data for the Blob Upload operation.
*/
async uploadStream(stream, bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES, maxConcurrency = 5, options = {}) {
if (!options.blobHTTPHeaders) {
options.blobHTTPHeaders = {};
}
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("BlockBlobClient-uploadStream", options, async (updatedOptions) => {
let blockNum = 0;
const blockIDPrefix = esm_randomUUID();
let transferProgress = 0;
const blockList = [];
const scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, async (body, length) => {
const blockID = utils_common_generateBlockID(blockIDPrefix, blockNum);
blockList.push(blockID);
blockNum++;
await this.stageBlock(blockID, body, length, {
customerProvidedKey: options.customerProvidedKey,
conditions: options.conditions,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
contentChecksumAlgorithm: options.contentChecksumAlgorithm,
});
// Update progress after block is successfully uploaded to server, in case of block trying
transferProgress += length;
if (options.onProgress) {
options.onProgress({ loadedBytes: transferProgress });
}
},
// concurrency should set a smaller value than maxConcurrency, which is helpful to
// reduce the possibility when a outgoing handler waits for stream data, in
// this situation, outgoing handlers are blocked.
// Outgoing queue shouldn't be empty.
Math.ceil((maxConcurrency / 4) * 3));
await scheduler.do();
return utils_common_assertResponse(await this.commitBlockList(blockList, {
...options,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
}
/**
* PageBlobClient defines a set of operations applicable to page blobs.
*/
class PageBlobClient extends Clients_BlobClient {
/**
* pageBlobsContext provided by protocol layer.
*/
pageBlobContext;
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
let pipeline;
let url;
options = options || {};
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
// (url: string, pipeline: Pipeline)
url = urlOrConnectionString;
pipeline = credentialOrPipelineOrContainerName;
options = blobNameOrOptions;
}
else if ((esm_isNodeLike && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipelineOrContainerName)) {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
url = urlOrConnectionString;
options = blobNameOrOptions;
pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
}
else if (!credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName !== "string") {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
// The second parameter is undefined. Use anonymous credential.
url = urlOrConnectionString;
options = blobNameOrOptions;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else if (credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName === "string" &&
blobNameOrOptions &&
typeof blobNameOrOptions === "string") {
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
const containerName = credentialOrPipelineOrContainerName;
const blobName = blobNameOrOptions;
const extractedCreds = utils_common_extractConnectionStringParts(urlOrConnectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
url = utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
pipeline = newPipeline(sharedKeyCredential, options);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
url =
utils_common_appendToURLPath(utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
"?" +
extractedCreds.accountSas;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
else {
throw new Error("Expecting non-empty strings for containerName and blobName parameters");
}
super(url, pipeline);
this.pageBlobContext = this.storageClientContext.pageBlob;
this.blobClientConfig = options;
}
/**
* Creates a new PageBlobClient object identical to the source but with the
* specified snapshot timestamp.
* Provide "" will remove the snapshot and return a Client to the base blob.
*
* @param snapshot - The snapshot timestamp.
* @returns A new PageBlobClient object identical to the source but with the specified snapshot timestamp.
*/
withSnapshot(snapshot) {
return new PageBlobClient(utils_common_setURLParameter(this.url, utils_constants_URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline, this.blobClientConfig);
}
/**
* Creates a page blob of the specified length. Call uploadPages to upload data
* data to a page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param size - size of the page blob.
* @param options - Options to the Page Blob Create operation.
* @returns Response data for the Page Blob Create operation.
*/
async create(size, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("PageBlobClient-create", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.create(0, size, {
abortSignal: options.abortSignal,
blobHttpHeaders: options.blobHTTPHeaders,
blobSequenceNumber: options.blobSequenceNumber,
leaseAccessConditions: options.conditions,
metadata: options.metadata,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
immutabilityPolicyExpiry: options.immutabilityPolicy?.expiriesOn,
immutabilityPolicyMode: options.immutabilityPolicy?.policyMode,
legalHold: options.legalHold,
tier: toAccessTier(options.tier),
blobTagsString: toBlobTagsString(options.tags),
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Creates a page blob of the specified length. Call uploadPages to upload data
* data to a page blob. If the blob with the same name already exists, the content
* of the existing blob will remain unchanged.
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param size - size of the page blob.
* @param options -
*/
async createIfNotExists(size, options = {}) {
return tracingClient.withSpan("PageBlobClient-createIfNotExists", options, async (updatedOptions) => {
try {
const conditions = { ifNoneMatch: ETagAny };
const res = utils_common_assertResponse(await this.create(size, {
...options,
conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
return {
succeeded: true,
...res,
_response: res._response, // _response is made non-enumerable
};
}
catch (e) {
if (e.details?.errorCode === "BlobAlreadyExists") {
return {
succeeded: false,
...e.response?.parsedHeaders,
_response: e.response,
};
}
throw e;
}
});
}
/**
* Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512.
* @see https://learn.microsoft.com/rest/api/storageservices/put-page
*
* @param body - Data to upload
* @param offset - Offset of destination page blob
* @param count - Content length of the body, also number of bytes to be uploaded
* @param options - Options to the Page Blob Upload Pages operation.
* @returns Response data for the Page Blob Upload Pages operation.
*/
async uploadPages(body, offset, count, options = {}) {
options.conditions = options.conditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("PageBlobClient-uploadPages", options, async (updatedOptions) => {
const parameters = {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
requestOptions: {
onUploadProgress: options.onProgress,
},
range: rangeToString({ offset, count }),
sequenceNumberAccessConditions: options.conditions,
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
};
const uploadBodyParameters = await setUploadChecksumParameters(body, count, parameters, options, this.blobClientConfig?.uploadContentChecksumAlgorithm);
return utils_common_assertResponse(await this.pageBlobContext.uploadPages(uploadBodyParameters.contentLength, uploadBodyParameters.body, parameters));
});
}
/**
* The Upload Pages operation writes a range of pages to a page blob where the
* contents are read from a URL.
* @see https://learn.microsoft.com/rest/api/storageservices/put-page-from-url
*
* @param sourceURL - Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication
* @param sourceOffset - The source offset to copy from. Pass 0 to copy from the beginning of source page blob
* @param destOffset - Offset of destination page blob
* @param count - Number of bytes to be uploaded from source page blob
* @param options -
*/
async uploadPagesFromURL(sourceURL, sourceOffset, destOffset, count, options = {}) {
options.conditions = options.conditions || {};
options.sourceConditions = options.sourceConditions || {};
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
return tracingClient.withSpan("PageBlobClient-uploadPagesFromURL", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({ offset: sourceOffset, count }), 0, rangeToString({ offset: destOffset, count }), {
abortSignal: options.abortSignal,
sourceContentMD5: options.sourceContentMD5,
sourceContentCrc64: options.sourceContentCrc64,
leaseAccessConditions: options.conditions,
sequenceNumberAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
sourceModifiedAccessConditions: {
sourceIfMatch: options.sourceConditions?.ifMatch,
sourceIfModifiedSince: options.sourceConditions?.ifModifiedSince,
sourceIfNoneMatch: options.sourceConditions?.ifNoneMatch,
sourceIfUnmodifiedSince: options.sourceConditions?.ifUnmodifiedSince,
},
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
copySourceAuthorization: utils_common_httpAuthorizationToString(options.sourceAuthorization),
fileRequestIntent: options.sourceShareTokenIntent,
tracingOptions: updatedOptions.tracingOptions,
sourceCpkInfo: {
sourceEncryptionKey: options.sourceCustomerProvidedKey?.encryptionKey,
sourceEncryptionAlgorithm: options.sourceCustomerProvidedKey?.encryptionAlgorithm,
sourceEncryptionKeySha256: options.sourceCustomerProvidedKey?.encryptionKeySha256,
},
}));
});
}
/**
* Frees the specified pages from the page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/put-page
*
* @param offset - Starting byte position of the pages to clear.
* @param count - Number of bytes to clear.
* @param options - Options to the Page Blob Clear Pages operation.
* @returns Response data for the Page Blob Clear Pages operation.
*/
async clearPages(offset = 0, count, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-clearPages", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.clearPages(0, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
range: rangeToString({ offset, count }),
sequenceNumberAccessConditions: options.conditions,
cpkInfo: options.customerProvidedKey,
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Returns the list of valid page ranges for a page blob or snapshot of a page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param options - Options to the Page Blob Get Ranges operation.
* @returns Response data for the Page Blob Get Ranges operation.
*/
async getPageRanges(offset = 0, count, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-getPageRanges", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.pageBlobContext.getPageRanges({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
range: rangeToString({ offset, count }),
tracingOptions: updatedOptions.tracingOptions,
}));
return rangeResponseFromModel(response);
});
}
/**
* getPageRangesSegment returns a single segment of page ranges starting from the
* specified Marker. Use an empty Marker to start enumeration from the beginning.
* After getting a segment, process it, and then call getPageRangesSegment again
* (passing the the previously-returned Marker) to get the next segment.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param marker - A string value that identifies the portion of the list to be returned with the next list operation.
* @param options - Options to PageBlob Get Page Ranges Segment operation.
*/
async listPageRangesSegment(offset = 0, count, marker, options = {}) {
return tracingClient.withSpan("PageBlobClient-getPageRangesSegment", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.getPageRanges({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
range: rangeToString({ offset, count }),
marker: marker,
maxPageSize: options.maxPageSize,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Returns an AsyncIterableIterator for {@link PageBlobGetPageRangesResponseModel}
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param marker - A string value that identifies the portion of
* the get of page ranges to be returned with the next getting operation. The
* operation returns the ContinuationToken value within the response body if the
* getting operation did not return all page ranges remaining within the current page.
* The ContinuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of get
* items. The marker value is opaque to the client.
* @param options - Options to List Page Ranges operation.
*/
async *listPageRangeItemSegments(offset = 0, count, marker, options = {}) {
let getPageRangeItemSegmentsResponse;
if (!!marker || marker === undefined) {
do {
getPageRangeItemSegmentsResponse = await this.listPageRangesSegment(offset, count, marker, options);
marker = getPageRangeItemSegmentsResponse.continuationToken;
yield await getPageRangeItemSegmentsResponse;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator of {@link PageRangeInfo} objects
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param options - Options to List Page Ranges operation.
*/
async *listPageRangeItems(offset = 0, count, options = {}) {
let marker;
for await (const getPageRangesSegment of this.listPageRangeItemSegments(offset, count, marker, options)) {
yield* ExtractPageRangeInfoItems(getPageRangesSegment);
}
}
/**
* Returns an async iterable iterator to list of page ranges for a page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* .byPage() returns an async iterable iterator to list of page ranges for a page blob.
*
* ```ts snippet:ClientsListPageBlobs
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const pageBlobClient = containerClient.getPageBlobClient(blobName);
*
* // Example using `for await` syntax
* let i = 1;
* for await (const pageRange of pageBlobClient.listPageRanges()) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
*
* // Example using `iter.next()` syntax
* i = 1;
* const iter = pageBlobClient.listPageRanges();
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Page range ${i++}: ${value.start} - ${value.end}`);
* ({ value, done } = await iter.next());
* }
*
* // Example using `byPage()` syntax
* i = 1;
* for await (const page of pageBlobClient.listPageRanges().byPage({ maxPageSize: 20 })) {
* for (const pageRange of page.pageRange || []) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
*
* // Example using paging with a marker
* i = 1;
* let iterator = pageBlobClient.listPageRanges().byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 page ranges
* if (response.pageRange) {
* for (const pageRange of response.pageRange) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = pageBlobClient.listPageRanges().byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
* // Prints 10 page ranges
* if (response.pageRange) {
* for (const pageRange of response.pageRange) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
* ```
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param options - Options to the Page Blob Get Ranges operation.
* @returns An asyncIterableIterator that supports paging.
*/
listPageRanges(offset = 0, count, options = {}) {
options.conditions = options.conditions || {};
// AsyncIterableIterator to iterate over blobs
const iter = this.listPageRangeItems(offset, count, options);
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.listPageRangeItemSegments(offset, count, settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...options,
});
},
};
}
/**
* Gets the collection of page ranges that differ between a specified snapshot and this page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* @param offset - Starting byte position of the page blob
* @param count - Number of bytes to get ranges diff.
* @param prevSnapshot - Timestamp of snapshot to retrieve the difference.
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
* @returns Response data for the Page Blob Get Page Range Diff operation.
*/
async getPageRangesDiff(offset, count, prevSnapshot, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-getPageRangesDiff", options, async (updatedOptions) => {
const result = utils_common_assertResponse(await this.pageBlobContext.getPageRangesDiff({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
prevsnapshot: prevSnapshot,
range: rangeToString({ offset, count }),
tracingOptions: updatedOptions.tracingOptions,
}));
return rangeResponseFromModel(result);
});
}
/**
* getPageRangesDiffSegment returns a single segment of page ranges starting from the
* specified Marker for difference between previous snapshot and the target page blob.
* Use an empty Marker to start enumeration from the beginning.
* After getting a segment, process it, and then call getPageRangesDiffSegment again
* (passing the the previously-returned Marker) to get the next segment.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.
* @param marker - A string value that identifies the portion of the get to be returned with the next get operation.
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
*/
async listPageRangesDiffSegment(offset, count, prevSnapshotOrUrl, marker, options = {}) {
return tracingClient.withSpan("PageBlobClient-getPageRangesDiffSegment", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.getPageRangesDiff({
abortSignal: options?.abortSignal,
leaseAccessConditions: options?.conditions,
modifiedAccessConditions: {
...options?.conditions,
ifTags: options?.conditions?.tagConditions,
},
prevsnapshot: prevSnapshotOrUrl,
range: rangeToString({
offset: offset,
count: count,
}),
marker: marker,
maxPageSize: options?.maxPageSize,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Returns an AsyncIterableIterator for {@link PageBlobGetPageRangesDiffResponseModel}
*
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.
* @param marker - A string value that identifies the portion of
* the get of page ranges to be returned with the next getting operation. The
* operation returns the ContinuationToken value within the response body if the
* getting operation did not return all page ranges remaining within the current page.
* The ContinuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of get
* items. The marker value is opaque to the client.
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
*/
async *listPageRangeDiffItemSegments(offset, count, prevSnapshotOrUrl, marker, options) {
let getPageRangeItemSegmentsResponse;
if (!!marker || marker === undefined) {
do {
getPageRangeItemSegmentsResponse = await this.listPageRangesDiffSegment(offset, count, prevSnapshotOrUrl, marker, options);
marker = getPageRangeItemSegmentsResponse.continuationToken;
yield await getPageRangeItemSegmentsResponse;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator of {@link PageRangeInfo} objects
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param prevSnapshotOrUrl - Timestamp of snapshot to retrieve the difference or URL of snapshot to retrieve the difference.
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
*/
async *listPageRangeDiffItems(offset, count, prevSnapshotOrUrl, options) {
let marker;
for await (const getPageRangesSegment of this.listPageRangeDiffItemSegments(offset, count, prevSnapshotOrUrl, marker, options)) {
yield* ExtractPageRangeInfoItems(getPageRangesSegment);
}
}
/**
* Returns an async iterable iterator to list of page ranges that differ between a specified snapshot and this page blob.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* .byPage() returns an async iterable iterator to list of page ranges that differ between a specified snapshot and this page blob.
*
* ```ts snippet:ClientsListPageBlobsDiff
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const pageBlobClient = containerClient.getPageBlobClient(blobName);
*
* const offset = 0;
* const count = 1024;
* const previousSnapshot = "<previous snapshot>";
* // Example using `for await` syntax
* let i = 1;
* for await (const pageRange of pageBlobClient.listPageRangesDiff(offset, count, previousSnapshot)) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
*
* // Example using `iter.next()` syntax
* i = 1;
* const iter = pageBlobClient.listPageRangesDiff(offset, count, previousSnapshot);
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Page range ${i++}: ${value.start} - ${value.end}`);
* ({ value, done } = await iter.next());
* }
*
* // Example using `byPage()` syntax
* i = 1;
* for await (const page of pageBlobClient
* .listPageRangesDiff(offset, count, previousSnapshot)
* .byPage({ maxPageSize: 20 })) {
* for (const pageRange of page.pageRange || []) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
*
* // Example using paging with a marker
* i = 1;
* let iterator = pageBlobClient
* .listPageRangesDiff(offset, count, previousSnapshot)
* .byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 page ranges
* if (response.pageRange) {
* for (const pageRange of response.pageRange) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = pageBlobClient
* .listPageRangesDiff(offset, count, previousSnapshot)
* .byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
* // Prints 10 page ranges
* if (response.pageRange) {
* for (const pageRange of response.pageRange) {
* console.log(`Page range ${i++}: ${pageRange.start} - ${pageRange.end}`);
* }
* }
* ```
*
* @param offset - Starting byte position of the page ranges.
* @param count - Number of bytes to get.
* @param prevSnapshot - Timestamp of snapshot to retrieve the difference.
* @param options - Options to the Page Blob Get Ranges operation.
* @returns An asyncIterableIterator that supports paging.
*/
listPageRangesDiff(offset, count, prevSnapshot, options = {}) {
options.conditions = options.conditions || {};
// AsyncIterableIterator to iterate over blobs
const iter = this.listPageRangeDiffItems(offset, count, prevSnapshot, {
...options,
});
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.listPageRangeDiffItemSegments(offset, count, prevSnapshot, settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...options,
});
},
};
}
/**
* Gets the collection of page ranges that differ between a specified snapshot and this page blob for managed disks.
* @see https://learn.microsoft.com/rest/api/storageservices/get-page-ranges
*
* @param offset - Starting byte position of the page blob
* @param count - Number of bytes to get ranges diff.
* @param prevSnapshotUrl - URL of snapshot to retrieve the difference.
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
* @returns Response data for the Page Blob Get Page Range Diff operation.
*/
async getPageRangesDiffForManagedDisks(offset, count, prevSnapshotUrl, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-GetPageRangesDiffForManagedDisks", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.pageBlobContext.getPageRangesDiff({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
prevSnapshotUrl,
range: rangeToString({ offset, count }),
tracingOptions: updatedOptions.tracingOptions,
}));
return rangeResponseFromModel(response);
});
}
/**
* Resizes the page blob to the specified size (which must be a multiple of 512).
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-properties
*
* @param size - Target size
* @param options - Options to the Page Blob Resize operation.
* @returns Response data for the Page Blob Resize operation.
*/
async resize(size, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-resize", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.resize(size, {
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
encryptionScope: options.encryptionScope,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets a page blob's sequence number.
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-properties
*
* @param sequenceNumberAction - Indicates how the service should modify the blob's sequence number.
* @param sequenceNumber - Required if sequenceNumberAction is max or update
* @param options - Options to the Page Blob Update Sequence Number operation.
* @returns Response data for the Page Blob Update Sequence Number operation.
*/
async updateSequenceNumber(sequenceNumberAction, sequenceNumber, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("PageBlobClient-updateSequenceNumber", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, {
abortSignal: options.abortSignal,
blobSequenceNumber: sequenceNumber,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Begins an operation to start an incremental copy from one page blob's snapshot to this page blob.
* The snapshot is copied such that only the differential changes between the previously
* copied snapshot are transferred to the destination.
* The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual.
* @see https://learn.microsoft.com/rest/api/storageservices/incremental-copy-blob
* @see https://learn.microsoft.com/azure/virtual-machines/windows/incremental-snapshots
*
* @param copySource - Specifies the name of the source page blob snapshot. For example,
* https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
* @param options - Options to the Page Blob Copy Incremental operation.
* @returns Response data for the Page Blob Copy Incremental operation.
*/
async startCopyIncremental(copySource, options = {}) {
return tracingClient.withSpan("PageBlobClient-startCopyIncremental", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.pageBlobContext.copyIncremental(copySource, {
abortSignal: options.abortSignal,
modifiedAccessConditions: {
...options.conditions,
ifTags: options.conditions?.tagConditions,
},
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
}
//# sourceMappingURL=Clients.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BatchUtils.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
async function getBodyAsText(batchResponse) {
let buffer = Buffer.alloc(BATCH_MAX_PAYLOAD_IN_BYTES);
const responseLength = await streamToBuffer2(batchResponse.readableStreamBody, buffer);
// Slice the buffer to trim the empty ending.
buffer = buffer.slice(0, responseLength);
return buffer.toString();
}
function utf8ByteLength(str) {
return Buffer.byteLength(str);
}
//# sourceMappingURL=BatchUtils.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BatchResponseParser.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
const HTTP_HEADER_DELIMITER = ": ";
const SPACE_DELIMITER = " ";
const NOT_FOUND = -1;
/**
* Util class for parsing batch response.
*/
class BatchResponseParser {
batchResponse;
responseBatchBoundary;
perResponsePrefix;
batchResponseEnding;
subRequests;
constructor(batchResponse, subRequests) {
if (!batchResponse || !batchResponse.contentType) {
// In special case(reported), server may return invalid content-type which could not be parsed.
throw new RangeError("batchResponse is malformed or doesn't contain valid content-type.");
}
if (!subRequests || subRequests.size === 0) {
// This should be prevent during coding.
throw new RangeError("Invalid state: subRequests is not provided or size is 0.");
}
this.batchResponse = batchResponse;
this.subRequests = subRequests;
this.responseBatchBoundary = this.batchResponse.contentType.split("=")[1];
this.perResponsePrefix = `--${this.responseBatchBoundary}${HTTP_LINE_ENDING}`;
this.batchResponseEnding = `--${this.responseBatchBoundary}--`;
}
// For example of response, please refer to https://learn.microsoft.com/rest/api/storageservices/blob-batch#response
async parseBatchResponse() {
// When logic reach here, suppose batch request has already succeeded with 202, so we can further parse
// sub request's response.
if (this.batchResponse._response.status !== HTTPURLConnection.HTTP_ACCEPTED) {
throw new Error(`Invalid state: batch request failed with status: '${this.batchResponse._response.status}'.`);
}
const responseBodyAsText = await getBodyAsText(this.batchResponse);
const subResponses = responseBodyAsText
.split(this.batchResponseEnding)[0] // string after ending is useless
.split(this.perResponsePrefix)
.slice(1); // string before first response boundary is useless
const subResponseCount = subResponses.length;
// Defensive coding in case of potential error parsing.
// Note: subResponseCount == 1 is special case where sub request is invalid.
// We try to prevent such cases through early validation, e.g. validate sub request count >= 1.
// While in unexpected sub request invalid case, we allow sub response to be parsed and return to user.
if (subResponseCount !== this.subRequests.size && subResponseCount !== 1) {
throw new Error("Invalid state: sub responses' count is not equal to sub requests' count.");
}
const deserializedSubResponses = new Array(subResponseCount);
let subResponsesSucceededCount = 0;
let subResponsesFailedCount = 0;
// Parse sub subResponses.
for (let index = 0; index < subResponseCount; index++) {
const subResponse = subResponses[index];
const deserializedSubResponse = {};
deserializedSubResponse.headers = toHttpHeadersLike(esm_httpHeaders_createHttpHeaders());
const responseLines = subResponse.split(`${HTTP_LINE_ENDING}`);
let subRespHeaderStartFound = false;
let subRespHeaderEndFound = false;
let subRespFailed = false;
let contentId = NOT_FOUND;
for (const responseLine of responseLines) {
if (!subRespHeaderStartFound) {
// Convention line to indicate content ID
if (responseLine.startsWith(utils_constants_HeaderConstants.CONTENT_ID)) {
contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]);
}
// Http version line with status code indicates the start of sub request's response.
// Example: HTTP/1.1 202 Accepted
if (responseLine.startsWith(HTTP_VERSION_1_1)) {
subRespHeaderStartFound = true;
const tokens = responseLine.split(SPACE_DELIMITER);
deserializedSubResponse.status = parseInt(tokens[1]);
deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER);
}
continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: *
}
if (responseLine.trim() === "") {
// Sub response's header start line already found, and the first empty line indicates header end line found.
if (!subRespHeaderEndFound) {
subRespHeaderEndFound = true;
}
continue; // Skip empty line
}
// Note: when code reach here, it indicates subRespHeaderStartFound == true
if (!subRespHeaderEndFound) {
if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) {
// Defensive coding to prevent from missing valuable lines.
throw new Error(`Invalid state: find non-empty line '${responseLine}' without HTTP header delimiter '${HTTP_HEADER_DELIMITER}'.`);
}
// Parse headers of sub response.
const tokens = responseLine.split(HTTP_HEADER_DELIMITER);
deserializedSubResponse.headers.set(tokens[0], tokens[1]);
if (tokens[0] === utils_constants_HeaderConstants.X_MS_ERROR_CODE) {
deserializedSubResponse.errorCode = tokens[1];
subRespFailed = true;
}
}
else {
// Assemble body of sub response.
if (!deserializedSubResponse.bodyAsText) {
deserializedSubResponse.bodyAsText = "";
}
deserializedSubResponse.bodyAsText += responseLine;
}
} // Inner for end
// The response will contain the Content-ID header for each corresponding subrequest response to use for tracking.
// The Content-IDs are set to a valid index in the subrequests we sent. In the status code 202 path, we could expect it
// to be 1-1 mapping from the [0, subRequests.size) to the Content-IDs returned. If not, we simply don't return that
// unexpected subResponse in the parsed reponse and we can always look it up in the raw response for debugging purpose.
if (contentId !== NOT_FOUND &&
Number.isInteger(contentId) &&
contentId >= 0 &&
contentId < this.subRequests.size &&
deserializedSubResponses[contentId] === undefined) {
deserializedSubResponse._request = this.subRequests.get(contentId);
deserializedSubResponses[contentId] = deserializedSubResponse;
}
else {
storage_blob_dist_esm_log_logger.error(`subResponses[${index}] is dropped as the Content-ID is not found or invalid, Content-ID: ${contentId}`);
}
if (subRespFailed) {
subResponsesFailedCount++;
}
else {
subResponsesSucceededCount++;
}
}
return {
subResponses: deserializedSubResponses,
subResponsesSucceededCount: subResponsesSucceededCount,
subResponsesFailedCount: subResponsesFailedCount,
};
}
}
//# sourceMappingURL=BatchResponseParser.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/utils/Mutex.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var MutexLockStatus;
(function (MutexLockStatus) {
MutexLockStatus[MutexLockStatus["LOCKED"] = 0] = "LOCKED";
MutexLockStatus[MutexLockStatus["UNLOCKED"] = 1] = "UNLOCKED";
})(MutexLockStatus || (MutexLockStatus = {}));
/**
* An async mutex lock.
*/
class Mutex {
/**
* Lock for a specific key. If the lock has been acquired by another customer, then
* will wait until getting the lock.
*
* @param key - lock key
*/
static async lock(key) {
return new Promise((resolve) => {
if (this.keys[key] === undefined || this.keys[key] === MutexLockStatus.UNLOCKED) {
this.keys[key] = MutexLockStatus.LOCKED;
resolve();
}
else {
this.onUnlockEvent(key, () => {
this.keys[key] = MutexLockStatus.LOCKED;
resolve();
});
}
});
}
/**
* Unlock a key.
*
* @param key -
*/
static async unlock(key) {
return new Promise((resolve) => {
if (this.keys[key] === MutexLockStatus.LOCKED) {
this.emitUnlockEvent(key);
}
delete this.keys[key];
resolve();
});
}
static keys = {};
static listeners = {};
static onUnlockEvent(key, handler) {
if (this.listeners[key] === undefined) {
this.listeners[key] = [handler];
}
else {
this.listeners[key].push(handler);
}
}
static emitUnlockEvent(key) {
if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {
const handler = this.listeners[key].shift();
setImmediate(() => {
handler.call(this);
});
}
}
}
//# sourceMappingURL=Mutex.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobBatch.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A BlobBatch represents an aggregated set of operations on blobs.
* Currently, only `delete` and `setAccessTier` are supported.
*/
class BlobBatch {
batchRequest;
batch = "batch";
batchType;
constructor() {
this.batchRequest = new InnerBatchRequest();
}
/**
* Get the value of Content-Type for a batch request.
* The value must be multipart/mixed with a batch boundary.
* Example: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252
*/
getMultiPartContentType() {
return this.batchRequest.getMultipartContentType();
}
/**
* Get assembled HTTP request body for sub requests.
*/
getHttpRequestBody() {
return this.batchRequest.getHttpRequestBody();
}
/**
* Get sub requests that are added into the batch request.
*/
getSubRequests() {
return this.batchRequest.getSubRequests();
}
async addSubRequestInternal(subRequest, assembleSubRequestFunc) {
await Mutex.lock(this.batch);
try {
this.batchRequest.preAddSubRequest(subRequest);
await assembleSubRequestFunc();
this.batchRequest.postAddSubRequest(subRequest);
}
finally {
await Mutex.unlock(this.batch);
}
}
setBatchType(batchType) {
if (!this.batchType) {
this.batchType = batchType;
}
if (this.batchType !== batchType) {
throw new RangeError(`BlobBatch only supports one operation type per batch and it already is being used for ${this.batchType} operations.`);
}
}
async deleteBlob(urlOrBlobClient, credentialOrOptions, options) {
let url;
let credential;
if (typeof urlOrBlobClient === "string" &&
((esm_isNodeLike && credentialOrOptions instanceof StorageSharedKeyCredential) ||
credentialOrOptions instanceof AnonymousCredential ||
isTokenCredential(credentialOrOptions))) {
// First overload
url = urlOrBlobClient;
credential = credentialOrOptions;
}
else if (urlOrBlobClient instanceof Clients_BlobClient) {
// Second overload
url = urlOrBlobClient.url;
credential = urlOrBlobClient.credential;
options = credentialOrOptions;
}
else {
throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided.");
}
if (!options) {
options = {};
}
return tracingClient.withSpan("BatchDeleteRequest-addSubRequest", options, async (updatedOptions) => {
this.setBatchType("delete");
await this.addSubRequestInternal({
url: url,
credential: credential,
}, async () => {
await new Clients_BlobClient(url, this.batchRequest.createPipeline(credential)).delete(updatedOptions);
});
});
}
async setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options) {
let url;
let credential;
let tier;
if (typeof urlOrBlobClient === "string" &&
((esm_isNodeLike && credentialOrTier instanceof StorageSharedKeyCredential) ||
credentialOrTier instanceof AnonymousCredential ||
isTokenCredential(credentialOrTier))) {
// First overload
url = urlOrBlobClient;
credential = credentialOrTier;
tier = tierOrOptions;
}
else if (urlOrBlobClient instanceof Clients_BlobClient) {
// Second overload
url = urlOrBlobClient.url;
credential = urlOrBlobClient.credential;
tier = credentialOrTier;
options = tierOrOptions;
}
else {
throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided.");
}
if (!options) {
options = {};
}
return tracingClient.withSpan("BatchSetTierRequest-addSubRequest", options, async (updatedOptions) => {
this.setBatchType("setAccessTier");
await this.addSubRequestInternal({
url: url,
credential: credential,
}, async () => {
await new Clients_BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, updatedOptions);
});
});
}
}
/**
* Inner batch request class which is responsible for assembling and serializing sub requests.
* See https://learn.microsoft.com/rest/api/storageservices/blob-batch#request-body for how requests are assembled.
*/
class InnerBatchRequest {
operationCount;
body;
subRequests;
boundary;
subRequestPrefix;
multipartContentType;
batchRequestEnding;
constructor() {
this.operationCount = 0;
this.body = "";
const tempGuid = esm_randomUUID();
// batch_{batchid}
this.boundary = `batch_${tempGuid}`;
// --batch_{batchid}
// Content-Type: application/http
// Content-Transfer-Encoding: binary
this.subRequestPrefix = `--${this.boundary}${HTTP_LINE_ENDING}${utils_constants_HeaderConstants.CONTENT_TYPE}: application/http${HTTP_LINE_ENDING}${utils_constants_HeaderConstants.CONTENT_TRANSFER_ENCODING}: binary`;
// multipart/mixed; boundary=batch_{batchid}
this.multipartContentType = `multipart/mixed; boundary=${this.boundary}`;
// --batch_{batchid}--
this.batchRequestEnding = `--${this.boundary}--`;
this.subRequests = new Map();
}
/**
* Create pipeline to assemble sub requests. The idea here is to use existing
* credential and serialization/deserialization components, with additional policies to
* filter unnecessary headers, assemble sub requests into request's body
* and intercept request from going to wire.
* @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
*/
createPipeline(credential) {
const corePipeline = esm_pipeline_createEmptyPipeline();
corePipeline.addPolicy(serializationPolicy({
stringifyXML: stringifyXML,
serializerOptions: {
xml: {
xmlCharKey: "#",
},
},
}), { phase: "Serialize" });
// Use batch header filter policy to exclude unnecessary headers
corePipeline.addPolicy(batchHeaderFilterPolicy());
// Use batch assemble policy to assemble request and intercept request from going to wire
corePipeline.addPolicy(batchRequestAssemblePolicy(this), { afterPhase: "Sign" });
if (isTokenCredential(credential)) {
corePipeline.addPolicy(bearerTokenAuthenticationPolicy({
credential,
scopes: StorageOAuthScopes,
challengeCallbacks: { authorizeRequestOnChallenge: authorizeRequestOnTenantChallenge },
}), { phase: "Sign" });
}
else if (credential instanceof StorageSharedKeyCredential) {
corePipeline.addPolicy(storageSharedKeyCredentialPolicy({
accountName: credential.accountName,
accountKey: credential.accountKey,
}), { phase: "Sign" });
}
const pipeline = new Pipeline([]);
// attach the v2 pipeline to this one
pipeline._credential = credential;
pipeline._corePipeline = corePipeline;
return pipeline;
}
appendSubRequestToBody(request) {
// Start to assemble sub request
this.body += [
this.subRequestPrefix, // sub request constant prefix
`${utils_constants_HeaderConstants.CONTENT_ID}: ${this.operationCount}`, // sub request's content ID
"", // empty line after sub request's content ID
`${request.method.toString()} ${utils_common_getURLPathAndQuery(request.url)} ${HTTP_VERSION_1_1}${HTTP_LINE_ENDING}`, // sub request start line with method
].join(HTTP_LINE_ENDING);
for (const [name, value] of request.headers) {
this.body += `${name}: ${value}${HTTP_LINE_ENDING}`;
}
this.body += HTTP_LINE_ENDING; // sub request's headers need be ending with an empty line
// No body to assemble for current batch request support
// End to assemble sub request
}
preAddSubRequest(subRequest) {
if (this.operationCount >= BATCH_MAX_REQUEST) {
throw new RangeError(`Cannot exceed ${BATCH_MAX_REQUEST} sub requests in a single batch`);
}
// Fast fail if url for sub request is invalid
const path = utils_common_getURLPath(subRequest.url);
if (!path || path === "") {
throw new RangeError(`Invalid url for sub request: '${subRequest.url}'`);
}
}
postAddSubRequest(subRequest) {
this.subRequests.set(this.operationCount, subRequest);
this.operationCount++;
}
// Return the http request body with assembling the ending line to the sub request body.
getHttpRequestBody() {
return `${this.body}${this.batchRequestEnding}${HTTP_LINE_ENDING}`;
}
getMultipartContentType() {
return this.multipartContentType;
}
getSubRequests() {
return this.subRequests;
}
}
function batchRequestAssemblePolicy(batchRequest) {
return {
name: "batchRequestAssemblePolicy",
async sendRequest(request) {
batchRequest.appendSubRequestToBody(request);
return {
request,
status: 200,
headers: esm_httpHeaders_createHttpHeaders(),
};
},
};
}
function batchHeaderFilterPolicy() {
return {
name: "batchHeaderFilterPolicy",
async sendRequest(request, next) {
let xMsHeaderName = "";
for (const [name] of request.headers) {
if (utils_common_iEqual(name, utils_constants_HeaderConstants.X_MS_VERSION)) {
xMsHeaderName = name;
}
}
if (xMsHeaderName !== "") {
request.headers.delete(xMsHeaderName); // The subrequests should not have the x-ms-version header.
}
return next(request);
},
};
}
//# sourceMappingURL=BlobBatch.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobBatchClient.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* A BlobBatchClient allows you to make batched requests to the Azure Storage Blob service.
*
* @see https://learn.microsoft.com/rest/api/storageservices/blob-batch
*/
class BlobBatchClient {
serviceOrContainerContext;
constructor(url, credentialOrPipeline,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
let pipeline;
if (isPipelineLike(credentialOrPipeline)) {
pipeline = credentialOrPipeline;
}
else if (!credentialOrPipeline) {
// no credential provided
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
pipeline = newPipeline(credentialOrPipeline, options);
}
const storageClientContext = new StorageContextClient(url, getCoreClientOptions(pipeline));
const path = utils_common_getURLPath(url);
if (path && path !== "/") {
// Container scoped.
this.serviceOrContainerContext = storageClientContext.container;
}
else {
this.serviceOrContainerContext = storageClientContext.service;
}
}
/**
* Creates a {@link BlobBatch}.
* A BlobBatch represents an aggregated set of operations on blobs.
*/
createBatch() {
return new BlobBatch();
}
async deleteBlobs(urlsOrBlobClients, credentialOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
const batch = new BlobBatch();
for (const urlOrBlobClient of urlsOrBlobClients) {
if (typeof urlOrBlobClient === "string") {
await batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options);
}
else {
await batch.deleteBlob(urlOrBlobClient, credentialOrOptions);
}
}
return this.submitBatch(batch);
}
async setBlobsAccessTier(urlsOrBlobClients, credentialOrTier, tierOrOptions,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
const batch = new BlobBatch();
for (const urlOrBlobClient of urlsOrBlobClients) {
if (typeof urlOrBlobClient === "string") {
await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options);
}
else {
await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions);
}
}
return this.submitBatch(batch);
}
/**
* Submit batch request which consists of multiple subrequests.
*
* Get `blobBatchClient` and other details before running the snippets.
* `blobServiceClient.getBlobBatchClient()` gives the `blobBatchClient`
*
* Example usage:
*
* ```ts snippet:BlobBatchClientSubmitBatch
* import { DefaultAzureCredential } from "@azure/identity";
* import { BlobServiceClient, BlobBatch } from "@azure/storage-blob";
*
* const account = "<account>";
* const credential = new DefaultAzureCredential();
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* credential,
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blobBatchClient = containerClient.getBlobBatchClient();
*
* const batchRequest = new BlobBatch();
* await batchRequest.deleteBlob("<blob-url-1>", credential);
* await batchRequest.deleteBlob("<blob-url-2>", credential, {
* deleteSnapshots: "include",
* });
* const batchResp = await blobBatchClient.submitBatch(batchRequest);
* console.log(batchResp.subResponsesSucceededCount);
* ```
*
* Example using a lease:
*
* ```ts snippet:BlobBatchClientSubmitBatchWithLease
* import { DefaultAzureCredential } from "@azure/identity";
* import { BlobServiceClient, BlobBatch } from "@azure/storage-blob";
*
* const account = "<account>";
* const credential = new DefaultAzureCredential();
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* credential,
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blobBatchClient = containerClient.getBlobBatchClient();
* const blobClient = containerClient.getBlobClient("<blob name>");
*
* const batchRequest = new BlobBatch();
* await batchRequest.setBlobAccessTier(blobClient, "Cool");
* await batchRequest.setBlobAccessTier(blobClient, "Cool", {
* conditions: { leaseId: "<lease-id>" },
* });
* const batchResp = await blobBatchClient.submitBatch(batchRequest);
* console.log(batchResp.subResponsesSucceededCount);
* ```
*
* @see https://learn.microsoft.com/rest/api/storageservices/blob-batch
*
* @param batchRequest - A set of Delete or SetTier operations.
* @param options -
*/
async submitBatch(batchRequest, options = {}) {
if (!batchRequest || batchRequest.getSubRequests().size === 0) {
throw new RangeError("Batch request should contain one or more sub requests.");
}
return tracingClient.withSpan("BlobBatchClient-submitBatch", options, async (updatedOptions) => {
const batchRequestBody = batchRequest.getHttpRequestBody();
// ServiceSubmitBatchResponseModel and ContainerSubmitBatchResponse are compatible for now.
const rawBatchResponse = utils_common_assertResponse((await this.serviceOrContainerContext.submitBatch(utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), batchRequestBody, {
...updatedOptions,
})));
// Parse the sub responses result, if logic reaches here(i.e. the batch request succeeded with status code 202).
const batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests());
const responseSummary = await batchResponseParser.parseBatchResponse();
const res = {
_response: rawBatchResponse._response,
contentType: rawBatchResponse.contentType,
errorCode: rawBatchResponse.errorCode,
requestId: rawBatchResponse.requestId,
clientRequestId: rawBatchResponse.clientRequestId,
version: rawBatchResponse.version,
subResponses: responseSummary.subResponses,
subResponsesSucceededCount: responseSummary.subResponsesSucceededCount,
subResponsesFailedCount: responseSummary.subResponsesFailedCount,
};
return res;
});
}
}
//# sourceMappingURL=BlobBatchClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/ContainerClient.js
/**
* A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs.
*/
class ContainerClient extends StorageClient_StorageClient {
/**
* containerContext provided by protocol layer.
*/
containerContext;
_containerName;
blobClientConfig;
/**
* The name of the container.
*/
get containerName() {
return this._containerName;
}
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
let pipeline;
let url;
options = options || {};
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
// (url: string, pipeline: Pipeline, options?: BlobClientConfig)
url = urlOrConnectionString;
pipeline = credentialOrPipelineOrContainerName;
}
else if ((esm_isNodeLike && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipelineOrContainerName)) {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
url = urlOrConnectionString;
pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
}
else if (!credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName !== "string") {
// (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
// The second parameter is undefined. Use anonymous credential.
url = urlOrConnectionString;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else if (credentialOrPipelineOrContainerName &&
typeof credentialOrPipelineOrContainerName === "string") {
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
const containerName = credentialOrPipelineOrContainerName;
const extractedCreds = utils_common_extractConnectionStringParts(urlOrConnectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
url = utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName));
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
pipeline = newPipeline(sharedKeyCredential, options);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
url =
utils_common_appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)) +
"?" +
extractedCreds.accountSas;
pipeline = newPipeline(new AnonymousCredential(), options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
else {
throw new Error("Expecting non-empty strings for containerName parameter");
}
super(url, pipeline);
this._containerName = this.getContainerNameFromUrl();
this.containerContext = this.storageClientContext.container;
this.blobClientConfig = options;
}
/**
* Creates a new container under the specified account. If the container with
* the same name already exists, the operation fails.
* @see https://learn.microsoft.com/rest/api/storageservices/create-container
* Naming rules: @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
*
* @param options - Options to Container Create operation.
*
*
* Example usage:
*
* ```ts snippet:ContainerClientCreate
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const createContainerResponse = await containerClient.create();
* console.log("Container was created successfully", createContainerResponse.requestId);
* ```
*/
async create(options = {}) {
return tracingClient.withSpan("ContainerClient-create", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.containerContext.create(updatedOptions));
});
}
/**
* Creates a new container under the specified account. If the container with
* the same name already exists, it is not changed.
* @see https://learn.microsoft.com/rest/api/storageservices/create-container
* Naming rules: @see https://learn.microsoft.com/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
*
* @param options -
*/
async createIfNotExists(options = {}) {
return tracingClient.withSpan("ContainerClient-createIfNotExists", options, async (updatedOptions) => {
try {
const res = await this.create(updatedOptions);
return {
succeeded: true,
...res,
_response: res._response, // _response is made non-enumerable
};
}
catch (e) {
if (e.details?.errorCode === "ContainerAlreadyExists") {
return {
succeeded: false,
...e.response?.parsedHeaders,
_response: e.response,
};
}
else {
throw e;
}
}
});
}
/**
* Returns true if the Azure container resource represented by this client exists; false otherwise.
*
* NOTE: use this function with care since an existing container might be deleted by other clients or
* applications. Vice versa new containers with the same name might be added by other clients or
* applications after this function completes.
*
* @param options -
*/
async exists(options = {}) {
return tracingClient.withSpan("ContainerClient-exists", options, async (updatedOptions) => {
try {
await this.getProperties({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
});
return true;
}
catch (e) {
if (e.statusCode === 404) {
return false;
}
throw e;
}
});
}
/**
* Creates a {@link BlobClient}
*
* @param blobName - A blob name
* @returns A new BlobClient object for the given blob name.
*/
getBlobClient(blobName) {
return new Clients_BlobClient(utils_common_appendToURLPath(this.url, utils_common_EscapePath(blobName)), this.pipeline, this.blobClientConfig);
}
/**
* Creates an {@link AppendBlobClient}
*
* @param blobName - An append blob name
*/
getAppendBlobClient(blobName) {
return new AppendBlobClient(utils_common_appendToURLPath(this.url, utils_common_EscapePath(blobName)), this.pipeline, this.blobClientConfig);
}
/**
* Creates a {@link BlockBlobClient}
*
* @param blobName - A block blob name
*
*
* Example usage:
*
* ```ts snippet:ClientsUpload
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const blobName = "<blob name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
* const blockBlobClient = containerClient.getBlockBlobClient(blobName);
*
* const content = "Hello world!";
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
* ```
*/
getBlockBlobClient(blobName) {
return new BlockBlobClient(utils_common_appendToURLPath(this.url, utils_common_EscapePath(blobName)), this.pipeline, this.blobClientConfig);
}
/**
* Creates a {@link PageBlobClient}
*
* @param blobName - A page blob name
*/
getPageBlobClient(blobName) {
return new PageBlobClient(utils_common_appendToURLPath(this.url, utils_common_EscapePath(blobName)), this.pipeline, this.blobClientConfig);
}
/**
* Returns all user-defined metadata and system properties for the specified
* container. The data returned does not include the container's list of blobs.
* @see https://learn.microsoft.com/rest/api/storageservices/get-container-properties
*
* WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if
* they originally contained uppercase characters. This differs from the metadata keys returned by
* the `listContainers` method of {@link BlobServiceClient} using the `includeMetadata` option, which
* will retain their original casing.
*
* @param options - Options to Container Get Properties operation.
*/
async getProperties(options = {}) {
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("ContainerClient-getProperties", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.containerContext.getProperties({
abortSignal: options.abortSignal,
...options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Marks the specified container for deletion. The container and any blobs
* contained within it are later deleted during garbage collection.
* @see https://learn.microsoft.com/rest/api/storageservices/delete-container
*
* @param options - Options to Container Delete operation.
*/
async delete(options = {}) {
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("ContainerClient-delete", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.containerContext.delete({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Marks the specified container for deletion if it exists. The container and any blobs
* contained within it are later deleted during garbage collection.
* @see https://learn.microsoft.com/rest/api/storageservices/delete-container
*
* @param options - Options to Container Delete operation.
*/
async deleteIfExists(options = {}) {
return tracingClient.withSpan("ContainerClient-deleteIfExists", options, async (updatedOptions) => {
try {
const res = await this.delete(updatedOptions);
return {
succeeded: true,
...res,
_response: res._response,
};
}
catch (e) {
if (e.details?.errorCode === "ContainerNotFound") {
return {
succeeded: false,
...e.response?.parsedHeaders,
_response: e.response,
};
}
throw e;
}
});
}
/**
* Sets one or more user-defined name-value pairs for the specified container.
*
* If no option provided, or no metadata defined in the parameter, the container
* metadata will be removed.
*
* @see https://learn.microsoft.com/rest/api/storageservices/set-container-metadata
*
* @param metadata - Replace existing metadata with this value.
* If no value provided the existing metadata will be removed.
* @param options - Options to Container Set Metadata operation.
*/
async setMetadata(metadata, options = {}) {
if (!options.conditions) {
options.conditions = {};
}
if (options.conditions.ifUnmodifiedSince) {
throw new RangeError("the IfUnmodifiedSince must have their default values because they are ignored by the blob service");
}
return tracingClient.withSpan("ContainerClient-setMetadata", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.containerContext.setMetadata({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
metadata,
modifiedAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Gets the permissions for the specified container. The permissions indicate
* whether container data may be accessed publicly.
*
* WARNING: JavaScript Date will potentially lose precision when parsing startsOn and expiresOn strings.
* For example, new Date("2018-12-31T03:44:23.8827891Z").toISOString() will get "2018-12-31T03:44:23.882Z".
*
* @see https://learn.microsoft.com/rest/api/storageservices/get-container-acl
*
* @param options - Options to Container Get Access Policy operation.
*/
async getAccessPolicy(options = {}) {
if (!options.conditions) {
options.conditions = {};
}
return tracingClient.withSpan("ContainerClient-getAccessPolicy", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.containerContext.getAccessPolicy({
abortSignal: options.abortSignal,
leaseAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
const res = {
_response: response._response,
blobPublicAccess: response.blobPublicAccess,
date: response.date,
etag: response.etag,
errorCode: response.errorCode,
lastModified: response.lastModified,
requestId: response.requestId,
clientRequestId: response.clientRequestId,
signedIdentifiers: [],
version: response.version,
};
for (const identifier of response) {
let accessPolicy = undefined;
if (identifier.accessPolicy) {
accessPolicy = {
permissions: identifier.accessPolicy.permissions,
};
if (identifier.accessPolicy.expiresOn) {
accessPolicy.expiresOn = new Date(identifier.accessPolicy.expiresOn);
}
if (identifier.accessPolicy.startsOn) {
accessPolicy.startsOn = new Date(identifier.accessPolicy.startsOn);
}
}
res.signedIdentifiers.push({
accessPolicy,
id: identifier.id,
});
}
return res;
});
}
/**
* Sets the permissions for the specified container. The permissions indicate
* whether blobs in a container may be accessed publicly.
*
* When you set permissions for a container, the existing permissions are replaced.
* If no access or containerAcl provided, the existing container ACL will be
* removed.
*
* When you establish a stored access policy on a container, it may take up to 30 seconds to take effect.
* During this interval, a shared access signature that is associated with the stored access policy will
* fail with status code 403 (Forbidden), until the access policy becomes active.
* @see https://learn.microsoft.com/rest/api/storageservices/set-container-acl
*
* @param access - The level of public access to data in the container.
* @param containerAcl - Array of elements each having a unique Id and details of the access policy.
* @param options - Options to Container Set Access Policy operation.
*/
async setAccessPolicy(access, containerAcl, options = {}) {
options.conditions = options.conditions || {};
return tracingClient.withSpan("ContainerClient-setAccessPolicy", options, async (updatedOptions) => {
const acl = [];
for (const identifier of containerAcl || []) {
acl.push({
accessPolicy: {
expiresOn: identifier.accessPolicy.expiresOn
? utils_common_truncatedISO8061Date(identifier.accessPolicy.expiresOn)
: "",
permissions: identifier.accessPolicy.permissions,
startsOn: identifier.accessPolicy.startsOn
? utils_common_truncatedISO8061Date(identifier.accessPolicy.startsOn)
: "",
},
id: identifier.id,
});
}
return utils_common_assertResponse(await this.containerContext.setAccessPolicy({
abortSignal: options.abortSignal,
access,
containerAcl: acl,
leaseAccessConditions: options.conditions,
modifiedAccessConditions: options.conditions,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Get a {@link BlobLeaseClient} that manages leases on the container.
*
* @param proposeLeaseId - Initial proposed lease Id.
* @returns A new BlobLeaseClient object for managing leases on the container.
*/
getBlobLeaseClient(proposeLeaseId) {
return new BlobLeaseClient(this, proposeLeaseId);
}
/**
* Creates a new block blob, or updates the content of an existing block blob.
*
* Updating an existing block blob overwrites any existing metadata on the blob.
* Partial updates are not supported; the content of the existing blob is
* overwritten with the new content. To perform a partial update of a block blob's,
* use {@link BlockBlobClient.stageBlock} and {@link BlockBlobClient.commitBlockList}.
*
* This is a non-parallel uploading method, please use {@link BlockBlobClient.uploadFile},
* {@link BlockBlobClient.uploadStream} or {@link BlockBlobClient.uploadBrowserData} for better
* performance with concurrency uploading.
*
* @see https://learn.microsoft.com/rest/api/storageservices/put-blob
*
* @param blobName - Name of the block blob to create or update.
* @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function
* which returns a new Readable stream whose offset is from data source beginning.
* @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
* string including non non-Base64/Hex-encoded characters.
* @param options - Options to configure the Block Blob Upload operation.
* @returns Block Blob upload response data and the corresponding BlockBlobClient instance.
*/
async uploadBlockBlob(blobName, body, contentLength, options = {}) {
return tracingClient.withSpan("ContainerClient-uploadBlockBlob", options, async (updatedOptions) => {
const blockBlobClient = this.getBlockBlobClient(blobName);
const response = await blockBlobClient.upload(body, contentLength, updatedOptions);
return {
blockBlobClient,
response,
};
});
}
/**
* Marks the specified blob or snapshot for deletion. The blob is later deleted
* during garbage collection. Note that in order to delete a blob, you must delete
* all of its snapshots. You can delete both at the same time with the Delete
* Blob operation.
* @see https://learn.microsoft.com/rest/api/storageservices/delete-blob
*
* @param blobName -
* @param options - Options to Blob Delete operation.
* @returns Block blob deletion response data.
*/
async deleteBlob(blobName, options = {}) {
return tracingClient.withSpan("ContainerClient-deleteBlob", options, async (updatedOptions) => {
let blobClient = this.getBlobClient(blobName);
if (options.versionId) {
blobClient = blobClient.withVersion(options.versionId);
}
return blobClient.delete(updatedOptions);
});
}
/**
* listBlobFlatSegment returns a single segment of blobs starting from the
* specified Marker. Use an empty Marker to start enumeration from the beginning.
* After getting a segment, process it, and then call listBlobsFlatSegment again
* (passing the the previously-returned Marker) to get the next segment.
* @see https://learn.microsoft.com/rest/api/storageservices/list-blobs
*
* @param marker - A string value that identifies the portion of the list to be returned with the next list operation.
* @param options - Options to Container List Blob Flat Segment operation.
*/
async listBlobFlatSegment(marker, options = {}) {
return tracingClient.withSpan("ContainerClient-listBlobFlatSegment", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.containerContext.listBlobFlatSegment({
marker,
...options,
tracingOptions: updatedOptions.tracingOptions,
}));
const wrappedResponse = {
...response,
_response: {
...response._response,
parsedBody: ConvertInternalResponseOfListBlobFlat(response._response.parsedBody),
}, // _response is made non-enumerable
segment: {
...response.segment,
blobItems: response.segment.blobItems.map((blobItemInternal) => {
const blobItem = {
...blobItemInternal,
name: BlobNameToString(blobItemInternal.name),
tags: toTags(blobItemInternal.blobTags),
objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInternal.objectReplicationMetadata),
};
return blobItem;
}),
},
};
return wrappedResponse;
});
}
/**
* listBlobHierarchySegment returns a single segment of blobs starting from
* the specified Marker. Use an empty Marker to start enumeration from the
* beginning. After getting a segment, process it, and then call listBlobsHierarchicalSegment
* again (passing the the previously-returned Marker) to get the next segment.
* @see https://learn.microsoft.com/rest/api/storageservices/list-blobs
*
* @param delimiter - The character or string used to define the virtual hierarchy
* @param marker - A string value that identifies the portion of the list to be returned with the next list operation.
* @param options - Options to Container List Blob Hierarchy Segment operation.
*/
async listBlobHierarchySegment(delimiter, marker, options = {}) {
return tracingClient.withSpan("ContainerClient-listBlobHierarchySegment", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.containerContext.listBlobHierarchySegment(delimiter, {
marker,
...options,
tracingOptions: updatedOptions.tracingOptions,
}));
const wrappedResponse = {
...response,
_response: {
...response._response,
parsedBody: ConvertInternalResponseOfListBlobHierarchy(response._response.parsedBody),
}, // _response is made non-enumerable
segment: {
...response.segment,
blobItems: response.segment.blobItems.map((blobItemInternal) => {
const blobItem = {
...blobItemInternal,
name: BlobNameToString(blobItemInternal.name),
tags: toTags(blobItemInternal.blobTags),
objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInternal.objectReplicationMetadata),
};
return blobItem;
}),
blobPrefixes: response.segment.blobPrefixes?.map((blobPrefixInternal) => {
const blobPrefix = {
...blobPrefixInternal,
name: BlobNameToString(blobPrefixInternal.name),
};
return blobPrefix;
}),
},
};
return wrappedResponse;
});
}
/**
* Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse
*
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the ContinuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The ContinuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to list blobs operation.
*/
async *listSegments(marker, options = {}) {
let listBlobsFlatSegmentResponse;
if (!!marker || marker === undefined) {
do {
listBlobsFlatSegmentResponse = await this.listBlobFlatSegment(marker, options);
marker = listBlobsFlatSegmentResponse.continuationToken;
yield await listBlobsFlatSegmentResponse;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator of {@link BlobItem} objects
*
* @param options - Options to list blobs operation.
*/
async *listItems(options = {}) {
let marker;
for await (const listBlobsFlatSegmentResponse of this.listSegments(marker, options)) {
yield* listBlobsFlatSegmentResponse.segment.blobItems;
}
}
/**
* Returns an async iterable iterator to list all the blobs
* under the specified account.
*
* .byPage() returns an async iterable iterator to list the blobs in pages.
*
* ```ts snippet:ReadmeSampleListBlobs_Multiple
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
*
* // Example using `for await` syntax
* let i = 1;
* const blobs = containerClient.listBlobsFlat();
* for await (const blob of blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
*
* // Example using `iter.next()` syntax
* i = 1;
* const iter = containerClient.listBlobsFlat();
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Blob ${i++}: ${value.name}`);
* ({ value, done } = await iter.next());
* }
*
* // Example using `byPage()` syntax
* i = 1;
* for await (const page of containerClient.listBlobsFlat().byPage({ maxPageSize: 20 })) {
* for (const blob of page.segment.blobItems) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
*
* // Example using paging with a marker
* i = 1;
* let iterator = containerClient.listBlobsFlat().byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 blob names
* if (response.segment.blobItems) {
* for (const blob of response.segment.blobItems) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = containerClient.listBlobsFlat().byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
* // Prints 10 blob names
* if (response.segment.blobItems) {
* for (const blob of response.segment.blobItems) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* ```
*
* @param options - Options to list blobs.
* @returns An asyncIterableIterator that supports paging.
*/
listBlobsFlat(options = {}) {
const include = [];
if (options.includeCopy) {
include.push("copy");
}
if (options.includeDeleted) {
include.push("deleted");
}
if (options.includeMetadata) {
include.push("metadata");
}
if (options.includeSnapshots) {
include.push("snapshots");
}
if (options.includeVersions) {
include.push("versions");
}
if (options.includeUncommitedBlobs) {
include.push("uncommittedblobs");
}
if (options.includeTags) {
include.push("tags");
}
if (options.includeDeletedWithVersions) {
include.push("deletedwithversions");
}
if (options.includeImmutabilityPolicy) {
include.push("immutabilitypolicy");
}
if (options.includeLegalHold) {
include.push("legalhold");
}
if (options.prefix === "") {
options.prefix = undefined;
}
const updatedOptions = {
...options,
...(include.length > 0 ? { include: include } : {}),
};
// AsyncIterableIterator to iterate over blobs
const iter = this.listItems(updatedOptions);
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.listSegments(settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...updatedOptions,
});
},
};
}
/**
* Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse
*
* @param delimiter - The character or string used to define the virtual hierarchy
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the ContinuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The ContinuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to list blobs operation.
*/
async *listHierarchySegments(delimiter, marker, options = {}) {
let listBlobsHierarchySegmentResponse;
if (!!marker || marker === undefined) {
do {
listBlobsHierarchySegmentResponse = await this.listBlobHierarchySegment(delimiter, marker, options);
marker = listBlobsHierarchySegmentResponse.continuationToken;
yield await listBlobsHierarchySegmentResponse;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects.
*
* @param delimiter - The character or string used to define the virtual hierarchy
* @param options - Options to list blobs operation.
*/
async *listItemsByHierarchy(delimiter, options = {}) {
let marker;
for await (const listBlobsHierarchySegmentResponse of this.listHierarchySegments(delimiter, marker, options)) {
const segment = listBlobsHierarchySegmentResponse.segment;
if (segment.blobPrefixes) {
for (const prefix of segment.blobPrefixes) {
yield {
kind: "prefix",
...prefix,
};
}
}
for (const blob of segment.blobItems) {
yield { kind: "blob", ...blob };
}
}
}
/**
* Returns an async iterable iterator to list all the blobs by hierarchy.
* under the specified account.
*
* .byPage() returns an async iterable iterator to list the blobs by hierarchy in pages.
*
* ```ts snippet:ReadmeSampleListBlobsByHierarchy
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
*
* // Example using `for await` syntax
* let i = 1;
* const blobs = containerClient.listBlobsByHierarchy("/");
* for await (const blob of blobs) {
* if (blob.kind === "prefix") {
* console.log(`\tBlobPrefix: ${blob.name}`);
* } else {
* console.log(`\tBlobItem: name - ${blob.name}`);
* }
* }
*
* // Example using `iter.next()` syntax
* i = 1;
* const iter = containerClient.listBlobsByHierarchy("/");
* let { value, done } = await iter.next();
* while (!done) {
* if (value.kind === "prefix") {
* console.log(`\tBlobPrefix: ${value.name}`);
* } else {
* console.log(`\tBlobItem: name - ${value.name}`);
* }
* ({ value, done } = await iter.next());
* }
*
* // Example using `byPage()` syntax
* i = 1;
* for await (const page of containerClient.listBlobsByHierarchy("/").byPage({ maxPageSize: 20 })) {
* const segment = page.segment;
* if (segment.blobPrefixes) {
* for (const prefix of segment.blobPrefixes) {
* console.log(`\tBlobPrefix: ${prefix.name}`);
* }
* }
* for (const blob of page.segment.blobItems) {
* console.log(`\tBlobItem: name - ${blob.name}`);
* }
* }
*
* // Example using paging with a marker
* i = 1;
* let iterator = containerClient.listBlobsByHierarchy("/").byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 blob names
* if (response.blobPrefixes) {
* for (const prefix of response.blobPrefixes) {
* console.log(`\tBlobPrefix: ${prefix.name}`);
* }
* }
* if (response.segment.blobItems) {
* for (const blob of response.segment.blobItems) {
* console.log(`\tBlobItem: name - ${blob.name}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = containerClient
* .listBlobsByHierarchy("/")
* .byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
* // Prints 10 blob names
* if (response.blobPrefixes) {
* for (const prefix of response.blobPrefixes) {
* console.log(`\tBlobPrefix: ${prefix.name}`);
* }
* }
* if (response.segment.blobItems) {
* for (const blob of response.segment.blobItems) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* ```
*
* @param delimiter - The character or string used to define the virtual hierarchy
* @param options - Options to list blobs operation.
*/
listBlobsByHierarchy(delimiter, options = {}) {
if (delimiter === "") {
throw new RangeError("delimiter should contain one or more characters");
}
const include = [];
if (options.includeCopy) {
include.push("copy");
}
if (options.includeDeleted) {
include.push("deleted");
}
if (options.includeMetadata) {
include.push("metadata");
}
if (options.includeSnapshots) {
include.push("snapshots");
}
if (options.includeVersions) {
include.push("versions");
}
if (options.includeUncommitedBlobs) {
include.push("uncommittedblobs");
}
if (options.includeTags) {
include.push("tags");
}
if (options.includeDeletedWithVersions) {
include.push("deletedwithversions");
}
if (options.includeImmutabilityPolicy) {
include.push("immutabilitypolicy");
}
if (options.includeLegalHold) {
include.push("legalhold");
}
if (options.prefix === "") {
options.prefix = undefined;
}
const updatedOptions = {
...options,
...(include.length > 0 ? { include: include } : {}),
};
// AsyncIterableIterator to iterate over blob prefixes and blobs
const iter = this.listItemsByHierarchy(delimiter, updatedOptions);
return {
/**
* The next method, part of the iteration protocol
*/
async next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.listHierarchySegments(delimiter, settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...updatedOptions,
});
},
};
}
/**
* The Filter Blobs operation enables callers to list blobs in the container whose tags
* match a given search expression.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to find blobs by tags.
*/
async findBlobsByTagsSegment(tagFilterSqlExpression, marker, options = {}) {
return tracingClient.withSpan("ContainerClient-findBlobsByTagsSegment", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.containerContext.filterBlobs({
abortSignal: options.abortSignal,
where: tagFilterSqlExpression,
marker,
maxPageSize: options.maxPageSize,
tracingOptions: updatedOptions.tracingOptions,
}));
const wrappedResponse = {
...response,
_response: response._response, // _response is made non-enumerable
blobs: response.blobs.map((blob) => {
let tagValue = "";
if (blob.tags?.blobTagSet.length === 1) {
tagValue = blob.tags.blobTagSet[0].value;
}
return { ...blob, tags: toTags(blob.tags), tagValue };
}),
};
return wrappedResponse;
});
}
/**
* Returns an AsyncIterableIterator for ContainerFindBlobsByTagsSegmentResponse.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to find blobs by tags.
*/
async *findBlobsByTagsSegments(tagFilterSqlExpression, marker, options = {}) {
let response;
if (!!marker || marker === undefined) {
do {
response = await this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options);
response.blobs = response.blobs || [];
marker = response.continuationToken;
yield response;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator for blobs.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param options - Options to findBlobsByTagsItems.
*/
async *findBlobsByTagsItems(tagFilterSqlExpression, options = {}) {
let marker;
for await (const segment of this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)) {
yield* segment.blobs;
}
}
/**
* Returns an async iterable iterator to find all blobs with specified tag
* under the specified container.
*
* .byPage() returns an async iterable iterator to list the blobs in pages.
*
* Example using `for await` syntax:
*
* ```ts snippet:ReadmeSampleFindBlobsByTags
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerName = "<container name>";
* const containerClient = blobServiceClient.getContainerClient(containerName);
*
* // Example using `for await` syntax
* let i = 1;
* for await (const blob of containerClient.findBlobsByTags("tagkey='tagvalue'")) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
*
* // Example using `iter.next()` syntax
* i = 1;
* const iter = containerClient.findBlobsByTags("tagkey='tagvalue'");
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Blob ${i++}: ${value.name}`);
* ({ value, done } = await iter.next());
* }
*
* // Example using `byPage()` syntax
* i = 1;
* for await (const page of containerClient
* .findBlobsByTags("tagkey='tagvalue'")
* .byPage({ maxPageSize: 20 })) {
* for (const blob of page.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
*
* // Example using paging with a marker
* i = 1;
* let iterator = containerClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 blob names
* if (response.blobs) {
* for (const blob of response.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = containerClient
* .findBlobsByTags("tagkey='tagvalue'")
* .byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
* // Prints 10 blob names
* if (response.blobs) {
* for (const blob of response.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* ```
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param options - Options to find blobs by tags.
*/
findBlobsByTags(tagFilterSqlExpression, options = {}) {
// AsyncIterableIterator to iterate over blobs
const listSegmentOptions = {
...options,
};
const iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...listSegmentOptions,
});
},
};
}
/**
* The Get Account Information operation returns the sku name and account kind
* for the specified account.
* The Get Account Information operation is available on service versions beginning
* with version 2018-03-28.
* @see https://learn.microsoft.com/rest/api/storageservices/get-account-information
*
* @param options - Options to the Service Get Account Info operation.
* @returns Response data for the Service Get Account Info operation.
*/
async getAccountInfo(options = {}) {
return tracingClient.withSpan("ContainerClient-getAccountInfo", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.containerContext.getAccountInfo({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
getContainerNameFromUrl() {
let containerName;
try {
// URL may look like the following
// "https://myaccount.blob.core.windows.net/mycontainer?sasString";
// "https://myaccount.blob.core.windows.net/mycontainer";
// IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername`
// http://localhost:10001/devstoreaccount1/containername
const parsedUrl = new URL(this.url);
if (parsedUrl.hostname.split(".")[1] === "blob") {
// "https://myaccount.blob.core.windows.net/containername".
// "https://customdomain.com/containername".
// .getPath() -> /containername
containerName = parsedUrl.pathname.split("/")[1];
}
else if (utils_common_isIpEndpointStyle(parsedUrl)) {
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername
// .getPath() -> /devstoreaccount1/containername
containerName = parsedUrl.pathname.split("/")[2];
}
else {
// "https://customdomain.com/containername".
// .getPath() -> /containername
containerName = parsedUrl.pathname.split("/")[1];
}
// decode the encoded containerName - to get all the special characters that might be present in it
containerName = decodeURIComponent(containerName);
if (!containerName) {
throw new Error("Provided containerName is invalid.");
}
return containerName;
}
catch (error) {
throw new Error("Unable to extract containerName with provided information.");
}
}
/**
* Only available for ContainerClient constructed with a shared key credential.
*
* Generates a Blob Container Service Shared Access Signature (SAS) URI based on the client properties
* and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateSasUrl(options) {
return new Promise((resolve) => {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
}
const sas = generateBlobSASQueryParameters({
containerName: this._containerName,
...options,
}, this.credential).toString();
resolve(utils_common_appendToURLQuery(this.url, sas));
});
}
/**
* Only available for ContainerClient constructed with a shared key credential.
*
* Generates string to sign for a Blob Container Service Shared Access Signature (SAS) URI
* based on the client properties and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
generateSasStringToSign(options) {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
}
return generateBlobSASQueryParametersInternal({
containerName: this._containerName,
...options,
}, this.credential).stringToSign;
}
/**
* Generates a Blob Container Service Shared Access Signature (SAS) URI based on the client properties
* and parameters passed in. The SAS is signed by the input user delegation key.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @param userDelegationKey - Return value of `blobServiceClient.getUserDelegationKey()`
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateUserDelegationSasUrl(options, userDelegationKey) {
return new Promise((resolve) => {
const sas = generateBlobSASQueryParameters({
containerName: this._containerName,
...options,
}, userDelegationKey, this.accountName).toString();
resolve(utils_common_appendToURLQuery(this.url, sas));
});
}
/**
* Generates string to sign for a Blob Container Service Shared Access Signature (SAS) URI
* based on the client properties and parameters passed in. The SAS is signed by the input user delegation key.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-a-service-sas
*
* @param options - Optional parameters.
* @param userDelegationKey - Return value of `blobServiceClient.getUserDelegationKey()`
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateUserDelegationSasStringToSign(options, userDelegationKey) {
return generateBlobSASQueryParametersInternal({
containerName: this._containerName,
...options,
}, userDelegationKey, this.accountName).stringToSign;
}
/**
* Creates a BlobBatchClient object to conduct batch operations.
*
* @see https://learn.microsoft.com/rest/api/storageservices/blob-batch
*
* @returns A new BlobBatchClient object for this container.
*/
getBlobBatchClient() {
return new BlobBatchClient(this.url, this.pipeline);
}
}
//# sourceMappingURL=ContainerClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/AccountSASPermissions.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* This is a helper class to construct a string representing the permissions granted by an AccountSAS. Setting a value
* to true means that any SAS which uses these permissions will grant permissions for that operation. Once all the
* values are set, this should be serialized with toString and set as the permissions field on an
* {@link AccountSASSignatureValues} object. It is possible to construct the permissions string without this class, but
* the order of the permissions is particular and this class guarantees correctness.
*/
class AccountSASPermissions {
/**
* Parse initializes the AccountSASPermissions fields from a string.
*
* @param permissions -
*/
static parse(permissions) {
const accountSASPermissions = new AccountSASPermissions();
for (const c of permissions) {
switch (c) {
case "r":
accountSASPermissions.read = true;
break;
case "w":
accountSASPermissions.write = true;
break;
case "d":
accountSASPermissions.delete = true;
break;
case "x":
accountSASPermissions.deleteVersion = true;
break;
case "l":
accountSASPermissions.list = true;
break;
case "a":
accountSASPermissions.add = true;
break;
case "c":
accountSASPermissions.create = true;
break;
case "u":
accountSASPermissions.update = true;
break;
case "p":
accountSASPermissions.process = true;
break;
case "t":
accountSASPermissions.tag = true;
break;
case "f":
accountSASPermissions.filter = true;
break;
case "i":
accountSASPermissions.setImmutabilityPolicy = true;
break;
case "y":
accountSASPermissions.permanentDelete = true;
break;
default:
throw new RangeError(`Invalid permission character: ${c}`);
}
}
return accountSASPermissions;
}
/**
* Creates a {@link AccountSASPermissions} from a raw object which contains same keys as it
* and boolean values for them.
*
* @param permissionLike -
*/
static from(permissionLike) {
const accountSASPermissions = new AccountSASPermissions();
if (permissionLike.read) {
accountSASPermissions.read = true;
}
if (permissionLike.write) {
accountSASPermissions.write = true;
}
if (permissionLike.delete) {
accountSASPermissions.delete = true;
}
if (permissionLike.deleteVersion) {
accountSASPermissions.deleteVersion = true;
}
if (permissionLike.filter) {
accountSASPermissions.filter = true;
}
if (permissionLike.tag) {
accountSASPermissions.tag = true;
}
if (permissionLike.list) {
accountSASPermissions.list = true;
}
if (permissionLike.add) {
accountSASPermissions.add = true;
}
if (permissionLike.create) {
accountSASPermissions.create = true;
}
if (permissionLike.update) {
accountSASPermissions.update = true;
}
if (permissionLike.process) {
accountSASPermissions.process = true;
}
if (permissionLike.setImmutabilityPolicy) {
accountSASPermissions.setImmutabilityPolicy = true;
}
if (permissionLike.permanentDelete) {
accountSASPermissions.permanentDelete = true;
}
return accountSASPermissions;
}
/**
* Permission to read resources and list queues and tables granted.
*/
read = false;
/**
* Permission to write resources granted.
*/
write = false;
/**
* Permission to delete blobs and files granted.
*/
delete = false;
/**
* Permission to delete versions granted.
*/
deleteVersion = false;
/**
* Permission to list blob containers, blobs, shares, directories, and files granted.
*/
list = false;
/**
* Permission to add messages, table entities, and append to blobs granted.
*/
add = false;
/**
* Permission to create blobs and files granted.
*/
create = false;
/**
* Permissions to update messages and table entities granted.
*/
update = false;
/**
* Permission to get and delete messages granted.
*/
process = false;
/**
* Specfies Tag access granted.
*/
tag = false;
/**
* Permission to filter blobs.
*/
filter = false;
/**
* Permission to set immutability policy.
*/
setImmutabilityPolicy = false;
/**
* Specifies that Permanent Delete is permitted.
*/
permanentDelete = false;
/**
* Produces the SAS permissions string for an Azure Storage account.
* Call this method to set AccountSASSignatureValues Permissions field.
*
* Using this method will guarantee the resource types are in
* an order accepted by the service.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-an-account-sas
*
*/
toString() {
// The order of the characters should be as specified here to ensure correctness:
// https://learn.microsoft.com/rest/api/storageservices/constructing-an-account-sas
// Use a string array instead of string concatenating += operator for performance
const permissions = [];
if (this.read) {
permissions.push("r");
}
if (this.write) {
permissions.push("w");
}
if (this.delete) {
permissions.push("d");
}
if (this.deleteVersion) {
permissions.push("x");
}
if (this.filter) {
permissions.push("f");
}
if (this.tag) {
permissions.push("t");
}
if (this.list) {
permissions.push("l");
}
if (this.add) {
permissions.push("a");
}
if (this.create) {
permissions.push("c");
}
if (this.update) {
permissions.push("u");
}
if (this.process) {
permissions.push("p");
}
if (this.setImmutabilityPolicy) {
permissions.push("i");
}
if (this.permanentDelete) {
permissions.push("y");
}
return permissions.join("");
}
}
//# sourceMappingURL=AccountSASPermissions.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/AccountSASResourceTypes.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* This is a helper class to construct a string representing the resources accessible by an AccountSAS. Setting a value
* to true means that any SAS which uses these permissions will grant access to that resource type. Once all the
* values are set, this should be serialized with toString and set as the resources field on an
* {@link AccountSASSignatureValues} object. It is possible to construct the resources string without this class, but
* the order of the resources is particular and this class guarantees correctness.
*/
class AccountSASResourceTypes {
/**
* Creates an {@link AccountSASResourceTypes} from the specified resource types string. This method will throw an
* Error if it encounters a character that does not correspond to a valid resource type.
*
* @param resourceTypes -
*/
static parse(resourceTypes) {
const accountSASResourceTypes = new AccountSASResourceTypes();
for (const c of resourceTypes) {
switch (c) {
case "s":
accountSASResourceTypes.service = true;
break;
case "c":
accountSASResourceTypes.container = true;
break;
case "o":
accountSASResourceTypes.object = true;
break;
default:
throw new RangeError(`Invalid resource type: ${c}`);
}
}
return accountSASResourceTypes;
}
/**
* Permission to access service level APIs granted.
*/
service = false;
/**
* Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted.
*/
container = false;
/**
* Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted.
*/
object = false;
/**
* Converts the given resource types to a string.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-an-account-sas
*
*/
toString() {
const resourceTypes = [];
if (this.service) {
resourceTypes.push("s");
}
if (this.container) {
resourceTypes.push("c");
}
if (this.object) {
resourceTypes.push("o");
}
return resourceTypes.join("");
}
}
//# sourceMappingURL=AccountSASResourceTypes.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/AccountSASServices.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* This is a helper class to construct a string representing the services accessible by an AccountSAS. Setting a value
* to true means that any SAS which uses these permissions will grant access to that service. Once all the
* values are set, this should be serialized with toString and set as the services field on an
* {@link AccountSASSignatureValues} object. It is possible to construct the services string without this class, but
* the order of the services is particular and this class guarantees correctness.
*/
class AccountSASServices {
/**
* Creates an {@link AccountSASServices} from the specified services string. This method will throw an
* Error if it encounters a character that does not correspond to a valid service.
*
* @param services -
*/
static parse(services) {
const accountSASServices = new AccountSASServices();
for (const c of services) {
switch (c) {
case "b":
accountSASServices.blob = true;
break;
case "f":
accountSASServices.file = true;
break;
case "q":
accountSASServices.queue = true;
break;
case "t":
accountSASServices.table = true;
break;
default:
throw new RangeError(`Invalid service character: ${c}`);
}
}
return accountSASServices;
}
/**
* Permission to access blob resources granted.
*/
blob = false;
/**
* Permission to access file resources granted.
*/
file = false;
/**
* Permission to access queue resources granted.
*/
queue = false;
/**
* Permission to access table resources granted.
*/
table = false;
/**
* Converts the given services to a string.
*
*/
toString() {
const services = [];
if (this.blob) {
services.push("b");
}
if (this.table) {
services.push("t");
}
if (this.queue) {
services.push("q");
}
if (this.file) {
services.push("f");
}
return services.join("");
}
}
//# sourceMappingURL=AccountSASServices.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/sas/AccountSASSignatureValues.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* ONLY AVAILABLE IN NODE.JS RUNTIME.
*
* Generates a {@link SASQueryParameters} object which contains all SAS query parameters needed to make an actual
* REST request.
*
* @see https://learn.microsoft.com/rest/api/storageservices/constructing-an-account-sas
*
* @param accountSASSignatureValues -
* @param sharedKeyCredential -
*/
function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) {
return generateAccountSASQueryParametersInternal(accountSASSignatureValues, sharedKeyCredential)
.sasQueryParameters;
}
function generateAccountSASQueryParametersInternal(accountSASSignatureValues, sharedKeyCredential) {
const version = accountSASSignatureValues.version
? accountSASSignatureValues.version
: SERVICE_VERSION;
if (accountSASSignatureValues.permissions &&
accountSASSignatureValues.permissions.setImmutabilityPolicy &&
version < "2020-08-04") {
throw RangeError("'version' must be >= '2020-08-04' when provided 'i' permission.");
}
if (accountSASSignatureValues.permissions &&
accountSASSignatureValues.permissions.deleteVersion &&
version < "2019-10-10") {
throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission.");
}
if (accountSASSignatureValues.permissions &&
accountSASSignatureValues.permissions.permanentDelete &&
version < "2019-10-10") {
throw RangeError("'version' must be >= '2019-10-10' when provided 'y' permission.");
}
if (accountSASSignatureValues.permissions &&
accountSASSignatureValues.permissions.tag &&
version < "2019-12-12") {
throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission.");
}
if (accountSASSignatureValues.permissions &&
accountSASSignatureValues.permissions.filter &&
version < "2019-12-12") {
throw RangeError("'version' must be >= '2019-12-12' when provided 'f' permission.");
}
if (accountSASSignatureValues.encryptionScope && version < "2020-12-06") {
throw RangeError("'version' must be >= '2020-12-06' when provided 'encryptionScope' in SAS.");
}
const parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString());
const parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString();
const parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString();
let stringToSign;
if (version >= "2020-12-06") {
stringToSign = [
sharedKeyCredential.accountName,
parsedPermissions,
parsedServices,
parsedResourceTypes,
accountSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(accountSASSignatureValues.startsOn, false)
: "",
utils_common_truncatedISO8061Date(accountSASSignatureValues.expiresOn, false),
accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "",
accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "",
version,
accountSASSignatureValues.encryptionScope ? accountSASSignatureValues.encryptionScope : "",
"", // Account SAS requires an additional newline character
].join("\n");
}
else {
stringToSign = [
sharedKeyCredential.accountName,
parsedPermissions,
parsedServices,
parsedResourceTypes,
accountSASSignatureValues.startsOn
? utils_common_truncatedISO8061Date(accountSASSignatureValues.startsOn, false)
: "",
utils_common_truncatedISO8061Date(accountSASSignatureValues.expiresOn, false),
accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "",
accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "",
version,
"", // Account SAS requires an additional newline character
].join("\n");
}
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
return {
sasQueryParameters: new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, accountSASSignatureValues.encryptionScope),
stringToSign: stringToSign,
};
}
//# sourceMappingURL=AccountSASSignatureValues.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/BlobServiceClient.js
function isBlobGetUserDelegationKeyParameters(parameter) {
if (!parameter || typeof parameter !== "object") {
return false;
}
const castParameter = parameter;
return castParameter.expiresOn instanceof Date;
}
/**
* A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you
* to manipulate blob containers.
*/
class BlobServiceClient extends StorageClient_StorageClient {
/**
* serviceContext provided by protocol layer.
*/
serviceContext;
blobClientConfig;
/**
*
* Creates an instance of BlobServiceClient from connection string.
*
* @param connectionString - Account connection string or a SAS connection string of an Azure storage account.
* [ Note - Account connection string can only be used in NODE.JS runtime. ]
* Account connection string example -
* `DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=accountKey;EndpointSuffix=core.windows.net`
* SAS connection string example -
* `BlobEndpoint=https://myaccount.blob.core.windows.net/;QueueEndpoint=https://myaccount.queue.core.windows.net/;FileEndpoint=https://myaccount.file.core.windows.net/;TableEndpoint=https://myaccount.table.core.windows.net/;SharedAccessSignature=sasString`
* @param options - Optional. Options to configure the HTTP pipeline.
*/
static fromConnectionString(connectionString,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
options = options || {};
const extractedCreds = utils_common_extractConnectionStringParts(connectionString);
if (extractedCreds.kind === "AccountConnString") {
if (esm_isNodeLike) {
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
if (!options.proxyOptions) {
options.proxyOptions = proxyPolicy_getDefaultProxySettings(extractedCreds.proxyUri);
}
const pipeline = newPipeline(sharedKeyCredential, options);
return new BlobServiceClient(extractedCreds.url, pipeline);
}
else {
throw new Error("Account connection string is only supported in Node.js environment");
}
}
else if (extractedCreds.kind === "SASConnString") {
const pipeline = newPipeline(new AnonymousCredential(), options);
return new BlobServiceClient(extractedCreds.url + "?" + extractedCreds.accountSas, pipeline, options);
}
else {
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
}
}
constructor(url, credentialOrPipeline,
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
options) {
options = options ?? {};
let pipeline;
if (isPipelineLike(credentialOrPipeline)) {
pipeline = credentialOrPipeline;
}
else if ((esm_isNodeLike && credentialOrPipeline instanceof StorageSharedKeyCredential) ||
credentialOrPipeline instanceof AnonymousCredential ||
isTokenCredential(credentialOrPipeline)) {
pipeline = newPipeline(credentialOrPipeline, options);
}
else {
// The second parameter is undefined. Use anonymous credential
pipeline = newPipeline(new AnonymousCredential(), options);
}
super(url, pipeline);
this.serviceContext = this.storageClientContext.service;
this.blobClientConfig = options;
}
/**
* Creates a {@link ContainerClient} object
*
* @param containerName - A container name
* @returns A new ContainerClient object for the given container name.
*
* Example usage:
*
* ```ts snippet:BlobServiceClientGetContainerClient
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* const containerClient = blobServiceClient.getContainerClient("<container name>");
* ```
*/
getContainerClient(containerName) {
return new ContainerClient(utils_common_appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline, this.blobClientConfig);
}
/**
* Create a Blob container. @see https://learn.microsoft.com/rest/api/storageservices/create-container
*
* @param containerName - Name of the container to create.
* @param options - Options to configure Container Create operation.
* @returns Container creation response and the corresponding container client.
*/
async createContainer(containerName, options = {}) {
return tracingClient.withSpan("BlobServiceClient-createContainer", options, async (updatedOptions) => {
const containerClient = this.getContainerClient(containerName);
const containerCreateResponse = await containerClient.create(updatedOptions);
return {
containerClient,
containerCreateResponse,
};
});
}
/**
* Deletes a Blob container.
*
* @param containerName - Name of the container to delete.
* @param options - Options to configure Container Delete operation.
* @returns Container deletion response.
*/
async deleteContainer(containerName, options = {}) {
return tracingClient.withSpan("BlobServiceClient-deleteContainer", options, async (updatedOptions) => {
const containerClient = this.getContainerClient(containerName);
return containerClient.delete(updatedOptions);
});
}
/**
* Restore a previously deleted Blob container.
* This API is only functional if Container Soft Delete is enabled for the storage account associated with the container.
*
* @param deletedContainerName - Name of the previously deleted container.
* @param deletedContainerVersion - Version of the previously deleted container, used to uniquely identify the deleted container.
* @param options - Options to configure Container Restore operation.
* @returns Container deletion response.
*/
async undeleteContainer(deletedContainerName, deletedContainerVersion, options = {}) {
return tracingClient.withSpan("BlobServiceClient-undeleteContainer", options, async (updatedOptions) => {
const containerClient = this.getContainerClient(options.destinationContainerName || deletedContainerName);
// Hack to access a protected member.
const containerContext = containerClient["storageClientContext"].container;
const containerUndeleteResponse = utils_common_assertResponse(await containerContext.restore({
deletedContainerName,
deletedContainerVersion,
tracingOptions: updatedOptions.tracingOptions,
}));
return { containerClient, containerUndeleteResponse };
});
}
/**
* Gets the properties of a storage account’s Blob service, including properties
* for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.
* @see https://learn.microsoft.com/rest/api/storageservices/get-blob-service-properties
*
* @param options - Options to the Service Get Properties operation.
* @returns Response data for the Service Get Properties operation.
*/
async getProperties(options = {}) {
return tracingClient.withSpan("BlobServiceClient-getProperties", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.serviceContext.getProperties({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Sets properties for a storage account’s Blob service endpoint, including properties
* for Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and soft delete settings.
* @see https://learn.microsoft.com/rest/api/storageservices/set-blob-service-properties
*
* @param properties -
* @param options - Options to the Service Set Properties operation.
* @returns Response data for the Service Set Properties operation.
*/
async setProperties(properties, options = {}) {
return tracingClient.withSpan("BlobServiceClient-setProperties", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.serviceContext.setProperties(properties, {
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Retrieves statistics related to replication for the Blob service. It is only
* available on the secondary location endpoint when read-access geo-redundant
* replication is enabled for the storage account.
* @see https://learn.microsoft.com/rest/api/storageservices/get-blob-service-stats
*
* @param options - Options to the Service Get Statistics operation.
* @returns Response data for the Service Get Statistics operation.
*/
async getStatistics(options = {}) {
return tracingClient.withSpan("BlobServiceClient-getStatistics", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.serviceContext.getStatistics({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* The Get Account Information operation returns the sku name and account kind
* for the specified account.
* The Get Account Information operation is available on service versions beginning
* with version 2018-03-28.
* @see https://learn.microsoft.com/rest/api/storageservices/get-account-information
*
* @param options - Options to the Service Get Account Info operation.
* @returns Response data for the Service Get Account Info operation.
*/
async getAccountInfo(options = {}) {
return tracingClient.withSpan("BlobServiceClient-getAccountInfo", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.serviceContext.getAccountInfo({
abortSignal: options.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* Returns a list of the containers under the specified account.
* @see https://learn.microsoft.com/rest/api/storageservices/list-containers2
*
* @param marker - A string value that identifies the portion of
* the list of containers to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all containers remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to the Service List Container Segment operation.
* @returns Response data for the Service List Container Segment operation.
*/
async listContainersSegment(marker, options = {}) {
return tracingClient.withSpan("BlobServiceClient-listContainersSegment", options, async (updatedOptions) => {
return utils_common_assertResponse(await this.serviceContext.listContainersSegment({
abortSignal: options.abortSignal,
marker,
...options,
include: typeof options.include === "string" ? [options.include] : options.include,
tracingOptions: updatedOptions.tracingOptions,
}));
});
}
/**
* The Filter Blobs operation enables callers to list blobs across all containers whose tags
* match a given search expression. Filter blobs searches across all containers within a
* storage account but can be scoped within the expression to a single container.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to find blobs by tags.
*/
async findBlobsByTagsSegment(tagFilterSqlExpression, marker, options = {}) {
return tracingClient.withSpan("BlobServiceClient-findBlobsByTagsSegment", options, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.serviceContext.filterBlobs({
abortSignal: options.abortSignal,
where: tagFilterSqlExpression,
marker,
maxPageSize: options.maxPageSize,
tracingOptions: updatedOptions.tracingOptions,
}));
const wrappedResponse = {
...response,
_response: response._response, // _response is made non-enumerable
blobs: response.blobs.map((blob) => {
let tagValue = "";
if (blob.tags?.blobTagSet.length === 1) {
tagValue = blob.tags.blobTagSet[0].value;
}
return { ...blob, tags: toTags(blob.tags), tagValue };
}),
};
return wrappedResponse;
});
}
/**
* Returns an AsyncIterableIterator for ServiceFindBlobsByTagsSegmentResponse.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param marker - A string value that identifies the portion of
* the list of blobs to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all blobs remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to find blobs by tags.
*/
async *findBlobsByTagsSegments(tagFilterSqlExpression, marker, options = {}) {
let response;
if (!!marker || marker === undefined) {
do {
response = await this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options);
response.blobs = response.blobs || [];
marker = response.continuationToken;
yield response;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator for blobs.
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param options - Options to findBlobsByTagsItems.
*/
async *findBlobsByTagsItems(tagFilterSqlExpression, options = {}) {
let marker;
for await (const segment of this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)) {
yield* segment.blobs;
}
}
/**
* Returns an async iterable iterator to find all blobs with specified tag
* under the specified account.
*
* .byPage() returns an async iterable iterator to list the blobs in pages.
*
* @see https://learn.microsoft.com/rest/api/storageservices/get-blob-service-properties
*
* ```ts snippet:BlobServiceClientFindBlobsByTags
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* // Use for await to iterate the blobs
* let i = 1;
* for await (const blob of blobServiceClient.findBlobsByTags("tagkey='tagvalue'")) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
*
* // Use iter.next() to iterate the blobs
* i = 1;
* const iter = blobServiceClient.findBlobsByTags("tagkey='tagvalue'");
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Blob ${i++}: ${value.name}`);
* ({ value, done } = await iter.next());
* }
*
* // Use byPage() to iterate the blobs
* i = 1;
* for await (const page of blobServiceClient
* .findBlobsByTags("tagkey='tagvalue'")
* .byPage({ maxPageSize: 20 })) {
* for (const blob of page.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
*
* // Use paging with a marker
* i = 1;
* let iterator = blobServiceClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
* // Prints 2 blob names
* if (response.blobs) {
* for (const blob of response.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = blobServiceClient
* .findBlobsByTags("tagkey='tagvalue'")
* .byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
*
* // Prints blob names
* if (response.blobs) {
* for (const blob of response.blobs) {
* console.log(`Blob ${i++}: ${blob.name}`);
* }
* }
* ```
*
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
* The given expression must evaluate to true for a blob to be returned in the results.
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
* however, only a subset of the OData filter syntax is supported in the Blob service.
* @param options - Options to find blobs by tags.
*/
findBlobsByTags(tagFilterSqlExpression, options = {}) {
// AsyncIterableIterator to iterate over blobs
const listSegmentOptions = {
...options,
};
const iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...listSegmentOptions,
});
},
};
}
/**
* Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses
*
* @param marker - A string value that identifies the portion of
* the list of containers to be returned with the next listing operation. The
* operation returns the continuationToken value within the response body if the
* listing operation did not return all containers remaining to be listed
* with the current page. The continuationToken value can be used as the value for
* the marker parameter in a subsequent call to request the next page of list
* items. The marker value is opaque to the client.
* @param options - Options to list containers operation.
*/
async *listSegments(marker, options = {}) {
let listContainersSegmentResponse;
if (!!marker || marker === undefined) {
do {
listContainersSegmentResponse = await this.listContainersSegment(marker, options);
listContainersSegmentResponse.containerItems =
listContainersSegmentResponse.containerItems || [];
marker = listContainersSegmentResponse.continuationToken;
yield await listContainersSegmentResponse;
} while (marker);
}
}
/**
* Returns an AsyncIterableIterator for Container Items
*
* @param options - Options to list containers operation.
*/
async *listItems(options = {}) {
let marker;
for await (const segment of this.listSegments(marker, options)) {
yield* segment.containerItems;
}
}
/**
* Returns an async iterable iterator to list all the containers
* under the specified account.
*
* .byPage() returns an async iterable iterator to list the containers in pages.
*
* ```ts snippet:BlobServiceClientListContainers
* import { BlobServiceClient } from "@azure/storage-blob";
* import { DefaultAzureCredential } from "@azure/identity";
*
* const account = "<account>";
* const blobServiceClient = new BlobServiceClient(
* `https://${account}.blob.core.windows.net`,
* new DefaultAzureCredential(),
* );
*
* // Use for await to iterate the containers
* let i = 1;
* for await (const container of blobServiceClient.listContainers()) {
* console.log(`Container ${i++}: ${container.name}`);
* }
*
* // Use iter.next() to iterate the containers
* i = 1;
* const iter = blobServiceClient.listContainers();
* let { value, done } = await iter.next();
* while (!done) {
* console.log(`Container ${i++}: ${value.name}`);
* ({ value, done } = await iter.next());
* }
*
* // Use byPage() to iterate the containers
* i = 1;
* for await (const page of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) {
* for (const container of page.containerItems) {
* console.log(`Container ${i++}: ${container.name}`);
* }
* }
*
* // Use paging with a marker
* i = 1;
* let iterator = blobServiceClient.listContainers().byPage({ maxPageSize: 2 });
* let response = (await iterator.next()).value;
*
* // Prints 2 container names
* if (response.containerItems) {
* for (const container of response.containerItems) {
* console.log(`Container ${i++}: ${container.name}`);
* }
* }
*
* // Gets next marker
* let marker = response.continuationToken;
* // Passing next marker as continuationToken
* iterator = blobServiceClient
* .listContainers()
* .byPage({ continuationToken: marker, maxPageSize: 10 });
* response = (await iterator.next()).value;
*
* // Prints 10 container names
* if (response.containerItems) {
* for (const container of response.containerItems) {
* console.log(`Container ${i++}: ${container.name}`);
* }
* }
* ```
*
* @param options - Options to list containers.
* @returns An asyncIterableIterator that supports paging.
*/
listContainers(options = {}) {
if (options.prefix === "") {
options.prefix = undefined;
}
const include = [];
if (options.includeDeleted) {
include.push("deleted");
}
if (options.includeMetadata) {
include.push("metadata");
}
if (options.includeSystem) {
include.push("system");
}
// AsyncIterableIterator to iterate over containers
const listSegmentOptions = {
...options,
...(include.length > 0 ? { include } : {}),
};
const iter = this.listItems(listSegmentOptions);
return {
/**
* The next method, part of the iteration protocol
*/
next() {
return iter.next();
},
/**
* The connection to the async iterator, part of the iteration protocol
*/
[Symbol.asyncIterator]() {
return this;
},
/**
* Return an AsyncIterableIterator that works a page at a time
*/
byPage: (settings = {}) => {
return this.listSegments(settings.continuationToken, {
maxPageSize: settings.maxPageSize,
...listSegmentOptions,
});
},
};
}
async getUserDelegationKey(startsOnOrParam, expiresOnOrOption, options = {}) {
let startsOn = startsOnOrParam;
let expiresOn = expiresOnOrOption;
let userDelegationTid = undefined;
let getUserDelegationKeyOptions = options;
if (isBlobGetUserDelegationKeyParameters(startsOnOrParam)) {
startsOn = startsOnOrParam.startsOn;
expiresOn = startsOnOrParam.expiresOn;
userDelegationTid = startsOnOrParam.delegatedUserTenantId;
getUserDelegationKeyOptions = expiresOnOrOption;
getUserDelegationKeyOptions = getUserDelegationKeyOptions ?? {};
}
return tracingClient.withSpan("BlobServiceClient-getUserDelegationKey", getUserDelegationKeyOptions, async (updatedOptions) => {
const response = utils_common_assertResponse(await this.serviceContext.getUserDelegationKey({
startsOn: utils_common_truncatedISO8061Date(startsOn, false),
expiresOn: utils_common_truncatedISO8061Date(expiresOn, false),
delegatedUserTid: userDelegationTid,
}, {
abortSignal: getUserDelegationKeyOptions.abortSignal,
tracingOptions: updatedOptions.tracingOptions,
}));
const userDelegationKey = {
signedObjectId: response.signedObjectId,
signedTenantId: response.signedTenantId,
signedStartsOn: new Date(response.signedStartsOn),
signedExpiresOn: new Date(response.signedExpiresOn),
signedService: response.signedService,
signedVersion: response.signedVersion,
signedDelegatedUserTenantId: response.signedDelegatedUserTenantId,
value: response.value,
};
const res = {
_response: response._response,
requestId: response.requestId,
clientRequestId: response.clientRequestId,
version: response.version,
date: response.date,
errorCode: response.errorCode,
...userDelegationKey,
};
return res;
});
}
/**
* Creates a BlobBatchClient object to conduct batch operations.
*
* @see https://learn.microsoft.com/rest/api/storageservices/blob-batch
*
* @returns A new BlobBatchClient object for this service.
*/
getBlobBatchClient() {
return new BlobBatchClient(this.url, this.pipeline);
}
/**
* Only available for BlobServiceClient constructed with a shared key credential.
*
* Generates a Blob account Shared Access Signature (SAS) URI based on the client properties
* and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/create-account-sas
*
* @param expiresOn - Optional. The time at which the shared access signature becomes invalid. Default to an hour later if not provided.
* @param permissions - Specifies the list of permissions to be associated with the SAS.
* @param resourceTypes - Specifies the resource types associated with the shared access signature.
* @param options - Optional parameters.
* @returns An account SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateAccountSasUrl(expiresOn, permissions = AccountSASPermissions.parse("r"), resourceTypes = "sco", options = {}) {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw RangeError("Can only generate the account SAS when the client is initialized with a shared key credential");
}
if (expiresOn === undefined) {
const now = new Date();
expiresOn = new Date(now.getTime() + 3600 * 1000);
}
const sas = generateAccountSASQueryParameters({
permissions,
expiresOn,
resourceTypes,
services: AccountSASServices.parse("b").toString(),
...options,
}, this.credential).toString();
return utils_common_appendToURLQuery(this.url, sas);
}
/**
* Only available for BlobServiceClient constructed with a shared key credential.
*
* Generates string to sign for a Blob account Shared Access Signature (SAS) URI based on
* the client properties and parameters passed in. The SAS is signed by the shared key credential of the client.
*
* @see https://learn.microsoft.com/rest/api/storageservices/create-account-sas
*
* @param expiresOn - Optional. The time at which the shared access signature becomes invalid. Default to an hour later if not provided.
* @param permissions - Specifies the list of permissions to be associated with the SAS.
* @param resourceTypes - Specifies the resource types associated with the shared access signature.
* @param options - Optional parameters.
* @returns An account SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
*/
generateSasStringToSign(expiresOn, permissions = AccountSASPermissions.parse("r"), resourceTypes = "sco", options = {}) {
if (!(this.credential instanceof StorageSharedKeyCredential)) {
throw RangeError("Can only generate the account SAS when the client is initialized with a shared key credential");
}
if (expiresOn === undefined) {
const now = new Date();
expiresOn = new Date(now.getTime() + 3600 * 1000);
}
return generateAccountSASQueryParametersInternal({
permissions,
expiresOn,
resourceTypes,
services: AccountSASServices.parse("b").toString(),
...options,
}, this.credential).stringToSign;
}
}
//# sourceMappingURL=BlobServiceClient.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/generatedModels.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/** Known values of {@link EncryptionAlgorithmType} that the service accepts. */
var generatedModels_KnownEncryptionAlgorithmType;
(function (KnownEncryptionAlgorithmType) {
KnownEncryptionAlgorithmType["AES256"] = "AES256";
})(generatedModels_KnownEncryptionAlgorithmType || (generatedModels_KnownEncryptionAlgorithmType = {}));
//# sourceMappingURL=generatedModels.js.map
;// CONCATENATED MODULE: ./node_modules/@azure/storage-blob/dist/esm/index.js
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/shared/errors.js
class FilesNotFoundError extends Error {
constructor(files = []) {
let message = 'No files were found to upload';
if (files.length > 0) {
message += `: ${files.join(', ')}`;
}
super(message);
this.files = files;
this.name = 'FilesNotFoundError';
}
}
class errors_InvalidResponseError extends Error {
constructor(message) {
super(message);
this.name = 'InvalidResponseError';
}
}
class CacheNotFoundError extends Error {
constructor(message = 'Cache not found') {
super(message);
this.name = 'CacheNotFoundError';
}
}
class GHESNotSupportedError extends Error {
constructor(message = '@actions/cache v4.1.4+, actions/cache/save@v4+ and actions/cache/restore@v4+ are not currently supported on GHES.') {
super(message);
this.name = 'GHESNotSupportedError';
}
}
class NetworkError extends Error {
constructor(code) {
const message = `Unable to make request: ${code}\nIf you are using self-hosted runners, please make sure your runner has access to all GitHub endpoints: https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#communication-between-self-hosted-runners-and-github`;
super(message);
this.code = code;
this.name = 'NetworkError';
}
}
NetworkError.isNetworkErrorCode = (code) => {
if (!code)
return false;
return [
'ECONNRESET',
'ENOTFOUND',
'ETIMEDOUT',
'ECONNREFUSED',
'EHOSTUNREACH'
].includes(code);
};
class UsageError extends Error {
constructor() {
const message = `Cache storage quota has been hit. Unable to upload any new cache entries.\nMore info on storage limits: https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#calculating-minute-and-storage-spending`;
super(message);
this.name = 'UsageError';
}
}
UsageError.isUsageErrorMessage = (msg) => {
if (!msg)
return false;
return msg.includes('insufficient usage');
};
class RateLimitError extends Error {
constructor(message) {
super(message);
this.name = 'RateLimitError';
}
}
//# sourceMappingURL=errors.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/uploadUtils.js
var uploadUtils_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/**
* Class for tracking the upload state and displaying stats.
*/
class UploadProgress {
constructor(contentLength) {
this.contentLength = contentLength;
this.sentBytes = 0;
this.displayedComplete = false;
this.startTime = Date.now();
}
/**
* Sets the number of bytes sent
*
* @param sentBytes the number of bytes sent
*/
setSentBytes(sentBytes) {
this.sentBytes = sentBytes;
}
/**
* Returns the total number of bytes transferred.
*/
getTransferredBytes() {
return this.sentBytes;
}
/**
* Returns true if the upload is complete.
*/
isDone() {
return this.getTransferredBytes() === this.contentLength;
}
/**
* Prints the current upload stats. Once the upload completes, this will print one
* last line and then stop.
*/
display() {
if (this.displayedComplete) {
return;
}
const transferredBytes = this.sentBytes;
const percentage = (100 * (transferredBytes / this.contentLength)).toFixed(1);
const elapsedTime = Date.now() - this.startTime;
const uploadSpeed = (transferredBytes /
(1024 * 1024) /
(elapsedTime / 1000)).toFixed(1);
core.info(`Sent ${transferredBytes} of ${this.contentLength} (${percentage}%), ${uploadSpeed} MBs/sec`);
if (this.isDone()) {
this.displayedComplete = true;
}
}
/**
* Returns a function used to handle TransferProgressEvents.
*/
onProgress() {
return (progress) => {
this.setSentBytes(progress.loadedBytes);
};
}
/**
* Starts the timer that displays the stats.
*
* @param delayInMs the delay between each write
*/
startDisplayTimer(delayInMs = 1000) {
const displayCallback = () => {
this.display();
if (!this.isDone()) {
this.timeoutHandle = setTimeout(displayCallback, delayInMs);
}
};
this.timeoutHandle = setTimeout(displayCallback, delayInMs);
}
/**
* Stops the timer that displays the stats. As this typically indicates the upload
* is complete, this will display one last line, unless the last line has already
* been written.
*/
stopDisplayTimer() {
if (this.timeoutHandle) {
clearTimeout(this.timeoutHandle);
this.timeoutHandle = undefined;
}
this.display();
}
}
/**
* Uploads a cache archive directly to Azure Blob Storage using the Azure SDK.
* This function will display progress information to the console. Concurrency of the
* upload is determined by the calling functions.
*
* @param signedUploadURL
* @param archivePath
* @param options
* @returns
*/
function uploadUtils_uploadCacheArchiveSDK(signedUploadURL, archivePath, options) {
return uploadUtils_awaiter(this, void 0, void 0, function* () {
var _a;
const blobClient = new BlobClient(signedUploadURL);
const blockBlobClient = blobClient.getBlockBlobClient();
const uploadProgress = new UploadProgress((_a = options === null || options === void 0 ? void 0 : options.archiveSizeBytes) !== null && _a !== void 0 ? _a : 0);
// Specify data transfer options
const uploadOptions = {
blockSize: options === null || options === void 0 ? void 0 : options.uploadChunkSize,
concurrency: options === null || options === void 0 ? void 0 : options.uploadConcurrency, // maximum number of parallel transfer workers
maxSingleShotSize: 128 * 1024 * 1024, // 128 MiB initial transfer size
onProgress: uploadProgress.onProgress()
};
try {
uploadProgress.startDisplayTimer();
core.debug(`BlobClient: ${blobClient.name}:${blobClient.accountName}:${blobClient.containerName}`);
const response = yield blockBlobClient.uploadFile(archivePath, uploadOptions);
// TODO: better management of non-retryable errors
if (response._response.status >= 400) {
throw new InvalidResponseError(`uploadCacheArchiveSDK: upload failed with status code ${response._response.status}`);
}
return response;
}
catch (error) {
core.warning(`uploadCacheArchiveSDK: internal error uploading cache archive: ${error.message}`);
throw error;
}
finally {
uploadProgress.stopDisplayTimer();
}
});
}
//# sourceMappingURL=uploadUtils.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/requestUtils.js
var requestUtils_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
function requestUtils_isSuccessStatusCode(statusCode) {
if (!statusCode) {
return false;
}
return statusCode >= 200 && statusCode < 300;
}
function isServerErrorStatusCode(statusCode) {
if (!statusCode) {
return true;
}
return statusCode >= 500;
}
function isRetryableStatusCode(statusCode) {
if (!statusCode) {
return false;
}
const retryableStatusCodes = [
lib/* HttpCodes */.Hv.BadGateway,
lib/* HttpCodes */.Hv.ServiceUnavailable,
lib/* HttpCodes */.Hv.GatewayTimeout
];
return retryableStatusCodes.includes(statusCode);
}
function sleep(milliseconds) {
return requestUtils_awaiter(this, void 0, void 0, function* () {
return new Promise(resolve => setTimeout(resolve, milliseconds));
});
}
function retry(name_1, method_1, getStatusCode_1) {
return requestUtils_awaiter(this, arguments, void 0, function* (name, method, getStatusCode, maxAttempts = DefaultRetryAttempts, delay = DefaultRetryDelay, onError = undefined) {
let errorMessage = '';
let attempt = 1;
while (attempt <= maxAttempts) {
let response = undefined;
let statusCode = undefined;
let isRetryable = false;
try {
response = yield method();
}
catch (error) {
if (onError) {
response = onError(error);
}
isRetryable = true;
errorMessage = error.message;
}
if (response) {
statusCode = getStatusCode(response);
if (!isServerErrorStatusCode(statusCode)) {
return response;
}
}
if (statusCode) {
isRetryable = isRetryableStatusCode(statusCode);
errorMessage = `Cache service responded with ${statusCode}`;
}
lib_core/* debug */.Yz(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`);
if (!isRetryable) {
lib_core/* debug */.Yz(`${name} - Error is not retryable`);
break;
}
yield sleep(delay);
attempt++;
}
throw Error(`${name} failed: ${errorMessage}`);
});
}
function requestUtils_retryTypedResponse(name_1, method_1) {
return requestUtils_awaiter(this, arguments, void 0, function* (name, method, maxAttempts = DefaultRetryAttempts, delay = DefaultRetryDelay) {
return yield retry(name, method, (response) => response.statusCode, maxAttempts, delay,
// If the error object contains the statusCode property, extract it and return
// an TypedResponse<T> so it can be processed by the retry logic.
(error) => {
if (error instanceof lib/* HttpClientError */.Kg) {
return {
statusCode: error.statusCode,
result: null,
headers: {},
error
};
}
else {
return undefined;
}
});
});
}
function requestUtils_retryHttpClientResponse(name_1, method_1) {
return requestUtils_awaiter(this, arguments, void 0, function* (name, method, maxAttempts = DefaultRetryAttempts, delay = DefaultRetryDelay) {
return yield retry(name, method, (response) => response.message.statusCode, maxAttempts, delay);
});
}
//# sourceMappingURL=requestUtils.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/downloadUtils.js
var downloadUtils_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/**
* Pipes the body of a HTTP response to a stream
*
* @param response the HTTP response
* @param output the writable stream
*/
function pipeResponseToStream(response, output) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
const pipeline = external_util_.promisify(external_stream_.pipeline);
yield pipeline(response.message, output);
});
}
/**
* Class for tracking the download state and displaying stats.
*/
class DownloadProgress {
constructor(contentLength) {
this.contentLength = contentLength;
this.segmentIndex = 0;
this.segmentSize = 0;
this.segmentOffset = 0;
this.receivedBytes = 0;
this.displayedComplete = false;
this.startTime = Date.now();
}
/**
* Progress to the next segment. Only call this method when the previous segment
* is complete.
*
* @param segmentSize the length of the next segment
*/
nextSegment(segmentSize) {
this.segmentOffset = this.segmentOffset + this.segmentSize;
this.segmentIndex = this.segmentIndex + 1;
this.segmentSize = segmentSize;
this.receivedBytes = 0;
lib_core/* debug */.Yz(`Downloading segment at offset ${this.segmentOffset} with length ${this.segmentSize}...`);
}
/**
* Sets the number of bytes received for the current segment.
*
* @param receivedBytes the number of bytes received
*/
setReceivedBytes(receivedBytes) {
this.receivedBytes = receivedBytes;
}
/**
* Returns the total number of bytes transferred.
*/
getTransferredBytes() {
return this.segmentOffset + this.receivedBytes;
}
/**
* Returns true if the download is complete.
*/
isDone() {
return this.getTransferredBytes() === this.contentLength;
}
/**
* Prints the current download stats. Once the download completes, this will print one
* last line and then stop.
*/
display() {
if (this.displayedComplete) {
return;
}
const transferredBytes = this.segmentOffset + this.receivedBytes;
const percentage = (100 * (transferredBytes / this.contentLength)).toFixed(1);
const elapsedTime = Date.now() - this.startTime;
const downloadSpeed = (transferredBytes /
(1024 * 1024) /
(elapsedTime / 1000)).toFixed(1);
lib_core/* info */.pq(`Received ${transferredBytes} of ${this.contentLength} (${percentage}%), ${downloadSpeed} MBs/sec`);
if (this.isDone()) {
this.displayedComplete = true;
}
}
/**
* Returns a function used to handle TransferProgressEvents.
*/
onProgress() {
return (progress) => {
this.setReceivedBytes(progress.loadedBytes);
};
}
/**
* Starts the timer that displays the stats.
*
* @param delayInMs the delay between each write
*/
startDisplayTimer(delayInMs = 1000) {
const displayCallback = () => {
this.display();
if (!this.isDone()) {
this.timeoutHandle = setTimeout(displayCallback, delayInMs);
}
};
this.timeoutHandle = setTimeout(displayCallback, delayInMs);
}
/**
* Stops the timer that displays the stats. As this typically indicates the download
* is complete, this will display one last line, unless the last line has already
* been written.
*/
stopDisplayTimer() {
if (this.timeoutHandle) {
clearTimeout(this.timeoutHandle);
this.timeoutHandle = undefined;
}
this.display();
}
}
/**
* Download the cache using the Actions toolkit http-client
*
* @param archiveLocation the URL for the cache
* @param archivePath the local path where the cache is saved
*/
function downloadCacheHttpClient(archiveLocation, archivePath) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
const writeStream = external_fs_.createWriteStream(archivePath);
const httpClient = new lib/* HttpClient */.Qq('actions/cache');
const downloadResponse = yield requestUtils_retryHttpClientResponse('downloadCache', () => downloadUtils_awaiter(this, void 0, void 0, function* () { return httpClient.get(archiveLocation); }));
// Abort download if no traffic received over the socket.
downloadResponse.message.socket.setTimeout(SocketTimeout, () => {
downloadResponse.message.destroy();
lib_core/* debug */.Yz(`Aborting download, socket timed out after ${SocketTimeout} ms`);
});
yield pipeResponseToStream(downloadResponse, writeStream);
// Validate download size.
const contentLengthHeader = downloadResponse.message.headers['content-length'];
if (contentLengthHeader) {
const expectedLength = parseInt(contentLengthHeader);
const actualLength = getArchiveFileSizeInBytes(archivePath);
if (actualLength !== expectedLength) {
throw new Error(`Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`);
}
}
else {
lib_core/* debug */.Yz('Unable to validate download, no Content-Length header');
}
});
}
/**
* Download the cache using the Actions toolkit http-client concurrently
*
* @param archiveLocation the URL for the cache
* @param archivePath the local path where the cache is saved
*/
function downloadCacheHttpClientConcurrent(archiveLocation, archivePath, options) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
var _a;
const archiveDescriptor = yield external_fs_.promises.open(archivePath, 'w');
const httpClient = new lib/* HttpClient */.Qq('actions/cache', undefined, {
socketTimeout: options.timeoutInMs,
keepAlive: true
});
try {
const res = yield requestUtils_retryHttpClientResponse('downloadCacheMetadata', () => downloadUtils_awaiter(this, void 0, void 0, function* () { return yield httpClient.request('HEAD', archiveLocation, null, {}); }));
const lengthHeader = res.message.headers['content-length'];
if (lengthHeader === undefined || lengthHeader === null) {
throw new Error('Content-Length not found on blob response');
}
const length = parseInt(lengthHeader);
if (Number.isNaN(length)) {
throw new Error(`Could not interpret Content-Length: ${length}`);
}
const downloads = [];
const blockSize = 4 * 1024 * 1024;
for (let offset = 0; offset < length; offset += blockSize) {
const count = Math.min(blockSize, length - offset);
downloads.push({
offset,
promiseGetter: () => downloadUtils_awaiter(this, void 0, void 0, function* () {
return yield downloadSegmentRetry(httpClient, archiveLocation, offset, count);
})
});
}
// reverse to use .pop instead of .shift
downloads.reverse();
let actives = 0;
let bytesDownloaded = 0;
const progress = new DownloadProgress(length);
progress.startDisplayTimer();
const progressFn = progress.onProgress();
const activeDownloads = [];
let nextDownload;
const waitAndWrite = () => downloadUtils_awaiter(this, void 0, void 0, function* () {
const segment = yield Promise.race(Object.values(activeDownloads));
yield archiveDescriptor.write(segment.buffer, 0, segment.count, segment.offset);
actives--;
delete activeDownloads[segment.offset];
bytesDownloaded += segment.count;
progressFn({ loadedBytes: bytesDownloaded });
});
while ((nextDownload = downloads.pop())) {
activeDownloads[nextDownload.offset] = nextDownload.promiseGetter();
actives++;
if (actives >= ((_a = options.downloadConcurrency) !== null && _a !== void 0 ? _a : 10)) {
yield waitAndWrite();
}
}
while (actives > 0) {
yield waitAndWrite();
}
}
finally {
httpClient.dispose();
yield archiveDescriptor.close();
}
});
}
function downloadSegmentRetry(httpClient, archiveLocation, offset, count) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
const retries = 5;
let failures = 0;
while (true) {
try {
const timeout = 30000;
const result = yield promiseWithTimeout(timeout, downloadSegment(httpClient, archiveLocation, offset, count));
if (typeof result === 'string') {
throw new Error('downloadSegmentRetry failed due to timeout');
}
return result;
}
catch (err) {
if (failures >= retries) {
throw err;
}
failures++;
}
}
});
}
function downloadSegment(httpClient, archiveLocation, offset, count) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
const partRes = yield requestUtils_retryHttpClientResponse('downloadCachePart', () => downloadUtils_awaiter(this, void 0, void 0, function* () {
return yield httpClient.get(archiveLocation, {
Range: `bytes=${offset}-${offset + count - 1}`
});
}));
if (!partRes.readBodyBuffer) {
throw new Error('Expected HttpClientResponse to implement readBodyBuffer');
}
return {
offset,
count,
buffer: yield partRes.readBodyBuffer()
};
});
}
/**
* Download the cache using the Azure Storage SDK. Only call this method if the
* URL points to an Azure Storage endpoint.
*
* @param archiveLocation the URL for the cache
* @param archivePath the local path where the cache is saved
* @param options the download options with the defaults set
*/
function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
return downloadUtils_awaiter(this, void 0, void 0, function* () {
var _a;
const client = new BlockBlobClient(archiveLocation, undefined, {
retryOptions: {
// Override the timeout used when downloading each 4 MB chunk
// The default is 2 min / MB, which is way too slow
tryTimeoutInMs: options.timeoutInMs
}
});
const properties = yield client.getProperties();
const contentLength = (_a = properties.contentLength) !== null && _a !== void 0 ? _a : -1;
if (contentLength < 0) {
// We should never hit this condition, but just in case fall back to downloading the
// file as one large stream
lib_core/* debug */.Yz('Unable to determine content length, downloading file with http-client...');
yield downloadCacheHttpClient(archiveLocation, archivePath);
}
else {
// Use downloadToBuffer for faster downloads, since internally it splits the
// file into 4 MB chunks which can then be parallelized and retried independently
//
// If the file exceeds the buffer maximum length (~1 GB on 32-bit systems and ~2 GB
// on 64-bit systems), split the download into multiple segments
// ~2 GB = 2147483647, beyond this, we start getting out of range error. So, capping it accordingly.
// Updated segment size to 128MB = 134217728 bytes, to complete a segment faster and fail fast
const maxSegmentSize = Math.min(134217728, external_buffer_.constants.MAX_LENGTH);
const downloadProgress = new DownloadProgress(contentLength);
const fd = external_fs_.openSync(archivePath, 'w');
try {
downloadProgress.startDisplayTimer();
const controller = new AbortController();
const abortSignal = controller.signal;
while (!downloadProgress.isDone()) {
const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
downloadProgress.nextSegment(segmentSize);
const result = yield promiseWithTimeout(options.segmentTimeoutInMs || 3600000, client.downloadToBuffer(segmentStart, segmentSize, {
abortSignal,
concurrency: options.downloadConcurrency,
onProgress: downloadProgress.onProgress()
}));
if (result === 'timeout') {
controller.abort();
throw new Error('Aborting cache download as the download time exceeded the timeout.');
}
else if (Buffer.isBuffer(result)) {
external_fs_.writeFileSync(fd, result);
}
}
}
finally {
downloadProgress.stopDisplayTimer();
external_fs_.closeSync(fd);
}
}
});
}
const promiseWithTimeout = (timeoutMs, promise) => downloadUtils_awaiter(void 0, void 0, void 0, function* () {
let timeoutHandle;
const timeoutPromise = new Promise(resolve => {
timeoutHandle = setTimeout(() => resolve('timeout'), timeoutMs);
});
return Promise.race([promise, timeoutPromise]).then(result => {
clearTimeout(timeoutHandle);
return result;
});
});
//# sourceMappingURL=downloadUtils.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/options.js
/**
* Returns a copy of the upload options with defaults filled in.
*
* @param copy the original upload options
*/
function options_getUploadOptions(copy) {
// Defaults if not overriden
const result = {
useAzureSdk: false,
uploadConcurrency: 4,
uploadChunkSize: 32 * 1024 * 1024
};
if (copy) {
if (typeof copy.useAzureSdk === 'boolean') {
result.useAzureSdk = copy.useAzureSdk;
}
if (typeof copy.uploadConcurrency === 'number') {
result.uploadConcurrency = copy.uploadConcurrency;
}
if (typeof copy.uploadChunkSize === 'number') {
result.uploadChunkSize = copy.uploadChunkSize;
}
}
/**
* Add env var overrides
*/
// Cap the uploadConcurrency at 32
result.uploadConcurrency = !isNaN(Number(process.env['CACHE_UPLOAD_CONCURRENCY']))
? Math.min(32, Number(process.env['CACHE_UPLOAD_CONCURRENCY']))
: result.uploadConcurrency;
// Cap the uploadChunkSize at 128MiB
result.uploadChunkSize = !isNaN(Number(process.env['CACHE_UPLOAD_CHUNK_SIZE']))
? Math.min(128 * 1024 * 1024, Number(process.env['CACHE_UPLOAD_CHUNK_SIZE']) * 1024 * 1024)
: result.uploadChunkSize;
core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
core.debug(`Upload concurrency: ${result.uploadConcurrency}`);
core.debug(`Upload chunk size: ${result.uploadChunkSize}`);
return result;
}
/**
* Returns a copy of the download options with defaults filled in.
*
* @param copy the original download options
*/
function getDownloadOptions(copy) {
const result = {
useAzureSdk: false,
concurrentBlobDownloads: true,
downloadConcurrency: 8,
timeoutInMs: 30000,
segmentTimeoutInMs: 600000,
lookupOnly: false
};
if (copy) {
if (typeof copy.useAzureSdk === 'boolean') {
result.useAzureSdk = copy.useAzureSdk;
}
if (typeof copy.concurrentBlobDownloads === 'boolean') {
result.concurrentBlobDownloads = copy.concurrentBlobDownloads;
}
if (typeof copy.downloadConcurrency === 'number') {
result.downloadConcurrency = copy.downloadConcurrency;
}
if (typeof copy.timeoutInMs === 'number') {
result.timeoutInMs = copy.timeoutInMs;
}
if (typeof copy.segmentTimeoutInMs === 'number') {
result.segmentTimeoutInMs = copy.segmentTimeoutInMs;
}
if (typeof copy.lookupOnly === 'boolean') {
result.lookupOnly = copy.lookupOnly;
}
}
const segmentDownloadTimeoutMins = process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS'];
if (segmentDownloadTimeoutMins &&
!isNaN(Number(segmentDownloadTimeoutMins)) &&
isFinite(Number(segmentDownloadTimeoutMins))) {
result.segmentTimeoutInMs = Number(segmentDownloadTimeoutMins) * 60 * 1000;
}
lib_core/* debug */.Yz(`Use Azure SDK: ${result.useAzureSdk}`);
lib_core/* debug */.Yz(`Download concurrency: ${result.downloadConcurrency}`);
lib_core/* debug */.Yz(`Request timeout (ms): ${result.timeoutInMs}`);
lib_core/* debug */.Yz(`Cache segment download timeout mins env var: ${process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS']}`);
lib_core/* debug */.Yz(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`);
lib_core/* debug */.Yz(`Lookup only: ${result.lookupOnly}`);
return result;
}
//# sourceMappingURL=options.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/config.js
function config_isGhes() {
const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
const hostname = ghUrl.hostname.trimEnd().toUpperCase();
const isGitHubHost = hostname === 'GITHUB.COM';
const isGheHost = hostname.endsWith('.GHE.COM');
const isLocalHost = hostname.endsWith('.LOCALHOST');
return !isGitHubHost && !isGheHost && !isLocalHost;
}
function config_getCacheServiceVersion() {
// Cache service v2 is not supported on GHES. We will default to
// cache service v1 even if the feature flag was enabled by user.
if (config_isGhes())
return 'v1';
return process.env['ACTIONS_CACHE_SERVICE_V2'] ? 'v2' : 'v1';
}
// The cache-mode lattice: readable = {read, write}, writable = {write,
// write-only}, none = neither.
const KNOWN_CACHE_MODES = ['none', 'read', 'write', 'write-only'];
// The effective cache-mode exported by the runner, or '' when not set.
function config_getCacheMode() {
return (process.env['ACTIONS_CACHE_MODE'] || '').trim().toLowerCase();
}
// Unset or unrecognized modes are permissive so behavior matches today.
function isCacheReadable(mode) {
if (!KNOWN_CACHE_MODES.includes(mode))
return true;
return mode === 'read' || mode === 'write';
}
function config_isCacheWritable(mode) {
if (!KNOWN_CACHE_MODES.includes(mode))
return true;
return mode === 'write' || mode === 'write-only';
}
function getCacheServiceURL() {
const version = config_getCacheServiceVersion();
// Based on the version of the cache service, we will determine which
// URL to use.
switch (version) {
case 'v1':
return (process.env['ACTIONS_CACHE_URL'] ||
process.env['ACTIONS_RESULTS_URL'] ||
'');
case 'v2':
return process.env['ACTIONS_RESULTS_URL'] || '';
default:
throw new Error(`Unsupported cache service version: ${version}`);
}
}
//# sourceMappingURL=config.js.map
// EXTERNAL MODULE: ./node_modules/@actions/cache/lib/internal/shared/package-version.cjs
var package_version = __webpack_require__(8658);
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/shared/user-agent.js
/**
* Ensure that this User Agent String is used in all HTTP calls so that we can monitor telemetry between different versions of this package
*/
function user_agent_getUserAgentString() {
return `@actions/cache-${package_version.version}`;
}
//# sourceMappingURL=user-agent.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/cacheHttpClient.js
var cacheHttpClient_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
function getCacheApiUrl(resource) {
const baseUrl = getCacheServiceURL();
if (!baseUrl) {
throw new Error('Cache Service Url not found, unable to restore cache.');
}
const url = `${baseUrl}_apis/artifactcache/${resource}`;
lib_core/* debug */.Yz(`Resource Url: ${url}`);
return url;
}
function createAcceptHeader(type, apiVersion) {
return `${type};api-version=${apiVersion}`;
}
function getRequestOptions() {
const requestOptions = {
headers: {
Accept: createAcceptHeader('application/json', '6.0-preview.1')
}
};
return requestOptions;
}
function createHttpClient() {
const token = process.env['ACTIONS_RUNTIME_TOKEN'] || '';
const bearerCredentialHandler = new auth/* BearerCredentialHandler */.tZ(token);
return new lib/* HttpClient */.Qq(user_agent_getUserAgentString(), [bearerCredentialHandler], getRequestOptions());
}
function getCacheEntry(keys, paths, options) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
var _a;
const httpClient = createHttpClient();
const version = getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod, options === null || options === void 0 ? void 0 : options.enableCrossOsArchive);
const resource = `cache?keys=${encodeURIComponent(keys.join(','))}&version=${version}`;
const response = yield requestUtils_retryTypedResponse('getCacheEntry', () => cacheHttpClient_awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); }));
// Cache not found
if (response.statusCode === 204) {
// List cache for primary key only if cache miss occurs
if (lib_core/* isDebug */._o()) {
yield printCachesListForDiagnostics(keys[0], httpClient, version);
}
return null;
}
if (!requestUtils_isSuccessStatusCode(response.statusCode)) {
// Only surface the receiver's body for a `cache read denied:` policy denial
// so callers can dispatch on it; keep the generic message otherwise.
const errorMessage = (_a = response.error) === null || _a === void 0 ? void 0 : _a.message;
if (errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.includes(CacheReadDeniedMessagePrefix)) {
throw new Error(errorMessage);
}
throw new Error(`Cache service responded with ${response.statusCode}`);
}
const cacheResult = response.result;
const cacheDownloadUrl = cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.archiveLocation;
if (!cacheDownloadUrl) {
// Cache achiveLocation not found. This should never happen, and hence bail out.
throw new Error('Cache not found.');
}
lib_core/* setSecret */.Pq(cacheDownloadUrl);
lib_core/* debug */.Yz(`Cache Result:`);
lib_core/* debug */.Yz(JSON.stringify(cacheResult));
return cacheResult;
});
}
function printCachesListForDiagnostics(key, httpClient, version) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
const resource = `caches?key=${encodeURIComponent(key)}`;
const response = yield requestUtils_retryTypedResponse('listCache', () => cacheHttpClient_awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); }));
if (response.statusCode === 200) {
const cacheListResult = response.result;
const totalCount = cacheListResult === null || cacheListResult === void 0 ? void 0 : cacheListResult.totalCount;
if (totalCount && totalCount > 0) {
lib_core/* debug */.Yz(`No matching cache found for cache key '${key}', version '${version} and scope ${process.env['GITHUB_REF']}. There exist one or more cache(s) with similar key but they have different version or scope. See more info on cache matching here: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key \nOther caches with similar key:`);
for (const cacheEntry of (cacheListResult === null || cacheListResult === void 0 ? void 0 : cacheListResult.artifactCaches) || []) {
lib_core/* debug */.Yz(`Cache Key: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheKey}, Cache Version: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.cacheVersion}, Cache Scope: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.scope}, Cache Created: ${cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.creationTime}`);
}
}
}
});
}
function downloadCache(archiveLocation, archivePath, options) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
const archiveUrl = new external_url_.URL(archiveLocation);
const downloadOptions = getDownloadOptions(options);
if (archiveUrl.hostname.endsWith('.blob.core.windows.net')) {
if (downloadOptions.useAzureSdk) {
// Use Azure storage SDK to download caches hosted on Azure to improve speed and reliability.
yield downloadCacheStorageSDK(archiveLocation, archivePath, downloadOptions);
}
else if (downloadOptions.concurrentBlobDownloads) {
// Use concurrent implementation with HttpClient to work around blob SDK issue
yield downloadCacheHttpClientConcurrent(archiveLocation, archivePath, downloadOptions);
}
else {
// Otherwise, download using the Actions http-client.
yield downloadCacheHttpClient(archiveLocation, archivePath);
}
}
else {
yield downloadCacheHttpClient(archiveLocation, archivePath);
}
});
}
// Reserve Cache
function reserveCache(key, paths, options) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
const httpClient = createHttpClient();
const version = utils.getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod, options === null || options === void 0 ? void 0 : options.enableCrossOsArchive);
const reserveCacheRequest = {
key,
version,
cacheSize: options === null || options === void 0 ? void 0 : options.cacheSize
};
const response = yield retryTypedResponse('reserveCache', () => cacheHttpClient_awaiter(this, void 0, void 0, function* () {
return httpClient.postJson(getCacheApiUrl('caches'), reserveCacheRequest);
}));
return response;
});
}
function getContentRange(start, end) {
// Format: `bytes start-end/filesize
// start and end are inclusive
// filesize can be *
// For a 200 byte chunk starting at byte 0:
// Content-Range: bytes 0-199/*
return `bytes ${start}-${end}/*`;
}
function uploadChunk(httpClient, resourceUrl, openStream, start, end) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
core.debug(`Uploading chunk of size ${end - start + 1} bytes at offset ${start} with content range: ${getContentRange(start, end)}`);
const additionalHeaders = {
'Content-Type': 'application/octet-stream',
'Content-Range': getContentRange(start, end)
};
const uploadChunkResponse = yield retryHttpClientResponse(`uploadChunk (start: ${start}, end: ${end})`, () => cacheHttpClient_awaiter(this, void 0, void 0, function* () {
return httpClient.sendStream('PATCH', resourceUrl, openStream(), additionalHeaders);
}));
if (!isSuccessStatusCode(uploadChunkResponse.message.statusCode)) {
throw new Error(`Cache service responded with ${uploadChunkResponse.message.statusCode} during upload chunk.`);
}
});
}
function uploadFile(httpClient, cacheId, archivePath, options) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
// Upload Chunks
const fileSize = utils.getArchiveFileSizeInBytes(archivePath);
const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`);
const fd = fs.openSync(archivePath, 'r');
const uploadOptions = getUploadOptions(options);
const concurrency = utils.assertDefined('uploadConcurrency', uploadOptions.uploadConcurrency);
const maxChunkSize = utils.assertDefined('uploadChunkSize', uploadOptions.uploadChunkSize);
const parallelUploads = [...new Array(concurrency).keys()];
core.debug('Awaiting all uploads');
let offset = 0;
try {
yield Promise.all(parallelUploads.map(() => cacheHttpClient_awaiter(this, void 0, void 0, function* () {
while (offset < fileSize) {
const chunkSize = Math.min(fileSize - offset, maxChunkSize);
const start = offset;
const end = offset + chunkSize - 1;
offset += maxChunkSize;
yield uploadChunk(httpClient, resourceUrl, () => fs
.createReadStream(archivePath, {
fd,
start,
end,
autoClose: false
})
.on('error', error => {
throw new Error(`Cache upload failed because file read failed with ${error.message}`);
}), start, end);
}
})));
}
finally {
fs.closeSync(fd);
}
return;
});
}
function commitCache(httpClient, cacheId, filesize) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
const commitCacheRequest = { size: filesize };
return yield retryTypedResponse('commitCache', () => cacheHttpClient_awaiter(this, void 0, void 0, function* () {
return httpClient.postJson(getCacheApiUrl(`caches/${cacheId.toString()}`), commitCacheRequest);
}));
});
}
function saveCache(cacheId, archivePath, signedUploadURL, options) {
return cacheHttpClient_awaiter(this, void 0, void 0, function* () {
const uploadOptions = getUploadOptions(options);
if (uploadOptions.useAzureSdk) {
// Use Azure storage SDK to upload caches directly to Azure
if (!signedUploadURL) {
throw new Error('Azure Storage SDK can only be used when a signed URL is provided.');
}
yield uploadCacheArchiveSDK(signedUploadURL, archivePath, options);
}
else {
const httpClient = createHttpClient();
core.debug('Upload cache');
yield uploadFile(httpClient, cacheId, archivePath, options);
// Commit Cache
core.debug('Commiting cache');
const cacheSize = utils.getArchiveFileSizeInBytes(archivePath);
core.info(`Cache Size: ~${Math.round(cacheSize / (1024 * 1024))} MB (${cacheSize} B)`);
const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize);
if (!isSuccessStatusCode(commitCacheResponse.statusCode)) {
throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`);
}
core.info('Cache saved successfully');
}
});
}
//# sourceMappingURL=cacheHttpClient.js.map
// EXTERNAL MODULE: ./node_modules/@protobuf-ts/runtime-rpc/build/commonjs/index.js
var commonjs = __webpack_require__(4420);
// EXTERNAL MODULE: ./node_modules/@protobuf-ts/runtime/build/commonjs/index.js
var build_commonjs = __webpack_require__(8886);
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/generated/results/entities/v1/cachescope.js
// @generated message type with reflection information, may provide speed optimized methods
class CacheScope$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.entities.v1.CacheScope", [
{ no: 1, name: "scope", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 2, name: "permission", kind: "scalar", T: 3 /*ScalarType.INT64*/ }
]);
}
create(value) {
const message = { scope: "", permission: "0" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* string scope */ 1:
message.scope = reader.string();
break;
case /* int64 permission */ 2:
message.permission = reader.int64().toString();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* string scope = 1; */
if (message.scope !== "")
writer.tag(1, build_commonjs.WireType.LengthDelimited).string(message.scope);
/* int64 permission = 2; */
if (message.permission !== "0")
writer.tag(2, build_commonjs.WireType.Varint).int64(message.permission);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.entities.v1.CacheScope
*/
const CacheScope = new CacheScope$Type();
//# sourceMappingURL=cachescope.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/generated/results/entities/v1/cachemetadata.js
// @generated message type with reflection information, may provide speed optimized methods
class CacheMetadata$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.entities.v1.CacheMetadata", [
{ no: 1, name: "repository_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
{ no: 2, name: "scope", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => CacheScope }
]);
}
create(value) {
const message = { repositoryId: "0", scope: [] };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* int64 repository_id */ 1:
message.repositoryId = reader.int64().toString();
break;
case /* repeated github.actions.results.entities.v1.CacheScope scope */ 2:
message.scope.push(CacheScope.internalBinaryRead(reader, reader.uint32(), options));
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* int64 repository_id = 1; */
if (message.repositoryId !== "0")
writer.tag(1, build_commonjs.WireType.Varint).int64(message.repositoryId);
/* repeated github.actions.results.entities.v1.CacheScope scope = 2; */
for (let i = 0; i < message.scope.length; i++)
CacheScope.internalBinaryWrite(message.scope[i], writer.tag(2, build_commonjs.WireType.LengthDelimited).fork(), options).join();
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.entities.v1.CacheMetadata
*/
const CacheMetadata = new CacheMetadata$Type();
//# sourceMappingURL=cachemetadata.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/generated/results/api/v1/cache.js
// @generated by protobuf-ts 2.9.1 with parameter long_type_string,client_none,generate_dependencies
// @generated from protobuf file "results/api/v1/cache.proto" (package "github.actions.results.api.v1", syntax proto3)
// tslint:disable
// @generated message type with reflection information, may provide speed optimized methods
class CreateCacheEntryRequest$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.CreateCacheEntryRequest", [
{ no: 1, name: "metadata", kind: "message", T: () => CacheMetadata },
{ no: 2, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 3, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { key: "", version: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* github.actions.results.entities.v1.CacheMetadata metadata */ 1:
message.metadata = CacheMetadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata);
break;
case /* string key */ 2:
message.key = reader.string();
break;
case /* string version */ 3:
message.version = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* github.actions.results.entities.v1.CacheMetadata metadata = 1; */
if (message.metadata)
CacheMetadata.internalBinaryWrite(message.metadata, writer.tag(1, build_commonjs.WireType.LengthDelimited).fork(), options).join();
/* string key = 2; */
if (message.key !== "")
writer.tag(2, build_commonjs.WireType.LengthDelimited).string(message.key);
/* string version = 3; */
if (message.version !== "")
writer.tag(3, build_commonjs.WireType.LengthDelimited).string(message.version);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.CreateCacheEntryRequest
*/
const cache_CreateCacheEntryRequest = new CreateCacheEntryRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class CreateCacheEntryResponse$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.CreateCacheEntryResponse", [
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
{ no: 2, name: "signed_upload_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { ok: false, signedUploadUrl: "", message: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* bool ok */ 1:
message.ok = reader.bool();
break;
case /* string signed_upload_url */ 2:
message.signedUploadUrl = reader.string();
break;
case /* string message */ 3:
message.message = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* bool ok = 1; */
if (message.ok !== false)
writer.tag(1, build_commonjs.WireType.Varint).bool(message.ok);
/* string signed_upload_url = 2; */
if (message.signedUploadUrl !== "")
writer.tag(2, build_commonjs.WireType.LengthDelimited).string(message.signedUploadUrl);
/* string message = 3; */
if (message.message !== "")
writer.tag(3, build_commonjs.WireType.LengthDelimited).string(message.message);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.CreateCacheEntryResponse
*/
const cache_CreateCacheEntryResponse = new CreateCacheEntryResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class FinalizeCacheEntryUploadRequest$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.FinalizeCacheEntryUploadRequest", [
{ no: 1, name: "metadata", kind: "message", T: () => CacheMetadata },
{ no: 2, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 3, name: "size_bytes", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
{ no: 4, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { key: "", sizeBytes: "0", version: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* github.actions.results.entities.v1.CacheMetadata metadata */ 1:
message.metadata = CacheMetadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata);
break;
case /* string key */ 2:
message.key = reader.string();
break;
case /* int64 size_bytes */ 3:
message.sizeBytes = reader.int64().toString();
break;
case /* string version */ 4:
message.version = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* github.actions.results.entities.v1.CacheMetadata metadata = 1; */
if (message.metadata)
CacheMetadata.internalBinaryWrite(message.metadata, writer.tag(1, build_commonjs.WireType.LengthDelimited).fork(), options).join();
/* string key = 2; */
if (message.key !== "")
writer.tag(2, build_commonjs.WireType.LengthDelimited).string(message.key);
/* int64 size_bytes = 3; */
if (message.sizeBytes !== "0")
writer.tag(3, build_commonjs.WireType.Varint).int64(message.sizeBytes);
/* string version = 4; */
if (message.version !== "")
writer.tag(4, build_commonjs.WireType.LengthDelimited).string(message.version);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.FinalizeCacheEntryUploadRequest
*/
const cache_FinalizeCacheEntryUploadRequest = new FinalizeCacheEntryUploadRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class FinalizeCacheEntryUploadResponse$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.FinalizeCacheEntryUploadResponse", [
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
{ no: 2, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/ },
{ no: 3, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { ok: false, entryId: "0", message: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* bool ok */ 1:
message.ok = reader.bool();
break;
case /* int64 entry_id */ 2:
message.entryId = reader.int64().toString();
break;
case /* string message */ 3:
message.message = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* bool ok = 1; */
if (message.ok !== false)
writer.tag(1, build_commonjs.WireType.Varint).bool(message.ok);
/* int64 entry_id = 2; */
if (message.entryId !== "0")
writer.tag(2, build_commonjs.WireType.Varint).int64(message.entryId);
/* string message = 3; */
if (message.message !== "")
writer.tag(3, build_commonjs.WireType.LengthDelimited).string(message.message);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.FinalizeCacheEntryUploadResponse
*/
const cache_FinalizeCacheEntryUploadResponse = new FinalizeCacheEntryUploadResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class GetCacheEntryDownloadURLRequest$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.GetCacheEntryDownloadURLRequest", [
{ no: 1, name: "metadata", kind: "message", T: () => CacheMetadata },
{ no: 2, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 3, name: "restore_keys", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
{ no: 4, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { key: "", restoreKeys: [], version: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* github.actions.results.entities.v1.CacheMetadata metadata */ 1:
message.metadata = CacheMetadata.internalBinaryRead(reader, reader.uint32(), options, message.metadata);
break;
case /* string key */ 2:
message.key = reader.string();
break;
case /* repeated string restore_keys */ 3:
message.restoreKeys.push(reader.string());
break;
case /* string version */ 4:
message.version = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* github.actions.results.entities.v1.CacheMetadata metadata = 1; */
if (message.metadata)
CacheMetadata.internalBinaryWrite(message.metadata, writer.tag(1, build_commonjs.WireType.LengthDelimited).fork(), options).join();
/* string key = 2; */
if (message.key !== "")
writer.tag(2, build_commonjs.WireType.LengthDelimited).string(message.key);
/* repeated string restore_keys = 3; */
for (let i = 0; i < message.restoreKeys.length; i++)
writer.tag(3, build_commonjs.WireType.LengthDelimited).string(message.restoreKeys[i]);
/* string version = 4; */
if (message.version !== "")
writer.tag(4, build_commonjs.WireType.LengthDelimited).string(message.version);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.GetCacheEntryDownloadURLRequest
*/
const cache_GetCacheEntryDownloadURLRequest = new GetCacheEntryDownloadURLRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class GetCacheEntryDownloadURLResponse$Type extends build_commonjs.MessageType {
constructor() {
super("github.actions.results.api.v1.GetCacheEntryDownloadURLResponse", [
{ no: 1, name: "ok", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
{ no: 2, name: "signed_download_url", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
{ no: 3, name: "matched_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
]);
}
create(value) {
const message = { ok: false, signedDownloadUrl: "", matchedKey: "" };
globalThis.Object.defineProperty(message, build_commonjs.MESSAGE_TYPE, { enumerable: false, value: this });
if (value !== undefined)
(0,build_commonjs.reflectionMergePartial)(this, message, value);
return message;
}
internalBinaryRead(reader, length, options, target) {
let message = target !== null && target !== void 0 ? target : this.create(), end = reader.pos + length;
while (reader.pos < end) {
let [fieldNo, wireType] = reader.tag();
switch (fieldNo) {
case /* bool ok */ 1:
message.ok = reader.bool();
break;
case /* string signed_download_url */ 2:
message.signedDownloadUrl = reader.string();
break;
case /* string matched_key */ 3:
message.matchedKey = reader.string();
break;
default:
let u = options.readUnknownField;
if (u === "throw")
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
let d = reader.skip(wireType);
if (u !== false)
(u === true ? build_commonjs.UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
}
}
return message;
}
internalBinaryWrite(message, writer, options) {
/* bool ok = 1; */
if (message.ok !== false)
writer.tag(1, build_commonjs.WireType.Varint).bool(message.ok);
/* string signed_download_url = 2; */
if (message.signedDownloadUrl !== "")
writer.tag(2, build_commonjs.WireType.LengthDelimited).string(message.signedDownloadUrl);
/* string matched_key = 3; */
if (message.matchedKey !== "")
writer.tag(3, build_commonjs.WireType.LengthDelimited).string(message.matchedKey);
let u = options.writeUnknownFields;
if (u !== false)
(u == true ? build_commonjs.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
return writer;
}
}
/**
* @generated MessageType for protobuf message github.actions.results.api.v1.GetCacheEntryDownloadURLResponse
*/
const cache_GetCacheEntryDownloadURLResponse = new GetCacheEntryDownloadURLResponse$Type();
/**
* @generated ServiceType for protobuf service github.actions.results.api.v1.CacheService
*/
const CacheService = new commonjs/* ServiceType */.C0("github.actions.results.api.v1.CacheService", [
{ name: "CreateCacheEntry", options: {}, I: cache_CreateCacheEntryRequest, O: cache_CreateCacheEntryResponse },
{ name: "FinalizeCacheEntryUpload", options: {}, I: cache_FinalizeCacheEntryUploadRequest, O: cache_FinalizeCacheEntryUploadResponse },
{ name: "GetCacheEntryDownloadURL", options: {}, I: cache_GetCacheEntryDownloadURLRequest, O: cache_GetCacheEntryDownloadURLResponse }
]);
//# sourceMappingURL=cache.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/generated/results/api/v1/cache.twirp-client.js
class CacheServiceClientJSON {
constructor(rpc) {
this.rpc = rpc;
this.CreateCacheEntry.bind(this);
this.FinalizeCacheEntryUpload.bind(this);
this.GetCacheEntryDownloadURL.bind(this);
}
CreateCacheEntry(request) {
const data = cache_CreateCacheEntryRequest.toJson(request, {
useProtoFieldName: true,
emitDefaultValues: false,
});
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "CreateCacheEntry", "application/json", data);
return promise.then((data) => cache_CreateCacheEntryResponse.fromJson(data, {
ignoreUnknownFields: true,
}));
}
FinalizeCacheEntryUpload(request) {
const data = cache_FinalizeCacheEntryUploadRequest.toJson(request, {
useProtoFieldName: true,
emitDefaultValues: false,
});
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "FinalizeCacheEntryUpload", "application/json", data);
return promise.then((data) => cache_FinalizeCacheEntryUploadResponse.fromJson(data, {
ignoreUnknownFields: true,
}));
}
GetCacheEntryDownloadURL(request) {
const data = cache_GetCacheEntryDownloadURLRequest.toJson(request, {
useProtoFieldName: true,
emitDefaultValues: false,
});
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "GetCacheEntryDownloadURL", "application/json", data);
return promise.then((data) => cache_GetCacheEntryDownloadURLResponse.fromJson(data, {
ignoreUnknownFields: true,
}));
}
}
class CacheServiceClientProtobuf {
constructor(rpc) {
this.rpc = rpc;
this.CreateCacheEntry.bind(this);
this.FinalizeCacheEntryUpload.bind(this);
this.GetCacheEntryDownloadURL.bind(this);
}
CreateCacheEntry(request) {
const data = CreateCacheEntryRequest.toBinary(request);
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "CreateCacheEntry", "application/protobuf", data);
return promise.then((data) => CreateCacheEntryResponse.fromBinary(data));
}
FinalizeCacheEntryUpload(request) {
const data = FinalizeCacheEntryUploadRequest.toBinary(request);
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "FinalizeCacheEntryUpload", "application/protobuf", data);
return promise.then((data) => FinalizeCacheEntryUploadResponse.fromBinary(data));
}
GetCacheEntryDownloadURL(request) {
const data = GetCacheEntryDownloadURLRequest.toBinary(request);
const promise = this.rpc.request("github.actions.results.api.v1.CacheService", "GetCacheEntryDownloadURL", "application/protobuf", data);
return promise.then((data) => GetCacheEntryDownloadURLResponse.fromBinary(data));
}
}
//# sourceMappingURL=cache.twirp-client.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/shared/util.js
/**
* Masks the `sig` parameter in a URL and sets it as a secret.
*
* @param url - The URL containing the signature parameter to mask
* @remarks
* This function attempts to parse the provided URL and identify the 'sig' query parameter.
* If found, it registers both the raw and URL-encoded signature values as secrets using
* the Actions `setSecret` API, which prevents them from being displayed in logs.
*
* The function handles errors gracefully if URL parsing fails, logging them as debug messages.
*
* @example
* ```typescript
* // Mask a signature in an Azure SAS token URL
* maskSigUrl('https://example.blob.core.windows.net/container/file.txt?sig=abc123&se=2023-01-01');
* ```
*/
function maskSigUrl(url) {
if (!url)
return;
try {
const parsedUrl = new URL(url);
const signature = parsedUrl.searchParams.get('sig');
if (signature) {
(0,lib_core/* setSecret */.Pq)(signature);
(0,lib_core/* setSecret */.Pq)(encodeURIComponent(signature));
}
}
catch (error) {
(0,lib_core/* debug */.Yz)(`Failed to parse URL: ${url} ${error instanceof Error ? error.message : String(error)}`);
}
}
/**
* Masks sensitive information in URLs containing signature parameters.
* Currently supports masking 'sig' parameters in the 'signed_upload_url'
* and 'signed_download_url' properties of the provided object.
*
* @param body - The object should contain a signature
* @remarks
* This function extracts URLs from the object properties and calls maskSigUrl
* on each one to redact sensitive signature information. The function doesn't
* modify the original object; it only marks the signatures as secrets for
* logging purposes.
*
* @example
* ```typescript
* const responseBody = {
* signed_upload_url: 'https://blob.core.windows.net/?sig=abc123',
* signed_download_url: 'https://blob.core/windows.net/?sig=def456'
* };
* maskSecretUrls(responseBody);
* ```
*/
function maskSecretUrls(body) {
if (typeof body !== 'object' || body === null) {
(0,lib_core/* debug */.Yz)('body is not an object or is null');
return;
}
if ('signed_upload_url' in body &&
typeof body.signed_upload_url === 'string') {
maskSigUrl(body.signed_upload_url);
}
if ('signed_download_url' in body &&
typeof body.signed_download_url === 'string') {
maskSigUrl(body.signed_download_url);
}
}
//# sourceMappingURL=util.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/shared/cacheTwirpClient.js
var cacheTwirpClient_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/**
* This class is a wrapper around the CacheServiceClientJSON class generated by Twirp.
*
* It adds retry logic to the request method, which is not present in the generated client.
*
* This class is used to interact with cache service v2.
*/
class CacheServiceClient {
constructor(userAgent, maxAttempts, baseRetryIntervalMilliseconds, retryMultiplier) {
this.maxAttempts = 5;
this.baseRetryIntervalMilliseconds = 3000;
this.retryMultiplier = 1.5;
const token = getRuntimeToken();
this.baseUrl = getCacheServiceURL();
if (maxAttempts) {
this.maxAttempts = maxAttempts;
}
if (baseRetryIntervalMilliseconds) {
this.baseRetryIntervalMilliseconds = baseRetryIntervalMilliseconds;
}
if (retryMultiplier) {
this.retryMultiplier = retryMultiplier;
}
this.httpClient = new lib/* HttpClient */.Qq(userAgent, [
new auth/* BearerCredentialHandler */.tZ(token)
]);
}
// This function satisfies the Rpc interface. It is compatible with the JSON
// JSON generated client.
request(service, method, contentType, data) {
return cacheTwirpClient_awaiter(this, void 0, void 0, function* () {
const url = new URL(`/twirp/${service}/${method}`, this.baseUrl).href;
(0,lib_core/* debug */.Yz)(`[Request] ${method} ${url}`);
const headers = {
'Content-Type': contentType
};
try {
const { body } = yield this.retryableRequest(() => cacheTwirpClient_awaiter(this, void 0, void 0, function* () { return this.httpClient.post(url, JSON.stringify(data), headers); }));
return body;
}
catch (error) {
throw new Error(`Failed to ${method}: ${error.message}`);
}
});
}
retryableRequest(operation) {
return cacheTwirpClient_awaiter(this, void 0, void 0, function* () {
let attempt = 0;
let errorMessage = '';
let rawBody = '';
while (attempt < this.maxAttempts) {
let isRetryable = false;
try {
const response = yield operation();
const statusCode = response.message.statusCode;
rawBody = yield response.readBody();
(0,lib_core/* debug */.Yz)(`[Response] - ${response.message.statusCode}`);
(0,lib_core/* debug */.Yz)(`Headers: ${JSON.stringify(response.message.headers, null, 2)}`);
const body = JSON.parse(rawBody);
maskSecretUrls(body);
(0,lib_core/* debug */.Yz)(`Body: ${JSON.stringify(body, null, 2)}`);
if (this.isSuccessStatusCode(statusCode)) {
return { response, body };
}
isRetryable = this.isRetryableHttpStatusCode(statusCode);
errorMessage = `Failed request: (${statusCode}) ${response.message.statusMessage}`;
if (body.msg) {
if (UsageError.isUsageErrorMessage(body.msg)) {
throw new UsageError();
}
errorMessage = `${errorMessage}: ${body.msg}`;
}
// Handle rate limiting - don't retry, just warn and exit
// For more info, see https://docs.github.com/en/actions/reference/limits
if (statusCode === lib/* HttpCodes */.Hv.TooManyRequests) {
const retryAfterHeader = response.message.headers['retry-after'];
if (retryAfterHeader) {
const parsedSeconds = parseInt(retryAfterHeader, 10);
if (!isNaN(parsedSeconds) && parsedSeconds > 0) {
(0,lib_core/* warning */.$e)(`You've hit a rate limit, your rate limit will reset in ${parsedSeconds} seconds`);
}
}
throw new RateLimitError(`Rate limited: ${errorMessage}`);
}
}
catch (error) {
if (error instanceof SyntaxError) {
(0,lib_core/* debug */.Yz)(`Raw Body: ${rawBody}`);
}
if (error instanceof UsageError) {
throw error;
}
if (error instanceof RateLimitError) {
throw error;
}
if (NetworkError.isNetworkErrorCode(error === null || error === void 0 ? void 0 : error.code)) {
throw new NetworkError(error === null || error === void 0 ? void 0 : error.code);
}
isRetryable = true;
errorMessage = error.message;
}
if (!isRetryable) {
throw new Error(`Received non-retryable error: ${errorMessage}`);
}
if (attempt + 1 === this.maxAttempts) {
throw new Error(`Failed to make request after ${this.maxAttempts} attempts: ${errorMessage}`);
}
const retryTimeMilliseconds = this.getExponentialRetryTimeMilliseconds(attempt);
(0,lib_core/* info */.pq)(`Attempt ${attempt + 1} of ${this.maxAttempts} failed with error: ${errorMessage}. Retrying request in ${retryTimeMilliseconds} ms...`);
yield this.sleep(retryTimeMilliseconds);
attempt++;
}
throw new Error(`Request failed`);
});
}
isSuccessStatusCode(statusCode) {
if (!statusCode)
return false;
return statusCode >= 200 && statusCode < 300;
}
isRetryableHttpStatusCode(statusCode) {
if (!statusCode)
return false;
const retryableStatusCodes = [
lib/* HttpCodes */.Hv.BadGateway,
lib/* HttpCodes */.Hv.GatewayTimeout,
lib/* HttpCodes */.Hv.InternalServerError,
lib/* HttpCodes */.Hv.ServiceUnavailable
];
return retryableStatusCodes.includes(statusCode);
}
sleep(milliseconds) {
return cacheTwirpClient_awaiter(this, void 0, void 0, function* () {
return new Promise(resolve => setTimeout(resolve, milliseconds));
});
}
getExponentialRetryTimeMilliseconds(attempt) {
if (attempt < 0) {
throw new Error('attempt should be a positive integer');
}
if (attempt === 0) {
return this.baseRetryIntervalMilliseconds;
}
const minTime = this.baseRetryIntervalMilliseconds * Math.pow(this.retryMultiplier, attempt);
const maxTime = minTime * this.retryMultiplier;
// returns a random number between minTime and maxTime (exclusive)
return Math.trunc(Math.random() * (maxTime - minTime) + minTime);
}
}
function internalCacheTwirpClient(options) {
const client = new CacheServiceClient(user_agent_getUserAgentString(), options === null || options === void 0 ? void 0 : options.maxAttempts, options === null || options === void 0 ? void 0 : options.retryIntervalMs, options === null || options === void 0 ? void 0 : options.retryMultiplier);
return new CacheServiceClientJSON(client);
}
//# sourceMappingURL=cacheTwirpClient.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/internal/tar.js
var tar_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
const IS_WINDOWS = process.platform === 'win32';
// Returns tar path and type: BSD or GNU
function getTarPath() {
return tar_awaiter(this, void 0, void 0, function* () {
switch (process.platform) {
case 'win32': {
const gnuTar = yield getGnuTarPathOnWindows();
const systemTar = SystemTarPathOnWindows;
if (gnuTar) {
// Use GNUtar as default on windows
return { path: gnuTar, type: ArchiveToolType.GNU };
}
else if ((0,external_fs_.existsSync)(systemTar)) {
return { path: systemTar, type: ArchiveToolType.BSD };
}
break;
}
case 'darwin': {
const gnuTar = yield io/* which */.K7('gtar', false);
if (gnuTar) {
// fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527
return { path: gnuTar, type: ArchiveToolType.GNU };
}
else {
return {
path: yield io/* which */.K7('tar', true),
type: ArchiveToolType.BSD
};
}
}
default:
break;
}
// Default assumption is GNU tar is present in path
return {
path: yield io/* which */.K7('tar', true),
type: ArchiveToolType.GNU
};
});
}
// Return arguments for tar as per tarPath, compressionMethod, method type and os
function getTarArgs(tarPath_1, compressionMethod_1, type_1) {
return tar_awaiter(this, arguments, void 0, function* (tarPath, compressionMethod, type, archivePath = '') {
const args = [`"${tarPath.path}"`];
const cacheFileName = getCacheFileName(compressionMethod);
const tarFile = 'cache.tar';
const workingDirectory = getWorkingDirectory();
// Speficic args for BSD tar on windows for workaround
const BSD_TAR_ZSTD = tarPath.type === ArchiveToolType.BSD &&
compressionMethod !== CompressionMethod.Gzip &&
IS_WINDOWS;
// Method specific args
switch (type) {
case 'create':
args.push('--posix', '-cf', BSD_TAR_ZSTD
? tarFile
: cacheFileName.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'), '--exclude', BSD_TAR_ZSTD
? tarFile
: cacheFileName.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'), '--files-from', constants_ManifestFilename);
break;
case 'extract':
args.push('-xf', BSD_TAR_ZSTD
? tarFile
: archivePath.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'));
break;
case 'list':
args.push('-tf', BSD_TAR_ZSTD
? tarFile
: archivePath.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'), '-P');
break;
}
// Platform specific args
if (tarPath.type === ArchiveToolType.GNU) {
switch (process.platform) {
case 'win32':
args.push('--force-local');
break;
case 'darwin':
args.push('--delay-directory-restore');
break;
}
}
return args;
});
}
// Returns commands to run tar and compression program
function getCommands(compressionMethod_1, type_1) {
return tar_awaiter(this, arguments, void 0, function* (compressionMethod, type, archivePath = '') {
let args;
const tarPath = yield getTarPath();
const tarArgs = yield getTarArgs(tarPath, compressionMethod, type, archivePath);
const compressionArgs = type !== 'create'
? yield getDecompressionProgram(tarPath, compressionMethod, archivePath)
: yield getCompressionProgram(tarPath, compressionMethod);
const BSD_TAR_ZSTD = tarPath.type === ArchiveToolType.BSD &&
compressionMethod !== CompressionMethod.Gzip &&
IS_WINDOWS;
if (BSD_TAR_ZSTD && type !== 'create') {
args = [[...compressionArgs].join(' '), [...tarArgs].join(' ')];
}
else {
args = [[...tarArgs].join(' '), [...compressionArgs].join(' ')];
}
if (BSD_TAR_ZSTD) {
return args;
}
return [args.join(' ')];
});
}
function getWorkingDirectory() {
var _a;
return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd();
}
// Common function for extractTar and listTar to get the compression method
function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
return tar_awaiter(this, void 0, void 0, function* () {
// -d: Decompress.
// unzstd is equivalent to 'zstd -d'
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
// Using 30 here because we also support 32-bit self-hosted runners.
const BSD_TAR_ZSTD = tarPath.type === ArchiveToolType.BSD &&
compressionMethod !== CompressionMethod.Gzip &&
IS_WINDOWS;
switch (compressionMethod) {
case CompressionMethod.Zstd:
return BSD_TAR_ZSTD
? [
'zstd -d --long=30 --force -o',
TarFilename,
archivePath.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/')
]
: [
'--use-compress-program',
IS_WINDOWS ? '"zstd -d --long=30"' : 'unzstd --long=30'
];
case CompressionMethod.ZstdWithoutLong:
return BSD_TAR_ZSTD
? [
'zstd -d --force -o',
TarFilename,
archivePath.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/')
]
: ['--use-compress-program', IS_WINDOWS ? '"zstd -d"' : 'unzstd'];
default:
return ['-z'];
}
});
}
// Used for creating the archive
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
// zstdmt is equivalent to 'zstd -T0'
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
// Using 30 here because we also support 32-bit self-hosted runners.
// Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
function getCompressionProgram(tarPath, compressionMethod) {
return tar_awaiter(this, void 0, void 0, function* () {
const cacheFileName = getCacheFileName(compressionMethod);
const BSD_TAR_ZSTD = tarPath.type === ArchiveToolType.BSD &&
compressionMethod !== CompressionMethod.Gzip &&
IS_WINDOWS;
switch (compressionMethod) {
case CompressionMethod.Zstd:
return BSD_TAR_ZSTD
? [
'zstd -T0 --long=30 --force -o',
cacheFileName.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'),
TarFilename
]
: [
'--use-compress-program',
IS_WINDOWS ? '"zstd -T0 --long=30"' : 'zstdmt --long=30'
];
case CompressionMethod.ZstdWithoutLong:
return BSD_TAR_ZSTD
? [
'zstd -T0 --force -o',
cacheFileName.replace(new RegExp(`\\${external_path_.sep}`, 'g'), '/'),
TarFilename
]
: ['--use-compress-program', IS_WINDOWS ? '"zstd -T0"' : 'zstdmt'];
default:
return ['-z'];
}
});
}
// Executes all commands as separate processes
function execCommands(commands, cwd) {
return tar_awaiter(this, void 0, void 0, function* () {
for (const command of commands) {
try {
yield (0,exec/* exec */.m)(command, undefined, {
cwd,
env: Object.assign(Object.assign({}, process.env), { MSYS: 'winsymlinks:nativestrict' })
});
}
catch (error) {
throw new Error(`${command.split(' ')[0]} failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
}
}
});
}
// List the contents of a tar
function tar_listTar(archivePath, compressionMethod) {
return tar_awaiter(this, void 0, void 0, function* () {
const commands = yield getCommands(compressionMethod, 'list', archivePath);
yield execCommands(commands);
});
}
// Extract a tar
function extractTar(archivePath, compressionMethod) {
return tar_awaiter(this, void 0, void 0, function* () {
// Create directory to extract tar into
const workingDirectory = getWorkingDirectory();
yield io/* mkdirP */.U$(workingDirectory);
const commands = yield getCommands(compressionMethod, 'extract', archivePath);
yield execCommands(commands);
});
}
// Create a tar
function tar_createTar(archiveFolder, sourceDirectories, compressionMethod) {
return tar_awaiter(this, void 0, void 0, function* () {
// Write source directories to manifest.txt to avoid command length limits
writeFileSync(path.join(archiveFolder, ManifestFilename), sourceDirectories.join('\n'));
const commands = yield getCommands(compressionMethod, 'create');
yield execCommands(commands, archiveFolder);
});
}
//# sourceMappingURL=tar.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/cache/lib/cache.js
var cache_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
Object.setPrototypeOf(this, ValidationError.prototype);
}
}
class ReserveCacheError extends Error {
constructor(message) {
super(message);
this.name = 'ReserveCacheError';
Object.setPrototypeOf(this, ReserveCacheError.prototype);
}
}
/**
* Stable prefix the cache service writes into the cache reservation response
* when the issuer downgraded the cache token to read-only (for example, because
* the run was triggered by an untrusted event). saveCacheV1 / saveCacheV2
* dispatch on this prefix to re-classify the failure as a CacheWriteDeniedError
* so consumers and tests can distinguish a policy denial from other reservation
* failures. Internally it is logged as a non-fatal warning like other
* best-effort save failures.
*/
const CACHE_WRITE_DENIED_PREFIX = 'cache write denied:';
/**
* Raised when the cache backend refuses to reserve a writable cache entry
* because the JWT issued for this run was scoped read-only (for example, the
* run was triggered by an event the repository administrator classified as
* untrusted). The service-supplied detail message always begins with
* `cache write denied:` (the full error message includes additional context
* like the cache key).
*
* Extends ReserveCacheError for source-compatibility: existing
* `instanceof ReserveCacheError` checks and `typedError.name ===
* ReserveCacheError.name` paths keep working, while consumers that want to
* distinguish the policy case can match on this subclass.
*/
class CacheWriteDeniedError extends ReserveCacheError {
constructor(message) {
super(message);
this.name = 'CacheWriteDeniedError';
Object.setPrototypeOf(this, CacheWriteDeniedError.prototype);
}
}
// Re-exported from constants so consumers keep referencing it here; the shared
// value also drives detection in cacheHttpClient without duplicating the string.
const CACHE_READ_DENIED_PREFIX = CacheReadDeniedMessagePrefix;
// Raised when the cache backend denies a download URL because the run's token
// has no readable cache scopes. Caching is best-effort, so restoreCache logs a
// warning and reports a cache miss rather than rethrowing this.
class CacheReadDeniedError extends Error {
constructor(message) {
super(message);
this.name = 'CacheReadDeniedError';
Object.setPrototypeOf(this, CacheReadDeniedError.prototype);
}
}
class FinalizeCacheError extends Error {
constructor(message) {
super(message);
this.name = 'FinalizeCacheError';
Object.setPrototypeOf(this, FinalizeCacheError.prototype);
}
}
function checkPaths(paths) {
if (!paths || paths.length === 0) {
throw new ValidationError(`Path Validation Error: At least one directory or file path is required`);
}
}
function checkKey(key) {
if (key.length > 512) {
throw new ValidationError(`Key Validation Error: ${key} cannot be larger than 512 characters.`);
}
const regex = /^[^,]*$/;
if (!regex.test(key)) {
throw new ValidationError(`Key Validation Error: ${key} cannot contain commas.`);
}
}
/**
* isFeatureAvailable to check the presence of Actions cache service
*
* @returns boolean return true if Actions cache service feature is available, otherwise false
*/
function isFeatureAvailable() {
const cacheServiceVersion = config_getCacheServiceVersion();
// Check availability based on cache service version
switch (cacheServiceVersion) {
case 'v2':
// For v2, we need ACTIONS_RESULTS_URL
return !!process.env['ACTIONS_RESULTS_URL'];
case 'v1':
default:
// For v1, we only need ACTIONS_CACHE_URL
return !!process.env['ACTIONS_CACHE_URL'];
}
}
/**
* Restores cache from keys
*
* @param paths a list of file paths to restore from the cache
* @param primaryKey an explicit key for restoring the cache. Lookup is done with prefix matching.
* @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for primaryKey
* @param downloadOptions cache download options
* @param enableCrossOsArchive an optional boolean enabled to restore on windows any cache created on any platform
* @returns string returns the key for the cache hit, otherwise returns undefined
*/
function restoreCache(paths_1, primaryKey_1, restoreKeys_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, primaryKey, restoreKeys, options, enableCrossOsArchive = false) {
const cacheServiceVersion = config_getCacheServiceVersion();
lib_core/* debug */.Yz(`Cache service version: ${cacheServiceVersion}`);
checkPaths(paths);
const cacheMode = config_getCacheMode();
if (!isCacheReadable(cacheMode)) {
lib_core/* info */.pq(`Cache restore skipped: the effective cache-mode '${cacheMode}' does not permit reads.`);
lib_core/* debug */.Yz(`Skipped restore for paths [${paths.join(', ')}] with primary key '${primaryKey}'.`);
return undefined;
}
switch (cacheServiceVersion) {
case 'v2':
return yield restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsArchive);
case 'v1':
default:
return yield restoreCacheV1(paths, primaryKey, restoreKeys, options, enableCrossOsArchive);
}
});
}
/**
* Restores cache using the legacy Cache Service
*
* @param paths a list of file paths to restore from the cache
* @param primaryKey an explicit key for restoring the cache. Lookup is done with prefix matching.
* @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for primaryKey
* @param options cache download options
* @param enableCrossOsArchive an optional boolean enabled to restore on Windows any cache created on any platform
* @returns string returns the key for the cache hit, otherwise returns undefined
*/
function restoreCacheV1(paths_1, primaryKey_1, restoreKeys_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, primaryKey, restoreKeys, options, enableCrossOsArchive = false) {
var _a;
restoreKeys = restoreKeys || [];
const keys = [primaryKey, ...restoreKeys];
lib_core/* debug */.Yz('Resolved Keys:');
lib_core/* debug */.Yz(JSON.stringify(keys));
if (keys.length > 10) {
throw new ValidationError(`Key Validation Error: Keys are limited to a maximum of 10.`);
}
for (const key of keys) {
checkKey(key);
}
const compressionMethod = yield getCompressionMethod();
let archivePath = '';
try {
// path are needed to compute version
let cacheEntry;
try {
cacheEntry = yield getCacheEntry(keys, paths, {
compressionMethod,
enableCrossOsArchive
});
}
catch (error) {
// The v1 artifact cache service returns HTTP 403 with a
// `cache read denied:` body when the run's token has no readable cache
// scopes. getCacheEntry lives in a dependency-free internal module and
// cannot import CacheReadDeniedError without a circular dependency, so it
// only surfaces the raw denial message; we classify it into the typed
// error here so the outer catch and consumers can dispatch on it.
const errorMessage = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : '';
if (errorMessage.includes(CACHE_READ_DENIED_PREFIX)) {
throw new CacheReadDeniedError(errorMessage);
}
throw error;
}
if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
// Cache not found
return undefined;
}
if (options === null || options === void 0 ? void 0 : options.lookupOnly) {
lib_core/* info */.pq('Lookup only - skipping download');
return cacheEntry.cacheKey;
}
archivePath = external_path_.join(yield createTempDirectory(), getCacheFileName(compressionMethod));
lib_core/* debug */.Yz(`Archive Path: ${archivePath}`);
// Download the cache from the cache entry
yield downloadCache(cacheEntry.archiveLocation, archivePath, options);
if (lib_core/* isDebug */._o()) {
yield tar_listTar(archivePath, compressionMethod);
}
const archiveFileSize = getArchiveFileSizeInBytes(archivePath);
lib_core/* info */.pq(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`);
yield extractTar(archivePath, compressionMethod);
lib_core/* info */.pq('Cache restored successfully');
return cacheEntry.cacheKey;
}
catch (error) {
const typedError = error;
if (typedError.name === ValidationError.name) {
throw error;
}
else {
// warn on cache restore failure and continue build
// Log server errors (5xx) as errors, all other errors as warnings.
// A read denied by policy (CacheReadDeniedError) is not an HttpClientError
// so it falls here and is warned, treated as a cache miss.
if (typedError instanceof lib/* HttpClientError */.Kg &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
lib_core/* error */.z3(`Failed to restore: ${error.message}`);
}
else {
lib_core/* warning */.$e(`Failed to restore: ${error.message}`);
}
}
}
finally {
// Try to delete the archive to save space
try {
yield unlinkFile(archivePath);
}
catch (error) {
lib_core/* debug */.Yz(`Failed to delete archive: ${error}`);
}
}
return undefined;
});
}
/**
* Restores cache using Cache Service v2
*
* @param paths a list of file paths to restore from the cache
* @param primaryKey an explicit key for restoring the cache. Lookup is done with prefix matching
* @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for primaryKey
* @param downloadOptions cache download options
* @param enableCrossOsArchive an optional boolean enabled to restore on windows any cache created on any platform
* @returns string returns the key for the cache hit, otherwise returns undefined
*/
function restoreCacheV2(paths_1, primaryKey_1, restoreKeys_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, primaryKey, restoreKeys, options, enableCrossOsArchive = false) {
var _a;
// Override UploadOptions to force the use of Azure
options = Object.assign(Object.assign({}, options), { useAzureSdk: true });
restoreKeys = restoreKeys || [];
const keys = [primaryKey, ...restoreKeys];
lib_core/* debug */.Yz('Resolved Keys:');
lib_core/* debug */.Yz(JSON.stringify(keys));
if (keys.length > 10) {
throw new ValidationError(`Key Validation Error: Keys are limited to a maximum of 10.`);
}
for (const key of keys) {
checkKey(key);
}
let archivePath = '';
try {
const twirpClient = internalCacheTwirpClient();
const compressionMethod = yield getCompressionMethod();
const request = {
key: primaryKey,
restoreKeys,
version: getCacheVersion(paths, compressionMethod, enableCrossOsArchive)
};
let response;
try {
response = yield twirpClient.GetCacheEntryDownloadURL(request);
}
catch (error) {
// The receiver returns twirp PermissionDenied (403) when the run's token
// has no readable cache scopes. The client wraps that 403, so the stable
// prefix is embedded in the message rather than leading it.
const errorMessage = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : '';
if (errorMessage.includes(CACHE_READ_DENIED_PREFIX)) {
throw new CacheReadDeniedError(errorMessage);
}
throw error;
}
if (!response.ok) {
lib_core/* debug */.Yz(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`);
return undefined;
}
const isRestoreKeyMatch = request.key !== response.matchedKey;
if (isRestoreKeyMatch) {
lib_core/* info */.pq(`Cache hit for restore-key: ${response.matchedKey}`);
}
else {
lib_core/* info */.pq(`Cache hit for: ${response.matchedKey}`);
}
if (options === null || options === void 0 ? void 0 : options.lookupOnly) {
lib_core/* info */.pq('Lookup only - skipping download');
return response.matchedKey;
}
archivePath = external_path_.join(yield createTempDirectory(), getCacheFileName(compressionMethod));
lib_core/* debug */.Yz(`Archive path: ${archivePath}`);
lib_core/* debug */.Yz(`Starting download of archive to: ${archivePath}`);
yield downloadCache(response.signedDownloadUrl, archivePath, options);
const archiveFileSize = getArchiveFileSizeInBytes(archivePath);
lib_core/* info */.pq(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`);
if (lib_core/* isDebug */._o()) {
yield tar_listTar(archivePath, compressionMethod);
}
yield extractTar(archivePath, compressionMethod);
lib_core/* info */.pq('Cache restored successfully');
return response.matchedKey;
}
catch (error) {
const typedError = error;
if (typedError.name === ValidationError.name) {
throw error;
}
else {
// Suppress all non-validation cache related errors because caching should be optional
// Log server errors (5xx) as errors, all other errors as warnings.
// A read denied by policy (CacheReadDeniedError) is not an HttpClientError
// so it falls here and is warned, treated as a cache miss.
if (typedError instanceof lib/* HttpClientError */.Kg &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
lib_core/* error */.z3(`Failed to restore: ${error.message}`);
}
else {
lib_core/* warning */.$e(`Failed to restore: ${error.message}`);
}
}
}
finally {
try {
if (archivePath) {
yield unlinkFile(archivePath);
}
}
catch (error) {
lib_core/* debug */.Yz(`Failed to delete archive: ${error}`);
}
}
return undefined;
});
}
/**
* Saves a list of files with the specified key
*
* @param paths a list of file paths to be cached
* @param key an explicit key for restoring the cache
* @param enableCrossOsArchive an optional boolean enabled to save cache on windows which could be restored on any platform
* @param options cache upload options
* @returns number returns cacheId if the cache was saved successfully and throws an error if save fails
*/
function cache_saveCache(paths_1, key_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) {
const cacheServiceVersion = getCacheServiceVersion();
core.debug(`Cache service version: ${cacheServiceVersion}`);
checkPaths(paths);
checkKey(key);
const cacheMode = getCacheMode();
if (!isCacheWritable(cacheMode)) {
core.info(`Cache save skipped: the effective cache-mode '${cacheMode}' does not permit writes.`);
core.debug(`Skipped save for paths [${paths.join(', ')}] with key '${key}'.`);
return -1;
}
switch (cacheServiceVersion) {
case 'v2':
return yield saveCacheV2(paths, key, options, enableCrossOsArchive);
case 'v1':
default:
return yield saveCacheV1(paths, key, options, enableCrossOsArchive);
}
});
}
/**
* Save cache using the legacy Cache Service
*
* @param paths
* @param key
* @param options
* @param enableCrossOsArchive
* @returns
*/
function saveCacheV1(paths_1, key_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) {
var _a, _b, _c, _d, _e, _f;
const compressionMethod = yield utils.getCompressionMethod();
let cacheId = -1;
const cachePaths = yield utils.resolvePaths(paths);
core.debug('Cache Paths:');
core.debug(`${JSON.stringify(cachePaths)}`);
if (cachePaths.length === 0) {
throw new Error(`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`);
}
const archiveFolder = yield utils.createTempDirectory();
const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod));
core.debug(`Archive Path: ${archivePath}`);
try {
yield createTar(archiveFolder, cachePaths, compressionMethod);
if (core.isDebug()) {
yield listTar(archivePath, compressionMethod);
}
const fileSizeLimit = 10 * 1024 * 1024 * 1024; // 10GB per repo limit
const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath);
core.debug(`File Size: ${archiveFileSize}`);
// For GHES, this check will take place in ReserveCache API with enterprise file size limit
if (archiveFileSize > fileSizeLimit && !isGhes()) {
throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 10GB limit, not saving cache.`);
}
core.debug('Reserving Cache');
const reserveCacheResponse = yield cacheHttpClient.reserveCache(key, paths, {
compressionMethod,
enableCrossOsArchive,
cacheSize: archiveFileSize
});
if ((_a = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.result) === null || _a === void 0 ? void 0 : _a.cacheId) {
cacheId = (_b = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.result) === null || _b === void 0 ? void 0 : _b.cacheId;
}
else if ((reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.statusCode) === 400) {
throw new Error((_d = (_c = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : `Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the data cap limit, not saving cache.`);
}
else {
// Inspect the receiver's error message before deciding which error to
// throw. A message starting with the stable `cache write denied:`
// prefix indicates the issuer downgraded the token to read-only
// (policy denial), not a contention case, so we surface it as a
// CacheWriteDeniedError which the outer catch arm logs at warning
// level.
const detailMessage = (_e = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _e === void 0 ? void 0 : _e.message;
if (detailMessage === null || detailMessage === void 0 ? void 0 : detailMessage.startsWith(CACHE_WRITE_DENIED_PREFIX)) {
throw new CacheWriteDeniedError(`Unable to reserve cache with key ${key}. More details: ${detailMessage}`);
}
throw new ReserveCacheError(`Unable to reserve cache with key ${key}, another job may be creating this cache. More details: ${(_f = reserveCacheResponse === null || reserveCacheResponse === void 0 ? void 0 : reserveCacheResponse.error) === null || _f === void 0 ? void 0 : _f.message}`);
}
core.debug(`Saving Cache (ID: ${cacheId})`);
yield cacheHttpClient.saveCache(cacheId, archivePath, '', options);
}
catch (error) {
const typedError = error;
if (typedError.name === ValidationError.name) {
throw error;
}
else if (typedError.name === ReserveCacheError.name) {
core.info(`Failed to save: ${typedError.message}`);
}
else {
// Log server errors (5xx) as errors, all other errors as warnings.
// A write denied by policy (CacheWriteDeniedError) is not an
// HttpClientError and its name does not match the ReserveCacheError arm,
// so it falls here and is warned without failing the run.
if (typedError instanceof HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to save: ${typedError.message}`);
}
else {
core.warning(`Failed to save: ${typedError.message}`);
}
}
}
finally {
// Try to delete the archive to save space
try {
yield utils.unlinkFile(archivePath);
}
catch (error) {
core.debug(`Failed to delete archive: ${error}`);
}
}
return cacheId;
});
}
/**
* Save cache using Cache Service v2
*
* @param paths a list of file paths to restore from the cache
* @param key an explicit key for restoring the cache
* @param options cache upload options
* @param enableCrossOsArchive an optional boolean enabled to save cache on windows which could be restored on any platform
* @returns
*/
function saveCacheV2(paths_1, key_1, options_1) {
return cache_awaiter(this, arguments, void 0, function* (paths, key, options, enableCrossOsArchive = false) {
var _a;
// Override UploadOptions to force the use of Azure
// ...options goes first because we want to override the default values
// set in UploadOptions with these specific figures
options = Object.assign(Object.assign({}, options), { uploadChunkSize: 64 * 1024 * 1024, uploadConcurrency: 8, useAzureSdk: true });
const compressionMethod = yield utils.getCompressionMethod();
const twirpClient = cacheTwirpClient.internalCacheTwirpClient();
let cacheId = -1;
const cachePaths = yield utils.resolvePaths(paths);
core.debug('Cache Paths:');
core.debug(`${JSON.stringify(cachePaths)}`);
if (cachePaths.length === 0) {
throw new Error(`Path Validation Error: Path(s) specified in the action for caching do(es) not exist, hence no cache is being saved.`);
}
const archiveFolder = yield utils.createTempDirectory();
const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod));
core.debug(`Archive Path: ${archivePath}`);
try {
yield createTar(archiveFolder, cachePaths, compressionMethod);
if (core.isDebug()) {
yield listTar(archivePath, compressionMethod);
}
const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath);
core.debug(`File Size: ${archiveFileSize}`);
// Set the archive size in the options, will be used to display the upload progress
options.archiveSizeBytes = archiveFileSize;
core.debug('Reserving Cache');
const version = utils.getCacheVersion(paths, compressionMethod, enableCrossOsArchive);
const request = {
key,
version
};
let signedUploadUrl;
try {
const response = yield twirpClient.CreateCacheEntry(request);
if (!response.ok) {
// Skip the redundant inner warning when the receiver signalled a
// policy denial: the outer catch arm below will log a single
// customer-facing warning.
if (response.message &&
!response.message.startsWith(CACHE_WRITE_DENIED_PREFIX)) {
core.warning(`Cache reservation failed: ${response.message}`);
}
throw new Error(response.message || 'Response was not ok');
}
signedUploadUrl = response.signedUploadUrl;
}
catch (error) {
core.debug(`Failed to reserve cache: ${error}`);
const errorMessage = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : '';
if (errorMessage.startsWith(CACHE_WRITE_DENIED_PREFIX)) {
throw new CacheWriteDeniedError(`Unable to reserve cache with key ${key}. More details: ${errorMessage}`);
}
throw new ReserveCacheError(`Unable to reserve cache with key ${key}, another job may be creating this cache.`);
}
core.debug(`Attempting to upload cache located at: ${archivePath}`);
yield cacheHttpClient.saveCache(cacheId, archivePath, signedUploadUrl, options);
const finalizeRequest = {
key,
version,
sizeBytes: `${archiveFileSize}`
};
const finalizeResponse = yield twirpClient.FinalizeCacheEntryUpload(finalizeRequest);
core.debug(`FinalizeCacheEntryUploadResponse: ${finalizeResponse.ok}`);
if (!finalizeResponse.ok) {
if (finalizeResponse.message) {
throw new FinalizeCacheError(finalizeResponse.message);
}
throw new Error(`Unable to finalize cache with key ${key}, another job may be finalizing this cache.`);
}
cacheId = parseInt(finalizeResponse.entryId);
}
catch (error) {
const typedError = error;
if (typedError.name === ValidationError.name) {
throw error;
}
else if (typedError.name === ReserveCacheError.name) {
core.info(`Failed to save: ${typedError.message}`);
}
else if (typedError.name === FinalizeCacheError.name) {
core.warning(typedError.message);
}
else {
// Log server errors (5xx) as errors, all other errors as warnings.
// A write denied by policy (CacheWriteDeniedError) is not an
// HttpClientError and its name does not match the ReserveCacheError arm,
// so it falls here and is warned without failing the run.
if (typedError instanceof HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to save: ${typedError.message}`);
}
else {
core.warning(`Failed to save: ${typedError.message}`);
}
}
}
finally {
// Try to delete the archive to save space
try {
yield utils.unlinkFile(archivePath);
}
catch (error) {
core.debug(`Failed to delete archive: ${error}`);
}
}
return cacheId;
});
}
//# sourceMappingURL=cache.js.map
/***/ }),
/***/ 2377:
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
y: () => (/* binding */ glob_hashFiles)
});
// UNUSED EXPORTS: create
// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js + 7 modules
var core = __webpack_require__(3838);
// EXTERNAL MODULE: external "fs"
var external_fs_ = __webpack_require__(9896);
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-glob-options-helper.js
/**
* Returns a copy with defaults filled in.
*/
function getOptions(copy) {
const result = {
followSymbolicLinks: true,
implicitDescendants: true,
matchDirectories: true,
omitBrokenSymbolicLinks: true,
excludeHiddenFiles: false
};
if (copy) {
if (typeof copy.followSymbolicLinks === 'boolean') {
result.followSymbolicLinks = copy.followSymbolicLinks;
core/* debug */.Yz(`followSymbolicLinks '${result.followSymbolicLinks}'`);
}
if (typeof copy.implicitDescendants === 'boolean') {
result.implicitDescendants = copy.implicitDescendants;
core/* debug */.Yz(`implicitDescendants '${result.implicitDescendants}'`);
}
if (typeof copy.matchDirectories === 'boolean') {
result.matchDirectories = copy.matchDirectories;
core/* debug */.Yz(`matchDirectories '${result.matchDirectories}'`);
}
if (typeof copy.omitBrokenSymbolicLinks === 'boolean') {
result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks;
core/* debug */.Yz(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`);
}
if (typeof copy.excludeHiddenFiles === 'boolean') {
result.excludeHiddenFiles = copy.excludeHiddenFiles;
core/* debug */.Yz(`excludeHiddenFiles '${result.excludeHiddenFiles}'`);
}
}
return result;
}
//# sourceMappingURL=internal-glob-options-helper.js.map
// EXTERNAL MODULE: external "path"
var external_path_ = __webpack_require__(6928);
// EXTERNAL MODULE: external "assert"
var external_assert_ = __webpack_require__(2613);
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-path-helper.js
const IS_WINDOWS = process.platform === 'win32';
/**
* Similar to path.dirname except normalizes the path separators and slightly better handling for Windows UNC paths.
*
* For example, on Linux/macOS:
* - `/ => /`
* - `/hello => /`
*
* For example, on Windows:
* - `C:\ => C:\`
* - `C:\hello => C:\`
* - `C: => C:`
* - `C:hello => C:`
* - `\ => \`
* - `\hello => \`
* - `\\hello => \\hello`
* - `\\hello\world => \\hello\world`
*/
function dirname(p) {
// Normalize slashes and trim unnecessary trailing slash
p = safeTrimTrailingSeparator(p);
// Windows UNC root, e.g. \\hello or \\hello\world
if (IS_WINDOWS && /^\\\\[^\\]+(\\[^\\]+)?$/.test(p)) {
return p;
}
// Get dirname
let result = external_path_.dirname(p);
// Trim trailing slash for Windows UNC root, e.g. \\hello\world\
if (IS_WINDOWS && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) {
result = safeTrimTrailingSeparator(result);
}
return result;
}
/**
* Roots the path if not already rooted. On Windows, relative roots like `\`
* or `C:` are expanded based on the current working directory.
*/
function ensureAbsoluteRoot(root, itemPath) {
external_assert_(root, `ensureAbsoluteRoot parameter 'root' must not be empty`);
external_assert_(itemPath, `ensureAbsoluteRoot parameter 'itemPath' must not be empty`);
// Already rooted
if (hasAbsoluteRoot(itemPath)) {
return itemPath;
}
// Windows
if (IS_WINDOWS) {
// Check for itemPath like C: or C:foo
if (itemPath.match(/^[A-Z]:[^\\/]|^[A-Z]:$/i)) {
let cwd = process.cwd();
external_assert_(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);
// Drive letter matches cwd? Expand to cwd
if (itemPath[0].toUpperCase() === cwd[0].toUpperCase()) {
// Drive only, e.g. C:
if (itemPath.length === 2) {
// Preserve specified drive letter case (upper or lower)
return `${itemPath[0]}:\\${cwd.substr(3)}`;
}
// Drive + path, e.g. C:foo
else {
if (!cwd.endsWith('\\')) {
cwd += '\\';
}
// Preserve specified drive letter case (upper or lower)
return `${itemPath[0]}:\\${cwd.substr(3)}${itemPath.substr(2)}`;
}
}
// Different drive
else {
return `${itemPath[0]}:\\${itemPath.substr(2)}`;
}
}
// Check for itemPath like \ or \foo
else if (normalizeSeparators(itemPath).match(/^\\$|^\\[^\\]/)) {
const cwd = process.cwd();
external_assert_(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);
return `${cwd[0]}:\\${itemPath.substr(1)}`;
}
}
external_assert_(hasAbsoluteRoot(root), `ensureAbsoluteRoot parameter 'root' must have an absolute root`);
// Otherwise ensure root ends with a separator
if (root.endsWith('/') || (IS_WINDOWS && root.endsWith('\\'))) {
// Intentionally empty
}
else {
// Append separator
root += external_path_.sep;
}
return root + itemPath;
}
/**
* On Linux/macOS, true if path starts with `/`. On Windows, true for paths like:
* `\\hello\share` and `C:\hello` (and using alternate separator).
*/
function hasAbsoluteRoot(itemPath) {
external_assert_(itemPath, `hasAbsoluteRoot parameter 'itemPath' must not be empty`);
// Normalize separators
itemPath = normalizeSeparators(itemPath);
// Windows
if (IS_WINDOWS) {
// E.g. \\hello\share or C:\hello
return itemPath.startsWith('\\\\') || /^[A-Z]:\\/i.test(itemPath);
}
// E.g. /hello
return itemPath.startsWith('/');
}
/**
* On Linux/macOS, true if path starts with `/`. On Windows, true for paths like:
* `\`, `\hello`, `\\hello\share`, `C:`, and `C:\hello` (and using alternate separator).
*/
function hasRoot(itemPath) {
external_assert_(itemPath, `isRooted parameter 'itemPath' must not be empty`);
// Normalize separators
itemPath = normalizeSeparators(itemPath);
// Windows
if (IS_WINDOWS) {
// E.g. \ or \hello or \\hello
// E.g. C: or C:\hello
return itemPath.startsWith('\\') || /^[A-Z]:/i.test(itemPath);
}
// E.g. /hello
return itemPath.startsWith('/');
}
/**
* Removes redundant slashes and converts `/` to `\` on Windows
*/
function normalizeSeparators(p) {
p = p || '';
// Windows
if (IS_WINDOWS) {
// Convert slashes on Windows
p = p.replace(/\//g, '\\');
// Remove redundant slashes
const isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello
return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading \\ for UNC
}
// Remove redundant slashes
return p.replace(/\/\/+/g, '/');
}
/**
* Normalizes the path separators and trims the trailing separator (when safe).
* For example, `/foo/ => /foo` but `/ => /`
*/
function safeTrimTrailingSeparator(p) {
// Short-circuit if empty
if (!p) {
return '';
}
// Normalize separators
p = normalizeSeparators(p);
// No trailing slash
if (!p.endsWith(external_path_.sep)) {
return p;
}
// Check '/' on Linux/macOS and '\' on Windows
if (p === external_path_.sep) {
return p;
}
// On Windows check if drive root. E.g. C:\
if (IS_WINDOWS && /^[A-Z]:\\$/i.test(p)) {
return p;
}
// Otherwise trim trailing slash
return p.substr(0, p.length - 1);
}
//# sourceMappingURL=internal-path-helper.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-match-kind.js
/**
* Indicates whether a pattern matches a path
*/
var MatchKind;
(function (MatchKind) {
/** Not matched */
MatchKind[MatchKind["None"] = 0] = "None";
/** Matched if the path is a directory */
MatchKind[MatchKind["Directory"] = 1] = "Directory";
/** Matched if the path is a regular file */
MatchKind[MatchKind["File"] = 2] = "File";
/** Matched */
MatchKind[MatchKind["All"] = 3] = "All";
})(MatchKind || (MatchKind = {}));
//# sourceMappingURL=internal-match-kind.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-pattern-helper.js
const internal_pattern_helper_IS_WINDOWS = process.platform === 'win32';
/**
* Given an array of patterns, returns an array of paths to search.
* Duplicates and paths under other included paths are filtered out.
*/
function getSearchPaths(patterns) {
// Ignore negate patterns
patterns = patterns.filter(x => !x.negate);
// Create a map of all search paths
const searchPathMap = {};
for (const pattern of patterns) {
const key = internal_pattern_helper_IS_WINDOWS
? pattern.searchPath.toUpperCase()
: pattern.searchPath;
searchPathMap[key] = 'candidate';
}
const result = [];
for (const pattern of patterns) {
// Check if already included
const key = internal_pattern_helper_IS_WINDOWS
? pattern.searchPath.toUpperCase()
: pattern.searchPath;
if (searchPathMap[key] === 'included') {
continue;
}
// Check for an ancestor search path
let foundAncestor = false;
let tempKey = key;
let parent = dirname(tempKey);
while (parent !== tempKey) {
if (searchPathMap[parent]) {
foundAncestor = true;
break;
}
tempKey = parent;
parent = dirname(tempKey);
}
// Include the search pattern in the result
if (!foundAncestor) {
result.push(pattern.searchPath);
searchPathMap[key] = 'included';
}
}
return result;
}
/**
* Matches the patterns against the path
*/
function internal_pattern_helper_match(patterns, itemPath) {
let result = MatchKind.None;
for (const pattern of patterns) {
if (pattern.negate) {
result &= ~pattern.match(itemPath);
}
else {
result |= pattern.match(itemPath);
}
}
return result;
}
/**
* Checks whether to descend further into the directory
*/
function internal_pattern_helper_partialMatch(patterns, itemPath) {
return patterns.some(x => !x.negate && x.partialMatch(itemPath));
}
//# sourceMappingURL=internal-pattern-helper.js.map
// EXTERNAL MODULE: external "os"
var external_os_ = __webpack_require__(857);
;// CONCATENATED MODULE: ./node_modules/balanced-match/dist/esm/index.js
const balanced = (a, b, str) => {
const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
const r = ma !== null && mb != null && range(ma, mb, str);
return (r && {
start: r[0],
end: r[1],
pre: str.slice(0, r[0]),
body: str.slice(r[0] + ma.length, r[1]),
post: str.slice(r[1] + mb.length),
});
};
const maybeMatch = (reg, str) => {
const m = str.match(reg);
return m ? m[0] : null;
};
const range = (a, b, str) => {
let begs, beg, left, right = undefined, result;
let ai = str.indexOf(a);
let bi = str.indexOf(b, ai + 1);
let i = ai;
if (ai >= 0 && bi > 0) {
if (a === b) {
return [ai, bi];
}
begs = [];
left = str.length;
while (i >= 0 && !result) {
if (i === ai) {
begs.push(i);
ai = str.indexOf(a, i + 1);
}
else if (begs.length === 1) {
const r = begs.pop();
if (r !== undefined)
result = [r, bi];
}
else {
beg = begs.pop();
if (beg !== undefined && beg < left) {
left = beg;
right = bi;
}
bi = str.indexOf(b, i + 1);
}
i = ai < bi && ai >= 0 ? ai : bi;
}
if (begs.length && right !== undefined) {
result = [left, right];
}
}
return result;
};
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/brace-expansion/dist/esm/index.js
const escSlash = '\0SLASH' + Math.random() + '\0';
const escOpen = '\0OPEN' + Math.random() + '\0';
const escClose = '\0CLOSE' + Math.random() + '\0';
const escComma = '\0COMMA' + Math.random() + '\0';
const escPeriod = '\0PERIOD' + Math.random() + '\0';
const escSlashPattern = new RegExp(escSlash, 'g');
const escOpenPattern = new RegExp(escOpen, 'g');
const escClosePattern = new RegExp(escClose, 'g');
const escCommaPattern = new RegExp(escComma, 'g');
const escPeriodPattern = new RegExp(escPeriod, 'g');
const slashPattern = /\\\\/g;
const openPattern = /\\{/g;
const closePattern = /\\}/g;
const commaPattern = /\\,/g;
const periodPattern = /\\\./g;
const EXPANSION_MAX = 100_000;
// `EXPANSION_MAX` caps the *number* of expansions, but not their length. An
// input like `'{a,b}'.repeat(1500)` stays under that count - its output is
// truncated to 100k results - while making every result ~1500 characters
// long. The result set, and the intermediate arrays built while combining
// brace sets, then grow large enough to exhaust memory and crash the process
// (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of
// characters the accumulator may hold at any point, so memory stays flat no
// matter how many brace groups are chained. The limit sits well above any
// realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M
// characters) so legitimate input is unaffected.
const EXPANSION_MAX_LENGTH = 4_000_000;
function numeric(str) {
return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
}
function escapeBraces(str) {
return str
.replace(slashPattern, escSlash)
.replace(openPattern, escOpen)
.replace(closePattern, escClose)
.replace(commaPattern, escComma)
.replace(periodPattern, escPeriod);
}
function unescapeBraces(str) {
return str
.replace(escSlashPattern, '\\')
.replace(escOpenPattern, '{')
.replace(escClosePattern, '}')
.replace(escCommaPattern, ',')
.replace(escPeriodPattern, '.');
}
/**
* Basically just str.split(","), but handling cases
* where we have nested braced sections, which should be
* treated as individual members, like {a,{b,c},d}
*/
function parseCommaParts(str) {
if (!str) {
return [''];
}
const parts = [];
const m = balanced('{', '}', str);
if (!m) {
return str.split(',');
}
const { pre, body, post } = m;
const p = pre.split(',');
p[p.length - 1] += '{' + body + '}';
const postParts = parseCommaParts(post);
if (post.length) {
;
p[p.length - 1] += postParts.shift();
p.push.apply(p, postParts);
}
parts.push.apply(parts, p);
return parts;
}
function expand(str, options = {}) {
if (!str) {
return [];
}
const { max = EXPANSION_MAX, maxLength = EXPANSION_MAX_LENGTH } = options;
// I don't know why Bash 4.3 does this, but it does.
// Anything starting with {} will have the first two bytes preserved
// but *only* at the top level, so {},a}b will not expand to anything,
// but a{},b}c will be expanded to [a}c,abc].
// One could argue that this is a bug in Bash, but since the goal of
// this module is to match Bash's rules, we escape a leading {}
if (str.slice(0, 2) === '{}') {
str = '\\{\\}' + str.slice(2);
}
return expand_(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
}
function embrace(str) {
return '{' + str + '}';
}
function isPadded(el) {
return /^-?0\d/.test(el);
}
function lte(i, y) {
return i <= y;
}
function gte(i, y) {
return i >= y;
}
// Build `{ acc[a] + pre + values[v] }` for every combination, capping the
// number of results at `max` and the total number of characters at `maxLength`.
// This is the one place output grows, so bounding it here keeps the single
// accumulator - and therefore memory - flat regardless of how many brace groups
// are combined (CVE-2026-14257).
function combine(acc, pre, values, max, maxLength, dropEmpties) {
const out = [];
let length = 0;
for (let a = 0; a < acc.length; a++) {
for (let v = 0; v < values.length; v++) {
if (out.length >= max)
return out;
const expansion = acc[a] + pre + values[v];
// Bash drops empty results at the top level. Skip them before they count
// against `max`, so `max` bounds the number of *kept* results.
if (dropEmpties && !expansion)
continue;
if (length + expansion.length > maxLength)
return out;
out.push(expansion);
length += expansion.length;
}
}
return out;
}
// The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)
// sequence body.
function expandSequence(body, isAlphaSequence, max, maxLength) {
const n = body.split(/\.\./);
const N = [];
// A sequence body always splits into two or three parts, but the compiler
// can't know that.
/* c8 ignore start */
if (n[0] === undefined || n[1] === undefined) {
return N;
}
/* c8 ignore stop */
const x = numeric(n[0]);
const y = numeric(n[1]);
const width = Math.max(n[0].length, n[1].length);
let incr = n.length === 3 && n[2] !== undefined ?
Math.max(Math.abs(numeric(n[2])), 1)
: 1;
let test = lte;
const reverse = y < x;
if (reverse) {
incr *= -1;
test = gte;
}
const pad = n.some(isPadded);
let length = 0;
for (let i = x; test(i, y) && N.length < max; i += incr) {
let c;
if (isAlphaSequence) {
c = String.fromCharCode(i);
if (c === '\\') {
c = '';
}
}
else {
c = String(i);
if (pad) {
const need = width - c.length;
if (need > 0) {
const z = new Array(need + 1).join('0');
if (i < 0) {
c = '-' + z + c.slice(1);
}
else {
c = z + c;
}
}
}
}
if (length + c.length > maxLength)
break;
N.push(c);
length += c.length;
}
return N;
}
function expand_(str, max, maxLength, isTop) {
// Consume the string's top-level brace groups left to right, threading a
// running set of combined prefixes (`acc`). Expanding the tail iteratively -
// rather than recursing on `m.post` once per group - keeps the native stack
// depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no
// longer overflow the stack, and leaves a single accumulator whose size
// `maxLength` bounds directly (CVE-2026-14257).
let acc = [''];
// Bash drops empty results, but only when the *first* top-level group is a
// comma set - a sequence like `{a..\}` may legitimately yield ''. The drop
// is on the final strings, so it is applied to whichever `combine` produces
// them (the one with no brace set left in the tail).
let dropEmpties = false;
let firstGroup = true;
for (;;) {
const m = balanced('{', '}', str);
// No brace set left: the rest of the string is literal.
if (!m) {
return combine(acc, str, [''], max, maxLength, dropEmpties);
}
// no need to expand pre, since it is guaranteed to be free of brace-sets
const pre = m.pre;
if (/\$$/.test(pre)) {
acc = combine(acc, pre + '{' + m.body + '}', [''], max, maxLength, dropEmpties && !m.post.length);
firstGroup = false;
if (!m.post.length)
break;
str = m.post;
continue;
}
const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
const isSequence = isNumericSequence || isAlphaSequence;
const isOptions = m.body.indexOf(',') >= 0;
if (!isSequence && !isOptions) {
// {a},b}
if (m.post.match(/,(?!,).*\}/)) {
str = m.pre + '{' + m.body + escClose + m.post;
isTop = true;
continue;
}
// Nothing here expands, so the whole remaining string is literal.
return combine(acc, pre + '{' + m.body + '}' + m.post, [''], max, maxLength, dropEmpties);
}
if (firstGroup) {
dropEmpties = isTop && !isSequence;
firstGroup = false;
}
let values;
if (isSequence) {
values = expandSequence(m.body, isAlphaSequence, max, maxLength);
}
else {
let n = parseCommaParts(m.body);
if (n.length === 1 && n[0] !== undefined) {
// x{{a,b}}y ==> x{a}y x{b}y
n = expand_(n[0], max, maxLength, false).map(embrace);
//XXX is this necessary? Can't seem to hit it in tests.
/* c8 ignore start */
if (n.length === 1) {
acc = combine(acc, pre + n[0], [''], max, maxLength, dropEmpties && !m.post.length);
if (!m.post.length)
break;
str = m.post;
continue;
}
/* c8 ignore stop */
}
// Values that `combine` is going to drop as empty produce no result, so
// they must not count against `max` - otherwise `{a,,b}` with `max: 2`
// would stop at `['a', '']` and yield one result instead of two. Skipping
// them outright keeps `values` bounded while leaving `max` a bound on
// *kept* results.
let dropsEmpties = dropEmpties && !m.post.length && !pre;
for (let d = 0; dropsEmpties && d < acc.length; d++) {
if (acc[d]) {
dropsEmpties = false;
}
}
values = [];
let valuesLength = 0;
outer: for (let j = 0; j < n.length; j++) {
const expanded = expand_(n[j], max, maxLength, false);
for (let k = 0; k < expanded.length; k++) {
const v = expanded[k];
if (dropsEmpties && !v)
continue;
if (values.length >= max || valuesLength + v.length > maxLength) {
break outer;
}
values.push(v);
valuesLength += v.length;
}
}
}
acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);
if (!m.post.length)
break;
str = m.post;
}
return acc;
}
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/assert-valid-pattern.js
const MAX_PATTERN_LENGTH = 1024 * 64;
const assertValidPattern = (pattern) => {
if (typeof pattern !== 'string') {
throw new TypeError('invalid pattern');
}
if (pattern.length > MAX_PATTERN_LENGTH) {
throw new TypeError('pattern is too long');
}
};
//# sourceMappingURL=assert-valid-pattern.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/brace-expressions.js
// translate the various posix character classes into unicode properties
// this works across all unicode locales
// { <posix class>: [<translation>, /u flag required, negated]
const posixClasses = {
'[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true],
'[:alpha:]': ['\\p{L}\\p{Nl}', true],
'[:ascii:]': ['\\x' + '00-\\x' + '7f', false],
'[:blank:]': ['\\p{Zs}\\t', true],
'[:cntrl:]': ['\\p{Cc}', true],
'[:digit:]': ['\\p{Nd}', true],
'[:graph:]': ['\\p{Z}\\p{C}', true, true],
'[:lower:]': ['\\p{Ll}', true],
'[:print:]': ['\\p{C}', true],
'[:punct:]': ['\\p{P}', true],
'[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true],
'[:upper:]': ['\\p{Lu}', true],
'[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true],
'[:xdigit:]': ['A-Fa-f0-9', false],
};
// only need to escape a few things inside of brace expressions
// escapes: [ \ ] -
const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&');
// escape all regexp magic characters
const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
// everything has already been escaped, we just have to join
const rangesToString = (ranges) => ranges.join('');
// takes a glob string at a posix brace expression, and returns
// an equivalent regular expression source, and boolean indicating
// whether the /u flag needs to be applied, and the number of chars
// consumed to parse the character class.
// This also removes out of order ranges, and returns ($.) if the
// entire class just no good.
const parseClass = (glob, position) => {
const pos = position;
/* c8 ignore start */
if (glob.charAt(pos) !== '[') {
throw new Error('not in a brace expression');
}
/* c8 ignore stop */
const ranges = [];
const negs = [];
let i = pos + 1;
let sawStart = false;
let uflag = false;
let escaping = false;
let negate = false;
let endPos = pos;
let rangeStart = '';
WHILE: while (i < glob.length) {
const c = glob.charAt(i);
if ((c === '!' || c === '^') && i === pos + 1) {
negate = true;
i++;
continue;
}
if (c === ']' && sawStart && !escaping) {
endPos = i + 1;
break;
}
sawStart = true;
if (c === '\\') {
if (!escaping) {
escaping = true;
i++;
continue;
}
// escaped \ char, fall through and treat like normal char
}
if (c === '[' && !escaping) {
// either a posix class, a collation equivalent, or just a [
for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
if (glob.startsWith(cls, i)) {
// invalid, [a-[] is fine, but not [a-[:alpha]]
if (rangeStart) {
return ['$.', false, glob.length - pos, true];
}
i += cls.length;
if (neg)
negs.push(unip);
else
ranges.push(unip);
uflag = uflag || u;
continue WHILE;
}
}
}
// now it's just a normal character, effectively
escaping = false;
if (rangeStart) {
// throw this range away if it's not valid, but others
// can still match.
if (c > rangeStart) {
ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));
}
else if (c === rangeStart) {
ranges.push(braceEscape(c));
}
rangeStart = '';
i++;
continue;
}
// now might be the start of a range.
// can be either c-d or c-] or c<more...>] or c] at this point
if (glob.startsWith('-]', i + 1)) {
ranges.push(braceEscape(c + '-'));
i += 2;
continue;
}
if (glob.startsWith('-', i + 1)) {
rangeStart = c;
i += 2;
continue;
}
// not the start of a range, just a single character
ranges.push(braceEscape(c));
i++;
}
if (endPos < i) {
// didn't see the end of the class, not a valid class,
// but might still be valid as a literal match.
return ['', false, 0, false];
}
// if we got no ranges and no negates, then we have a range that
// cannot possibly match anything, and that poisons the whole glob
if (!ranges.length && !negs.length) {
return ['$.', false, glob.length - pos, true];
}
// if we got one positive range, and it's a single character, then that's
// not actually a magic pattern, it's just that one literal character.
// we should not treat that as "magic", we should just return the literal
// character. [_] is a perfectly valid way to escape glob magic chars.
if (negs.length === 0 &&
ranges.length === 1 &&
/^\\?.$/.test(ranges[0]) &&
!negate) {
const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
return [regexpEscape(r), false, endPos - pos, false];
}
const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';
const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';
const comb = ranges.length && negs.length ? '(' + sranges + '|' + snegs + ')'
: ranges.length ? sranges
: snegs;
return [comb, uflag, endPos - pos, true];
};
//# sourceMappingURL=brace-expressions.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/unescape.js
/**
* Un-escape a string that has been escaped with {@link escape}.
*
* If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then
* square-bracket escapes are removed, but not backslash escapes.
*
* For example, it will turn the string `'[*]'` into `*`, but it will not
* turn `'\\*'` into `'*'`, because `\` is a path separator in
* `windowsPathsNoEscape` mode.
*
* When `windowsPathsNoEscape` is not set, then both square-bracket escapes and
* backslash escapes are removed.
*
* Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
* or unescaped.
*
* When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be
* unescaped.
*/
const unescape_unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true, } = {}) => {
if (magicalBraces) {
return windowsPathsNoEscape ?
s.replace(/\[([^/\\])\]/g, '$1')
: s
.replace(/((?!\\).|^)\[([^/\\])\]/g, '$1$2')
.replace(/\\([^/])/g, '$1');
}
return windowsPathsNoEscape ?
s.replace(/\[([^/\\{}])\]/g, '$1')
: s
.replace(/((?!\\).|^)\[([^/\\{}])\]/g, '$1$2')
.replace(/\\([^/{}])/g, '$1');
};
//# sourceMappingURL=unescape.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/ast.js
// parse a single path portion
var _a;
const types = new Set(['!', '?', '+', '*', '@']);
const isExtglobType = (c) => types.has(c);
const isExtglobAST = (c) => isExtglobType(c.type);
// Map of which extglob types can adopt the children of a nested extglob
//
// anything but ! can adopt a matching type:
// +(a|+(b|c)|d) => +(a|b|c|d)
// *(a|*(b|c)|d) => *(a|b|c|d)
// @(a|@(b|c)|d) => @(a|b|c|d)
// ?(a|?(b|c)|d) => ?(a|b|c|d)
//
// * can adopt anything, because 0 or repetition is allowed
// *(a|?(b|c)|d) => *(a|b|c|d)
// *(a|+(b|c)|d) => *(a|b|c|d)
// *(a|@(b|c)|d) => *(a|b|c|d)
//
// + can adopt @, because 1 or repetition is allowed
// +(a|@(b|c)|d) => +(a|b|c|d)
//
// + and @ CANNOT adopt *, because 0 would be allowed
// +(a|*(b|c)|d) => would match "", on *(b|c)
// @(a|*(b|c)|d) => would match "", on *(b|c)
//
// + and @ CANNOT adopt ?, because 0 would be allowed
// +(a|?(b|c)|d) => would match "", on ?(b|c)
// @(a|?(b|c)|d) => would match "", on ?(b|c)
//
// ? can adopt @, because 0 or 1 is allowed
// ?(a|@(b|c)|d) => ?(a|b|c|d)
//
// ? and @ CANNOT adopt * or +, because >1 would be allowed
// ?(a|*(b|c)|d) => would match bbb on *(b|c)
// @(a|*(b|c)|d) => would match bbb on *(b|c)
// ?(a|+(b|c)|d) => would match bbb on +(b|c)
// @(a|+(b|c)|d) => would match bbb on +(b|c)
//
// ! CANNOT adopt ! (nothing else can either)
// !(a|!(b|c)|d) => !(a|b|c|d) would fail to match on b (not not b|c)
//
// ! can adopt @
// !(a|@(b|c)|d) => !(a|b|c|d)
//
// ! CANNOT adopt *
// !(a|*(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed
//
// ! CANNOT adopt +
// !(a|+(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed
//
// ! CANNOT adopt ?
// x!(a|?(b|c)|d) => x!(a|b|c|d) would fail to match "x"
const adoptionMap = new Map([
['!', ['@']],
['?', ['?', '@']],
['@', ['@']],
['*', ['*', '+', '?', '@']],
['+', ['+', '@']],
]);
// nested extglobs that can be adopted in, but with the addition of
// a blank '' element.
const adoptionWithSpaceMap = new Map([
['!', ['?']],
['@', ['?']],
['+', ['?', '*']],
]);
// union of the previous two maps
const adoptionAnyMap = new Map([
['!', ['?', '@']],
['?', ['?', '@']],
['@', ['?', '@']],
['*', ['*', '+', '?', '@']],
['+', ['+', '@', '?', '*']],
]);
// Extglobs that can take over their parent if they are the only child
// the key is parent, value maps child to resulting extglob parent type
// '@' is omitted because it's a special case. An `@` extglob with a single
// member can always be usurped by that subpattern.
const usurpMap = new Map([
['!', new Map([['!', '@']])],
[
'?',
new Map([
['*', '*'],
['+', '*'],
]),
],
[
'@',
new Map([
['!', '!'],
['?', '?'],
['@', '@'],
['*', '*'],
['+', '+'],
]),
],
[
'+',
new Map([
['?', '*'],
['*', '*'],
]),
],
]);
// Patterns that get prepended to bind to the start of either the
// entire string, or just a single path portion, to prevent dots
// and/or traversal patterns, when needed.
// Exts don't need the ^ or / bit, because the root binds that already.
const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))';
const startNoDot = '(?!\\.)';
// characters that indicate a start of pattern needs the "no dots" bit,
// because a dot *might* be matched. ( is not in the list, because in
// the case of a child extglob, it will handle the prevention itself.
const addPatternStart = new Set(['[', '.']);
// cases where traversal is A-OK, no dot prevention needed
const justDots = new Set(['..', '.']);
const reSpecials = new Set('().*{}+?[]^$\\!');
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
// any single thing other than /
const qmark = '[^/]';
// * => any number of characters
const star = qmark + '*?';
// use + when we need to ensure that *something* matches, because the * is
// the only thing in the path portion.
const starNoEmpty = qmark + '+?';
// remove the \ chars that we added if we end up doing a nonmagic compare
// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
let ID = 0;
class AST {
type;
#root;
#hasMagic;
#uflag = false;
#parts = [];
#parent;
#parentIndex;
#negs;
#filledNegs = false;
#options;
#toString;
// set to true if it's an extglob with no children
// (which really means one child of '')
#emptyExt = false;
id = ++ID;
get depth() {
return (this.#parent?.depth ?? -1) + 1;
}
[Symbol.for('nodejs.util.inspect.custom')]() {
return {
'@@type': 'AST',
id: this.id,
type: this.type,
root: this.#root.id,
parent: this.#parent?.id,
depth: this.depth,
partsLength: this.#parts.length,
parts: this.#parts,
};
}
constructor(type, parent, options = {}) {
this.type = type;
// extglobs are inherently magical
if (type)
this.#hasMagic = true;
this.#parent = parent;
this.#root = this.#parent ? this.#parent.#root : this;
this.#options = this.#root === this ? options : this.#root.#options;
this.#negs = this.#root === this ? [] : this.#root.#negs;
if (type === '!' && !this.#root.#filledNegs)
this.#negs.push(this);
this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
}
get hasMagic() {
/* c8 ignore start */
if (this.#hasMagic !== undefined)
return this.#hasMagic;
/* c8 ignore stop */
for (const p of this.#parts) {
if (typeof p === 'string')
continue;
if (p.type || p.hasMagic)
return (this.#hasMagic = true);
}
// note: will be undefined until we generate the regexp src and find out
return this.#hasMagic;
}
// reconstructs the pattern
toString() {
return (this.#toString !== undefined ? this.#toString
: !this.type ?
(this.#toString = this.#parts.map(p => String(p)).join(''))
: (this.#toString =
this.type +
'(' +
this.#parts.map(p => String(p)).join('|') +
')'));
}
#fillNegs() {
/* c8 ignore start */
if (this !== this.#root)
throw new Error('should only call on root');
if (this.#filledNegs)
return this;
/* c8 ignore stop */
// call toString() once to fill this out
this.toString();
this.#filledNegs = true;
let n;
while ((n = this.#negs.pop())) {
if (n.type !== '!')
continue;
// walk up the tree, appending everthing that comes AFTER parentIndex
let p = n;
let pp = p.#parent;
while (pp) {
for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
for (const part of n.#parts) {
/* c8 ignore start */
if (typeof part === 'string') {
throw new Error('string part in extglob AST??');
}
/* c8 ignore stop */
part.copyIn(pp.#parts[i]);
}
}
p = pp;
pp = p.#parent;
}
}
return this;
}
push(...parts) {
for (const p of parts) {
if (p === '')
continue;
/* c8 ignore start */
if (typeof p !== 'string' &&
!(p instanceof _a && p.#parent === this)) {
throw new Error('invalid part: ' + p);
}
/* c8 ignore stop */
this.#parts.push(p);
}
}
toJSON() {
const ret = this.type === null ?
this.#parts
.slice()
.map(p => (typeof p === 'string' ? p : p.toJSON()))
: [this.type, ...this.#parts.map(p => p.toJSON())];
if (this.isStart() && !this.type)
ret.unshift([]);
if (this.isEnd() &&
(this === this.#root ||
(this.#root.#filledNegs && this.#parent?.type === '!'))) {
ret.push({});
}
return ret;
}
isStart() {
if (this.#root === this)
return true;
// if (this.type) return !!this.#parent?.isStart()
if (!this.#parent?.isStart())
return false;
if (this.#parentIndex === 0)
return true;
// if everything AHEAD of this is a negation, then it's still the "start"
const p = this.#parent;
for (let i = 0; i < this.#parentIndex; i++) {
const pp = p.#parts[i];
if (!(pp instanceof _a && pp.type === '!')) {
return false;
}
}
return true;
}
isEnd() {
if (this.#root === this)
return true;
if (this.#parent?.type === '!')
return true;
if (!this.#parent?.isEnd())
return false;
if (!this.type)
return this.#parent?.isEnd();
// if not root, it'll always have a parent
/* c8 ignore start */
const pl = this.#parent ? this.#parent.#parts.length : 0;
/* c8 ignore stop */
return this.#parentIndex === pl - 1;
}
copyIn(part) {
if (typeof part === 'string')
this.push(part);
else
this.push(part.clone(this));
}
clone(parent) {
const c = new _a(this.type, parent);
for (const p of this.#parts) {
c.copyIn(p);
}
return c;
}
static #parseAST(str, ast, pos, opt, extDepth) {
const maxDepth = opt.maxExtglobRecursion ?? 2;
let escaping = false;
let inBrace = false;
let braceStart = -1;
let braceNeg = false;
if (ast.type === null) {
// outside of a extglob, append until we find a start
let i = pos;
let acc = '';
while (i < str.length) {
const c = str.charAt(i++);
// still accumulate escapes at this point, but we do ignore
// starts that are escaped
if (escaping || c === '\\') {
escaping = !escaping;
acc += c;
continue;
}
if (inBrace) {
if (i === braceStart + 1) {
if (c === '^' || c === '!') {
braceNeg = true;
}
}
else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
inBrace = false;
}
acc += c;
continue;
}
else if (c === '[') {
inBrace = true;
braceStart = i;
braceNeg = false;
acc += c;
continue;
}
// we don't have to check for adoption here, because that's
// done at the other recursion point.
const doRecurse = !opt.noext &&
isExtglobType(c) &&
str.charAt(i) === '(' &&
extDepth <= maxDepth;
if (doRecurse) {
ast.push(acc);
acc = '';
const ext = new _a(c, ast);
i = _a.#parseAST(str, ext, i, opt, extDepth + 1);
ast.push(ext);
continue;
}
acc += c;
}
ast.push(acc);
return i;
}
// some kind of extglob, pos is at the (
// find the next | or )
let i = pos + 1;
let part = new _a(null, ast);
const parts = [];
let acc = '';
while (i < str.length) {
const c = str.charAt(i++);
// still accumulate escapes at this point, but we do ignore
// starts that are escaped
if (escaping || c === '\\') {
escaping = !escaping;
acc += c;
continue;
}
if (inBrace) {
if (i === braceStart + 1) {
if (c === '^' || c === '!') {
braceNeg = true;
}
}
else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
inBrace = false;
}
acc += c;
continue;
}
else if (c === '[') {
inBrace = true;
braceStart = i;
braceNeg = false;
acc += c;
continue;
}
const doRecurse = !opt.noext &&
isExtglobType(c) &&
str.charAt(i) === '(' &&
/* c8 ignore start - the maxDepth is sufficient here */
(extDepth <= maxDepth || (ast && ast.#canAdoptType(c)));
/* c8 ignore stop */
if (doRecurse) {
const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;
part.push(acc);
acc = '';
const ext = new _a(c, part);
part.push(ext);
i = _a.#parseAST(str, ext, i, opt, extDepth + depthAdd);
continue;
}
if (c === '|') {
part.push(acc);
acc = '';
parts.push(part);
part = new _a(null, ast);
continue;
}
if (c === ')') {
if (acc === '' && ast.#parts.length === 0) {
ast.#emptyExt = true;
}
part.push(acc);
acc = '';
ast.push(...parts, part);
return i;
}
acc += c;
}
// unfinished extglob
// if we got here, it was a malformed extglob! not an extglob, but
// maybe something else in there.
ast.type = null;
ast.#hasMagic = undefined;
ast.#parts = [str.substring(pos - 1)];
return i;
}
#canAdoptWithSpace(child) {
return this.#canAdopt(child, adoptionWithSpaceMap);
}
#canAdopt(child, map = adoptionMap) {
if (!child ||
typeof child !== 'object' ||
child.type !== null ||
child.#parts.length !== 1 ||
this.type === null) {
return false;
}
const gc = child.#parts[0];
if (!gc || typeof gc !== 'object' || gc.type === null) {
return false;
}
return this.#canAdoptType(gc.type, map);
}
#canAdoptType(c, map = adoptionAnyMap) {
return !!map.get(this.type)?.includes(c);
}
#adoptWithSpace(child, index) {
const gc = child.#parts[0];
const blank = new _a(null, gc, this.options);
blank.#parts.push('');
gc.push(blank);
this.#adopt(child, index);
}
#adopt(child, index) {
const gc = child.#parts[0];
this.#parts.splice(index, 1, ...gc.#parts);
for (const p of gc.#parts) {
if (typeof p === 'object')
p.#parent = this;
}
this.#toString = undefined;
}
#canUsurpType(c) {
const m = usurpMap.get(this.type);
return !!m?.has(c);
}
#canUsurp(child) {
if (!child ||
typeof child !== 'object' ||
child.type !== null ||
child.#parts.length !== 1 ||
this.type === null ||
this.#parts.length !== 1) {
return false;
}
const gc = child.#parts[0];
if (!gc || typeof gc !== 'object' || gc.type === null) {
return false;
}
return this.#canUsurpType(gc.type);
}
#usurp(child) {
const m = usurpMap.get(this.type);
const gc = child.#parts[0];
const nt = m?.get(gc.type);
/* c8 ignore start - impossible */
if (!nt)
return false;
/* c8 ignore stop */
this.#parts = gc.#parts;
for (const p of this.#parts) {
if (typeof p === 'object') {
p.#parent = this;
}
}
this.type = nt;
this.#toString = undefined;
this.#emptyExt = false;
}
static fromGlob(pattern, options = {}) {
const ast = new _a(null, undefined, options);
_a.#parseAST(pattern, ast, 0, options, 0);
return ast;
}
// returns the regular expression if there's magic, or the unescaped
// string if not.
toMMPattern() {
// should only be called on root
/* c8 ignore start */
if (this !== this.#root)
return this.#root.toMMPattern();
/* c8 ignore stop */
const glob = this.toString();
const [re, body, hasMagic, uflag] = this.toRegExpSource();
// if we're in nocase mode, and not nocaseMagicOnly, then we do
// still need a regular expression if we have to case-insensitively
// match capital/lowercase characters.
const anyMagic = hasMagic ||
this.#hasMagic ||
(this.#options.nocase &&
!this.#options.nocaseMagicOnly &&
glob.toUpperCase() !== glob.toLowerCase());
if (!anyMagic) {
return body;
}
const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
return Object.assign(new RegExp(`^${re}$`, flags), {
_src: re,
_glob: glob,
});
}
get options() {
return this.#options;
}
// returns the string match, the regexp source, whether there's magic
// in the regexp (so a regular expression is required) and whether or
// not the uflag is needed for the regular expression (for posix classes)
// TODO: instead of injecting the start/end at this point, just return
// the BODY of the regexp, along with the start/end portions suitable
// for binding the start/end in either a joined full-path makeRe context
// (where we bind to (^|/), or a standalone matchPart context (where
// we bind to ^, and not /). Otherwise slashes get duped!
//
// In part-matching mode, the start is:
// - if not isStart: nothing
// - if traversal possible, but not allowed: ^(?!\.\.?$)
// - if dots allowed or not possible: ^
// - if dots possible and not allowed: ^(?!\.)
// end is:
// - if not isEnd(): nothing
// - else: $
//
// In full-path matching mode, we put the slash at the START of the
// pattern, so start is:
// - if first pattern: same as part-matching mode
// - if not isStart(): nothing
// - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
// - if dots allowed or not possible: /
// - if dots possible and not allowed: /(?!\.)
// end is:
// - if last pattern, same as part-matching mode
// - else nothing
//
// Always put the (?:$|/) on negated tails, though, because that has to be
// there to bind the end of the negated pattern portion, and it's easier to
// just stick it in now rather than try to inject it later in the middle of
// the pattern.
//
// We can just always return the same end, and leave it up to the caller
// to know whether it's going to be used joined or in parts.
// And, if the start is adjusted slightly, can do the same there:
// - if not isStart: nothing
// - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
// - if dots allowed or not possible: (?:/|^)
// - if dots possible and not allowed: (?:/|^)(?!\.)
//
// But it's better to have a simpler binding without a conditional, for
// performance, so probably better to return both start options.
//
// Then the caller just ignores the end if it's not the first pattern,
// and the start always gets applied.
//
// But that's always going to be $ if it's the ending pattern, or nothing,
// so the caller can just attach $ at the end of the pattern when building.
//
// So the todo is:
// - better detect what kind of start is needed
// - return both flavors of starting pattern
// - attach $ at the end of the pattern when creating the actual RegExp
//
// Ah, but wait, no, that all only applies to the root when the first pattern
// is not an extglob. If the first pattern IS an extglob, then we need all
// that dot prevention biz to live in the extglob portions, because eg
// +(*|.x*) can match .xy but not .yx.
//
// So, return the two flavors if it's #root and the first child is not an
// AST, otherwise leave it to the child AST to handle it, and there,
// use the (?:^|/) style of start binding.
//
// Even simplified further:
// - Since the start for a join is eg /(?!\.) and the start for a part
// is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
// or start or whatever) and prepend ^ or / at the Regexp construction.
toRegExpSource(allowDot) {
const dot = allowDot ?? !!this.#options.dot;
if (this.#root === this) {
this.#flatten();
this.#fillNegs();
}
if (!isExtglobAST(this)) {
const noEmpty = this.isStart() &&
this.isEnd() &&
!this.#parts.some(s => typeof s !== 'string');
const src = this.#parts
.map(p => {
const [re, _, hasMagic, uflag] = typeof p === 'string' ?
_a.#parseGlob(p, this.#hasMagic, noEmpty)
: p.toRegExpSource(allowDot);
this.#hasMagic = this.#hasMagic || hasMagic;
this.#uflag = this.#uflag || uflag;
return re;
})
.join('');
let start = '';
if (this.isStart()) {
if (typeof this.#parts[0] === 'string') {
// this is the string that will match the start of the pattern,
// so we need to protect against dots and such.
// '.' and '..' cannot match unless the pattern is that exactly,
// even if it starts with . or dot:true is set.
const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
if (!dotTravAllowed) {
const aps = addPatternStart;
// check if we have a possibility of matching . or ..,
// and prevent that.
const needNoTrav =
// dots are allowed, and the pattern starts with [ or .
(dot && aps.has(src.charAt(0))) ||
// the pattern starts with \., and then [ or .
(src.startsWith('\\.') && aps.has(src.charAt(2))) ||
// the pattern starts with \.\., and then [ or .
(src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
// no need to prevent dots if it can't match a dot, or if a
// sub-pattern will be preventing it anyway.
const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
start =
needNoTrav ? startNoTraversal
: needNoDot ? startNoDot
: '';
}
}
}
// append the "end of path portion" pattern to negation tails
let end = '';
if (this.isEnd() &&
this.#root.#filledNegs &&
this.#parent?.type === '!') {
end = '(?:$|\\/)';
}
const final = start + src + end;
return [
final,
unescape_unescape(src),
(this.#hasMagic = !!this.#hasMagic),
this.#uflag,
];
}
// We need to calculate the body *twice* if it's a repeat pattern
// at the start, once in nodot mode, then again in dot mode, so a
// pattern like *(?) can match 'x.y'
const repeated = this.type === '*' || this.type === '+';
// some kind of extglob
const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
let body = this.#partsToRegExp(dot);
if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
// invalid extglob, has to at least be *something* present, if it's
// the entire path portion.
const s = this.toString();
const me = this;
me.#parts = [s];
me.type = null;
me.#hasMagic = undefined;
return [s, unescape_unescape(this.toString()), false, false];
}
let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ?
''
: this.#partsToRegExp(true);
if (bodyDotAllowed === body) {
bodyDotAllowed = '';
}
if (bodyDotAllowed) {
body = `(?:${body})(?:${bodyDotAllowed})*?`;
}
// an empty !() is exactly equivalent to a starNoEmpty
let final = '';
if (this.type === '!' && this.#emptyExt) {
final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;
}
else {
const close = this.type === '!' ?
// !() must match something,but !(x) can match ''
'))' +
(this.isStart() && !dot && !allowDot ? startNoDot : '') +
star +
')'
: this.type === '@' ? ')'
: this.type === '?' ? ')?'
: this.type === '+' && bodyDotAllowed ? ')'
: this.type === '*' && bodyDotAllowed ? `)?`
: `)${this.type}`;
final = start + body + close;
}
return [
final,
unescape_unescape(body),
(this.#hasMagic = !!this.#hasMagic),
this.#uflag,
];
}
#flatten() {
if (!isExtglobAST(this)) {
for (const p of this.#parts) {
if (typeof p === 'object') {
p.#flatten();
}
}
}
else {
// do up to 10 passes to flatten as much as possible
let iterations = 0;
let done = false;
do {
done = true;
for (let i = 0; i < this.#parts.length; i++) {
const c = this.#parts[i];
if (typeof c === 'object') {
c.#flatten();
if (this.#canAdopt(c)) {
done = false;
this.#adopt(c, i);
}
else if (this.#canAdoptWithSpace(c)) {
done = false;
this.#adoptWithSpace(c, i);
}
else if (this.#canUsurp(c)) {
done = false;
this.#usurp(c);
}
}
}
} while (!done && ++iterations < 10);
}
this.#toString = undefined;
}
#partsToRegExp(dot) {
return this.#parts
.map(p => {
// extglob ASTs should only contain parent ASTs
/* c8 ignore start */
if (typeof p === 'string') {
throw new Error('string type in extglob ast??');
}
/* c8 ignore stop */
// can ignore hasMagic, because extglobs are already always magic
const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
this.#uflag = this.#uflag || uflag;
return re;
})
.filter(p => !(this.isStart() && this.isEnd()) || !!p)
.join('|');
}
static #parseGlob(glob, hasMagic, noEmpty = false) {
let escaping = false;
let re = '';
let uflag = false;
// multiple stars that aren't globstars coalesce into one *
let inStar = false;
for (let i = 0; i < glob.length; i++) {
const c = glob.charAt(i);
if (escaping) {
escaping = false;
re += (reSpecials.has(c) ? '\\' : '') + c;
continue;
}
if (c === '*') {
if (inStar)
continue;
inStar = true;
re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;
hasMagic = true;
continue;
}
else {
inStar = false;
}
if (c === '\\') {
if (i === glob.length - 1) {
re += '\\\\';
}
else {
escaping = true;
}
continue;
}
if (c === '[') {
const [src, needUflag, consumed, magic] = parseClass(glob, i);
if (consumed) {
re += src;
uflag = uflag || needUflag;
i += consumed - 1;
hasMagic = hasMagic || magic;
continue;
}
}
if (c === '?') {
re += qmark;
hasMagic = true;
continue;
}
re += regExpEscape(c);
}
return [re, unescape_unescape(glob), !!hasMagic, uflag];
}
}
_a = AST;
//# sourceMappingURL=ast.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/escape.js
/**
* Escape all magic characters in a glob pattern.
*
* If the {@link MinimatchOptions.windowsPathsNoEscape}
* option is used, then characters are escaped by wrapping in `[]`, because
* a magic character wrapped in a character class can only be satisfied by
* that exact character. In this mode, `\` is _not_ escaped, because it is
* not interpreted as a magic character, but instead as a path separator.
*
* If the {@link MinimatchOptions.magicalBraces} option is used,
* then braces (`{` and `}`) will be escaped.
*/
const escape_escape = (s, { windowsPathsNoEscape = false, magicalBraces = false, } = {}) => {
// don't need to escape +@! because we escape the parens
// that make those magic, and escaping ! as [!] isn't valid,
// because [!]] is a valid glob class meaning not ']'.
if (magicalBraces) {
return windowsPathsNoEscape ?
s.replace(/[?*()[\]{}]/g, '[$&]')
: s.replace(/[?*()[\]\\{}]/g, '\\$&');
}
return windowsPathsNoEscape ?
s.replace(/[?*()[\]]/g, '[$&]')
: s.replace(/[?*()[\]\\]/g, '\\$&');
};
//# sourceMappingURL=escape.js.map
;// CONCATENATED MODULE: ./node_modules/minimatch/dist/esm/index.js
const minimatch = (p, pattern, options = {}) => {
assertValidPattern(pattern);
// shortcut: comments match nothing.
if (!options.nocomment && pattern.charAt(0) === '#') {
return false;
}
return new Minimatch(pattern, options).match(p);
};
// Optimized checking for the most common glob patterns.
const starDotExtRE = /^\*+([^+@!?*[(]*)$/;
const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);
const starDotExtTestDot = (ext) => (f) => f.endsWith(ext);
const starDotExtTestNocase = (ext) => {
ext = ext.toLowerCase();
return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);
};
const starDotExtTestNocaseDot = (ext) => {
ext = ext.toLowerCase();
return (f) => f.toLowerCase().endsWith(ext);
};
const starDotStarRE = /^\*+\.\*+$/;
const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');
const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');
const dotStarRE = /^\.\*+$/;
const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');
const starRE = /^\*+$/;
const starTest = (f) => f.length !== 0 && !f.startsWith('.');
const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';
const qmarksRE = /^\?+([^+@!?*[(]*)?$/;
const qmarksTestNocase = ([$0, ext = '']) => {
const noext = qmarksTestNoExt([$0]);
if (!ext)
return noext;
ext = ext.toLowerCase();
return (f) => noext(f) && f.toLowerCase().endsWith(ext);
};
const qmarksTestNocaseDot = ([$0, ext = '']) => {
const noext = qmarksTestNoExtDot([$0]);
if (!ext)
return noext;
ext = ext.toLowerCase();
return (f) => noext(f) && f.toLowerCase().endsWith(ext);
};
const qmarksTestDot = ([$0, ext = '']) => {
const noext = qmarksTestNoExtDot([$0]);
return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
};
const qmarksTest = ([$0, ext = '']) => {
const noext = qmarksTestNoExt([$0]);
return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
};
const qmarksTestNoExt = ([$0]) => {
const len = $0.length;
return (f) => f.length === len && !f.startsWith('.');
};
const qmarksTestNoExtDot = ([$0]) => {
const len = $0.length;
return (f) => f.length === len && f !== '.' && f !== '..';
};
/* c8 ignore start */
const defaultPlatform = (typeof process === 'object' && process ?
(typeof process.env === 'object' &&
process.env &&
process.env.__MINIMATCH_TESTING_PLATFORM__) ||
process.platform
: 'posix');
const path = {
win32: { sep: '\\' },
posix: { sep: '/' },
};
/* c8 ignore stop */
const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;
minimatch.sep = sep;
const GLOBSTAR = Symbol('globstar **');
minimatch.GLOBSTAR = GLOBSTAR;
// any single thing other than /
// don't need to escape / when using new RegExp()
const esm_qmark = '[^/]';
// * => any number of characters
const esm_star = esm_qmark + '*?';
// ** when dots are allowed. Anything goes, except .. and .
// not (^ or / followed by one or two dots followed by $ or /),
// followed by anything, any number of times.
const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?';
// not a ^ or / followed by a dot,
// followed by anything, any number of times.
const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?';
const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);
minimatch.filter = filter;
const ext = (a, b = {}) => Object.assign({}, a, b);
const defaults = (def) => {
if (!def || typeof def !== 'object' || !Object.keys(def).length) {
return minimatch;
}
const orig = minimatch;
const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
return Object.assign(m, {
Minimatch: class Minimatch extends orig.Minimatch {
constructor(pattern, options = {}) {
super(pattern, ext(def, options));
}
static defaults(options) {
return orig.defaults(ext(def, options)).Minimatch;
}
},
AST: class AST extends orig.AST {
/* c8 ignore start */
constructor(type, parent, options = {}) {
super(type, parent, ext(def, options));
}
/* c8 ignore stop */
static fromGlob(pattern, options = {}) {
return orig.AST.fromGlob(pattern, ext(def, options));
}
},
unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
escape: (s, options = {}) => orig.escape(s, ext(def, options)),
filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
defaults: (options) => orig.defaults(ext(def, options)),
makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
sep: orig.sep,
GLOBSTAR: GLOBSTAR,
});
};
minimatch.defaults = defaults;
// Brace expansion:
// a{b,c}d -> abd acd
// a{b,}c -> abc ac
// a{0..3}d -> a0d a1d a2d a3d
// a{b,c{d,e}f}g -> abg acdfg acefg
// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
//
// Invalid sets are not expanded.
// a{2..}b -> a{2..}b
// a{b}c -> a{b}c
const braceExpand = (pattern, options = {}) => {
assertValidPattern(pattern);
// Thanks to Yeting Li <https://github.com/yetingli> for
// improving this regexp to avoid a ReDOS vulnerability.
if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
// shortcut. no need to expand.
return [pattern];
}
return expand(pattern, { max: options.braceExpandMax });
};
minimatch.braceExpand = braceExpand;
// parse a component of the expanded set.
// At this point, no pattern may contain "/" in it
// so we're going to return a 2d array, where each entry is the full
// pattern, split on '/', and then turned into a regular expression.
// A regexp is made at the end which joins each array with an
// escaped /, and another full one which joins each regexp with |.
//
// Following the lead of Bash 4.1, note that "**" only has special meaning
// when it is the *only* thing in a path portion. Otherwise, any series
// of * is equivalent to a single *. Globstar behavior is enabled by
// default, and can be disabled by setting options.noglobstar.
const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();
minimatch.makeRe = makeRe;
const match = (list, pattern, options = {}) => {
const mm = new Minimatch(pattern, options);
list = list.filter(f => mm.match(f));
if (mm.options.nonull && !list.length) {
list.push(pattern);
}
return list;
};
minimatch.match = match;
// replace stuff like \* with *
const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
const esm_regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
class Minimatch {
options;
set;
pattern;
windowsPathsNoEscape;
nonegate;
negate;
comment;
empty;
preserveMultipleSlashes;
partial;
globSet;
globParts;
nocase;
isWindows;
platform;
windowsNoMagicRoot;
maxGlobstarRecursion;
regexp;
constructor(pattern, options = {}) {
assertValidPattern(pattern);
options = options || {};
this.options = options;
this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;
this.pattern = pattern;
this.platform = options.platform || defaultPlatform;
this.isWindows = this.platform === 'win32';
// avoid the annoying deprecation flag lol
const awe = ('allowWindow' + 'sEscape');
this.windowsPathsNoEscape =
!!options.windowsPathsNoEscape || options[awe] === false;
if (this.windowsPathsNoEscape) {
this.pattern = this.pattern.replace(/\\/g, '/');
}
this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
this.regexp = null;
this.negate = false;
this.nonegate = !!options.nonegate;
this.comment = false;
this.empty = false;
this.partial = !!options.partial;
this.nocase = !!this.options.nocase;
this.windowsNoMagicRoot =
options.windowsNoMagicRoot !== undefined ?
options.windowsNoMagicRoot
: !!(this.isWindows && this.nocase);
this.globSet = [];
this.globParts = [];
this.set = [];
// make the set of regexps etc.
this.make();
}
hasMagic() {
if (this.options.magicalBraces && this.set.length > 1) {
return true;
}
for (const pattern of this.set) {
for (const part of pattern) {
if (typeof part !== 'string')
return true;
}
}
return false;
}
debug(..._) { }
make() {
const pattern = this.pattern;
const options = this.options;
// empty patterns and comments match nothing.
if (!options.nocomment && pattern.charAt(0) === '#') {
this.comment = true;
return;
}
if (!pattern) {
this.empty = true;
return;
}
// step 1: figure out negation, etc.
this.parseNegate();
// step 2: expand braces
this.globSet = [...new Set(this.braceExpand())];
if (options.debug) {
//oxlint-disable-next-line no-console
this.debug = (...args) => console.error(...args);
}
this.debug(this.pattern, this.globSet);
// step 3: now we have a set, so turn each one into a series of
// path-portion matching patterns.
// These will be regexps, except in the case of "**", which is
// set to the GLOBSTAR object for globstar behavior,
// and will not contain any / characters
//
// First, we preprocess to make the glob pattern sets a bit simpler
// and deduped. There are some perf-killing patterns that can cause
// problems with a glob walk, but we can simplify them down a bit.
const rawGlobParts = this.globSet.map(s => this.slashSplit(s));
this.globParts = this.preprocess(rawGlobParts);
this.debug(this.pattern, this.globParts);
// glob --> regexps
let set = this.globParts.map((s, _, __) => {
if (this.isWindows && this.windowsNoMagicRoot) {
// check if it's a drive or unc path.
const isUNC = s[0] === '' &&
s[1] === '' &&
(s[2] === '?' || !globMagic.test(s[2])) &&
!globMagic.test(s[3]);
const isDrive = /^[a-z]:/i.test(s[0]);
if (isUNC) {
return [
...s.slice(0, 4),
...s.slice(4).map(ss => this.parse(ss)),
];
}
else if (isDrive) {
return [s[0], ...s.slice(1).map(ss => this.parse(ss))];
}
}
return s.map(ss => this.parse(ss));
});
this.debug(this.pattern, set);
// filter out everything that didn't compile properly.
this.set = set.filter(s => s.indexOf(false) === -1);
// do not treat the ? in UNC paths as magic
if (this.isWindows) {
for (let i = 0; i < this.set.length; i++) {
const p = this.set[i];
if (p[0] === '' &&
p[1] === '' &&
this.globParts[i][2] === '?' &&
typeof p[3] === 'string' &&
/^[a-z]:$/i.test(p[3])) {
p[2] = '?';
}
}
}
this.debug(this.pattern, this.set);
}
// various transforms to equivalent pattern sets that are
// faster to process in a filesystem walk. The goal is to
// eliminate what we can, and push all ** patterns as far
// to the right as possible, even if it increases the number
// of patterns that we have to process.
preprocess(globParts) {
// if we're not in globstar mode, then turn ** into *
if (this.options.noglobstar) {
for (const partset of globParts) {
for (let j = 0; j < partset.length; j++) {
if (partset[j] === '**') {
partset[j] = '*';
}
}
}
}
const { optimizationLevel = 1 } = this.options;
if (optimizationLevel >= 2) {
// aggressive optimization for the purpose of fs walking
globParts = this.firstPhasePreProcess(globParts);
globParts = this.secondPhasePreProcess(globParts);
}
else if (optimizationLevel >= 1) {
// just basic optimizations to remove some .. parts
globParts = this.levelOneOptimize(globParts);
}
else {
// just collapse multiple ** portions into one
globParts = this.adjascentGlobstarOptimize(globParts);
}
return globParts;
}
// just get rid of adjascent ** portions
adjascentGlobstarOptimize(globParts) {
return globParts.map(parts => {
let gs = -1;
while (-1 !== (gs = parts.indexOf('**', gs + 1))) {
let i = gs;
while (parts[i + 1] === '**') {
i++;
}
if (i !== gs) {
parts.splice(gs, i - gs);
}
}
return parts;
});
}
// get rid of adjascent ** and resolve .. portions
levelOneOptimize(globParts) {
return globParts.map(parts => {
parts = parts.reduce((set, part) => {
const prev = set[set.length - 1];
if (part === '**' && prev === '**') {
return set;
}
if (part === '..') {
if (prev && prev !== '..' && prev !== '.' && prev !== '**') {
set.pop();
return set;
}
}
set.push(part);
return set;
}, []);
return parts.length === 0 ? [''] : parts;
});
}
levelTwoFileOptimize(parts) {
if (!Array.isArray(parts)) {
parts = this.slashSplit(parts);
}
let didSomething = false;
do {
didSomething = false;
// <pre>/<e>/<rest> -> <pre>/<rest>
if (!this.preserveMultipleSlashes) {
for (let i = 1; i < parts.length - 1; i++) {
const p = parts[i];
// don't squeeze out UNC patterns
if (i === 1 && p === '' && parts[0] === '')
continue;
if (p === '.' || p === '') {
didSomething = true;
parts.splice(i, 1);
i--;
}
}
if (parts[0] === '.' &&
parts.length === 2 &&
(parts[1] === '.' || parts[1] === '')) {
didSomething = true;
parts.pop();
}
}
// <pre>/<p>/../<rest> -> <pre>/<rest>
let dd = 0;
while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
const p = parts[dd - 1];
if (p &&
p !== '.' &&
p !== '..' &&
p !== '**' &&
!(this.isWindows && /^[a-z]:$/i.test(p))) {
didSomething = true;
parts.splice(dd - 1, 2);
dd -= 2;
}
}
} while (didSomething);
return parts.length === 0 ? [''] : parts;
}
// First phase: single-pattern processing
// <pre> is 1 or more portions
// <rest> is 1 or more portions
// <p> is any portion other than ., .., '', or **
// <e> is . or ''
//
// **/.. is *brutal* for filesystem walking performance, because
// it effectively resets the recursive walk each time it occurs,
// and ** cannot be reduced out by a .. pattern part like a regexp
// or most strings (other than .., ., and '') can be.
//
// <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}
// <pre>/<e>/<rest> -> <pre>/<rest>
// <pre>/<p>/../<rest> -> <pre>/<rest>
// **/**/<rest> -> **/<rest>
//
// **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow
// this WOULD be allowed if ** did follow symlinks, or * didn't
firstPhasePreProcess(globParts) {
let didSomething = false;
do {
didSomething = false;
// <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}
for (let parts of globParts) {
let gs = -1;
while (-1 !== (gs = parts.indexOf('**', gs + 1))) {
let gss = gs;
while (parts[gss + 1] === '**') {
// <pre>/**/**/<rest> -> <pre>/**/<rest>
gss++;
}
// eg, if gs is 2 and gss is 4, that means we have 3 **
// parts, and can remove 2 of them.
if (gss > gs) {
parts.splice(gs + 1, gss - gs);
}
let next = parts[gs + 1];
const p = parts[gs + 2];
const p2 = parts[gs + 3];
if (next !== '..')
continue;
if (!p ||
p === '.' ||
p === '..' ||
!p2 ||
p2 === '.' ||
p2 === '..') {
continue;
}
didSomething = true;
// edit parts in place, and push the new one
parts.splice(gs, 1);
const other = parts.slice(0);
other[gs] = '**';
globParts.push(other);
gs--;
}
// <pre>/<e>/<rest> -> <pre>/<rest>
if (!this.preserveMultipleSlashes) {
for (let i = 1; i < parts.length - 1; i++) {
const p = parts[i];
// don't squeeze out UNC patterns
if (i === 1 && p === '' && parts[0] === '')
continue;
if (p === '.' || p === '') {
didSomething = true;
parts.splice(i, 1);
i--;
}
}
if (parts[0] === '.' &&
parts.length === 2 &&
(parts[1] === '.' || parts[1] === '')) {
didSomething = true;
parts.pop();
}
}
// <pre>/<p>/../<rest> -> <pre>/<rest>
let dd = 0;
while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
const p = parts[dd - 1];
if (p && p !== '.' && p !== '..' && p !== '**') {
didSomething = true;
const needDot = dd === 1 && parts[dd + 1] === '**';
const splin = needDot ? ['.'] : [];
parts.splice(dd - 1, 2, ...splin);
if (parts.length === 0)
parts.push('');
dd -= 2;
}
}
}
} while (didSomething);
return globParts;
}
// second phase: multi-pattern dedupes
// {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>
// {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>
// {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>
//
// {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>
// ^-- not valid because ** doens't follow symlinks
secondPhasePreProcess(globParts) {
for (let i = 0; i < globParts.length - 1; i++) {
for (let j = i + 1; j < globParts.length; j++) {
const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
if (matched) {
globParts[i] = [];
globParts[j] = matched;
break;
}
}
}
return globParts.filter(gs => gs.length);
}
partsMatch(a, b, emptyGSMatch = false) {
let ai = 0;
let bi = 0;
let result = [];
let which = '';
while (ai < a.length && bi < b.length) {
if (a[ai] === b[bi]) {
result.push(which === 'b' ? b[bi] : a[ai]);
ai++;
bi++;
}
else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {
result.push(a[ai]);
ai++;
}
else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {
result.push(b[bi]);
bi++;
}
else if (a[ai] === '*' &&
b[bi] &&
(this.options.dot || !b[bi].startsWith('.')) &&
b[bi] !== '**') {
if (which === 'b')
return false;
which = 'a';
result.push(a[ai]);
ai++;
bi++;
}
else if (b[bi] === '*' &&
a[ai] &&
(this.options.dot || !a[ai].startsWith('.')) &&
a[ai] !== '**') {
if (which === 'a')
return false;
which = 'b';
result.push(b[bi]);
ai++;
bi++;
}
else {
return false;
}
}
// if we fall out of the loop, it means they two are identical
// as long as their lengths match
return a.length === b.length && result;
}
parseNegate() {
if (this.nonegate)
return;
const pattern = this.pattern;
let negate = false;
let negateOffset = 0;
for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {
negate = !negate;
negateOffset++;
}
if (negateOffset)
this.pattern = pattern.slice(negateOffset);
this.negate = negate;
}
// set partial to true to test if, for example,
// "/a/b" matches the start of "/*/b/*/d"
// Partial means, if you run out of file before you run
// out of pattern, then that's fine, as long as all
// the parts match.
matchOne(file, pattern, partial = false) {
let fileStartIndex = 0;
let patternStartIndex = 0;
// UNC paths like //?/X:/... can match X:/... and vice versa
// Drive letters in absolute drive or unc paths are always compared
// case-insensitively.
if (this.isWindows) {
const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);
const fileUNC = !fileDrive &&
file[0] === '' &&
file[1] === '' &&
file[2] === '?' &&
/^[a-z]:$/i.test(file[3]);
const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);
const patternUNC = !patternDrive &&
pattern[0] === '' &&
pattern[1] === '' &&
pattern[2] === '?' &&
typeof pattern[3] === 'string' &&
/^[a-z]:$/i.test(pattern[3]);
const fdi = fileUNC ? 3
: fileDrive ? 0
: undefined;
const pdi = patternUNC ? 3
: patternDrive ? 0
: undefined;
if (typeof fdi === 'number' && typeof pdi === 'number') {
const [fd, pd] = [
file[fdi],
pattern[pdi],
];
// start matching at the drive letter index of each
if (fd.toLowerCase() === pd.toLowerCase()) {
pattern[pdi] = fd;
patternStartIndex = pdi;
fileStartIndex = fdi;
}
}
}
// resolve and reduce . and .. portions in the file as well.
// don't need to do the second phase, because it's only one string[]
const { optimizationLevel = 1 } = this.options;
if (optimizationLevel >= 2) {
file = this.levelTwoFileOptimize(file);
}
if (pattern.includes(GLOBSTAR)) {
return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);
}
return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);
}
#matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {
// split the pattern into head, tail, and middle of ** delimited parts
const firstgs = pattern.indexOf(GLOBSTAR, patternIndex);
const lastgs = pattern.lastIndexOf(GLOBSTAR);
// split the pattern up into globstar-delimited sections
// the tail has to be at the end, and the others just have
// to be found in order from the head.
const [head, body, tail] = partial ?
[
pattern.slice(patternIndex, firstgs),
pattern.slice(firstgs + 1),
[],
]
: [
pattern.slice(patternIndex, firstgs),
pattern.slice(firstgs + 1, lastgs),
pattern.slice(lastgs + 1),
];
// check the head, from the current file/pattern index.
if (head.length) {
const fileHead = file.slice(fileIndex, fileIndex + head.length);
if (!this.#matchOne(fileHead, head, partial, 0, 0)) {
return false;
}
fileIndex += head.length;
patternIndex += head.length;
}
// now we know the head matches!
// if the last portion is not empty, it MUST match the end
// check the tail
let fileTailMatch = 0;
if (tail.length) {
// if head + tail > file, then we cannot possibly match
if (tail.length + fileIndex > file.length)
return false;
// try to match the tail
let tailStart = file.length - tail.length;
if (this.#matchOne(file, tail, partial, tailStart, 0)) {
fileTailMatch = tail.length;
}
else {
// affordance for stuff like a/**/* matching a/b/
// if the last file portion is '', and there's more to the pattern
// then try without the '' bit.
if (file[file.length - 1] !== '' ||
fileIndex + tail.length === file.length) {
return false;
}
tailStart--;
if (!this.#matchOne(file, tail, partial, tailStart, 0)) {
return false;
}
fileTailMatch = tail.length + 1;
}
}
// now we know the tail matches!
// the middle is zero or more portions wrapped in **, possibly
// containing more ** sections.
// so a/**/b/**/c/**/d has become **/b/**/c/**
// if it's empty, it means a/**/b, just verify we have no bad dots
// if there's no tail, so it ends on /**, then we must have *something*
// after the head, or it's not a matc
if (!body.length) {
let sawSome = !!fileTailMatch;
for (let i = fileIndex; i < file.length - fileTailMatch; i++) {
const f = String(file[i]);
sawSome = true;
if (f === '.' ||
f === '..' ||
(!this.options.dot && f.startsWith('.'))) {
return false;
}
}
// in partial mode, we just need to get past all file parts
return partial || sawSome;
}
// now we know that there's one or more body sections, which can
// be matched anywhere from the 0 index (because the head was pruned)
// through to the length-fileTailMatch index.
// split the body up into sections, and note the minimum index it can
// be found at (start with the length of all previous segments)
// [section, before, after]
const bodySegments = [[[], 0]];
let currentBody = bodySegments[0];
let nonGsParts = 0;
const nonGsPartsSums = [0];
for (const b of body) {
if (b === GLOBSTAR) {
nonGsPartsSums.push(nonGsParts);
currentBody = [[], 0];
bodySegments.push(currentBody);
}
else {
currentBody[0].push(b);
nonGsParts++;
}
}
let i = bodySegments.length - 1;
const fileLength = file.length - fileTailMatch;
for (const b of bodySegments) {
b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);
}
return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);
}
// return false for "nope, not matching"
// return null for "not matching, cannot keep trying"
#matchGlobStarBodySections(file,
// pattern section, last possible position for it
bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {
// take the first body segment, and walk from fileIndex to its "after"
// value at the end
// If it doesn't match at that position, we increment, until we hit
// that final possible position, and give up.
// If it does match, then advance and try to rest.
// If any of them fail we keep walking forward.
// this is still a bit recursively painful, but it's more constrained
// than previous implementations, because we never test something that
// can't possibly be a valid matching condition.
const bs = bodySegments[bodyIndex];
if (!bs) {
// just make sure that there's no bad dots
for (let i = fileIndex; i < file.length; i++) {
sawTail = true;
const f = file[i];
if (f === '.' ||
f === '..' ||
(!this.options.dot && f.startsWith('.'))) {
return false;
}
}
return sawTail;
}
// have a non-globstar body section to test
const [body, after] = bs;
while (fileIndex <= after) {
const m = this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0);
// if limit exceeded, no match. intentional false negative,
// acceptable break in correctness for security.
if (m && globStarDepth < this.maxGlobstarRecursion) {
// match! see if the rest match. if so, we're done!
const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);
if (sub !== false) {
return sub;
}
}
const f = file[fileIndex];
if (f === '.' ||
f === '..' ||
(!this.options.dot && f.startsWith('.'))) {
return false;
}
fileIndex++;
}
// walked off. no point continuing
return partial || null;
}
#matchOne(file, pattern, partial, fileIndex, patternIndex) {
let fi;
let pi;
let pl;
let fl;
for (fi = fileIndex,
pi = patternIndex,
fl = file.length,
pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
this.debug('matchOne loop');
let p = pattern[pi];
let f = file[fi];
this.debug(pattern, p, f);
// should be impossible.
// some invalid regexp stuff in the set.
/* c8 ignore start */
if (p === false || p === GLOBSTAR) {
return false;
}
/* c8 ignore stop */
// something other than **
// non-magic patterns just have to match exactly
// patterns with magic have been turned into regexps.
let hit;
if (typeof p === 'string') {
hit = f === p;
this.debug('string match', p, f, hit);
}
else {
hit = p.test(f);
this.debug('pattern match', p, f, hit);
}
if (!hit)
return false;
}
// Note: ending in / means that we'll get a final ""
// at the end of the pattern. This can only match a
// corresponding "" at the end of the file.
// If the file ends in /, then it can only match a
// a pattern that ends in /, unless the pattern just
// doesn't have any more for it. But, a/b/ should *not*
// match "a/b/*", even though "" matches against the
// [^/]*? pattern, except in partial mode, where it might
// simply not be reached yet.
// However, a/b/ should still satisfy a/*
// now either we fell off the end of the pattern, or we're done.
if (fi === fl && pi === pl) {
// ran out of pattern and filename at the same time.
// an exact hit!
return true;
}
else if (fi === fl) {
// ran out of file, but still had pattern left.
// this is ok if we're doing the match as part of
// a glob fs traversal.
return partial;
}
else if (pi === pl) {
// ran out of pattern, still have file left.
// this is only acceptable if we're on the very last
// empty segment of a file with a trailing slash.
// a/* should match a/b/
return fi === fl - 1 && file[fi] === '';
/* c8 ignore start */
}
else {
// should be unreachable.
throw new Error('wtf?');
}
/* c8 ignore stop */
}
braceExpand() {
return braceExpand(this.pattern, this.options);
}
parse(pattern) {
assertValidPattern(pattern);
const options = this.options;
// shortcuts
if (pattern === '**')
return GLOBSTAR;
if (pattern === '')
return '';
// far and away, the most common glob pattern parts are
// *, *.*, and *.<ext> Add a fast check method for those.
let m;
let fastTest = null;
if ((m = pattern.match(starRE))) {
fastTest = options.dot ? starTestDot : starTest;
}
else if ((m = pattern.match(starDotExtRE))) {
fastTest = (options.nocase ?
options.dot ?
starDotExtTestNocaseDot
: starDotExtTestNocase
: options.dot ? starDotExtTestDot
: starDotExtTest)(m[1]);
}
else if ((m = pattern.match(qmarksRE))) {
fastTest = (options.nocase ?
options.dot ?
qmarksTestNocaseDot
: qmarksTestNocase
: options.dot ? qmarksTestDot
: qmarksTest)(m);
}
else if ((m = pattern.match(starDotStarRE))) {
fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
}
else if ((m = pattern.match(dotStarRE))) {
fastTest = dotStarTest;
}
const re = AST.fromGlob(pattern, this.options).toMMPattern();
if (fastTest && typeof re === 'object') {
// Avoids overriding in frozen environments
Reflect.defineProperty(re, 'test', { value: fastTest });
}
return re;
}
makeRe() {
if (this.regexp || this.regexp === false)
return this.regexp;
// at this point, this.set is a 2d array of partial
// pattern strings, or "**".
//
// It's better to use .match(). This function shouldn't
// be used, really, but it's pretty convenient sometimes,
// when you just want to work with a regex.
const set = this.set;
if (!set.length) {
this.regexp = false;
return this.regexp;
}
const options = this.options;
const twoStar = options.noglobstar ? esm_star
: options.dot ? twoStarDot
: twoStarNoDot;
const flags = new Set(options.nocase ? ['i'] : []);
// regexpify non-globstar patterns
// if ** is only item, then we just do one twoStar
// if ** is first, and there are more, prepend (\/|twoStar\/)? to next
// if ** is last, append (\/twoStar|) to previous
// if ** is in the middle, append (\/|\/twoStar\/) to previous
// then filter out GLOBSTAR symbols
let re = set
.map(pattern => {
const pp = pattern.map(p => {
if (p instanceof RegExp) {
for (const f of p.flags.split(''))
flags.add(f);
}
return (typeof p === 'string' ? esm_regExpEscape(p)
: p === GLOBSTAR ? GLOBSTAR
: p._src);
});
pp.forEach((p, i) => {
const next = pp[i + 1];
const prev = pp[i - 1];
if (p !== GLOBSTAR || prev === GLOBSTAR) {
return;
}
if (prev === undefined) {
if (next !== undefined && next !== GLOBSTAR) {
pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next;
}
else {
pp[i] = twoStar;
}
}
else if (next === undefined) {
pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + ')?';
}
else if (next !== GLOBSTAR) {
pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next;
pp[i + 1] = GLOBSTAR;
}
});
const filtered = pp.filter(p => p !== GLOBSTAR);
// For partial matches, we need to make the pattern match
// any prefix of the full path. We do this by generating
// alternative patterns that match progressively longer prefixes.
if (this.partial && filtered.length >= 1) {
const prefixes = [];
for (let i = 1; i <= filtered.length; i++) {
prefixes.push(filtered.slice(0, i).join('/'));
}
return '(?:' + prefixes.join('|') + ')';
}
return filtered.join('/');
})
.join('|');
// need to wrap in parens if we had more than one thing with |,
// otherwise only the first will be anchored to ^ and the last to $
const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
// must match entire pattern
// ending in a * or ** will make it less strict.
re = '^' + open + re + close + '$';
// In partial mode, '/' should always match as it's a valid prefix for any pattern
if (this.partial) {
re = '^(?:\\/|' + open + re.slice(1, -1) + close + ')$';
}
// can match anything, as long as it's not this.
if (this.negate)
re = '^(?!' + re + ').+$';
try {
this.regexp = new RegExp(re, [...flags].join(''));
/* c8 ignore start */
}
catch {
// should be impossible
this.regexp = false;
}
/* c8 ignore stop */
return this.regexp;
}
slashSplit(p) {
// if p starts with // on windows, we preserve that
// so that UNC paths aren't broken. Otherwise, any number of
// / characters are coalesced into one, unless
// preserveMultipleSlashes is set to true.
if (this.preserveMultipleSlashes) {
return p.split('/');
}
else if (this.isWindows && /^\/\/[^/]+/.test(p)) {
// add an extra '' for the one we lose
return ['', ...p.split(/\/+/)];
}
else {
return p.split(/\/+/);
}
}
match(f, partial = this.partial) {
this.debug('match', f, this.pattern);
// short-circuit in the case of busted things.
// comments, etc.
if (this.comment) {
return false;
}
if (this.empty) {
return f === '';
}
if (f === '/' && partial) {
return true;
}
const options = this.options;
// windows: need to use /, not \
if (this.isWindows) {
f = f.split('\\').join('/');
}
// treat the test path as a set of pathparts.
const ff = this.slashSplit(f);
this.debug(this.pattern, 'split', ff);
// just ONE of the pattern sets in this.set needs to match
// in order for it to be valid. If negating, then just one
// match means that we have failed.
// Either way, return on the first hit.
const set = this.set;
this.debug(this.pattern, 'set', set);
// Find the basename of the path by looking for the last non-empty segment
let filename = ff[ff.length - 1];
if (!filename) {
for (let i = ff.length - 2; !filename && i >= 0; i--) {
filename = ff[i];
}
}
for (const pattern of set) {
let file = ff;
if (options.matchBase && pattern.length === 1) {
file = [filename];
}
const hit = this.matchOne(file, pattern, partial);
if (hit) {
if (options.flipNegate) {
return true;
}
return !this.negate;
}
}
// didn't get any hits. this is success if it's a negative
// pattern, failure otherwise.
if (options.flipNegate) {
return false;
}
return this.negate;
}
static defaults(def) {
return minimatch.defaults(def).Minimatch;
}
}
/* c8 ignore start */
/* c8 ignore stop */
minimatch.AST = AST;
minimatch.Minimatch = Minimatch;
minimatch.escape = escape_escape;
minimatch.unescape = unescape_unescape;
//# sourceMappingURL=index.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-path.js
const internal_path_IS_WINDOWS = process.platform === 'win32';
/**
* Helper class for parsing paths into segments
*/
class Path {
/**
* Constructs a Path
* @param itemPath Path or array of segments
*/
constructor(itemPath) {
this.segments = [];
// String
if (typeof itemPath === 'string') {
external_assert_(itemPath, `Parameter 'itemPath' must not be empty`);
// Normalize slashes and trim unnecessary trailing slash
itemPath = safeTrimTrailingSeparator(itemPath);
// Not rooted
if (!hasRoot(itemPath)) {
this.segments = itemPath.split(external_path_.sep);
}
// Rooted
else {
// Add all segments, while not at the root
let remaining = itemPath;
let dir = dirname(remaining);
while (dir !== remaining) {
// Add the segment
const basename = external_path_.basename(remaining);
this.segments.unshift(basename);
// Truncate the last segment
remaining = dir;
dir = dirname(remaining);
}
// Remainder is the root
this.segments.unshift(remaining);
}
}
// Array
else {
// Must not be empty
external_assert_(itemPath.length > 0, `Parameter 'itemPath' must not be an empty array`);
// Each segment
for (let i = 0; i < itemPath.length; i++) {
let segment = itemPath[i];
// Must not be empty
external_assert_(segment, `Parameter 'itemPath' must not contain any empty segments`);
// Normalize slashes
segment = normalizeSeparators(itemPath[i]);
// Root segment
if (i === 0 && hasRoot(segment)) {
segment = safeTrimTrailingSeparator(segment);
external_assert_(segment === dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`);
this.segments.push(segment);
}
// All other segments
else {
// Must not contain slash
external_assert_(!segment.includes(external_path_.sep), `Parameter 'itemPath' contains unexpected path separators`);
this.segments.push(segment);
}
}
}
}
/**
* Converts the path to it's string representation
*/
toString() {
// First segment
let result = this.segments[0];
// All others
let skipSlash = result.endsWith(external_path_.sep) || (internal_path_IS_WINDOWS && /^[A-Z]:$/i.test(result));
for (let i = 1; i < this.segments.length; i++) {
if (skipSlash) {
skipSlash = false;
}
else {
result += external_path_.sep;
}
result += this.segments[i];
}
return result;
}
}
//# sourceMappingURL=internal-path.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-pattern.js
const internal_pattern_IS_WINDOWS = process.platform === 'win32';
class Pattern {
constructor(patternOrNegate, isImplicitPattern = false, segments, homedir) {
/**
* Indicates whether matches should be excluded from the result set
*/
this.negate = false;
// Pattern overload
let pattern;
if (typeof patternOrNegate === 'string') {
pattern = patternOrNegate.trim();
}
// Segments overload
else {
// Convert to pattern
segments = segments || [];
external_assert_(segments.length, `Parameter 'segments' must not empty`);
const root = Pattern.getLiteral(segments[0]);
external_assert_(root && hasAbsoluteRoot(root), `Parameter 'segments' first element must be a root path`);
pattern = new Path(segments).toString().trim();
if (patternOrNegate) {
pattern = `!${pattern}`;
}
}
// Negate
while (pattern.startsWith('!')) {
this.negate = !this.negate;
pattern = pattern.substr(1).trim();
}
// Normalize slashes and ensures absolute root
pattern = Pattern.fixupPattern(pattern, homedir);
// Segments
this.segments = new Path(pattern).segments;
// Trailing slash indicates the pattern should only match directories, not regular files
this.trailingSeparator = normalizeSeparators(pattern)
.endsWith(external_path_.sep);
pattern = safeTrimTrailingSeparator(pattern);
// Search path (literal path prior to the first glob segment)
let foundGlob = false;
const searchSegments = this.segments
.map(x => Pattern.getLiteral(x))
.filter(x => !foundGlob && !(foundGlob = x === ''));
this.searchPath = new Path(searchSegments).toString();
// Root RegExp (required when determining partial match)
this.rootRegExp = new RegExp(Pattern.regExpEscape(searchSegments[0]), internal_pattern_IS_WINDOWS ? 'i' : '');
this.isImplicitPattern = isImplicitPattern;
// Create minimatch
const minimatchOptions = {
dot: true,
nobrace: true,
nocase: internal_pattern_IS_WINDOWS,
nocomment: true,
noext: true,
nonegate: true
};
pattern = internal_pattern_IS_WINDOWS ? pattern.replace(/\\/g, '/') : pattern;
this.minimatch = new Minimatch(pattern, minimatchOptions);
}
/**
* Matches the pattern against the specified path
*/
match(itemPath) {
// Last segment is globstar?
if (this.segments[this.segments.length - 1] === '**') {
// Normalize slashes
itemPath = normalizeSeparators(itemPath);
// Append a trailing slash. Otherwise Minimatch will not match the directory immediately
// preceding the globstar. For example, given the pattern `/foo/**`, Minimatch returns
// false for `/foo` but returns true for `/foo/`. Append a trailing slash to handle that quirk.
if (!itemPath.endsWith(external_path_.sep) && this.isImplicitPattern === false) {
// Note, this is safe because the constructor ensures the pattern has an absolute root.
// For example, formats like C: and C:foo on Windows are resolved to an absolute root.
itemPath = `${itemPath}${external_path_.sep}`;
}
}
else {
// Normalize slashes and trim unnecessary trailing slash
itemPath = safeTrimTrailingSeparator(itemPath);
}
// Match
if (this.minimatch.match(itemPath)) {
return this.trailingSeparator ? MatchKind.Directory : MatchKind.All;
}
return MatchKind.None;
}
/**
* Indicates whether the pattern may match descendants of the specified path
*/
partialMatch(itemPath) {
// Normalize slashes and trim unnecessary trailing slash
itemPath = safeTrimTrailingSeparator(itemPath);
// matchOne does not handle root path correctly
if (dirname(itemPath) === itemPath) {
return this.rootRegExp.test(itemPath);
}
return this.minimatch.matchOne(itemPath.split(internal_pattern_IS_WINDOWS ? /\\+/ : /\/+/), this.minimatch.set[0], true);
}
/**
* Escapes glob patterns within a path
*/
static globEscape(s) {
return (internal_pattern_IS_WINDOWS ? s : s.replace(/\\/g, '\\\\')) // escape '\' on Linux/macOS
.replace(/(\[)(?=[^/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment
.replace(/\?/g, '[?]') // escape '?'
.replace(/\*/g, '[*]'); // escape '*'
}
/**
* Normalizes slashes and ensures absolute root
*/
static fixupPattern(pattern, homedir) {
// Empty
external_assert_(pattern, 'pattern cannot be empty');
// Must not contain `.` segment, unless first segment
// Must not contain `..` segment
const literalSegments = new Path(pattern).segments.map(x => Pattern.getLiteral(x));
external_assert_(literalSegments.every((x, i) => (x !== '.' || i === 0) && x !== '..'), `Invalid pattern '${pattern}'. Relative pathing '.' and '..' is not allowed.`);
// Must not contain globs in root, e.g. Windows UNC path \\foo\b*r
external_assert_(!hasRoot(pattern) || literalSegments[0], `Invalid pattern '${pattern}'. Root segment must not contain globs.`);
// Normalize slashes
pattern = normalizeSeparators(pattern);
// Replace leading `.` segment
if (pattern === '.' || pattern.startsWith(`.${external_path_.sep}`)) {
pattern = Pattern.globEscape(process.cwd()) + pattern.substr(1);
}
// Replace leading `~` segment
else if (pattern === '~' || pattern.startsWith(`~${external_path_.sep}`)) {
homedir = homedir || external_os_.homedir();
external_assert_(homedir, 'Unable to determine HOME directory');
external_assert_(hasAbsoluteRoot(homedir), `Expected HOME directory to be a rooted path. Actual '${homedir}'`);
pattern = Pattern.globEscape(homedir) + pattern.substr(1);
}
// Replace relative drive root, e.g. pattern is C: or C:foo
else if (internal_pattern_IS_WINDOWS &&
(pattern.match(/^[A-Z]:$/i) || pattern.match(/^[A-Z]:[^\\]/i))) {
let root = ensureAbsoluteRoot('C:\\dummy-root', pattern.substr(0, 2));
if (pattern.length > 2 && !root.endsWith('\\')) {
root += '\\';
}
pattern = Pattern.globEscape(root) + pattern.substr(2);
}
// Replace relative root, e.g. pattern is \ or \foo
else if (internal_pattern_IS_WINDOWS && (pattern === '\\' || pattern.match(/^\\[^\\]/))) {
let root = ensureAbsoluteRoot('C:\\dummy-root', '\\');
if (!root.endsWith('\\')) {
root += '\\';
}
pattern = Pattern.globEscape(root) + pattern.substr(1);
}
// Otherwise ensure absolute root
else {
pattern = ensureAbsoluteRoot(Pattern.globEscape(process.cwd()), pattern);
}
return normalizeSeparators(pattern);
}
/**
* Attempts to unescape a pattern segment to create a literal path segment.
* Otherwise returns empty string.
*/
static getLiteral(segment) {
let literal = '';
for (let i = 0; i < segment.length; i++) {
const c = segment[i];
// Escape
if (c === '\\' && !internal_pattern_IS_WINDOWS && i + 1 < segment.length) {
literal += segment[++i];
continue;
}
// Wildcard
else if (c === '*' || c === '?') {
return '';
}
// Character set
else if (c === '[' && i + 1 < segment.length) {
let set = '';
let closed = -1;
for (let i2 = i + 1; i2 < segment.length; i2++) {
const c2 = segment[i2];
// Escape
if (c2 === '\\' && !internal_pattern_IS_WINDOWS && i2 + 1 < segment.length) {
set += segment[++i2];
continue;
}
// Closed
else if (c2 === ']') {
closed = i2;
break;
}
// Otherwise
else {
set += c2;
}
}
// Closed?
if (closed >= 0) {
// Cannot convert
if (set.length > 1) {
return '';
}
// Convert to literal
if (set) {
literal += set;
i = closed;
continue;
}
}
// Otherwise fall thru
}
// Append
literal += c;
}
return literal;
}
/**
* Escapes regexp special characters
* https://javascript.info/regexp-escaping
*/
static regExpEscape(s) {
return s.replace(/[[\\^$.|?*+()]/g, '\\$&');
}
}
//# sourceMappingURL=internal-pattern.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-search-state.js
class SearchState {
constructor(path, level) {
this.path = path;
this.level = level;
}
}
//# sourceMappingURL=internal-search-state.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-globber.js
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __asyncValues = (undefined && undefined.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
var __await = (undefined && undefined.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
var __asyncGenerator = (undefined && undefined.__asyncGenerator) || function (thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
};
const internal_globber_IS_WINDOWS = process.platform === 'win32';
class DefaultGlobber {
constructor(options) {
this.patterns = [];
this.searchPaths = [];
this.options = getOptions(options);
}
getSearchPaths() {
// Return a copy
return this.searchPaths.slice();
}
glob() {
return __awaiter(this, void 0, void 0, function* () {
var _a, e_1, _b, _c;
const result = [];
try {
for (var _d = true, _e = __asyncValues(this.globGenerator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
_c = _f.value;
_d = false;
const itemPath = _c;
result.push(itemPath);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
}
finally { if (e_1) throw e_1.error; }
}
return result;
});
}
globGenerator() {
return __asyncGenerator(this, arguments, function* globGenerator_1() {
// Fill in defaults options
const options = getOptions(this.options);
// Implicit descendants?
const patterns = [];
for (const pattern of this.patterns) {
patterns.push(pattern);
if (options.implicitDescendants &&
(pattern.trailingSeparator ||
pattern.segments[pattern.segments.length - 1] !== '**')) {
patterns.push(new Pattern(pattern.negate, true, pattern.segments.concat('**')));
}
}
// Push the search paths
const stack = [];
for (const searchPath of getSearchPaths(patterns)) {
core/* debug */.Yz(`Search path '${searchPath}'`);
// Exists?
try {
// Intentionally using lstat. Detection for broken symlink
// will be performed later (if following symlinks).
yield __await(external_fs_.promises.lstat(searchPath));
}
catch (err) {
if (err.code === 'ENOENT') {
continue;
}
throw err;
}
stack.unshift(new SearchState(searchPath, 1));
}
// Search
const traversalChain = []; // used to detect cycles
while (stack.length) {
// Pop
const item = stack.pop();
// Match?
const match = internal_pattern_helper_match(patterns, item.path);
const partialMatch = !!match || internal_pattern_helper_partialMatch(patterns, item.path);
if (!match && !partialMatch) {
continue;
}
// Stat
const stats = yield __await(DefaultGlobber.stat(item, options, traversalChain)
// Broken symlink, or symlink cycle detected, or no longer exists
);
// Broken symlink, or symlink cycle detected, or no longer exists
if (!stats) {
continue;
}
// Hidden file or directory?
if (options.excludeHiddenFiles && external_path_.basename(item.path).match(/^\./)) {
continue;
}
// Directory
if (stats.isDirectory()) {
// Matched
if (match & MatchKind.Directory && options.matchDirectories) {
yield yield __await(item.path);
}
// Descend?
else if (!partialMatch) {
continue;
}
// Push the child items in reverse
const childLevel = item.level + 1;
const childItems = (yield __await(external_fs_.promises.readdir(item.path))).map(x => new SearchState(external_path_.join(item.path, x), childLevel));
stack.push(...childItems.reverse());
}
// File
else if (match & MatchKind.File) {
yield yield __await(item.path);
}
}
});
}
/**
* Constructs a DefaultGlobber
*/
static create(patterns, options) {
return __awaiter(this, void 0, void 0, function* () {
const result = new DefaultGlobber(options);
if (internal_globber_IS_WINDOWS) {
patterns = patterns.replace(/\r\n/g, '\n');
patterns = patterns.replace(/\r/g, '\n');
}
const lines = patterns.split('\n').map(x => x.trim());
for (const line of lines) {
// Empty or comment
if (!line || line.startsWith('#')) {
continue;
}
// Pattern
else {
result.patterns.push(new Pattern(line));
}
}
result.searchPaths.push(...getSearchPaths(result.patterns));
return result;
});
}
static stat(item, options, traversalChain) {
return __awaiter(this, void 0, void 0, function* () {
// Note:
// `stat` returns info about the target of a symlink (or symlink chain)
// `lstat` returns info about a symlink itself
let stats;
if (options.followSymbolicLinks) {
try {
// Use `stat` (following symlinks)
stats = yield external_fs_.promises.stat(item.path);
}
catch (err) {
if (err.code === 'ENOENT') {
if (options.omitBrokenSymbolicLinks) {
core/* debug */.Yz(`Broken symlink '${item.path}'`);
return undefined;
}
throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`);
}
throw err;
}
}
else {
// Use `lstat` (not following symlinks)
stats = yield external_fs_.promises.lstat(item.path);
}
// Note, isDirectory() returns false for the lstat of a symlink
if (stats.isDirectory() && options.followSymbolicLinks) {
// Get the realpath
const realPath = yield external_fs_.promises.realpath(item.path);
// Fixup the traversal chain to match the item level
while (traversalChain.length >= item.level) {
traversalChain.pop();
}
// Test for a cycle
if (traversalChain.some((x) => x === realPath)) {
core/* debug */.Yz(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`);
return undefined;
}
// Update the traversal chain
traversalChain.push(realPath);
}
return stats;
});
}
}
//# sourceMappingURL=internal-globber.js.map
// EXTERNAL MODULE: external "crypto"
var external_crypto_ = __webpack_require__(6982);
// EXTERNAL MODULE: external "stream"
var external_stream_ = __webpack_require__(2203);
// EXTERNAL MODULE: external "util"
var external_util_ = __webpack_require__(9023);
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/internal-hash-files.js
var internal_hash_files_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var internal_hash_files_asyncValues = (undefined && undefined.__asyncValues) || function (o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
};
function hashFiles(globber_1, currentWorkspace_1) {
return internal_hash_files_awaiter(this, arguments, void 0, function* (globber, currentWorkspace, verbose = false) {
var _a, e_1, _b, _c;
var _d;
const writeDelegate = verbose ? core/* info */.pq : core/* debug */.Yz;
let hasMatch = false;
const githubWorkspace = currentWorkspace
? currentWorkspace
: ((_d = process.env['GITHUB_WORKSPACE']) !== null && _d !== void 0 ? _d : process.cwd());
const result = external_crypto_.createHash('sha256');
let count = 0;
try {
for (var _e = true, _f = internal_hash_files_asyncValues(globber.globGenerator()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {
_c = _g.value;
_e = false;
const file = _c;
writeDelegate(file);
if (!file.startsWith(`${githubWorkspace}${external_path_.sep}`)) {
writeDelegate(`Ignore '${file}' since it is not under GITHUB_WORKSPACE.`);
continue;
}
if (external_fs_.statSync(file).isDirectory()) {
writeDelegate(`Skip directory '${file}'.`);
continue;
}
const hash = external_crypto_.createHash('sha256');
const pipeline = external_util_.promisify(external_stream_.pipeline);
yield pipeline(external_fs_.createReadStream(file), hash);
result.write(hash.digest());
count++;
if (!hasMatch) {
hasMatch = true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);
}
finally { if (e_1) throw e_1.error; }
}
result.end();
if (hasMatch) {
writeDelegate(`Found ${count} files to hash.`);
return result.digest('hex');
}
else {
writeDelegate(`No matches found for glob`);
return '';
}
});
}
//# sourceMappingURL=internal-hash-files.js.map
;// CONCATENATED MODULE: ./node_modules/@actions/glob/lib/glob.js
var glob_awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/**
* Constructs a globber
*
* @param patterns Patterns separated by newlines
* @param options Glob options
*/
function create(patterns, options) {
return glob_awaiter(this, void 0, void 0, function* () {
return yield DefaultGlobber.create(patterns, options);
});
}
/**
* Computes the sha256 hash of a glob
*
* @param patterns Patterns separated by newlines
* @param currentWorkspace Workspace used when matching files
* @param options Glob options
* @param verbose Enables verbose logging
*/
function glob_hashFiles(patterns_1) {
return glob_awaiter(this, arguments, void 0, function* (patterns, currentWorkspace = '', options, verbose = false) {
let followSymbolicLinks = true;
if (options && typeof options.followSymbolicLinks === 'boolean') {
followSymbolicLinks = options.followSymbolicLinks;
}
const globber = yield create(patterns, { followSymbolicLinks });
return hashFiles(globber, currentWorkspace, verbose);
});
}
//# sourceMappingURL=glob.js.map
/***/ }),
/***/ 4012:
/***/ ((module) => {
module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"6.2.0","description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","type":"module","main":"lib/cache.js","types":"lib/cache.d.ts","exports":{".":{"types":"./lib/cache.d.ts","import":"./lib/cache.js"}},"directories":{"lib":"lib","test":"__tests__"},"files":["lib","!.DS_Store"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/cache"},"scripts":{"audit-moderate":"npm install && npm audit --json --audit-level=moderate > audit.json","test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc && cp src/internal/shared/package-version.cjs lib/internal/shared/"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^3.0.1","@actions/exec":"^3.0.0","@actions/glob":"^0.6.1","@actions/http-client":"^4.0.1","@actions/io":"^3.0.2","@azure/core-rest-pipeline":"^1.23.0","@azure/storage-blob":"^12.31.0","@protobuf-ts/runtime-rpc":"^2.11.1","semver":"^7.7.4"},"devDependencies":{"@protobuf-ts/plugin":"^2.11.1","@types/node":"^25.6.0","@types/semver":"^7.7.1","typescript":"^5.9.3"},"overrides":{"uri-js":"npm:uri-js-replace@^1.0.1","node-fetch":"^3.3.2"}}');
/***/ })
};