mirror of
https://code.forgejo.org/actions/cache
synced 2025-03-09 09:34:28 +00:00
48813 lines
No EOL
1.8 MiB
48813 lines
No EOL
1.8 MiB
module.exports =
|
|
/******/ (function(modules, runtime) { // webpackBootstrap
|
|
/******/ "use strict";
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ __webpack_require__.ab = __dirname + "/";
|
|
/******/
|
|
/******/ // the startup function
|
|
/******/ function startup() {
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(778);
|
|
/******/ };
|
|
/******/
|
|
/******/ // run startup
|
|
/******/ return startup();
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ 1:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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 });
|
|
const childProcess = __webpack_require__(129);
|
|
const path = __webpack_require__(622);
|
|
const util_1 = __webpack_require__(669);
|
|
const ioUtil = __webpack_require__(672);
|
|
const exec = util_1.promisify(childProcess.exec);
|
|
/**
|
|
* Copies a file or folder.
|
|
* Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
|
|
*
|
|
* @param source source path
|
|
* @param dest destination path
|
|
* @param options optional. See CopyOptions.
|
|
*/
|
|
function cp(source, dest, options = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const { force, recursive } = readCopyOptions(options);
|
|
const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
|
|
// Dest is an existing file, but not forcing
|
|
if (destStat && destStat.isFile() && !force) {
|
|
return;
|
|
}
|
|
// If dest is an existing directory, should copy inside.
|
|
const newDest = destStat && destStat.isDirectory()
|
|
? path.join(dest, path.basename(source))
|
|
: dest;
|
|
if (!(yield ioUtil.exists(source))) {
|
|
throw new Error(`no such file or directory: ${source}`);
|
|
}
|
|
const sourceStat = yield ioUtil.stat(source);
|
|
if (sourceStat.isDirectory()) {
|
|
if (!recursive) {
|
|
throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
|
|
}
|
|
else {
|
|
yield cpDirRecursive(source, newDest, 0, force);
|
|
}
|
|
}
|
|
else {
|
|
if (path.relative(source, newDest) === '') {
|
|
// a file cannot be copied to itself
|
|
throw new Error(`'${newDest}' and '${source}' are the same file`);
|
|
}
|
|
yield copyFile(source, newDest, force);
|
|
}
|
|
});
|
|
}
|
|
exports.cp = cp;
|
|
/**
|
|
* Moves a path.
|
|
*
|
|
* @param source source path
|
|
* @param dest destination path
|
|
* @param options optional. See MoveOptions.
|
|
*/
|
|
function mv(source, dest, options = {}) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (yield ioUtil.exists(dest)) {
|
|
let destExists = true;
|
|
if (yield ioUtil.isDirectory(dest)) {
|
|
// If dest is directory copy src into dest
|
|
dest = path.join(dest, path.basename(source));
|
|
destExists = yield ioUtil.exists(dest);
|
|
}
|
|
if (destExists) {
|
|
if (options.force == null || options.force) {
|
|
yield rmRF(dest);
|
|
}
|
|
else {
|
|
throw new Error('Destination already exists');
|
|
}
|
|
}
|
|
}
|
|
yield mkdirP(path.dirname(dest));
|
|
yield ioUtil.rename(source, dest);
|
|
});
|
|
}
|
|
exports.mv = mv;
|
|
/**
|
|
* Remove a path recursively with force
|
|
*
|
|
* @param inputPath path to remove
|
|
*/
|
|
function rmRF(inputPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (ioUtil.IS_WINDOWS) {
|
|
// Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
|
|
// program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
|
|
try {
|
|
if (yield ioUtil.isDirectory(inputPath, true)) {
|
|
yield exec(`rd /s /q "${inputPath}"`);
|
|
}
|
|
else {
|
|
yield exec(`del /f /a "${inputPath}"`);
|
|
}
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
}
|
|
// Shelling out fails to remove a symlink folder with missing source, this unlink catches that
|
|
try {
|
|
yield ioUtil.unlink(inputPath);
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
}
|
|
}
|
|
else {
|
|
let isDir = false;
|
|
try {
|
|
isDir = yield ioUtil.isDirectory(inputPath);
|
|
}
|
|
catch (err) {
|
|
// if you try to delete a file that doesn't exist, desired result is achieved
|
|
// other errors are valid
|
|
if (err.code !== 'ENOENT')
|
|
throw err;
|
|
return;
|
|
}
|
|
if (isDir) {
|
|
yield exec(`rm -rf "${inputPath}"`);
|
|
}
|
|
else {
|
|
yield ioUtil.unlink(inputPath);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
exports.rmRF = rmRF;
|
|
/**
|
|
* Make a directory. Creates the full path with folders in between
|
|
* Will throw if it fails
|
|
*
|
|
* @param fsPath path to create
|
|
* @returns Promise<void>
|
|
*/
|
|
function mkdirP(fsPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
yield ioUtil.mkdirP(fsPath);
|
|
});
|
|
}
|
|
exports.mkdirP = mkdirP;
|
|
/**
|
|
* Returns path of a tool had the tool actually been invoked. Resolves via paths.
|
|
* If you check and the tool does not exist, it will throw.
|
|
*
|
|
* @param tool name of the tool
|
|
* @param check whether to check if tool exists
|
|
* @returns Promise<string> path to tool
|
|
*/
|
|
function which(tool, check) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (!tool) {
|
|
throw new Error("parameter 'tool' is required");
|
|
}
|
|
// recursive when check=true
|
|
if (check) {
|
|
const result = yield which(tool, false);
|
|
if (!result) {
|
|
if (ioUtil.IS_WINDOWS) {
|
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
|
|
}
|
|
else {
|
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
// build the list of extensions to try
|
|
const extensions = [];
|
|
if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
|
|
for (const extension of process.env.PATHEXT.split(path.delimiter)) {
|
|
if (extension) {
|
|
extensions.push(extension);
|
|
}
|
|
}
|
|
}
|
|
// if it's rooted, return it if exists. otherwise return empty.
|
|
if (ioUtil.isRooted(tool)) {
|
|
const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
|
|
if (filePath) {
|
|
return filePath;
|
|
}
|
|
return '';
|
|
}
|
|
// if any path separators, return empty
|
|
if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
|
|
return '';
|
|
}
|
|
// build the list of directories
|
|
//
|
|
// Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
|
|
// it feels like we should not do this. Checking the current directory seems like more of a use
|
|
// case of a shell, and the which() function exposed by the toolkit should strive for consistency
|
|
// across platforms.
|
|
const directories = [];
|
|
if (process.env.PATH) {
|
|
for (const p of process.env.PATH.split(path.delimiter)) {
|
|
if (p) {
|
|
directories.push(p);
|
|
}
|
|
}
|
|
}
|
|
// return the first match
|
|
for (const directory of directories) {
|
|
const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
|
|
if (filePath) {
|
|
return filePath;
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
catch (err) {
|
|
throw new Error(`which failed with message ${err.message}`);
|
|
}
|
|
});
|
|
}
|
|
exports.which = which;
|
|
function readCopyOptions(options) {
|
|
const force = options.force == null ? true : options.force;
|
|
const recursive = Boolean(options.recursive);
|
|
return { force, recursive };
|
|
}
|
|
function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Ensure there is not a run away recursive copy
|
|
if (currentDepth >= 255)
|
|
return;
|
|
currentDepth++;
|
|
yield mkdirP(destDir);
|
|
const files = yield ioUtil.readdir(sourceDir);
|
|
for (const fileName of files) {
|
|
const srcFile = `${sourceDir}/${fileName}`;
|
|
const destFile = `${destDir}/${fileName}`;
|
|
const srcFileStat = yield ioUtil.lstat(srcFile);
|
|
if (srcFileStat.isDirectory()) {
|
|
// Recurse
|
|
yield cpDirRecursive(srcFile, destFile, currentDepth, force);
|
|
}
|
|
else {
|
|
yield copyFile(srcFile, destFile, force);
|
|
}
|
|
}
|
|
// Change the mode for the newly created directory
|
|
yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
|
|
});
|
|
}
|
|
// Buffered file copy
|
|
function copyFile(srcFile, destFile, force) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
|
|
// unlink/re-link it
|
|
try {
|
|
yield ioUtil.lstat(destFile);
|
|
yield ioUtil.unlink(destFile);
|
|
}
|
|
catch (e) {
|
|
// Try to override file permission
|
|
if (e.code === 'EPERM') {
|
|
yield ioUtil.chmod(destFile, '0666');
|
|
yield ioUtil.unlink(destFile);
|
|
}
|
|
// other errors = it doesn't exist, no work to do
|
|
}
|
|
// Copy over symlink
|
|
const symlinkFull = yield ioUtil.readlink(srcFile);
|
|
yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
|
|
}
|
|
else if (!(yield ioUtil.exists(destFile)) || force) {
|
|
yield ioUtil.copyFile(srcFile, destFile);
|
|
}
|
|
});
|
|
}
|
|
//# sourceMappingURL=io.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 2:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* Default getter which just does a simple property access. Returns
|
|
* undefined if the key is not set.
|
|
*
|
|
* @param carrier
|
|
* @param key
|
|
*/
|
|
function defaultGetter(carrier, key) {
|
|
return carrier[key];
|
|
}
|
|
exports.defaultGetter = defaultGetter;
|
|
//# sourceMappingURL=getter.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 9:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const os = __importStar(__webpack_require__(87));
|
|
const events = __importStar(__webpack_require__(614));
|
|
const child = __importStar(__webpack_require__(129));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const io = __importStar(__webpack_require__(1));
|
|
const ioUtil = __importStar(__webpack_require__(672));
|
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
/*
|
|
* Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
|
|
*/
|
|
class ToolRunner extends events.EventEmitter {
|
|
constructor(toolPath, args, options) {
|
|
super();
|
|
if (!toolPath) {
|
|
throw new Error("Parameter 'toolPath' cannot be null or empty.");
|
|
}
|
|
this.toolPath = toolPath;
|
|
this.args = args || [];
|
|
this.options = options || {};
|
|
}
|
|
_debug(message) {
|
|
if (this.options.listeners && this.options.listeners.debug) {
|
|
this.options.listeners.debug(message);
|
|
}
|
|
}
|
|
_getCommandString(options, noPrefix) {
|
|
const toolPath = this._getSpawnFileName();
|
|
const args = this._getSpawnArgs(options);
|
|
let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
|
|
if (IS_WINDOWS) {
|
|
// Windows + cmd file
|
|
if (this._isCmdFile()) {
|
|
cmd += toolPath;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
// Windows + verbatim
|
|
else if (options.windowsVerbatimArguments) {
|
|
cmd += `"${toolPath}"`;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
// Windows (regular)
|
|
else {
|
|
cmd += this._windowsQuoteCmdArg(toolPath);
|
|
for (const a of args) {
|
|
cmd += ` ${this._windowsQuoteCmdArg(a)}`;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// OSX/Linux - this can likely be improved with some form of quoting.
|
|
// creating processes on Unix is fundamentally different than Windows.
|
|
// on Unix, execvp() takes an arg array.
|
|
cmd += toolPath;
|
|
for (const a of args) {
|
|
cmd += ` ${a}`;
|
|
}
|
|
}
|
|
return cmd;
|
|
}
|
|
_processLineBuffer(data, strBuffer, onLine) {
|
|
try {
|
|
let s = strBuffer + data.toString();
|
|
let n = s.indexOf(os.EOL);
|
|
while (n > -1) {
|
|
const line = s.substring(0, n);
|
|
onLine(line);
|
|
// the rest of the string ...
|
|
s = s.substring(n + os.EOL.length);
|
|
n = s.indexOf(os.EOL);
|
|
}
|
|
strBuffer = s;
|
|
}
|
|
catch (err) {
|
|
// streaming lines to console is best effort. Don't fail a build.
|
|
this._debug(`error processing line. Failed with error ${err}`);
|
|
}
|
|
}
|
|
_getSpawnFileName() {
|
|
if (IS_WINDOWS) {
|
|
if (this._isCmdFile()) {
|
|
return process.env['COMSPEC'] || 'cmd.exe';
|
|
}
|
|
}
|
|
return this.toolPath;
|
|
}
|
|
_getSpawnArgs(options) {
|
|
if (IS_WINDOWS) {
|
|
if (this._isCmdFile()) {
|
|
let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
|
|
for (const a of this.args) {
|
|
argline += ' ';
|
|
argline += options.windowsVerbatimArguments
|
|
? a
|
|
: this._windowsQuoteCmdArg(a);
|
|
}
|
|
argline += '"';
|
|
return [argline];
|
|
}
|
|
}
|
|
return this.args;
|
|
}
|
|
_endsWith(str, end) {
|
|
return str.endsWith(end);
|
|
}
|
|
_isCmdFile() {
|
|
const upperToolPath = this.toolPath.toUpperCase();
|
|
return (this._endsWith(upperToolPath, '.CMD') ||
|
|
this._endsWith(upperToolPath, '.BAT'));
|
|
}
|
|
_windowsQuoteCmdArg(arg) {
|
|
// for .exe, apply the normal quoting rules that libuv applies
|
|
if (!this._isCmdFile()) {
|
|
return this._uvQuoteCmdArg(arg);
|
|
}
|
|
// otherwise apply quoting rules specific to the cmd.exe command line parser.
|
|
// the libuv rules are generic and are not designed specifically for cmd.exe
|
|
// command line parser.
|
|
//
|
|
// for a detailed description of the cmd.exe command line parser, refer to
|
|
// http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
|
|
// need quotes for empty arg
|
|
if (!arg) {
|
|
return '""';
|
|
}
|
|
// determine whether the arg needs to be quoted
|
|
const cmdSpecialChars = [
|
|
' ',
|
|
'\t',
|
|
'&',
|
|
'(',
|
|
')',
|
|
'[',
|
|
']',
|
|
'{',
|
|
'}',
|
|
'^',
|
|
'=',
|
|
';',
|
|
'!',
|
|
"'",
|
|
'+',
|
|
',',
|
|
'`',
|
|
'~',
|
|
'|',
|
|
'<',
|
|
'>',
|
|
'"'
|
|
];
|
|
let needsQuotes = false;
|
|
for (const char of arg) {
|
|
if (cmdSpecialChars.some(x => x === char)) {
|
|
needsQuotes = true;
|
|
break;
|
|
}
|
|
}
|
|
// short-circuit if quotes not needed
|
|
if (!needsQuotes) {
|
|
return arg;
|
|
}
|
|
// the following quoting rules are very similar to the rules that by libuv applies.
|
|
//
|
|
// 1) wrap the string in quotes
|
|
//
|
|
// 2) double-up quotes - i.e. " => ""
|
|
//
|
|
// this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
|
|
// doesn't work well with a cmd.exe command line.
|
|
//
|
|
// note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
|
|
// for example, the command line:
|
|
// foo.exe "myarg:""my val"""
|
|
// is parsed by a .NET console app into an arg array:
|
|
// [ "myarg:\"my val\"" ]
|
|
// which is the same end result when applying libuv quoting rules. although the actual
|
|
// command line from libuv quoting rules would look like:
|
|
// foo.exe "myarg:\"my val\""
|
|
//
|
|
// 3) double-up slashes that precede a quote,
|
|
// e.g. hello \world => "hello \world"
|
|
// hello\"world => "hello\\""world"
|
|
// hello\\"world => "hello\\\\""world"
|
|
// hello world\ => "hello world\\"
|
|
//
|
|
// technically this is not required for a cmd.exe command line, or the batch argument parser.
|
|
// the reasons for including this as a .cmd quoting rule are:
|
|
//
|
|
// a) this is optimized for the scenario where the argument is passed from the .cmd file to an
|
|
// external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
|
|
//
|
|
// b) it's what we've been doing previously (by deferring to node default behavior) and we
|
|
// haven't heard any complaints about that aspect.
|
|
//
|
|
// note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
|
|
// escaped when used on the command line directly - even though within a .cmd file % can be escaped
|
|
// by using %%.
|
|
//
|
|
// the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
|
|
// the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
|
|
//
|
|
// one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
|
|
// often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
|
|
// variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
|
|
// to an external program.
|
|
//
|
|
// an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
|
|
// % can be escaped within a .cmd file.
|
|
let reverse = '"';
|
|
let quoteHit = true;
|
|
for (let i = arg.length; i > 0; i--) {
|
|
// walk the string in reverse
|
|
reverse += arg[i - 1];
|
|
if (quoteHit && arg[i - 1] === '\\') {
|
|
reverse += '\\'; // double the slash
|
|
}
|
|
else if (arg[i - 1] === '"') {
|
|
quoteHit = true;
|
|
reverse += '"'; // double the quote
|
|
}
|
|
else {
|
|
quoteHit = false;
|
|
}
|
|
}
|
|
reverse += '"';
|
|
return reverse
|
|
.split('')
|
|
.reverse()
|
|
.join('');
|
|
}
|
|
_uvQuoteCmdArg(arg) {
|
|
// Tool runner wraps child_process.spawn() and needs to apply the same quoting as
|
|
// Node in certain cases where the undocumented spawn option windowsVerbatimArguments
|
|
// is used.
|
|
//
|
|
// Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
|
|
// see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
|
|
// pasting copyright notice from Node within this function:
|
|
//
|
|
// Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to
|
|
// deal in the Software without restriction, including without limitation the
|
|
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
// sell copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
// IN THE SOFTWARE.
|
|
if (!arg) {
|
|
// Need double quotation for empty argument
|
|
return '""';
|
|
}
|
|
if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
|
|
// No quotation needed
|
|
return arg;
|
|
}
|
|
if (!arg.includes('"') && !arg.includes('\\')) {
|
|
// No embedded double quotes or backslashes, so I can just wrap
|
|
// quote marks around the whole thing.
|
|
return `"${arg}"`;
|
|
}
|
|
// Expected input/output:
|
|
// input : hello"world
|
|
// output: "hello\"world"
|
|
// input : hello""world
|
|
// output: "hello\"\"world"
|
|
// input : hello\world
|
|
// output: hello\world
|
|
// input : hello\\world
|
|
// output: hello\\world
|
|
// input : hello\"world
|
|
// output: "hello\\\"world"
|
|
// input : hello\\"world
|
|
// output: "hello\\\\\"world"
|
|
// input : hello world\
|
|
// output: "hello world\\" - note the comment in libuv actually reads "hello world\"
|
|
// but it appears the comment is wrong, it should be "hello world\\"
|
|
let reverse = '"';
|
|
let quoteHit = true;
|
|
for (let i = arg.length; i > 0; i--) {
|
|
// walk the string in reverse
|
|
reverse += arg[i - 1];
|
|
if (quoteHit && arg[i - 1] === '\\') {
|
|
reverse += '\\';
|
|
}
|
|
else if (arg[i - 1] === '"') {
|
|
quoteHit = true;
|
|
reverse += '\\';
|
|
}
|
|
else {
|
|
quoteHit = false;
|
|
}
|
|
}
|
|
reverse += '"';
|
|
return reverse
|
|
.split('')
|
|
.reverse()
|
|
.join('');
|
|
}
|
|
_cloneExecOptions(options) {
|
|
options = options || {};
|
|
const result = {
|
|
cwd: options.cwd || process.cwd(),
|
|
env: options.env || process.env,
|
|
silent: options.silent || false,
|
|
windowsVerbatimArguments: options.windowsVerbatimArguments || false,
|
|
failOnStdErr: options.failOnStdErr || false,
|
|
ignoreReturnCode: options.ignoreReturnCode || false,
|
|
delay: options.delay || 10000
|
|
};
|
|
result.outStream = options.outStream || process.stdout;
|
|
result.errStream = options.errStream || process.stderr;
|
|
return result;
|
|
}
|
|
_getSpawnOptions(options, toolPath) {
|
|
options = options || {};
|
|
const result = {};
|
|
result.cwd = options.cwd;
|
|
result.env = options.env;
|
|
result['windowsVerbatimArguments'] =
|
|
options.windowsVerbatimArguments || this._isCmdFile();
|
|
if (options.windowsVerbatimArguments) {
|
|
result.argv0 = `"${toolPath}"`;
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Exec a tool.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with return code
|
|
*
|
|
* @param tool path to tool to exec
|
|
* @param options optional exec options. See ExecOptions
|
|
* @returns number
|
|
*/
|
|
exec() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// root the tool path if it is unrooted and contains relative pathing
|
|
if (!ioUtil.isRooted(this.toolPath) &&
|
|
(this.toolPath.includes('/') ||
|
|
(IS_WINDOWS && this.toolPath.includes('\\')))) {
|
|
// prefer options.cwd if it is specified, however options.cwd may also need to be rooted
|
|
this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
|
|
}
|
|
// if the tool is only a file name, then resolve it from the PATH
|
|
// otherwise verify it exists (add extension on Windows if necessary)
|
|
this.toolPath = yield io.which(this.toolPath, true);
|
|
return new Promise((resolve, reject) => {
|
|
this._debug(`exec tool: ${this.toolPath}`);
|
|
this._debug('arguments:');
|
|
for (const arg of this.args) {
|
|
this._debug(` ${arg}`);
|
|
}
|
|
const optionsNonNull = this._cloneExecOptions(this.options);
|
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
|
optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
|
|
}
|
|
const state = new ExecState(optionsNonNull, this.toolPath);
|
|
state.on('debug', (message) => {
|
|
this._debug(message);
|
|
});
|
|
const fileName = this._getSpawnFileName();
|
|
const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
|
|
const stdbuffer = '';
|
|
if (cp.stdout) {
|
|
cp.stdout.on('data', (data) => {
|
|
if (this.options.listeners && this.options.listeners.stdout) {
|
|
this.options.listeners.stdout(data);
|
|
}
|
|
if (!optionsNonNull.silent && optionsNonNull.outStream) {
|
|
optionsNonNull.outStream.write(data);
|
|
}
|
|
this._processLineBuffer(data, stdbuffer, (line) => {
|
|
if (this.options.listeners && this.options.listeners.stdline) {
|
|
this.options.listeners.stdline(line);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
const errbuffer = '';
|
|
if (cp.stderr) {
|
|
cp.stderr.on('data', (data) => {
|
|
state.processStderr = true;
|
|
if (this.options.listeners && this.options.listeners.stderr) {
|
|
this.options.listeners.stderr(data);
|
|
}
|
|
if (!optionsNonNull.silent &&
|
|
optionsNonNull.errStream &&
|
|
optionsNonNull.outStream) {
|
|
const s = optionsNonNull.failOnStdErr
|
|
? optionsNonNull.errStream
|
|
: optionsNonNull.outStream;
|
|
s.write(data);
|
|
}
|
|
this._processLineBuffer(data, errbuffer, (line) => {
|
|
if (this.options.listeners && this.options.listeners.errline) {
|
|
this.options.listeners.errline(line);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
cp.on('error', (err) => {
|
|
state.processError = err.message;
|
|
state.processExited = true;
|
|
state.processClosed = true;
|
|
state.CheckComplete();
|
|
});
|
|
cp.on('exit', (code) => {
|
|
state.processExitCode = code;
|
|
state.processExited = true;
|
|
this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
|
|
state.CheckComplete();
|
|
});
|
|
cp.on('close', (code) => {
|
|
state.processExitCode = code;
|
|
state.processExited = true;
|
|
state.processClosed = true;
|
|
this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
|
|
state.CheckComplete();
|
|
});
|
|
state.on('done', (error, exitCode) => {
|
|
if (stdbuffer.length > 0) {
|
|
this.emit('stdline', stdbuffer);
|
|
}
|
|
if (errbuffer.length > 0) {
|
|
this.emit('errline', errbuffer);
|
|
}
|
|
cp.removeAllListeners();
|
|
if (error) {
|
|
reject(error);
|
|
}
|
|
else {
|
|
resolve(exitCode);
|
|
}
|
|
});
|
|
if (this.options.input) {
|
|
if (!cp.stdin) {
|
|
throw new Error('child process missing stdin');
|
|
}
|
|
cp.stdin.end(this.options.input);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
exports.ToolRunner = ToolRunner;
|
|
/**
|
|
* Convert an arg string to an array of args. Handles escaping
|
|
*
|
|
* @param argString string of arguments
|
|
* @returns string[] array of arguments
|
|
*/
|
|
function argStringToArray(argString) {
|
|
const args = [];
|
|
let inQuotes = false;
|
|
let escaped = false;
|
|
let arg = '';
|
|
function append(c) {
|
|
// we only escape double quotes.
|
|
if (escaped && c !== '"') {
|
|
arg += '\\';
|
|
}
|
|
arg += c;
|
|
escaped = false;
|
|
}
|
|
for (let i = 0; i < argString.length; i++) {
|
|
const c = argString.charAt(i);
|
|
if (c === '"') {
|
|
if (!escaped) {
|
|
inQuotes = !inQuotes;
|
|
}
|
|
else {
|
|
append(c);
|
|
}
|
|
continue;
|
|
}
|
|
if (c === '\\' && escaped) {
|
|
append(c);
|
|
continue;
|
|
}
|
|
if (c === '\\' && inQuotes) {
|
|
escaped = true;
|
|
continue;
|
|
}
|
|
if (c === ' ' && !inQuotes) {
|
|
if (arg.length > 0) {
|
|
args.push(arg);
|
|
arg = '';
|
|
}
|
|
continue;
|
|
}
|
|
append(c);
|
|
}
|
|
if (arg.length > 0) {
|
|
args.push(arg.trim());
|
|
}
|
|
return args;
|
|
}
|
|
exports.argStringToArray = argStringToArray;
|
|
class ExecState extends events.EventEmitter {
|
|
constructor(options, toolPath) {
|
|
super();
|
|
this.processClosed = false; // tracks whether the process has exited and stdio is closed
|
|
this.processError = '';
|
|
this.processExitCode = 0;
|
|
this.processExited = false; // tracks whether the process has exited
|
|
this.processStderr = false; // tracks whether stderr was written to
|
|
this.delay = 10000; // 10 seconds
|
|
this.done = false;
|
|
this.timeout = null;
|
|
if (!toolPath) {
|
|
throw new Error('toolPath must not be empty');
|
|
}
|
|
this.options = options;
|
|
this.toolPath = toolPath;
|
|
if (options.delay) {
|
|
this.delay = options.delay;
|
|
}
|
|
}
|
|
CheckComplete() {
|
|
if (this.done) {
|
|
return;
|
|
}
|
|
if (this.processClosed) {
|
|
this._setResult();
|
|
}
|
|
else if (this.processExited) {
|
|
this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);
|
|
}
|
|
}
|
|
_debug(message) {
|
|
this.emit('debug', message);
|
|
}
|
|
_setResult() {
|
|
// determine whether there is an error
|
|
let error;
|
|
if (this.processExited) {
|
|
if (this.processError) {
|
|
error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
|
|
}
|
|
else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
|
|
error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
|
|
}
|
|
else if (this.processStderr && this.options.failOnStdErr) {
|
|
error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
|
|
}
|
|
}
|
|
// clear the timeout
|
|
if (this.timeout) {
|
|
clearTimeout(this.timeout);
|
|
this.timeout = null;
|
|
}
|
|
this.done = true;
|
|
this.emit('done', error, this.processExitCode);
|
|
}
|
|
static HandleTimeout(state) {
|
|
if (state.done) {
|
|
return;
|
|
}
|
|
if (!state.processClosed && state.processExited) {
|
|
const message = `The STDIO streams did not close within ${state.delay /
|
|
1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
|
|
state._debug(message);
|
|
}
|
|
state._setResult();
|
|
}
|
|
}
|
|
//# sourceMappingURL=toolrunner.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 15:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __asyncValues = (this && this.__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 __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
const exec = __importStar(__webpack_require__(986));
|
|
const glob = __importStar(__webpack_require__(281));
|
|
const io = __importStar(__webpack_require__(1));
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const semver = __importStar(__webpack_require__(280));
|
|
const util = __importStar(__webpack_require__(669));
|
|
const uuid_1 = __webpack_require__(898);
|
|
const constants_1 = __webpack_require__(931);
|
|
// 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 = path.join(baseLocation, 'actions', 'temp');
|
|
}
|
|
const dest = path.join(tempDirectory, uuid_1.v4());
|
|
yield io.mkdirP(dest);
|
|
return dest;
|
|
});
|
|
}
|
|
exports.createTempDirectory = createTempDirectory;
|
|
function getArchiveFileSizeIsBytes(filePath) {
|
|
return fs.statSync(filePath).size;
|
|
}
|
|
exports.getArchiveFileSizeIsBytes = getArchiveFileSizeIsBytes;
|
|
function resolvePaths(patterns) {
|
|
var e_1, _a;
|
|
var _b;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const paths = [];
|
|
const workspace = (_b = process.env['GITHUB_WORKSPACE']) !== null && _b !== void 0 ? _b : process.cwd();
|
|
const globber = yield glob.create(patterns.join('\n'), {
|
|
implicitDescendants: false
|
|
});
|
|
try {
|
|
for (var _c = __asyncValues(globber.globGenerator()), _d; _d = yield _c.next(), !_d.done;) {
|
|
const file = _d.value;
|
|
const relativeFile = path.relative(workspace, file);
|
|
core.debug(`Matched: ${relativeFile}`);
|
|
// Paths are made relative so the tar entries are all relative to the root of the workspace.
|
|
paths.push(`${relativeFile}`);
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
return paths;
|
|
});
|
|
}
|
|
exports.resolvePaths = resolvePaths;
|
|
function unlinkFile(filePath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return util.promisify(fs.unlink)(filePath);
|
|
});
|
|
}
|
|
exports.unlinkFile = unlinkFile;
|
|
function getVersion(app) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
core.debug(`Checking ${app} --version`);
|
|
let versionOutput = '';
|
|
try {
|
|
yield exec.exec(`${app} --version`, [], {
|
|
ignoreReturnCode: true,
|
|
silent: true,
|
|
listeners: {
|
|
stdout: (data) => (versionOutput += data.toString()),
|
|
stderr: (data) => (versionOutput += data.toString())
|
|
}
|
|
});
|
|
}
|
|
catch (err) {
|
|
core.debug(err.message);
|
|
}
|
|
versionOutput = versionOutput.trim();
|
|
core.debug(versionOutput);
|
|
return versionOutput;
|
|
});
|
|
}
|
|
// Use zstandard if possible to maximize cache performance
|
|
function getCompressionMethod() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (process.platform === 'win32' && !(yield isGnuTarInstalled())) {
|
|
// Disable zstd due to bug https://github.com/actions/cache/issues/301
|
|
return constants_1.CompressionMethod.Gzip;
|
|
}
|
|
const versionOutput = yield getVersion('zstd');
|
|
const version = semver.clean(versionOutput);
|
|
if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
|
|
// zstd is not installed
|
|
return constants_1.CompressionMethod.Gzip;
|
|
}
|
|
else if (!version || semver.lt(version, 'v1.3.2')) {
|
|
// zstd is installed but using a version earlier than v1.3.2
|
|
// v1.3.2 is required to use the `--long` options in zstd
|
|
return constants_1.CompressionMethod.ZstdWithoutLong;
|
|
}
|
|
else {
|
|
return constants_1.CompressionMethod.Zstd;
|
|
}
|
|
});
|
|
}
|
|
exports.getCompressionMethod = getCompressionMethod;
|
|
function getCacheFileName(compressionMethod) {
|
|
return compressionMethod === constants_1.CompressionMethod.Gzip
|
|
? constants_1.CacheFilename.Gzip
|
|
: constants_1.CacheFilename.Zstd;
|
|
}
|
|
exports.getCacheFileName = getCacheFileName;
|
|
function isGnuTarInstalled() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const versionOutput = yield getVersion('tar');
|
|
return versionOutput.toLowerCase().includes('gnu tar');
|
|
});
|
|
}
|
|
exports.isGnuTarInstalled = isGnuTarInstalled;
|
|
function assertDefined(name, value) {
|
|
if (value === undefined) {
|
|
throw Error(`Expected ${name} but value was undefiend`);
|
|
}
|
|
return value;
|
|
}
|
|
exports.assertDefined = assertDefined;
|
|
//# sourceMappingURL=cacheUtils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 16:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("tls");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 18:
|
|
/***/ (function() {
|
|
|
|
eval("require")("encoding");
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 19:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDNotation, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDTDNotation = (function(superClass) {
|
|
extend(XMLDTDNotation, superClass);
|
|
|
|
function XMLDTDNotation(parent, name, value) {
|
|
XMLDTDNotation.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD notation name. " + this.debugInfo(name));
|
|
}
|
|
if (!value.pubID && !value.sysID) {
|
|
throw new Error("Public or system identifiers are required for an external entity. " + this.debugInfo(name));
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.NotationDeclaration;
|
|
if (value.pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(value.pubID);
|
|
}
|
|
if (value.sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(value.sysID);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDTDNotation.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDNotation.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
XMLDTDNotation.prototype.toString = function(options) {
|
|
return this.options.writer.dtdNotation(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDNotation;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 22:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const getter_1 = __webpack_require__(2);
|
|
const NoopHttpTextPropagator_1 = __webpack_require__(744);
|
|
const setter_1 = __webpack_require__(753);
|
|
const context_1 = __webpack_require__(492);
|
|
const contextApi = context_1.ContextAPI.getInstance();
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Propagation API
|
|
*/
|
|
class PropagationAPI {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
constructor() {
|
|
this._propagator = NoopHttpTextPropagator_1.NOOP_HTTP_TEXT_PROPAGATOR;
|
|
}
|
|
/** Get the singleton instance of the Propagator API */
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new PropagationAPI();
|
|
}
|
|
return this._instance;
|
|
}
|
|
/**
|
|
* Set the current propagator. Returns the initialized propagator
|
|
*/
|
|
setGlobalPropagator(propagator) {
|
|
this._propagator = propagator;
|
|
return propagator;
|
|
}
|
|
/**
|
|
* Inject context into a carrier to be propagated inter-process
|
|
*
|
|
* @param carrier carrier to inject context into
|
|
* @param setter Function used to set values on the carrier
|
|
* @param context Context carrying tracing data to inject. Defaults to the currently active context.
|
|
*/
|
|
inject(carrier, setter = setter_1.defaultSetter, context = contextApi.active()) {
|
|
return this._propagator.inject(context, carrier, setter);
|
|
}
|
|
/**
|
|
* Extract context from a carrier
|
|
*
|
|
* @param carrier Carrier to extract context from
|
|
* @param getter Function used to extract keys from a carrier
|
|
* @param context Context which the newly created context will inherit from. Defaults to the currently active context.
|
|
*/
|
|
extract(carrier, getter = getter_1.defaultGetter, context = contextApi.active()) {
|
|
return this._propagator.extract(context, carrier, getter);
|
|
}
|
|
}
|
|
exports.PropagationAPI = PropagationAPI;
|
|
//# sourceMappingURL=propagation.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 40:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* EntryTtl is an integer that represents number of hops an entry can propagate.
|
|
*
|
|
* For now, ONLY special values (0 and -1) are supported.
|
|
*/
|
|
var EntryTtl;
|
|
(function (EntryTtl) {
|
|
/**
|
|
* NO_PROPAGATION is considered to have local context and is used within the
|
|
* process it created.
|
|
*/
|
|
EntryTtl[EntryTtl["NO_PROPAGATION"] = 0] = "NO_PROPAGATION";
|
|
/** UNLIMITED_PROPAGATION can propagate unlimited hops. */
|
|
EntryTtl[EntryTtl["UNLIMITED_PROPAGATION"] = -1] = "UNLIMITED_PROPAGATION";
|
|
})(EntryTtl = exports.EntryTtl || (exports.EntryTtl = {}));
|
|
//# sourceMappingURL=EntryValue.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 43:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/** The Type of value. It describes how the data is reported. */
|
|
var ValueType;
|
|
(function (ValueType) {
|
|
ValueType[ValueType["INT"] = 0] = "INT";
|
|
ValueType[ValueType["DOUBLE"] = 1] = "DOUBLE";
|
|
})(ValueType = exports.ValueType || (exports.ValueType = {}));
|
|
//# sourceMappingURL=Metric.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 50:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = ["ac","com.ac","edu.ac","gov.ac","net.ac","mil.ac","org.ac","ad","nom.ad","ae","co.ae","net.ae","org.ae","sch.ae","ac.ae","gov.ae","mil.ae","aero","accident-investigation.aero","accident-prevention.aero","aerobatic.aero","aeroclub.aero","aerodrome.aero","agents.aero","aircraft.aero","airline.aero","airport.aero","air-surveillance.aero","airtraffic.aero","air-traffic-control.aero","ambulance.aero","amusement.aero","association.aero","author.aero","ballooning.aero","broker.aero","caa.aero","cargo.aero","catering.aero","certification.aero","championship.aero","charter.aero","civilaviation.aero","club.aero","conference.aero","consultant.aero","consulting.aero","control.aero","council.aero","crew.aero","design.aero","dgca.aero","educator.aero","emergency.aero","engine.aero","engineer.aero","entertainment.aero","equipment.aero","exchange.aero","express.aero","federation.aero","flight.aero","freight.aero","fuel.aero","gliding.aero","government.aero","groundhandling.aero","group.aero","hanggliding.aero","homebuilt.aero","insurance.aero","journal.aero","journalist.aero","leasing.aero","logistics.aero","magazine.aero","maintenance.aero","media.aero","microlight.aero","modelling.aero","navigation.aero","parachuting.aero","paragliding.aero","passenger-association.aero","pilot.aero","press.aero","production.aero","recreation.aero","repbody.aero","res.aero","research.aero","rotorcraft.aero","safety.aero","scientist.aero","services.aero","show.aero","skydiving.aero","software.aero","student.aero","trader.aero","trading.aero","trainer.aero","union.aero","workinggroup.aero","works.aero","af","gov.af","com.af","org.af","net.af","edu.af","ag","com.ag","org.ag","net.ag","co.ag","nom.ag","ai","off.ai","com.ai","net.ai","org.ai","al","com.al","edu.al","gov.al","mil.al","net.al","org.al","am","co.am","com.am","commune.am","net.am","org.am","ao","ed.ao","gv.ao","og.ao","co.ao","pb.ao","it.ao","aq","ar","com.ar","edu.ar","gob.ar","gov.ar","int.ar","mil.ar","musica.ar","net.ar","org.ar","tur.ar","arpa","e164.arpa","in-addr.arpa","ip6.arpa","iris.arpa","uri.arpa","urn.arpa","as","gov.as","asia","at","ac.at","co.at","gv.at","or.at","au","com.au","net.au","org.au","edu.au","gov.au","asn.au","id.au","info.au","conf.au","oz.au","act.au","nsw.au","nt.au","qld.au","sa.au","tas.au","vic.au","wa.au","act.edu.au","catholic.edu.au","nsw.edu.au","nt.edu.au","qld.edu.au","sa.edu.au","tas.edu.au","vic.edu.au","wa.edu.au","qld.gov.au","sa.gov.au","tas.gov.au","vic.gov.au","wa.gov.au","education.tas.edu.au","schools.nsw.edu.au","aw","com.aw","ax","az","com.az","net.az","int.az","gov.az","org.az","edu.az","info.az","pp.az","mil.az","name.az","pro.az","biz.az","ba","com.ba","edu.ba","gov.ba","mil.ba","net.ba","org.ba","bb","biz.bb","co.bb","com.bb","edu.bb","gov.bb","info.bb","net.bb","org.bb","store.bb","tv.bb","*.bd","be","ac.be","bf","gov.bf","bg","a.bg","b.bg","c.bg","d.bg","e.bg","f.bg","g.bg","h.bg","i.bg","j.bg","k.bg","l.bg","m.bg","n.bg","o.bg","p.bg","q.bg","r.bg","s.bg","t.bg","u.bg","v.bg","w.bg","x.bg","y.bg","z.bg","0.bg","1.bg","2.bg","3.bg","4.bg","5.bg","6.bg","7.bg","8.bg","9.bg","bh","com.bh","edu.bh","net.bh","org.bh","gov.bh","bi","co.bi","com.bi","edu.bi","or.bi","org.bi","biz","bj","asso.bj","barreau.bj","gouv.bj","bm","com.bm","edu.bm","gov.bm","net.bm","org.bm","bn","com.bn","edu.bn","gov.bn","net.bn","org.bn","bo","com.bo","edu.bo","gob.bo","int.bo","org.bo","net.bo","mil.bo","tv.bo","web.bo","academia.bo","agro.bo","arte.bo","blog.bo","bolivia.bo","ciencia.bo","cooperativa.bo","democracia.bo","deporte.bo","ecologia.bo","economia.bo","empresa.bo","indigena.bo","industria.bo","info.bo","medicina.bo","movimiento.bo","musica.bo","natural.bo","nombre.bo","noticias.bo","patria.bo","politica.bo","profesional.bo","plurinacional.bo","pueblo.bo","revista.bo","salud.bo","tecnologia.bo","tksat.bo","transporte.bo","wiki.bo","br","9guacu.br","abc.br","adm.br","adv.br","agr.br","aju.br","am.br","anani.br","aparecida.br","arq.br","art.br","ato.br","b.br","barueri.br","belem.br","bhz.br","bio.br","blog.br","bmd.br","boavista.br","bsb.br","campinagrande.br","campinas.br","caxias.br","cim.br","cng.br","cnt.br","com.br","contagem.br","coop.br","cri.br","cuiaba.br","curitiba.br","def.br","ecn.br","eco.br","edu.br","emp.br","eng.br","esp.br","etc.br","eti.br","far.br","feira.br","flog.br","floripa.br","fm.br","fnd.br","fortal.br","fot.br","foz.br","fst.br","g12.br","ggf.br","goiania.br","gov.br","ac.gov.br","al.gov.br","am.gov.br","ap.gov.br","ba.gov.br","ce.gov.br","df.gov.br","es.gov.br","go.gov.br","ma.gov.br","mg.gov.br","ms.gov.br","mt.gov.br","pa.gov.br","pb.gov.br","pe.gov.br","pi.gov.br","pr.gov.br","rj.gov.br","rn.gov.br","ro.gov.br","rr.gov.br","rs.gov.br","sc.gov.br","se.gov.br","sp.gov.br","to.gov.br","gru.br","imb.br","ind.br","inf.br","jab.br","jampa.br","jdf.br","joinville.br","jor.br","jus.br","leg.br","lel.br","londrina.br","macapa.br","maceio.br","manaus.br","maringa.br","mat.br","med.br","mil.br","morena.br","mp.br","mus.br","natal.br","net.br","niteroi.br","*.nom.br","not.br","ntr.br","odo.br","ong.br","org.br","osasco.br","palmas.br","poa.br","ppg.br","pro.br","psc.br","psi.br","pvh.br","qsl.br","radio.br","rec.br","recife.br","ribeirao.br","rio.br","riobranco.br","riopreto.br","salvador.br","sampa.br","santamaria.br","santoandre.br","saobernardo.br","saogonca.br","sjc.br","slg.br","slz.br","sorocaba.br","srv.br","taxi.br","tc.br","teo.br","the.br","tmp.br","trd.br","tur.br","tv.br","udi.br","vet.br","vix.br","vlog.br","wiki.br","zlg.br","bs","com.bs","net.bs","org.bs","edu.bs","gov.bs","bt","com.bt","edu.bt","gov.bt","net.bt","org.bt","bv","bw","co.bw","org.bw","by","gov.by","mil.by","com.by","of.by","bz","com.bz","net.bz","org.bz","edu.bz","gov.bz","ca","ab.ca","bc.ca","mb.ca","nb.ca","nf.ca","nl.ca","ns.ca","nt.ca","nu.ca","on.ca","pe.ca","qc.ca","sk.ca","yk.ca","gc.ca","cat","cc","cd","gov.cd","cf","cg","ch","ci","org.ci","or.ci","com.ci","co.ci","edu.ci","ed.ci","ac.ci","net.ci","go.ci","asso.ci","aéroport.ci","int.ci","presse.ci","md.ci","gouv.ci","*.ck","!www.ck","cl","aprendemas.cl","co.cl","gob.cl","gov.cl","mil.cl","cm","co.cm","com.cm","gov.cm","net.cm","cn","ac.cn","com.cn","edu.cn","gov.cn","net.cn","org.cn","mil.cn","公司.cn","网络.cn","網絡.cn","ah.cn","bj.cn","cq.cn","fj.cn","gd.cn","gs.cn","gz.cn","gx.cn","ha.cn","hb.cn","he.cn","hi.cn","hl.cn","hn.cn","jl.cn","js.cn","jx.cn","ln.cn","nm.cn","nx.cn","qh.cn","sc.cn","sd.cn","sh.cn","sn.cn","sx.cn","tj.cn","xj.cn","xz.cn","yn.cn","zj.cn","hk.cn","mo.cn","tw.cn","co","arts.co","com.co","edu.co","firm.co","gov.co","info.co","int.co","mil.co","net.co","nom.co","org.co","rec.co","web.co","com","coop","cr","ac.cr","co.cr","ed.cr","fi.cr","go.cr","or.cr","sa.cr","cu","com.cu","edu.cu","org.cu","net.cu","gov.cu","inf.cu","cv","cw","com.cw","edu.cw","net.cw","org.cw","cx","gov.cx","cy","ac.cy","biz.cy","com.cy","ekloges.cy","gov.cy","ltd.cy","name.cy","net.cy","org.cy","parliament.cy","press.cy","pro.cy","tm.cy","cz","de","dj","dk","dm","com.dm","net.dm","org.dm","edu.dm","gov.dm","do","art.do","com.do","edu.do","gob.do","gov.do","mil.do","net.do","org.do","sld.do","web.do","dz","com.dz","org.dz","net.dz","gov.dz","edu.dz","asso.dz","pol.dz","art.dz","ec","com.ec","info.ec","net.ec","fin.ec","k12.ec","med.ec","pro.ec","org.ec","edu.ec","gov.ec","gob.ec","mil.ec","edu","ee","edu.ee","gov.ee","riik.ee","lib.ee","med.ee","com.ee","pri.ee","aip.ee","org.ee","fie.ee","eg","com.eg","edu.eg","eun.eg","gov.eg","mil.eg","name.eg","net.eg","org.eg","sci.eg","*.er","es","com.es","nom.es","org.es","gob.es","edu.es","et","com.et","gov.et","org.et","edu.et","biz.et","name.et","info.et","net.et","eu","fi","aland.fi","fj","ac.fj","biz.fj","com.fj","gov.fj","info.fj","mil.fj","name.fj","net.fj","org.fj","pro.fj","*.fk","fm","fo","fr","asso.fr","com.fr","gouv.fr","nom.fr","prd.fr","tm.fr","aeroport.fr","avocat.fr","avoues.fr","cci.fr","chambagri.fr","chirurgiens-dentistes.fr","experts-comptables.fr","geometre-expert.fr","greta.fr","huissier-justice.fr","medecin.fr","notaires.fr","pharmacien.fr","port.fr","veterinaire.fr","ga","gb","gd","ge","com.ge","edu.ge","gov.ge","org.ge","mil.ge","net.ge","pvt.ge","gf","gg","co.gg","net.gg","org.gg","gh","com.gh","edu.gh","gov.gh","org.gh","mil.gh","gi","com.gi","ltd.gi","gov.gi","mod.gi","edu.gi","org.gi","gl","co.gl","com.gl","edu.gl","net.gl","org.gl","gm","gn","ac.gn","com.gn","edu.gn","gov.gn","org.gn","net.gn","gov","gp","com.gp","net.gp","mobi.gp","edu.gp","org.gp","asso.gp","gq","gr","com.gr","edu.gr","net.gr","org.gr","gov.gr","gs","gt","com.gt","edu.gt","gob.gt","ind.gt","mil.gt","net.gt","org.gt","gu","com.gu","edu.gu","gov.gu","guam.gu","info.gu","net.gu","org.gu","web.gu","gw","gy","co.gy","com.gy","edu.gy","gov.gy","net.gy","org.gy","hk","com.hk","edu.hk","gov.hk","idv.hk","net.hk","org.hk","公司.hk","教育.hk","敎育.hk","政府.hk","個人.hk","个人.hk","箇人.hk","網络.hk","网络.hk","组織.hk","網絡.hk","网絡.hk","组织.hk","組織.hk","組织.hk","hm","hn","com.hn","edu.hn","org.hn","net.hn","mil.hn","gob.hn","hr","iz.hr","from.hr","name.hr","com.hr","ht","com.ht","shop.ht","firm.ht","info.ht","adult.ht","net.ht","pro.ht","org.ht","med.ht","art.ht","coop.ht","pol.ht","asso.ht","edu.ht","rel.ht","gouv.ht","perso.ht","hu","co.hu","info.hu","org.hu","priv.hu","sport.hu","tm.hu","2000.hu","agrar.hu","bolt.hu","casino.hu","city.hu","erotica.hu","erotika.hu","film.hu","forum.hu","games.hu","hotel.hu","ingatlan.hu","jogasz.hu","konyvelo.hu","lakas.hu","media.hu","news.hu","reklam.hu","sex.hu","shop.hu","suli.hu","szex.hu","tozsde.hu","utazas.hu","video.hu","id","ac.id","biz.id","co.id","desa.id","go.id","mil.id","my.id","net.id","or.id","ponpes.id","sch.id","web.id","ie","gov.ie","il","ac.il","co.il","gov.il","idf.il","k12.il","muni.il","net.il","org.il","im","ac.im","co.im","com.im","ltd.co.im","net.im","org.im","plc.co.im","tt.im","tv.im","in","co.in","firm.in","net.in","org.in","gen.in","ind.in","nic.in","ac.in","edu.in","res.in","gov.in","mil.in","info","int","eu.int","io","com.io","iq","gov.iq","edu.iq","mil.iq","com.iq","org.iq","net.iq","ir","ac.ir","co.ir","gov.ir","id.ir","net.ir","org.ir","sch.ir","ایران.ir","ايران.ir","is","net.is","com.is","edu.is","gov.is","org.is","int.is","it","gov.it","edu.it","abr.it","abruzzo.it","aosta-valley.it","aostavalley.it","bas.it","basilicata.it","cal.it","calabria.it","cam.it","campania.it","emilia-romagna.it","emiliaromagna.it","emr.it","friuli-v-giulia.it","friuli-ve-giulia.it","friuli-vegiulia.it","friuli-venezia-giulia.it","friuli-veneziagiulia.it","friuli-vgiulia.it","friuliv-giulia.it","friulive-giulia.it","friulivegiulia.it","friulivenezia-giulia.it","friuliveneziagiulia.it","friulivgiulia.it","fvg.it","laz.it","lazio.it","lig.it","liguria.it","lom.it","lombardia.it","lombardy.it","lucania.it","mar.it","marche.it","mol.it","molise.it","piedmont.it","piemonte.it","pmn.it","pug.it","puglia.it","sar.it","sardegna.it","sardinia.it","sic.it","sicilia.it","sicily.it","taa.it","tos.it","toscana.it","trentin-sud-tirol.it","trentin-süd-tirol.it","trentin-sudtirol.it","trentin-südtirol.it","trentin-sued-tirol.it","trentin-suedtirol.it","trentino-a-adige.it","trentino-aadige.it","trentino-alto-adige.it","trentino-altoadige.it","trentino-s-tirol.it","trentino-stirol.it","trentino-sud-tirol.it","trentino-süd-tirol.it","trentino-sudtirol.it","trentino-südtirol.it","trentino-sued-tirol.it","trentino-suedtirol.it","trentino.it","trentinoa-adige.it","trentinoaadige.it","trentinoalto-adige.it","trentinoaltoadige.it","trentinos-tirol.it","trentinostirol.it","trentinosud-tirol.it","trentinosüd-tirol.it","trentinosudtirol.it","trentinosüdtirol.it","trentinosued-tirol.it","trentinosuedtirol.it","trentinsud-tirol.it","trentinsüd-tirol.it","trentinsudtirol.it","trentinsüdtirol.it","trentinsued-tirol.it","trentinsuedtirol.it","tuscany.it","umb.it","umbria.it","val-d-aosta.it","val-daosta.it","vald-aosta.it","valdaosta.it","valle-aosta.it","valle-d-aosta.it","valle-daosta.it","valleaosta.it","valled-aosta.it","valledaosta.it","vallee-aoste.it","vallée-aoste.it","vallee-d-aoste.it","vallée-d-aoste.it","valleeaoste.it","valléeaoste.it","valleedaoste.it","valléedaoste.it","vao.it","vda.it","ven.it","veneto.it","ag.it","agrigento.it","al.it","alessandria.it","alto-adige.it","altoadige.it","an.it","ancona.it","andria-barletta-trani.it","andria-trani-barletta.it","andriabarlettatrani.it","andriatranibarletta.it","ao.it","aosta.it","aoste.it","ap.it","aq.it","aquila.it","ar.it","arezzo.it","ascoli-piceno.it","ascolipiceno.it","asti.it","at.it","av.it","avellino.it","ba.it","balsan-sudtirol.it","balsan-südtirol.it","balsan-suedtirol.it","balsan.it","bari.it","barletta-trani-andria.it","barlettatraniandria.it","belluno.it","benevento.it","bergamo.it","bg.it","bi.it","biella.it","bl.it","bn.it","bo.it","bologna.it","bolzano-altoadige.it","bolzano.it","bozen-sudtirol.it","bozen-südtirol.it","bozen-suedtirol.it","bozen.it","br.it","brescia.it","brindisi.it","bs.it","bt.it","bulsan-sudtirol.it","bulsan-südtirol.it","bulsan-suedtirol.it","bulsan.it","bz.it","ca.it","cagliari.it","caltanissetta.it","campidano-medio.it","campidanomedio.it","campobasso.it","carbonia-iglesias.it","carboniaiglesias.it","carrara-massa.it","carraramassa.it","caserta.it","catania.it","catanzaro.it","cb.it","ce.it","cesena-forli.it","cesena-forlì.it","cesenaforli.it","cesenaforlì.it","ch.it","chieti.it","ci.it","cl.it","cn.it","co.it","como.it","cosenza.it","cr.it","cremona.it","crotone.it","cs.it","ct.it","cuneo.it","cz.it","dell-ogliastra.it","dellogliastra.it","en.it","enna.it","fc.it","fe.it","fermo.it","ferrara.it","fg.it","fi.it","firenze.it","florence.it","fm.it","foggia.it","forli-cesena.it","forlì-cesena.it","forlicesena.it","forlìcesena.it","fr.it","frosinone.it","ge.it","genoa.it","genova.it","go.it","gorizia.it","gr.it","grosseto.it","iglesias-carbonia.it","iglesiascarbonia.it","im.it","imperia.it","is.it","isernia.it","kr.it","la-spezia.it","laquila.it","laspezia.it","latina.it","lc.it","le.it","lecce.it","lecco.it","li.it","livorno.it","lo.it","lodi.it","lt.it","lu.it","lucca.it","macerata.it","mantova.it","massa-carrara.it","massacarrara.it","matera.it","mb.it","mc.it","me.it","medio-campidano.it","mediocampidano.it","messina.it","mi.it","milan.it","milano.it","mn.it","mo.it","modena.it","monza-brianza.it","monza-e-della-brianza.it","monza.it","monzabrianza.it","monzaebrianza.it","monzaedellabrianza.it","ms.it","mt.it","na.it","naples.it","napoli.it","no.it","novara.it","nu.it","nuoro.it","og.it","ogliastra.it","olbia-tempio.it","olbiatempio.it","or.it","oristano.it","ot.it","pa.it","padova.it","padua.it","palermo.it","parma.it","pavia.it","pc.it","pd.it","pe.it","perugia.it","pesaro-urbino.it","pesarourbino.it","pescara.it","pg.it","pi.it","piacenza.it","pisa.it","pistoia.it","pn.it","po.it","pordenone.it","potenza.it","pr.it","prato.it","pt.it","pu.it","pv.it","pz.it","ra.it","ragusa.it","ravenna.it","rc.it","re.it","reggio-calabria.it","reggio-emilia.it","reggiocalabria.it","reggioemilia.it","rg.it","ri.it","rieti.it","rimini.it","rm.it","rn.it","ro.it","roma.it","rome.it","rovigo.it","sa.it","salerno.it","sassari.it","savona.it","si.it","siena.it","siracusa.it","so.it","sondrio.it","sp.it","sr.it","ss.it","suedtirol.it","südtirol.it","sv.it","ta.it","taranto.it","te.it","tempio-olbia.it","tempioolbia.it","teramo.it","terni.it","tn.it","to.it","torino.it","tp.it","tr.it","trani-andria-barletta.it","trani-barletta-andria.it","traniandriabarletta.it","tranibarlettaandria.it","trapani.it","trento.it","treviso.it","trieste.it","ts.it","turin.it","tv.it","ud.it","udine.it","urbino-pesaro.it","urbinopesaro.it","va.it","varese.it","vb.it","vc.it","ve.it","venezia.it","venice.it","verbania.it","vercelli.it","verona.it","vi.it","vibo-valentia.it","vibovalentia.it","vicenza.it","viterbo.it","vr.it","vs.it","vt.it","vv.it","je","co.je","net.je","org.je","*.jm","jo","com.jo","org.jo","net.jo","edu.jo","sch.jo","gov.jo","mil.jo","name.jo","jobs","jp","ac.jp","ad.jp","co.jp","ed.jp","go.jp","gr.jp","lg.jp","ne.jp","or.jp","aichi.jp","akita.jp","aomori.jp","chiba.jp","ehime.jp","fukui.jp","fukuoka.jp","fukushima.jp","gifu.jp","gunma.jp","hiroshima.jp","hokkaido.jp","hyogo.jp","ibaraki.jp","ishikawa.jp","iwate.jp","kagawa.jp","kagoshima.jp","kanagawa.jp","kochi.jp","kumamoto.jp","kyoto.jp","mie.jp","miyagi.jp","miyazaki.jp","nagano.jp","nagasaki.jp","nara.jp","niigata.jp","oita.jp","okayama.jp","okinawa.jp","osaka.jp","saga.jp","saitama.jp","shiga.jp","shimane.jp","shizuoka.jp","tochigi.jp","tokushima.jp","tokyo.jp","tottori.jp","toyama.jp","wakayama.jp","yamagata.jp","yamaguchi.jp","yamanashi.jp","栃木.jp","愛知.jp","愛媛.jp","兵庫.jp","熊本.jp","茨城.jp","北海道.jp","千葉.jp","和歌山.jp","長崎.jp","長野.jp","新潟.jp","青森.jp","静岡.jp","東京.jp","石川.jp","埼玉.jp","三重.jp","京都.jp","佐賀.jp","大分.jp","大阪.jp","奈良.jp","宮城.jp","宮崎.jp","富山.jp","山口.jp","山形.jp","山梨.jp","岩手.jp","岐阜.jp","岡山.jp","島根.jp","広島.jp","徳島.jp","沖縄.jp","滋賀.jp","神奈川.jp","福井.jp","福岡.jp","福島.jp","秋田.jp","群馬.jp","香川.jp","高知.jp","鳥取.jp","鹿児島.jp","*.kawasaki.jp","*.kitakyushu.jp","*.kobe.jp","*.nagoya.jp","*.sapporo.jp","*.sendai.jp","*.yokohama.jp","!city.kawasaki.jp","!city.kitakyushu.jp","!city.kobe.jp","!city.nagoya.jp","!city.sapporo.jp","!city.sendai.jp","!city.yokohama.jp","aisai.aichi.jp","ama.aichi.jp","anjo.aichi.jp","asuke.aichi.jp","chiryu.aichi.jp","chita.aichi.jp","fuso.aichi.jp","gamagori.aichi.jp","handa.aichi.jp","hazu.aichi.jp","hekinan.aichi.jp","higashiura.aichi.jp","ichinomiya.aichi.jp","inazawa.aichi.jp","inuyama.aichi.jp","isshiki.aichi.jp","iwakura.aichi.jp","kanie.aichi.jp","kariya.aichi.jp","kasugai.aichi.jp","kira.aichi.jp","kiyosu.aichi.jp","komaki.aichi.jp","konan.aichi.jp","kota.aichi.jp","mihama.aichi.jp","miyoshi.aichi.jp","nishio.aichi.jp","nisshin.aichi.jp","obu.aichi.jp","oguchi.aichi.jp","oharu.aichi.jp","okazaki.aichi.jp","owariasahi.aichi.jp","seto.aichi.jp","shikatsu.aichi.jp","shinshiro.aichi.jp","shitara.aichi.jp","tahara.aichi.jp","takahama.aichi.jp","tobishima.aichi.jp","toei.aichi.jp","togo.aichi.jp","tokai.aichi.jp","tokoname.aichi.jp","toyoake.aichi.jp","toyohashi.aichi.jp","toyokawa.aichi.jp","toyone.aichi.jp","toyota.aichi.jp","tsushima.aichi.jp","yatomi.aichi.jp","akita.akita.jp","daisen.akita.jp","fujisato.akita.jp","gojome.akita.jp","hachirogata.akita.jp","happou.akita.jp","higashinaruse.akita.jp","honjo.akita.jp","honjyo.akita.jp","ikawa.akita.jp","kamikoani.akita.jp","kamioka.akita.jp","katagami.akita.jp","kazuno.akita.jp","kitaakita.akita.jp","kosaka.akita.jp","kyowa.akita.jp","misato.akita.jp","mitane.akita.jp","moriyoshi.akita.jp","nikaho.akita.jp","noshiro.akita.jp","odate.akita.jp","oga.akita.jp","ogata.akita.jp","semboku.akita.jp","yokote.akita.jp","yurihonjo.akita.jp","aomori.aomori.jp","gonohe.aomori.jp","hachinohe.aomori.jp","hashikami.aomori.jp","hiranai.aomori.jp","hirosaki.aomori.jp","itayanagi.aomori.jp","kuroishi.aomori.jp","misawa.aomori.jp","mutsu.aomori.jp","nakadomari.aomori.jp","noheji.aomori.jp","oirase.aomori.jp","owani.aomori.jp","rokunohe.aomori.jp","sannohe.aomori.jp","shichinohe.aomori.jp","shingo.aomori.jp","takko.aomori.jp","towada.aomori.jp","tsugaru.aomori.jp","tsuruta.aomori.jp","abiko.chiba.jp","asahi.chiba.jp","chonan.chiba.jp","chosei.chiba.jp","choshi.chiba.jp","chuo.chiba.jp","funabashi.chiba.jp","futtsu.chiba.jp","hanamigawa.chiba.jp","ichihara.chiba.jp","ichikawa.chiba.jp","ichinomiya.chiba.jp","inzai.chiba.jp","isumi.chiba.jp","kamagaya.chiba.jp","kamogawa.chiba.jp","kashiwa.chiba.jp","katori.chiba.jp","katsuura.chiba.jp","kimitsu.chiba.jp","kisarazu.chiba.jp","kozaki.chiba.jp","kujukuri.chiba.jp","kyonan.chiba.jp","matsudo.chiba.jp","midori.chiba.jp","mihama.chiba.jp","minamiboso.chiba.jp","mobara.chiba.jp","mutsuzawa.chiba.jp","nagara.chiba.jp","nagareyama.chiba.jp","narashino.chiba.jp","narita.chiba.jp","noda.chiba.jp","oamishirasato.chiba.jp","omigawa.chiba.jp","onjuku.chiba.jp","otaki.chiba.jp","sakae.chiba.jp","sakura.chiba.jp","shimofusa.chiba.jp","shirako.chiba.jp","shiroi.chiba.jp","shisui.chiba.jp","sodegaura.chiba.jp","sosa.chiba.jp","tako.chiba.jp","tateyama.chiba.jp","togane.chiba.jp","tohnosho.chiba.jp","tomisato.chiba.jp","urayasu.chiba.jp","yachimata.chiba.jp","yachiyo.chiba.jp","yokaichiba.chiba.jp","yokoshibahikari.chiba.jp","yotsukaido.chiba.jp","ainan.ehime.jp","honai.ehime.jp","ikata.ehime.jp","imabari.ehime.jp","iyo.ehime.jp","kamijima.ehime.jp","kihoku.ehime.jp","kumakogen.ehime.jp","masaki.ehime.jp","matsuno.ehime.jp","matsuyama.ehime.jp","namikata.ehime.jp","niihama.ehime.jp","ozu.ehime.jp","saijo.ehime.jp","seiyo.ehime.jp","shikokuchuo.ehime.jp","tobe.ehime.jp","toon.ehime.jp","uchiko.ehime.jp","uwajima.ehime.jp","yawatahama.ehime.jp","echizen.fukui.jp","eiheiji.fukui.jp","fukui.fukui.jp","ikeda.fukui.jp","katsuyama.fukui.jp","mihama.fukui.jp","minamiechizen.fukui.jp","obama.fukui.jp","ohi.fukui.jp","ono.fukui.jp","sabae.fukui.jp","sakai.fukui.jp","takahama.fukui.jp","tsuruga.fukui.jp","wakasa.fukui.jp","ashiya.fukuoka.jp","buzen.fukuoka.jp","chikugo.fukuoka.jp","chikuho.fukuoka.jp","chikujo.fukuoka.jp","chikushino.fukuoka.jp","chikuzen.fukuoka.jp","chuo.fukuoka.jp","dazaifu.fukuoka.jp","fukuchi.fukuoka.jp","hakata.fukuoka.jp","higashi.fukuoka.jp","hirokawa.fukuoka.jp","hisayama.fukuoka.jp","iizuka.fukuoka.jp","inatsuki.fukuoka.jp","kaho.fukuoka.jp","kasuga.fukuoka.jp","kasuya.fukuoka.jp","kawara.fukuoka.jp","keisen.fukuoka.jp","koga.fukuoka.jp","kurate.fukuoka.jp","kurogi.fukuoka.jp","kurume.fukuoka.jp","minami.fukuoka.jp","miyako.fukuoka.jp","miyama.fukuoka.jp","miyawaka.fukuoka.jp","mizumaki.fukuoka.jp","munakata.fukuoka.jp","nakagawa.fukuoka.jp","nakama.fukuoka.jp","nishi.fukuoka.jp","nogata.fukuoka.jp","ogori.fukuoka.jp","okagaki.fukuoka.jp","okawa.fukuoka.jp","oki.fukuoka.jp","omuta.fukuoka.jp","onga.fukuoka.jp","onojo.fukuoka.jp","oto.fukuoka.jp","saigawa.fukuoka.jp","sasaguri.fukuoka.jp","shingu.fukuoka.jp","shinyoshitomi.fukuoka.jp","shonai.fukuoka.jp","soeda.fukuoka.jp","sue.fukuoka.jp","tachiarai.fukuoka.jp","tagawa.fukuoka.jp","takata.fukuoka.jp","toho.fukuoka.jp","toyotsu.fukuoka.jp","tsuiki.fukuoka.jp","ukiha.fukuoka.jp","umi.fukuoka.jp","usui.fukuoka.jp","yamada.fukuoka.jp","yame.fukuoka.jp","yanagawa.fukuoka.jp","yukuhashi.fukuoka.jp","aizubange.fukushima.jp","aizumisato.fukushima.jp","aizuwakamatsu.fukushima.jp","asakawa.fukushima.jp","bandai.fukushima.jp","date.fukushima.jp","fukushima.fukushima.jp","furudono.fukushima.jp","futaba.fukushima.jp","hanawa.fukushima.jp","higashi.fukushima.jp","hirata.fukushima.jp","hirono.fukushima.jp","iitate.fukushima.jp","inawashiro.fukushima.jp","ishikawa.fukushima.jp","iwaki.fukushima.jp","izumizaki.fukushima.jp","kagamiishi.fukushima.jp","kaneyama.fukushima.jp","kawamata.fukushima.jp","kitakata.fukushima.jp","kitashiobara.fukushima.jp","koori.fukushima.jp","koriyama.fukushima.jp","kunimi.fukushima.jp","miharu.fukushima.jp","mishima.fukushima.jp","namie.fukushima.jp","nango.fukushima.jp","nishiaizu.fukushima.jp","nishigo.fukushima.jp","okuma.fukushima.jp","omotego.fukushima.jp","ono.fukushima.jp","otama.fukushima.jp","samegawa.fukushima.jp","shimogo.fukushima.jp","shirakawa.fukushima.jp","showa.fukushima.jp","soma.fukushima.jp","sukagawa.fukushima.jp","taishin.fukushima.jp","tamakawa.fukushima.jp","tanagura.fukushima.jp","tenei.fukushima.jp","yabuki.fukushima.jp","yamato.fukushima.jp","yamatsuri.fukushima.jp","yanaizu.fukushima.jp","yugawa.fukushima.jp","anpachi.gifu.jp","ena.gifu.jp","gifu.gifu.jp","ginan.gifu.jp","godo.gifu.jp","gujo.gifu.jp","hashima.gifu.jp","hichiso.gifu.jp","hida.gifu.jp","higashishirakawa.gifu.jp","ibigawa.gifu.jp","ikeda.gifu.jp","kakamigahara.gifu.jp","kani.gifu.jp","kasahara.gifu.jp","kasamatsu.gifu.jp","kawaue.gifu.jp","kitagata.gifu.jp","mino.gifu.jp","minokamo.gifu.jp","mitake.gifu.jp","mizunami.gifu.jp","motosu.gifu.jp","nakatsugawa.gifu.jp","ogaki.gifu.jp","sakahogi.gifu.jp","seki.gifu.jp","sekigahara.gifu.jp","shirakawa.gifu.jp","tajimi.gifu.jp","takayama.gifu.jp","tarui.gifu.jp","toki.gifu.jp","tomika.gifu.jp","wanouchi.gifu.jp","yamagata.gifu.jp","yaotsu.gifu.jp","yoro.gifu.jp","annaka.gunma.jp","chiyoda.gunma.jp","fujioka.gunma.jp","higashiagatsuma.gunma.jp","isesaki.gunma.jp","itakura.gunma.jp","kanna.gunma.jp","kanra.gunma.jp","katashina.gunma.jp","kawaba.gunma.jp","kiryu.gunma.jp","kusatsu.gunma.jp","maebashi.gunma.jp","meiwa.gunma.jp","midori.gunma.jp","minakami.gunma.jp","naganohara.gunma.jp","nakanojo.gunma.jp","nanmoku.gunma.jp","numata.gunma.jp","oizumi.gunma.jp","ora.gunma.jp","ota.gunma.jp","shibukawa.gunma.jp","shimonita.gunma.jp","shinto.gunma.jp","showa.gunma.jp","takasaki.gunma.jp","takayama.gunma.jp","tamamura.gunma.jp","tatebayashi.gunma.jp","tomioka.gunma.jp","tsukiyono.gunma.jp","tsumagoi.gunma.jp","ueno.gunma.jp","yoshioka.gunma.jp","asaminami.hiroshima.jp","daiwa.hiroshima.jp","etajima.hiroshima.jp","fuchu.hiroshima.jp","fukuyama.hiroshima.jp","hatsukaichi.hiroshima.jp","higashihiroshima.hiroshima.jp","hongo.hiroshima.jp","jinsekikogen.hiroshima.jp","kaita.hiroshima.jp","kui.hiroshima.jp","kumano.hiroshima.jp","kure.hiroshima.jp","mihara.hiroshima.jp","miyoshi.hiroshima.jp","naka.hiroshima.jp","onomichi.hiroshima.jp","osakikamijima.hiroshima.jp","otake.hiroshima.jp","saka.hiroshima.jp","sera.hiroshima.jp","seranishi.hiroshima.jp","shinichi.hiroshima.jp","shobara.hiroshima.jp","takehara.hiroshima.jp","abashiri.hokkaido.jp","abira.hokkaido.jp","aibetsu.hokkaido.jp","akabira.hokkaido.jp","akkeshi.hokkaido.jp","asahikawa.hokkaido.jp","ashibetsu.hokkaido.jp","ashoro.hokkaido.jp","assabu.hokkaido.jp","atsuma.hokkaido.jp","bibai.hokkaido.jp","biei.hokkaido.jp","bifuka.hokkaido.jp","bihoro.hokkaido.jp","biratori.hokkaido.jp","chippubetsu.hokkaido.jp","chitose.hokkaido.jp","date.hokkaido.jp","ebetsu.hokkaido.jp","embetsu.hokkaido.jp","eniwa.hokkaido.jp","erimo.hokkaido.jp","esan.hokkaido.jp","esashi.hokkaido.jp","fukagawa.hokkaido.jp","fukushima.hokkaido.jp","furano.hokkaido.jp","furubira.hokkaido.jp","haboro.hokkaido.jp","hakodate.hokkaido.jp","hamatonbetsu.hokkaido.jp","hidaka.hokkaido.jp","higashikagura.hokkaido.jp","higashikawa.hokkaido.jp","hiroo.hokkaido.jp","hokuryu.hokkaido.jp","hokuto.hokkaido.jp","honbetsu.hokkaido.jp","horokanai.hokkaido.jp","horonobe.hokkaido.jp","ikeda.hokkaido.jp","imakane.hokkaido.jp","ishikari.hokkaido.jp","iwamizawa.hokkaido.jp","iwanai.hokkaido.jp","kamifurano.hokkaido.jp","kamikawa.hokkaido.jp","kamishihoro.hokkaido.jp","kamisunagawa.hokkaido.jp","kamoenai.hokkaido.jp","kayabe.hokkaido.jp","kembuchi.hokkaido.jp","kikonai.hokkaido.jp","kimobetsu.hokkaido.jp","kitahiroshima.hokkaido.jp","kitami.hokkaido.jp","kiyosato.hokkaido.jp","koshimizu.hokkaido.jp","kunneppu.hokkaido.jp","kuriyama.hokkaido.jp","kuromatsunai.hokkaido.jp","kushiro.hokkaido.jp","kutchan.hokkaido.jp","kyowa.hokkaido.jp","mashike.hokkaido.jp","matsumae.hokkaido.jp","mikasa.hokkaido.jp","minamifurano.hokkaido.jp","mombetsu.hokkaido.jp","moseushi.hokkaido.jp","mukawa.hokkaido.jp","muroran.hokkaido.jp","naie.hokkaido.jp","nakagawa.hokkaido.jp","nakasatsunai.hokkaido.jp","nakatombetsu.hokkaido.jp","nanae.hokkaido.jp","nanporo.hokkaido.jp","nayoro.hokkaido.jp","nemuro.hokkaido.jp","niikappu.hokkaido.jp","niki.hokkaido.jp","nishiokoppe.hokkaido.jp","noboribetsu.hokkaido.jp","numata.hokkaido.jp","obihiro.hokkaido.jp","obira.hokkaido.jp","oketo.hokkaido.jp","okoppe.hokkaido.jp","otaru.hokkaido.jp","otobe.hokkaido.jp","otofuke.hokkaido.jp","otoineppu.hokkaido.jp","oumu.hokkaido.jp","ozora.hokkaido.jp","pippu.hokkaido.jp","rankoshi.hokkaido.jp","rebun.hokkaido.jp","rikubetsu.hokkaido.jp","rishiri.hokkaido.jp","rishirifuji.hokkaido.jp","saroma.hokkaido.jp","sarufutsu.hokkaido.jp","shakotan.hokkaido.jp","shari.hokkaido.jp","shibecha.hokkaido.jp","shibetsu.hokkaido.jp","shikabe.hokkaido.jp","shikaoi.hokkaido.jp","shimamaki.hokkaido.jp","shimizu.hokkaido.jp","shimokawa.hokkaido.jp","shinshinotsu.hokkaido.jp","shintoku.hokkaido.jp","shiranuka.hokkaido.jp","shiraoi.hokkaido.jp","shiriuchi.hokkaido.jp","sobetsu.hokkaido.jp","sunagawa.hokkaido.jp","taiki.hokkaido.jp","takasu.hokkaido.jp","takikawa.hokkaido.jp","takinoue.hokkaido.jp","teshikaga.hokkaido.jp","tobetsu.hokkaido.jp","tohma.hokkaido.jp","tomakomai.hokkaido.jp","tomari.hokkaido.jp","toya.hokkaido.jp","toyako.hokkaido.jp","toyotomi.hokkaido.jp","toyoura.hokkaido.jp","tsubetsu.hokkaido.jp","tsukigata.hokkaido.jp","urakawa.hokkaido.jp","urausu.hokkaido.jp","uryu.hokkaido.jp","utashinai.hokkaido.jp","wakkanai.hokkaido.jp","wassamu.hokkaido.jp","yakumo.hokkaido.jp","yoichi.hokkaido.jp","aioi.hyogo.jp","akashi.hyogo.jp","ako.hyogo.jp","amagasaki.hyogo.jp","aogaki.hyogo.jp","asago.hyogo.jp","ashiya.hyogo.jp","awaji.hyogo.jp","fukusaki.hyogo.jp","goshiki.hyogo.jp","harima.hyogo.jp","himeji.hyogo.jp","ichikawa.hyogo.jp","inagawa.hyogo.jp","itami.hyogo.jp","kakogawa.hyogo.jp","kamigori.hyogo.jp","kamikawa.hyogo.jp","kasai.hyogo.jp","kasuga.hyogo.jp","kawanishi.hyogo.jp","miki.hyogo.jp","minamiawaji.hyogo.jp","nishinomiya.hyogo.jp","nishiwaki.hyogo.jp","ono.hyogo.jp","sanda.hyogo.jp","sannan.hyogo.jp","sasayama.hyogo.jp","sayo.hyogo.jp","shingu.hyogo.jp","shinonsen.hyogo.jp","shiso.hyogo.jp","sumoto.hyogo.jp","taishi.hyogo.jp","taka.hyogo.jp","takarazuka.hyogo.jp","takasago.hyogo.jp","takino.hyogo.jp","tamba.hyogo.jp","tatsuno.hyogo.jp","toyooka.hyogo.jp","yabu.hyogo.jp","yashiro.hyogo.jp","yoka.hyogo.jp","yokawa.hyogo.jp","ami.ibaraki.jp","asahi.ibaraki.jp","bando.ibaraki.jp","chikusei.ibaraki.jp","daigo.ibaraki.jp","fujishiro.ibaraki.jp","hitachi.ibaraki.jp","hitachinaka.ibaraki.jp","hitachiomiya.ibaraki.jp","hitachiota.ibaraki.jp","ibaraki.ibaraki.jp","ina.ibaraki.jp","inashiki.ibaraki.jp","itako.ibaraki.jp","iwama.ibaraki.jp","joso.ibaraki.jp","kamisu.ibaraki.jp","kasama.ibaraki.jp","kashima.ibaraki.jp","kasumigaura.ibaraki.jp","koga.ibaraki.jp","miho.ibaraki.jp","mito.ibaraki.jp","moriya.ibaraki.jp","naka.ibaraki.jp","namegata.ibaraki.jp","oarai.ibaraki.jp","ogawa.ibaraki.jp","omitama.ibaraki.jp","ryugasaki.ibaraki.jp","sakai.ibaraki.jp","sakuragawa.ibaraki.jp","shimodate.ibaraki.jp","shimotsuma.ibaraki.jp","shirosato.ibaraki.jp","sowa.ibaraki.jp","suifu.ibaraki.jp","takahagi.ibaraki.jp","tamatsukuri.ibaraki.jp","tokai.ibaraki.jp","tomobe.ibaraki.jp","tone.ibaraki.jp","toride.ibaraki.jp","tsuchiura.ibaraki.jp","tsukuba.ibaraki.jp","uchihara.ibaraki.jp","ushiku.ibaraki.jp","yachiyo.ibaraki.jp","yamagata.ibaraki.jp","yawara.ibaraki.jp","yuki.ibaraki.jp","anamizu.ishikawa.jp","hakui.ishikawa.jp","hakusan.ishikawa.jp","kaga.ishikawa.jp","kahoku.ishikawa.jp","kanazawa.ishikawa.jp","kawakita.ishikawa.jp","komatsu.ishikawa.jp","nakanoto.ishikawa.jp","nanao.ishikawa.jp","nomi.ishikawa.jp","nonoichi.ishikawa.jp","noto.ishikawa.jp","shika.ishikawa.jp","suzu.ishikawa.jp","tsubata.ishikawa.jp","tsurugi.ishikawa.jp","uchinada.ishikawa.jp","wajima.ishikawa.jp","fudai.iwate.jp","fujisawa.iwate.jp","hanamaki.iwate.jp","hiraizumi.iwate.jp","hirono.iwate.jp","ichinohe.iwate.jp","ichinoseki.iwate.jp","iwaizumi.iwate.jp","iwate.iwate.jp","joboji.iwate.jp","kamaishi.iwate.jp","kanegasaki.iwate.jp","karumai.iwate.jp","kawai.iwate.jp","kitakami.iwate.jp","kuji.iwate.jp","kunohe.iwate.jp","kuzumaki.iwate.jp","miyako.iwate.jp","mizusawa.iwate.jp","morioka.iwate.jp","ninohe.iwate.jp","noda.iwate.jp","ofunato.iwate.jp","oshu.iwate.jp","otsuchi.iwate.jp","rikuzentakata.iwate.jp","shiwa.iwate.jp","shizukuishi.iwate.jp","sumita.iwate.jp","tanohata.iwate.jp","tono.iwate.jp","yahaba.iwate.jp","yamada.iwate.jp","ayagawa.kagawa.jp","higashikagawa.kagawa.jp","kanonji.kagawa.jp","kotohira.kagawa.jp","manno.kagawa.jp","marugame.kagawa.jp","mitoyo.kagawa.jp","naoshima.kagawa.jp","sanuki.kagawa.jp","tadotsu.kagawa.jp","takamatsu.kagawa.jp","tonosho.kagawa.jp","uchinomi.kagawa.jp","utazu.kagawa.jp","zentsuji.kagawa.jp","akune.kagoshima.jp","amami.kagoshima.jp","hioki.kagoshima.jp","isa.kagoshima.jp","isen.kagoshima.jp","izumi.kagoshima.jp","kagoshima.kagoshima.jp","kanoya.kagoshima.jp","kawanabe.kagoshima.jp","kinko.kagoshima.jp","kouyama.kagoshima.jp","makurazaki.kagoshima.jp","matsumoto.kagoshima.jp","minamitane.kagoshima.jp","nakatane.kagoshima.jp","nishinoomote.kagoshima.jp","satsumasendai.kagoshima.jp","soo.kagoshima.jp","tarumizu.kagoshima.jp","yusui.kagoshima.jp","aikawa.kanagawa.jp","atsugi.kanagawa.jp","ayase.kanagawa.jp","chigasaki.kanagawa.jp","ebina.kanagawa.jp","fujisawa.kanagawa.jp","hadano.kanagawa.jp","hakone.kanagawa.jp","hiratsuka.kanagawa.jp","isehara.kanagawa.jp","kaisei.kanagawa.jp","kamakura.kanagawa.jp","kiyokawa.kanagawa.jp","matsuda.kanagawa.jp","minamiashigara.kanagawa.jp","miura.kanagawa.jp","nakai.kanagawa.jp","ninomiya.kanagawa.jp","odawara.kanagawa.jp","oi.kanagawa.jp","oiso.kanagawa.jp","sagamihara.kanagawa.jp","samukawa.kanagawa.jp","tsukui.kanagawa.jp","yamakita.kanagawa.jp","yamato.kanagawa.jp","yokosuka.kanagawa.jp","yugawara.kanagawa.jp","zama.kanagawa.jp","zushi.kanagawa.jp","aki.kochi.jp","geisei.kochi.jp","hidaka.kochi.jp","higashitsuno.kochi.jp","ino.kochi.jp","kagami.kochi.jp","kami.kochi.jp","kitagawa.kochi.jp","kochi.kochi.jp","mihara.kochi.jp","motoyama.kochi.jp","muroto.kochi.jp","nahari.kochi.jp","nakamura.kochi.jp","nankoku.kochi.jp","nishitosa.kochi.jp","niyodogawa.kochi.jp","ochi.kochi.jp","okawa.kochi.jp","otoyo.kochi.jp","otsuki.kochi.jp","sakawa.kochi.jp","sukumo.kochi.jp","susaki.kochi.jp","tosa.kochi.jp","tosashimizu.kochi.jp","toyo.kochi.jp","tsuno.kochi.jp","umaji.kochi.jp","yasuda.kochi.jp","yusuhara.kochi.jp","amakusa.kumamoto.jp","arao.kumamoto.jp","aso.kumamoto.jp","choyo.kumamoto.jp","gyokuto.kumamoto.jp","kamiamakusa.kumamoto.jp","kikuchi.kumamoto.jp","kumamoto.kumamoto.jp","mashiki.kumamoto.jp","mifune.kumamoto.jp","minamata.kumamoto.jp","minamioguni.kumamoto.jp","nagasu.kumamoto.jp","nishihara.kumamoto.jp","oguni.kumamoto.jp","ozu.kumamoto.jp","sumoto.kumamoto.jp","takamori.kumamoto.jp","uki.kumamoto.jp","uto.kumamoto.jp","yamaga.kumamoto.jp","yamato.kumamoto.jp","yatsushiro.kumamoto.jp","ayabe.kyoto.jp","fukuchiyama.kyoto.jp","higashiyama.kyoto.jp","ide.kyoto.jp","ine.kyoto.jp","joyo.kyoto.jp","kameoka.kyoto.jp","kamo.kyoto.jp","kita.kyoto.jp","kizu.kyoto.jp","kumiyama.kyoto.jp","kyotamba.kyoto.jp","kyotanabe.kyoto.jp","kyotango.kyoto.jp","maizuru.kyoto.jp","minami.kyoto.jp","minamiyamashiro.kyoto.jp","miyazu.kyoto.jp","muko.kyoto.jp","nagaokakyo.kyoto.jp","nakagyo.kyoto.jp","nantan.kyoto.jp","oyamazaki.kyoto.jp","sakyo.kyoto.jp","seika.kyoto.jp","tanabe.kyoto.jp","uji.kyoto.jp","ujitawara.kyoto.jp","wazuka.kyoto.jp","yamashina.kyoto.jp","yawata.kyoto.jp","asahi.mie.jp","inabe.mie.jp","ise.mie.jp","kameyama.mie.jp","kawagoe.mie.jp","kiho.mie.jp","kisosaki.mie.jp","kiwa.mie.jp","komono.mie.jp","kumano.mie.jp","kuwana.mie.jp","matsusaka.mie.jp","meiwa.mie.jp","mihama.mie.jp","minamiise.mie.jp","misugi.mie.jp","miyama.mie.jp","nabari.mie.jp","shima.mie.jp","suzuka.mie.jp","tado.mie.jp","taiki.mie.jp","taki.mie.jp","tamaki.mie.jp","toba.mie.jp","tsu.mie.jp","udono.mie.jp","ureshino.mie.jp","watarai.mie.jp","yokkaichi.mie.jp","furukawa.miyagi.jp","higashimatsushima.miyagi.jp","ishinomaki.miyagi.jp","iwanuma.miyagi.jp","kakuda.miyagi.jp","kami.miyagi.jp","kawasaki.miyagi.jp","marumori.miyagi.jp","matsushima.miyagi.jp","minamisanriku.miyagi.jp","misato.miyagi.jp","murata.miyagi.jp","natori.miyagi.jp","ogawara.miyagi.jp","ohira.miyagi.jp","onagawa.miyagi.jp","osaki.miyagi.jp","rifu.miyagi.jp","semine.miyagi.jp","shibata.miyagi.jp","shichikashuku.miyagi.jp","shikama.miyagi.jp","shiogama.miyagi.jp","shiroishi.miyagi.jp","tagajo.miyagi.jp","taiwa.miyagi.jp","tome.miyagi.jp","tomiya.miyagi.jp","wakuya.miyagi.jp","watari.miyagi.jp","yamamoto.miyagi.jp","zao.miyagi.jp","aya.miyazaki.jp","ebino.miyazaki.jp","gokase.miyazaki.jp","hyuga.miyazaki.jp","kadogawa.miyazaki.jp","kawaminami.miyazaki.jp","kijo.miyazaki.jp","kitagawa.miyazaki.jp","kitakata.miyazaki.jp","kitaura.miyazaki.jp","kobayashi.miyazaki.jp","kunitomi.miyazaki.jp","kushima.miyazaki.jp","mimata.miyazaki.jp","miyakonojo.miyazaki.jp","miyazaki.miyazaki.jp","morotsuka.miyazaki.jp","nichinan.miyazaki.jp","nishimera.miyazaki.jp","nobeoka.miyazaki.jp","saito.miyazaki.jp","shiiba.miyazaki.jp","shintomi.miyazaki.jp","takaharu.miyazaki.jp","takanabe.miyazaki.jp","takazaki.miyazaki.jp","tsuno.miyazaki.jp","achi.nagano.jp","agematsu.nagano.jp","anan.nagano.jp","aoki.nagano.jp","asahi.nagano.jp","azumino.nagano.jp","chikuhoku.nagano.jp","chikuma.nagano.jp","chino.nagano.jp","fujimi.nagano.jp","hakuba.nagano.jp","hara.nagano.jp","hiraya.nagano.jp","iida.nagano.jp","iijima.nagano.jp","iiyama.nagano.jp","iizuna.nagano.jp","ikeda.nagano.jp","ikusaka.nagano.jp","ina.nagano.jp","karuizawa.nagano.jp","kawakami.nagano.jp","kiso.nagano.jp","kisofukushima.nagano.jp","kitaaiki.nagano.jp","komagane.nagano.jp","komoro.nagano.jp","matsukawa.nagano.jp","matsumoto.nagano.jp","miasa.nagano.jp","minamiaiki.nagano.jp","minamimaki.nagano.jp","minamiminowa.nagano.jp","minowa.nagano.jp","miyada.nagano.jp","miyota.nagano.jp","mochizuki.nagano.jp","nagano.nagano.jp","nagawa.nagano.jp","nagiso.nagano.jp","nakagawa.nagano.jp","nakano.nagano.jp","nozawaonsen.nagano.jp","obuse.nagano.jp","ogawa.nagano.jp","okaya.nagano.jp","omachi.nagano.jp","omi.nagano.jp","ookuwa.nagano.jp","ooshika.nagano.jp","otaki.nagano.jp","otari.nagano.jp","sakae.nagano.jp","sakaki.nagano.jp","saku.nagano.jp","sakuho.nagano.jp","shimosuwa.nagano.jp","shinanomachi.nagano.jp","shiojiri.nagano.jp","suwa.nagano.jp","suzaka.nagano.jp","takagi.nagano.jp","takamori.nagano.jp","takayama.nagano.jp","tateshina.nagano.jp","tatsuno.nagano.jp","togakushi.nagano.jp","togura.nagano.jp","tomi.nagano.jp","ueda.nagano.jp","wada.nagano.jp","yamagata.nagano.jp","yamanouchi.nagano.jp","yasaka.nagano.jp","yasuoka.nagano.jp","chijiwa.nagasaki.jp","futsu.nagasaki.jp","goto.nagasaki.jp","hasami.nagasaki.jp","hirado.nagasaki.jp","iki.nagasaki.jp","isahaya.nagasaki.jp","kawatana.nagasaki.jp","kuchinotsu.nagasaki.jp","matsuura.nagasaki.jp","nagasaki.nagasaki.jp","obama.nagasaki.jp","omura.nagasaki.jp","oseto.nagasaki.jp","saikai.nagasaki.jp","sasebo.nagasaki.jp","seihi.nagasaki.jp","shimabara.nagasaki.jp","shinkamigoto.nagasaki.jp","togitsu.nagasaki.jp","tsushima.nagasaki.jp","unzen.nagasaki.jp","ando.nara.jp","gose.nara.jp","heguri.nara.jp","higashiyoshino.nara.jp","ikaruga.nara.jp","ikoma.nara.jp","kamikitayama.nara.jp","kanmaki.nara.jp","kashiba.nara.jp","kashihara.nara.jp","katsuragi.nara.jp","kawai.nara.jp","kawakami.nara.jp","kawanishi.nara.jp","koryo.nara.jp","kurotaki.nara.jp","mitsue.nara.jp","miyake.nara.jp","nara.nara.jp","nosegawa.nara.jp","oji.nara.jp","ouda.nara.jp","oyodo.nara.jp","sakurai.nara.jp","sango.nara.jp","shimoichi.nara.jp","shimokitayama.nara.jp","shinjo.nara.jp","soni.nara.jp","takatori.nara.jp","tawaramoto.nara.jp","tenkawa.nara.jp","tenri.nara.jp","uda.nara.jp","yamatokoriyama.nara.jp","yamatotakada.nara.jp","yamazoe.nara.jp","yoshino.nara.jp","aga.niigata.jp","agano.niigata.jp","gosen.niigata.jp","itoigawa.niigata.jp","izumozaki.niigata.jp","joetsu.niigata.jp","kamo.niigata.jp","kariwa.niigata.jp","kashiwazaki.niigata.jp","minamiuonuma.niigata.jp","mitsuke.niigata.jp","muika.niigata.jp","murakami.niigata.jp","myoko.niigata.jp","nagaoka.niigata.jp","niigata.niigata.jp","ojiya.niigata.jp","omi.niigata.jp","sado.niigata.jp","sanjo.niigata.jp","seiro.niigata.jp","seirou.niigata.jp","sekikawa.niigata.jp","shibata.niigata.jp","tagami.niigata.jp","tainai.niigata.jp","tochio.niigata.jp","tokamachi.niigata.jp","tsubame.niigata.jp","tsunan.niigata.jp","uonuma.niigata.jp","yahiko.niigata.jp","yoita.niigata.jp","yuzawa.niigata.jp","beppu.oita.jp","bungoono.oita.jp","bungotakada.oita.jp","hasama.oita.jp","hiji.oita.jp","himeshima.oita.jp","hita.oita.jp","kamitsue.oita.jp","kokonoe.oita.jp","kuju.oita.jp","kunisaki.oita.jp","kusu.oita.jp","oita.oita.jp","saiki.oita.jp","taketa.oita.jp","tsukumi.oita.jp","usa.oita.jp","usuki.oita.jp","yufu.oita.jp","akaiwa.okayama.jp","asakuchi.okayama.jp","bizen.okayama.jp","hayashima.okayama.jp","ibara.okayama.jp","kagamino.okayama.jp","kasaoka.okayama.jp","kibichuo.okayama.jp","kumenan.okayama.jp","kurashiki.okayama.jp","maniwa.okayama.jp","misaki.okayama.jp","nagi.okayama.jp","niimi.okayama.jp","nishiawakura.okayama.jp","okayama.okayama.jp","satosho.okayama.jp","setouchi.okayama.jp","shinjo.okayama.jp","shoo.okayama.jp","soja.okayama.jp","takahashi.okayama.jp","tamano.okayama.jp","tsuyama.okayama.jp","wake.okayama.jp","yakage.okayama.jp","aguni.okinawa.jp","ginowan.okinawa.jp","ginoza.okinawa.jp","gushikami.okinawa.jp","haebaru.okinawa.jp","higashi.okinawa.jp","hirara.okinawa.jp","iheya.okinawa.jp","ishigaki.okinawa.jp","ishikawa.okinawa.jp","itoman.okinawa.jp","izena.okinawa.jp","kadena.okinawa.jp","kin.okinawa.jp","kitadaito.okinawa.jp","kitanakagusuku.okinawa.jp","kumejima.okinawa.jp","kunigami.okinawa.jp","minamidaito.okinawa.jp","motobu.okinawa.jp","nago.okinawa.jp","naha.okinawa.jp","nakagusuku.okinawa.jp","nakijin.okinawa.jp","nanjo.okinawa.jp","nishihara.okinawa.jp","ogimi.okinawa.jp","okinawa.okinawa.jp","onna.okinawa.jp","shimoji.okinawa.jp","taketomi.okinawa.jp","tarama.okinawa.jp","tokashiki.okinawa.jp","tomigusuku.okinawa.jp","tonaki.okinawa.jp","urasoe.okinawa.jp","uruma.okinawa.jp","yaese.okinawa.jp","yomitan.okinawa.jp","yonabaru.okinawa.jp","yonaguni.okinawa.jp","zamami.okinawa.jp","abeno.osaka.jp","chihayaakasaka.osaka.jp","chuo.osaka.jp","daito.osaka.jp","fujiidera.osaka.jp","habikino.osaka.jp","hannan.osaka.jp","higashiosaka.osaka.jp","higashisumiyoshi.osaka.jp","higashiyodogawa.osaka.jp","hirakata.osaka.jp","ibaraki.osaka.jp","ikeda.osaka.jp","izumi.osaka.jp","izumiotsu.osaka.jp","izumisano.osaka.jp","kadoma.osaka.jp","kaizuka.osaka.jp","kanan.osaka.jp","kashiwara.osaka.jp","katano.osaka.jp","kawachinagano.osaka.jp","kishiwada.osaka.jp","kita.osaka.jp","kumatori.osaka.jp","matsubara.osaka.jp","minato.osaka.jp","minoh.osaka.jp","misaki.osaka.jp","moriguchi.osaka.jp","neyagawa.osaka.jp","nishi.osaka.jp","nose.osaka.jp","osakasayama.osaka.jp","sakai.osaka.jp","sayama.osaka.jp","sennan.osaka.jp","settsu.osaka.jp","shijonawate.osaka.jp","shimamoto.osaka.jp","suita.osaka.jp","tadaoka.osaka.jp","taishi.osaka.jp","tajiri.osaka.jp","takaishi.osaka.jp","takatsuki.osaka.jp","tondabayashi.osaka.jp","toyonaka.osaka.jp","toyono.osaka.jp","yao.osaka.jp","ariake.saga.jp","arita.saga.jp","fukudomi.saga.jp","genkai.saga.jp","hamatama.saga.jp","hizen.saga.jp","imari.saga.jp","kamimine.saga.jp","kanzaki.saga.jp","karatsu.saga.jp","kashima.saga.jp","kitagata.saga.jp","kitahata.saga.jp","kiyama.saga.jp","kouhoku.saga.jp","kyuragi.saga.jp","nishiarita.saga.jp","ogi.saga.jp","omachi.saga.jp","ouchi.saga.jp","saga.saga.jp","shiroishi.saga.jp","taku.saga.jp","tara.saga.jp","tosu.saga.jp","yoshinogari.saga.jp","arakawa.saitama.jp","asaka.saitama.jp","chichibu.saitama.jp","fujimi.saitama.jp","fujimino.saitama.jp","fukaya.saitama.jp","hanno.saitama.jp","hanyu.saitama.jp","hasuda.saitama.jp","hatogaya.saitama.jp","hatoyama.saitama.jp","hidaka.saitama.jp","higashichichibu.saitama.jp","higashimatsuyama.saitama.jp","honjo.saitama.jp","ina.saitama.jp","iruma.saitama.jp","iwatsuki.saitama.jp","kamiizumi.saitama.jp","kamikawa.saitama.jp","kamisato.saitama.jp","kasukabe.saitama.jp","kawagoe.saitama.jp","kawaguchi.saitama.jp","kawajima.saitama.jp","kazo.saitama.jp","kitamoto.saitama.jp","koshigaya.saitama.jp","kounosu.saitama.jp","kuki.saitama.jp","kumagaya.saitama.jp","matsubushi.saitama.jp","minano.saitama.jp","misato.saitama.jp","miyashiro.saitama.jp","miyoshi.saitama.jp","moroyama.saitama.jp","nagatoro.saitama.jp","namegawa.saitama.jp","niiza.saitama.jp","ogano.saitama.jp","ogawa.saitama.jp","ogose.saitama.jp","okegawa.saitama.jp","omiya.saitama.jp","otaki.saitama.jp","ranzan.saitama.jp","ryokami.saitama.jp","saitama.saitama.jp","sakado.saitama.jp","satte.saitama.jp","sayama.saitama.jp","shiki.saitama.jp","shiraoka.saitama.jp","soka.saitama.jp","sugito.saitama.jp","toda.saitama.jp","tokigawa.saitama.jp","tokorozawa.saitama.jp","tsurugashima.saitama.jp","urawa.saitama.jp","warabi.saitama.jp","yashio.saitama.jp","yokoze.saitama.jp","yono.saitama.jp","yorii.saitama.jp","yoshida.saitama.jp","yoshikawa.saitama.jp","yoshimi.saitama.jp","aisho.shiga.jp","gamo.shiga.jp","higashiomi.shiga.jp","hikone.shiga.jp","koka.shiga.jp","konan.shiga.jp","kosei.shiga.jp","koto.shiga.jp","kusatsu.shiga.jp","maibara.shiga.jp","moriyama.shiga.jp","nagahama.shiga.jp","nishiazai.shiga.jp","notogawa.shiga.jp","omihachiman.shiga.jp","otsu.shiga.jp","ritto.shiga.jp","ryuoh.shiga.jp","takashima.shiga.jp","takatsuki.shiga.jp","torahime.shiga.jp","toyosato.shiga.jp","yasu.shiga.jp","akagi.shimane.jp","ama.shimane.jp","gotsu.shimane.jp","hamada.shimane.jp","higashiizumo.shimane.jp","hikawa.shimane.jp","hikimi.shimane.jp","izumo.shimane.jp","kakinoki.shimane.jp","masuda.shimane.jp","matsue.shimane.jp","misato.shimane.jp","nishinoshima.shimane.jp","ohda.shimane.jp","okinoshima.shimane.jp","okuizumo.shimane.jp","shimane.shimane.jp","tamayu.shimane.jp","tsuwano.shimane.jp","unnan.shimane.jp","yakumo.shimane.jp","yasugi.shimane.jp","yatsuka.shimane.jp","arai.shizuoka.jp","atami.shizuoka.jp","fuji.shizuoka.jp","fujieda.shizuoka.jp","fujikawa.shizuoka.jp","fujinomiya.shizuoka.jp","fukuroi.shizuoka.jp","gotemba.shizuoka.jp","haibara.shizuoka.jp","hamamatsu.shizuoka.jp","higashiizu.shizuoka.jp","ito.shizuoka.jp","iwata.shizuoka.jp","izu.shizuoka.jp","izunokuni.shizuoka.jp","kakegawa.shizuoka.jp","kannami.shizuoka.jp","kawanehon.shizuoka.jp","kawazu.shizuoka.jp","kikugawa.shizuoka.jp","kosai.shizuoka.jp","makinohara.shizuoka.jp","matsuzaki.shizuoka.jp","minamiizu.shizuoka.jp","mishima.shizuoka.jp","morimachi.shizuoka.jp","nishiizu.shizuoka.jp","numazu.shizuoka.jp","omaezaki.shizuoka.jp","shimada.shizuoka.jp","shimizu.shizuoka.jp","shimoda.shizuoka.jp","shizuoka.shizuoka.jp","susono.shizuoka.jp","yaizu.shizuoka.jp","yoshida.shizuoka.jp","ashikaga.tochigi.jp","bato.tochigi.jp","haga.tochigi.jp","ichikai.tochigi.jp","iwafune.tochigi.jp","kaminokawa.tochigi.jp","kanuma.tochigi.jp","karasuyama.tochigi.jp","kuroiso.tochigi.jp","mashiko.tochigi.jp","mibu.tochigi.jp","moka.tochigi.jp","motegi.tochigi.jp","nasu.tochigi.jp","nasushiobara.tochigi.jp","nikko.tochigi.jp","nishikata.tochigi.jp","nogi.tochigi.jp","ohira.tochigi.jp","ohtawara.tochigi.jp","oyama.tochigi.jp","sakura.tochigi.jp","sano.tochigi.jp","shimotsuke.tochigi.jp","shioya.tochigi.jp","takanezawa.tochigi.jp","tochigi.tochigi.jp","tsuga.tochigi.jp","ujiie.tochigi.jp","utsunomiya.tochigi.jp","yaita.tochigi.jp","aizumi.tokushima.jp","anan.tokushima.jp","ichiba.tokushima.jp","itano.tokushima.jp","kainan.tokushima.jp","komatsushima.tokushima.jp","matsushige.tokushima.jp","mima.tokushima.jp","minami.tokushima.jp","miyoshi.tokushima.jp","mugi.tokushima.jp","nakagawa.tokushima.jp","naruto.tokushima.jp","sanagochi.tokushima.jp","shishikui.tokushima.jp","tokushima.tokushima.jp","wajiki.tokushima.jp","adachi.tokyo.jp","akiruno.tokyo.jp","akishima.tokyo.jp","aogashima.tokyo.jp","arakawa.tokyo.jp","bunkyo.tokyo.jp","chiyoda.tokyo.jp","chofu.tokyo.jp","chuo.tokyo.jp","edogawa.tokyo.jp","fuchu.tokyo.jp","fussa.tokyo.jp","hachijo.tokyo.jp","hachioji.tokyo.jp","hamura.tokyo.jp","higashikurume.tokyo.jp","higashimurayama.tokyo.jp","higashiyamato.tokyo.jp","hino.tokyo.jp","hinode.tokyo.jp","hinohara.tokyo.jp","inagi.tokyo.jp","itabashi.tokyo.jp","katsushika.tokyo.jp","kita.tokyo.jp","kiyose.tokyo.jp","kodaira.tokyo.jp","koganei.tokyo.jp","kokubunji.tokyo.jp","komae.tokyo.jp","koto.tokyo.jp","kouzushima.tokyo.jp","kunitachi.tokyo.jp","machida.tokyo.jp","meguro.tokyo.jp","minato.tokyo.jp","mitaka.tokyo.jp","mizuho.tokyo.jp","musashimurayama.tokyo.jp","musashino.tokyo.jp","nakano.tokyo.jp","nerima.tokyo.jp","ogasawara.tokyo.jp","okutama.tokyo.jp","ome.tokyo.jp","oshima.tokyo.jp","ota.tokyo.jp","setagaya.tokyo.jp","shibuya.tokyo.jp","shinagawa.tokyo.jp","shinjuku.tokyo.jp","suginami.tokyo.jp","sumida.tokyo.jp","tachikawa.tokyo.jp","taito.tokyo.jp","tama.tokyo.jp","toshima.tokyo.jp","chizu.tottori.jp","hino.tottori.jp","kawahara.tottori.jp","koge.tottori.jp","kotoura.tottori.jp","misasa.tottori.jp","nanbu.tottori.jp","nichinan.tottori.jp","sakaiminato.tottori.jp","tottori.tottori.jp","wakasa.tottori.jp","yazu.tottori.jp","yonago.tottori.jp","asahi.toyama.jp","fuchu.toyama.jp","fukumitsu.toyama.jp","funahashi.toyama.jp","himi.toyama.jp","imizu.toyama.jp","inami.toyama.jp","johana.toyama.jp","kamiichi.toyama.jp","kurobe.toyama.jp","nakaniikawa.toyama.jp","namerikawa.toyama.jp","nanto.toyama.jp","nyuzen.toyama.jp","oyabe.toyama.jp","taira.toyama.jp","takaoka.toyama.jp","tateyama.toyama.jp","toga.toyama.jp","tonami.toyama.jp","toyama.toyama.jp","unazuki.toyama.jp","uozu.toyama.jp","yamada.toyama.jp","arida.wakayama.jp","aridagawa.wakayama.jp","gobo.wakayama.jp","hashimoto.wakayama.jp","hidaka.wakayama.jp","hirogawa.wakayama.jp","inami.wakayama.jp","iwade.wakayama.jp","kainan.wakayama.jp","kamitonda.wakayama.jp","katsuragi.wakayama.jp","kimino.wakayama.jp","kinokawa.wakayama.jp","kitayama.wakayama.jp","koya.wakayama.jp","koza.wakayama.jp","kozagawa.wakayama.jp","kudoyama.wakayama.jp","kushimoto.wakayama.jp","mihama.wakayama.jp","misato.wakayama.jp","nachikatsuura.wakayama.jp","shingu.wakayama.jp","shirahama.wakayama.jp","taiji.wakayama.jp","tanabe.wakayama.jp","wakayama.wakayama.jp","yuasa.wakayama.jp","yura.wakayama.jp","asahi.yamagata.jp","funagata.yamagata.jp","higashine.yamagata.jp","iide.yamagata.jp","kahoku.yamagata.jp","kaminoyama.yamagata.jp","kaneyama.yamagata.jp","kawanishi.yamagata.jp","mamurogawa.yamagata.jp","mikawa.yamagata.jp","murayama.yamagata.jp","nagai.yamagata.jp","nakayama.yamagata.jp","nanyo.yamagata.jp","nishikawa.yamagata.jp","obanazawa.yamagata.jp","oe.yamagata.jp","oguni.yamagata.jp","ohkura.yamagata.jp","oishida.yamagata.jp","sagae.yamagata.jp","sakata.yamagata.jp","sakegawa.yamagata.jp","shinjo.yamagata.jp","shirataka.yamagata.jp","shonai.yamagata.jp","takahata.yamagata.jp","tendo.yamagata.jp","tozawa.yamagata.jp","tsuruoka.yamagata.jp","yamagata.yamagata.jp","yamanobe.yamagata.jp","yonezawa.yamagata.jp","yuza.yamagata.jp","abu.yamaguchi.jp","hagi.yamaguchi.jp","hikari.yamaguchi.jp","hofu.yamaguchi.jp","iwakuni.yamaguchi.jp","kudamatsu.yamaguchi.jp","mitou.yamaguchi.jp","nagato.yamaguchi.jp","oshima.yamaguchi.jp","shimonoseki.yamaguchi.jp","shunan.yamaguchi.jp","tabuse.yamaguchi.jp","tokuyama.yamaguchi.jp","toyota.yamaguchi.jp","ube.yamaguchi.jp","yuu.yamaguchi.jp","chuo.yamanashi.jp","doshi.yamanashi.jp","fuefuki.yamanashi.jp","fujikawa.yamanashi.jp","fujikawaguchiko.yamanashi.jp","fujiyoshida.yamanashi.jp","hayakawa.yamanashi.jp","hokuto.yamanashi.jp","ichikawamisato.yamanashi.jp","kai.yamanashi.jp","kofu.yamanashi.jp","koshu.yamanashi.jp","kosuge.yamanashi.jp","minami-alps.yamanashi.jp","minobu.yamanashi.jp","nakamichi.yamanashi.jp","nanbu.yamanashi.jp","narusawa.yamanashi.jp","nirasaki.yamanashi.jp","nishikatsura.yamanashi.jp","oshino.yamanashi.jp","otsuki.yamanashi.jp","showa.yamanashi.jp","tabayama.yamanashi.jp","tsuru.yamanashi.jp","uenohara.yamanashi.jp","yamanakako.yamanashi.jp","yamanashi.yamanashi.jp","ke","ac.ke","co.ke","go.ke","info.ke","me.ke","mobi.ke","ne.ke","or.ke","sc.ke","kg","org.kg","net.kg","com.kg","edu.kg","gov.kg","mil.kg","*.kh","ki","edu.ki","biz.ki","net.ki","org.ki","gov.ki","info.ki","com.ki","km","org.km","nom.km","gov.km","prd.km","tm.km","edu.km","mil.km","ass.km","com.km","coop.km","asso.km","presse.km","medecin.km","notaires.km","pharmaciens.km","veterinaire.km","gouv.km","kn","net.kn","org.kn","edu.kn","gov.kn","kp","com.kp","edu.kp","gov.kp","org.kp","rep.kp","tra.kp","kr","ac.kr","co.kr","es.kr","go.kr","hs.kr","kg.kr","mil.kr","ms.kr","ne.kr","or.kr","pe.kr","re.kr","sc.kr","busan.kr","chungbuk.kr","chungnam.kr","daegu.kr","daejeon.kr","gangwon.kr","gwangju.kr","gyeongbuk.kr","gyeonggi.kr","gyeongnam.kr","incheon.kr","jeju.kr","jeonbuk.kr","jeonnam.kr","seoul.kr","ulsan.kr","kw","com.kw","edu.kw","emb.kw","gov.kw","ind.kw","net.kw","org.kw","ky","edu.ky","gov.ky","com.ky","org.ky","net.ky","kz","org.kz","edu.kz","net.kz","gov.kz","mil.kz","com.kz","la","int.la","net.la","info.la","edu.la","gov.la","per.la","com.la","org.la","lb","com.lb","edu.lb","gov.lb","net.lb","org.lb","lc","com.lc","net.lc","co.lc","org.lc","edu.lc","gov.lc","li","lk","gov.lk","sch.lk","net.lk","int.lk","com.lk","org.lk","edu.lk","ngo.lk","soc.lk","web.lk","ltd.lk","assn.lk","grp.lk","hotel.lk","ac.lk","lr","com.lr","edu.lr","gov.lr","org.lr","net.lr","ls","ac.ls","biz.ls","co.ls","edu.ls","gov.ls","info.ls","net.ls","org.ls","sc.ls","lt","gov.lt","lu","lv","com.lv","edu.lv","gov.lv","org.lv","mil.lv","id.lv","net.lv","asn.lv","conf.lv","ly","com.ly","net.ly","gov.ly","plc.ly","edu.ly","sch.ly","med.ly","org.ly","id.ly","ma","co.ma","net.ma","gov.ma","org.ma","ac.ma","press.ma","mc","tm.mc","asso.mc","md","me","co.me","net.me","org.me","edu.me","ac.me","gov.me","its.me","priv.me","mg","org.mg","nom.mg","gov.mg","prd.mg","tm.mg","edu.mg","mil.mg","com.mg","co.mg","mh","mil","mk","com.mk","org.mk","net.mk","edu.mk","gov.mk","inf.mk","name.mk","ml","com.ml","edu.ml","gouv.ml","gov.ml","net.ml","org.ml","presse.ml","*.mm","mn","gov.mn","edu.mn","org.mn","mo","com.mo","net.mo","org.mo","edu.mo","gov.mo","mobi","mp","mq","mr","gov.mr","ms","com.ms","edu.ms","gov.ms","net.ms","org.ms","mt","com.mt","edu.mt","net.mt","org.mt","mu","com.mu","net.mu","org.mu","gov.mu","ac.mu","co.mu","or.mu","museum","academy.museum","agriculture.museum","air.museum","airguard.museum","alabama.museum","alaska.museum","amber.museum","ambulance.museum","american.museum","americana.museum","americanantiques.museum","americanart.museum","amsterdam.museum","and.museum","annefrank.museum","anthro.museum","anthropology.museum","antiques.museum","aquarium.museum","arboretum.museum","archaeological.museum","archaeology.museum","architecture.museum","art.museum","artanddesign.museum","artcenter.museum","artdeco.museum","arteducation.museum","artgallery.museum","arts.museum","artsandcrafts.museum","asmatart.museum","assassination.museum","assisi.museum","association.museum","astronomy.museum","atlanta.museum","austin.museum","australia.museum","automotive.museum","aviation.museum","axis.museum","badajoz.museum","baghdad.museum","bahn.museum","bale.museum","baltimore.museum","barcelona.museum","baseball.museum","basel.museum","baths.museum","bauern.museum","beauxarts.museum","beeldengeluid.museum","bellevue.museum","bergbau.museum","berkeley.museum","berlin.museum","bern.museum","bible.museum","bilbao.museum","bill.museum","birdart.museum","birthplace.museum","bonn.museum","boston.museum","botanical.museum","botanicalgarden.museum","botanicgarden.museum","botany.museum","brandywinevalley.museum","brasil.museum","bristol.museum","british.museum","britishcolumbia.museum","broadcast.museum","brunel.museum","brussel.museum","brussels.museum","bruxelles.museum","building.museum","burghof.museum","bus.museum","bushey.museum","cadaques.museum","california.museum","cambridge.museum","can.museum","canada.museum","capebreton.museum","carrier.museum","cartoonart.museum","casadelamoneda.museum","castle.museum","castres.museum","celtic.museum","center.museum","chattanooga.museum","cheltenham.museum","chesapeakebay.museum","chicago.museum","children.museum","childrens.museum","childrensgarden.museum","chiropractic.museum","chocolate.museum","christiansburg.museum","cincinnati.museum","cinema.museum","circus.museum","civilisation.museum","civilization.museum","civilwar.museum","clinton.museum","clock.museum","coal.museum","coastaldefence.museum","cody.museum","coldwar.museum","collection.museum","colonialwilliamsburg.museum","coloradoplateau.museum","columbia.museum","columbus.museum","communication.museum","communications.museum","community.museum","computer.museum","computerhistory.museum","comunicações.museum","contemporary.museum","contemporaryart.museum","convent.museum","copenhagen.museum","corporation.museum","correios-e-telecomunicações.museum","corvette.museum","costume.museum","countryestate.museum","county.museum","crafts.museum","cranbrook.museum","creation.museum","cultural.museum","culturalcenter.museum","culture.museum","cyber.museum","cymru.museum","dali.museum","dallas.museum","database.museum","ddr.museum","decorativearts.museum","delaware.museum","delmenhorst.museum","denmark.museum","depot.museum","design.museum","detroit.museum","dinosaur.museum","discovery.museum","dolls.museum","donostia.museum","durham.museum","eastafrica.museum","eastcoast.museum","education.museum","educational.museum","egyptian.museum","eisenbahn.museum","elburg.museum","elvendrell.museum","embroidery.museum","encyclopedic.museum","england.museum","entomology.museum","environment.museum","environmentalconservation.museum","epilepsy.museum","essex.museum","estate.museum","ethnology.museum","exeter.museum","exhibition.museum","family.museum","farm.museum","farmequipment.museum","farmers.museum","farmstead.museum","field.museum","figueres.museum","filatelia.museum","film.museum","fineart.museum","finearts.museum","finland.museum","flanders.museum","florida.museum","force.museum","fortmissoula.museum","fortworth.museum","foundation.museum","francaise.museum","frankfurt.museum","franziskaner.museum","freemasonry.museum","freiburg.museum","fribourg.museum","frog.museum","fundacio.museum","furniture.museum","gallery.museum","garden.museum","gateway.museum","geelvinck.museum","gemological.museum","geology.museum","georgia.museum","giessen.museum","glas.museum","glass.museum","gorge.museum","grandrapids.museum","graz.museum","guernsey.museum","halloffame.museum","hamburg.museum","handson.museum","harvestcelebration.museum","hawaii.museum","health.museum","heimatunduhren.museum","hellas.museum","helsinki.museum","hembygdsforbund.museum","heritage.museum","histoire.museum","historical.museum","historicalsociety.museum","historichouses.museum","historisch.museum","historisches.museum","history.museum","historyofscience.museum","horology.museum","house.museum","humanities.museum","illustration.museum","imageandsound.museum","indian.museum","indiana.museum","indianapolis.museum","indianmarket.museum","intelligence.museum","interactive.museum","iraq.museum","iron.museum","isleofman.museum","jamison.museum","jefferson.museum","jerusalem.museum","jewelry.museum","jewish.museum","jewishart.museum","jfk.museum","journalism.museum","judaica.museum","judygarland.museum","juedisches.museum","juif.museum","karate.museum","karikatur.museum","kids.museum","koebenhavn.museum","koeln.museum","kunst.museum","kunstsammlung.museum","kunstunddesign.museum","labor.museum","labour.museum","lajolla.museum","lancashire.museum","landes.museum","lans.museum","läns.museum","larsson.museum","lewismiller.museum","lincoln.museum","linz.museum","living.museum","livinghistory.museum","localhistory.museum","london.museum","losangeles.museum","louvre.museum","loyalist.museum","lucerne.museum","luxembourg.museum","luzern.museum","mad.museum","madrid.museum","mallorca.museum","manchester.museum","mansion.museum","mansions.museum","manx.museum","marburg.museum","maritime.museum","maritimo.museum","maryland.museum","marylhurst.museum","media.museum","medical.museum","medizinhistorisches.museum","meeres.museum","memorial.museum","mesaverde.museum","michigan.museum","midatlantic.museum","military.museum","mill.museum","miners.museum","mining.museum","minnesota.museum","missile.museum","missoula.museum","modern.museum","moma.museum","money.museum","monmouth.museum","monticello.museum","montreal.museum","moscow.museum","motorcycle.museum","muenchen.museum","muenster.museum","mulhouse.museum","muncie.museum","museet.museum","museumcenter.museum","museumvereniging.museum","music.museum","national.museum","nationalfirearms.museum","nationalheritage.museum","nativeamerican.museum","naturalhistory.museum","naturalhistorymuseum.museum","naturalsciences.museum","nature.museum","naturhistorisches.museum","natuurwetenschappen.museum","naumburg.museum","naval.museum","nebraska.museum","neues.museum","newhampshire.museum","newjersey.museum","newmexico.museum","newport.museum","newspaper.museum","newyork.museum","niepce.museum","norfolk.museum","north.museum","nrw.museum","nyc.museum","nyny.museum","oceanographic.museum","oceanographique.museum","omaha.museum","online.museum","ontario.museum","openair.museum","oregon.museum","oregontrail.museum","otago.museum","oxford.museum","pacific.museum","paderborn.museum","palace.museum","paleo.museum","palmsprings.museum","panama.museum","paris.museum","pasadena.museum","pharmacy.museum","philadelphia.museum","philadelphiaarea.museum","philately.museum","phoenix.museum","photography.museum","pilots.museum","pittsburgh.museum","planetarium.museum","plantation.museum","plants.museum","plaza.museum","portal.museum","portland.museum","portlligat.museum","posts-and-telecommunications.museum","preservation.museum","presidio.museum","press.museum","project.museum","public.museum","pubol.museum","quebec.museum","railroad.museum","railway.museum","research.museum","resistance.museum","riodejaneiro.museum","rochester.museum","rockart.museum","roma.museum","russia.museum","saintlouis.museum","salem.museum","salvadordali.museum","salzburg.museum","sandiego.museum","sanfrancisco.museum","santabarbara.museum","santacruz.museum","santafe.museum","saskatchewan.museum","satx.museum","savannahga.museum","schlesisches.museum","schoenbrunn.museum","schokoladen.museum","school.museum","schweiz.museum","science.museum","scienceandhistory.museum","scienceandindustry.museum","sciencecenter.museum","sciencecenters.museum","science-fiction.museum","sciencehistory.museum","sciences.museum","sciencesnaturelles.museum","scotland.museum","seaport.museum","settlement.museum","settlers.museum","shell.museum","sherbrooke.museum","sibenik.museum","silk.museum","ski.museum","skole.museum","society.museum","sologne.museum","soundandvision.museum","southcarolina.museum","southwest.museum","space.museum","spy.museum","square.museum","stadt.museum","stalbans.museum","starnberg.museum","state.museum","stateofdelaware.museum","station.museum","steam.museum","steiermark.museum","stjohn.museum","stockholm.museum","stpetersburg.museum","stuttgart.museum","suisse.museum","surgeonshall.museum","surrey.museum","svizzera.museum","sweden.museum","sydney.museum","tank.museum","tcm.museum","technology.museum","telekommunikation.museum","television.museum","texas.museum","textile.museum","theater.museum","time.museum","timekeeping.museum","topology.museum","torino.museum","touch.museum","town.museum","transport.museum","tree.museum","trolley.museum","trust.museum","trustee.museum","uhren.museum","ulm.museum","undersea.museum","university.museum","usa.museum","usantiques.museum","usarts.museum","uscountryestate.museum","usculture.museum","usdecorativearts.museum","usgarden.museum","ushistory.museum","ushuaia.museum","uslivinghistory.museum","utah.museum","uvic.museum","valley.museum","vantaa.museum","versailles.museum","viking.museum","village.museum","virginia.museum","virtual.museum","virtuel.museum","vlaanderen.museum","volkenkunde.museum","wales.museum","wallonie.museum","war.museum","washingtondc.museum","watchandclock.museum","watch-and-clock.museum","western.museum","westfalen.museum","whaling.museum","wildlife.museum","williamsburg.museum","windmill.museum","workshop.museum","york.museum","yorkshire.museum","yosemite.museum","youth.museum","zoological.museum","zoology.museum","ירושלים.museum","иком.museum","mv","aero.mv","biz.mv","com.mv","coop.mv","edu.mv","gov.mv","info.mv","int.mv","mil.mv","museum.mv","name.mv","net.mv","org.mv","pro.mv","mw","ac.mw","biz.mw","co.mw","com.mw","coop.mw","edu.mw","gov.mw","int.mw","museum.mw","net.mw","org.mw","mx","com.mx","org.mx","gob.mx","edu.mx","net.mx","my","com.my","net.my","org.my","gov.my","edu.my","mil.my","name.my","mz","ac.mz","adv.mz","co.mz","edu.mz","gov.mz","mil.mz","net.mz","org.mz","na","info.na","pro.na","name.na","school.na","or.na","dr.na","us.na","mx.na","ca.na","in.na","cc.na","tv.na","ws.na","mobi.na","co.na","com.na","org.na","name","nc","asso.nc","nom.nc","ne","net","nf","com.nf","net.nf","per.nf","rec.nf","web.nf","arts.nf","firm.nf","info.nf","other.nf","store.nf","ng","com.ng","edu.ng","gov.ng","i.ng","mil.ng","mobi.ng","name.ng","net.ng","org.ng","sch.ng","ni","ac.ni","biz.ni","co.ni","com.ni","edu.ni","gob.ni","in.ni","info.ni","int.ni","mil.ni","net.ni","nom.ni","org.ni","web.ni","nl","no","fhs.no","vgs.no","fylkesbibl.no","folkebibl.no","museum.no","idrett.no","priv.no","mil.no","stat.no","dep.no","kommune.no","herad.no","aa.no","ah.no","bu.no","fm.no","hl.no","hm.no","jan-mayen.no","mr.no","nl.no","nt.no","of.no","ol.no","oslo.no","rl.no","sf.no","st.no","svalbard.no","tm.no","tr.no","va.no","vf.no","gs.aa.no","gs.ah.no","gs.bu.no","gs.fm.no","gs.hl.no","gs.hm.no","gs.jan-mayen.no","gs.mr.no","gs.nl.no","gs.nt.no","gs.of.no","gs.ol.no","gs.oslo.no","gs.rl.no","gs.sf.no","gs.st.no","gs.svalbard.no","gs.tm.no","gs.tr.no","gs.va.no","gs.vf.no","akrehamn.no","åkrehamn.no","algard.no","ålgård.no","arna.no","brumunddal.no","bryne.no","bronnoysund.no","brønnøysund.no","drobak.no","drøbak.no","egersund.no","fetsund.no","floro.no","florø.no","fredrikstad.no","hokksund.no","honefoss.no","hønefoss.no","jessheim.no","jorpeland.no","jørpeland.no","kirkenes.no","kopervik.no","krokstadelva.no","langevag.no","langevåg.no","leirvik.no","mjondalen.no","mjøndalen.no","mo-i-rana.no","mosjoen.no","mosjøen.no","nesoddtangen.no","orkanger.no","osoyro.no","osøyro.no","raholt.no","råholt.no","sandnessjoen.no","sandnessjøen.no","skedsmokorset.no","slattum.no","spjelkavik.no","stathelle.no","stavern.no","stjordalshalsen.no","stjørdalshalsen.no","tananger.no","tranby.no","vossevangen.no","afjord.no","åfjord.no","agdenes.no","al.no","ål.no","alesund.no","ålesund.no","alstahaug.no","alta.no","áltá.no","alaheadju.no","álaheadju.no","alvdal.no","amli.no","åmli.no","amot.no","åmot.no","andebu.no","andoy.no","andøy.no","andasuolo.no","ardal.no","årdal.no","aremark.no","arendal.no","ås.no","aseral.no","åseral.no","asker.no","askim.no","askvoll.no","askoy.no","askøy.no","asnes.no","åsnes.no","audnedaln.no","aukra.no","aure.no","aurland.no","aurskog-holand.no","aurskog-høland.no","austevoll.no","austrheim.no","averoy.no","averøy.no","balestrand.no","ballangen.no","balat.no","bálát.no","balsfjord.no","bahccavuotna.no","báhccavuotna.no","bamble.no","bardu.no","beardu.no","beiarn.no","bajddar.no","bájddar.no","baidar.no","báidár.no","berg.no","bergen.no","berlevag.no","berlevåg.no","bearalvahki.no","bearalváhki.no","bindal.no","birkenes.no","bjarkoy.no","bjarkøy.no","bjerkreim.no","bjugn.no","bodo.no","bodø.no","badaddja.no","bådåddjå.no","budejju.no","bokn.no","bremanger.no","bronnoy.no","brønnøy.no","bygland.no","bykle.no","barum.no","bærum.no","bo.telemark.no","bø.telemark.no","bo.nordland.no","bø.nordland.no","bievat.no","bievát.no","bomlo.no","bømlo.no","batsfjord.no","båtsfjord.no","bahcavuotna.no","báhcavuotna.no","dovre.no","drammen.no","drangedal.no","dyroy.no","dyrøy.no","donna.no","dønna.no","eid.no","eidfjord.no","eidsberg.no","eidskog.no","eidsvoll.no","eigersund.no","elverum.no","enebakk.no","engerdal.no","etne.no","etnedal.no","evenes.no","evenassi.no","evenášši.no","evje-og-hornnes.no","farsund.no","fauske.no","fuossko.no","fuoisku.no","fedje.no","fet.no","finnoy.no","finnøy.no","fitjar.no","fjaler.no","fjell.no","flakstad.no","flatanger.no","flekkefjord.no","flesberg.no","flora.no","fla.no","flå.no","folldal.no","forsand.no","fosnes.no","frei.no","frogn.no","froland.no","frosta.no","frana.no","fræna.no","froya.no","frøya.no","fusa.no","fyresdal.no","forde.no","førde.no","gamvik.no","gangaviika.no","gáŋgaviika.no","gaular.no","gausdal.no","gildeskal.no","gildeskål.no","giske.no","gjemnes.no","gjerdrum.no","gjerstad.no","gjesdal.no","gjovik.no","gjøvik.no","gloppen.no","gol.no","gran.no","grane.no","granvin.no","gratangen.no","grimstad.no","grong.no","kraanghke.no","kråanghke.no","grue.no","gulen.no","hadsel.no","halden.no","halsa.no","hamar.no","hamaroy.no","habmer.no","hábmer.no","hapmir.no","hápmir.no","hammerfest.no","hammarfeasta.no","hámmárfeasta.no","haram.no","hareid.no","harstad.no","hasvik.no","aknoluokta.no","ákŋoluokta.no","hattfjelldal.no","aarborte.no","haugesund.no","hemne.no","hemnes.no","hemsedal.no","heroy.more-og-romsdal.no","herøy.møre-og-romsdal.no","heroy.nordland.no","herøy.nordland.no","hitra.no","hjartdal.no","hjelmeland.no","hobol.no","hobøl.no","hof.no","hol.no","hole.no","holmestrand.no","holtalen.no","holtålen.no","hornindal.no","horten.no","hurdal.no","hurum.no","hvaler.no","hyllestad.no","hagebostad.no","hægebostad.no","hoyanger.no","høyanger.no","hoylandet.no","høylandet.no","ha.no","hå.no","ibestad.no","inderoy.no","inderøy.no","iveland.no","jevnaker.no","jondal.no","jolster.no","jølster.no","karasjok.no","karasjohka.no","kárášjohka.no","karlsoy.no","galsa.no","gálsá.no","karmoy.no","karmøy.no","kautokeino.no","guovdageaidnu.no","klepp.no","klabu.no","klæbu.no","kongsberg.no","kongsvinger.no","kragero.no","kragerø.no","kristiansand.no","kristiansund.no","krodsherad.no","krødsherad.no","kvalsund.no","rahkkeravju.no","ráhkkerávju.no","kvam.no","kvinesdal.no","kvinnherad.no","kviteseid.no","kvitsoy.no","kvitsøy.no","kvafjord.no","kvæfjord.no","giehtavuoatna.no","kvanangen.no","kvænangen.no","navuotna.no","návuotna.no","kafjord.no","kåfjord.no","gaivuotna.no","gáivuotna.no","larvik.no","lavangen.no","lavagis.no","loabat.no","loabát.no","lebesby.no","davvesiida.no","leikanger.no","leirfjord.no","leka.no","leksvik.no","lenvik.no","leangaviika.no","leaŋgaviika.no","lesja.no","levanger.no","lier.no","lierne.no","lillehammer.no","lillesand.no","lindesnes.no","lindas.no","lindås.no","lom.no","loppa.no","lahppi.no","láhppi.no","lund.no","lunner.no","luroy.no","lurøy.no","luster.no","lyngdal.no","lyngen.no","ivgu.no","lardal.no","lerdal.no","lærdal.no","lodingen.no","lødingen.no","lorenskog.no","lørenskog.no","loten.no","løten.no","malvik.no","masoy.no","måsøy.no","muosat.no","muosát.no","mandal.no","marker.no","marnardal.no","masfjorden.no","meland.no","meldal.no","melhus.no","meloy.no","meløy.no","meraker.no","meråker.no","moareke.no","moåreke.no","midsund.no","midtre-gauldal.no","modalen.no","modum.no","molde.no","moskenes.no","moss.no","mosvik.no","malselv.no","målselv.no","malatvuopmi.no","málatvuopmi.no","namdalseid.no","aejrie.no","namsos.no","namsskogan.no","naamesjevuemie.no","nååmesjevuemie.no","laakesvuemie.no","nannestad.no","narvik.no","narviika.no","naustdal.no","nedre-eiker.no","nes.akershus.no","nes.buskerud.no","nesna.no","nesodden.no","nesseby.no","unjarga.no","unjárga.no","nesset.no","nissedal.no","nittedal.no","nord-aurdal.no","nord-fron.no","nord-odal.no","norddal.no","nordkapp.no","davvenjarga.no","davvenjárga.no","nordre-land.no","nordreisa.no","raisa.no","ráisa.no","nore-og-uvdal.no","notodden.no","naroy.no","nærøy.no","notteroy.no","nøtterøy.no","odda.no","oksnes.no","øksnes.no","oppdal.no","oppegard.no","oppegård.no","orkdal.no","orland.no","ørland.no","orskog.no","ørskog.no","orsta.no","ørsta.no","os.hedmark.no","os.hordaland.no","osen.no","osteroy.no","osterøy.no","ostre-toten.no","østre-toten.no","overhalla.no","ovre-eiker.no","øvre-eiker.no","oyer.no","øyer.no","oygarden.no","øygarden.no","oystre-slidre.no","øystre-slidre.no","porsanger.no","porsangu.no","porsáŋgu.no","porsgrunn.no","radoy.no","radøy.no","rakkestad.no","rana.no","ruovat.no","randaberg.no","rauma.no","rendalen.no","rennebu.no","rennesoy.no","rennesøy.no","rindal.no","ringebu.no","ringerike.no","ringsaker.no","rissa.no","risor.no","risør.no","roan.no","rollag.no","rygge.no","ralingen.no","rælingen.no","rodoy.no","rødøy.no","romskog.no","rømskog.no","roros.no","røros.no","rost.no","røst.no","royken.no","røyken.no","royrvik.no","røyrvik.no","rade.no","råde.no","salangen.no","siellak.no","saltdal.no","salat.no","sálát.no","sálat.no","samnanger.no","sande.more-og-romsdal.no","sande.møre-og-romsdal.no","sande.vestfold.no","sandefjord.no","sandnes.no","sandoy.no","sandøy.no","sarpsborg.no","sauda.no","sauherad.no","sel.no","selbu.no","selje.no","seljord.no","sigdal.no","siljan.no","sirdal.no","skaun.no","skedsmo.no","ski.no","skien.no","skiptvet.no","skjervoy.no","skjervøy.no","skierva.no","skiervá.no","skjak.no","skjåk.no","skodje.no","skanland.no","skånland.no","skanit.no","skánit.no","smola.no","smøla.no","snillfjord.no","snasa.no","snåsa.no","snoasa.no","snaase.no","snåase.no","sogndal.no","sokndal.no","sola.no","solund.no","songdalen.no","sortland.no","spydeberg.no","stange.no","stavanger.no","steigen.no","steinkjer.no","stjordal.no","stjørdal.no","stokke.no","stor-elvdal.no","stord.no","stordal.no","storfjord.no","omasvuotna.no","strand.no","stranda.no","stryn.no","sula.no","suldal.no","sund.no","sunndal.no","surnadal.no","sveio.no","svelvik.no","sykkylven.no","sogne.no","søgne.no","somna.no","sømna.no","sondre-land.no","søndre-land.no","sor-aurdal.no","sør-aurdal.no","sor-fron.no","sør-fron.no","sor-odal.no","sør-odal.no","sor-varanger.no","sør-varanger.no","matta-varjjat.no","mátta-várjjat.no","sorfold.no","sørfold.no","sorreisa.no","sørreisa.no","sorum.no","sørum.no","tana.no","deatnu.no","time.no","tingvoll.no","tinn.no","tjeldsund.no","dielddanuorri.no","tjome.no","tjøme.no","tokke.no","tolga.no","torsken.no","tranoy.no","tranøy.no","tromso.no","tromsø.no","tromsa.no","romsa.no","trondheim.no","troandin.no","trysil.no","trana.no","træna.no","trogstad.no","trøgstad.no","tvedestrand.no","tydal.no","tynset.no","tysfjord.no","divtasvuodna.no","divttasvuotna.no","tysnes.no","tysvar.no","tysvær.no","tonsberg.no","tønsberg.no","ullensaker.no","ullensvang.no","ulvik.no","utsira.no","vadso.no","vadsø.no","cahcesuolo.no","čáhcesuolo.no","vaksdal.no","valle.no","vang.no","vanylven.no","vardo.no","vardø.no","varggat.no","várggát.no","vefsn.no","vaapste.no","vega.no","vegarshei.no","vegårshei.no","vennesla.no","verdal.no","verran.no","vestby.no","vestnes.no","vestre-slidre.no","vestre-toten.no","vestvagoy.no","vestvågøy.no","vevelstad.no","vik.no","vikna.no","vindafjord.no","volda.no","voss.no","varoy.no","værøy.no","vagan.no","vågan.no","voagat.no","vagsoy.no","vågsøy.no","vaga.no","vågå.no","valer.ostfold.no","våler.østfold.no","valer.hedmark.no","våler.hedmark.no","*.np","nr","biz.nr","info.nr","gov.nr","edu.nr","org.nr","net.nr","com.nr","nu","nz","ac.nz","co.nz","cri.nz","geek.nz","gen.nz","govt.nz","health.nz","iwi.nz","kiwi.nz","maori.nz","mil.nz","māori.nz","net.nz","org.nz","parliament.nz","school.nz","om","co.om","com.om","edu.om","gov.om","med.om","museum.om","net.om","org.om","pro.om","onion","org","pa","ac.pa","gob.pa","com.pa","org.pa","sld.pa","edu.pa","net.pa","ing.pa","abo.pa","med.pa","nom.pa","pe","edu.pe","gob.pe","nom.pe","mil.pe","org.pe","com.pe","net.pe","pf","com.pf","org.pf","edu.pf","*.pg","ph","com.ph","net.ph","org.ph","gov.ph","edu.ph","ngo.ph","mil.ph","i.ph","pk","com.pk","net.pk","edu.pk","org.pk","fam.pk","biz.pk","web.pk","gov.pk","gob.pk","gok.pk","gon.pk","gop.pk","gos.pk","info.pk","pl","com.pl","net.pl","org.pl","aid.pl","agro.pl","atm.pl","auto.pl","biz.pl","edu.pl","gmina.pl","gsm.pl","info.pl","mail.pl","miasta.pl","media.pl","mil.pl","nieruchomosci.pl","nom.pl","pc.pl","powiat.pl","priv.pl","realestate.pl","rel.pl","sex.pl","shop.pl","sklep.pl","sos.pl","szkola.pl","targi.pl","tm.pl","tourism.pl","travel.pl","turystyka.pl","gov.pl","ap.gov.pl","ic.gov.pl","is.gov.pl","us.gov.pl","kmpsp.gov.pl","kppsp.gov.pl","kwpsp.gov.pl","psp.gov.pl","wskr.gov.pl","kwp.gov.pl","mw.gov.pl","ug.gov.pl","um.gov.pl","umig.gov.pl","ugim.gov.pl","upow.gov.pl","uw.gov.pl","starostwo.gov.pl","pa.gov.pl","po.gov.pl","psse.gov.pl","pup.gov.pl","rzgw.gov.pl","sa.gov.pl","so.gov.pl","sr.gov.pl","wsa.gov.pl","sko.gov.pl","uzs.gov.pl","wiih.gov.pl","winb.gov.pl","pinb.gov.pl","wios.gov.pl","witd.gov.pl","wzmiuw.gov.pl","piw.gov.pl","wiw.gov.pl","griw.gov.pl","wif.gov.pl","oum.gov.pl","sdn.gov.pl","zp.gov.pl","uppo.gov.pl","mup.gov.pl","wuoz.gov.pl","konsulat.gov.pl","oirm.gov.pl","augustow.pl","babia-gora.pl","bedzin.pl","beskidy.pl","bialowieza.pl","bialystok.pl","bielawa.pl","bieszczady.pl","boleslawiec.pl","bydgoszcz.pl","bytom.pl","cieszyn.pl","czeladz.pl","czest.pl","dlugoleka.pl","elblag.pl","elk.pl","glogow.pl","gniezno.pl","gorlice.pl","grajewo.pl","ilawa.pl","jaworzno.pl","jelenia-gora.pl","jgora.pl","kalisz.pl","kazimierz-dolny.pl","karpacz.pl","kartuzy.pl","kaszuby.pl","katowice.pl","kepno.pl","ketrzyn.pl","klodzko.pl","kobierzyce.pl","kolobrzeg.pl","konin.pl","konskowola.pl","kutno.pl","lapy.pl","lebork.pl","legnica.pl","lezajsk.pl","limanowa.pl","lomza.pl","lowicz.pl","lubin.pl","lukow.pl","malbork.pl","malopolska.pl","mazowsze.pl","mazury.pl","mielec.pl","mielno.pl","mragowo.pl","naklo.pl","nowaruda.pl","nysa.pl","olawa.pl","olecko.pl","olkusz.pl","olsztyn.pl","opoczno.pl","opole.pl","ostroda.pl","ostroleka.pl","ostrowiec.pl","ostrowwlkp.pl","pila.pl","pisz.pl","podhale.pl","podlasie.pl","polkowice.pl","pomorze.pl","pomorskie.pl","prochowice.pl","pruszkow.pl","przeworsk.pl","pulawy.pl","radom.pl","rawa-maz.pl","rybnik.pl","rzeszow.pl","sanok.pl","sejny.pl","slask.pl","slupsk.pl","sosnowiec.pl","stalowa-wola.pl","skoczow.pl","starachowice.pl","stargard.pl","suwalki.pl","swidnica.pl","swiebodzin.pl","swinoujscie.pl","szczecin.pl","szczytno.pl","tarnobrzeg.pl","tgory.pl","turek.pl","tychy.pl","ustka.pl","walbrzych.pl","warmia.pl","warszawa.pl","waw.pl","wegrow.pl","wielun.pl","wlocl.pl","wloclawek.pl","wodzislaw.pl","wolomin.pl","wroclaw.pl","zachpomor.pl","zagan.pl","zarow.pl","zgora.pl","zgorzelec.pl","pm","pn","gov.pn","co.pn","org.pn","edu.pn","net.pn","post","pr","com.pr","net.pr","org.pr","gov.pr","edu.pr","isla.pr","pro.pr","biz.pr","info.pr","name.pr","est.pr","prof.pr","ac.pr","pro","aaa.pro","aca.pro","acct.pro","avocat.pro","bar.pro","cpa.pro","eng.pro","jur.pro","law.pro","med.pro","recht.pro","ps","edu.ps","gov.ps","sec.ps","plo.ps","com.ps","org.ps","net.ps","pt","net.pt","gov.pt","org.pt","edu.pt","int.pt","publ.pt","com.pt","nome.pt","pw","co.pw","ne.pw","or.pw","ed.pw","go.pw","belau.pw","py","com.py","coop.py","edu.py","gov.py","mil.py","net.py","org.py","qa","com.qa","edu.qa","gov.qa","mil.qa","name.qa","net.qa","org.qa","sch.qa","re","asso.re","com.re","nom.re","ro","arts.ro","com.ro","firm.ro","info.ro","nom.ro","nt.ro","org.ro","rec.ro","store.ro","tm.ro","www.ro","rs","ac.rs","co.rs","edu.rs","gov.rs","in.rs","org.rs","ru","rw","ac.rw","co.rw","coop.rw","gov.rw","mil.rw","net.rw","org.rw","sa","com.sa","net.sa","org.sa","gov.sa","med.sa","pub.sa","edu.sa","sch.sa","sb","com.sb","edu.sb","gov.sb","net.sb","org.sb","sc","com.sc","gov.sc","net.sc","org.sc","edu.sc","sd","com.sd","net.sd","org.sd","edu.sd","med.sd","tv.sd","gov.sd","info.sd","se","a.se","ac.se","b.se","bd.se","brand.se","c.se","d.se","e.se","f.se","fh.se","fhsk.se","fhv.se","g.se","h.se","i.se","k.se","komforb.se","kommunalforbund.se","komvux.se","l.se","lanbib.se","m.se","n.se","naturbruksgymn.se","o.se","org.se","p.se","parti.se","pp.se","press.se","r.se","s.se","t.se","tm.se","u.se","w.se","x.se","y.se","z.se","sg","com.sg","net.sg","org.sg","gov.sg","edu.sg","per.sg","sh","com.sh","net.sh","gov.sh","org.sh","mil.sh","si","sj","sk","sl","com.sl","net.sl","edu.sl","gov.sl","org.sl","sm","sn","art.sn","com.sn","edu.sn","gouv.sn","org.sn","perso.sn","univ.sn","so","com.so","edu.so","gov.so","me.so","net.so","org.so","sr","ss","biz.ss","com.ss","edu.ss","gov.ss","net.ss","org.ss","st","co.st","com.st","consulado.st","edu.st","embaixada.st","gov.st","mil.st","net.st","org.st","principe.st","saotome.st","store.st","su","sv","com.sv","edu.sv","gob.sv","org.sv","red.sv","sx","gov.sx","sy","edu.sy","gov.sy","net.sy","mil.sy","com.sy","org.sy","sz","co.sz","ac.sz","org.sz","tc","td","tel","tf","tg","th","ac.th","co.th","go.th","in.th","mi.th","net.th","or.th","tj","ac.tj","biz.tj","co.tj","com.tj","edu.tj","go.tj","gov.tj","int.tj","mil.tj","name.tj","net.tj","nic.tj","org.tj","test.tj","web.tj","tk","tl","gov.tl","tm","com.tm","co.tm","org.tm","net.tm","nom.tm","gov.tm","mil.tm","edu.tm","tn","com.tn","ens.tn","fin.tn","gov.tn","ind.tn","intl.tn","nat.tn","net.tn","org.tn","info.tn","perso.tn","tourism.tn","edunet.tn","rnrt.tn","rns.tn","rnu.tn","mincom.tn","agrinet.tn","defense.tn","turen.tn","to","com.to","gov.to","net.to","org.to","edu.to","mil.to","tr","av.tr","bbs.tr","bel.tr","biz.tr","com.tr","dr.tr","edu.tr","gen.tr","gov.tr","info.tr","mil.tr","k12.tr","kep.tr","name.tr","net.tr","org.tr","pol.tr","tel.tr","tsk.tr","tv.tr","web.tr","nc.tr","gov.nc.tr","tt","co.tt","com.tt","org.tt","net.tt","biz.tt","info.tt","pro.tt","int.tt","coop.tt","jobs.tt","mobi.tt","travel.tt","museum.tt","aero.tt","name.tt","gov.tt","edu.tt","tv","tw","edu.tw","gov.tw","mil.tw","com.tw","net.tw","org.tw","idv.tw","game.tw","ebiz.tw","club.tw","網路.tw","組織.tw","商業.tw","tz","ac.tz","co.tz","go.tz","hotel.tz","info.tz","me.tz","mil.tz","mobi.tz","ne.tz","or.tz","sc.tz","tv.tz","ua","com.ua","edu.ua","gov.ua","in.ua","net.ua","org.ua","cherkassy.ua","cherkasy.ua","chernigov.ua","chernihiv.ua","chernivtsi.ua","chernovtsy.ua","ck.ua","cn.ua","cr.ua","crimea.ua","cv.ua","dn.ua","dnepropetrovsk.ua","dnipropetrovsk.ua","dominic.ua","donetsk.ua","dp.ua","if.ua","ivano-frankivsk.ua","kh.ua","kharkiv.ua","kharkov.ua","kherson.ua","khmelnitskiy.ua","khmelnytskyi.ua","kiev.ua","kirovograd.ua","km.ua","kr.ua","krym.ua","ks.ua","kv.ua","kyiv.ua","lg.ua","lt.ua","lugansk.ua","lutsk.ua","lv.ua","lviv.ua","mk.ua","mykolaiv.ua","nikolaev.ua","od.ua","odesa.ua","odessa.ua","pl.ua","poltava.ua","rivne.ua","rovno.ua","rv.ua","sb.ua","sebastopol.ua","sevastopol.ua","sm.ua","sumy.ua","te.ua","ternopil.ua","uz.ua","uzhgorod.ua","vinnica.ua","vinnytsia.ua","vn.ua","volyn.ua","yalta.ua","zaporizhzhe.ua","zaporizhzhia.ua","zhitomir.ua","zhytomyr.ua","zp.ua","zt.ua","ug","co.ug","or.ug","ac.ug","sc.ug","go.ug","ne.ug","com.ug","org.ug","uk","ac.uk","co.uk","gov.uk","ltd.uk","me.uk","net.uk","nhs.uk","org.uk","plc.uk","police.uk","*.sch.uk","us","dni.us","fed.us","isa.us","kids.us","nsn.us","ak.us","al.us","ar.us","as.us","az.us","ca.us","co.us","ct.us","dc.us","de.us","fl.us","ga.us","gu.us","hi.us","ia.us","id.us","il.us","in.us","ks.us","ky.us","la.us","ma.us","md.us","me.us","mi.us","mn.us","mo.us","ms.us","mt.us","nc.us","nd.us","ne.us","nh.us","nj.us","nm.us","nv.us","ny.us","oh.us","ok.us","or.us","pa.us","pr.us","ri.us","sc.us","sd.us","tn.us","tx.us","ut.us","vi.us","vt.us","va.us","wa.us","wi.us","wv.us","wy.us","k12.ak.us","k12.al.us","k12.ar.us","k12.as.us","k12.az.us","k12.ca.us","k12.co.us","k12.ct.us","k12.dc.us","k12.de.us","k12.fl.us","k12.ga.us","k12.gu.us","k12.ia.us","k12.id.us","k12.il.us","k12.in.us","k12.ks.us","k12.ky.us","k12.la.us","k12.ma.us","k12.md.us","k12.me.us","k12.mi.us","k12.mn.us","k12.mo.us","k12.ms.us","k12.mt.us","k12.nc.us","k12.ne.us","k12.nh.us","k12.nj.us","k12.nm.us","k12.nv.us","k12.ny.us","k12.oh.us","k12.ok.us","k12.or.us","k12.pa.us","k12.pr.us","k12.ri.us","k12.sc.us","k12.tn.us","k12.tx.us","k12.ut.us","k12.vi.us","k12.vt.us","k12.va.us","k12.wa.us","k12.wi.us","k12.wy.us","cc.ak.us","cc.al.us","cc.ar.us","cc.as.us","cc.az.us","cc.ca.us","cc.co.us","cc.ct.us","cc.dc.us","cc.de.us","cc.fl.us","cc.ga.us","cc.gu.us","cc.hi.us","cc.ia.us","cc.id.us","cc.il.us","cc.in.us","cc.ks.us","cc.ky.us","cc.la.us","cc.ma.us","cc.md.us","cc.me.us","cc.mi.us","cc.mn.us","cc.mo.us","cc.ms.us","cc.mt.us","cc.nc.us","cc.nd.us","cc.ne.us","cc.nh.us","cc.nj.us","cc.nm.us","cc.nv.us","cc.ny.us","cc.oh.us","cc.ok.us","cc.or.us","cc.pa.us","cc.pr.us","cc.ri.us","cc.sc.us","cc.sd.us","cc.tn.us","cc.tx.us","cc.ut.us","cc.vi.us","cc.vt.us","cc.va.us","cc.wa.us","cc.wi.us","cc.wv.us","cc.wy.us","lib.ak.us","lib.al.us","lib.ar.us","lib.as.us","lib.az.us","lib.ca.us","lib.co.us","lib.ct.us","lib.dc.us","lib.fl.us","lib.ga.us","lib.gu.us","lib.hi.us","lib.ia.us","lib.id.us","lib.il.us","lib.in.us","lib.ks.us","lib.ky.us","lib.la.us","lib.ma.us","lib.md.us","lib.me.us","lib.mi.us","lib.mn.us","lib.mo.us","lib.ms.us","lib.mt.us","lib.nc.us","lib.nd.us","lib.ne.us","lib.nh.us","lib.nj.us","lib.nm.us","lib.nv.us","lib.ny.us","lib.oh.us","lib.ok.us","lib.or.us","lib.pa.us","lib.pr.us","lib.ri.us","lib.sc.us","lib.sd.us","lib.tn.us","lib.tx.us","lib.ut.us","lib.vi.us","lib.vt.us","lib.va.us","lib.wa.us","lib.wi.us","lib.wy.us","pvt.k12.ma.us","chtr.k12.ma.us","paroch.k12.ma.us","ann-arbor.mi.us","cog.mi.us","dst.mi.us","eaton.mi.us","gen.mi.us","mus.mi.us","tec.mi.us","washtenaw.mi.us","uy","com.uy","edu.uy","gub.uy","mil.uy","net.uy","org.uy","uz","co.uz","com.uz","net.uz","org.uz","va","vc","com.vc","net.vc","org.vc","gov.vc","mil.vc","edu.vc","ve","arts.ve","co.ve","com.ve","e12.ve","edu.ve","firm.ve","gob.ve","gov.ve","info.ve","int.ve","mil.ve","net.ve","org.ve","rec.ve","store.ve","tec.ve","web.ve","vg","vi","co.vi","com.vi","k12.vi","net.vi","org.vi","vn","com.vn","net.vn","org.vn","edu.vn","gov.vn","int.vn","ac.vn","biz.vn","info.vn","name.vn","pro.vn","health.vn","vu","com.vu","edu.vu","net.vu","org.vu","wf","ws","com.ws","net.ws","org.ws","gov.ws","edu.ws","yt","امارات","հայ","বাংলা","бг","бел","中国","中國","الجزائر","مصر","ею","ευ","موريتانيا","გე","ελ","香港","公司.香港","教育.香港","政府.香港","個人.香港","網絡.香港","組織.香港","ಭಾರತ","ଭାରତ","ভাৰত","भारतम्","भारोत","ڀارت","ഭാരതം","भारत","بارت","بھارت","భారత్","ભારત","ਭਾਰਤ","ভারত","இந்தியா","ایران","ايران","عراق","الاردن","한국","қаз","ලංකා","இலங்கை","المغرب","мкд","мон","澳門","澳门","مليسيا","عمان","پاکستان","پاكستان","فلسطين","срб","пр.срб","орг.срб","обр.срб","од.срб","упр.срб","ак.срб","рф","قطر","السعودية","السعودیة","السعودیۃ","السعوديه","سودان","新加坡","சிங்கப்பூர்","سورية","سوريا","ไทย","ศึกษา.ไทย","ธุรกิจ.ไทย","รัฐบาล.ไทย","ทหาร.ไทย","เน็ต.ไทย","องค์กร.ไทย","تونس","台灣","台湾","臺灣","укр","اليمن","xxx","*.ye","ac.za","agric.za","alt.za","co.za","edu.za","gov.za","grondar.za","law.za","mil.za","net.za","ngo.za","nic.za","nis.za","nom.za","org.za","school.za","tm.za","web.za","zm","ac.zm","biz.zm","co.zm","com.zm","edu.zm","gov.zm","info.zm","mil.zm","net.zm","org.zm","sch.zm","zw","ac.zw","co.zw","gov.zw","mil.zw","org.zw","aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","academy","accenture","accountant","accountants","aco","actor","adac","ads","adult","aeg","aetna","afamilycompany","afl","africa","agakhan","agency","aig","aigo","airbus","airforce","airtel","akdn","alfaromeo","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","amazon","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","aol","apartments","app","apple","aquarelle","arab","aramco","archi","army","art","arte","asda","associates","athleta","attorney","auction","audi","audible","audio","auspost","author","auto","autos","avianca","aws","axa","azure","baby","baidu","banamex","bananarepublic","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bbc","bbt","bbva","bcg","bcn","beats","beauty","beer","bentley","berlin","best","bestbuy","bet","bharti","bible","bid","bike","bing","bingo","bio","black","blackfriday","blockbuster","blog","bloomberg","blue","bms","bmw","bnpparibas","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","bradesco","bridgestone","broadway","broker","brother","brussels","budapest","bugatti","build","builders","business","buy","buzz","bzh","cab","cafe","cal","call","calvinklein","cam","camera","camp","cancerresearch","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","casa","case","caseih","cash","casino","catering","catholic","cba","cbn","cbre","cbs","ceb","center","ceo","cern","cfa","cfd","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","church","cipriani","circle","cisco","citadel","citi","citic","city","cityeats","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","coach","codes","coffee","college","cologne","comcast","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cookingchannel","cool","corsica","country","coupon","coupons","courses","cpa","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","csc","cuisinella","cymru","cyou","dabur","dad","dance","data","date","dating","datsun","day","dclk","dds","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dnp","docs","doctor","dog","domains","dot","download","drive","dtv","dubai","duck","dunlop","dupont","durban","dvag","dvr","earth","eat","eco","edeka","education","email","emerck","energy","engineer","engineering","enterprises","epson","equipment","ericsson","erni","esq","estate","esurance","etisalat","eurovision","eus","events","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fiat","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","flickr","flights","flir","florist","flowers","fly","foo","food","foodnetwork","football","ford","forex","forsale","forum","foundation","fox","free","fresenius","frl","frogans","frontdoor","frontier","ftr","fujitsu","fujixerox","fun","fund","furniture","futbol","fyi","gal","gallery","gallo","gallup","game","games","gap","garden","gay","gbiz","gdn","gea","gent","genting","george","ggee","gift","gifts","gives","giving","glade","glass","gle","global","globo","gmail","gmbh","gmo","gmx","godaddy","gold","goldpoint","golf","goo","goodyear","goog","google","gop","got","grainger","graphics","gratis","green","gripe","grocery","group","guardian","gucci","guge","guide","guitars","guru","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hgtv","hiphop","hisamitsu","hitachi","hiv","hkt","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","horse","hospital","host","hosting","hot","hoteles","hotels","hotmail","house","how","hsbc","hughes","hyatt","hyundai","ibm","icbc","ice","icu","ieee","ifm","ikano","imamat","imdb","immo","immobilien","inc","industries","infiniti","ing","ink","institute","insurance","insure","intel","international","intuit","investments","ipiranga","irish","ismaili","ist","istanbul","itau","itv","iveco","jaguar","java","jcb","jcp","jeep","jetzt","jewelry","jio","jll","jmp","jnj","joburg","jot","joy","jpmorgan","jprs","juegos","juniper","kaufen","kddi","kerryhotels","kerrylogistics","kerryproperties","kfh","kia","kim","kinder","kindle","kitchen","kiwi","koeln","komatsu","kosher","kpmg","kpn","krd","kred","kuokgroup","kyoto","lacaixa","lamborghini","lamer","lancaster","lancia","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","linde","link","lipsy","live","living","lixil","llc","llp","loan","loans","locker","locus","loft","lol","london","lotte","lotto","love","lpl","lplfinancial","ltd","ltda","lundbeck","lupin","luxe","luxury","macys","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","maserati","mattel","mba","mckinsey","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","metlife","miami","microsoft","mini","mint","mit","mitsubishi","mlb","mls","mma","mobile","moda","moe","moi","mom","monash","money","monster","mormon","mortgage","moscow","moto","motorcycles","mov","movie","msd","mtn","mtr","mutual","nab","nadex","nagoya","nationwide","natura","navy","nba","nec","netbank","netflix","network","neustar","new","newholland","news","next","nextdirect","nexus","nfl","ngo","nhk","nico","nike","nikon","ninja","nissan","nissay","nokia","northwesternmutual","norton","now","nowruz","nowtv","nra","nrw","ntt","nyc","obi","observer","off","office","okinawa","olayan","olayangroup","oldnavy","ollo","omega","one","ong","onl","online","onyourside","ooo","open","oracle","orange","organic","origins","osaka","otsuka","ott","ovh","page","panasonic","paris","pars","partners","parts","party","passagens","pay","pccw","pet","pfizer","pharmacy","phd","philips","phone","photo","photography","photos","physio","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","place","play","playstation","plumbing","plus","pnc","pohl","poker","politie","porn","pramerica","praxi","press","prime","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","pub","pwc","qpon","quebec","quest","qvc","racing","radio","raid","read","realestate","realtor","realty","recipes","red","redstone","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","rightathome","ril","rio","rip","rmit","rocher","rocks","rodeo","rogers","room","rsvp","rugby","ruhr","run","rwe","ryukyu","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sbi","sbs","sca","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scjohnson","scor","scot","search","seat","secure","security","seek","select","sener","services","ses","seven","sew","sex","sexy","sfr","shangrila","sharp","shaw","shell","shia","shiksha","shoes","shop","shopping","shouji","show","showtime","shriram","silk","sina","singles","site","ski","skin","sky","skype","sling","smart","smile","sncf","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","spa","space","sport","spot","spreadbetting","srl","stada","staples","star","statebank","statefarm","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","sucks","supplies","supply","support","surf","surgery","suzuki","swatch","swiftcover","swiss","sydney","symantec","systems","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tci","tdk","team","tech","technology","temasek","tennis","teva","thd","theater","theatre","tiaa","tickets","tienda","tiffany","tips","tires","tirol","tjmaxx","tjx","tkmaxx","tmall","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","trade","trading","training","travel","travelchannel","travelers","travelersinsurance","trust","trv","tube","tui","tunes","tushu","tvs","ubank","ubs","unicom","university","uno","uol","ups","vacations","vana","vanguard","vegas","ventures","verisign","versicherung","vet","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","viva","vivo","vlaanderen","vodka","volkswagen","volvo","vote","voting","voto","voyage","vuelos","wales","walmart","walter","wang","wanggou","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","wtc","wtf","xbox","xerox","xfinity","xihuan","xin","कॉम","セール","佛山","慈善","集团","在线","大众汽车","点看","คอม","八卦","موقع","公益","公司","香格里拉","网站","移动","我爱你","москва","католик","онлайн","сайт","联通","קום","时尚","微博","淡马锡","ファッション","орг","नेट","ストア","アマゾン","삼성","商标","商店","商城","дети","ポイント","新闻","工行","家電","كوم","中文网","中信","娱乐","谷歌","電訊盈科","购物","クラウド","通販","网店","संगठन","餐厅","网络","ком","亚马逊","诺基亚","食品","飞利浦","手表","手机","ارامكو","العليان","اتصالات","بازار","ابوظبي","كاثوليك","همراه","닷컴","政府","شبكة","بيتك","عرب","机构","组织机构","健康","招聘","рус","珠宝","大拿","みんな","グーグル","世界","書籍","网址","닷넷","コム","天主教","游戏","vermögensberater","vermögensberatung","企业","信息","嘉里大酒店","嘉里","广东","政务","xyz","yachts","yahoo","yamaxun","yandex","yodobashi","yoga","yokohama","you","youtube","yun","zappos","zara","zero","zip","zone","zuerich","cc.ua","inf.ua","ltd.ua","adobeaemcloud.com","adobeaemcloud.net","*.dev.adobeaemcloud.com","beep.pl","barsy.ca","*.compute.estate","*.alces.network","altervista.org","alwaysdata.net","cloudfront.net","*.compute.amazonaws.com","*.compute-1.amazonaws.com","*.compute.amazonaws.com.cn","us-east-1.amazonaws.com","cn-north-1.eb.amazonaws.com.cn","cn-northwest-1.eb.amazonaws.com.cn","elasticbeanstalk.com","ap-northeast-1.elasticbeanstalk.com","ap-northeast-2.elasticbeanstalk.com","ap-northeast-3.elasticbeanstalk.com","ap-south-1.elasticbeanstalk.com","ap-southeast-1.elasticbeanstalk.com","ap-southeast-2.elasticbeanstalk.com","ca-central-1.elasticbeanstalk.com","eu-central-1.elasticbeanstalk.com","eu-west-1.elasticbeanstalk.com","eu-west-2.elasticbeanstalk.com","eu-west-3.elasticbeanstalk.com","sa-east-1.elasticbeanstalk.com","us-east-1.elasticbeanstalk.com","us-east-2.elasticbeanstalk.com","us-gov-west-1.elasticbeanstalk.com","us-west-1.elasticbeanstalk.com","us-west-2.elasticbeanstalk.com","*.elb.amazonaws.com","*.elb.amazonaws.com.cn","s3.amazonaws.com","s3-ap-northeast-1.amazonaws.com","s3-ap-northeast-2.amazonaws.com","s3-ap-south-1.amazonaws.com","s3-ap-southeast-1.amazonaws.com","s3-ap-southeast-2.amazonaws.com","s3-ca-central-1.amazonaws.com","s3-eu-central-1.amazonaws.com","s3-eu-west-1.amazonaws.com","s3-eu-west-2.amazonaws.com","s3-eu-west-3.amazonaws.com","s3-external-1.amazonaws.com","s3-fips-us-gov-west-1.amazonaws.com","s3-sa-east-1.amazonaws.com","s3-us-gov-west-1.amazonaws.com","s3-us-east-2.amazonaws.com","s3-us-west-1.amazonaws.com","s3-us-west-2.amazonaws.com","s3.ap-northeast-2.amazonaws.com","s3.ap-south-1.amazonaws.com","s3.cn-north-1.amazonaws.com.cn","s3.ca-central-1.amazonaws.com","s3.eu-central-1.amazonaws.com","s3.eu-west-2.amazonaws.com","s3.eu-west-3.amazonaws.com","s3.us-east-2.amazonaws.com","s3.dualstack.ap-northeast-1.amazonaws.com","s3.dualstack.ap-northeast-2.amazonaws.com","s3.dualstack.ap-south-1.amazonaws.com","s3.dualstack.ap-southeast-1.amazonaws.com","s3.dualstack.ap-southeast-2.amazonaws.com","s3.dualstack.ca-central-1.amazonaws.com","s3.dualstack.eu-central-1.amazonaws.com","s3.dualstack.eu-west-1.amazonaws.com","s3.dualstack.eu-west-2.amazonaws.com","s3.dualstack.eu-west-3.amazonaws.com","s3.dualstack.sa-east-1.amazonaws.com","s3.dualstack.us-east-1.amazonaws.com","s3.dualstack.us-east-2.amazonaws.com","s3-website-us-east-1.amazonaws.com","s3-website-us-west-1.amazonaws.com","s3-website-us-west-2.amazonaws.com","s3-website-ap-northeast-1.amazonaws.com","s3-website-ap-southeast-1.amazonaws.com","s3-website-ap-southeast-2.amazonaws.com","s3-website-eu-west-1.amazonaws.com","s3-website-sa-east-1.amazonaws.com","s3-website.ap-northeast-2.amazonaws.com","s3-website.ap-south-1.amazonaws.com","s3-website.ca-central-1.amazonaws.com","s3-website.eu-central-1.amazonaws.com","s3-website.eu-west-2.amazonaws.com","s3-website.eu-west-3.amazonaws.com","s3-website.us-east-2.amazonaws.com","amsw.nl","t3l3p0rt.net","tele.amune.org","apigee.io","on-aptible.com","user.aseinet.ne.jp","gv.vc","d.gv.vc","user.party.eus","pimienta.org","poivron.org","potager.org","sweetpepper.org","myasustor.com","myfritz.net","*.awdev.ca","*.advisor.ws","b-data.io","backplaneapp.io","balena-devices.com","app.banzaicloud.io","betainabox.com","bnr.la","blackbaudcdn.net","boomla.net","boxfuse.io","square7.ch","bplaced.com","bplaced.de","square7.de","bplaced.net","square7.net","browsersafetymark.io","uk0.bigv.io","dh.bytemark.co.uk","vm.bytemark.co.uk","mycd.eu","carrd.co","crd.co","uwu.ai","ae.org","ar.com","br.com","cn.com","com.de","com.se","de.com","eu.com","gb.com","gb.net","hu.com","hu.net","jp.net","jpn.com","kr.com","mex.com","no.com","qc.com","ru.com","sa.com","se.net","uk.com","uk.net","us.com","uy.com","za.bz","za.com","africa.com","gr.com","in.net","us.org","co.com","c.la","certmgr.org","xenapponazure.com","discourse.group","discourse.team","virtueeldomein.nl","cleverapps.io","*.lcl.dev","*.stg.dev","c66.me","cloud66.ws","cloud66.zone","jdevcloud.com","wpdevcloud.com","cloudaccess.host","freesite.host","cloudaccess.net","cloudcontrolled.com","cloudcontrolapp.com","cloudera.site","trycloudflare.com","workers.dev","wnext.app","co.ca","*.otap.co","co.cz","c.cdn77.org","cdn77-ssl.net","r.cdn77.net","rsc.cdn77.org","ssl.origin.cdn77-secure.org","cloudns.asia","cloudns.biz","cloudns.club","cloudns.cc","cloudns.eu","cloudns.in","cloudns.info","cloudns.org","cloudns.pro","cloudns.pw","cloudns.us","cloudeity.net","cnpy.gdn","co.nl","co.no","webhosting.be","hosting-cluster.nl","ac.ru","edu.ru","gov.ru","int.ru","mil.ru","test.ru","dyn.cosidns.de","dynamisches-dns.de","dnsupdater.de","internet-dns.de","l-o-g-i-n.de","dynamic-dns.info","feste-ip.net","knx-server.net","static-access.net","realm.cz","*.cryptonomic.net","cupcake.is","*.customer-oci.com","*.oci.customer-oci.com","*.ocp.customer-oci.com","*.ocs.customer-oci.com","cyon.link","cyon.site","daplie.me","localhost.daplie.me","dattolocal.com","dattorelay.com","dattoweb.com","mydatto.com","dattolocal.net","mydatto.net","biz.dk","co.dk","firm.dk","reg.dk","store.dk","*.dapps.earth","*.bzz.dapps.earth","builtwithdark.com","edgestack.me","debian.net","dedyn.io","dnshome.de","online.th","shop.th","drayddns.com","dreamhosters.com","mydrobo.com","drud.io","drud.us","duckdns.org","dy.fi","tunk.org","dyndns-at-home.com","dyndns-at-work.com","dyndns-blog.com","dyndns-free.com","dyndns-home.com","dyndns-ip.com","dyndns-mail.com","dyndns-office.com","dyndns-pics.com","dyndns-remote.com","dyndns-server.com","dyndns-web.com","dyndns-wiki.com","dyndns-work.com","dyndns.biz","dyndns.info","dyndns.org","dyndns.tv","at-band-camp.net","ath.cx","barrel-of-knowledge.info","barrell-of-knowledge.info","better-than.tv","blogdns.com","blogdns.net","blogdns.org","blogsite.org","boldlygoingnowhere.org","broke-it.net","buyshouses.net","cechire.com","dnsalias.com","dnsalias.net","dnsalias.org","dnsdojo.com","dnsdojo.net","dnsdojo.org","does-it.net","doesntexist.com","doesntexist.org","dontexist.com","dontexist.net","dontexist.org","doomdns.com","doomdns.org","dvrdns.org","dyn-o-saur.com","dynalias.com","dynalias.net","dynalias.org","dynathome.net","dyndns.ws","endofinternet.net","endofinternet.org","endoftheinternet.org","est-a-la-maison.com","est-a-la-masion.com","est-le-patron.com","est-mon-blogueur.com","for-better.biz","for-more.biz","for-our.info","for-some.biz","for-the.biz","forgot.her.name","forgot.his.name","from-ak.com","from-al.com","from-ar.com","from-az.net","from-ca.com","from-co.net","from-ct.com","from-dc.com","from-de.com","from-fl.com","from-ga.com","from-hi.com","from-ia.com","from-id.com","from-il.com","from-in.com","from-ks.com","from-ky.com","from-la.net","from-ma.com","from-md.com","from-me.org","from-mi.com","from-mn.com","from-mo.com","from-ms.com","from-mt.com","from-nc.com","from-nd.com","from-ne.com","from-nh.com","from-nj.com","from-nm.com","from-nv.com","from-ny.net","from-oh.com","from-ok.com","from-or.com","from-pa.com","from-pr.com","from-ri.com","from-sc.com","from-sd.com","from-tn.com","from-tx.com","from-ut.com","from-va.com","from-vt.com","from-wa.com","from-wi.com","from-wv.com","from-wy.com","ftpaccess.cc","fuettertdasnetz.de","game-host.org","game-server.cc","getmyip.com","gets-it.net","go.dyndns.org","gotdns.com","gotdns.org","groks-the.info","groks-this.info","ham-radio-op.net","here-for-more.info","hobby-site.com","hobby-site.org","home.dyndns.org","homedns.org","homeftp.net","homeftp.org","homeip.net","homelinux.com","homelinux.net","homelinux.org","homeunix.com","homeunix.net","homeunix.org","iamallama.com","in-the-band.net","is-a-anarchist.com","is-a-blogger.com","is-a-bookkeeper.com","is-a-bruinsfan.org","is-a-bulls-fan.com","is-a-candidate.org","is-a-caterer.com","is-a-celticsfan.org","is-a-chef.com","is-a-chef.net","is-a-chef.org","is-a-conservative.com","is-a-cpa.com","is-a-cubicle-slave.com","is-a-democrat.com","is-a-designer.com","is-a-doctor.com","is-a-financialadvisor.com","is-a-geek.com","is-a-geek.net","is-a-geek.org","is-a-green.com","is-a-guru.com","is-a-hard-worker.com","is-a-hunter.com","is-a-knight.org","is-a-landscaper.com","is-a-lawyer.com","is-a-liberal.com","is-a-libertarian.com","is-a-linux-user.org","is-a-llama.com","is-a-musician.com","is-a-nascarfan.com","is-a-nurse.com","is-a-painter.com","is-a-patsfan.org","is-a-personaltrainer.com","is-a-photographer.com","is-a-player.com","is-a-republican.com","is-a-rockstar.com","is-a-socialist.com","is-a-soxfan.org","is-a-student.com","is-a-teacher.com","is-a-techie.com","is-a-therapist.com","is-an-accountant.com","is-an-actor.com","is-an-actress.com","is-an-anarchist.com","is-an-artist.com","is-an-engineer.com","is-an-entertainer.com","is-by.us","is-certified.com","is-found.org","is-gone.com","is-into-anime.com","is-into-cars.com","is-into-cartoons.com","is-into-games.com","is-leet.com","is-lost.org","is-not-certified.com","is-saved.org","is-slick.com","is-uberleet.com","is-very-bad.org","is-very-evil.org","is-very-good.org","is-very-nice.org","is-very-sweet.org","is-with-theband.com","isa-geek.com","isa-geek.net","isa-geek.org","isa-hockeynut.com","issmarterthanyou.com","isteingeek.de","istmein.de","kicks-ass.net","kicks-ass.org","knowsitall.info","land-4-sale.us","lebtimnetz.de","leitungsen.de","likes-pie.com","likescandy.com","merseine.nu","mine.nu","misconfused.org","mypets.ws","myphotos.cc","neat-url.com","office-on-the.net","on-the-web.tv","podzone.net","podzone.org","readmyblog.org","saves-the-whales.com","scrapper-site.net","scrapping.cc","selfip.biz","selfip.com","selfip.info","selfip.net","selfip.org","sells-for-less.com","sells-for-u.com","sells-it.net","sellsyourhome.org","servebbs.com","servebbs.net","servebbs.org","serveftp.net","serveftp.org","servegame.org","shacknet.nu","simple-url.com","space-to-rent.com","stuff-4-sale.org","stuff-4-sale.us","teaches-yoga.com","thruhere.net","traeumtgerade.de","webhop.biz","webhop.info","webhop.net","webhop.org","worse-than.tv","writesthisblog.com","ddnss.de","dyn.ddnss.de","dyndns.ddnss.de","dyndns1.de","dyn-ip24.de","home-webserver.de","dyn.home-webserver.de","myhome-server.de","ddnss.org","definima.net","definima.io","bci.dnstrace.pro","ddnsfree.com","ddnsgeek.com","giize.com","gleeze.com","kozow.com","loseyourip.com","ooguy.com","theworkpc.com","casacam.net","dynu.net","accesscam.org","camdvr.org","freeddns.org","mywire.org","webredirect.org","myddns.rocks","blogsite.xyz","dynv6.net","e4.cz","en-root.fr","mytuleap.com","onred.one","staging.onred.one","enonic.io","customer.enonic.io","eu.org","al.eu.org","asso.eu.org","at.eu.org","au.eu.org","be.eu.org","bg.eu.org","ca.eu.org","cd.eu.org","ch.eu.org","cn.eu.org","cy.eu.org","cz.eu.org","de.eu.org","dk.eu.org","edu.eu.org","ee.eu.org","es.eu.org","fi.eu.org","fr.eu.org","gr.eu.org","hr.eu.org","hu.eu.org","ie.eu.org","il.eu.org","in.eu.org","int.eu.org","is.eu.org","it.eu.org","jp.eu.org","kr.eu.org","lt.eu.org","lu.eu.org","lv.eu.org","mc.eu.org","me.eu.org","mk.eu.org","mt.eu.org","my.eu.org","net.eu.org","ng.eu.org","nl.eu.org","no.eu.org","nz.eu.org","paris.eu.org","pl.eu.org","pt.eu.org","q-a.eu.org","ro.eu.org","ru.eu.org","se.eu.org","si.eu.org","sk.eu.org","tr.eu.org","uk.eu.org","us.eu.org","eu-1.evennode.com","eu-2.evennode.com","eu-3.evennode.com","eu-4.evennode.com","us-1.evennode.com","us-2.evennode.com","us-3.evennode.com","us-4.evennode.com","twmail.cc","twmail.net","twmail.org","mymailer.com.tw","url.tw","apps.fbsbx.com","ru.net","adygeya.ru","bashkiria.ru","bir.ru","cbg.ru","com.ru","dagestan.ru","grozny.ru","kalmykia.ru","kustanai.ru","marine.ru","mordovia.ru","msk.ru","mytis.ru","nalchik.ru","nov.ru","pyatigorsk.ru","spb.ru","vladikavkaz.ru","vladimir.ru","abkhazia.su","adygeya.su","aktyubinsk.su","arkhangelsk.su","armenia.su","ashgabad.su","azerbaijan.su","balashov.su","bashkiria.su","bryansk.su","bukhara.su","chimkent.su","dagestan.su","east-kazakhstan.su","exnet.su","georgia.su","grozny.su","ivanovo.su","jambyl.su","kalmykia.su","kaluga.su","karacol.su","karaganda.su","karelia.su","khakassia.su","krasnodar.su","kurgan.su","kustanai.su","lenug.su","mangyshlak.su","mordovia.su","msk.su","murmansk.su","nalchik.su","navoi.su","north-kazakhstan.su","nov.su","obninsk.su","penza.su","pokrovsk.su","sochi.su","spb.su","tashkent.su","termez.su","togliatti.su","troitsk.su","tselinograd.su","tula.su","tuva.su","vladikavkaz.su","vladimir.su","vologda.su","channelsdvr.net","u.channelsdvr.net","fastly-terrarium.com","fastlylb.net","map.fastlylb.net","freetls.fastly.net","map.fastly.net","a.prod.fastly.net","global.prod.fastly.net","a.ssl.fastly.net","b.ssl.fastly.net","global.ssl.fastly.net","fastpanel.direct","fastvps-server.com","fhapp.xyz","fedorainfracloud.org","fedorapeople.org","cloud.fedoraproject.org","app.os.fedoraproject.org","app.os.stg.fedoraproject.org","mydobiss.com","filegear.me","filegear-au.me","filegear-de.me","filegear-gb.me","filegear-ie.me","filegear-jp.me","filegear-sg.me","firebaseapp.com","flynnhub.com","flynnhosting.net","0e.vc","freebox-os.com","freeboxos.com","fbx-os.fr","fbxos.fr","freebox-os.fr","freeboxos.fr","freedesktop.org","*.futurecms.at","*.ex.futurecms.at","*.in.futurecms.at","futurehosting.at","futuremailing.at","*.ex.ortsinfo.at","*.kunden.ortsinfo.at","*.statics.cloud","service.gov.uk","gehirn.ne.jp","usercontent.jp","gentapps.com","lab.ms","github.io","githubusercontent.com","gitlab.io","glitch.me","lolipop.io","cloudapps.digital","london.cloudapps.digital","homeoffice.gov.uk","ro.im","shop.ro","goip.de","run.app","a.run.app","web.app","*.0emm.com","appspot.com","*.r.appspot.com","blogspot.ae","blogspot.al","blogspot.am","blogspot.ba","blogspot.be","blogspot.bg","blogspot.bj","blogspot.ca","blogspot.cf","blogspot.ch","blogspot.cl","blogspot.co.at","blogspot.co.id","blogspot.co.il","blogspot.co.ke","blogspot.co.nz","blogspot.co.uk","blogspot.co.za","blogspot.com","blogspot.com.ar","blogspot.com.au","blogspot.com.br","blogspot.com.by","blogspot.com.co","blogspot.com.cy","blogspot.com.ee","blogspot.com.eg","blogspot.com.es","blogspot.com.mt","blogspot.com.ng","blogspot.com.tr","blogspot.com.uy","blogspot.cv","blogspot.cz","blogspot.de","blogspot.dk","blogspot.fi","blogspot.fr","blogspot.gr","blogspot.hk","blogspot.hr","blogspot.hu","blogspot.ie","blogspot.in","blogspot.is","blogspot.it","blogspot.jp","blogspot.kr","blogspot.li","blogspot.lt","blogspot.lu","blogspot.md","blogspot.mk","blogspot.mr","blogspot.mx","blogspot.my","blogspot.nl","blogspot.no","blogspot.pe","blogspot.pt","blogspot.qa","blogspot.re","blogspot.ro","blogspot.rs","blogspot.ru","blogspot.se","blogspot.sg","blogspot.si","blogspot.sk","blogspot.sn","blogspot.td","blogspot.tw","blogspot.ug","blogspot.vn","cloudfunctions.net","cloud.goog","codespot.com","googleapis.com","googlecode.com","pagespeedmobilizer.com","publishproxy.com","withgoogle.com","withyoutube.com","awsmppl.com","fin.ci","free.hr","caa.li","ua.rs","conf.se","hs.zone","hs.run","hashbang.sh","hasura.app","hasura-app.io","hepforge.org","herokuapp.com","herokussl.com","myravendb.com","ravendb.community","ravendb.me","development.run","ravendb.run","bpl.biz","orx.biz","ng.city","biz.gl","ng.ink","col.ng","firm.ng","gen.ng","ltd.ng","ngo.ng","ng.school","sch.so","häkkinen.fi","*.moonscale.io","moonscale.net","iki.fi","dyn-berlin.de","in-berlin.de","in-brb.de","in-butter.de","in-dsl.de","in-dsl.net","in-dsl.org","in-vpn.de","in-vpn.net","in-vpn.org","biz.at","info.at","info.cx","ac.leg.br","al.leg.br","am.leg.br","ap.leg.br","ba.leg.br","ce.leg.br","df.leg.br","es.leg.br","go.leg.br","ma.leg.br","mg.leg.br","ms.leg.br","mt.leg.br","pa.leg.br","pb.leg.br","pe.leg.br","pi.leg.br","pr.leg.br","rj.leg.br","rn.leg.br","ro.leg.br","rr.leg.br","rs.leg.br","sc.leg.br","se.leg.br","sp.leg.br","to.leg.br","pixolino.com","ipifony.net","mein-iserv.de","test-iserv.de","iserv.dev","iobb.net","myjino.ru","*.hosting.myjino.ru","*.landing.myjino.ru","*.spectrum.myjino.ru","*.vps.myjino.ru","*.triton.zone","*.cns.joyent.com","js.org","kaas.gg","khplay.nl","keymachine.de","kinghost.net","uni5.net","knightpoint.systems","oya.to","co.krd","edu.krd","git-repos.de","lcube-server.de","svn-repos.de","leadpages.co","lpages.co","lpusercontent.com","lelux.site","co.business","co.education","co.events","co.financial","co.network","co.place","co.technology","app.lmpm.com","linkitools.space","linkyard.cloud","linkyard-cloud.ch","members.linode.com","nodebalancer.linode.com","we.bs","loginline.app","loginline.dev","loginline.io","loginline.services","loginline.site","krasnik.pl","leczna.pl","lubartow.pl","lublin.pl","poniatowa.pl","swidnik.pl","uklugs.org","glug.org.uk","lug.org.uk","lugs.org.uk","barsy.bg","barsy.co.uk","barsyonline.co.uk","barsycenter.com","barsyonline.com","barsy.club","barsy.de","barsy.eu","barsy.in","barsy.info","barsy.io","barsy.me","barsy.menu","barsy.mobi","barsy.net","barsy.online","barsy.org","barsy.pro","barsy.pub","barsy.shop","barsy.site","barsy.support","barsy.uk","*.magentosite.cloud","mayfirst.info","mayfirst.org","hb.cldmail.ru","miniserver.com","memset.net","cloud.metacentrum.cz","custom.metacentrum.cz","flt.cloud.muni.cz","usr.cloud.muni.cz","meteorapp.com","eu.meteorapp.com","co.pl","azurecontainer.io","azurewebsites.net","azure-mobile.net","cloudapp.net","mozilla-iot.org","bmoattachments.org","net.ru","org.ru","pp.ru","ui.nabu.casa","pony.club","of.fashion","on.fashion","of.football","in.london","of.london","for.men","and.mom","for.mom","for.one","for.sale","of.work","to.work","nctu.me","bitballoon.com","netlify.com","4u.com","ngrok.io","nh-serv.co.uk","nfshost.com","dnsking.ch","mypi.co","n4t.co","001www.com","ddnslive.com","myiphost.com","forumz.info","16-b.it","32-b.it","64-b.it","soundcast.me","tcp4.me","dnsup.net","hicam.net","now-dns.net","ownip.net","vpndns.net","dynserv.org","now-dns.org","x443.pw","now-dns.top","ntdll.top","freeddns.us","crafting.xyz","zapto.xyz","nsupdate.info","nerdpol.ovh","blogsyte.com","brasilia.me","cable-modem.org","ciscofreak.com","collegefan.org","couchpotatofries.org","damnserver.com","ddns.me","ditchyourip.com","dnsfor.me","dnsiskinky.com","dvrcam.info","dynns.com","eating-organic.net","fantasyleague.cc","geekgalaxy.com","golffan.us","health-carereform.com","homesecuritymac.com","homesecuritypc.com","hopto.me","ilovecollege.info","loginto.me","mlbfan.org","mmafan.biz","myactivedirectory.com","mydissent.net","myeffect.net","mymediapc.net","mypsx.net","mysecuritycamera.com","mysecuritycamera.net","mysecuritycamera.org","net-freaks.com","nflfan.org","nhlfan.net","no-ip.ca","no-ip.co.uk","no-ip.net","noip.us","onthewifi.com","pgafan.net","point2this.com","pointto.us","privatizehealthinsurance.net","quicksytes.com","read-books.org","securitytactics.com","serveexchange.com","servehumour.com","servep2p.com","servesarcasm.com","stufftoread.com","ufcfan.org","unusualperson.com","workisboring.com","3utilities.com","bounceme.net","ddns.net","ddnsking.com","gotdns.ch","hopto.org","myftp.biz","myftp.org","myvnc.com","no-ip.biz","no-ip.info","no-ip.org","noip.me","redirectme.net","servebeer.com","serveblog.net","servecounterstrike.com","serveftp.com","servegame.com","servehalflife.com","servehttp.com","serveirc.com","serveminecraft.net","servemp3.com","servepics.com","servequake.com","sytes.net","webhop.me","zapto.org","stage.nodeart.io","nodum.co","nodum.io","pcloud.host","nyc.mn","nom.ae","nom.af","nom.ai","nom.al","nym.by","nom.bz","nym.bz","nom.cl","nym.ec","nom.gd","nom.ge","nom.gl","nym.gr","nom.gt","nym.gy","nym.hk","nom.hn","nym.ie","nom.im","nom.ke","nym.kz","nym.la","nym.lc","nom.li","nym.li","nym.lt","nym.lu","nom.lv","nym.me","nom.mk","nym.mn","nym.mx","nom.nu","nym.nz","nym.pe","nym.pt","nom.pw","nom.qa","nym.ro","nom.rs","nom.si","nym.sk","nom.st","nym.su","nym.sx","nom.tj","nym.tw","nom.ug","nom.uy","nom.vc","nom.vg","static.observableusercontent.com","cya.gg","cloudycluster.net","nid.io","opencraft.hosting","operaunite.com","skygearapp.com","outsystemscloud.com","ownprovider.com","own.pm","ox.rs","oy.lc","pgfog.com","pagefrontapp.com","art.pl","gliwice.pl","krakow.pl","poznan.pl","wroc.pl","zakopane.pl","pantheonsite.io","gotpantheon.com","mypep.link","perspecta.cloud","on-web.fr","*.platform.sh","*.platformsh.site","dyn53.io","co.bn","xen.prgmr.com","priv.at","prvcy.page","*.dweb.link","protonet.io","chirurgiens-dentistes-en-france.fr","byen.site","pubtls.org","qualifioapp.com","qbuser.com","instantcloud.cn","ras.ru","qa2.com","qcx.io","*.sys.qcx.io","dev-myqnapcloud.com","alpha-myqnapcloud.com","myqnapcloud.com","*.quipelements.com","vapor.cloud","vaporcloud.io","rackmaze.com","rackmaze.net","*.on-k3s.io","*.on-rancher.cloud","*.on-rio.io","readthedocs.io","rhcloud.com","app.render.com","onrender.com","repl.co","repl.run","resindevice.io","devices.resinstaging.io","hzc.io","wellbeingzone.eu","ptplus.fit","wellbeingzone.co.uk","git-pages.rit.edu","sandcats.io","logoip.de","logoip.com","schokokeks.net","gov.scot","scrysec.com","firewall-gateway.com","firewall-gateway.de","my-gateway.de","my-router.de","spdns.de","spdns.eu","firewall-gateway.net","my-firewall.org","myfirewall.org","spdns.org","senseering.net","biz.ua","co.ua","pp.ua","shiftedit.io","myshopblocks.com","shopitsite.com","mo-siemens.io","1kapp.com","appchizi.com","applinzi.com","sinaapp.com","vipsinaapp.com","siteleaf.net","bounty-full.com","alpha.bounty-full.com","beta.bounty-full.com","stackhero-network.com","static.land","dev.static.land","sites.static.land","apps.lair.io","*.stolos.io","spacekit.io","customer.speedpartner.de","api.stdlib.com","storj.farm","utwente.io","soc.srcf.net","user.srcf.net","temp-dns.com","applicationcloud.io","scapp.io","*.s5y.io","*.sensiosite.cloud","syncloud.it","diskstation.me","dscloud.biz","dscloud.me","dscloud.mobi","dsmynas.com","dsmynas.net","dsmynas.org","familyds.com","familyds.net","familyds.org","i234.me","myds.me","synology.me","vpnplus.to","direct.quickconnect.to","taifun-dns.de","gda.pl","gdansk.pl","gdynia.pl","med.pl","sopot.pl","edugit.org","telebit.app","telebit.io","*.telebit.xyz","gwiddle.co.uk","thingdustdata.com","cust.dev.thingdust.io","cust.disrec.thingdust.io","cust.prod.thingdust.io","cust.testing.thingdust.io","arvo.network","azimuth.network","bloxcms.com","townnews-staging.com","12hp.at","2ix.at","4lima.at","lima-city.at","12hp.ch","2ix.ch","4lima.ch","lima-city.ch","trafficplex.cloud","de.cool","12hp.de","2ix.de","4lima.de","lima-city.de","1337.pictures","clan.rip","lima-city.rocks","webspace.rocks","lima.zone","*.transurl.be","*.transurl.eu","*.transurl.nl","tuxfamily.org","dd-dns.de","diskstation.eu","diskstation.org","dray-dns.de","draydns.de","dyn-vpn.de","dynvpn.de","mein-vigor.de","my-vigor.de","my-wan.de","syno-ds.de","synology-diskstation.de","synology-ds.de","uber.space","*.uberspace.de","hk.com","hk.org","ltd.hk","inc.hk","virtualuser.de","virtual-user.de","urown.cloud","dnsupdate.info","lib.de.us","2038.io","router.management","v-info.info","voorloper.cloud","v.ua","wafflecell.com","*.webhare.dev","wedeploy.io","wedeploy.me","wedeploy.sh","remotewd.com","wmflabs.org","myforum.community","community-pro.de","diskussionsbereich.de","community-pro.net","meinforum.net","half.host","xnbay.com","u2.xnbay.com","u2-local.xnbay.com","cistron.nl","demon.nl","xs4all.space","yandexcloud.net","storage.yandexcloud.net","website.yandexcloud.net","official.academy","yolasite.com","ybo.faith","yombo.me","homelink.one","ybo.party","ybo.review","ybo.science","ybo.trade","nohost.me","noho.st","za.net","za.org","now.sh","bss.design","basicserver.io","virtualserver.io","enterprisecloud.nu"];
|
|
|
|
/***/ }),
|
|
|
|
/***/ 53:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const context_1 = __webpack_require__(560);
|
|
class NoopContextManager {
|
|
active() {
|
|
return context_1.Context.ROOT_CONTEXT;
|
|
}
|
|
with(context, fn) {
|
|
return fn();
|
|
}
|
|
bind(target, context) {
|
|
return target;
|
|
}
|
|
enable() {
|
|
return this;
|
|
}
|
|
disable() {
|
|
return this;
|
|
}
|
|
}
|
|
exports.NoopContextManager = NoopContextManager;
|
|
//# sourceMappingURL=NoopContextManager.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 65:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
Disconnected: 1,
|
|
Preceding: 2,
|
|
Following: 4,
|
|
Contains: 8,
|
|
ContainedBy: 16,
|
|
ImplementationSpecific: 32
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 71:
|
|
/***/ (function() {
|
|
|
|
"use strict";
|
|
|
|
if (typeof Symbol === undefined || !Symbol.asyncIterator) {
|
|
Symbol.asyncIterator = Symbol.for("Symbol.asyncIterator");
|
|
}
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 86:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var rng = __webpack_require__(139);
|
|
var bytesToUuid = __webpack_require__(722);
|
|
|
|
// **`v1()` - Generate time-based UUID**
|
|
//
|
|
// Inspired by https://github.com/LiosK/UUID.js
|
|
// and http://docs.python.org/library/uuid.html
|
|
|
|
var _nodeId;
|
|
var _clockseq;
|
|
|
|
// Previous uuid creation time
|
|
var _lastMSecs = 0;
|
|
var _lastNSecs = 0;
|
|
|
|
// See https://github.com/uuidjs/uuid for API details
|
|
function v1(options, buf, offset) {
|
|
var i = buf && offset || 0;
|
|
var b = buf || [];
|
|
|
|
options = options || {};
|
|
var node = options.node || _nodeId;
|
|
var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
|
|
|
|
// node and clockseq need to be initialized to random values if they're not
|
|
// specified. We do this lazily to minimize issues related to insufficient
|
|
// system entropy. See #189
|
|
if (node == null || clockseq == null) {
|
|
var seedBytes = rng();
|
|
if (node == null) {
|
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
|
node = _nodeId = [
|
|
seedBytes[0] | 0x01,
|
|
seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
|
|
];
|
|
}
|
|
if (clockseq == null) {
|
|
// Per 4.2.2, randomize (14 bit) clockseq
|
|
clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
}
|
|
}
|
|
|
|
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
|
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
|
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();
|
|
|
|
// Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
// cycle to simulate higher resolution clock
|
|
var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
|
|
|
|
// Time since last uuid creation (in msecs)
|
|
var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
|
|
|
|
// Per 4.2.1.2, Bump clockseq on clock regression
|
|
if (dt < 0 && options.clockseq === undefined) {
|
|
clockseq = clockseq + 1 & 0x3fff;
|
|
}
|
|
|
|
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
// time interval
|
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
nsecs = 0;
|
|
}
|
|
|
|
// Per 4.2.1.2 Throw error if too many uuids are requested
|
|
if (nsecs >= 10000) {
|
|
throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
|
|
}
|
|
|
|
_lastMSecs = msecs;
|
|
_lastNSecs = nsecs;
|
|
_clockseq = clockseq;
|
|
|
|
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
msecs += 12219292800000;
|
|
|
|
// `time_low`
|
|
var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
b[i++] = tl >>> 24 & 0xff;
|
|
b[i++] = tl >>> 16 & 0xff;
|
|
b[i++] = tl >>> 8 & 0xff;
|
|
b[i++] = tl & 0xff;
|
|
|
|
// `time_mid`
|
|
var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
|
|
b[i++] = tmh >>> 8 & 0xff;
|
|
b[i++] = tmh & 0xff;
|
|
|
|
// `time_high_and_version`
|
|
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
b[i++] = tmh >>> 16 & 0xff;
|
|
|
|
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
b[i++] = clockseq >>> 8 | 0x80;
|
|
|
|
// `clock_seq_low`
|
|
b[i++] = clockseq & 0xff;
|
|
|
|
// `node`
|
|
for (var n = 0; n < 6; ++n) {
|
|
b[i + n] = node[n];
|
|
}
|
|
|
|
return buf ? buf : bytesToUuid(b);
|
|
}
|
|
|
|
module.exports = v1;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 87:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("os");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 89:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2015, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
const pubsuffix = __webpack_require__(562);
|
|
|
|
// Gives the permutation of all possible domainMatch()es of a given domain. The
|
|
// array is in shortest-to-longest order. Handy for indexing.
|
|
const SPECIAL_USE_DOMAINS = ["local"]; // RFC 6761
|
|
function permuteDomain(domain, allowSpecialUseDomain) {
|
|
let pubSuf = null;
|
|
if (allowSpecialUseDomain) {
|
|
const domainParts = domain.split(".");
|
|
if (SPECIAL_USE_DOMAINS.includes(domainParts[domainParts.length - 1])) {
|
|
pubSuf = `${domainParts[domainParts.length - 2]}.${
|
|
domainParts[domainParts.length - 1]
|
|
}`;
|
|
} else {
|
|
pubSuf = pubsuffix.getPublicSuffix(domain);
|
|
}
|
|
} else {
|
|
pubSuf = pubsuffix.getPublicSuffix(domain);
|
|
}
|
|
|
|
if (!pubSuf) {
|
|
return null;
|
|
}
|
|
if (pubSuf == domain) {
|
|
return [domain];
|
|
}
|
|
|
|
const prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"
|
|
const parts = prefix.split(".").reverse();
|
|
let cur = pubSuf;
|
|
const permutations = [cur];
|
|
while (parts.length) {
|
|
cur = `${parts.shift()}.${cur}`;
|
|
permutations.push(cur);
|
|
}
|
|
return permutations;
|
|
}
|
|
|
|
exports.permuteDomain = permuteDomain;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 90:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(241));
|
|
|
|
var _sha = _interopRequireDefault(__webpack_require__(616));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const v5 = (0, _v.default)('v5', 0x50, _sha.default);
|
|
var _default = v5;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 91:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var serialOrdered = __webpack_require__(892);
|
|
|
|
// Public API
|
|
module.exports = serial;
|
|
|
|
/**
|
|
* Runs iterator over provided array elements in series
|
|
*
|
|
* @param {array|object} list - array or object (named list) to iterate over
|
|
* @param {function} iterator - iterator to run
|
|
* @param {function} callback - invoked when all elements processed
|
|
* @returns {function} - jobs terminator
|
|
*/
|
|
function serial(list, iterator, callback)
|
|
{
|
|
return serialOrdered(list, iterator, null, callback);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 93:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
module.exports = minimatch
|
|
minimatch.Minimatch = Minimatch
|
|
|
|
var path = { sep: '/' }
|
|
try {
|
|
path = __webpack_require__(622)
|
|
} catch (er) {}
|
|
|
|
var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}
|
|
var expand = __webpack_require__(306)
|
|
|
|
var plTypes = {
|
|
'!': { open: '(?:(?!(?:', close: '))[^/]*?)'},
|
|
'?': { open: '(?:', close: ')?' },
|
|
'+': { open: '(?:', close: ')+' },
|
|
'*': { open: '(?:', close: ')*' },
|
|
'@': { open: '(?:', close: ')' }
|
|
}
|
|
|
|
// any single thing other than /
|
|
// don't need to escape / when using new RegExp()
|
|
var qmark = '[^/]'
|
|
|
|
// * => any number of characters
|
|
var star = 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.
|
|
var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?'
|
|
|
|
// not a ^ or / followed by a dot,
|
|
// followed by anything, any number of times.
|
|
var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?'
|
|
|
|
// characters that need to be escaped in RegExp.
|
|
var reSpecials = charSet('().*{}+?[]^$\\!')
|
|
|
|
// "abc" -> { a:true, b:true, c:true }
|
|
function charSet (s) {
|
|
return s.split('').reduce(function (set, c) {
|
|
set[c] = true
|
|
return set
|
|
}, {})
|
|
}
|
|
|
|
// normalizes slashes.
|
|
var slashSplit = /\/+/
|
|
|
|
minimatch.filter = filter
|
|
function filter (pattern, options) {
|
|
options = options || {}
|
|
return function (p, i, list) {
|
|
return minimatch(p, pattern, options)
|
|
}
|
|
}
|
|
|
|
function ext (a, b) {
|
|
a = a || {}
|
|
b = b || {}
|
|
var t = {}
|
|
Object.keys(b).forEach(function (k) {
|
|
t[k] = b[k]
|
|
})
|
|
Object.keys(a).forEach(function (k) {
|
|
t[k] = a[k]
|
|
})
|
|
return t
|
|
}
|
|
|
|
minimatch.defaults = function (def) {
|
|
if (!def || !Object.keys(def).length) return minimatch
|
|
|
|
var orig = minimatch
|
|
|
|
var m = function minimatch (p, pattern, options) {
|
|
return orig.minimatch(p, pattern, ext(def, options))
|
|
}
|
|
|
|
m.Minimatch = function Minimatch (pattern, options) {
|
|
return new orig.Minimatch(pattern, ext(def, options))
|
|
}
|
|
|
|
return m
|
|
}
|
|
|
|
Minimatch.defaults = function (def) {
|
|
if (!def || !Object.keys(def).length) return Minimatch
|
|
return minimatch.defaults(def).Minimatch
|
|
}
|
|
|
|
function minimatch (p, pattern, options) {
|
|
if (typeof pattern !== 'string') {
|
|
throw new TypeError('glob pattern string required')
|
|
}
|
|
|
|
if (!options) options = {}
|
|
|
|
// shortcut: comments match nothing.
|
|
if (!options.nocomment && pattern.charAt(0) === '#') {
|
|
return false
|
|
}
|
|
|
|
// "" only matches ""
|
|
if (pattern.trim() === '') return p === ''
|
|
|
|
return new Minimatch(pattern, options).match(p)
|
|
}
|
|
|
|
function Minimatch (pattern, options) {
|
|
if (!(this instanceof Minimatch)) {
|
|
return new Minimatch(pattern, options)
|
|
}
|
|
|
|
if (typeof pattern !== 'string') {
|
|
throw new TypeError('glob pattern string required')
|
|
}
|
|
|
|
if (!options) options = {}
|
|
pattern = pattern.trim()
|
|
|
|
// windows support: need to use /, not \
|
|
if (path.sep !== '/') {
|
|
pattern = pattern.split(path.sep).join('/')
|
|
}
|
|
|
|
this.options = options
|
|
this.set = []
|
|
this.pattern = pattern
|
|
this.regexp = null
|
|
this.negate = false
|
|
this.comment = false
|
|
this.empty = false
|
|
|
|
// make the set of regexps etc.
|
|
this.make()
|
|
}
|
|
|
|
Minimatch.prototype.debug = function () {}
|
|
|
|
Minimatch.prototype.make = make
|
|
function make () {
|
|
// don't do it more than once.
|
|
if (this._made) return
|
|
|
|
var pattern = this.pattern
|
|
var 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
|
|
var set = this.globSet = this.braceExpand()
|
|
|
|
if (options.debug) this.debug = console.error
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
// 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
|
|
set = this.globParts = set.map(function (s) {
|
|
return s.split(slashSplit)
|
|
})
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
// glob --> regexps
|
|
set = set.map(function (s, si, set) {
|
|
return s.map(this.parse, this)
|
|
}, this)
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
// filter out everything that didn't compile properly.
|
|
set = set.filter(function (s) {
|
|
return s.indexOf(false) === -1
|
|
})
|
|
|
|
this.debug(this.pattern, set)
|
|
|
|
this.set = set
|
|
}
|
|
|
|
Minimatch.prototype.parseNegate = parseNegate
|
|
function parseNegate () {
|
|
var pattern = this.pattern
|
|
var negate = false
|
|
var options = this.options
|
|
var negateOffset = 0
|
|
|
|
if (options.nonegate) return
|
|
|
|
for (var i = 0, l = pattern.length
|
|
; i < l && pattern.charAt(i) === '!'
|
|
; i++) {
|
|
negate = !negate
|
|
negateOffset++
|
|
}
|
|
|
|
if (negateOffset) this.pattern = pattern.substr(negateOffset)
|
|
this.negate = negate
|
|
}
|
|
|
|
// 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
|
|
minimatch.braceExpand = function (pattern, options) {
|
|
return braceExpand(pattern, options)
|
|
}
|
|
|
|
Minimatch.prototype.braceExpand = braceExpand
|
|
|
|
function braceExpand (pattern, options) {
|
|
if (!options) {
|
|
if (this instanceof Minimatch) {
|
|
options = this.options
|
|
} else {
|
|
options = {}
|
|
}
|
|
}
|
|
|
|
pattern = typeof pattern === 'undefined'
|
|
? this.pattern : pattern
|
|
|
|
if (typeof pattern === 'undefined') {
|
|
throw new TypeError('undefined pattern')
|
|
}
|
|
|
|
if (options.nobrace ||
|
|
!pattern.match(/\{.*\}/)) {
|
|
// shortcut. no need to expand.
|
|
return [pattern]
|
|
}
|
|
|
|
return expand(pattern)
|
|
}
|
|
|
|
// 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.
|
|
Minimatch.prototype.parse = parse
|
|
var SUBPARSE = {}
|
|
function parse (pattern, isSub) {
|
|
if (pattern.length > 1024 * 64) {
|
|
throw new TypeError('pattern is too long')
|
|
}
|
|
|
|
var options = this.options
|
|
|
|
// shortcuts
|
|
if (!options.noglobstar && pattern === '**') return GLOBSTAR
|
|
if (pattern === '') return ''
|
|
|
|
var re = ''
|
|
var hasMagic = !!options.nocase
|
|
var escaping = false
|
|
// ? => one single character
|
|
var patternListStack = []
|
|
var negativeLists = []
|
|
var stateChar
|
|
var inClass = false
|
|
var reClassStart = -1
|
|
var classStart = -1
|
|
// . and .. never match anything that doesn't start with .,
|
|
// even when options.dot is set.
|
|
var patternStart = pattern.charAt(0) === '.' ? '' // anything
|
|
// not (start or / followed by . or .. followed by / or end)
|
|
: options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))'
|
|
: '(?!\\.)'
|
|
var self = this
|
|
|
|
function clearStateChar () {
|
|
if (stateChar) {
|
|
// we had some state-tracking character
|
|
// that wasn't consumed by this pass.
|
|
switch (stateChar) {
|
|
case '*':
|
|
re += star
|
|
hasMagic = true
|
|
break
|
|
case '?':
|
|
re += qmark
|
|
hasMagic = true
|
|
break
|
|
default:
|
|
re += '\\' + stateChar
|
|
break
|
|
}
|
|
self.debug('clearStateChar %j %j', stateChar, re)
|
|
stateChar = false
|
|
}
|
|
}
|
|
|
|
for (var i = 0, len = pattern.length, c
|
|
; (i < len) && (c = pattern.charAt(i))
|
|
; i++) {
|
|
this.debug('%s\t%s %s %j', pattern, i, re, c)
|
|
|
|
// skip over any that are escaped.
|
|
if (escaping && reSpecials[c]) {
|
|
re += '\\' + c
|
|
escaping = false
|
|
continue
|
|
}
|
|
|
|
switch (c) {
|
|
case '/':
|
|
// completely not allowed, even escaped.
|
|
// Should already be path-split by now.
|
|
return false
|
|
|
|
case '\\':
|
|
clearStateChar()
|
|
escaping = true
|
|
continue
|
|
|
|
// the various stateChar values
|
|
// for the "extglob" stuff.
|
|
case '?':
|
|
case '*':
|
|
case '+':
|
|
case '@':
|
|
case '!':
|
|
this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c)
|
|
|
|
// all of those are literals inside a class, except that
|
|
// the glob [!a] means [^a] in regexp
|
|
if (inClass) {
|
|
this.debug(' in class')
|
|
if (c === '!' && i === classStart + 1) c = '^'
|
|
re += c
|
|
continue
|
|
}
|
|
|
|
// if we already have a stateChar, then it means
|
|
// that there was something like ** or +? in there.
|
|
// Handle the stateChar, then proceed with this one.
|
|
self.debug('call clearStateChar %j', stateChar)
|
|
clearStateChar()
|
|
stateChar = c
|
|
// if extglob is disabled, then +(asdf|foo) isn't a thing.
|
|
// just clear the statechar *now*, rather than even diving into
|
|
// the patternList stuff.
|
|
if (options.noext) clearStateChar()
|
|
continue
|
|
|
|
case '(':
|
|
if (inClass) {
|
|
re += '('
|
|
continue
|
|
}
|
|
|
|
if (!stateChar) {
|
|
re += '\\('
|
|
continue
|
|
}
|
|
|
|
patternListStack.push({
|
|
type: stateChar,
|
|
start: i - 1,
|
|
reStart: re.length,
|
|
open: plTypes[stateChar].open,
|
|
close: plTypes[stateChar].close
|
|
})
|
|
// negation is (?:(?!js)[^/]*)
|
|
re += stateChar === '!' ? '(?:(?!(?:' : '(?:'
|
|
this.debug('plType %j %j', stateChar, re)
|
|
stateChar = false
|
|
continue
|
|
|
|
case ')':
|
|
if (inClass || !patternListStack.length) {
|
|
re += '\\)'
|
|
continue
|
|
}
|
|
|
|
clearStateChar()
|
|
hasMagic = true
|
|
var pl = patternListStack.pop()
|
|
// negation is (?:(?!js)[^/]*)
|
|
// The others are (?:<pattern>)<type>
|
|
re += pl.close
|
|
if (pl.type === '!') {
|
|
negativeLists.push(pl)
|
|
}
|
|
pl.reEnd = re.length
|
|
continue
|
|
|
|
case '|':
|
|
if (inClass || !patternListStack.length || escaping) {
|
|
re += '\\|'
|
|
escaping = false
|
|
continue
|
|
}
|
|
|
|
clearStateChar()
|
|
re += '|'
|
|
continue
|
|
|
|
// these are mostly the same in regexp and glob
|
|
case '[':
|
|
// swallow any state-tracking char before the [
|
|
clearStateChar()
|
|
|
|
if (inClass) {
|
|
re += '\\' + c
|
|
continue
|
|
}
|
|
|
|
inClass = true
|
|
classStart = i
|
|
reClassStart = re.length
|
|
re += c
|
|
continue
|
|
|
|
case ']':
|
|
// a right bracket shall lose its special
|
|
// meaning and represent itself in
|
|
// a bracket expression if it occurs
|
|
// first in the list. -- POSIX.2 2.8.3.2
|
|
if (i === classStart + 1 || !inClass) {
|
|
re += '\\' + c
|
|
escaping = false
|
|
continue
|
|
}
|
|
|
|
// handle the case where we left a class open.
|
|
// "[z-a]" is valid, equivalent to "\[z-a\]"
|
|
if (inClass) {
|
|
// split where the last [ was, make sure we don't have
|
|
// an invalid re. if so, re-walk the contents of the
|
|
// would-be class to re-translate any characters that
|
|
// were passed through as-is
|
|
// TODO: It would probably be faster to determine this
|
|
// without a try/catch and a new RegExp, but it's tricky
|
|
// to do safely. For now, this is safe and works.
|
|
var cs = pattern.substring(classStart + 1, i)
|
|
try {
|
|
RegExp('[' + cs + ']')
|
|
} catch (er) {
|
|
// not a valid class!
|
|
var sp = this.parse(cs, SUBPARSE)
|
|
re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'
|
|
hasMagic = hasMagic || sp[1]
|
|
inClass = false
|
|
continue
|
|
}
|
|
}
|
|
|
|
// finish up the class.
|
|
hasMagic = true
|
|
inClass = false
|
|
re += c
|
|
continue
|
|
|
|
default:
|
|
// swallow any state char that wasn't consumed
|
|
clearStateChar()
|
|
|
|
if (escaping) {
|
|
// no need
|
|
escaping = false
|
|
} else if (reSpecials[c]
|
|
&& !(c === '^' && inClass)) {
|
|
re += '\\'
|
|
}
|
|
|
|
re += c
|
|
|
|
} // switch
|
|
} // for
|
|
|
|
// handle the case where we left a class open.
|
|
// "[abc" is valid, equivalent to "\[abc"
|
|
if (inClass) {
|
|
// split where the last [ was, and escape it
|
|
// this is a huge pita. We now have to re-walk
|
|
// the contents of the would-be class to re-translate
|
|
// any characters that were passed through as-is
|
|
cs = pattern.substr(classStart + 1)
|
|
sp = this.parse(cs, SUBPARSE)
|
|
re = re.substr(0, reClassStart) + '\\[' + sp[0]
|
|
hasMagic = hasMagic || sp[1]
|
|
}
|
|
|
|
// handle the case where we had a +( thing at the *end*
|
|
// of the pattern.
|
|
// each pattern list stack adds 3 chars, and we need to go through
|
|
// and escape any | chars that were passed through as-is for the regexp.
|
|
// Go through and escape them, taking care not to double-escape any
|
|
// | chars that were already escaped.
|
|
for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {
|
|
var tail = re.slice(pl.reStart + pl.open.length)
|
|
this.debug('setting tail', re, pl)
|
|
// maybe some even number of \, then maybe 1 \, followed by a |
|
|
tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) {
|
|
if (!$2) {
|
|
// the | isn't already escaped, so escape it.
|
|
$2 = '\\'
|
|
}
|
|
|
|
// need to escape all those slashes *again*, without escaping the
|
|
// one that we need for escaping the | character. As it works out,
|
|
// escaping an even number of slashes can be done by simply repeating
|
|
// it exactly after itself. That's why this trick works.
|
|
//
|
|
// I am sorry that you have to see this.
|
|
return $1 + $1 + $2 + '|'
|
|
})
|
|
|
|
this.debug('tail=%j\n %s', tail, tail, pl, re)
|
|
var t = pl.type === '*' ? star
|
|
: pl.type === '?' ? qmark
|
|
: '\\' + pl.type
|
|
|
|
hasMagic = true
|
|
re = re.slice(0, pl.reStart) + t + '\\(' + tail
|
|
}
|
|
|
|
// handle trailing things that only matter at the very end.
|
|
clearStateChar()
|
|
if (escaping) {
|
|
// trailing \\
|
|
re += '\\\\'
|
|
}
|
|
|
|
// only need to apply the nodot start if the re starts with
|
|
// something that could conceivably capture a dot
|
|
var addPatternStart = false
|
|
switch (re.charAt(0)) {
|
|
case '.':
|
|
case '[':
|
|
case '(': addPatternStart = true
|
|
}
|
|
|
|
// Hack to work around lack of negative lookbehind in JS
|
|
// A pattern like: *.!(x).!(y|z) needs to ensure that a name
|
|
// like 'a.xyz.yz' doesn't match. So, the first negative
|
|
// lookahead, has to look ALL the way ahead, to the end of
|
|
// the pattern.
|
|
for (var n = negativeLists.length - 1; n > -1; n--) {
|
|
var nl = negativeLists[n]
|
|
|
|
var nlBefore = re.slice(0, nl.reStart)
|
|
var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)
|
|
var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)
|
|
var nlAfter = re.slice(nl.reEnd)
|
|
|
|
nlLast += nlAfter
|
|
|
|
// Handle nested stuff like *(*.js|!(*.json)), where open parens
|
|
// mean that we should *not* include the ) in the bit that is considered
|
|
// "after" the negated section.
|
|
var openParensBefore = nlBefore.split('(').length - 1
|
|
var cleanAfter = nlAfter
|
|
for (i = 0; i < openParensBefore; i++) {
|
|
cleanAfter = cleanAfter.replace(/\)[+*?]?/, '')
|
|
}
|
|
nlAfter = cleanAfter
|
|
|
|
var dollar = ''
|
|
if (nlAfter === '' && isSub !== SUBPARSE) {
|
|
dollar = '$'
|
|
}
|
|
var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast
|
|
re = newRe
|
|
}
|
|
|
|
// if the re is not "" at this point, then we need to make sure
|
|
// it doesn't match against an empty path part.
|
|
// Otherwise a/* will match a/, which it should not.
|
|
if (re !== '' && hasMagic) {
|
|
re = '(?=.)' + re
|
|
}
|
|
|
|
if (addPatternStart) {
|
|
re = patternStart + re
|
|
}
|
|
|
|
// parsing just a piece of a larger pattern.
|
|
if (isSub === SUBPARSE) {
|
|
return [re, hasMagic]
|
|
}
|
|
|
|
// skip the regexp for non-magical patterns
|
|
// unescape anything in it, though, so that it'll be
|
|
// an exact match against a file etc.
|
|
if (!hasMagic) {
|
|
return globUnescape(pattern)
|
|
}
|
|
|
|
var flags = options.nocase ? 'i' : ''
|
|
try {
|
|
var regExp = new RegExp('^' + re + '$', flags)
|
|
} catch (er) {
|
|
// If it was an invalid regular expression, then it can't match
|
|
// anything. This trick looks for a character after the end of
|
|
// the string, which is of course impossible, except in multi-line
|
|
// mode, but it's not a /m regex.
|
|
return new RegExp('$.')
|
|
}
|
|
|
|
regExp._glob = pattern
|
|
regExp._src = re
|
|
|
|
return regExp
|
|
}
|
|
|
|
minimatch.makeRe = function (pattern, options) {
|
|
return new Minimatch(pattern, options || {}).makeRe()
|
|
}
|
|
|
|
Minimatch.prototype.makeRe = makeRe
|
|
function 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.
|
|
var set = this.set
|
|
|
|
if (!set.length) {
|
|
this.regexp = false
|
|
return this.regexp
|
|
}
|
|
var options = this.options
|
|
|
|
var twoStar = options.noglobstar ? star
|
|
: options.dot ? twoStarDot
|
|
: twoStarNoDot
|
|
var flags = options.nocase ? 'i' : ''
|
|
|
|
var re = set.map(function (pattern) {
|
|
return pattern.map(function (p) {
|
|
return (p === GLOBSTAR) ? twoStar
|
|
: (typeof p === 'string') ? regExpEscape(p)
|
|
: p._src
|
|
}).join('\\\/')
|
|
}).join('|')
|
|
|
|
// must match entire pattern
|
|
// ending in a * or ** will make it less strict.
|
|
re = '^(?:' + re + ')$'
|
|
|
|
// can match anything, as long as it's not this.
|
|
if (this.negate) re = '^(?!' + re + ').*$'
|
|
|
|
try {
|
|
this.regexp = new RegExp(re, flags)
|
|
} catch (ex) {
|
|
this.regexp = false
|
|
}
|
|
return this.regexp
|
|
}
|
|
|
|
minimatch.match = function (list, pattern, options) {
|
|
options = options || {}
|
|
var mm = new Minimatch(pattern, options)
|
|
list = list.filter(function (f) {
|
|
return mm.match(f)
|
|
})
|
|
if (mm.options.nonull && !list.length) {
|
|
list.push(pattern)
|
|
}
|
|
return list
|
|
}
|
|
|
|
Minimatch.prototype.match = match
|
|
function match (f, 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
|
|
|
|
var options = this.options
|
|
|
|
// windows: need to use /, not \
|
|
if (path.sep !== '/') {
|
|
f = f.split(path.sep).join('/')
|
|
}
|
|
|
|
// treat the test path as a set of pathparts.
|
|
f = f.split(slashSplit)
|
|
this.debug(this.pattern, 'split', f)
|
|
|
|
// 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.
|
|
|
|
var set = this.set
|
|
this.debug(this.pattern, 'set', set)
|
|
|
|
// Find the basename of the path by looking for the last non-empty segment
|
|
var filename
|
|
var i
|
|
for (i = f.length - 1; i >= 0; i--) {
|
|
filename = f[i]
|
|
if (filename) break
|
|
}
|
|
|
|
for (i = 0; i < set.length; i++) {
|
|
var pattern = set[i]
|
|
var file = f
|
|
if (options.matchBase && pattern.length === 1) {
|
|
file = [filename]
|
|
}
|
|
var 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
|
|
}
|
|
|
|
// 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.
|
|
Minimatch.prototype.matchOne = function (file, pattern, partial) {
|
|
var options = this.options
|
|
|
|
this.debug('matchOne',
|
|
{ 'this': this, file: file, pattern: pattern })
|
|
|
|
this.debug('matchOne', file.length, pattern.length)
|
|
|
|
for (var fi = 0,
|
|
pi = 0,
|
|
fl = file.length,
|
|
pl = pattern.length
|
|
; (fi < fl) && (pi < pl)
|
|
; fi++, pi++) {
|
|
this.debug('matchOne loop')
|
|
var p = pattern[pi]
|
|
var f = file[fi]
|
|
|
|
this.debug(pattern, p, f)
|
|
|
|
// should be impossible.
|
|
// some invalid regexp stuff in the set.
|
|
if (p === false) return false
|
|
|
|
if (p === GLOBSTAR) {
|
|
this.debug('GLOBSTAR', [pattern, p, f])
|
|
|
|
// "**"
|
|
// a/**/b/**/c would match the following:
|
|
// a/b/x/y/z/c
|
|
// a/x/y/z/b/c
|
|
// a/b/x/b/x/c
|
|
// a/b/c
|
|
// To do this, take the rest of the pattern after
|
|
// the **, and see if it would match the file remainder.
|
|
// If so, return success.
|
|
// If not, the ** "swallows" a segment, and try again.
|
|
// This is recursively awful.
|
|
//
|
|
// a/**/b/**/c matching a/b/x/y/z/c
|
|
// - a matches a
|
|
// - doublestar
|
|
// - matchOne(b/x/y/z/c, b/**/c)
|
|
// - b matches b
|
|
// - doublestar
|
|
// - matchOne(x/y/z/c, c) -> no
|
|
// - matchOne(y/z/c, c) -> no
|
|
// - matchOne(z/c, c) -> no
|
|
// - matchOne(c, c) yes, hit
|
|
var fr = fi
|
|
var pr = pi + 1
|
|
if (pr === pl) {
|
|
this.debug('** at the end')
|
|
// a ** at the end will just swallow the rest.
|
|
// We have found a match.
|
|
// however, it will not swallow /.x, unless
|
|
// options.dot is set.
|
|
// . and .. are *never* matched by **, for explosively
|
|
// exponential reasons.
|
|
for (; fi < fl; fi++) {
|
|
if (file[fi] === '.' || file[fi] === '..' ||
|
|
(!options.dot && file[fi].charAt(0) === '.')) return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// ok, let's see if we can swallow whatever we can.
|
|
while (fr < fl) {
|
|
var swallowee = file[fr]
|
|
|
|
this.debug('\nglobstar while', file, fr, pattern, pr, swallowee)
|
|
|
|
// XXX remove this slice. Just pass the start index.
|
|
if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
|
|
this.debug('globstar found match!', fr, fl, swallowee)
|
|
// found a match.
|
|
return true
|
|
} else {
|
|
// can't swallow "." or ".." ever.
|
|
// can only swallow ".foo" when explicitly asked.
|
|
if (swallowee === '.' || swallowee === '..' ||
|
|
(!options.dot && swallowee.charAt(0) === '.')) {
|
|
this.debug('dot detected!', file, fr, pattern, pr)
|
|
break
|
|
}
|
|
|
|
// ** swallows a segment, and continue.
|
|
this.debug('globstar swallow a segment, and continue')
|
|
fr++
|
|
}
|
|
}
|
|
|
|
// no match was found.
|
|
// However, in partial mode, we can't say this is necessarily over.
|
|
// If there's more *pattern* left, then
|
|
if (partial) {
|
|
// ran out of file
|
|
this.debug('\n>>> no match, partial?', file, fr, pattern, pr)
|
|
if (fr === fl) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// something other than **
|
|
// non-magic patterns just have to match exactly
|
|
// patterns with magic have been turned into regexps.
|
|
var hit
|
|
if (typeof p === 'string') {
|
|
if (options.nocase) {
|
|
hit = f.toLowerCase() === p.toLowerCase()
|
|
} else {
|
|
hit = f === p
|
|
}
|
|
this.debug('string match', p, f, hit)
|
|
} else {
|
|
hit = f.match(p)
|
|
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/
|
|
var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')
|
|
return emptyFileEnd
|
|
}
|
|
|
|
// should be unreachable.
|
|
throw new Error('wtf?')
|
|
}
|
|
|
|
// replace stuff like \* with *
|
|
function globUnescape (s) {
|
|
return s.replace(/\\(.)/g, '$1')
|
|
}
|
|
|
|
function regExpEscape (s) {
|
|
return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&')
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 106:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var tslib = __webpack_require__(422);
|
|
|
|
var listenersMap = new WeakMap();
|
|
var abortedMap = new WeakMap();
|
|
/**
|
|
* An aborter instance implements AbortSignal interface, can abort HTTP requests.
|
|
*
|
|
* - Call AbortSignal.none to create a new AbortSignal instance that cannot be cancelled.
|
|
* Use `AbortSignal.none` when you are required to pass a cancellation token but the operation
|
|
* cannot or will not ever be cancelled.
|
|
*
|
|
* @example
|
|
* // Abort without timeout
|
|
* await doAsyncWork(AbortSignal.none);
|
|
*
|
|
* @export
|
|
* @class AbortSignal
|
|
* @implements {AbortSignalLike}
|
|
*/
|
|
var AbortSignal = /** @class */ (function () {
|
|
function AbortSignal() {
|
|
/**
|
|
* onabort event listener.
|
|
*
|
|
* @memberof AbortSignal
|
|
*/
|
|
this.onabort = null;
|
|
listenersMap.set(this, []);
|
|
abortedMap.set(this, false);
|
|
}
|
|
Object.defineProperty(AbortSignal.prototype, "aborted", {
|
|
/**
|
|
* Status of whether aborted or not.
|
|
*
|
|
* @readonly
|
|
* @type {boolean}
|
|
* @memberof AbortSignal
|
|
*/
|
|
get: function () {
|
|
if (!abortedMap.has(this)) {
|
|
throw new TypeError("Expected `this` to be an instance of AbortSignal.");
|
|
}
|
|
return abortedMap.get(this);
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(AbortSignal, "none", {
|
|
/**
|
|
* Creates a new AbortSignal instance that will never be aborted.
|
|
*
|
|
* @readonly
|
|
* @static
|
|
* @type {AbortSignal}
|
|
* @memberof AbortSignal
|
|
*/
|
|
get: function () {
|
|
return new AbortSignal();
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Added new "abort" event listener, only support "abort" event.
|
|
*
|
|
* @param {"abort"} _type Only support "abort" event
|
|
* @param {(this: AbortSignalLike, ev: any) => any} listener
|
|
* @memberof AbortSignal
|
|
*/
|
|
AbortSignal.prototype.addEventListener = function (
|
|
// tslint:disable-next-line:variable-name
|
|
_type, listener) {
|
|
if (!listenersMap.has(this)) {
|
|
throw new TypeError("Expected `this` to be an instance of AbortSignal.");
|
|
}
|
|
var listeners = listenersMap.get(this);
|
|
listeners.push(listener);
|
|
};
|
|
/**
|
|
* Remove "abort" event listener, only support "abort" event.
|
|
*
|
|
* @param {"abort"} _type Only support "abort" event
|
|
* @param {(this: AbortSignalLike, ev: any) => any} listener
|
|
* @memberof AbortSignal
|
|
*/
|
|
AbortSignal.prototype.removeEventListener = function (
|
|
// tslint:disable-next-line:variable-name
|
|
_type, listener) {
|
|
if (!listenersMap.has(this)) {
|
|
throw new TypeError("Expected `this` to be an instance of AbortSignal.");
|
|
}
|
|
var listeners = listenersMap.get(this);
|
|
var index = listeners.indexOf(listener);
|
|
if (index > -1) {
|
|
listeners.splice(index, 1);
|
|
}
|
|
};
|
|
/**
|
|
* Dispatches a synthetic event to the AbortSignal.
|
|
*/
|
|
AbortSignal.prototype.dispatchEvent = function (_event) {
|
|
throw new Error("This is a stub dispatchEvent implementation that should not be used. It only exists for type-checking purposes.");
|
|
};
|
|
return AbortSignal;
|
|
}());
|
|
/**
|
|
* Helper to trigger an abort event immediately, the onabort and all abort event listeners will be triggered.
|
|
* Will try to trigger abort event for all linked AbortSignal nodes.
|
|
*
|
|
* - If there is a timeout, the timer will be cancelled.
|
|
* - If aborted is true, nothing will happen.
|
|
*
|
|
* @returns
|
|
* @internal
|
|
*/
|
|
function abortSignal(signal) {
|
|
if (signal.aborted) {
|
|
return;
|
|
}
|
|
if (signal.onabort) {
|
|
signal.onabort.call(signal);
|
|
}
|
|
var listeners = listenersMap.get(signal);
|
|
if (listeners) {
|
|
listeners.forEach(function (listener) {
|
|
listener.call(signal, { type: "abort" });
|
|
});
|
|
}
|
|
abortedMap.set(signal, true);
|
|
}
|
|
|
|
/**
|
|
* 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
|
|
* const controller = new AbortController();
|
|
* controller.abort();
|
|
* try {
|
|
* doAsyncWork(controller.signal)
|
|
* } catch (e) {
|
|
* if (e.name === 'AbortError') {
|
|
* // handle abort error here.
|
|
* }
|
|
* }
|
|
*/
|
|
var AbortError = /** @class */ (function (_super) {
|
|
tslib.__extends(AbortError, _super);
|
|
function AbortError(message) {
|
|
var _this = _super.call(this, message) || this;
|
|
_this.name = "AbortError";
|
|
return _this;
|
|
}
|
|
return AbortError;
|
|
}(Error));
|
|
/**
|
|
* An AbortController provides an AbortSignal and the associated controls to signal
|
|
* that an asynchronous operation should be aborted.
|
|
*
|
|
* @example
|
|
* // Abort an operation when another event fires
|
|
* const controller = new AbortController();
|
|
* const signal = controller.signal;
|
|
* doAsyncWork(signal);
|
|
* button.addEventListener('click', () => controller.abort());
|
|
*
|
|
* @example
|
|
* // Share aborter cross multiple operations in 30s
|
|
* // Upload the same data to 2 different data centers at the same time,
|
|
* // abort another when any of them is finished
|
|
* const controller = AbortController.withTimeout(30 * 1000);
|
|
* doAsyncWork(controller.signal).then(controller.abort);
|
|
* doAsyncWork(controller.signal).then(controller.abort);
|
|
*
|
|
* @example
|
|
* // Cascaded aborting
|
|
* // All operations can't take more than 30 seconds
|
|
* const aborter = Aborter.timeout(30 * 1000);
|
|
*
|
|
* // Following 2 operations can't take more than 25 seconds
|
|
* await doAsyncWork(aborter.withTimeout(25 * 1000));
|
|
* await doAsyncWork(aborter.withTimeout(25 * 1000));
|
|
*
|
|
* @export
|
|
* @class AbortController
|
|
* @implements {AbortSignalLike}
|
|
*/
|
|
var AbortController = /** @class */ (function () {
|
|
function AbortController(parentSignals) {
|
|
var _this = this;
|
|
this._signal = new AbortSignal();
|
|
if (!parentSignals) {
|
|
return;
|
|
}
|
|
// coerce parentSignals into an array
|
|
if (!Array.isArray(parentSignals)) {
|
|
parentSignals = arguments;
|
|
}
|
|
for (var _i = 0, parentSignals_1 = parentSignals; _i < parentSignals_1.length; _i++) {
|
|
var parentSignal = parentSignals_1[_i];
|
|
// if the parent signal has already had abort() called,
|
|
// then call abort on this signal as well.
|
|
if (parentSignal.aborted) {
|
|
this.abort();
|
|
}
|
|
else {
|
|
// when the parent signal aborts, this signal should as well.
|
|
parentSignal.addEventListener("abort", function () {
|
|
_this.abort();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
Object.defineProperty(AbortController.prototype, "signal", {
|
|
/**
|
|
* The AbortSignal associated with this controller that will signal aborted
|
|
* when the abort method is called on this controller.
|
|
*
|
|
* @readonly
|
|
* @type {AbortSignal}
|
|
* @memberof AbortController
|
|
*/
|
|
get: function () {
|
|
return this._signal;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Signal that any operations passed this controller's associated abort signal
|
|
* to cancel any remaining work and throw an `AbortError`.
|
|
*
|
|
* @memberof AbortController
|
|
*/
|
|
AbortController.prototype.abort = function () {
|
|
abortSignal(this._signal);
|
|
};
|
|
/**
|
|
* Creates a new AbortSignal instance that will abort after the provided ms.
|
|
*
|
|
* @static
|
|
* @params {number} ms Elapsed time in milliseconds to trigger an abort.
|
|
* @returns {AbortSignal}
|
|
*/
|
|
AbortController.timeout = function (ms) {
|
|
var signal = new AbortSignal();
|
|
var timer = setTimeout(abortSignal, ms, signal);
|
|
// Prevent the active Timer from keeping the Node.js event loop active.
|
|
if (typeof timer.unref === "function") {
|
|
timer.unref();
|
|
}
|
|
return signal;
|
|
};
|
|
return AbortController;
|
|
}());
|
|
|
|
exports.AbortController = AbortController;
|
|
exports.AbortError = AbortError;
|
|
exports.AbortSignal = AbortSignal;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 114:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
const http_client_1 = __webpack_require__(539);
|
|
const auth_1 = __webpack_require__(226);
|
|
const crypto = __importStar(__webpack_require__(417));
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const url_1 = __webpack_require__(835);
|
|
const utils = __importStar(__webpack_require__(15));
|
|
const constants_1 = __webpack_require__(931);
|
|
const downloadUtils_1 = __webpack_require__(251);
|
|
const options_1 = __webpack_require__(538);
|
|
const requestUtils_1 = __webpack_require__(899);
|
|
const versionSalt = '1.0';
|
|
function getCacheApiUrl(resource) {
|
|
// Ideally we just use ACTIONS_CACHE_URL
|
|
const baseUrl = (process.env['ACTIONS_CACHE_URL'] ||
|
|
process.env['ACTIONS_RUNTIME_URL'] ||
|
|
'').replace('pipelines', 'artifactcache');
|
|
if (!baseUrl) {
|
|
throw new Error('Cache Service Url not found, unable to restore cache.');
|
|
}
|
|
const url = `${baseUrl}_apis/artifactcache/${resource}`;
|
|
core.debug(`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_1.BearerCredentialHandler(token);
|
|
return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions());
|
|
}
|
|
function getCacheVersion(paths, compressionMethod) {
|
|
const components = paths.concat(!compressionMethod || compressionMethod === constants_1.CompressionMethod.Gzip
|
|
? []
|
|
: [compressionMethod]);
|
|
// Add salt to cache version to support breaking changes in cache entry
|
|
components.push(versionSalt);
|
|
return crypto
|
|
.createHash('sha256')
|
|
.update(components.join('|'))
|
|
.digest('hex');
|
|
}
|
|
exports.getCacheVersion = getCacheVersion;
|
|
function getCacheEntry(keys, paths, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const httpClient = createHttpClient();
|
|
const version = getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod);
|
|
const resource = `cache?keys=${encodeURIComponent(keys.join(','))}&version=${version}`;
|
|
const response = yield requestUtils_1.retryTypedResponse('getCacheEntry', () => __awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); }));
|
|
if (response.statusCode === 204) {
|
|
return null;
|
|
}
|
|
if (!requestUtils_1.isSuccessStatusCode(response.statusCode)) {
|
|
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) {
|
|
throw new Error('Cache not found.');
|
|
}
|
|
core.setSecret(cacheDownloadUrl);
|
|
core.debug(`Cache Result:`);
|
|
core.debug(JSON.stringify(cacheResult));
|
|
return cacheResult;
|
|
});
|
|
}
|
|
exports.getCacheEntry = getCacheEntry;
|
|
function downloadCache(archiveLocation, archivePath, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const archiveUrl = new url_1.URL(archiveLocation);
|
|
const downloadOptions = options_1.getDownloadOptions(options);
|
|
if (downloadOptions.useAzureSdk &&
|
|
archiveUrl.hostname.endsWith('.blob.core.windows.net')) {
|
|
// Use Azure storage SDK to download caches hosted on Azure to improve speed and reliability.
|
|
yield downloadUtils_1.downloadCacheStorageSDK(archiveLocation, archivePath, downloadOptions);
|
|
}
|
|
else {
|
|
// Otherwise, download using the Actions http-client.
|
|
yield downloadUtils_1.downloadCacheHttpClient(archiveLocation, archivePath);
|
|
}
|
|
});
|
|
}
|
|
exports.downloadCache = downloadCache;
|
|
// Reserve Cache
|
|
function reserveCache(key, paths, options) {
|
|
var _a, _b;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const httpClient = createHttpClient();
|
|
const version = getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod);
|
|
const reserveCacheRequest = {
|
|
key,
|
|
version
|
|
};
|
|
const response = yield requestUtils_1.retryTypedResponse('reserveCache', () => __awaiter(this, void 0, void 0, function* () {
|
|
return httpClient.postJson(getCacheApiUrl('caches'), reserveCacheRequest);
|
|
}));
|
|
return (_b = (_a = response === null || response === void 0 ? void 0 : response.result) === null || _a === void 0 ? void 0 : _a.cacheId) !== null && _b !== void 0 ? _b : -1;
|
|
});
|
|
}
|
|
exports.reserveCache = reserveCache;
|
|
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 __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)
|
|
};
|
|
yield requestUtils_1.retryHttpClientResponse(`uploadChunk (start: ${start}, end: ${end})`, () => __awaiter(this, void 0, void 0, function* () {
|
|
return httpClient.sendStream('PATCH', resourceUrl, openStream(), additionalHeaders);
|
|
}));
|
|
});
|
|
}
|
|
function uploadFile(httpClient, cacheId, archivePath, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Upload Chunks
|
|
const fileSize = fs.statSync(archivePath).size;
|
|
const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`);
|
|
const fd = fs.openSync(archivePath, 'r');
|
|
const uploadOptions = options_1.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(() => __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 __awaiter(this, void 0, void 0, function* () {
|
|
const commitCacheRequest = { size: filesize };
|
|
return yield requestUtils_1.retryTypedResponse('commitCache', () => __awaiter(this, void 0, void 0, function* () {
|
|
return httpClient.postJson(getCacheApiUrl(`caches/${cacheId.toString()}`), commitCacheRequest);
|
|
}));
|
|
});
|
|
}
|
|
function saveCache(cacheId, archivePath, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const httpClient = createHttpClient();
|
|
core.debug('Upload cache');
|
|
yield uploadFile(httpClient, cacheId, archivePath, options);
|
|
// Commit Cache
|
|
core.debug('Commiting cache');
|
|
const cacheSize = utils.getArchiveFileSizeIsBytes(archivePath);
|
|
const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize);
|
|
if (!requestUtils_1.isSuccessStatusCode(commitCacheResponse.statusCode)) {
|
|
throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`);
|
|
}
|
|
core.info('Cache saved successfully');
|
|
});
|
|
}
|
|
exports.saveCache = saveCache;
|
|
//# sourceMappingURL=cacheHttpClient.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 129:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("child_process");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 136:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const NoopMeterProvider_1 = __webpack_require__(450);
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Metrics API
|
|
*/
|
|
class MetricsAPI {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
constructor() {
|
|
this._meterProvider = NoopMeterProvider_1.NOOP_METER_PROVIDER;
|
|
}
|
|
/** Get the singleton instance of the Metrics API */
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new MetricsAPI();
|
|
}
|
|
return this._instance;
|
|
}
|
|
/**
|
|
* Set the current global meter. Returns the initialized global meter provider.
|
|
*/
|
|
setGlobalMeterProvider(provider) {
|
|
this._meterProvider = provider;
|
|
return provider;
|
|
}
|
|
/**
|
|
* Returns the global meter provider.
|
|
*/
|
|
getMeterProvider() {
|
|
return this._meterProvider;
|
|
}
|
|
/**
|
|
* Returns a meter from the global meter provider.
|
|
*/
|
|
getMeter(name, version) {
|
|
return this.getMeterProvider().getMeter(name, version);
|
|
}
|
|
}
|
|
exports.MetricsAPI = MetricsAPI;
|
|
//# sourceMappingURL=metrics.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 139:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Unique ID creation requires a high quality random # generator. In node.js
|
|
// this is pretty straight-forward - we use the crypto API.
|
|
|
|
var crypto = __webpack_require__(417);
|
|
|
|
module.exports = function nodeRNG() {
|
|
return crypto.randomBytes(16);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 141:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var net = __webpack_require__(631);
|
|
var tls = __webpack_require__(16);
|
|
var http = __webpack_require__(605);
|
|
var https = __webpack_require__(211);
|
|
var events = __webpack_require__(614);
|
|
var assert = __webpack_require__(357);
|
|
var util = __webpack_require__(669);
|
|
|
|
|
|
exports.httpOverHttp = httpOverHttp;
|
|
exports.httpsOverHttp = httpsOverHttp;
|
|
exports.httpOverHttps = httpOverHttps;
|
|
exports.httpsOverHttps = httpsOverHttps;
|
|
|
|
|
|
function httpOverHttp(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
return agent;
|
|
}
|
|
|
|
function httpsOverHttp(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = http.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
}
|
|
|
|
function httpOverHttps(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
return agent;
|
|
}
|
|
|
|
function httpsOverHttps(options) {
|
|
var agent = new TunnelingAgent(options);
|
|
agent.request = https.request;
|
|
agent.createSocket = createSecureSocket;
|
|
agent.defaultPort = 443;
|
|
return agent;
|
|
}
|
|
|
|
|
|
function TunnelingAgent(options) {
|
|
var self = this;
|
|
self.options = options || {};
|
|
self.proxyOptions = self.options.proxy || {};
|
|
self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
|
|
self.requests = [];
|
|
self.sockets = [];
|
|
|
|
self.on('free', function onFree(socket, host, port, localAddress) {
|
|
var options = toOptions(host, port, localAddress);
|
|
for (var i = 0, len = self.requests.length; i < len; ++i) {
|
|
var pending = self.requests[i];
|
|
if (pending.host === options.host && pending.port === options.port) {
|
|
// Detect the request to connect same origin server,
|
|
// reuse the connection.
|
|
self.requests.splice(i, 1);
|
|
pending.request.onSocket(socket);
|
|
return;
|
|
}
|
|
}
|
|
socket.destroy();
|
|
self.removeSocket(socket);
|
|
});
|
|
}
|
|
util.inherits(TunnelingAgent, events.EventEmitter);
|
|
|
|
TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
|
|
var self = this;
|
|
var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
|
|
|
|
if (self.sockets.length >= this.maxSockets) {
|
|
// We are over limit so we'll add it to the queue.
|
|
self.requests.push(options);
|
|
return;
|
|
}
|
|
|
|
// If we are under maxSockets create a new one.
|
|
self.createSocket(options, function(socket) {
|
|
socket.on('free', onFree);
|
|
socket.on('close', onCloseOrRemove);
|
|
socket.on('agentRemove', onCloseOrRemove);
|
|
req.onSocket(socket);
|
|
|
|
function onFree() {
|
|
self.emit('free', socket, options);
|
|
}
|
|
|
|
function onCloseOrRemove(err) {
|
|
self.removeSocket(socket);
|
|
socket.removeListener('free', onFree);
|
|
socket.removeListener('close', onCloseOrRemove);
|
|
socket.removeListener('agentRemove', onCloseOrRemove);
|
|
}
|
|
});
|
|
};
|
|
|
|
TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
|
|
var self = this;
|
|
var placeholder = {};
|
|
self.sockets.push(placeholder);
|
|
|
|
var connectOptions = mergeOptions({}, self.proxyOptions, {
|
|
method: 'CONNECT',
|
|
path: options.host + ':' + options.port,
|
|
agent: false,
|
|
headers: {
|
|
host: options.host + ':' + options.port
|
|
}
|
|
});
|
|
if (options.localAddress) {
|
|
connectOptions.localAddress = options.localAddress;
|
|
}
|
|
if (connectOptions.proxyAuth) {
|
|
connectOptions.headers = connectOptions.headers || {};
|
|
connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
|
|
new Buffer(connectOptions.proxyAuth).toString('base64');
|
|
}
|
|
|
|
debug('making CONNECT request');
|
|
var connectReq = self.request(connectOptions);
|
|
connectReq.useChunkedEncodingByDefault = false; // for v0.6
|
|
connectReq.once('response', onResponse); // for v0.6
|
|
connectReq.once('upgrade', onUpgrade); // for v0.6
|
|
connectReq.once('connect', onConnect); // for v0.7 or later
|
|
connectReq.once('error', onError);
|
|
connectReq.end();
|
|
|
|
function onResponse(res) {
|
|
// Very hacky. This is necessary to avoid http-parser leaks.
|
|
res.upgrade = true;
|
|
}
|
|
|
|
function onUpgrade(res, socket, head) {
|
|
// Hacky.
|
|
process.nextTick(function() {
|
|
onConnect(res, socket, head);
|
|
});
|
|
}
|
|
|
|
function onConnect(res, socket, head) {
|
|
connectReq.removeAllListeners();
|
|
socket.removeAllListeners();
|
|
|
|
if (res.statusCode !== 200) {
|
|
debug('tunneling socket could not be established, statusCode=%d',
|
|
res.statusCode);
|
|
socket.destroy();
|
|
var error = new Error('tunneling socket could not be established, ' +
|
|
'statusCode=' + res.statusCode);
|
|
error.code = 'ECONNRESET';
|
|
options.request.emit('error', error);
|
|
self.removeSocket(placeholder);
|
|
return;
|
|
}
|
|
if (head.length > 0) {
|
|
debug('got illegal response body from proxy');
|
|
socket.destroy();
|
|
var error = new Error('got illegal response body from proxy');
|
|
error.code = 'ECONNRESET';
|
|
options.request.emit('error', error);
|
|
self.removeSocket(placeholder);
|
|
return;
|
|
}
|
|
debug('tunneling connection has established');
|
|
self.sockets[self.sockets.indexOf(placeholder)] = socket;
|
|
return cb(socket);
|
|
}
|
|
|
|
function onError(cause) {
|
|
connectReq.removeAllListeners();
|
|
|
|
debug('tunneling socket could not be established, cause=%s\n',
|
|
cause.message, cause.stack);
|
|
var error = new Error('tunneling socket could not be established, ' +
|
|
'cause=' + cause.message);
|
|
error.code = 'ECONNRESET';
|
|
options.request.emit('error', error);
|
|
self.removeSocket(placeholder);
|
|
}
|
|
};
|
|
|
|
TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
|
|
var pos = this.sockets.indexOf(socket)
|
|
if (pos === -1) {
|
|
return;
|
|
}
|
|
this.sockets.splice(pos, 1);
|
|
|
|
var pending = this.requests.shift();
|
|
if (pending) {
|
|
// If we have pending requests and a socket gets closed a new one
|
|
// needs to be created to take over in the pool for the one that closed.
|
|
this.createSocket(pending, function(socket) {
|
|
pending.request.onSocket(socket);
|
|
});
|
|
}
|
|
};
|
|
|
|
function createSecureSocket(options, cb) {
|
|
var self = this;
|
|
TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
|
|
var hostHeader = options.request.getHeader('host');
|
|
var tlsOptions = mergeOptions({}, self.options, {
|
|
socket: socket,
|
|
servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
|
|
});
|
|
|
|
// 0 is dummy port for v0.6
|
|
var secureSocket = tls.connect(0, tlsOptions);
|
|
self.sockets[self.sockets.indexOf(socket)] = secureSocket;
|
|
cb(secureSocket);
|
|
});
|
|
}
|
|
|
|
|
|
function toOptions(host, port, localAddress) {
|
|
if (typeof host === 'string') { // since v0.10
|
|
return {
|
|
host: host,
|
|
port: port,
|
|
localAddress: localAddress
|
|
};
|
|
}
|
|
return host; // for v0.11 or later
|
|
}
|
|
|
|
function mergeOptions(target) {
|
|
for (var i = 1, len = arguments.length; i < len; ++i) {
|
|
var overrides = arguments[i];
|
|
if (typeof overrides === 'object') {
|
|
var keys = Object.keys(overrides);
|
|
for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
|
|
var k = keys[j];
|
|
if (overrides[k] !== undefined) {
|
|
target[k] = overrides[k];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
|
|
|
|
var debug;
|
|
if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
|
|
debug = function() {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
if (typeof args[0] === 'string') {
|
|
args[0] = 'TUNNEL: ' + args[0];
|
|
} else {
|
|
args.unshift('TUNNEL:');
|
|
}
|
|
console.error.apply(console, args);
|
|
}
|
|
} else {
|
|
debug = function() {};
|
|
}
|
|
exports.debug = debug; // for test
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 147:
|
|
/***/ (function(module) {
|
|
|
|
// API
|
|
module.exports = state;
|
|
|
|
/**
|
|
* Creates initial state object
|
|
* for iteration over list
|
|
*
|
|
* @param {array|object} list - list to iterate over
|
|
* @param {function|null} sortMethod - function to use for keys sort,
|
|
* or `null` to keep them as is
|
|
* @returns {object} - initial state object
|
|
*/
|
|
function state(list, sortMethod)
|
|
{
|
|
var isNamedList = !Array.isArray(list)
|
|
, initState =
|
|
{
|
|
index : 0,
|
|
keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
|
|
jobs : {},
|
|
results : isNamedList ? {} : [],
|
|
size : isNamedList ? Object.keys(list).length : list.length
|
|
}
|
|
;
|
|
|
|
if (sortMethod)
|
|
{
|
|
// sort array keys based on it's values
|
|
// sort object's keys just on own merit
|
|
initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
|
|
{
|
|
return sortMethod(list[a], list[b]);
|
|
});
|
|
}
|
|
|
|
return initState;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 151:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const NoopSpan_1 = __webpack_require__(767);
|
|
/**
|
|
* No-op implementations of {@link Tracer}.
|
|
*/
|
|
class NoopTracer {
|
|
getCurrentSpan() {
|
|
return NoopSpan_1.NOOP_SPAN;
|
|
}
|
|
// startSpan starts a noop span.
|
|
startSpan(name, options) {
|
|
return NoopSpan_1.NOOP_SPAN;
|
|
}
|
|
withSpan(span, fn) {
|
|
return fn();
|
|
}
|
|
bind(target, span) {
|
|
return target;
|
|
}
|
|
}
|
|
exports.NoopTracer = NoopTracer;
|
|
exports.NOOP_TRACER = new NoopTracer();
|
|
//# sourceMappingURL=NoopTracer.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 152:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var Stream = __webpack_require__(794).Stream;
|
|
var util = __webpack_require__(669);
|
|
|
|
module.exports = DelayedStream;
|
|
function DelayedStream() {
|
|
this.source = null;
|
|
this.dataSize = 0;
|
|
this.maxDataSize = 1024 * 1024;
|
|
this.pauseStream = true;
|
|
|
|
this._maxDataSizeExceeded = false;
|
|
this._released = false;
|
|
this._bufferedEvents = [];
|
|
}
|
|
util.inherits(DelayedStream, Stream);
|
|
|
|
DelayedStream.create = function(source, options) {
|
|
var delayedStream = new this();
|
|
|
|
options = options || {};
|
|
for (var option in options) {
|
|
delayedStream[option] = options[option];
|
|
}
|
|
|
|
delayedStream.source = source;
|
|
|
|
var realEmit = source.emit;
|
|
source.emit = function() {
|
|
delayedStream._handleEmit(arguments);
|
|
return realEmit.apply(source, arguments);
|
|
};
|
|
|
|
source.on('error', function() {});
|
|
if (delayedStream.pauseStream) {
|
|
source.pause();
|
|
}
|
|
|
|
return delayedStream;
|
|
};
|
|
|
|
Object.defineProperty(DelayedStream.prototype, 'readable', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: function() {
|
|
return this.source.readable;
|
|
}
|
|
});
|
|
|
|
DelayedStream.prototype.setEncoding = function() {
|
|
return this.source.setEncoding.apply(this.source, arguments);
|
|
};
|
|
|
|
DelayedStream.prototype.resume = function() {
|
|
if (!this._released) {
|
|
this.release();
|
|
}
|
|
|
|
this.source.resume();
|
|
};
|
|
|
|
DelayedStream.prototype.pause = function() {
|
|
this.source.pause();
|
|
};
|
|
|
|
DelayedStream.prototype.release = function() {
|
|
this._released = true;
|
|
|
|
this._bufferedEvents.forEach(function(args) {
|
|
this.emit.apply(this, args);
|
|
}.bind(this));
|
|
this._bufferedEvents = [];
|
|
};
|
|
|
|
DelayedStream.prototype.pipe = function() {
|
|
var r = Stream.prototype.pipe.apply(this, arguments);
|
|
this.resume();
|
|
return r;
|
|
};
|
|
|
|
DelayedStream.prototype._handleEmit = function(args) {
|
|
if (this._released) {
|
|
this.emit.apply(this, args);
|
|
return;
|
|
}
|
|
|
|
if (args[0] === 'data') {
|
|
this.dataSize += args[1].length;
|
|
this._checkIfMaxDataSizeExceeded();
|
|
}
|
|
|
|
this._bufferedEvents.push(args);
|
|
};
|
|
|
|
DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
|
|
if (this._maxDataSizeExceeded) {
|
|
return;
|
|
}
|
|
|
|
if (this.dataSize <= this.maxDataSize) {
|
|
return;
|
|
}
|
|
|
|
this._maxDataSizeExceeded = true;
|
|
var message =
|
|
'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
|
|
this.emit('error', new Error(message));
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 157:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var async = __webpack_require__(751)
|
|
, abort = __webpack_require__(566)
|
|
;
|
|
|
|
// API
|
|
module.exports = iterate;
|
|
|
|
/**
|
|
* Iterates over each job object
|
|
*
|
|
* @param {array|object} list - array or object (named list) to iterate over
|
|
* @param {function} iterator - iterator to run
|
|
* @param {object} state - current job status
|
|
* @param {function} callback - invoked when all elements processed
|
|
*/
|
|
function iterate(list, iterator, state, callback)
|
|
{
|
|
// store current index
|
|
var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;
|
|
|
|
state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
|
|
{
|
|
// don't repeat yourself
|
|
// skip secondary callbacks
|
|
if (!(key in state.jobs))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// clean up jobs
|
|
delete state.jobs[key];
|
|
|
|
if (error)
|
|
{
|
|
// don't process rest of the results
|
|
// stop still active jobs
|
|
// and reset the list
|
|
abort(state);
|
|
}
|
|
else
|
|
{
|
|
state.results[key] = output;
|
|
}
|
|
|
|
// return salvaged results
|
|
callback(error, state.results);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Runs iterator over provided job element
|
|
*
|
|
* @param {function} iterator - iterator to invoke
|
|
* @param {string|number} key - key/index of the element in the list of jobs
|
|
* @param {mixed} item - job description
|
|
* @param {function} callback - invoked after iterator is done with the job
|
|
* @returns {function|mixed} - job abort function or something else
|
|
*/
|
|
function runJob(iterator, key, item, callback)
|
|
{
|
|
var aborter;
|
|
|
|
// allow shortcut if iterator expects only two arguments
|
|
if (iterator.length == 2)
|
|
{
|
|
aborter = iterator(item, async(callback));
|
|
}
|
|
// otherwise go with full three arguments
|
|
else
|
|
{
|
|
aborter = iterator(item, key, async(callback));
|
|
}
|
|
|
|
return aborter;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 162:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const NoopTracer_1 = __webpack_require__(151);
|
|
/**
|
|
* An implementation of the {@link TracerProvider} which returns an impotent Tracer
|
|
* for all calls to `getTracer`
|
|
*/
|
|
class NoopTracerProvider {
|
|
getTracer(_name, _version) {
|
|
return NoopTracer_1.NOOP_TRACER;
|
|
}
|
|
}
|
|
exports.NoopTracerProvider = NoopTracerProvider;
|
|
exports.NOOP_TRACER_PROVIDER = new NoopTracerProvider();
|
|
//# sourceMappingURL=NoopTracerProvider.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 173:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _rng = _interopRequireDefault(__webpack_require__(733));
|
|
|
|
var _bytesToUuid = _interopRequireDefault(__webpack_require__(940));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
// **`v1()` - Generate time-based UUID**
|
|
//
|
|
// Inspired by https://github.com/LiosK/UUID.js
|
|
// and http://docs.python.org/library/uuid.html
|
|
let _nodeId;
|
|
|
|
let _clockseq; // Previous uuid creation time
|
|
|
|
|
|
let _lastMSecs = 0;
|
|
let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
|
|
|
|
function v1(options, buf, offset) {
|
|
let i = buf && offset || 0;
|
|
const b = buf || new Array(16);
|
|
options = options || {};
|
|
let node = options.node || _nodeId;
|
|
let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
|
|
// specified. We do this lazily to minimize issues related to insufficient
|
|
// system entropy. See #189
|
|
|
|
if (node == null || clockseq == null) {
|
|
const seedBytes = options.random || (options.rng || _rng.default)();
|
|
|
|
if (node == null) {
|
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
|
node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
}
|
|
|
|
if (clockseq == null) {
|
|
// Per 4.2.2, randomize (14 bit) clockseq
|
|
clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
}
|
|
} // UUID timestamps are 100 nano-second units since the Gregorian epoch,
|
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
|
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
|
|
|
|
let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
// cycle to simulate higher resolution clock
|
|
|
|
let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
|
|
|
|
const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
|
|
|
|
if (dt < 0 && options.clockseq === undefined) {
|
|
clockseq = clockseq + 1 & 0x3fff;
|
|
} // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
// time interval
|
|
|
|
|
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
nsecs = 0;
|
|
} // Per 4.2.1.2 Throw error if too many uuids are requested
|
|
|
|
|
|
if (nsecs >= 10000) {
|
|
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
}
|
|
|
|
_lastMSecs = msecs;
|
|
_lastNSecs = nsecs;
|
|
_clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
|
|
msecs += 12219292800000; // `time_low`
|
|
|
|
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
b[i++] = tl >>> 24 & 0xff;
|
|
b[i++] = tl >>> 16 & 0xff;
|
|
b[i++] = tl >>> 8 & 0xff;
|
|
b[i++] = tl & 0xff; // `time_mid`
|
|
|
|
const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
b[i++] = tmh >>> 8 & 0xff;
|
|
b[i++] = tmh & 0xff; // `time_high_and_version`
|
|
|
|
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
|
|
b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
|
|
b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
|
|
|
|
b[i++] = clockseq & 0xff; // `node`
|
|
|
|
for (let n = 0; n < 6; ++n) {
|
|
b[i + n] = node[n];
|
|
}
|
|
|
|
return buf || (0, _bytesToUuid.default)(b);
|
|
}
|
|
|
|
var _default = v1;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 210:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
exports.stripBOM = function(str) {
|
|
if (str[0] === '\uFEFF') {
|
|
return str.substring(1);
|
|
} else {
|
|
return str;
|
|
}
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 211:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("https");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 213:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("punycode");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 226:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
class BasicCredentialHandler {
|
|
constructor(username, password) {
|
|
this.username = username;
|
|
this.password = password;
|
|
}
|
|
prepareRequest(options) {
|
|
options.headers['Authorization'] =
|
|
'Basic ' +
|
|
Buffer.from(this.username + ':' + this.password).toString('base64');
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication(response) {
|
|
return false;
|
|
}
|
|
handleAuthentication(httpClient, requestInfo, objs) {
|
|
return null;
|
|
}
|
|
}
|
|
exports.BasicCredentialHandler = BasicCredentialHandler;
|
|
class BearerCredentialHandler {
|
|
constructor(token) {
|
|
this.token = token;
|
|
}
|
|
// currently implements pre-authorization
|
|
// TODO: support preAuth = false where it hooks on 401
|
|
prepareRequest(options) {
|
|
options.headers['Authorization'] = 'Bearer ' + this.token;
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication(response) {
|
|
return false;
|
|
}
|
|
handleAuthentication(httpClient, requestInfo, objs) {
|
|
return null;
|
|
}
|
|
}
|
|
exports.BearerCredentialHandler = BearerCredentialHandler;
|
|
class PersonalAccessTokenCredentialHandler {
|
|
constructor(token) {
|
|
this.token = token;
|
|
}
|
|
// currently implements pre-authorization
|
|
// TODO: support preAuth = false where it hooks on 401
|
|
prepareRequest(options) {
|
|
options.headers['Authorization'] =
|
|
'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
|
|
}
|
|
// This handler cannot handle 401
|
|
canHandleAuthentication(response) {
|
|
return false;
|
|
}
|
|
handleAuthentication(httpClient, requestInfo, objs) {
|
|
return null;
|
|
}
|
|
}
|
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 229:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* A static-key-based credential that supports updating
|
|
* the underlying key value.
|
|
*/
|
|
var AzureKeyCredential = /** @class */ (function () {
|
|
/**
|
|
* Create an instance of an AzureKeyCredential for use
|
|
* with a service client.
|
|
*
|
|
* @param key the initial value of the key to use in authentication
|
|
*/
|
|
function AzureKeyCredential(key) {
|
|
if (!key) {
|
|
throw new Error("key must be a non-empty string");
|
|
}
|
|
this._key = key;
|
|
}
|
|
Object.defineProperty(AzureKeyCredential.prototype, "key", {
|
|
/**
|
|
* The value of the key to be used in authentication
|
|
*/
|
|
get: function () {
|
|
return this._key;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Change the value of the key.
|
|
*
|
|
* Updates will take effect upon the next request after
|
|
* updating the key value.
|
|
*
|
|
* @param newKey the new key value to be used
|
|
*/
|
|
AzureKeyCredential.prototype.update = function (newKey) {
|
|
this._key = newKey;
|
|
};
|
|
return AzureKeyCredential;
|
|
}());
|
|
|
|
// 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.
|
|
return (credential &&
|
|
typeof credential.getToken === "function" &&
|
|
(credential.signRequest === undefined || credential.getToken.length > 0));
|
|
}
|
|
|
|
exports.AzureKeyCredential = AzureKeyCredential;
|
|
exports.isTokenCredential = isTokenCredential;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 241:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = _default;
|
|
exports.URL = exports.DNS = void 0;
|
|
|
|
var _bytesToUuid = _interopRequireDefault(__webpack_require__(940));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function uuidToBytes(uuid) {
|
|
// Note: We assume we're being passed a valid uuid string
|
|
const bytes = [];
|
|
uuid.replace(/[a-fA-F0-9]{2}/g, function (hex) {
|
|
bytes.push(parseInt(hex, 16));
|
|
});
|
|
return bytes;
|
|
}
|
|
|
|
function stringToBytes(str) {
|
|
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
|
|
const bytes = [];
|
|
|
|
for (let i = 0; i < str.length; ++i) {
|
|
bytes.push(str.charCodeAt(i));
|
|
}
|
|
|
|
return bytes;
|
|
}
|
|
|
|
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
exports.DNS = DNS;
|
|
const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
exports.URL = URL;
|
|
|
|
function _default(name, version, hashfunc) {
|
|
function generateUUID(value, namespace, buf, offset) {
|
|
if (typeof value === 'string') {
|
|
value = stringToBytes(value);
|
|
}
|
|
|
|
if (typeof namespace === 'string') {
|
|
namespace = uuidToBytes(namespace);
|
|
}
|
|
|
|
if (!Array.isArray(value)) {
|
|
throw TypeError('value must be an array of bytes');
|
|
}
|
|
|
|
if (!Array.isArray(namespace) || namespace.length !== 16) {
|
|
throw TypeError('namespace must be uuid string or an Array of 16 byte values');
|
|
} // Per 4.3
|
|
|
|
|
|
const bytes = hashfunc(namespace.concat(value));
|
|
bytes[6] = bytes[6] & 0x0f | version;
|
|
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
buf[offset + i] = bytes[i];
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
return (0, _bytesToUuid.default)(bytes);
|
|
} // Function#name is not settable on some platforms (#270)
|
|
|
|
|
|
try {
|
|
generateUUID.name = name; // eslint-disable-next-line no-empty
|
|
} catch (err) {} // For CommonJS default export support
|
|
|
|
|
|
generateUUID.DNS = DNS;
|
|
generateUUID.URL = URL;
|
|
return generateUUID;
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 242:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__webpack_require__(71);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 245:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function md5(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === 'string') {
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
}
|
|
|
|
return _crypto.default.createHash('md5').update(bytes).digest();
|
|
}
|
|
|
|
var _default = md5;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 251:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
const http_client_1 = __webpack_require__(539);
|
|
const storage_blob_1 = __webpack_require__(373);
|
|
const buffer = __importStar(__webpack_require__(293));
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const stream = __importStar(__webpack_require__(794));
|
|
const util = __importStar(__webpack_require__(669));
|
|
const utils = __importStar(__webpack_require__(15));
|
|
const constants_1 = __webpack_require__(931);
|
|
const requestUtils_1 = __webpack_require__(899);
|
|
/**
|
|
* 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 __awaiter(this, void 0, void 0, function* () {
|
|
const pipeline = util.promisify(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;
|
|
core.debug(`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);
|
|
core.info(`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();
|
|
}
|
|
}
|
|
exports.DownloadProgress = DownloadProgress;
|
|
/**
|
|
* 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 __awaiter(this, void 0, void 0, function* () {
|
|
const writeStream = fs.createWriteStream(archivePath);
|
|
const httpClient = new http_client_1.HttpClient('actions/cache');
|
|
const downloadResponse = yield requestUtils_1.retryHttpClientResponse('downloadCache', () => __awaiter(this, void 0, void 0, function* () { return httpClient.get(archiveLocation); }));
|
|
// Abort download if no traffic received over the socket.
|
|
downloadResponse.message.socket.setTimeout(constants_1.SocketTimeout, () => {
|
|
downloadResponse.message.destroy();
|
|
core.debug(`Aborting download, socket timed out after ${constants_1.SocketTimeout} ms`);
|
|
});
|
|
yield pipeResponseToStream(downloadResponse, writeStream);
|
|
// Validate download size.
|
|
const contentLengthHeader = downloadResponse.message.headers['content-length'];
|
|
if (contentLengthHeader) {
|
|
const expectedLength = parseInt(contentLengthHeader);
|
|
const actualLength = utils.getArchiveFileSizeIsBytes(archivePath);
|
|
if (actualLength !== expectedLength) {
|
|
throw new Error(`Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`);
|
|
}
|
|
}
|
|
else {
|
|
core.debug('Unable to validate download, no Content-Length header');
|
|
}
|
|
});
|
|
}
|
|
exports.downloadCacheHttpClient = downloadCacheHttpClient;
|
|
/**
|
|
* 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) {
|
|
var _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const client = new storage_blob_1.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
|
|
core.debug('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
|
|
const maxSegmentSize = buffer.constants.MAX_LENGTH;
|
|
const downloadProgress = new DownloadProgress(contentLength);
|
|
const fd = fs.openSync(archivePath, 'w');
|
|
try {
|
|
downloadProgress.startDisplayTimer();
|
|
while (!downloadProgress.isDone()) {
|
|
const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
|
|
const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
|
|
downloadProgress.nextSegment(segmentSize);
|
|
const result = yield client.downloadToBuffer(segmentStart, segmentSize, {
|
|
concurrency: options.downloadConcurrency,
|
|
onProgress: downloadProgress.onProgress()
|
|
});
|
|
fs.writeFileSync(fd, result);
|
|
}
|
|
}
|
|
finally {
|
|
downloadProgress.stopDisplayTimer();
|
|
fs.closeSync(fd);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
|
|
//# sourceMappingURL=downloadUtils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 263:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var api = __webpack_require__(440);
|
|
var tslib = __webpack_require__(422);
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* A no-op implementation of Span that can safely be used without side-effects.
|
|
*/
|
|
var NoOpSpan = /** @class */ (function () {
|
|
function NoOpSpan() {
|
|
}
|
|
/**
|
|
* Returns the SpanContext associated with this Span.
|
|
*/
|
|
NoOpSpan.prototype.context = function () {
|
|
return {
|
|
spanId: "",
|
|
traceId: "",
|
|
traceFlags: api.TraceFlags.NONE
|
|
};
|
|
};
|
|
/**
|
|
* Marks the end of Span execution.
|
|
* @param _endTime The time to use as the Span's end time. Defaults to
|
|
* the current time.
|
|
*/
|
|
NoOpSpan.prototype.end = function (_endTime) {
|
|
/* Noop */
|
|
};
|
|
/**
|
|
* Sets an attribute on the Span
|
|
* @param _key the attribute key
|
|
* @param _value the attribute value
|
|
*/
|
|
NoOpSpan.prototype.setAttribute = function (_key, _value) {
|
|
return this;
|
|
};
|
|
/**
|
|
* Sets attributes on the Span
|
|
* @param _attributes the attributes to add
|
|
*/
|
|
NoOpSpan.prototype.setAttributes = function (_attributes) {
|
|
return this;
|
|
};
|
|
/**
|
|
* Adds an event to the Span
|
|
* @param _name The name of the event
|
|
* @param _attributes The associated attributes to add for this event
|
|
*/
|
|
NoOpSpan.prototype.addEvent = function (_name, _attributes) {
|
|
return this;
|
|
};
|
|
/**
|
|
* Sets a status on the span. Overrides the default of CanonicalCode.OK.
|
|
* @param _status The status to set.
|
|
*/
|
|
NoOpSpan.prototype.setStatus = function (_status) {
|
|
return this;
|
|
};
|
|
/**
|
|
* Updates the name of the Span
|
|
* @param _name the new Span name
|
|
*/
|
|
NoOpSpan.prototype.updateName = function (_name) {
|
|
return this;
|
|
};
|
|
/**
|
|
* Returns whether this span will be recorded
|
|
*/
|
|
NoOpSpan.prototype.isRecording = function () {
|
|
return false;
|
|
};
|
|
return NoOpSpan;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* A no-op implementation of Tracer that can be used when tracing
|
|
* is disabled.
|
|
*/
|
|
var NoOpTracer = /** @class */ (function () {
|
|
function NoOpTracer() {
|
|
}
|
|
/**
|
|
* Starts a new Span.
|
|
* @param _name The name of the span.
|
|
* @param _options The SpanOptions used during Span creation.
|
|
*/
|
|
NoOpTracer.prototype.startSpan = function (_name, _options) {
|
|
return new NoOpSpan();
|
|
};
|
|
/**
|
|
* Returns the current Span from the current context, if available.
|
|
*/
|
|
NoOpTracer.prototype.getCurrentSpan = function () {
|
|
return new NoOpSpan();
|
|
};
|
|
/**
|
|
* Executes the given function within the context provided by a Span.
|
|
* @param _span The span that provides the context.
|
|
* @param fn The function to be executed.
|
|
*/
|
|
NoOpTracer.prototype.withSpan = function (_span, fn) {
|
|
return fn();
|
|
};
|
|
/**
|
|
* Bind a Span as the target's scope
|
|
* @param target An object to bind the scope.
|
|
* @param _span A specific Span to use. Otherwise, use the current one.
|
|
*/
|
|
NoOpTracer.prototype.bind = function (target, _span) {
|
|
return target;
|
|
};
|
|
return NoOpTracer;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
function getGlobalObject() {
|
|
return global;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// V1 = OpenTelemetry 0.1
|
|
// V2 = OpenTelemetry 0.2
|
|
// V3 = OpenTelemetry 0.6.1
|
|
var GLOBAL_TRACER_VERSION = 3;
|
|
// preview5 shipped with @azure/core-tracing.tracerCache
|
|
// and didn't have smart detection for collisions
|
|
var GLOBAL_TRACER_SYMBOL = Symbol.for("@azure/core-tracing.tracerCache2");
|
|
var cache;
|
|
function loadTracerCache() {
|
|
var globalObj = getGlobalObject();
|
|
var existingCache = globalObj[GLOBAL_TRACER_SYMBOL];
|
|
var setGlobalCache = true;
|
|
if (existingCache) {
|
|
if (existingCache.version === GLOBAL_TRACER_VERSION) {
|
|
cache = existingCache;
|
|
}
|
|
else {
|
|
setGlobalCache = false;
|
|
if (existingCache.tracer) {
|
|
throw new Error("Two incompatible versions of @azure/core-tracing have been loaded.\n This library is " + GLOBAL_TRACER_VERSION + ", existing is " + existingCache.version + ".");
|
|
}
|
|
}
|
|
}
|
|
if (!cache) {
|
|
cache = {
|
|
tracer: undefined,
|
|
version: GLOBAL_TRACER_VERSION
|
|
};
|
|
}
|
|
if (setGlobalCache) {
|
|
globalObj[GLOBAL_TRACER_SYMBOL] = cache;
|
|
}
|
|
}
|
|
function getCache() {
|
|
if (!cache) {
|
|
loadTracerCache();
|
|
}
|
|
return cache;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
var defaultTracer;
|
|
function getDefaultTracer() {
|
|
if (!defaultTracer) {
|
|
defaultTracer = new NoOpTracer();
|
|
}
|
|
return defaultTracer;
|
|
}
|
|
/**
|
|
* Sets the global tracer, enabling tracing for the Azure SDK.
|
|
* @param tracer An OpenTelemetry Tracer instance.
|
|
*/
|
|
function setTracer(tracer) {
|
|
var cache = getCache();
|
|
cache.tracer = tracer;
|
|
}
|
|
/**
|
|
* Retrieves the active tracer, or returns a
|
|
* no-op implementation if one is not set.
|
|
*/
|
|
function getTracer() {
|
|
var cache = getCache();
|
|
if (!cache.tracer) {
|
|
return getDefaultTracer();
|
|
}
|
|
return cache.tracer;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
/**
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
var OpenCensusTraceStateWrapper = /** @class */ (function () {
|
|
function OpenCensusTraceStateWrapper(state) {
|
|
this._state = state;
|
|
}
|
|
OpenCensusTraceStateWrapper.prototype.get = function (_key) {
|
|
throw new Error("Method not implemented.");
|
|
};
|
|
OpenCensusTraceStateWrapper.prototype.set = function (_key, _value) {
|
|
throw new Error("Method not implemented.");
|
|
};
|
|
OpenCensusTraceStateWrapper.prototype.unset = function (_key) {
|
|
throw new Error("Method not implemented");
|
|
};
|
|
OpenCensusTraceStateWrapper.prototype.serialize = function () {
|
|
return this._state || "";
|
|
};
|
|
return OpenCensusTraceStateWrapper;
|
|
}());
|
|
|
|
function isWrappedSpan(span) {
|
|
return !!span && span.getWrappedSpan !== undefined;
|
|
}
|
|
function isTracer(tracerOrSpan) {
|
|
return tracerOrSpan.getWrappedTracer !== undefined;
|
|
}
|
|
/**
|
|
* An implementation of OpenTelemetry Span that wraps an OpenCensus Span.
|
|
*/
|
|
var OpenCensusSpanWrapper = /** @class */ (function () {
|
|
function OpenCensusSpanWrapper(tracerOrSpan, name, options) {
|
|
if (name === void 0) { name = ""; }
|
|
if (options === void 0) { options = {}; }
|
|
if (isTracer(tracerOrSpan)) {
|
|
var parent = isWrappedSpan(options.parent) ? options.parent.getWrappedSpan() : undefined;
|
|
this._span = tracerOrSpan.getWrappedTracer().startChildSpan({
|
|
name: name,
|
|
childOf: parent
|
|
});
|
|
this._span.start();
|
|
if (options.links) {
|
|
for (var _i = 0, _a = options.links; _i < _a.length; _i++) {
|
|
var link = _a[_i];
|
|
// Since there is no way to set the link relationship, leave it as Unspecified.
|
|
this._span.addLink(link.context.traceId, link.context.spanId, 0 /* LinkType.UNSPECIFIED */, link.attributes);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
this._span = tracerOrSpan;
|
|
}
|
|
}
|
|
/**
|
|
* The underlying OpenCensus Span
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.getWrappedSpan = function () {
|
|
return this._span;
|
|
};
|
|
/**
|
|
* Marks the end of Span execution.
|
|
* @param endTime The time to use as the Span's end time. Defaults to
|
|
* the current time.
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.end = function (_endTime) {
|
|
this._span.end();
|
|
};
|
|
/**
|
|
* Returns the SpanContext associated with this Span.
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.context = function () {
|
|
var openCensusSpanContext = this._span.spanContext;
|
|
return {
|
|
spanId: openCensusSpanContext.spanId,
|
|
traceId: openCensusSpanContext.traceId,
|
|
traceFlags: openCensusSpanContext.options,
|
|
traceState: new OpenCensusTraceStateWrapper(openCensusSpanContext.traceState)
|
|
};
|
|
};
|
|
/**
|
|
* Sets an attribute on the Span
|
|
* @param key the attribute key
|
|
* @param value the attribute value
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.setAttribute = function (key, value) {
|
|
this._span.addAttribute(key, value);
|
|
return this;
|
|
};
|
|
/**
|
|
* Sets attributes on the Span
|
|
* @param attributes the attributes to add
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.setAttributes = function (attributes) {
|
|
this._span.attributes = attributes;
|
|
return this;
|
|
};
|
|
/**
|
|
* Adds an event to the Span
|
|
* @param name The name of the event
|
|
* @param attributes The associated attributes to add for this event
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.addEvent = function (_name, _attributes) {
|
|
throw new Error("Method not implemented.");
|
|
};
|
|
/**
|
|
* Sets a status on the span. Overrides the default of CanonicalCode.OK.
|
|
* @param status The status to set.
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.setStatus = function (status) {
|
|
this._span.setStatus(status.code, status.message);
|
|
return this;
|
|
};
|
|
/**
|
|
* Updates the name of the Span
|
|
* @param name the new Span name
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.updateName = function (name) {
|
|
this._span.name = name;
|
|
return this;
|
|
};
|
|
/**
|
|
* Returns whether this span will be recorded
|
|
*/
|
|
OpenCensusSpanWrapper.prototype.isRecording = function () {
|
|
// NoRecordSpans have an empty traceId
|
|
return !!this._span.traceId;
|
|
};
|
|
return OpenCensusSpanWrapper;
|
|
}());
|
|
|
|
/**
|
|
* An implementation of OpenTelemetry Tracer that wraps an OpenCensus Tracer.
|
|
*/
|
|
var OpenCensusTracerWrapper = /** @class */ (function () {
|
|
/**
|
|
* Create a new wrapper around a given OpenCensus Tracer.
|
|
* @param tracer The OpenCensus Tracer to wrap.
|
|
*/
|
|
function OpenCensusTracerWrapper(tracer) {
|
|
this._tracer = tracer;
|
|
}
|
|
/**
|
|
* The wrapped OpenCensus Tracer
|
|
*/
|
|
OpenCensusTracerWrapper.prototype.getWrappedTracer = function () {
|
|
return this._tracer;
|
|
};
|
|
/**
|
|
* Starts a new Span.
|
|
* @param name The name of the span.
|
|
* @param options The SpanOptions used during Span creation.
|
|
*/
|
|
OpenCensusTracerWrapper.prototype.startSpan = function (name, options) {
|
|
return new OpenCensusSpanWrapper(this, name, options);
|
|
};
|
|
/**
|
|
* Returns the current Span from the current context, if available.
|
|
*/
|
|
OpenCensusTracerWrapper.prototype.getCurrentSpan = function () {
|
|
return undefined;
|
|
};
|
|
/**
|
|
* Executes the given function within the context provided by a Span.
|
|
* @param _span The span that provides the context.
|
|
* @param _fn The function to be executed.
|
|
*/
|
|
OpenCensusTracerWrapper.prototype.withSpan = function (_span, _fn) {
|
|
throw new Error("Method not implemented.");
|
|
};
|
|
/**
|
|
* Bind a Span as the target's scope
|
|
* @param target An object to bind the scope.
|
|
* @param _span A specific Span to use. Otherwise, use the current one.
|
|
*/
|
|
OpenCensusTracerWrapper.prototype.bind = function (_target, _span) {
|
|
throw new Error("Method not implemented.");
|
|
};
|
|
return OpenCensusTracerWrapper;
|
|
}());
|
|
|
|
/**
|
|
* A mock span useful for testing.
|
|
*/
|
|
var TestSpan = /** @class */ (function (_super) {
|
|
tslib.__extends(TestSpan, _super);
|
|
/**
|
|
* Starts a new Span.
|
|
* @param parentTracer The tracer that created this Span
|
|
* @param name The name of the span.
|
|
* @param context The SpanContext this span belongs to
|
|
* @param kind The SpanKind of this Span
|
|
* @param parentSpanId The identifier of the parent Span
|
|
* @param startTime The startTime of the event (defaults to now)
|
|
*/
|
|
function TestSpan(parentTracer, name, context, kind, parentSpanId, startTime) {
|
|
if (startTime === void 0) { startTime = Date.now(); }
|
|
var _this = _super.call(this) || this;
|
|
_this._tracer = parentTracer;
|
|
_this.name = name;
|
|
_this.kind = kind;
|
|
_this.startTime = startTime;
|
|
_this.parentSpanId = parentSpanId;
|
|
_this.status = {
|
|
code: api.CanonicalCode.OK
|
|
};
|
|
_this.endCalled = false;
|
|
_this._context = context;
|
|
_this.attributes = {};
|
|
return _this;
|
|
}
|
|
/**
|
|
* Returns the Tracer that created this Span
|
|
*/
|
|
TestSpan.prototype.tracer = function () {
|
|
return this._tracer;
|
|
};
|
|
/**
|
|
* Returns the SpanContext associated with this Span.
|
|
*/
|
|
TestSpan.prototype.context = function () {
|
|
return this._context;
|
|
};
|
|
/**
|
|
* Marks the end of Span execution.
|
|
* @param _endTime The time to use as the Span's end time. Defaults to
|
|
* the current time.
|
|
*/
|
|
TestSpan.prototype.end = function (_endTime) {
|
|
this.endCalled = true;
|
|
};
|
|
/**
|
|
* Sets a status on the span. Overrides the default of CanonicalCode.OK.
|
|
* @param status The status to set.
|
|
*/
|
|
TestSpan.prototype.setStatus = function (status) {
|
|
this.status = status;
|
|
return this;
|
|
};
|
|
/**
|
|
* Returns whether this span will be recorded
|
|
*/
|
|
TestSpan.prototype.isRecording = function () {
|
|
return true;
|
|
};
|
|
/**
|
|
* Sets an attribute on the Span
|
|
* @param key the attribute key
|
|
* @param value the attribute value
|
|
*/
|
|
TestSpan.prototype.setAttribute = function (key, value) {
|
|
this.attributes[key] = value;
|
|
return this;
|
|
};
|
|
/**
|
|
* Sets attributes on the Span
|
|
* @param attributes the attributes to add
|
|
*/
|
|
TestSpan.prototype.setAttributes = function (attributes) {
|
|
for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
this.attributes[key] = attributes[key];
|
|
}
|
|
return this;
|
|
};
|
|
return TestSpan;
|
|
}(NoOpSpan));
|
|
|
|
/**
|
|
* A mock tracer useful for testing
|
|
*/
|
|
var TestTracer = /** @class */ (function (_super) {
|
|
tslib.__extends(TestTracer, _super);
|
|
function TestTracer() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.traceIdCounter = 0;
|
|
_this.spanIdCounter = 0;
|
|
_this.rootSpans = [];
|
|
_this.knownSpans = [];
|
|
return _this;
|
|
}
|
|
TestTracer.prototype.getNextTraceId = function () {
|
|
this.traceIdCounter++;
|
|
return String(this.traceIdCounter);
|
|
};
|
|
TestTracer.prototype.getNextSpanId = function () {
|
|
this.spanIdCounter++;
|
|
return String(this.spanIdCounter);
|
|
};
|
|
/**
|
|
* Returns all Spans that were created without a parent
|
|
*/
|
|
TestTracer.prototype.getRootSpans = function () {
|
|
return this.rootSpans;
|
|
};
|
|
/**
|
|
* Returns all Spans this Tracer knows about
|
|
*/
|
|
TestTracer.prototype.getKnownSpans = function () {
|
|
return this.knownSpans;
|
|
};
|
|
/**
|
|
* Returns all Spans where end() has not been called
|
|
*/
|
|
TestTracer.prototype.getActiveSpans = function () {
|
|
return this.knownSpans.filter(function (span) {
|
|
return !span.endCalled;
|
|
});
|
|
};
|
|
/**
|
|
* Return all Spans for a particular trace, grouped by their
|
|
* parent Span in a tree-like structure
|
|
* @param traceId The traceId to return the graph for
|
|
*/
|
|
TestTracer.prototype.getSpanGraph = function (traceId) {
|
|
var traceSpans = this.knownSpans.filter(function (span) {
|
|
return span.context().traceId === traceId;
|
|
});
|
|
var roots = [];
|
|
var nodeMap = new Map();
|
|
for (var _i = 0, traceSpans_1 = traceSpans; _i < traceSpans_1.length; _i++) {
|
|
var span = traceSpans_1[_i];
|
|
var spanId = span.context().spanId;
|
|
var node = {
|
|
name: span.name,
|
|
children: []
|
|
};
|
|
nodeMap.set(spanId, node);
|
|
if (span.parentSpanId) {
|
|
var parent = nodeMap.get(span.parentSpanId);
|
|
if (!parent) {
|
|
throw new Error("Span with name " + node.name + " has an unknown parentSpan with id " + span.parentSpanId);
|
|
}
|
|
parent.children.push(node);
|
|
}
|
|
else {
|
|
roots.push(node);
|
|
}
|
|
}
|
|
return {
|
|
roots: roots
|
|
};
|
|
};
|
|
/**
|
|
* Starts a new Span.
|
|
* @param name The name of the span.
|
|
* @param options The SpanOptions used during Span creation.
|
|
*/
|
|
TestTracer.prototype.startSpan = function (name, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var parentContext = this._getParentContext(options);
|
|
var traceId;
|
|
var isRootSpan = false;
|
|
if (parentContext && parentContext.traceId) {
|
|
traceId = parentContext.traceId;
|
|
}
|
|
else {
|
|
traceId = this.getNextTraceId();
|
|
isRootSpan = true;
|
|
}
|
|
var context = {
|
|
traceId: traceId,
|
|
spanId: this.getNextSpanId(),
|
|
traceFlags: api.TraceFlags.NONE
|
|
};
|
|
var span = new TestSpan(this, name, context, options.kind || api.SpanKind.INTERNAL, parentContext ? parentContext.spanId : undefined, options.startTime);
|
|
this.knownSpans.push(span);
|
|
if (isRootSpan) {
|
|
this.rootSpans.push(span);
|
|
}
|
|
return span;
|
|
};
|
|
TestTracer.prototype._getParentContext = function (options) {
|
|
var parent = options.parent;
|
|
var result;
|
|
if (parent) {
|
|
if ("traceId" in parent) {
|
|
result = parent;
|
|
}
|
|
else {
|
|
result = parent.context();
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
return TestTracer;
|
|
}(NoOpTracer));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
var VERSION = "00";
|
|
/**
|
|
* Generates a `SpanContext` given a `traceparent` header value.
|
|
* @param traceParent Serialized span context data as a `traceparent` header value.
|
|
* @returns The `SpanContext` generated from the `traceparent` value.
|
|
*/
|
|
function extractSpanContextFromTraceParentHeader(traceParentHeader) {
|
|
var parts = traceParentHeader.split("-");
|
|
if (parts.length !== 4) {
|
|
return;
|
|
}
|
|
var version = parts[0], traceId = parts[1], spanId = parts[2], traceOptions = parts[3];
|
|
if (version !== VERSION) {
|
|
return;
|
|
}
|
|
var traceFlags = parseInt(traceOptions, 16);
|
|
var spanContext = {
|
|
spanId: spanId,
|
|
traceId: traceId,
|
|
traceFlags: traceFlags
|
|
};
|
|
return spanContext;
|
|
}
|
|
/**
|
|
* Generates a `traceparent` value given a span context.
|
|
* @param spanContext Contains context for a specific span.
|
|
* @returns The `spanContext` represented as a `traceparent` value.
|
|
*/
|
|
function getTraceParentHeader(spanContext) {
|
|
var missingFields = [];
|
|
if (!spanContext.traceId) {
|
|
missingFields.push("traceId");
|
|
}
|
|
if (!spanContext.spanId) {
|
|
missingFields.push("spanId");
|
|
}
|
|
if (missingFields.length) {
|
|
return;
|
|
}
|
|
var flags = spanContext.traceFlags || 0 /* NONE */;
|
|
var hexFlags = flags.toString(16);
|
|
var traceFlags = hexFlags.length === 1 ? "0" + hexFlags : hexFlags;
|
|
// https://www.w3.org/TR/trace-context/#traceparent-header-field-values
|
|
return VERSION + "-" + spanContext.traceId + "-" + spanContext.spanId + "-" + traceFlags;
|
|
}
|
|
|
|
exports.NoOpSpan = NoOpSpan;
|
|
exports.NoOpTracer = NoOpTracer;
|
|
exports.OpenCensusSpanWrapper = OpenCensusSpanWrapper;
|
|
exports.OpenCensusTracerWrapper = OpenCensusTracerWrapper;
|
|
exports.TestSpan = TestSpan;
|
|
exports.TestTracer = TestTracer;
|
|
exports.extractSpanContextFromTraceParentHeader = extractSpanContextFromTraceParentHeader;
|
|
exports.getTraceParentHeader = getTraceParentHeader;
|
|
exports.getTracer = getTracer;
|
|
exports.setTracer = setTracer;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 265:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLNodeList;
|
|
|
|
module.exports = XMLNodeList = (function() {
|
|
function XMLNodeList(nodes) {
|
|
this.nodes = nodes;
|
|
}
|
|
|
|
Object.defineProperty(XMLNodeList.prototype, 'length', {
|
|
get: function() {
|
|
return this.nodes.length || 0;
|
|
}
|
|
});
|
|
|
|
XMLNodeList.prototype.clone = function() {
|
|
return this.nodes = null;
|
|
};
|
|
|
|
XMLNodeList.prototype.item = function(index) {
|
|
return this.nodes[index] || null;
|
|
};
|
|
|
|
return XMLNodeList;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 280:
|
|
/***/ (function(module, exports) {
|
|
|
|
exports = module.exports = SemVer
|
|
|
|
var debug
|
|
/* istanbul ignore next */
|
|
if (typeof process === 'object' &&
|
|
process.env &&
|
|
process.env.NODE_DEBUG &&
|
|
/\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
|
debug = function () {
|
|
var args = Array.prototype.slice.call(arguments, 0)
|
|
args.unshift('SEMVER')
|
|
console.log.apply(console, args)
|
|
}
|
|
} else {
|
|
debug = function () {}
|
|
}
|
|
|
|
// Note: this is the semver.org version of the spec that it implements
|
|
// Not necessarily the package version of this code.
|
|
exports.SEMVER_SPEC_VERSION = '2.0.0'
|
|
|
|
var MAX_LENGTH = 256
|
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
|
|
/* istanbul ignore next */ 9007199254740991
|
|
|
|
// Max safe segment length for coercion.
|
|
var MAX_SAFE_COMPONENT_LENGTH = 16
|
|
|
|
// The actual regexps go on exports.re
|
|
var re = exports.re = []
|
|
var src = exports.src = []
|
|
var t = exports.tokens = {}
|
|
var R = 0
|
|
|
|
function tok (n) {
|
|
t[n] = R++
|
|
}
|
|
|
|
// The following Regular Expressions can be used for tokenizing,
|
|
// validating, and parsing SemVer version strings.
|
|
|
|
// ## Numeric Identifier
|
|
// A single `0`, or a non-zero digit followed by zero or more digits.
|
|
|
|
tok('NUMERICIDENTIFIER')
|
|
src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*'
|
|
tok('NUMERICIDENTIFIERLOOSE')
|
|
src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'
|
|
|
|
// ## Non-numeric Identifier
|
|
// Zero or more digits, followed by a letter or hyphen, and then zero or
|
|
// more letters, digits, or hyphens.
|
|
|
|
tok('NONNUMERICIDENTIFIER')
|
|
src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
|
|
|
|
// ## Main Version
|
|
// Three dot-separated numeric identifiers.
|
|
|
|
tok('MAINVERSION')
|
|
src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
|
'(' + src[t.NUMERICIDENTIFIER] + ')\\.' +
|
|
'(' + src[t.NUMERICIDENTIFIER] + ')'
|
|
|
|
tok('MAINVERSIONLOOSE')
|
|
src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
|
'(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'
|
|
|
|
// ## Pre-release Version Identifier
|
|
// A numeric identifier, or a non-numeric identifier.
|
|
|
|
tok('PRERELEASEIDENTIFIER')
|
|
src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +
|
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
|
|
|
tok('PRERELEASEIDENTIFIERLOOSE')
|
|
src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +
|
|
'|' + src[t.NONNUMERICIDENTIFIER] + ')'
|
|
|
|
// ## Pre-release Version
|
|
// Hyphen, followed by one or more dot-separated pre-release version
|
|
// identifiers.
|
|
|
|
tok('PRERELEASE')
|
|
src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +
|
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'
|
|
|
|
tok('PRERELEASELOOSE')
|
|
src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +
|
|
'(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'
|
|
|
|
// ## Build Metadata Identifier
|
|
// Any combination of digits, letters, or hyphens.
|
|
|
|
tok('BUILDIDENTIFIER')
|
|
src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
|
|
|
|
// ## Build Metadata
|
|
// Plus sign, followed by one or more period-separated build metadata
|
|
// identifiers.
|
|
|
|
tok('BUILD')
|
|
src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] +
|
|
'(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))'
|
|
|
|
// ## Full Version String
|
|
// A main version, followed optionally by a pre-release version and
|
|
// build metadata.
|
|
|
|
// Note that the only major, minor, patch, and pre-release sections of
|
|
// the version string are capturing groups. The build metadata is not a
|
|
// capturing group, because it should not ever be used in version
|
|
// comparison.
|
|
|
|
tok('FULL')
|
|
tok('FULLPLAIN')
|
|
src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +
|
|
src[t.PRERELEASE] + '?' +
|
|
src[t.BUILD] + '?'
|
|
|
|
src[t.FULL] = '^' + src[t.FULLPLAIN] + '$'
|
|
|
|
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
|
|
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
|
|
// common in the npm registry.
|
|
tok('LOOSEPLAIN')
|
|
src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] +
|
|
src[t.PRERELEASELOOSE] + '?' +
|
|
src[t.BUILD] + '?'
|
|
|
|
tok('LOOSE')
|
|
src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'
|
|
|
|
tok('GTLT')
|
|
src[t.GTLT] = '((?:<|>)?=?)'
|
|
|
|
// Something like "2.*" or "1.2.x".
|
|
// Note that "x.x" is a valid xRange identifer, meaning "any version"
|
|
// Only the first item is strictly required.
|
|
tok('XRANGEIDENTIFIERLOOSE')
|
|
src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
|
|
tok('XRANGEIDENTIFIER')
|
|
src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*'
|
|
|
|
tok('XRANGEPLAIN')
|
|
src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +
|
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
|
'(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' +
|
|
'(?:' + src[t.PRERELEASE] + ')?' +
|
|
src[t.BUILD] + '?' +
|
|
')?)?'
|
|
|
|
tok('XRANGEPLAINLOOSE')
|
|
src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
|
'(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +
|
|
'(?:' + src[t.PRERELEASELOOSE] + ')?' +
|
|
src[t.BUILD] + '?' +
|
|
')?)?'
|
|
|
|
tok('XRANGE')
|
|
src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$'
|
|
tok('XRANGELOOSE')
|
|
src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$'
|
|
|
|
// Coercion.
|
|
// Extract anything that could conceivably be a part of a valid semver
|
|
tok('COERCE')
|
|
src[t.COERCE] = '(^|[^\\d])' +
|
|
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
|
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
'(?:$|[^\\d])'
|
|
tok('COERCERTL')
|
|
re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')
|
|
|
|
// Tilde ranges.
|
|
// Meaning is "reasonably at or greater than"
|
|
tok('LONETILDE')
|
|
src[t.LONETILDE] = '(?:~>?)'
|
|
|
|
tok('TILDETRIM')
|
|
src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+'
|
|
re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')
|
|
var tildeTrimReplace = '$1~'
|
|
|
|
tok('TILDE')
|
|
src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'
|
|
tok('TILDELOOSE')
|
|
src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'
|
|
|
|
// Caret ranges.
|
|
// Meaning is "at least and backwards compatible with"
|
|
tok('LONECARET')
|
|
src[t.LONECARET] = '(?:\\^)'
|
|
|
|
tok('CARETTRIM')
|
|
src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+'
|
|
re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')
|
|
var caretTrimReplace = '$1^'
|
|
|
|
tok('CARET')
|
|
src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'
|
|
tok('CARETLOOSE')
|
|
src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'
|
|
|
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
|
tok('COMPARATORLOOSE')
|
|
src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'
|
|
tok('COMPARATOR')
|
|
src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$'
|
|
|
|
// An expression to strip any whitespace between the gtlt and the thing
|
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
|
tok('COMPARATORTRIM')
|
|
src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] +
|
|
'\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'
|
|
|
|
// this one has to use the /g flag
|
|
re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')
|
|
var comparatorTrimReplace = '$1$2$3'
|
|
|
|
// Something like `1.2.3 - 1.2.4`
|
|
// Note that these all use the loose form, because they'll be
|
|
// checked against either the strict or loose comparator form
|
|
// later.
|
|
tok('HYPHENRANGE')
|
|
src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' +
|
|
'\\s+-\\s+' +
|
|
'(' + src[t.XRANGEPLAIN] + ')' +
|
|
'\\s*$'
|
|
|
|
tok('HYPHENRANGELOOSE')
|
|
src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
|
'\\s+-\\s+' +
|
|
'(' + src[t.XRANGEPLAINLOOSE] + ')' +
|
|
'\\s*$'
|
|
|
|
// Star ranges basically just allow anything at all.
|
|
tok('STAR')
|
|
src[t.STAR] = '(<|>)?=?\\s*\\*'
|
|
|
|
// Compile to actual regexp objects.
|
|
// All are flag-free, unless they were created above with a flag.
|
|
for (var i = 0; i < R; i++) {
|
|
debug(i, src[i])
|
|
if (!re[i]) {
|
|
re[i] = new RegExp(src[i])
|
|
}
|
|
}
|
|
|
|
exports.parse = parse
|
|
function parse (version, options) {
|
|
if (!options || typeof options !== 'object') {
|
|
options = {
|
|
loose: !!options,
|
|
includePrerelease: false
|
|
}
|
|
}
|
|
|
|
if (version instanceof SemVer) {
|
|
return version
|
|
}
|
|
|
|
if (typeof version !== 'string') {
|
|
return null
|
|
}
|
|
|
|
if (version.length > MAX_LENGTH) {
|
|
return null
|
|
}
|
|
|
|
var r = options.loose ? re[t.LOOSE] : re[t.FULL]
|
|
if (!r.test(version)) {
|
|
return null
|
|
}
|
|
|
|
try {
|
|
return new SemVer(version, options)
|
|
} catch (er) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
exports.valid = valid
|
|
function valid (version, options) {
|
|
var v = parse(version, options)
|
|
return v ? v.version : null
|
|
}
|
|
|
|
exports.clean = clean
|
|
function clean (version, options) {
|
|
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
|
return s ? s.version : null
|
|
}
|
|
|
|
exports.SemVer = SemVer
|
|
|
|
function SemVer (version, options) {
|
|
if (!options || typeof options !== 'object') {
|
|
options = {
|
|
loose: !!options,
|
|
includePrerelease: false
|
|
}
|
|
}
|
|
if (version instanceof SemVer) {
|
|
if (version.loose === options.loose) {
|
|
return version
|
|
} else {
|
|
version = version.version
|
|
}
|
|
} else if (typeof version !== 'string') {
|
|
throw new TypeError('Invalid Version: ' + version)
|
|
}
|
|
|
|
if (version.length > MAX_LENGTH) {
|
|
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
|
|
}
|
|
|
|
if (!(this instanceof SemVer)) {
|
|
return new SemVer(version, options)
|
|
}
|
|
|
|
debug('SemVer', version, options)
|
|
this.options = options
|
|
this.loose = !!options.loose
|
|
|
|
var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
|
|
|
|
if (!m) {
|
|
throw new TypeError('Invalid Version: ' + version)
|
|
}
|
|
|
|
this.raw = version
|
|
|
|
// these are actually numbers
|
|
this.major = +m[1]
|
|
this.minor = +m[2]
|
|
this.patch = +m[3]
|
|
|
|
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
|
throw new TypeError('Invalid major version')
|
|
}
|
|
|
|
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
|
throw new TypeError('Invalid minor version')
|
|
}
|
|
|
|
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
|
throw new TypeError('Invalid patch version')
|
|
}
|
|
|
|
// numberify any prerelease numeric ids
|
|
if (!m[4]) {
|
|
this.prerelease = []
|
|
} else {
|
|
this.prerelease = m[4].split('.').map(function (id) {
|
|
if (/^[0-9]+$/.test(id)) {
|
|
var num = +id
|
|
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
|
return num
|
|
}
|
|
}
|
|
return id
|
|
})
|
|
}
|
|
|
|
this.build = m[5] ? m[5].split('.') : []
|
|
this.format()
|
|
}
|
|
|
|
SemVer.prototype.format = function () {
|
|
this.version = this.major + '.' + this.minor + '.' + this.patch
|
|
if (this.prerelease.length) {
|
|
this.version += '-' + this.prerelease.join('.')
|
|
}
|
|
return this.version
|
|
}
|
|
|
|
SemVer.prototype.toString = function () {
|
|
return this.version
|
|
}
|
|
|
|
SemVer.prototype.compare = function (other) {
|
|
debug('SemVer.compare', this.version, this.options, other)
|
|
if (!(other instanceof SemVer)) {
|
|
other = new SemVer(other, this.options)
|
|
}
|
|
|
|
return this.compareMain(other) || this.comparePre(other)
|
|
}
|
|
|
|
SemVer.prototype.compareMain = function (other) {
|
|
if (!(other instanceof SemVer)) {
|
|
other = new SemVer(other, this.options)
|
|
}
|
|
|
|
return compareIdentifiers(this.major, other.major) ||
|
|
compareIdentifiers(this.minor, other.minor) ||
|
|
compareIdentifiers(this.patch, other.patch)
|
|
}
|
|
|
|
SemVer.prototype.comparePre = function (other) {
|
|
if (!(other instanceof SemVer)) {
|
|
other = new SemVer(other, this.options)
|
|
}
|
|
|
|
// NOT having a prerelease is > having one
|
|
if (this.prerelease.length && !other.prerelease.length) {
|
|
return -1
|
|
} else if (!this.prerelease.length && other.prerelease.length) {
|
|
return 1
|
|
} else if (!this.prerelease.length && !other.prerelease.length) {
|
|
return 0
|
|
}
|
|
|
|
var i = 0
|
|
do {
|
|
var a = this.prerelease[i]
|
|
var b = other.prerelease[i]
|
|
debug('prerelease compare', i, a, b)
|
|
if (a === undefined && b === undefined) {
|
|
return 0
|
|
} else if (b === undefined) {
|
|
return 1
|
|
} else if (a === undefined) {
|
|
return -1
|
|
} else if (a === b) {
|
|
continue
|
|
} else {
|
|
return compareIdentifiers(a, b)
|
|
}
|
|
} while (++i)
|
|
}
|
|
|
|
SemVer.prototype.compareBuild = function (other) {
|
|
if (!(other instanceof SemVer)) {
|
|
other = new SemVer(other, this.options)
|
|
}
|
|
|
|
var i = 0
|
|
do {
|
|
var a = this.build[i]
|
|
var b = other.build[i]
|
|
debug('prerelease compare', i, a, b)
|
|
if (a === undefined && b === undefined) {
|
|
return 0
|
|
} else if (b === undefined) {
|
|
return 1
|
|
} else if (a === undefined) {
|
|
return -1
|
|
} else if (a === b) {
|
|
continue
|
|
} else {
|
|
return compareIdentifiers(a, b)
|
|
}
|
|
} while (++i)
|
|
}
|
|
|
|
// preminor will bump the version up to the next minor release, and immediately
|
|
// down to pre-release. premajor and prepatch work the same way.
|
|
SemVer.prototype.inc = function (release, identifier) {
|
|
switch (release) {
|
|
case 'premajor':
|
|
this.prerelease.length = 0
|
|
this.patch = 0
|
|
this.minor = 0
|
|
this.major++
|
|
this.inc('pre', identifier)
|
|
break
|
|
case 'preminor':
|
|
this.prerelease.length = 0
|
|
this.patch = 0
|
|
this.minor++
|
|
this.inc('pre', identifier)
|
|
break
|
|
case 'prepatch':
|
|
// If this is already a prerelease, it will bump to the next version
|
|
// drop any prereleases that might already exist, since they are not
|
|
// relevant at this point.
|
|
this.prerelease.length = 0
|
|
this.inc('patch', identifier)
|
|
this.inc('pre', identifier)
|
|
break
|
|
// If the input is a non-prerelease version, this acts the same as
|
|
// prepatch.
|
|
case 'prerelease':
|
|
if (this.prerelease.length === 0) {
|
|
this.inc('patch', identifier)
|
|
}
|
|
this.inc('pre', identifier)
|
|
break
|
|
|
|
case 'major':
|
|
// If this is a pre-major version, bump up to the same major version.
|
|
// Otherwise increment major.
|
|
// 1.0.0-5 bumps to 1.0.0
|
|
// 1.1.0 bumps to 2.0.0
|
|
if (this.minor !== 0 ||
|
|
this.patch !== 0 ||
|
|
this.prerelease.length === 0) {
|
|
this.major++
|
|
}
|
|
this.minor = 0
|
|
this.patch = 0
|
|
this.prerelease = []
|
|
break
|
|
case 'minor':
|
|
// If this is a pre-minor version, bump up to the same minor version.
|
|
// Otherwise increment minor.
|
|
// 1.2.0-5 bumps to 1.2.0
|
|
// 1.2.1 bumps to 1.3.0
|
|
if (this.patch !== 0 || this.prerelease.length === 0) {
|
|
this.minor++
|
|
}
|
|
this.patch = 0
|
|
this.prerelease = []
|
|
break
|
|
case 'patch':
|
|
// If this is not a pre-release version, it will increment the patch.
|
|
// If it is a pre-release it will bump up to the same patch version.
|
|
// 1.2.0-5 patches to 1.2.0
|
|
// 1.2.0 patches to 1.2.1
|
|
if (this.prerelease.length === 0) {
|
|
this.patch++
|
|
}
|
|
this.prerelease = []
|
|
break
|
|
// This probably shouldn't be used publicly.
|
|
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
|
case 'pre':
|
|
if (this.prerelease.length === 0) {
|
|
this.prerelease = [0]
|
|
} else {
|
|
var i = this.prerelease.length
|
|
while (--i >= 0) {
|
|
if (typeof this.prerelease[i] === 'number') {
|
|
this.prerelease[i]++
|
|
i = -2
|
|
}
|
|
}
|
|
if (i === -1) {
|
|
// didn't increment anything
|
|
this.prerelease.push(0)
|
|
}
|
|
}
|
|
if (identifier) {
|
|
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
|
|
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
|
|
if (this.prerelease[0] === identifier) {
|
|
if (isNaN(this.prerelease[1])) {
|
|
this.prerelease = [identifier, 0]
|
|
}
|
|
} else {
|
|
this.prerelease = [identifier, 0]
|
|
}
|
|
}
|
|
break
|
|
|
|
default:
|
|
throw new Error('invalid increment argument: ' + release)
|
|
}
|
|
this.format()
|
|
this.raw = this.version
|
|
return this
|
|
}
|
|
|
|
exports.inc = inc
|
|
function inc (version, release, loose, identifier) {
|
|
if (typeof (loose) === 'string') {
|
|
identifier = loose
|
|
loose = undefined
|
|
}
|
|
|
|
try {
|
|
return new SemVer(version, loose).inc(release, identifier).version
|
|
} catch (er) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
exports.diff = diff
|
|
function diff (version1, version2) {
|
|
if (eq(version1, version2)) {
|
|
return null
|
|
} else {
|
|
var v1 = parse(version1)
|
|
var v2 = parse(version2)
|
|
var prefix = ''
|
|
if (v1.prerelease.length || v2.prerelease.length) {
|
|
prefix = 'pre'
|
|
var defaultResult = 'prerelease'
|
|
}
|
|
for (var key in v1) {
|
|
if (key === 'major' || key === 'minor' || key === 'patch') {
|
|
if (v1[key] !== v2[key]) {
|
|
return prefix + key
|
|
}
|
|
}
|
|
}
|
|
return defaultResult // may be undefined
|
|
}
|
|
}
|
|
|
|
exports.compareIdentifiers = compareIdentifiers
|
|
|
|
var numeric = /^[0-9]+$/
|
|
function compareIdentifiers (a, b) {
|
|
var anum = numeric.test(a)
|
|
var bnum = numeric.test(b)
|
|
|
|
if (anum && bnum) {
|
|
a = +a
|
|
b = +b
|
|
}
|
|
|
|
return a === b ? 0
|
|
: (anum && !bnum) ? -1
|
|
: (bnum && !anum) ? 1
|
|
: a < b ? -1
|
|
: 1
|
|
}
|
|
|
|
exports.rcompareIdentifiers = rcompareIdentifiers
|
|
function rcompareIdentifiers (a, b) {
|
|
return compareIdentifiers(b, a)
|
|
}
|
|
|
|
exports.major = major
|
|
function major (a, loose) {
|
|
return new SemVer(a, loose).major
|
|
}
|
|
|
|
exports.minor = minor
|
|
function minor (a, loose) {
|
|
return new SemVer(a, loose).minor
|
|
}
|
|
|
|
exports.patch = patch
|
|
function patch (a, loose) {
|
|
return new SemVer(a, loose).patch
|
|
}
|
|
|
|
exports.compare = compare
|
|
function compare (a, b, loose) {
|
|
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
|
}
|
|
|
|
exports.compareLoose = compareLoose
|
|
function compareLoose (a, b) {
|
|
return compare(a, b, true)
|
|
}
|
|
|
|
exports.compareBuild = compareBuild
|
|
function compareBuild (a, b, loose) {
|
|
var versionA = new SemVer(a, loose)
|
|
var versionB = new SemVer(b, loose)
|
|
return versionA.compare(versionB) || versionA.compareBuild(versionB)
|
|
}
|
|
|
|
exports.rcompare = rcompare
|
|
function rcompare (a, b, loose) {
|
|
return compare(b, a, loose)
|
|
}
|
|
|
|
exports.sort = sort
|
|
function sort (list, loose) {
|
|
return list.sort(function (a, b) {
|
|
return exports.compareBuild(a, b, loose)
|
|
})
|
|
}
|
|
|
|
exports.rsort = rsort
|
|
function rsort (list, loose) {
|
|
return list.sort(function (a, b) {
|
|
return exports.compareBuild(b, a, loose)
|
|
})
|
|
}
|
|
|
|
exports.gt = gt
|
|
function gt (a, b, loose) {
|
|
return compare(a, b, loose) > 0
|
|
}
|
|
|
|
exports.lt = lt
|
|
function lt (a, b, loose) {
|
|
return compare(a, b, loose) < 0
|
|
}
|
|
|
|
exports.eq = eq
|
|
function eq (a, b, loose) {
|
|
return compare(a, b, loose) === 0
|
|
}
|
|
|
|
exports.neq = neq
|
|
function neq (a, b, loose) {
|
|
return compare(a, b, loose) !== 0
|
|
}
|
|
|
|
exports.gte = gte
|
|
function gte (a, b, loose) {
|
|
return compare(a, b, loose) >= 0
|
|
}
|
|
|
|
exports.lte = lte
|
|
function lte (a, b, loose) {
|
|
return compare(a, b, loose) <= 0
|
|
}
|
|
|
|
exports.cmp = cmp
|
|
function cmp (a, op, b, loose) {
|
|
switch (op) {
|
|
case '===':
|
|
if (typeof a === 'object')
|
|
a = a.version
|
|
if (typeof b === 'object')
|
|
b = b.version
|
|
return a === b
|
|
|
|
case '!==':
|
|
if (typeof a === 'object')
|
|
a = a.version
|
|
if (typeof b === 'object')
|
|
b = b.version
|
|
return a !== b
|
|
|
|
case '':
|
|
case '=':
|
|
case '==':
|
|
return eq(a, b, loose)
|
|
|
|
case '!=':
|
|
return neq(a, b, loose)
|
|
|
|
case '>':
|
|
return gt(a, b, loose)
|
|
|
|
case '>=':
|
|
return gte(a, b, loose)
|
|
|
|
case '<':
|
|
return lt(a, b, loose)
|
|
|
|
case '<=':
|
|
return lte(a, b, loose)
|
|
|
|
default:
|
|
throw new TypeError('Invalid operator: ' + op)
|
|
}
|
|
}
|
|
|
|
exports.Comparator = Comparator
|
|
function Comparator (comp, options) {
|
|
if (!options || typeof options !== 'object') {
|
|
options = {
|
|
loose: !!options,
|
|
includePrerelease: false
|
|
}
|
|
}
|
|
|
|
if (comp instanceof Comparator) {
|
|
if (comp.loose === !!options.loose) {
|
|
return comp
|
|
} else {
|
|
comp = comp.value
|
|
}
|
|
}
|
|
|
|
if (!(this instanceof Comparator)) {
|
|
return new Comparator(comp, options)
|
|
}
|
|
|
|
debug('comparator', comp, options)
|
|
this.options = options
|
|
this.loose = !!options.loose
|
|
this.parse(comp)
|
|
|
|
if (this.semver === ANY) {
|
|
this.value = ''
|
|
} else {
|
|
this.value = this.operator + this.semver.version
|
|
}
|
|
|
|
debug('comp', this)
|
|
}
|
|
|
|
var ANY = {}
|
|
Comparator.prototype.parse = function (comp) {
|
|
var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
|
var m = comp.match(r)
|
|
|
|
if (!m) {
|
|
throw new TypeError('Invalid comparator: ' + comp)
|
|
}
|
|
|
|
this.operator = m[1] !== undefined ? m[1] : ''
|
|
if (this.operator === '=') {
|
|
this.operator = ''
|
|
}
|
|
|
|
// if it literally is just '>' or '' then allow anything.
|
|
if (!m[2]) {
|
|
this.semver = ANY
|
|
} else {
|
|
this.semver = new SemVer(m[2], this.options.loose)
|
|
}
|
|
}
|
|
|
|
Comparator.prototype.toString = function () {
|
|
return this.value
|
|
}
|
|
|
|
Comparator.prototype.test = function (version) {
|
|
debug('Comparator.test', version, this.options.loose)
|
|
|
|
if (this.semver === ANY || version === ANY) {
|
|
return true
|
|
}
|
|
|
|
if (typeof version === 'string') {
|
|
try {
|
|
version = new SemVer(version, this.options)
|
|
} catch (er) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return cmp(version, this.operator, this.semver, this.options)
|
|
}
|
|
|
|
Comparator.prototype.intersects = function (comp, options) {
|
|
if (!(comp instanceof Comparator)) {
|
|
throw new TypeError('a Comparator is required')
|
|
}
|
|
|
|
if (!options || typeof options !== 'object') {
|
|
options = {
|
|
loose: !!options,
|
|
includePrerelease: false
|
|
}
|
|
}
|
|
|
|
var rangeTmp
|
|
|
|
if (this.operator === '') {
|
|
if (this.value === '') {
|
|
return true
|
|
}
|
|
rangeTmp = new Range(comp.value, options)
|
|
return satisfies(this.value, rangeTmp, options)
|
|
} else if (comp.operator === '') {
|
|
if (comp.value === '') {
|
|
return true
|
|
}
|
|
rangeTmp = new Range(this.value, options)
|
|
return satisfies(comp.semver, rangeTmp, options)
|
|
}
|
|
|
|
var sameDirectionIncreasing =
|
|
(this.operator === '>=' || this.operator === '>') &&
|
|
(comp.operator === '>=' || comp.operator === '>')
|
|
var sameDirectionDecreasing =
|
|
(this.operator === '<=' || this.operator === '<') &&
|
|
(comp.operator === '<=' || comp.operator === '<')
|
|
var sameSemVer = this.semver.version === comp.semver.version
|
|
var differentDirectionsInclusive =
|
|
(this.operator === '>=' || this.operator === '<=') &&
|
|
(comp.operator === '>=' || comp.operator === '<=')
|
|
var oppositeDirectionsLessThan =
|
|
cmp(this.semver, '<', comp.semver, options) &&
|
|
((this.operator === '>=' || this.operator === '>') &&
|
|
(comp.operator === '<=' || comp.operator === '<'))
|
|
var oppositeDirectionsGreaterThan =
|
|
cmp(this.semver, '>', comp.semver, options) &&
|
|
((this.operator === '<=' || this.operator === '<') &&
|
|
(comp.operator === '>=' || comp.operator === '>'))
|
|
|
|
return sameDirectionIncreasing || sameDirectionDecreasing ||
|
|
(sameSemVer && differentDirectionsInclusive) ||
|
|
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
|
|
}
|
|
|
|
exports.Range = Range
|
|
function Range (range, options) {
|
|
if (!options || typeof options !== 'object') {
|
|
options = {
|
|
loose: !!options,
|
|
includePrerelease: false
|
|
}
|
|
}
|
|
|
|
if (range instanceof Range) {
|
|
if (range.loose === !!options.loose &&
|
|
range.includePrerelease === !!options.includePrerelease) {
|
|
return range
|
|
} else {
|
|
return new Range(range.raw, options)
|
|
}
|
|
}
|
|
|
|
if (range instanceof Comparator) {
|
|
return new Range(range.value, options)
|
|
}
|
|
|
|
if (!(this instanceof Range)) {
|
|
return new Range(range, options)
|
|
}
|
|
|
|
this.options = options
|
|
this.loose = !!options.loose
|
|
this.includePrerelease = !!options.includePrerelease
|
|
|
|
// First, split based on boolean or ||
|
|
this.raw = range
|
|
this.set = range.split(/\s*\|\|\s*/).map(function (range) {
|
|
return this.parseRange(range.trim())
|
|
}, this).filter(function (c) {
|
|
// throw out any that are not relevant for whatever reason
|
|
return c.length
|
|
})
|
|
|
|
if (!this.set.length) {
|
|
throw new TypeError('Invalid SemVer Range: ' + range)
|
|
}
|
|
|
|
this.format()
|
|
}
|
|
|
|
Range.prototype.format = function () {
|
|
this.range = this.set.map(function (comps) {
|
|
return comps.join(' ').trim()
|
|
}).join('||').trim()
|
|
return this.range
|
|
}
|
|
|
|
Range.prototype.toString = function () {
|
|
return this.range
|
|
}
|
|
|
|
Range.prototype.parseRange = function (range) {
|
|
var loose = this.options.loose
|
|
range = range.trim()
|
|
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
|
|
var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
|
|
range = range.replace(hr, hyphenReplace)
|
|
debug('hyphen replace', range)
|
|
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
|
|
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
|
|
debug('comparator trim', range, re[t.COMPARATORTRIM])
|
|
|
|
// `~ 1.2.3` => `~1.2.3`
|
|
range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
|
|
|
|
// `^ 1.2.3` => `^1.2.3`
|
|
range = range.replace(re[t.CARETTRIM], caretTrimReplace)
|
|
|
|
// normalize spaces
|
|
range = range.split(/\s+/).join(' ')
|
|
|
|
// At this point, the range is completely trimmed and
|
|
// ready to be split into comparators.
|
|
|
|
var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
|
|
var set = range.split(' ').map(function (comp) {
|
|
return parseComparator(comp, this.options)
|
|
}, this).join(' ').split(/\s+/)
|
|
if (this.options.loose) {
|
|
// in loose mode, throw out any that are not valid comparators
|
|
set = set.filter(function (comp) {
|
|
return !!comp.match(compRe)
|
|
})
|
|
}
|
|
set = set.map(function (comp) {
|
|
return new Comparator(comp, this.options)
|
|
}, this)
|
|
|
|
return set
|
|
}
|
|
|
|
Range.prototype.intersects = function (range, options) {
|
|
if (!(range instanceof Range)) {
|
|
throw new TypeError('a Range is required')
|
|
}
|
|
|
|
return this.set.some(function (thisComparators) {
|
|
return (
|
|
isSatisfiable(thisComparators, options) &&
|
|
range.set.some(function (rangeComparators) {
|
|
return (
|
|
isSatisfiable(rangeComparators, options) &&
|
|
thisComparators.every(function (thisComparator) {
|
|
return rangeComparators.every(function (rangeComparator) {
|
|
return thisComparator.intersects(rangeComparator, options)
|
|
})
|
|
})
|
|
)
|
|
})
|
|
)
|
|
})
|
|
}
|
|
|
|
// take a set of comparators and determine whether there
|
|
// exists a version which can satisfy it
|
|
function isSatisfiable (comparators, options) {
|
|
var result = true
|
|
var remainingComparators = comparators.slice()
|
|
var testComparator = remainingComparators.pop()
|
|
|
|
while (result && remainingComparators.length) {
|
|
result = remainingComparators.every(function (otherComparator) {
|
|
return testComparator.intersects(otherComparator, options)
|
|
})
|
|
|
|
testComparator = remainingComparators.pop()
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Mostly just for testing and legacy API reasons
|
|
exports.toComparators = toComparators
|
|
function toComparators (range, options) {
|
|
return new Range(range, options).set.map(function (comp) {
|
|
return comp.map(function (c) {
|
|
return c.value
|
|
}).join(' ').trim().split(' ')
|
|
})
|
|
}
|
|
|
|
// comprised of xranges, tildes, stars, and gtlt's at this point.
|
|
// already replaced the hyphen ranges
|
|
// turn into a set of JUST comparators.
|
|
function parseComparator (comp, options) {
|
|
debug('comp', comp, options)
|
|
comp = replaceCarets(comp, options)
|
|
debug('caret', comp)
|
|
comp = replaceTildes(comp, options)
|
|
debug('tildes', comp)
|
|
comp = replaceXRanges(comp, options)
|
|
debug('xrange', comp)
|
|
comp = replaceStars(comp, options)
|
|
debug('stars', comp)
|
|
return comp
|
|
}
|
|
|
|
function isX (id) {
|
|
return !id || id.toLowerCase() === 'x' || id === '*'
|
|
}
|
|
|
|
// ~, ~> --> * (any, kinda silly)
|
|
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
|
|
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
|
|
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
|
|
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
|
|
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
|
|
function replaceTildes (comp, options) {
|
|
return comp.trim().split(/\s+/).map(function (comp) {
|
|
return replaceTilde(comp, options)
|
|
}).join(' ')
|
|
}
|
|
|
|
function replaceTilde (comp, options) {
|
|
var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
|
|
return comp.replace(r, function (_, M, m, p, pr) {
|
|
debug('tilde', comp, _, M, m, p, pr)
|
|
var ret
|
|
|
|
if (isX(M)) {
|
|
ret = ''
|
|
} else if (isX(m)) {
|
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
} else if (isX(p)) {
|
|
// ~1.2 == >=1.2.0 <1.3.0
|
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
} else if (pr) {
|
|
debug('replaceTilde pr', pr)
|
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
' <' + M + '.' + (+m + 1) + '.0'
|
|
} else {
|
|
// ~1.2.3 == >=1.2.3 <1.3.0
|
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
' <' + M + '.' + (+m + 1) + '.0'
|
|
}
|
|
|
|
debug('tilde return', ret)
|
|
return ret
|
|
})
|
|
}
|
|
|
|
// ^ --> * (any, kinda silly)
|
|
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
|
|
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
|
|
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
|
// ^1.2.3 --> >=1.2.3 <2.0.0
|
|
// ^1.2.0 --> >=1.2.0 <2.0.0
|
|
function replaceCarets (comp, options) {
|
|
return comp.trim().split(/\s+/).map(function (comp) {
|
|
return replaceCaret(comp, options)
|
|
}).join(' ')
|
|
}
|
|
|
|
function replaceCaret (comp, options) {
|
|
debug('caret', comp, options)
|
|
var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
|
|
return comp.replace(r, function (_, M, m, p, pr) {
|
|
debug('caret', comp, _, M, m, p, pr)
|
|
var ret
|
|
|
|
if (isX(M)) {
|
|
ret = ''
|
|
} else if (isX(m)) {
|
|
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
} else if (isX(p)) {
|
|
if (M === '0') {
|
|
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
} else {
|
|
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
|
|
}
|
|
} else if (pr) {
|
|
debug('replaceCaret pr', pr)
|
|
if (M === '0') {
|
|
if (m === '0') {
|
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
' <' + M + '.' + m + '.' + (+p + 1)
|
|
} else {
|
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
' <' + M + '.' + (+m + 1) + '.0'
|
|
}
|
|
} else {
|
|
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
' <' + (+M + 1) + '.0.0'
|
|
}
|
|
} else {
|
|
debug('no pr')
|
|
if (M === '0') {
|
|
if (m === '0') {
|
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
' <' + M + '.' + m + '.' + (+p + 1)
|
|
} else {
|
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
' <' + M + '.' + (+m + 1) + '.0'
|
|
}
|
|
} else {
|
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
' <' + (+M + 1) + '.0.0'
|
|
}
|
|
}
|
|
|
|
debug('caret return', ret)
|
|
return ret
|
|
})
|
|
}
|
|
|
|
function replaceXRanges (comp, options) {
|
|
debug('replaceXRanges', comp, options)
|
|
return comp.split(/\s+/).map(function (comp) {
|
|
return replaceXRange(comp, options)
|
|
}).join(' ')
|
|
}
|
|
|
|
function replaceXRange (comp, options) {
|
|
comp = comp.trim()
|
|
var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
|
|
return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
|
|
debug('xRange', comp, ret, gtlt, M, m, p, pr)
|
|
var xM = isX(M)
|
|
var xm = xM || isX(m)
|
|
var xp = xm || isX(p)
|
|
var anyX = xp
|
|
|
|
if (gtlt === '=' && anyX) {
|
|
gtlt = ''
|
|
}
|
|
|
|
// if we're including prereleases in the match, then we need
|
|
// to fix this to -0, the lowest possible prerelease value
|
|
pr = options.includePrerelease ? '-0' : ''
|
|
|
|
if (xM) {
|
|
if (gtlt === '>' || gtlt === '<') {
|
|
// nothing is allowed
|
|
ret = '<0.0.0-0'
|
|
} else {
|
|
// nothing is forbidden
|
|
ret = '*'
|
|
}
|
|
} else if (gtlt && anyX) {
|
|
// we know patch is an x, because we have any x at all.
|
|
// replace X with 0
|
|
if (xm) {
|
|
m = 0
|
|
}
|
|
p = 0
|
|
|
|
if (gtlt === '>') {
|
|
// >1 => >=2.0.0
|
|
// >1.2 => >=1.3.0
|
|
// >1.2.3 => >= 1.2.4
|
|
gtlt = '>='
|
|
if (xm) {
|
|
M = +M + 1
|
|
m = 0
|
|
p = 0
|
|
} else {
|
|
m = +m + 1
|
|
p = 0
|
|
}
|
|
} else if (gtlt === '<=') {
|
|
// <=0.7.x is actually <0.8.0, since any 0.7.x should
|
|
// pass. Similarly, <=7.x is actually <8.0.0, etc.
|
|
gtlt = '<'
|
|
if (xm) {
|
|
M = +M + 1
|
|
} else {
|
|
m = +m + 1
|
|
}
|
|
}
|
|
|
|
ret = gtlt + M + '.' + m + '.' + p + pr
|
|
} else if (xm) {
|
|
ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
|
|
} else if (xp) {
|
|
ret = '>=' + M + '.' + m + '.0' + pr +
|
|
' <' + M + '.' + (+m + 1) + '.0' + pr
|
|
}
|
|
|
|
debug('xRange return', ret)
|
|
|
|
return ret
|
|
})
|
|
}
|
|
|
|
// Because * is AND-ed with everything else in the comparator,
|
|
// and '' means "any version", just remove the *s entirely.
|
|
function replaceStars (comp, options) {
|
|
debug('replaceStars', comp, options)
|
|
// Looseness is ignored here. star is always as loose as it gets!
|
|
return comp.trim().replace(re[t.STAR], '')
|
|
}
|
|
|
|
// This function is passed to string.replace(re[t.HYPHENRANGE])
|
|
// M, m, patch, prerelease, build
|
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
|
function hyphenReplace ($0,
|
|
from, fM, fm, fp, fpr, fb,
|
|
to, tM, tm, tp, tpr, tb) {
|
|
if (isX(fM)) {
|
|
from = ''
|
|
} else if (isX(fm)) {
|
|
from = '>=' + fM + '.0.0'
|
|
} else if (isX(fp)) {
|
|
from = '>=' + fM + '.' + fm + '.0'
|
|
} else {
|
|
from = '>=' + from
|
|
}
|
|
|
|
if (isX(tM)) {
|
|
to = ''
|
|
} else if (isX(tm)) {
|
|
to = '<' + (+tM + 1) + '.0.0'
|
|
} else if (isX(tp)) {
|
|
to = '<' + tM + '.' + (+tm + 1) + '.0'
|
|
} else if (tpr) {
|
|
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
|
|
} else {
|
|
to = '<=' + to
|
|
}
|
|
|
|
return (from + ' ' + to).trim()
|
|
}
|
|
|
|
// if ANY of the sets match ALL of its comparators, then pass
|
|
Range.prototype.test = function (version) {
|
|
if (!version) {
|
|
return false
|
|
}
|
|
|
|
if (typeof version === 'string') {
|
|
try {
|
|
version = new SemVer(version, this.options)
|
|
} catch (er) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < this.set.length; i++) {
|
|
if (testSet(this.set[i], version, this.options)) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
function testSet (set, version, options) {
|
|
for (var i = 0; i < set.length; i++) {
|
|
if (!set[i].test(version)) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if (version.prerelease.length && !options.includePrerelease) {
|
|
// Find the set of versions that are allowed to have prereleases
|
|
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
|
// That should allow `1.2.3-pr.2` to pass.
|
|
// However, `1.2.4-alpha.notready` should NOT be allowed,
|
|
// even though it's within the range set by the comparators.
|
|
for (i = 0; i < set.length; i++) {
|
|
debug(set[i].semver)
|
|
if (set[i].semver === ANY) {
|
|
continue
|
|
}
|
|
|
|
if (set[i].semver.prerelease.length > 0) {
|
|
var allowed = set[i].semver
|
|
if (allowed.major === version.major &&
|
|
allowed.minor === version.minor &&
|
|
allowed.patch === version.patch) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
// Version has a -pre, but it's not one of the ones we like.
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
exports.satisfies = satisfies
|
|
function satisfies (version, range, options) {
|
|
try {
|
|
range = new Range(range, options)
|
|
} catch (er) {
|
|
return false
|
|
}
|
|
return range.test(version)
|
|
}
|
|
|
|
exports.maxSatisfying = maxSatisfying
|
|
function maxSatisfying (versions, range, options) {
|
|
var max = null
|
|
var maxSV = null
|
|
try {
|
|
var rangeObj = new Range(range, options)
|
|
} catch (er) {
|
|
return null
|
|
}
|
|
versions.forEach(function (v) {
|
|
if (rangeObj.test(v)) {
|
|
// satisfies(v, range, options)
|
|
if (!max || maxSV.compare(v) === -1) {
|
|
// compare(max, v, true)
|
|
max = v
|
|
maxSV = new SemVer(max, options)
|
|
}
|
|
}
|
|
})
|
|
return max
|
|
}
|
|
|
|
exports.minSatisfying = minSatisfying
|
|
function minSatisfying (versions, range, options) {
|
|
var min = null
|
|
var minSV = null
|
|
try {
|
|
var rangeObj = new Range(range, options)
|
|
} catch (er) {
|
|
return null
|
|
}
|
|
versions.forEach(function (v) {
|
|
if (rangeObj.test(v)) {
|
|
// satisfies(v, range, options)
|
|
if (!min || minSV.compare(v) === 1) {
|
|
// compare(min, v, true)
|
|
min = v
|
|
minSV = new SemVer(min, options)
|
|
}
|
|
}
|
|
})
|
|
return min
|
|
}
|
|
|
|
exports.minVersion = minVersion
|
|
function minVersion (range, loose) {
|
|
range = new Range(range, loose)
|
|
|
|
var minver = new SemVer('0.0.0')
|
|
if (range.test(minver)) {
|
|
return minver
|
|
}
|
|
|
|
minver = new SemVer('0.0.0-0')
|
|
if (range.test(minver)) {
|
|
return minver
|
|
}
|
|
|
|
minver = null
|
|
for (var i = 0; i < range.set.length; ++i) {
|
|
var comparators = range.set[i]
|
|
|
|
comparators.forEach(function (comparator) {
|
|
// Clone to avoid manipulating the comparator's semver object.
|
|
var compver = new SemVer(comparator.semver.version)
|
|
switch (comparator.operator) {
|
|
case '>':
|
|
if (compver.prerelease.length === 0) {
|
|
compver.patch++
|
|
} else {
|
|
compver.prerelease.push(0)
|
|
}
|
|
compver.raw = compver.format()
|
|
/* fallthrough */
|
|
case '':
|
|
case '>=':
|
|
if (!minver || gt(minver, compver)) {
|
|
minver = compver
|
|
}
|
|
break
|
|
case '<':
|
|
case '<=':
|
|
/* Ignore maximum versions */
|
|
break
|
|
/* istanbul ignore next */
|
|
default:
|
|
throw new Error('Unexpected operation: ' + comparator.operator)
|
|
}
|
|
})
|
|
}
|
|
|
|
if (minver && range.test(minver)) {
|
|
return minver
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
exports.validRange = validRange
|
|
function validRange (range, options) {
|
|
try {
|
|
// Return '*' instead of '' so that truthiness works.
|
|
// This will throw if it's invalid anyway
|
|
return new Range(range, options).range || '*'
|
|
} catch (er) {
|
|
return null
|
|
}
|
|
}
|
|
|
|
// Determine if version is less than all the versions possible in the range
|
|
exports.ltr = ltr
|
|
function ltr (version, range, options) {
|
|
return outside(version, range, '<', options)
|
|
}
|
|
|
|
// Determine if version is greater than all the versions possible in the range.
|
|
exports.gtr = gtr
|
|
function gtr (version, range, options) {
|
|
return outside(version, range, '>', options)
|
|
}
|
|
|
|
exports.outside = outside
|
|
function outside (version, range, hilo, options) {
|
|
version = new SemVer(version, options)
|
|
range = new Range(range, options)
|
|
|
|
var gtfn, ltefn, ltfn, comp, ecomp
|
|
switch (hilo) {
|
|
case '>':
|
|
gtfn = gt
|
|
ltefn = lte
|
|
ltfn = lt
|
|
comp = '>'
|
|
ecomp = '>='
|
|
break
|
|
case '<':
|
|
gtfn = lt
|
|
ltefn = gte
|
|
ltfn = gt
|
|
comp = '<'
|
|
ecomp = '<='
|
|
break
|
|
default:
|
|
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
|
}
|
|
|
|
// If it satisifes the range it is not outside
|
|
if (satisfies(version, range, options)) {
|
|
return false
|
|
}
|
|
|
|
// From now on, variable terms are as if we're in "gtr" mode.
|
|
// but note that everything is flipped for the "ltr" function.
|
|
|
|
for (var i = 0; i < range.set.length; ++i) {
|
|
var comparators = range.set[i]
|
|
|
|
var high = null
|
|
var low = null
|
|
|
|
comparators.forEach(function (comparator) {
|
|
if (comparator.semver === ANY) {
|
|
comparator = new Comparator('>=0.0.0')
|
|
}
|
|
high = high || comparator
|
|
low = low || comparator
|
|
if (gtfn(comparator.semver, high.semver, options)) {
|
|
high = comparator
|
|
} else if (ltfn(comparator.semver, low.semver, options)) {
|
|
low = comparator
|
|
}
|
|
})
|
|
|
|
// If the edge version comparator has a operator then our version
|
|
// isn't outside it
|
|
if (high.operator === comp || high.operator === ecomp) {
|
|
return false
|
|
}
|
|
|
|
// If the lowest version comparator has an operator and our version
|
|
// is less than it then it isn't higher than the range
|
|
if ((!low.operator || low.operator === comp) &&
|
|
ltefn(version, low.semver)) {
|
|
return false
|
|
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
exports.prerelease = prerelease
|
|
function prerelease (version, options) {
|
|
var parsed = parse(version, options)
|
|
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
|
}
|
|
|
|
exports.intersects = intersects
|
|
function intersects (r1, r2, options) {
|
|
r1 = new Range(r1, options)
|
|
r2 = new Range(r2, options)
|
|
return r1.intersects(r2)
|
|
}
|
|
|
|
exports.coerce = coerce
|
|
function coerce (version, options) {
|
|
if (version instanceof SemVer) {
|
|
return version
|
|
}
|
|
|
|
if (typeof version === 'number') {
|
|
version = String(version)
|
|
}
|
|
|
|
if (typeof version !== 'string') {
|
|
return null
|
|
}
|
|
|
|
options = options || {}
|
|
|
|
var match = null
|
|
if (!options.rtl) {
|
|
match = version.match(re[t.COERCE])
|
|
} else {
|
|
// Find the right-most coercible string that does not share
|
|
// a terminus with a more left-ward coercible string.
|
|
// Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
|
|
//
|
|
// Walk through the string checking with a /g regexp
|
|
// Manually set the index so as to pick up overlapping matches.
|
|
// Stop when we get a match that ends at the string end, since no
|
|
// coercible string can be more right-ward without the same terminus.
|
|
var next
|
|
while ((next = re[t.COERCERTL].exec(version)) &&
|
|
(!match || match.index + match[0].length !== version.length)
|
|
) {
|
|
if (!match ||
|
|
next.index + next[0].length !== match.index + match[0].length) {
|
|
match = next
|
|
}
|
|
re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
|
|
}
|
|
// leave it in a clean state
|
|
re[t.COERCERTL].lastIndex = -1
|
|
}
|
|
|
|
if (match === null) {
|
|
return null
|
|
}
|
|
|
|
return parse(match[2] +
|
|
'.' + (match[3] || '0') +
|
|
'.' + (match[4] || '0'), options)
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 281:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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 });
|
|
const internal_globber_1 = __webpack_require__(297);
|
|
/**
|
|
* Constructs a globber
|
|
*
|
|
* @param patterns Patterns separated by newlines
|
|
* @param options Glob options
|
|
*/
|
|
function create(patterns, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield internal_globber_1.DefaultGlobber.create(patterns, options);
|
|
});
|
|
}
|
|
exports.create = create;
|
|
//# sourceMappingURL=glob.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 293:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("buffer");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 297:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __asyncValues = (this && this.__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 = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
var __asyncGenerator = (this && this.__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 = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
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]); }
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __webpack_require__(470);
|
|
const fs = __webpack_require__(747);
|
|
const globOptionsHelper = __webpack_require__(601);
|
|
const path = __webpack_require__(622);
|
|
const patternHelper = __webpack_require__(597);
|
|
const internal_match_kind_1 = __webpack_require__(327);
|
|
const internal_pattern_1 = __webpack_require__(923);
|
|
const internal_search_state_1 = __webpack_require__(728);
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
class DefaultGlobber {
|
|
constructor(options) {
|
|
this.patterns = [];
|
|
this.searchPaths = [];
|
|
this.options = globOptionsHelper.getOptions(options);
|
|
}
|
|
getSearchPaths() {
|
|
// Return a copy
|
|
return this.searchPaths.slice();
|
|
}
|
|
glob() {
|
|
var e_1, _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const result = [];
|
|
try {
|
|
for (var _b = __asyncValues(this.globGenerator()), _c; _c = yield _b.next(), !_c.done;) {
|
|
const itemPath = _c.value;
|
|
result.push(itemPath);
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
globGenerator() {
|
|
return __asyncGenerator(this, arguments, function* globGenerator_1() {
|
|
// Fill in defaults options
|
|
const options = globOptionsHelper.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 internal_pattern_1.Pattern(pattern.negate, pattern.segments.concat('**')));
|
|
}
|
|
}
|
|
// Push the search paths
|
|
const stack = [];
|
|
for (const searchPath of patternHelper.getSearchPaths(patterns)) {
|
|
core.debug(`Search path '${searchPath}'`);
|
|
// Exists?
|
|
try {
|
|
// Intentionally using lstat. Detection for broken symlink
|
|
// will be performed later (if following symlinks).
|
|
yield __await(fs.promises.lstat(searchPath));
|
|
}
|
|
catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
continue;
|
|
}
|
|
throw err;
|
|
}
|
|
stack.unshift(new internal_search_state_1.SearchState(searchPath, 1));
|
|
}
|
|
// Search
|
|
const traversalChain = []; // used to detect cycles
|
|
while (stack.length) {
|
|
// Pop
|
|
const item = stack.pop();
|
|
// Match?
|
|
const match = patternHelper.match(patterns, item.path);
|
|
const partialMatch = !!match || patternHelper.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;
|
|
}
|
|
// Directory
|
|
if (stats.isDirectory()) {
|
|
// Matched
|
|
if (match & internal_match_kind_1.MatchKind.Directory) {
|
|
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(fs.promises.readdir(item.path))).map(x => new internal_search_state_1.SearchState(path.join(item.path, x), childLevel));
|
|
stack.push(...childItems.reverse());
|
|
}
|
|
// File
|
|
else if (match & internal_match_kind_1.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 (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 internal_pattern_1.Pattern(line));
|
|
}
|
|
}
|
|
result.searchPaths.push(...patternHelper.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 fs.promises.stat(item.path);
|
|
}
|
|
catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
if (options.omitBrokenSymbolicLinks) {
|
|
core.debug(`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 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 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(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`);
|
|
return undefined;
|
|
}
|
|
// Update the traversal chain
|
|
traversalChain.push(realPath);
|
|
}
|
|
return stats;
|
|
});
|
|
}
|
|
}
|
|
exports.DefaultGlobber = DefaultGlobber;
|
|
//# sourceMappingURL=internal-globber.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 298:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(241));
|
|
|
|
var _md = _interopRequireDefault(__webpack_require__(245));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const v3 = (0, _v.default)('v3', 0x30, _md.default);
|
|
var _default = v3;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 304:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("string_decoder");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 306:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var concatMap = __webpack_require__(896);
|
|
var balanced = __webpack_require__(621);
|
|
|
|
module.exports = expandTop;
|
|
|
|
var escSlash = '\0SLASH'+Math.random()+'\0';
|
|
var escOpen = '\0OPEN'+Math.random()+'\0';
|
|
var escClose = '\0CLOSE'+Math.random()+'\0';
|
|
var escComma = '\0COMMA'+Math.random()+'\0';
|
|
var escPeriod = '\0PERIOD'+Math.random()+'\0';
|
|
|
|
function numeric(str) {
|
|
return parseInt(str, 10) == str
|
|
? parseInt(str, 10)
|
|
: str.charCodeAt(0);
|
|
}
|
|
|
|
function escapeBraces(str) {
|
|
return str.split('\\\\').join(escSlash)
|
|
.split('\\{').join(escOpen)
|
|
.split('\\}').join(escClose)
|
|
.split('\\,').join(escComma)
|
|
.split('\\.').join(escPeriod);
|
|
}
|
|
|
|
function unescapeBraces(str) {
|
|
return str.split(escSlash).join('\\')
|
|
.split(escOpen).join('{')
|
|
.split(escClose).join('}')
|
|
.split(escComma).join(',')
|
|
.split(escPeriod).join('.');
|
|
}
|
|
|
|
|
|
// 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 [''];
|
|
|
|
var parts = [];
|
|
var m = balanced('{', '}', str);
|
|
|
|
if (!m)
|
|
return str.split(',');
|
|
|
|
var pre = m.pre;
|
|
var body = m.body;
|
|
var post = m.post;
|
|
var p = pre.split(',');
|
|
|
|
p[p.length-1] += '{' + body + '}';
|
|
var 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 expandTop(str) {
|
|
if (!str)
|
|
return [];
|
|
|
|
// 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.substr(0, 2) === '{}') {
|
|
str = '\\{\\}' + str.substr(2);
|
|
}
|
|
|
|
return expand(escapeBraces(str), true).map(unescapeBraces);
|
|
}
|
|
|
|
function identity(e) {
|
|
return e;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
function expand(str, isTop) {
|
|
var expansions = [];
|
|
|
|
var m = balanced('{', '}', str);
|
|
if (!m || /\$$/.test(m.pre)) return [str];
|
|
|
|
var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
|
|
var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
|
|
var isSequence = isNumericSequence || isAlphaSequence;
|
|
var isOptions = m.body.indexOf(',') >= 0;
|
|
if (!isSequence && !isOptions) {
|
|
// {a},b}
|
|
if (m.post.match(/,.*\}/)) {
|
|
str = m.pre + '{' + m.body + escClose + m.post;
|
|
return expand(str);
|
|
}
|
|
return [str];
|
|
}
|
|
|
|
var n;
|
|
if (isSequence) {
|
|
n = m.body.split(/\.\./);
|
|
} else {
|
|
n = parseCommaParts(m.body);
|
|
if (n.length === 1) {
|
|
// x{{a,b}}y ==> x{a}y x{b}y
|
|
n = expand(n[0], false).map(embrace);
|
|
if (n.length === 1) {
|
|
var post = m.post.length
|
|
? expand(m.post, false)
|
|
: [''];
|
|
return post.map(function(p) {
|
|
return m.pre + n[0] + p;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// at this point, n is the parts, and we know it's not a comma set
|
|
// with a single entry.
|
|
|
|
// no need to expand pre, since it is guaranteed to be free of brace-sets
|
|
var pre = m.pre;
|
|
var post = m.post.length
|
|
? expand(m.post, false)
|
|
: [''];
|
|
|
|
var N;
|
|
|
|
if (isSequence) {
|
|
var x = numeric(n[0]);
|
|
var y = numeric(n[1]);
|
|
var width = Math.max(n[0].length, n[1].length)
|
|
var incr = n.length == 3
|
|
? Math.abs(numeric(n[2]))
|
|
: 1;
|
|
var test = lte;
|
|
var reverse = y < x;
|
|
if (reverse) {
|
|
incr *= -1;
|
|
test = gte;
|
|
}
|
|
var pad = n.some(isPadded);
|
|
|
|
N = [];
|
|
|
|
for (var i = x; test(i, y); i += incr) {
|
|
var c;
|
|
if (isAlphaSequence) {
|
|
c = String.fromCharCode(i);
|
|
if (c === '\\')
|
|
c = '';
|
|
} else {
|
|
c = String(i);
|
|
if (pad) {
|
|
var need = width - c.length;
|
|
if (need > 0) {
|
|
var z = new Array(need + 1).join('0');
|
|
if (i < 0)
|
|
c = '-' + z + c.slice(1);
|
|
else
|
|
c = z + c;
|
|
}
|
|
}
|
|
}
|
|
N.push(c);
|
|
}
|
|
} else {
|
|
N = concatMap(n, function(el) { return expand(el, false) });
|
|
}
|
|
|
|
for (var j = 0; j < N.length; j++) {
|
|
for (var k = 0; k < post.length; k++) {
|
|
var expansion = pre + N[j] + post[k];
|
|
if (!isTop || isSequence || expansion)
|
|
expansions.push(expansion);
|
|
}
|
|
}
|
|
|
|
return expansions;
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 312:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLDOMImplementation, XMLDocument, XMLDocumentCB, XMLStreamWriter, XMLStringWriter, assign, isFunction, ref;
|
|
|
|
ref = __webpack_require__(582), assign = ref.assign, isFunction = ref.isFunction;
|
|
|
|
XMLDOMImplementation = __webpack_require__(515);
|
|
|
|
XMLDocument = __webpack_require__(559);
|
|
|
|
XMLDocumentCB = __webpack_require__(768);
|
|
|
|
XMLStringWriter = __webpack_require__(347);
|
|
|
|
XMLStreamWriter = __webpack_require__(458);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
WriterState = __webpack_require__(541);
|
|
|
|
module.exports.create = function(name, xmldec, doctype, options) {
|
|
var doc, root;
|
|
if (name == null) {
|
|
throw new Error("Root element needs a name.");
|
|
}
|
|
options = assign({}, xmldec, doctype, options);
|
|
doc = new XMLDocument(options);
|
|
root = doc.element(name);
|
|
if (!options.headless) {
|
|
doc.declaration(options);
|
|
if ((options.pubID != null) || (options.sysID != null)) {
|
|
doc.dtd(options);
|
|
}
|
|
}
|
|
return root;
|
|
};
|
|
|
|
module.exports.begin = function(options, onData, onEnd) {
|
|
var ref1;
|
|
if (isFunction(options)) {
|
|
ref1 = [options, onData], onData = ref1[0], onEnd = ref1[1];
|
|
options = {};
|
|
}
|
|
if (onData) {
|
|
return new XMLDocumentCB(options, onData, onEnd);
|
|
} else {
|
|
return new XMLDocument(options);
|
|
}
|
|
};
|
|
|
|
module.exports.stringWriter = function(options) {
|
|
return new XMLStringWriter(options);
|
|
};
|
|
|
|
module.exports.streamWriter = function(stream, options) {
|
|
return new XMLStreamWriter(stream, options);
|
|
};
|
|
|
|
module.exports.implementation = new XMLDOMImplementation();
|
|
|
|
module.exports.nodeType = NodeType;
|
|
|
|
module.exports.writerState = WriterState;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 327:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* 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 = exports.MatchKind || (exports.MatchKind = {}));
|
|
//# sourceMappingURL=internal-match-kind.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 332:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2015, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
const { fromCallback } = __webpack_require__(676);
|
|
const Store = __webpack_require__(338).Store;
|
|
const permuteDomain = __webpack_require__(89).permuteDomain;
|
|
const pathMatch = __webpack_require__(348).pathMatch;
|
|
const util = __webpack_require__(669);
|
|
|
|
class MemoryCookieStore extends Store {
|
|
constructor() {
|
|
super();
|
|
this.synchronous = true;
|
|
this.idx = {};
|
|
if (util.inspect.custom) {
|
|
this[util.inspect.custom] = this.inspect;
|
|
}
|
|
}
|
|
|
|
inspect() {
|
|
return `{ idx: ${util.inspect(this.idx, false, 2)} }`;
|
|
}
|
|
|
|
findCookie(domain, path, key, cb) {
|
|
if (!this.idx[domain]) {
|
|
return cb(null, undefined);
|
|
}
|
|
if (!this.idx[domain][path]) {
|
|
return cb(null, undefined);
|
|
}
|
|
return cb(null, this.idx[domain][path][key] || null);
|
|
}
|
|
findCookies(domain, path, allowSpecialUseDomain, cb) {
|
|
const results = [];
|
|
if (typeof allowSpecialUseDomain === "function") {
|
|
cb = allowSpecialUseDomain;
|
|
allowSpecialUseDomain = false;
|
|
}
|
|
if (!domain) {
|
|
return cb(null, []);
|
|
}
|
|
|
|
let pathMatcher;
|
|
if (!path) {
|
|
// null means "all paths"
|
|
pathMatcher = function matchAll(domainIndex) {
|
|
for (const curPath in domainIndex) {
|
|
const pathIndex = domainIndex[curPath];
|
|
for (const key in pathIndex) {
|
|
results.push(pathIndex[key]);
|
|
}
|
|
}
|
|
};
|
|
} else {
|
|
pathMatcher = function matchRFC(domainIndex) {
|
|
//NOTE: we should use path-match algorithm from S5.1.4 here
|
|
//(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299)
|
|
Object.keys(domainIndex).forEach(cookiePath => {
|
|
if (pathMatch(path, cookiePath)) {
|
|
const pathIndex = domainIndex[cookiePath];
|
|
for (const key in pathIndex) {
|
|
results.push(pathIndex[key]);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
}
|
|
|
|
const domains = permuteDomain(domain, allowSpecialUseDomain) || [domain];
|
|
const idx = this.idx;
|
|
domains.forEach(curDomain => {
|
|
const domainIndex = idx[curDomain];
|
|
if (!domainIndex) {
|
|
return;
|
|
}
|
|
pathMatcher(domainIndex);
|
|
});
|
|
|
|
cb(null, results);
|
|
}
|
|
|
|
putCookie(cookie, cb) {
|
|
if (!this.idx[cookie.domain]) {
|
|
this.idx[cookie.domain] = {};
|
|
}
|
|
if (!this.idx[cookie.domain][cookie.path]) {
|
|
this.idx[cookie.domain][cookie.path] = {};
|
|
}
|
|
this.idx[cookie.domain][cookie.path][cookie.key] = cookie;
|
|
cb(null);
|
|
}
|
|
updateCookie(oldCookie, newCookie, cb) {
|
|
// updateCookie() may avoid updating cookies that are identical. For example,
|
|
// lastAccessed may not be important to some stores and an equality
|
|
// comparison could exclude that field.
|
|
this.putCookie(newCookie, cb);
|
|
}
|
|
removeCookie(domain, path, key, cb) {
|
|
if (
|
|
this.idx[domain] &&
|
|
this.idx[domain][path] &&
|
|
this.idx[domain][path][key]
|
|
) {
|
|
delete this.idx[domain][path][key];
|
|
}
|
|
cb(null);
|
|
}
|
|
removeCookies(domain, path, cb) {
|
|
if (this.idx[domain]) {
|
|
if (path) {
|
|
delete this.idx[domain][path];
|
|
} else {
|
|
delete this.idx[domain];
|
|
}
|
|
}
|
|
return cb(null);
|
|
}
|
|
removeAllCookies(cb) {
|
|
this.idx = {};
|
|
return cb(null);
|
|
}
|
|
getAllCookies(cb) {
|
|
const cookies = [];
|
|
const idx = this.idx;
|
|
|
|
const domains = Object.keys(idx);
|
|
domains.forEach(domain => {
|
|
const paths = Object.keys(idx[domain]);
|
|
paths.forEach(path => {
|
|
const keys = Object.keys(idx[domain][path]);
|
|
keys.forEach(key => {
|
|
if (key !== null) {
|
|
cookies.push(idx[domain][path][key]);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
// Sort by creationIndex so deserializing retains the creation order.
|
|
// When implementing your own store, this SHOULD retain the order too
|
|
cookies.sort((a, b) => {
|
|
return (a.creationIndex || 0) - (b.creationIndex || 0);
|
|
});
|
|
|
|
cb(null, cookies);
|
|
}
|
|
}
|
|
|
|
[
|
|
"findCookie",
|
|
"findCookies",
|
|
"putCookie",
|
|
"updateCookie",
|
|
"removeCookie",
|
|
"removeCookies",
|
|
"removeAllCookies",
|
|
"getAllCookies"
|
|
].forEach(name => {
|
|
MemoryCookieStore[name] = fromCallback(MemoryCookieStore.prototype[name]);
|
|
});
|
|
|
|
exports.MemoryCookieStore = MemoryCookieStore;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 334:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
module.exports =
|
|
{
|
|
parallel : __webpack_require__(424),
|
|
serial : __webpack_require__(91),
|
|
serialOrdered : __webpack_require__(892)
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 338:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2015, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
/*jshint unused:false */
|
|
|
|
class Store {
|
|
constructor() {
|
|
this.synchronous = false;
|
|
}
|
|
|
|
findCookie(domain, path, key, cb) {
|
|
throw new Error("findCookie is not implemented");
|
|
}
|
|
|
|
findCookies(domain, path, allowSpecialUseDomain, cb) {
|
|
throw new Error("findCookies is not implemented");
|
|
}
|
|
|
|
putCookie(cookie, cb) {
|
|
throw new Error("putCookie is not implemented");
|
|
}
|
|
|
|
updateCookie(oldCookie, newCookie, cb) {
|
|
// recommended default implementation:
|
|
// return this.putCookie(newCookie, cb);
|
|
throw new Error("updateCookie is not implemented");
|
|
}
|
|
|
|
removeCookie(domain, path, key, cb) {
|
|
throw new Error("removeCookie is not implemented");
|
|
}
|
|
|
|
removeCookies(domain, path, cb) {
|
|
throw new Error("removeCookies is not implemented");
|
|
}
|
|
|
|
removeAllCookies(cb) {
|
|
throw new Error("removeAllCookies is not implemented");
|
|
}
|
|
|
|
getAllCookies(cb) {
|
|
throw new Error(
|
|
"getAllCookies is not implemented (therefore jar cannot be serialized)"
|
|
);
|
|
}
|
|
}
|
|
|
|
exports.Store = Store;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 343:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("timers");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 347:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLStringWriter, XMLWriterBase,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLWriterBase = __webpack_require__(423);
|
|
|
|
module.exports = XMLStringWriter = (function(superClass) {
|
|
extend(XMLStringWriter, superClass);
|
|
|
|
function XMLStringWriter(options) {
|
|
XMLStringWriter.__super__.constructor.call(this, options);
|
|
}
|
|
|
|
XMLStringWriter.prototype.document = function(doc, options) {
|
|
var child, i, len, r, ref;
|
|
options = this.filterOptions(options);
|
|
r = '';
|
|
ref = doc.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
r += this.writeChildNode(child, options, 0);
|
|
}
|
|
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
|
|
r = r.slice(0, -options.newline.length);
|
|
}
|
|
return r;
|
|
};
|
|
|
|
return XMLStringWriter;
|
|
|
|
})(XMLWriterBase);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 348:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2015, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
/*
|
|
* "A request-path path-matches a given cookie-path if at least one of the
|
|
* following conditions holds:"
|
|
*/
|
|
function pathMatch(reqPath, cookiePath) {
|
|
// "o The cookie-path and the request-path are identical."
|
|
if (cookiePath === reqPath) {
|
|
return true;
|
|
}
|
|
|
|
const idx = reqPath.indexOf(cookiePath);
|
|
if (idx === 0) {
|
|
// "o The cookie-path is a prefix of the request-path, and the last
|
|
// character of the cookie-path is %x2F ("/")."
|
|
if (cookiePath.substr(-1) === "/") {
|
|
return true;
|
|
}
|
|
|
|
// " o The cookie-path is a prefix of the request-path, and the first
|
|
// character of the request-path that is not included in the cookie- path
|
|
// is a %x2F ("/") character."
|
|
if (reqPath.substr(cookiePath.length, 1) === "/") {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
exports.pathMatch = pathMatch;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 350:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var prefixMatch;
|
|
|
|
prefixMatch = new RegExp(/(?!xmlns)^.*:/);
|
|
|
|
exports.normalize = function(str) {
|
|
return str.toLowerCase();
|
|
};
|
|
|
|
exports.firstCharLowerCase = function(str) {
|
|
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
};
|
|
|
|
exports.stripPrefix = function(str) {
|
|
return str.replace(prefixMatch, '');
|
|
};
|
|
|
|
exports.parseNumbers = function(str) {
|
|
if (!isNaN(str)) {
|
|
str = str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);
|
|
}
|
|
return str;
|
|
};
|
|
|
|
exports.parseBooleans = function(str) {
|
|
if (/^(?:true|false)$/i.test(str)) {
|
|
str = str.toLowerCase() === 'true';
|
|
}
|
|
return str;
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 357:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("assert");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 373:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var coreHttp = __webpack_require__(999);
|
|
var tslib = __webpack_require__(422);
|
|
var api = __webpack_require__(440);
|
|
var logger$1 = __webpack_require__(928);
|
|
var abortController = __webpack_require__(106);
|
|
var os = __webpack_require__(87);
|
|
var stream = __webpack_require__(794);
|
|
var fs = __webpack_require__(747);
|
|
var util = __webpack_require__(669);
|
|
var crypto = __webpack_require__(417);
|
|
var events = __webpack_require__(614);
|
|
var coreTracing = __webpack_require__(263);
|
|
var coreLro = __webpack_require__(889);
|
|
__webpack_require__(242);
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
var KeyInfo = {
|
|
serializedName: "KeyInfo",
|
|
type: {
|
|
name: "Composite",
|
|
className: "KeyInfo",
|
|
modelProperties: {
|
|
startsOn: {
|
|
xmlName: "Start",
|
|
required: true,
|
|
serializedName: "Start",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
xmlName: "Expiry",
|
|
required: true,
|
|
serializedName: "Expiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var UserDelegationKey = {
|
|
serializedName: "UserDelegationKey",
|
|
type: {
|
|
name: "Composite",
|
|
className: "UserDelegationKey",
|
|
modelProperties: {
|
|
signedObjectId: {
|
|
xmlName: "SignedOid",
|
|
required: true,
|
|
serializedName: "SignedOid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedTenantId: {
|
|
xmlName: "SignedTid",
|
|
required: true,
|
|
serializedName: "SignedTid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedStartsOn: {
|
|
xmlName: "SignedStart",
|
|
required: true,
|
|
serializedName: "SignedStart",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedExpiresOn: {
|
|
xmlName: "SignedExpiry",
|
|
required: true,
|
|
serializedName: "SignedExpiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedService: {
|
|
xmlName: "SignedService",
|
|
required: true,
|
|
serializedName: "SignedService",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedVersion: {
|
|
xmlName: "SignedVersion",
|
|
required: true,
|
|
serializedName: "SignedVersion",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
value: {
|
|
xmlName: "Value",
|
|
required: true,
|
|
serializedName: "Value",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var StorageError = {
|
|
serializedName: "StorageError",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StorageError",
|
|
modelProperties: {
|
|
message: {
|
|
xmlName: "Message",
|
|
serializedName: "Message",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var DataLakeStorageErrorError = {
|
|
serializedName: "DataLakeStorageError_error",
|
|
type: {
|
|
name: "Composite",
|
|
className: "DataLakeStorageErrorError",
|
|
modelProperties: {
|
|
code: {
|
|
xmlName: "Code",
|
|
serializedName: "Code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
message: {
|
|
xmlName: "Message",
|
|
serializedName: "Message",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var DataLakeStorageError = {
|
|
serializedName: "DataLakeStorageError",
|
|
type: {
|
|
name: "Composite",
|
|
className: "DataLakeStorageError",
|
|
modelProperties: {
|
|
error: {
|
|
xmlName: "error",
|
|
serializedName: "error",
|
|
type: {
|
|
name: "Composite",
|
|
className: "DataLakeStorageErrorError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var AccessPolicy = {
|
|
serializedName: "AccessPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AccessPolicy",
|
|
modelProperties: {
|
|
startsOn: {
|
|
xmlName: "Start",
|
|
serializedName: "Start",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
xmlName: "Expiry",
|
|
serializedName: "Expiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
permissions: {
|
|
xmlName: "Permission",
|
|
serializedName: "Permission",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobProperties = {
|
|
xmlName: "Properties",
|
|
serializedName: "BlobProperties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobProperties",
|
|
modelProperties: {
|
|
createdOn: {
|
|
xmlName: "Creation-Time",
|
|
serializedName: "Creation-Time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
lastModified: {
|
|
xmlName: "Last-Modified",
|
|
required: true,
|
|
serializedName: "Last-Modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
xmlName: "Etag",
|
|
required: true,
|
|
serializedName: "Etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLength: {
|
|
xmlName: "Content-Length",
|
|
serializedName: "Content-Length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
xmlName: "Content-Type",
|
|
serializedName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
xmlName: "Content-Encoding",
|
|
serializedName: "Content-Encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
xmlName: "Content-Language",
|
|
serializedName: "Content-Language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
xmlName: "Content-MD5",
|
|
serializedName: "Content-MD5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
xmlName: "Content-Disposition",
|
|
serializedName: "Content-Disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
xmlName: "Cache-Control",
|
|
serializedName: "Cache-Control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
blobType: {
|
|
xmlName: "BlobType",
|
|
serializedName: "BlobType",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"BlockBlob",
|
|
"PageBlob",
|
|
"AppendBlob"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
xmlName: "LeaseStatus",
|
|
serializedName: "LeaseStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"locked",
|
|
"unlocked"
|
|
]
|
|
}
|
|
},
|
|
leaseState: {
|
|
xmlName: "LeaseState",
|
|
serializedName: "LeaseState",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
xmlName: "LeaseDuration",
|
|
serializedName: "LeaseDuration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"infinite",
|
|
"fixed"
|
|
]
|
|
}
|
|
},
|
|
copyId: {
|
|
xmlName: "CopyId",
|
|
serializedName: "CopyId",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
xmlName: "CopyStatus",
|
|
serializedName: "CopyStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"pending",
|
|
"success",
|
|
"aborted",
|
|
"failed"
|
|
]
|
|
}
|
|
},
|
|
copySource: {
|
|
xmlName: "CopySource",
|
|
serializedName: "CopySource",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
xmlName: "CopyProgress",
|
|
serializedName: "CopyProgress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
xmlName: "CopyCompletionTime",
|
|
serializedName: "CopyCompletionTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
xmlName: "CopyStatusDescription",
|
|
serializedName: "CopyStatusDescription",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
serverEncrypted: {
|
|
xmlName: "ServerEncrypted",
|
|
serializedName: "ServerEncrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
incrementalCopy: {
|
|
xmlName: "IncrementalCopy",
|
|
serializedName: "IncrementalCopy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
destinationSnapshot: {
|
|
xmlName: "DestinationSnapshot",
|
|
serializedName: "DestinationSnapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deletedOn: {
|
|
xmlName: "DeletedTime",
|
|
serializedName: "DeletedTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
remainingRetentionDays: {
|
|
xmlName: "RemainingRetentionDays",
|
|
serializedName: "RemainingRetentionDays",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
accessTier: {
|
|
xmlName: "AccessTier",
|
|
serializedName: "AccessTier",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierInferred: {
|
|
xmlName: "AccessTierInferred",
|
|
serializedName: "AccessTierInferred",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
archiveStatus: {
|
|
xmlName: "ArchiveStatus",
|
|
serializedName: "ArchiveStatus",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
customerProvidedKeySha256: {
|
|
xmlName: "CustomerProvidedKeySha256",
|
|
serializedName: "CustomerProvidedKeySha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
xmlName: "EncryptionScope",
|
|
serializedName: "EncryptionScope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierChangedOn: {
|
|
xmlName: "AccessTierChangeTime",
|
|
serializedName: "AccessTierChangeTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobItem = {
|
|
xmlName: "Blob",
|
|
serializedName: "BlobItem",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItem",
|
|
modelProperties: {
|
|
name: {
|
|
xmlName: "Name",
|
|
required: true,
|
|
serializedName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleted: {
|
|
xmlName: "Deleted",
|
|
required: true,
|
|
serializedName: "Deleted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
snapshot: {
|
|
xmlName: "Snapshot",
|
|
required: true,
|
|
serializedName: "Snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
properties: {
|
|
xmlName: "Properties",
|
|
required: true,
|
|
serializedName: "Properties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobProperties"
|
|
}
|
|
},
|
|
metadata: {
|
|
xmlName: "Metadata",
|
|
serializedName: "Metadata",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobFlatListSegment = {
|
|
xmlName: "Blobs",
|
|
serializedName: "BlobFlatListSegment",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobFlatListSegment",
|
|
modelProperties: {
|
|
blobItems: {
|
|
xmlName: "BlobItems",
|
|
xmlElementName: "Blob",
|
|
required: true,
|
|
serializedName: "BlobItems",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItem"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ListBlobsFlatSegmentResponse = {
|
|
xmlName: "EnumerationResults",
|
|
serializedName: "ListBlobsFlatSegmentResponse",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListBlobsFlatSegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
xmlIsAttribute: true,
|
|
xmlName: "ServiceEndpoint",
|
|
required: true,
|
|
serializedName: "ServiceEndpoint",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
containerName: {
|
|
xmlIsAttribute: true,
|
|
xmlName: "ContainerName",
|
|
required: true,
|
|
serializedName: "ContainerName",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
xmlName: "Prefix",
|
|
serializedName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
xmlName: "Marker",
|
|
serializedName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
xmlName: "MaxResults",
|
|
serializedName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
segment: {
|
|
xmlName: "Blobs",
|
|
required: true,
|
|
serializedName: "Segment",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobFlatListSegment"
|
|
}
|
|
},
|
|
continuationToken: {
|
|
xmlName: "NextMarker",
|
|
serializedName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobPrefix = {
|
|
serializedName: "BlobPrefix",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPrefix",
|
|
modelProperties: {
|
|
name: {
|
|
xmlName: "Name",
|
|
required: true,
|
|
serializedName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobHierarchyListSegment = {
|
|
xmlName: "Blobs",
|
|
serializedName: "BlobHierarchyListSegment",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobHierarchyListSegment",
|
|
modelProperties: {
|
|
blobPrefixes: {
|
|
xmlName: "BlobPrefixes",
|
|
xmlElementName: "BlobPrefix",
|
|
serializedName: "BlobPrefixes",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPrefix"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
blobItems: {
|
|
xmlName: "BlobItems",
|
|
xmlElementName: "Blob",
|
|
required: true,
|
|
serializedName: "BlobItems",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItem"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ListBlobsHierarchySegmentResponse = {
|
|
xmlName: "EnumerationResults",
|
|
serializedName: "ListBlobsHierarchySegmentResponse",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListBlobsHierarchySegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
xmlIsAttribute: true,
|
|
xmlName: "ServiceEndpoint",
|
|
required: true,
|
|
serializedName: "ServiceEndpoint",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
containerName: {
|
|
xmlIsAttribute: true,
|
|
xmlName: "ContainerName",
|
|
required: true,
|
|
serializedName: "ContainerName",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
xmlName: "Prefix",
|
|
serializedName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
xmlName: "Marker",
|
|
serializedName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
xmlName: "MaxResults",
|
|
serializedName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
delimiter: {
|
|
xmlName: "Delimiter",
|
|
serializedName: "Delimiter",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
segment: {
|
|
xmlName: "Blobs",
|
|
required: true,
|
|
serializedName: "Segment",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobHierarchyListSegment"
|
|
}
|
|
},
|
|
continuationToken: {
|
|
xmlName: "NextMarker",
|
|
serializedName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var Block = {
|
|
serializedName: "Block",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block",
|
|
modelProperties: {
|
|
name: {
|
|
xmlName: "Name",
|
|
required: true,
|
|
serializedName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
size: {
|
|
xmlName: "Size",
|
|
required: true,
|
|
serializedName: "Size",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockList = {
|
|
serializedName: "BlockList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockList",
|
|
modelProperties: {
|
|
committedBlocks: {
|
|
xmlIsWrapped: true,
|
|
xmlName: "CommittedBlocks",
|
|
xmlElementName: "Block",
|
|
serializedName: "CommittedBlocks",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
uncommittedBlocks: {
|
|
xmlIsWrapped: true,
|
|
xmlName: "UncommittedBlocks",
|
|
xmlElementName: "Block",
|
|
serializedName: "UncommittedBlocks",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockLookupList = {
|
|
xmlName: "BlockList",
|
|
serializedName: "BlockLookupList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockLookupList",
|
|
modelProperties: {
|
|
committed: {
|
|
xmlName: "Committed",
|
|
xmlElementName: "Committed",
|
|
serializedName: "Committed",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
uncommitted: {
|
|
xmlName: "Uncommitted",
|
|
xmlElementName: "Uncommitted",
|
|
serializedName: "Uncommitted",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
latest: {
|
|
xmlName: "Latest",
|
|
xmlElementName: "Latest",
|
|
serializedName: "Latest",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerProperties = {
|
|
serializedName: "ContainerProperties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerProperties",
|
|
modelProperties: {
|
|
lastModified: {
|
|
xmlName: "Last-Modified",
|
|
required: true,
|
|
serializedName: "Last-Modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
xmlName: "Etag",
|
|
required: true,
|
|
serializedName: "Etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
xmlName: "LeaseStatus",
|
|
serializedName: "LeaseStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"locked",
|
|
"unlocked"
|
|
]
|
|
}
|
|
},
|
|
leaseState: {
|
|
xmlName: "LeaseState",
|
|
serializedName: "LeaseState",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
xmlName: "LeaseDuration",
|
|
serializedName: "LeaseDuration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"infinite",
|
|
"fixed"
|
|
]
|
|
}
|
|
},
|
|
publicAccess: {
|
|
xmlName: "PublicAccess",
|
|
serializedName: "PublicAccess",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
hasImmutabilityPolicy: {
|
|
xmlName: "HasImmutabilityPolicy",
|
|
serializedName: "HasImmutabilityPolicy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
hasLegalHold: {
|
|
xmlName: "HasLegalHold",
|
|
serializedName: "HasLegalHold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
defaultEncryptionScope: {
|
|
xmlName: "DefaultEncryptionScope",
|
|
serializedName: "DefaultEncryptionScope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
preventEncryptionScopeOverride: {
|
|
xmlName: "DenyEncryptionScopeOverride",
|
|
serializedName: "DenyEncryptionScopeOverride",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerItem = {
|
|
xmlName: "Container",
|
|
serializedName: "ContainerItem",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerItem",
|
|
modelProperties: {
|
|
name: {
|
|
xmlName: "Name",
|
|
required: true,
|
|
serializedName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
properties: {
|
|
xmlName: "Properties",
|
|
required: true,
|
|
serializedName: "Properties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerProperties"
|
|
}
|
|
},
|
|
metadata: {
|
|
xmlName: "Metadata",
|
|
serializedName: "Metadata",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ListContainersSegmentResponse = {
|
|
xmlName: "EnumerationResults",
|
|
serializedName: "ListContainersSegmentResponse",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListContainersSegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
xmlIsAttribute: true,
|
|
xmlName: "ServiceEndpoint",
|
|
required: true,
|
|
serializedName: "ServiceEndpoint",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
xmlName: "Prefix",
|
|
serializedName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
xmlName: "Marker",
|
|
serializedName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
xmlName: "MaxResults",
|
|
serializedName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
containerItems: {
|
|
xmlIsWrapped: true,
|
|
xmlName: "Containers",
|
|
xmlElementName: "Container",
|
|
required: true,
|
|
serializedName: "ContainerItems",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerItem"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
continuationToken: {
|
|
xmlName: "NextMarker",
|
|
serializedName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var CorsRule = {
|
|
serializedName: "CorsRule",
|
|
type: {
|
|
name: "Composite",
|
|
className: "CorsRule",
|
|
modelProperties: {
|
|
allowedOrigins: {
|
|
xmlName: "AllowedOrigins",
|
|
required: true,
|
|
serializedName: "AllowedOrigins",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
allowedMethods: {
|
|
xmlName: "AllowedMethods",
|
|
required: true,
|
|
serializedName: "AllowedMethods",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
allowedHeaders: {
|
|
xmlName: "AllowedHeaders",
|
|
required: true,
|
|
serializedName: "AllowedHeaders",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
exposedHeaders: {
|
|
xmlName: "ExposedHeaders",
|
|
required: true,
|
|
serializedName: "ExposedHeaders",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxAgeInSeconds: {
|
|
xmlName: "MaxAgeInSeconds",
|
|
required: true,
|
|
serializedName: "MaxAgeInSeconds",
|
|
constraints: {
|
|
InclusiveMinimum: 0
|
|
},
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var GeoReplication = {
|
|
serializedName: "GeoReplication",
|
|
type: {
|
|
name: "Composite",
|
|
className: "GeoReplication",
|
|
modelProperties: {
|
|
status: {
|
|
xmlName: "Status",
|
|
required: true,
|
|
serializedName: "Status",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastSyncOn: {
|
|
xmlName: "LastSyncTime",
|
|
required: true,
|
|
serializedName: "LastSyncTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var RetentionPolicy = {
|
|
serializedName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy",
|
|
modelProperties: {
|
|
enabled: {
|
|
xmlName: "Enabled",
|
|
required: true,
|
|
serializedName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
days: {
|
|
xmlName: "Days",
|
|
serializedName: "Days",
|
|
constraints: {
|
|
InclusiveMinimum: 1
|
|
},
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var Logging = {
|
|
serializedName: "Logging",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Logging",
|
|
modelProperties: {
|
|
version: {
|
|
xmlName: "Version",
|
|
required: true,
|
|
serializedName: "Version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleteProperty: {
|
|
xmlName: "Delete",
|
|
required: true,
|
|
serializedName: "Delete",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
read: {
|
|
xmlName: "Read",
|
|
required: true,
|
|
serializedName: "Read",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
write: {
|
|
xmlName: "Write",
|
|
required: true,
|
|
serializedName: "Write",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
retentionPolicy: {
|
|
xmlName: "RetentionPolicy",
|
|
required: true,
|
|
serializedName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var Metrics = {
|
|
serializedName: "Metrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics",
|
|
modelProperties: {
|
|
version: {
|
|
xmlName: "Version",
|
|
serializedName: "Version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
enabled: {
|
|
xmlName: "Enabled",
|
|
required: true,
|
|
serializedName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
includeAPIs: {
|
|
xmlName: "IncludeAPIs",
|
|
serializedName: "IncludeAPIs",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
retentionPolicy: {
|
|
xmlName: "RetentionPolicy",
|
|
serializedName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageRange = {
|
|
serializedName: "PageRange",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageRange",
|
|
modelProperties: {
|
|
start: {
|
|
xmlName: "Start",
|
|
required: true,
|
|
serializedName: "Start",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
end: {
|
|
xmlName: "End",
|
|
required: true,
|
|
serializedName: "End",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ClearRange = {
|
|
serializedName: "ClearRange",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ClearRange",
|
|
modelProperties: {
|
|
start: {
|
|
xmlName: "Start",
|
|
required: true,
|
|
serializedName: "Start",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
end: {
|
|
xmlName: "End",
|
|
required: true,
|
|
serializedName: "End",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageList = {
|
|
serializedName: "PageList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageList",
|
|
modelProperties: {
|
|
pageRange: {
|
|
xmlName: "PageRange",
|
|
xmlElementName: "PageRange",
|
|
serializedName: "PageRange",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageRange"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
clearRange: {
|
|
xmlName: "ClearRange",
|
|
xmlElementName: "ClearRange",
|
|
serializedName: "ClearRange",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "ClearRange"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var SignedIdentifier = {
|
|
serializedName: "SignedIdentifier",
|
|
type: {
|
|
name: "Composite",
|
|
className: "SignedIdentifier",
|
|
modelProperties: {
|
|
id: {
|
|
xmlName: "Id",
|
|
required: true,
|
|
serializedName: "Id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessPolicy: {
|
|
xmlName: "AccessPolicy",
|
|
required: true,
|
|
serializedName: "AccessPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AccessPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var StaticWebsite = {
|
|
serializedName: "StaticWebsite",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StaticWebsite",
|
|
modelProperties: {
|
|
enabled: {
|
|
xmlName: "Enabled",
|
|
required: true,
|
|
serializedName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
indexDocument: {
|
|
xmlName: "IndexDocument",
|
|
serializedName: "IndexDocument",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorDocument404Path: {
|
|
xmlName: "ErrorDocument404Path",
|
|
serializedName: "ErrorDocument404Path",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobServiceProperties = {
|
|
xmlName: "StorageServiceProperties",
|
|
serializedName: "BlobServiceProperties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobServiceProperties",
|
|
modelProperties: {
|
|
blobAnalyticsLogging: {
|
|
xmlName: "Logging",
|
|
serializedName: "Logging",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Logging"
|
|
}
|
|
},
|
|
hourMetrics: {
|
|
xmlName: "HourMetrics",
|
|
serializedName: "HourMetrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics"
|
|
}
|
|
},
|
|
minuteMetrics: {
|
|
xmlName: "MinuteMetrics",
|
|
serializedName: "MinuteMetrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics"
|
|
}
|
|
},
|
|
cors: {
|
|
xmlIsWrapped: true,
|
|
xmlName: "Cors",
|
|
xmlElementName: "CorsRule",
|
|
serializedName: "Cors",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "CorsRule"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
defaultServiceVersion: {
|
|
xmlName: "DefaultServiceVersion",
|
|
serializedName: "DefaultServiceVersion",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleteRetentionPolicy: {
|
|
xmlName: "DeleteRetentionPolicy",
|
|
serializedName: "DeleteRetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
},
|
|
staticWebsite: {
|
|
xmlName: "StaticWebsite",
|
|
serializedName: "StaticWebsite",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StaticWebsite"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobServiceStatistics = {
|
|
xmlName: "StorageServiceStats",
|
|
serializedName: "BlobServiceStatistics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobServiceStatistics",
|
|
modelProperties: {
|
|
geoReplication: {
|
|
xmlName: "GeoReplication",
|
|
serializedName: "GeoReplication",
|
|
type: {
|
|
name: "Composite",
|
|
className: "GeoReplication"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceSetPropertiesHeaders = {
|
|
serializedName: "service-setproperties-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSetPropertiesHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceGetPropertiesHeaders = {
|
|
serializedName: "service-getproperties-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetPropertiesHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceGetStatisticsHeaders = {
|
|
serializedName: "service-getstatistics-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetStatisticsHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceListContainersSegmentHeaders = {
|
|
serializedName: "service-listcontainerssegment-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceListContainersSegmentHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceGetUserDelegationKeyHeaders = {
|
|
serializedName: "service-getuserdelegationkey-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetUserDelegationKeyHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceGetAccountInfoHeaders = {
|
|
serializedName: "service-getaccountinfo-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2"
|
|
]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ServiceSubmitBatchHeaders = {
|
|
serializedName: "service-submitbatch-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSubmitBatchHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerCreateHeaders = {
|
|
serializedName: "container-create-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerGetPropertiesHeaders = {
|
|
serializedName: "container-getproperties-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetPropertiesHeaders",
|
|
modelProperties: {
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"infinite",
|
|
"fixed"
|
|
]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"locked",
|
|
"unlocked"
|
|
]
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobPublicAccess: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
hasImmutabilityPolicy: {
|
|
serializedName: "x-ms-has-immutability-policy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
hasLegalHold: {
|
|
serializedName: "x-ms-has-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
defaultEncryptionScope: {
|
|
serializedName: "x-ms-default-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
denyEncryptionScopeOverride: {
|
|
serializedName: "x-ms-deny-encryption-scope-override",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerDeleteHeaders = {
|
|
serializedName: "container-delete-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerDeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerSetMetadataHeaders = {
|
|
serializedName: "container-setmetadata-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetMetadataHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerGetAccessPolicyHeaders = {
|
|
serializedName: "container-getaccesspolicy-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccessPolicyHeaders",
|
|
modelProperties: {
|
|
blobPublicAccess: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerSetAccessPolicyHeaders = {
|
|
serializedName: "container-setaccesspolicy-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetAccessPolicyHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerAcquireLeaseHeaders = {
|
|
serializedName: "container-acquirelease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerAcquireLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerReleaseLeaseHeaders = {
|
|
serializedName: "container-releaselease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerReleaseLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerRenewLeaseHeaders = {
|
|
serializedName: "container-renewlease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRenewLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerBreakLeaseHeaders = {
|
|
serializedName: "container-breaklease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerBreakLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseTime: {
|
|
serializedName: "x-ms-lease-time",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerChangeLeaseHeaders = {
|
|
serializedName: "container-changelease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerChangeLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerListBlobFlatSegmentHeaders = {
|
|
serializedName: "container-listblobflatsegment-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobFlatSegmentHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerListBlobHierarchySegmentHeaders = {
|
|
serializedName: "container-listblobhierarchysegment-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobHierarchySegmentHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var ContainerGetAccountInfoHeaders = {
|
|
serializedName: "container-getaccountinfo-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2"
|
|
]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobDownloadHeaders = {
|
|
serializedName: "blob-download-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDownloadHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentRange: {
|
|
serializedName: "content-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
blobType: {
|
|
serializedName: "x-ms-blob-type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"BlockBlob",
|
|
"PageBlob",
|
|
"AppendBlob"
|
|
]
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
serializedName: "x-ms-copy-completion-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "x-ms-copy-status-description",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "x-ms-copy-progress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"pending",
|
|
"success",
|
|
"aborted",
|
|
"failed"
|
|
]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"infinite",
|
|
"fixed"
|
|
]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"locked",
|
|
"unlocked"
|
|
]
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
acceptRanges: {
|
|
serializedName: "accept-ranges",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentMD5: {
|
|
serializedName: "x-ms-blob-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobGetPropertiesHeaders = {
|
|
serializedName: "blob-getproperties-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetPropertiesHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
createdOn: {
|
|
serializedName: "x-ms-creation-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
blobType: {
|
|
serializedName: "x-ms-blob-type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"BlockBlob",
|
|
"PageBlob",
|
|
"AppendBlob"
|
|
]
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
serializedName: "x-ms-copy-completion-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "x-ms-copy-status-description",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "x-ms-copy-progress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"pending",
|
|
"success",
|
|
"aborted",
|
|
"failed"
|
|
]
|
|
}
|
|
},
|
|
isIncrementalCopy: {
|
|
serializedName: "x-ms-incremental-copy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
destinationSnapshot: {
|
|
serializedName: "x-ms-copy-destination-snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"infinite",
|
|
"fixed"
|
|
]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"locked",
|
|
"unlocked"
|
|
]
|
|
}
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
acceptRanges: {
|
|
serializedName: "accept-ranges",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTier: {
|
|
serializedName: "x-ms-access-tier",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierInferred: {
|
|
serializedName: "x-ms-access-tier-inferred",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
archiveStatus: {
|
|
serializedName: "x-ms-archive-status",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierChangedOn: {
|
|
serializedName: "x-ms-access-tier-change-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobDeleteHeaders = {
|
|
serializedName: "blob-delete-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobSetAccessControlHeaders = {
|
|
serializedName: "blob-setaccesscontrol-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetAccessControlHeaders",
|
|
modelProperties: {
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobGetAccessControlHeaders = {
|
|
serializedName: "blob-getaccesscontrol-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetAccessControlHeaders",
|
|
modelProperties: {
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
xMsOwner: {
|
|
serializedName: "x-ms-owner",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
xMsGroup: {
|
|
serializedName: "x-ms-group",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
xMsPermissions: {
|
|
serializedName: "x-ms-permissions",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
xMsAcl: {
|
|
serializedName: "x-ms-acl",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobRenameHeaders = {
|
|
serializedName: "blob-rename-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobRenameHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobCreateHeaders = {
|
|
serializedName: "pageblob-create-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var AppendBlobCreateHeaders = {
|
|
serializedName: "appendblob-create-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockBlobUploadHeaders = {
|
|
serializedName: "blockblob-upload-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobUploadHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobUndeleteHeaders = {
|
|
serializedName: "blob-undelete-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobUndeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobSetHTTPHeadersHeaders = {
|
|
serializedName: "blob-sethttpheaders-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetHTTPHeadersHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobSetMetadataHeaders = {
|
|
serializedName: "blob-setmetadata-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetMetadataHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobAcquireLeaseHeaders = {
|
|
serializedName: "blob-acquirelease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAcquireLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobReleaseLeaseHeaders = {
|
|
serializedName: "blob-releaselease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobReleaseLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobRenewLeaseHeaders = {
|
|
serializedName: "blob-renewlease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobRenewLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobChangeLeaseHeaders = {
|
|
serializedName: "blob-changelease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobChangeLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobBreakLeaseHeaders = {
|
|
serializedName: "blob-breaklease-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobBreakLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseTime: {
|
|
serializedName: "x-ms-lease-time",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobCreateSnapshotHeaders = {
|
|
serializedName: "blob-createsnapshot-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCreateSnapshotHeaders",
|
|
modelProperties: {
|
|
snapshot: {
|
|
serializedName: "x-ms-snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobStartCopyFromURLHeaders = {
|
|
serializedName: "blob-startcopyfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobStartCopyFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"pending",
|
|
"success",
|
|
"aborted",
|
|
"failed"
|
|
]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobCopyFromURLHeaders = {
|
|
serializedName: "blob-copyfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCopyFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"success"
|
|
]
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobAbortCopyFromURLHeaders = {
|
|
serializedName: "blob-abortcopyfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAbortCopyFromURLHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobSetTierHeaders = {
|
|
serializedName: "blob-settier-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetTierHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlobGetAccountInfoHeaders = {
|
|
serializedName: "blob-getaccountinfo-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2"
|
|
]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockBlobStageBlockHeaders = {
|
|
serializedName: "blockblob-stageblock-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockHeaders",
|
|
modelProperties: {
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockBlobStageBlockFromURLHeaders = {
|
|
serializedName: "blockblob-stageblockfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockFromURLHeaders",
|
|
modelProperties: {
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockBlobCommitBlockListHeaders = {
|
|
serializedName: "blockblob-commitblocklist-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobCommitBlockListHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var BlockBlobGetBlockListHeaders = {
|
|
serializedName: "blockblob-getblocklist-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobGetBlockListHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobUploadPagesHeaders = {
|
|
serializedName: "pageblob-uploadpages-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobClearPagesHeaders = {
|
|
serializedName: "pageblob-clearpages-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobClearPagesHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobUploadPagesFromURLHeaders = {
|
|
serializedName: "pageblob-uploadpagesfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobGetPageRangesHeaders = {
|
|
serializedName: "pageblob-getpageranges-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobGetPageRangesDiffHeaders = {
|
|
serializedName: "pageblob-getpagerangesdiff-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesDiffHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobResizeHeaders = {
|
|
serializedName: "pageblob-resize-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobResizeHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobUpdateSequenceNumberHeaders = {
|
|
serializedName: "pageblob-updatesequencenumber-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUpdateSequenceNumberHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var PageBlobCopyIncrementalHeaders = {
|
|
serializedName: "pageblob-copyincremental-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCopyIncrementalHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"pending",
|
|
"success",
|
|
"aborted",
|
|
"failed"
|
|
]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var AppendBlobAppendBlockHeaders = {
|
|
serializedName: "appendblob-appendblock-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobAppendOffset: {
|
|
serializedName: "x-ms-blob-append-offset",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var AppendBlobAppendBlockFromUrlHeaders = {
|
|
serializedName: "appendblob-appendblockfromurl-headers",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockFromUrlHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobAppendOffset: {
|
|
serializedName: "x-ms-blob-append-offset",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
BlobServiceProperties: BlobServiceProperties,
|
|
BlobServiceStatistics: BlobServiceStatistics,
|
|
ContainerItem: ContainerItem,
|
|
ContainerProperties: ContainerProperties,
|
|
CorsRule: CorsRule,
|
|
GeoReplication: GeoReplication,
|
|
KeyInfo: KeyInfo,
|
|
ListContainersSegmentResponse: ListContainersSegmentResponse,
|
|
Logging: Logging,
|
|
Metrics: Metrics,
|
|
RetentionPolicy: RetentionPolicy,
|
|
ServiceGetAccountInfoHeaders: ServiceGetAccountInfoHeaders,
|
|
ServiceGetPropertiesHeaders: ServiceGetPropertiesHeaders,
|
|
ServiceGetStatisticsHeaders: ServiceGetStatisticsHeaders,
|
|
ServiceGetUserDelegationKeyHeaders: ServiceGetUserDelegationKeyHeaders,
|
|
ServiceListContainersSegmentHeaders: ServiceListContainersSegmentHeaders,
|
|
ServiceSetPropertiesHeaders: ServiceSetPropertiesHeaders,
|
|
ServiceSubmitBatchHeaders: ServiceSubmitBatchHeaders,
|
|
StaticWebsite: StaticWebsite,
|
|
StorageError: StorageError,
|
|
UserDelegationKey: UserDelegationKey
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
var access = {
|
|
parameterPath: [
|
|
"options",
|
|
"access"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action0 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
defaultValue: 'acquire',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action1 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
defaultValue: 'release',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action2 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
defaultValue: 'renew',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action3 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
defaultValue: 'break',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action4 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
defaultValue: 'change',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action5 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "action",
|
|
defaultValue: 'setAccessControl',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var action6 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "action",
|
|
defaultValue: 'getAccessControl',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var appendPosition = {
|
|
parameterPath: [
|
|
"options",
|
|
"appendPositionAccessConditions",
|
|
"appendPosition"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-condition-appendpos",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var blobCacheControl = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobCacheControl"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobContentDisposition = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobContentDisposition"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobContentEncoding = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobContentEncoding"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobContentLanguage = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobContentLanguage"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobContentLength = {
|
|
parameterPath: "blobContentLength",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var blobContentMD5 = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobContentMD5"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
var blobContentType = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobHTTPHeaders",
|
|
"blobContentType"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobSequenceNumber = {
|
|
parameterPath: [
|
|
"options",
|
|
"blobSequenceNumber"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
defaultValue: 0,
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var blobType0 = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
defaultValue: 'PageBlob',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobType1 = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
defaultValue: 'AppendBlob',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blobType2 = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
defaultValue: 'BlockBlob',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var blockId = {
|
|
parameterPath: "blockId",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "blockid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var breakPeriod = {
|
|
parameterPath: [
|
|
"options",
|
|
"breakPeriod"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-break-period",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var cacheControl = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryHttpHeaders",
|
|
"cacheControl"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp0 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'properties',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp1 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'stats',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp10 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'copy',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp11 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'tier',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp12 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'page',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp13 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'pagelist',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp14 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'incrementalcopy',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp15 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'appendblock',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp16 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'block',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp17 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'blocklist',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp2 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'list',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp3 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'userdelegationkey',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp4 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'batch',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp5 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'metadata',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp6 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'acl',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp7 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'lease',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp8 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'undelete',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var comp9 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
defaultValue: 'snapshot',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var contentDisposition = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryHttpHeaders",
|
|
"contentDisposition"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var contentEncoding = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryHttpHeaders",
|
|
"contentEncoding"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var contentLanguage = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryHttpHeaders",
|
|
"contentLanguage"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var contentLength = {
|
|
parameterPath: "contentLength",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "Content-Length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var contentType = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryHttpHeaders",
|
|
"contentType"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var copyActionAbortConstant = {
|
|
parameterPath: "copyActionAbortConstant",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-copy-action",
|
|
defaultValue: 'abort',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var copyId = {
|
|
parameterPath: "copyId",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "copyid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var copySource = {
|
|
parameterPath: "copySource",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var defaultEncryptionScope = {
|
|
parameterPath: [
|
|
"options",
|
|
"containerEncryptionScope",
|
|
"defaultEncryptionScope"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-default-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var deleteSnapshots = {
|
|
parameterPath: [
|
|
"options",
|
|
"deleteSnapshots"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-delete-snapshots",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"include",
|
|
"only"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var delimiter = {
|
|
parameterPath: "delimiter",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "delimiter",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var directoryProperties = {
|
|
parameterPath: [
|
|
"options",
|
|
"directoryProperties"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-properties",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var duration = {
|
|
parameterPath: [
|
|
"options",
|
|
"duration"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var encryptionAlgorithm = {
|
|
parameterPath: [
|
|
"options",
|
|
"cpkInfo",
|
|
"encryptionAlgorithm"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-algorithm",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"AES256"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var encryptionKey = {
|
|
parameterPath: [
|
|
"options",
|
|
"cpkInfo",
|
|
"encryptionKey"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-key",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var encryptionKeySha256 = {
|
|
parameterPath: [
|
|
"options",
|
|
"cpkInfo",
|
|
"encryptionKeySha256"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var encryptionScope = {
|
|
parameterPath: [
|
|
"options",
|
|
"encryptionScope"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var group = {
|
|
parameterPath: [
|
|
"options",
|
|
"group"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-group",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var ifMatch = {
|
|
parameterPath: [
|
|
"options",
|
|
"modifiedAccessConditions",
|
|
"ifMatch"
|
|
],
|
|
mapper: {
|
|
serializedName: "If-Match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var ifModifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"modifiedAccessConditions",
|
|
"ifModifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "If-Modified-Since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
var ifNoneMatch = {
|
|
parameterPath: [
|
|
"options",
|
|
"modifiedAccessConditions",
|
|
"ifNoneMatch"
|
|
],
|
|
mapper: {
|
|
serializedName: "If-None-Match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var ifSequenceNumberEqualTo = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberEqualTo"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-eq",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var ifSequenceNumberLessThan = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberLessThan"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-lt",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var ifSequenceNumberLessThanOrEqualTo = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberLessThanOrEqualTo"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-le",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var ifUnmodifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"modifiedAccessConditions",
|
|
"ifUnmodifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "If-Unmodified-Since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
var include0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"include"
|
|
],
|
|
mapper: {
|
|
serializedName: "include",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"metadata"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var include1 = {
|
|
parameterPath: [
|
|
"options",
|
|
"include"
|
|
],
|
|
mapper: {
|
|
serializedName: "include",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"copy",
|
|
"deleted",
|
|
"metadata",
|
|
"snapshots",
|
|
"uncommittedblobs"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
collectionFormat: coreHttp.QueryCollectionFormat.Csv
|
|
};
|
|
var leaseId0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"leaseAccessConditions",
|
|
"leaseId"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var leaseId1 = {
|
|
parameterPath: "leaseId",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var listType = {
|
|
parameterPath: "listType",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "blocklisttype",
|
|
defaultValue: 'committed',
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"committed",
|
|
"uncommitted",
|
|
"all"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var marker0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"marker"
|
|
],
|
|
mapper: {
|
|
serializedName: "marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var maxPageSize = {
|
|
parameterPath: [
|
|
"options",
|
|
"maxPageSize"
|
|
],
|
|
mapper: {
|
|
serializedName: "maxresults",
|
|
constraints: {
|
|
InclusiveMinimum: 1
|
|
},
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var maxSize = {
|
|
parameterPath: [
|
|
"options",
|
|
"appendPositionAccessConditions",
|
|
"maxSize"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-condition-maxsize",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var metadata = {
|
|
parameterPath: [
|
|
"options",
|
|
"metadata"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
}
|
|
};
|
|
var multipartContentType = {
|
|
parameterPath: "multipartContentType",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var owner = {
|
|
parameterPath: [
|
|
"options",
|
|
"owner"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-owner",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var pageWrite0 = {
|
|
parameterPath: "pageWrite",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-page-write",
|
|
defaultValue: 'update',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var pageWrite1 = {
|
|
parameterPath: "pageWrite",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-page-write",
|
|
defaultValue: 'clear',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var pathRenameMode = {
|
|
parameterPath: [
|
|
"options",
|
|
"pathRenameMode"
|
|
],
|
|
mapper: {
|
|
serializedName: "mode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"legacy",
|
|
"posix"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var posixAcl = {
|
|
parameterPath: [
|
|
"options",
|
|
"posixAcl"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-acl",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var posixPermissions = {
|
|
parameterPath: [
|
|
"options",
|
|
"posixPermissions"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-permissions",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var posixUmask = {
|
|
parameterPath: [
|
|
"options",
|
|
"posixUmask"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-umask",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var prefix = {
|
|
parameterPath: [
|
|
"options",
|
|
"prefix"
|
|
],
|
|
mapper: {
|
|
serializedName: "prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var preventEncryptionScopeOverride = {
|
|
parameterPath: [
|
|
"options",
|
|
"containerEncryptionScope",
|
|
"preventEncryptionScopeOverride"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-deny-encryption-scope-override",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
var prevsnapshot = {
|
|
parameterPath: [
|
|
"options",
|
|
"prevsnapshot"
|
|
],
|
|
mapper: {
|
|
serializedName: "prevsnapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var prevSnapshotUrl = {
|
|
parameterPath: [
|
|
"options",
|
|
"prevSnapshotUrl"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-previous-snapshot-url",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var proposedLeaseId0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"proposedLeaseId"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-proposed-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var proposedLeaseId1 = {
|
|
parameterPath: "proposedLeaseId",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-proposed-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var range0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"range"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var range1 = {
|
|
parameterPath: "range",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var rangeGetContentCRC64 = {
|
|
parameterPath: [
|
|
"options",
|
|
"rangeGetContentCRC64"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-range-get-content-crc64",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
var rangeGetContentMD5 = {
|
|
parameterPath: [
|
|
"options",
|
|
"rangeGetContentMD5"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-range-get-content-md5",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
var rehydratePriority = {
|
|
parameterPath: [
|
|
"options",
|
|
"rehydratePriority"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-rehydrate-priority",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var renameSource = {
|
|
parameterPath: "renameSource",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-rename-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var requestId = {
|
|
parameterPath: [
|
|
"options",
|
|
"requestId"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var restype0 = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
defaultValue: 'service',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var restype1 = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
defaultValue: 'account',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var restype2 = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
defaultValue: 'container',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sequenceNumberAction = {
|
|
parameterPath: "sequenceNumberAction",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-sequence-number-action",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"max",
|
|
"update",
|
|
"increment"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
var snapshot = {
|
|
parameterPath: [
|
|
"options",
|
|
"snapshot"
|
|
],
|
|
mapper: {
|
|
serializedName: "snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceContentCrc64 = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceContentCrc64"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
var sourceContentMD5 = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceContentMD5"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
var sourceIfMatch = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfMatch"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceIfModifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfModifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-modified-since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
var sourceIfNoneMatch = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfNoneMatch"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-none-match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceIfUnmodifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfUnmodifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-unmodified-since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
var sourceLeaseId = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceLeaseId"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceRange0 = {
|
|
parameterPath: "sourceRange",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-source-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceRange1 = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceRange"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var sourceUrl = {
|
|
parameterPath: "sourceUrl",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var tier0 = {
|
|
parameterPath: [
|
|
"options",
|
|
"tier"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-access-tier",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var tier1 = {
|
|
parameterPath: "tier",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "x-ms-access-tier",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var timeoutInSeconds = {
|
|
parameterPath: [
|
|
"options",
|
|
"timeoutInSeconds"
|
|
],
|
|
mapper: {
|
|
serializedName: "timeout",
|
|
constraints: {
|
|
InclusiveMinimum: 0
|
|
},
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
var transactionalContentCrc64 = {
|
|
parameterPath: [
|
|
"options",
|
|
"transactionalContentCrc64"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
var transactionalContentMD5 = {
|
|
parameterPath: [
|
|
"options",
|
|
"transactionalContentMD5"
|
|
],
|
|
mapper: {
|
|
serializedName: "Content-MD5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
var upn = {
|
|
parameterPath: [
|
|
"options",
|
|
"upn"
|
|
],
|
|
mapper: {
|
|
serializedName: "upn",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
var url = {
|
|
parameterPath: "url",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "url",
|
|
defaultValue: '',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
skipEncoding: true
|
|
};
|
|
var version = {
|
|
parameterPath: "version",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-version",
|
|
defaultValue: '2019-07-07',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
var xMsRequiresSync = {
|
|
parameterPath: "xMsRequiresSync",
|
|
mapper: {
|
|
required: true,
|
|
isConstant: true,
|
|
serializedName: "x-ms-requires-sync",
|
|
defaultValue: 'true',
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a Service. */
|
|
var Service = /** @class */ (function () {
|
|
/**
|
|
* Create a Service.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function Service(client) {
|
|
this.client = client;
|
|
}
|
|
Service.prototype.setProperties = function (blobServiceProperties, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
blobServiceProperties: blobServiceProperties,
|
|
options: options
|
|
}, setPropertiesOperationSpec, callback);
|
|
};
|
|
Service.prototype.getProperties = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getPropertiesOperationSpec, callback);
|
|
};
|
|
Service.prototype.getStatistics = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getStatisticsOperationSpec, callback);
|
|
};
|
|
Service.prototype.listContainersSegment = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, listContainersSegmentOperationSpec, callback);
|
|
};
|
|
Service.prototype.getUserDelegationKey = function (keyInfo, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
keyInfo: keyInfo,
|
|
options: options
|
|
}, getUserDelegationKeyOperationSpec, callback);
|
|
};
|
|
Service.prototype.getAccountInfo = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getAccountInfoOperationSpec, callback);
|
|
};
|
|
Service.prototype.submitBatch = function (body, contentLength, multipartContentType, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
body: body,
|
|
contentLength: contentLength,
|
|
multipartContentType: multipartContentType,
|
|
options: options
|
|
}, submitBatchOperationSpec, callback);
|
|
};
|
|
return Service;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer = new coreHttp.Serializer(Mappers, true);
|
|
var setPropertiesOperationSpec = {
|
|
httpMethod: "PUT",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype0,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
requestBody: {
|
|
parameterPath: "blobServiceProperties",
|
|
mapper: tslib.__assign(tslib.__assign({}, BlobServiceProperties), { required: true })
|
|
},
|
|
contentType: "application/xml; charset=utf-8",
|
|
responses: {
|
|
202: {
|
|
headersMapper: ServiceSetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceSetPropertiesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var getPropertiesOperationSpec = {
|
|
httpMethod: "GET",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype0,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlobServiceProperties,
|
|
headersMapper: ServiceGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetPropertiesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var getStatisticsOperationSpec = {
|
|
httpMethod: "GET",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype0,
|
|
comp1
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlobServiceStatistics,
|
|
headersMapper: ServiceGetStatisticsHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetStatisticsHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var listContainersSegmentOperationSpec = {
|
|
httpMethod: "GET",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
prefix,
|
|
marker0,
|
|
maxPageSize,
|
|
include0,
|
|
timeoutInSeconds,
|
|
comp2
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListContainersSegmentResponse,
|
|
headersMapper: ServiceListContainersSegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceListContainersSegmentHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var getUserDelegationKeyOperationSpec = {
|
|
httpMethod: "POST",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype0,
|
|
comp3
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
requestBody: {
|
|
parameterPath: "keyInfo",
|
|
mapper: tslib.__assign(tslib.__assign({}, KeyInfo), { required: true })
|
|
},
|
|
contentType: "application/xml; charset=utf-8",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: UserDelegationKey,
|
|
headersMapper: ServiceGetUserDelegationKeyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetUserDelegationKeyHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var getAccountInfoOperationSpec = {
|
|
httpMethod: "GET",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
restype1,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ServiceGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetAccountInfoHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
var submitBatchOperationSpec = {
|
|
httpMethod: "POST",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp4
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
multipartContentType,
|
|
version,
|
|
requestId
|
|
],
|
|
requestBody: {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/xml; charset=utf-8",
|
|
responses: {
|
|
202: {
|
|
bodyMapper: {
|
|
serializedName: "parsedResponse",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
},
|
|
headersMapper: ServiceSubmitBatchHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceSubmitBatchHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers$1 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
AccessPolicy: AccessPolicy,
|
|
BlobFlatListSegment: BlobFlatListSegment,
|
|
BlobHierarchyListSegment: BlobHierarchyListSegment,
|
|
BlobItem: BlobItem,
|
|
BlobPrefix: BlobPrefix,
|
|
BlobProperties: BlobProperties,
|
|
ContainerAcquireLeaseHeaders: ContainerAcquireLeaseHeaders,
|
|
ContainerBreakLeaseHeaders: ContainerBreakLeaseHeaders,
|
|
ContainerChangeLeaseHeaders: ContainerChangeLeaseHeaders,
|
|
ContainerCreateHeaders: ContainerCreateHeaders,
|
|
ContainerDeleteHeaders: ContainerDeleteHeaders,
|
|
ContainerGetAccessPolicyHeaders: ContainerGetAccessPolicyHeaders,
|
|
ContainerGetAccountInfoHeaders: ContainerGetAccountInfoHeaders,
|
|
ContainerGetPropertiesHeaders: ContainerGetPropertiesHeaders,
|
|
ContainerListBlobFlatSegmentHeaders: ContainerListBlobFlatSegmentHeaders,
|
|
ContainerListBlobHierarchySegmentHeaders: ContainerListBlobHierarchySegmentHeaders,
|
|
ContainerReleaseLeaseHeaders: ContainerReleaseLeaseHeaders,
|
|
ContainerRenewLeaseHeaders: ContainerRenewLeaseHeaders,
|
|
ContainerSetAccessPolicyHeaders: ContainerSetAccessPolicyHeaders,
|
|
ContainerSetMetadataHeaders: ContainerSetMetadataHeaders,
|
|
ListBlobsFlatSegmentResponse: ListBlobsFlatSegmentResponse,
|
|
ListBlobsHierarchySegmentResponse: ListBlobsHierarchySegmentResponse,
|
|
SignedIdentifier: SignedIdentifier,
|
|
StorageError: StorageError
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a Container. */
|
|
var Container = /** @class */ (function () {
|
|
/**
|
|
* Create a Container.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function Container(client) {
|
|
this.client = client;
|
|
}
|
|
Container.prototype.create = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, createOperationSpec, callback);
|
|
};
|
|
Container.prototype.getProperties = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getPropertiesOperationSpec$1, callback);
|
|
};
|
|
Container.prototype.deleteMethod = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, deleteMethodOperationSpec, callback);
|
|
};
|
|
Container.prototype.setMetadata = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, setMetadataOperationSpec, callback);
|
|
};
|
|
Container.prototype.getAccessPolicy = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getAccessPolicyOperationSpec, callback);
|
|
};
|
|
Container.prototype.setAccessPolicy = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, setAccessPolicyOperationSpec, callback);
|
|
};
|
|
Container.prototype.acquireLease = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, acquireLeaseOperationSpec, callback);
|
|
};
|
|
Container.prototype.releaseLease = function (leaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
options: options
|
|
}, releaseLeaseOperationSpec, callback);
|
|
};
|
|
Container.prototype.renewLease = function (leaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
options: options
|
|
}, renewLeaseOperationSpec, callback);
|
|
};
|
|
Container.prototype.breakLease = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, breakLeaseOperationSpec, callback);
|
|
};
|
|
Container.prototype.changeLease = function (leaseId, proposedLeaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
proposedLeaseId: proposedLeaseId,
|
|
options: options
|
|
}, changeLeaseOperationSpec, callback);
|
|
};
|
|
Container.prototype.listBlobFlatSegment = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, listBlobFlatSegmentOperationSpec, callback);
|
|
};
|
|
Container.prototype.listBlobHierarchySegment = function (delimiter, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
delimiter: delimiter,
|
|
options: options
|
|
}, listBlobHierarchySegmentOperationSpec, callback);
|
|
};
|
|
Container.prototype.getAccountInfo = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getAccountInfoOperationSpec$1, callback);
|
|
};
|
|
return Container;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer$1 = new coreHttp.Serializer(Mappers$1, true);
|
|
var createOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
access,
|
|
version,
|
|
requestId,
|
|
defaultEncryptionScope,
|
|
preventEncryptionScopeOverride
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: ContainerCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerCreateHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var getPropertiesOperationSpec$1 = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetPropertiesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var deleteMethodOperationSpec = {
|
|
httpMethod: "DELETE",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: ContainerDeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerDeleteHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var setMetadataOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp5
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerSetMetadataHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerSetMetadataHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var getAccessPolicyOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp6
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: {
|
|
xmlElementName: "SignedIdentifier",
|
|
serializedName: "parsedResponse",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "SignedIdentifier"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
headersMapper: ContainerGetAccessPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetAccessPolicyHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var setAccessPolicyOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp6
|
|
],
|
|
headerParameters: [
|
|
access,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
requestBody: {
|
|
parameterPath: [
|
|
"options",
|
|
"containerAcl"
|
|
],
|
|
mapper: {
|
|
xmlName: "SignedIdentifiers",
|
|
xmlElementName: "SignedIdentifier",
|
|
serializedName: "containerAcl",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "SignedIdentifier"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/xml; charset=utf-8",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerSetAccessPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerSetAccessPolicyHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var acquireLeaseOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
duration,
|
|
proposedLeaseId0,
|
|
version,
|
|
requestId,
|
|
action0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: ContainerAcquireLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerAcquireLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var releaseLeaseOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
version,
|
|
requestId,
|
|
action1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerReleaseLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerReleaseLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var renewLeaseOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
version,
|
|
requestId,
|
|
action2,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerRenewLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerRenewLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var breakLeaseOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
breakPeriod,
|
|
version,
|
|
requestId,
|
|
action3,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: ContainerBreakLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerBreakLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var changeLeaseOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7,
|
|
restype2
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
proposedLeaseId1,
|
|
version,
|
|
requestId,
|
|
action4,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerChangeLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerChangeLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var listBlobFlatSegmentOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
prefix,
|
|
marker0,
|
|
maxPageSize,
|
|
include1,
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp2
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListBlobsFlatSegmentResponse,
|
|
headersMapper: ContainerListBlobFlatSegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerListBlobFlatSegmentHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var listBlobHierarchySegmentOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
prefix,
|
|
delimiter,
|
|
marker0,
|
|
maxPageSize,
|
|
include1,
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp2
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListBlobsHierarchySegmentResponse,
|
|
headersMapper: ContainerListBlobHierarchySegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerListBlobHierarchySegmentHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
var getAccountInfoOperationSpec$1 = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
restype1,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetAccountInfoHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$1
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers$2 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
BlobAbortCopyFromURLHeaders: BlobAbortCopyFromURLHeaders,
|
|
BlobAcquireLeaseHeaders: BlobAcquireLeaseHeaders,
|
|
BlobBreakLeaseHeaders: BlobBreakLeaseHeaders,
|
|
BlobChangeLeaseHeaders: BlobChangeLeaseHeaders,
|
|
BlobCopyFromURLHeaders: BlobCopyFromURLHeaders,
|
|
BlobCreateSnapshotHeaders: BlobCreateSnapshotHeaders,
|
|
BlobDeleteHeaders: BlobDeleteHeaders,
|
|
BlobDownloadHeaders: BlobDownloadHeaders,
|
|
BlobGetAccessControlHeaders: BlobGetAccessControlHeaders,
|
|
BlobGetAccountInfoHeaders: BlobGetAccountInfoHeaders,
|
|
BlobGetPropertiesHeaders: BlobGetPropertiesHeaders,
|
|
BlobReleaseLeaseHeaders: BlobReleaseLeaseHeaders,
|
|
BlobRenameHeaders: BlobRenameHeaders,
|
|
BlobRenewLeaseHeaders: BlobRenewLeaseHeaders,
|
|
BlobSetAccessControlHeaders: BlobSetAccessControlHeaders,
|
|
BlobSetHTTPHeadersHeaders: BlobSetHTTPHeadersHeaders,
|
|
BlobSetMetadataHeaders: BlobSetMetadataHeaders,
|
|
BlobSetTierHeaders: BlobSetTierHeaders,
|
|
BlobStartCopyFromURLHeaders: BlobStartCopyFromURLHeaders,
|
|
BlobUndeleteHeaders: BlobUndeleteHeaders,
|
|
DataLakeStorageError: DataLakeStorageError,
|
|
DataLakeStorageErrorError: DataLakeStorageErrorError,
|
|
StorageError: StorageError
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a Blob. */
|
|
var Blob$1 = /** @class */ (function () {
|
|
/**
|
|
* Create a Blob.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function Blob(client) {
|
|
this.client = client;
|
|
}
|
|
Blob.prototype.download = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, downloadOperationSpec, callback);
|
|
};
|
|
Blob.prototype.getProperties = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getPropertiesOperationSpec$2, callback);
|
|
};
|
|
Blob.prototype.deleteMethod = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, deleteMethodOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.setAccessControl = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, setAccessControlOperationSpec, callback);
|
|
};
|
|
Blob.prototype.getAccessControl = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getAccessControlOperationSpec, callback);
|
|
};
|
|
Blob.prototype.rename = function (renameSource, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
renameSource: renameSource,
|
|
options: options
|
|
}, renameOperationSpec, callback);
|
|
};
|
|
Blob.prototype.undelete = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, undeleteOperationSpec, callback);
|
|
};
|
|
Blob.prototype.setHTTPHeaders = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, setHTTPHeadersOperationSpec, callback);
|
|
};
|
|
Blob.prototype.setMetadata = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, setMetadataOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.acquireLease = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, acquireLeaseOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.releaseLease = function (leaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
options: options
|
|
}, releaseLeaseOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.renewLease = function (leaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
options: options
|
|
}, renewLeaseOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.changeLease = function (leaseId, proposedLeaseId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
leaseId: leaseId,
|
|
proposedLeaseId: proposedLeaseId,
|
|
options: options
|
|
}, changeLeaseOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.breakLease = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, breakLeaseOperationSpec$1, callback);
|
|
};
|
|
Blob.prototype.createSnapshot = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, createSnapshotOperationSpec, callback);
|
|
};
|
|
Blob.prototype.startCopyFromURL = function (copySource, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
copySource: copySource,
|
|
options: options
|
|
}, startCopyFromURLOperationSpec, callback);
|
|
};
|
|
Blob.prototype.copyFromURL = function (copySource, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
copySource: copySource,
|
|
options: options
|
|
}, copyFromURLOperationSpec, callback);
|
|
};
|
|
Blob.prototype.abortCopyFromURL = function (copyId, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
copyId: copyId,
|
|
options: options
|
|
}, abortCopyFromURLOperationSpec, callback);
|
|
};
|
|
Blob.prototype.setTier = function (tier, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
tier: tier,
|
|
options: options
|
|
}, setTierOperationSpec, callback);
|
|
};
|
|
Blob.prototype.getAccountInfo = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getAccountInfoOperationSpec$2, callback);
|
|
};
|
|
return Blob;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer$2 = new coreHttp.Serializer(Mappers$2, true);
|
|
var downloadOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
range0,
|
|
rangeGetContentMD5,
|
|
rangeGetContentCRC64,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: {
|
|
serializedName: "parsedResponse",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
},
|
|
headersMapper: BlobDownloadHeaders
|
|
},
|
|
206: {
|
|
bodyMapper: {
|
|
serializedName: "parsedResponse",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
},
|
|
headersMapper: BlobDownloadHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobDownloadHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var getPropertiesOperationSpec$2 = {
|
|
httpMethod: "HEAD",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobGetPropertiesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var deleteMethodOperationSpec$1 = {
|
|
httpMethod: "DELETE",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
deleteSnapshots,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobDeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobDeleteHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var setAccessControlOperationSpec = {
|
|
httpMethod: "PATCH",
|
|
path: "{filesystem}/{path}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
action5
|
|
],
|
|
headerParameters: [
|
|
owner,
|
|
group,
|
|
posixPermissions,
|
|
posixAcl,
|
|
requestId,
|
|
version,
|
|
leaseId0,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetAccessControlHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: DataLakeStorageError,
|
|
headersMapper: BlobSetAccessControlHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var getAccessControlOperationSpec = {
|
|
httpMethod: "HEAD",
|
|
path: "{filesystem}/{path}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
upn,
|
|
action6
|
|
],
|
|
headerParameters: [
|
|
requestId,
|
|
version,
|
|
leaseId0,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobGetAccessControlHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: DataLakeStorageError,
|
|
headersMapper: BlobGetAccessControlHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var renameOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{filesystem}/{path}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
pathRenameMode
|
|
],
|
|
headerParameters: [
|
|
renameSource,
|
|
directoryProperties,
|
|
posixPermissions,
|
|
posixUmask,
|
|
sourceLeaseId,
|
|
version,
|
|
requestId,
|
|
cacheControl,
|
|
contentType,
|
|
contentEncoding,
|
|
contentLanguage,
|
|
contentDisposition,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlobRenameHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: DataLakeStorageError,
|
|
headersMapper: BlobRenameHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var undeleteOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp8
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobUndeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobUndeleteHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var setHTTPHeadersOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetHTTPHeadersHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetHTTPHeadersHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var setMetadataOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp5
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetMetadataHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetMetadataHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var acquireLeaseOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7
|
|
],
|
|
headerParameters: [
|
|
duration,
|
|
proposedLeaseId0,
|
|
version,
|
|
requestId,
|
|
action0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlobAcquireLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobAcquireLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var releaseLeaseOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
version,
|
|
requestId,
|
|
action1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobReleaseLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobReleaseLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var renewLeaseOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
version,
|
|
requestId,
|
|
action2,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobRenewLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobRenewLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var changeLeaseOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7
|
|
],
|
|
headerParameters: [
|
|
leaseId1,
|
|
proposedLeaseId1,
|
|
version,
|
|
requestId,
|
|
action4,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobChangeLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobChangeLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var breakLeaseOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp7
|
|
],
|
|
headerParameters: [
|
|
breakPeriod,
|
|
version,
|
|
requestId,
|
|
action3,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobBreakLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobBreakLeaseHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var createSnapshotOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp9
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlobCreateSnapshotHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobCreateSnapshotHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var startCopyFromURLOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
tier0,
|
|
rehydratePriority,
|
|
copySource,
|
|
version,
|
|
requestId,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobStartCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobStartCopyFromURLHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var copyFromURLOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
metadata,
|
|
tier0,
|
|
copySource,
|
|
version,
|
|
requestId,
|
|
sourceContentMD5,
|
|
xMsRequiresSync,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobCopyFromURLHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var abortCopyFromURLOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
copyId,
|
|
timeoutInSeconds,
|
|
comp10
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
copyActionAbortConstant,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
204: {
|
|
headersMapper: BlobAbortCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobAbortCopyFromURLHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var setTierOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp11
|
|
],
|
|
headerParameters: [
|
|
tier1,
|
|
rehydratePriority,
|
|
version,
|
|
requestId,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetTierHeaders
|
|
},
|
|
202: {
|
|
headersMapper: BlobSetTierHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetTierHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
var getAccountInfoOperationSpec$2 = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
restype1,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
version
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobGetAccountInfoHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$2
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers$3 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
ClearRange: ClearRange,
|
|
PageBlobClearPagesHeaders: PageBlobClearPagesHeaders,
|
|
PageBlobCopyIncrementalHeaders: PageBlobCopyIncrementalHeaders,
|
|
PageBlobCreateHeaders: PageBlobCreateHeaders,
|
|
PageBlobGetPageRangesDiffHeaders: PageBlobGetPageRangesDiffHeaders,
|
|
PageBlobGetPageRangesHeaders: PageBlobGetPageRangesHeaders,
|
|
PageBlobResizeHeaders: PageBlobResizeHeaders,
|
|
PageBlobUpdateSequenceNumberHeaders: PageBlobUpdateSequenceNumberHeaders,
|
|
PageBlobUploadPagesFromURLHeaders: PageBlobUploadPagesFromURLHeaders,
|
|
PageBlobUploadPagesHeaders: PageBlobUploadPagesHeaders,
|
|
PageList: PageList,
|
|
PageRange: PageRange,
|
|
StorageError: StorageError
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a PageBlob. */
|
|
var PageBlob = /** @class */ (function () {
|
|
/**
|
|
* Create a PageBlob.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function PageBlob(client) {
|
|
this.client = client;
|
|
}
|
|
PageBlob.prototype.create = function (contentLength, blobContentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
contentLength: contentLength,
|
|
blobContentLength: blobContentLength,
|
|
options: options
|
|
}, createOperationSpec$1, callback);
|
|
};
|
|
PageBlob.prototype.uploadPages = function (body, contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
body: body,
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, uploadPagesOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.clearPages = function (contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, clearPagesOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.uploadPagesFromURL = function (sourceUrl, sourceRange, contentLength, range, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
sourceUrl: sourceUrl,
|
|
sourceRange: sourceRange,
|
|
contentLength: contentLength,
|
|
range: range,
|
|
options: options
|
|
}, uploadPagesFromURLOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.getPageRanges = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getPageRangesOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.getPageRangesDiff = function (options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
options: options
|
|
}, getPageRangesDiffOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.resize = function (blobContentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
blobContentLength: blobContentLength,
|
|
options: options
|
|
}, resizeOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.updateSequenceNumber = function (sequenceNumberAction, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
sequenceNumberAction: sequenceNumberAction,
|
|
options: options
|
|
}, updateSequenceNumberOperationSpec, callback);
|
|
};
|
|
PageBlob.prototype.copyIncremental = function (copySource, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
copySource: copySource,
|
|
options: options
|
|
}, copyIncrementalOperationSpec, callback);
|
|
};
|
|
return PageBlob;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer$3 = new coreHttp.Serializer(Mappers$3, true);
|
|
var createOperationSpec$1 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
tier0,
|
|
metadata,
|
|
encryptionScope,
|
|
blobContentLength,
|
|
blobSequenceNumber,
|
|
version,
|
|
requestId,
|
|
blobType0,
|
|
blobContentType,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentMD5,
|
|
blobCacheControl,
|
|
blobContentDisposition,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobCreateHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var uploadPagesOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp12
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
range0,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
pageWrite0,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
requestBody: {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/octet-stream",
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobUploadPagesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUploadPagesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var clearPagesOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp12
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
range0,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
pageWrite1,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobClearPagesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobClearPagesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var uploadPagesFromURLOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp12
|
|
],
|
|
headerParameters: [
|
|
sourceUrl,
|
|
sourceRange0,
|
|
sourceContentMD5,
|
|
sourceContentCrc64,
|
|
contentLength,
|
|
range1,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
pageWrite0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
leaseId0,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobUploadPagesFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUploadPagesFromURLHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var getPageRangesOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
timeoutInSeconds,
|
|
comp13
|
|
],
|
|
headerParameters: [
|
|
range0,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: PageList,
|
|
headersMapper: PageBlobGetPageRangesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobGetPageRangesHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var getPageRangesDiffOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
timeoutInSeconds,
|
|
prevsnapshot,
|
|
comp13
|
|
],
|
|
headerParameters: [
|
|
prevSnapshotUrl,
|
|
range0,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: PageList,
|
|
headersMapper: PageBlobGetPageRangesDiffHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobGetPageRangesDiffHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var resizeOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
encryptionScope,
|
|
blobContentLength,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: PageBlobResizeHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobResizeHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var updateSequenceNumberOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp0
|
|
],
|
|
headerParameters: [
|
|
sequenceNumberAction,
|
|
blobSequenceNumber,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
200: {
|
|
headersMapper: PageBlobUpdateSequenceNumberHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUpdateSequenceNumberHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
var copyIncrementalOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp14
|
|
],
|
|
headerParameters: [
|
|
copySource,
|
|
version,
|
|
requestId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
202: {
|
|
headersMapper: PageBlobCopyIncrementalHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobCopyIncrementalHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$3
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers$4 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
AppendBlobAppendBlockFromUrlHeaders: AppendBlobAppendBlockFromUrlHeaders,
|
|
AppendBlobAppendBlockHeaders: AppendBlobAppendBlockHeaders,
|
|
AppendBlobCreateHeaders: AppendBlobCreateHeaders,
|
|
StorageError: StorageError
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a AppendBlob. */
|
|
var AppendBlob = /** @class */ (function () {
|
|
/**
|
|
* Create a AppendBlob.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function AppendBlob(client) {
|
|
this.client = client;
|
|
}
|
|
AppendBlob.prototype.create = function (contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, createOperationSpec$2, callback);
|
|
};
|
|
AppendBlob.prototype.appendBlock = function (body, contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
body: body,
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, appendBlockOperationSpec, callback);
|
|
};
|
|
AppendBlob.prototype.appendBlockFromUrl = function (sourceUrl, contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
sourceUrl: sourceUrl,
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, appendBlockFromUrlOperationSpec, callback);
|
|
};
|
|
return AppendBlob;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer$4 = new coreHttp.Serializer(Mappers$4, true);
|
|
var createOperationSpec$2 = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
metadata,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
blobType1,
|
|
blobContentType,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentMD5,
|
|
blobCacheControl,
|
|
blobContentDisposition,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobCreateHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$4
|
|
};
|
|
var appendBlockOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp15
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
maxSize,
|
|
appendPosition,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
requestBody: {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/octet-stream",
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobAppendBlockHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobAppendBlockHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$4
|
|
};
|
|
var appendBlockFromUrlOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp15
|
|
],
|
|
headerParameters: [
|
|
sourceUrl,
|
|
sourceRange1,
|
|
sourceContentMD5,
|
|
sourceContentCrc64,
|
|
contentLength,
|
|
transactionalContentMD5,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
leaseId0,
|
|
maxSize,
|
|
appendPosition,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobAppendBlockFromUrlHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobAppendBlockFromUrlHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$4
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
|
|
var Mappers$5 = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
Block: Block,
|
|
BlockBlobCommitBlockListHeaders: BlockBlobCommitBlockListHeaders,
|
|
BlockBlobGetBlockListHeaders: BlockBlobGetBlockListHeaders,
|
|
BlockBlobStageBlockFromURLHeaders: BlockBlobStageBlockFromURLHeaders,
|
|
BlockBlobStageBlockHeaders: BlockBlobStageBlockHeaders,
|
|
BlockBlobUploadHeaders: BlockBlobUploadHeaders,
|
|
BlockList: BlockList,
|
|
BlockLookupList: BlockLookupList,
|
|
StorageError: StorageError
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
/** Class representing a BlockBlob. */
|
|
var BlockBlob = /** @class */ (function () {
|
|
/**
|
|
* Create a BlockBlob.
|
|
* @param {StorageClientContext} client Reference to the service client.
|
|
*/
|
|
function BlockBlob(client) {
|
|
this.client = client;
|
|
}
|
|
BlockBlob.prototype.upload = function (body, contentLength, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
body: body,
|
|
contentLength: contentLength,
|
|
options: options
|
|
}, uploadOperationSpec, callback);
|
|
};
|
|
BlockBlob.prototype.stageBlock = function (blockId, contentLength, body, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
blockId: blockId,
|
|
contentLength: contentLength,
|
|
body: body,
|
|
options: options
|
|
}, stageBlockOperationSpec, callback);
|
|
};
|
|
BlockBlob.prototype.stageBlockFromURL = function (blockId, contentLength, sourceUrl, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
blockId: blockId,
|
|
contentLength: contentLength,
|
|
sourceUrl: sourceUrl,
|
|
options: options
|
|
}, stageBlockFromURLOperationSpec, callback);
|
|
};
|
|
BlockBlob.prototype.commitBlockList = function (blocks, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
blocks: blocks,
|
|
options: options
|
|
}, commitBlockListOperationSpec, callback);
|
|
};
|
|
BlockBlob.prototype.getBlockList = function (listType, options, callback) {
|
|
return this.client.sendOperationRequest({
|
|
listType: listType,
|
|
options: options
|
|
}, getBlockListOperationSpec, callback);
|
|
};
|
|
return BlockBlob;
|
|
}());
|
|
// Operation Specifications
|
|
var serializer$5 = new coreHttp.Serializer(Mappers$5, true);
|
|
var uploadOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds
|
|
],
|
|
headerParameters: [
|
|
transactionalContentMD5,
|
|
contentLength,
|
|
metadata,
|
|
encryptionScope,
|
|
tier0,
|
|
version,
|
|
requestId,
|
|
blobType2,
|
|
blobContentType,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentMD5,
|
|
blobCacheControl,
|
|
blobContentDisposition,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
requestBody: {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/octet-stream",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobUploadHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobUploadHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$5
|
|
};
|
|
var stageBlockOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
blockId,
|
|
timeoutInSeconds,
|
|
comp16
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm
|
|
],
|
|
requestBody: {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
required: true,
|
|
serializedName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
},
|
|
contentType: "application/octet-stream",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobStageBlockHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobStageBlockHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$5
|
|
};
|
|
var stageBlockFromURLOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
blockId,
|
|
timeoutInSeconds,
|
|
comp16
|
|
],
|
|
headerParameters: [
|
|
contentLength,
|
|
sourceUrl,
|
|
sourceRange1,
|
|
sourceContentMD5,
|
|
sourceContentCrc64,
|
|
encryptionScope,
|
|
version,
|
|
requestId,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
leaseId0,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch
|
|
],
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobStageBlockFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobStageBlockFromURLHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$5
|
|
};
|
|
var commitBlockListOperationSpec = {
|
|
httpMethod: "PUT",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp17
|
|
],
|
|
headerParameters: [
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
metadata,
|
|
encryptionScope,
|
|
tier0,
|
|
version,
|
|
requestId,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentMD5,
|
|
blobContentDisposition,
|
|
leaseId0,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch
|
|
],
|
|
requestBody: {
|
|
parameterPath: "blocks",
|
|
mapper: tslib.__assign(tslib.__assign({}, BlockLookupList), { required: true })
|
|
},
|
|
contentType: "application/xml; charset=utf-8",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobCommitBlockListHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobCommitBlockListHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$5
|
|
};
|
|
var getBlockListOperationSpec = {
|
|
httpMethod: "GET",
|
|
path: "{containerName}/{blob}",
|
|
urlParameters: [
|
|
url
|
|
],
|
|
queryParameters: [
|
|
snapshot,
|
|
listType,
|
|
timeoutInSeconds,
|
|
comp17
|
|
],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
leaseId0
|
|
],
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlockList,
|
|
headersMapper: BlockBlobGetBlockListHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobGetBlockListHeaders
|
|
}
|
|
},
|
|
isXML: true,
|
|
serializer: serializer$5
|
|
};
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* The @azure/logger configuration for this package.
|
|
*/
|
|
var logger = logger$1.createClientLogger("storage-blob");
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
var SDK_VERSION = "12.1.2";
|
|
var SERVICE_VERSION = "2019-07-07";
|
|
var BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB
|
|
var BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 100 * 1024 * 1024; // 100MB
|
|
var BLOCK_BLOB_MAX_BLOCKS = 50000;
|
|
var DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB
|
|
var DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB
|
|
var DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;
|
|
/**
|
|
* The OAuth scope to use with Azure Storage.
|
|
*/
|
|
var StorageOAuthScopes = "https://storage.azure.com/.default";
|
|
var URLConstants = {
|
|
Parameters: {
|
|
FORCE_BROWSER_NO_CACHE: "_",
|
|
SIGNATURE: "sig",
|
|
SNAPSHOT: "snapshot",
|
|
TIMEOUT: "timeout"
|
|
}
|
|
};
|
|
var HTTPURLConnection = {
|
|
HTTP_ACCEPTED: 202,
|
|
HTTP_CONFLICT: 409,
|
|
HTTP_NOT_FOUND: 404,
|
|
HTTP_PRECON_FAILED: 412,
|
|
HTTP_RANGE_NOT_SATISFIABLE: 416
|
|
};
|
|
var 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"
|
|
};
|
|
var ETagNone = "";
|
|
var SIZE_1_MB = 1 * 1024 * 1024;
|
|
var BATCH_MAX_REQUEST = 256;
|
|
var BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;
|
|
var HTTP_LINE_ENDING = "\r\n";
|
|
var HTTP_VERSION_1_1 = "HTTP/1.1";
|
|
var EncryptionAlgorithmAES25 = "AES256";
|
|
var DevelopmentConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;";
|
|
var 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"
|
|
];
|
|
var 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"
|
|
];
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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 constrcutor, 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" insead 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://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata
|
|
*
|
|
* @export
|
|
* @param {string} url
|
|
* @returns {string}
|
|
*/
|
|
function escapeURLPath(url) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
var path = urlParsed.getPath();
|
|
path = path || "/";
|
|
path = escape(path);
|
|
urlParsed.setPath(path);
|
|
return urlParsed.toString();
|
|
}
|
|
function getProxyUriFromDevConnString(connectionString) {
|
|
// Development Connection String
|
|
// https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key
|
|
var proxyUri = "";
|
|
if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) {
|
|
// CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri
|
|
var matchCredentials = connectionString.split(";");
|
|
for (var _i = 0, matchCredentials_1 = matchCredentials; _i < matchCredentials_1.length; _i++) {
|
|
var element = matchCredentials_1[_i];
|
|
if (element.trim().startsWith("DevelopmentStorageProxyUri=")) {
|
|
proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1];
|
|
}
|
|
}
|
|
}
|
|
return proxyUri;
|
|
}
|
|
function getValueInConnString(connectionString, argument) {
|
|
var elements = connectionString.split(";");
|
|
for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
|
|
var element = elements_1[_i];
|
|
if (element.trim().startsWith(argument)) {
|
|
return element.trim().match(argument + "=(.*)")[1];
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
/**
|
|
* Extracts the parts of an Azure Storage account connection string.
|
|
*
|
|
* @export
|
|
* @param {string} connectionString Connection string.
|
|
* @returns {ConnectionString} String key value pairs of the storage account's url and credentials.
|
|
*/
|
|
function extractConnectionStringParts(connectionString) {
|
|
var proxyUri = "";
|
|
if (connectionString.startsWith("UseDevelopmentStorage=true")) {
|
|
// Development connection string
|
|
proxyUri = getProxyUriFromDevConnString(connectionString);
|
|
connectionString = DevelopmentConnectionString;
|
|
}
|
|
// Matching BlobEndpoint in the Account connection string
|
|
var 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
|
|
var defaultEndpointsProtocol = "";
|
|
var accountName = "";
|
|
var accountKey = Buffer.from("accountKey", "base64");
|
|
var endpointSuffix = "";
|
|
// Get account name and key
|
|
accountName = getValueInConnString(connectionString, "AccountName");
|
|
accountKey = Buffer.from(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");
|
|
var 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: accountName,
|
|
accountKey: accountKey,
|
|
proxyUri: proxyUri
|
|
};
|
|
}
|
|
else {
|
|
// SAS connection string
|
|
var accountSas = getValueInConnString(connectionString, "SharedAccessSignature");
|
|
var 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");
|
|
}
|
|
else if (!accountName) {
|
|
throw new Error("Invalid AccountName in the provided SAS Connection String");
|
|
}
|
|
return { kind: "SASConnString", url: blobEndpoint, accountName: accountName, accountSas: accountSas };
|
|
}
|
|
}
|
|
/**
|
|
* Internal escape method implmented Strategy Two mentioned in escapeURL() description.
|
|
*
|
|
* @param {string} text
|
|
* @returns {string}
|
|
*/
|
|
function 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 "/".
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @param {string} name String to be appended to URL
|
|
* @returns {string} An updated URL string
|
|
*/
|
|
function appendToURLPath(url, name) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
var path = urlParsed.getPath();
|
|
path = path ? (path.endsWith("/") ? "" + path + name : path + "/" + name) : name;
|
|
urlParsed.setPath(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.
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @param {string} name Parameter name
|
|
* @param {string} [value] Parameter value
|
|
* @returns {string} An updated URL string
|
|
*/
|
|
function setURLParameter(url, name, value) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
urlParsed.setQueryParameter(name, value);
|
|
return urlParsed.toString();
|
|
}
|
|
/**
|
|
* Set URL host.
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @param {string} host New host string
|
|
* @returns An updated URL string
|
|
*/
|
|
function setURLHost(url, host) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
urlParsed.setHost(host);
|
|
return urlParsed.toString();
|
|
}
|
|
/**
|
|
* Get URL path from an URL string.
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @returns {(string | undefined)}
|
|
*/
|
|
function getURLPath(url) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
return urlParsed.getPath();
|
|
}
|
|
/**
|
|
* Get URL scheme from an URL string.
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @returns {(string | undefined)}
|
|
*/
|
|
function getURLScheme(url) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
return urlParsed.getScheme();
|
|
}
|
|
/**
|
|
* Get URL path and query from an URL string.
|
|
*
|
|
* @export
|
|
* @param {string} url Source URL string
|
|
* @returns {(string | undefined)}
|
|
*/
|
|
function getURLPathAndQuery(url) {
|
|
var urlParsed = coreHttp.URLBuilder.parse(url);
|
|
var pathString = urlParsed.getPath();
|
|
if (!pathString) {
|
|
throw new RangeError("Invalid url without valid path.");
|
|
}
|
|
var queryString = urlParsed.getQuery() || "";
|
|
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.
|
|
*
|
|
* @export
|
|
* @param {string} url
|
|
* @returns {{[key: string]: string}}
|
|
*/
|
|
function getURLQueries(url) {
|
|
var queryString = coreHttp.URLBuilder.parse(url).getQuery();
|
|
if (!queryString) {
|
|
return {};
|
|
}
|
|
queryString = queryString.trim();
|
|
queryString = queryString.startsWith("?") ? queryString.substr(1) : queryString;
|
|
var querySubStrings = queryString.split("&");
|
|
querySubStrings = querySubStrings.filter(function (value) {
|
|
var indexOfEqual = value.indexOf("=");
|
|
var lastIndexOfEqual = value.lastIndexOf("=");
|
|
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
|
|
});
|
|
var queries = {};
|
|
for (var _i = 0, querySubStrings_1 = querySubStrings; _i < querySubStrings_1.length; _i++) {
|
|
var querySubString = querySubStrings_1[_i];
|
|
var splitResults = querySubString.split("=");
|
|
var key = splitResults[0];
|
|
var value = splitResults[1];
|
|
queries[key] = value;
|
|
}
|
|
return queries;
|
|
}
|
|
/**
|
|
* Rounds a date off to seconds.
|
|
*
|
|
* @export
|
|
* @param {Date} date
|
|
* @param {boolean} [withMilliseconds=true] If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;
|
|
* If false, YYYY-MM-DDThh:mm:ssZ will be returned.
|
|
* @returns {string} Date string in ISO8061 format, with or without 7 milliseconds component
|
|
*/
|
|
function truncatedISO8061Date(date, withMilliseconds) {
|
|
if (withMilliseconds === void 0) { withMilliseconds = true; }
|
|
// Date.toISOString() will return like "2018-10-29T06:34:36.139Z"
|
|
var dateString = date.toISOString();
|
|
return withMilliseconds
|
|
? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
|
|
: dateString.substring(0, dateString.length - 5) + "Z";
|
|
}
|
|
/**
|
|
* Base64 encode.
|
|
*
|
|
* @export
|
|
* @param {string} content
|
|
* @returns {string}
|
|
*/
|
|
function base64encode(content) {
|
|
return !coreHttp.isNode ? btoa(content) : Buffer.from(content).toString("base64");
|
|
}
|
|
/**
|
|
* Generate a 64 bytes base64 block ID string.
|
|
*
|
|
* @export
|
|
* @param {number} blockIndex
|
|
* @returns {string}
|
|
*/
|
|
function generateBlockID(blockIDPrefix, blockIndex) {
|
|
// To generate a 64 bytes base64 string, source string should be 48
|
|
var maxSourceStringLength = 48;
|
|
// A blob can have a maximum of 100,000 uncommitted blocks at any given time
|
|
var maxBlockIndexLength = 6;
|
|
var maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;
|
|
if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {
|
|
blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);
|
|
}
|
|
var res = blockIDPrefix +
|
|
padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0");
|
|
return base64encode(res);
|
|
}
|
|
/**
|
|
* Delay specified time interval.
|
|
*
|
|
* @export
|
|
* @param {number} timeInMs
|
|
* @param {AbortSignalLike} [aborter]
|
|
* @param {Error} [abortError]
|
|
*/
|
|
function delay(timeInMs, aborter, abortError) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
var timeout;
|
|
var abortHandler = function () {
|
|
if (timeout !== undefined) {
|
|
clearTimeout(timeout);
|
|
}
|
|
reject(abortError);
|
|
};
|
|
var resolveHandler = function () {
|
|
if (aborter !== undefined) {
|
|
aborter.removeEventListener("abort", abortHandler);
|
|
}
|
|
resolve();
|
|
};
|
|
timeout = setTimeout(resolveHandler, timeInMs);
|
|
if (aborter !== undefined) {
|
|
aborter.addEventListener("abort", abortHandler);
|
|
}
|
|
})];
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* String.prototype.padStart()
|
|
*
|
|
* @export
|
|
* @param {string} currentString
|
|
* @param {number} targetLength
|
|
* @param {string} [padString=" "]
|
|
* @returns {string}
|
|
*/
|
|
function padStart(currentString, targetLength, padString) {
|
|
if (padString === void 0) { padString = " "; }
|
|
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;
|
|
}
|
|
}
|
|
/**
|
|
* If two strings are equal when compared case insensitive.
|
|
*
|
|
* @export
|
|
* @param {string} str1
|
|
* @param {string} str2
|
|
* @returns {boolean}
|
|
*/
|
|
function iEqual(str1, str2) {
|
|
return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();
|
|
}
|
|
/**
|
|
* Extracts account name from the url
|
|
* @param {string} url url to extract the account name from
|
|
* @returns {string} with the account name
|
|
*/
|
|
function getAccountNameFromUrl(url) {
|
|
var parsedUrl = coreHttp.URLBuilder.parse(url);
|
|
var accountName;
|
|
try {
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
|
|
accountName = parsedUrl.getHost().split(".")[0];
|
|
}
|
|
else {
|
|
// 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.getPath().split("/")[1];
|
|
}
|
|
if (!accountName) {
|
|
throw new Error("Provided accountName is invalid.");
|
|
}
|
|
return accountName;
|
|
}
|
|
catch (error) {
|
|
throw new Error("Unable to extract accountName with provided information.");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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
|
|
*
|
|
* @class StorageBrowserPolicy
|
|
* @extends {BaseRequestPolicy}
|
|
*/
|
|
var StorageBrowserPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(StorageBrowserPolicy, _super);
|
|
/**
|
|
* Creates an instance of StorageBrowserPolicy.
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @memberof StorageBrowserPolicy
|
|
*/
|
|
function StorageBrowserPolicy(nextPolicy, options) {
|
|
return _super.call(this, nextPolicy, options) || this;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param {WebResource} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof StorageBrowserPolicy
|
|
*/
|
|
StorageBrowserPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
{
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return StorageBrowserPolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects.
|
|
*
|
|
* @export
|
|
* @class StorageBrowserPolicyFactory
|
|
* @implements {RequestPolicyFactory}
|
|
*/
|
|
var StorageBrowserPolicyFactory = /** @class */ (function () {
|
|
function StorageBrowserPolicyFactory() {
|
|
}
|
|
/**
|
|
* Creates a StorageBrowserPolicyFactory object.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @returns {StorageBrowserPolicy}
|
|
* @memberof StorageBrowserPolicyFactory
|
|
*/
|
|
StorageBrowserPolicyFactory.prototype.create = function (nextPolicy, options) {
|
|
return new StorageBrowserPolicy(nextPolicy, options);
|
|
};
|
|
return StorageBrowserPolicyFactory;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
(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";
|
|
})(exports.StorageRetryPolicyType || (exports.StorageRetryPolicyType = {}));
|
|
// Default values of StorageRetryOptions
|
|
var DEFAULT_RETRY_OPTIONS = {
|
|
maxRetryDelayInMs: 120 * 1000,
|
|
maxTries: 4,
|
|
retryDelayInMs: 4 * 1000,
|
|
retryPolicyType: exports.StorageRetryPolicyType.EXPONENTIAL,
|
|
secondaryHost: "",
|
|
tryTimeoutInMs: undefined // Use server side default timeout strategy
|
|
};
|
|
var RETRY_ABORT_ERROR = new abortController.AbortError("The operation was aborted.");
|
|
/**
|
|
* Retry policy with exponential retry and linear retry implemented.
|
|
*
|
|
* @class RetryPolicy
|
|
* @extends {BaseRequestPolicy}
|
|
*/
|
|
var StorageRetryPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(StorageRetryPolicy, _super);
|
|
/**
|
|
* Creates an instance of RetryPolicy.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @param {StorageRetryOptions} [retryOptions=DEFAULT_RETRY_OPTIONS]
|
|
* @memberof StorageRetryPolicy
|
|
*/
|
|
function StorageRetryPolicy(nextPolicy, options, retryOptions) {
|
|
if (retryOptions === void 0) { retryOptions = DEFAULT_RETRY_OPTIONS; }
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
// 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
|
|
};
|
|
return _this;
|
|
}
|
|
/**
|
|
* Sends request.
|
|
*
|
|
* @param {WebResource} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof StorageRetryPolicy
|
|
*/
|
|
StorageRetryPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, this.attemptSendRequest(request, false, 1)];
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Decide and perform next retry. Won't mutate request parameter.
|
|
*
|
|
* @protected
|
|
* @param {WebResource} request
|
|
* @param {boolean} 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 {number} attempt How many retries has been attempted to performed, starting from 1, which includes
|
|
* the attempt will be performed by this method call.
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof StorageRetryPolicy
|
|
*/
|
|
StorageRetryPolicy.prototype.attemptSendRequest = function (request, secondaryHas404, attempt) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var newRequest, isPrimaryRetry, response, err_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
newRequest = request.clone();
|
|
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, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
|
|
}
|
|
_a.label = 1;
|
|
case 1:
|
|
_a.trys.push([1, 3, , 4]);
|
|
logger.info("RetryPolicy: =====> Try=" + attempt + " " + (isPrimaryRetry ? "Primary" : "Secondary"));
|
|
return [4 /*yield*/, this._nextPolicy.sendRequest(newRequest)];
|
|
case 2:
|
|
response = _a.sent();
|
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {
|
|
return [2 /*return*/, response];
|
|
}
|
|
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
|
|
return [3 /*break*/, 4];
|
|
case 3:
|
|
err_1 = _a.sent();
|
|
logger.error("RetryPolicy: Caught error, message: " + err_1.message + ", code: " + err_1.code);
|
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response, err_1)) {
|
|
throw err_1;
|
|
}
|
|
return [3 /*break*/, 4];
|
|
case 4: return [4 /*yield*/, this.delay(isPrimaryRetry, attempt, request.abortSignal)];
|
|
case 5:
|
|
_a.sent();
|
|
return [4 /*yield*/, this.attemptSendRequest(request, secondaryHas404, ++attempt)];
|
|
case 6: return [2 /*return*/, _a.sent()];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Decide whether to retry according to last HTTP response and retry counters.
|
|
*
|
|
* @protected
|
|
* @param {boolean} isPrimaryRetry
|
|
* @param {number} attempt
|
|
* @param {HttpOperationResponse} [response]
|
|
* @param {RestError} [err]
|
|
* @returns {boolean}
|
|
* @memberof StorageRetryPolicy
|
|
*/
|
|
StorageRetryPolicy.prototype.shouldRetry = function (isPrimaryRetry, attempt, response, err) {
|
|
if (attempt >= this.retryOptions.maxTries) {
|
|
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
|
|
var 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 (var _i = 0, retriableErrors_1 = retriableErrors; _i < retriableErrors_1.length; _i++) {
|
|
var retriableError = retriableErrors_1[_i];
|
|
if (err.name.toUpperCase().includes(retriableError) ||
|
|
err.message.toUpperCase().includes(retriableError) ||
|
|
(err.code &&
|
|
err.code
|
|
.toString()
|
|
.toUpperCase()
|
|
.includes(retriableError))) {
|
|
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) {
|
|
var statusCode = response ? response.status : err ? err.statusCode : 0;
|
|
if (!isPrimaryRetry && statusCode === 404) {
|
|
logger.info("RetryPolicy: Secondary access with 404, will retry.");
|
|
return true;
|
|
}
|
|
// Server internal error or server timeout
|
|
if (statusCode === 503 || statusCode === 500) {
|
|
logger.info("RetryPolicy: Will retry for status code " + statusCode + ".");
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
/**
|
|
* Delay a calculated time between retries.
|
|
*
|
|
* @private
|
|
* @param {boolean} isPrimaryRetry
|
|
* @param {number} attempt
|
|
* @param {AbortSignalLike} [abortSignal]
|
|
* @memberof StorageRetryPolicy
|
|
*/
|
|
StorageRetryPolicy.prototype.delay = function (isPrimaryRetry, attempt, abortSignal) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var delayTimeInMs;
|
|
return tslib.__generator(this, function (_a) {
|
|
delayTimeInMs = 0;
|
|
if (isPrimaryRetry) {
|
|
switch (this.retryOptions.retryPolicyType) {
|
|
case exports.StorageRetryPolicyType.EXPONENTIAL:
|
|
delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs, this.retryOptions.maxRetryDelayInMs);
|
|
break;
|
|
case exports.StorageRetryPolicyType.FIXED:
|
|
delayTimeInMs = this.retryOptions.retryDelayInMs;
|
|
break;
|
|
}
|
|
}
|
|
else {
|
|
delayTimeInMs = Math.random() * 1000;
|
|
}
|
|
logger.info("RetryPolicy: Delay for " + delayTimeInMs + "ms");
|
|
return [2 /*return*/, delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR)];
|
|
});
|
|
});
|
|
};
|
|
return StorageRetryPolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects.
|
|
*
|
|
* @export
|
|
* @class StorageRetryPolicyFactory
|
|
* @implements {RequestPolicyFactory}
|
|
*/
|
|
var StorageRetryPolicyFactory = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of StorageRetryPolicyFactory.
|
|
* @param {StorageRetryOptions} [retryOptions]
|
|
* @memberof StorageRetryPolicyFactory
|
|
*/
|
|
function StorageRetryPolicyFactory(retryOptions) {
|
|
this.retryOptions = retryOptions;
|
|
}
|
|
/**
|
|
* Creates a StorageRetryPolicy object.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @returns {StorageRetryPolicy}
|
|
* @memberof StorageRetryPolicyFactory
|
|
*/
|
|
StorageRetryPolicyFactory.prototype.create = function (nextPolicy, options) {
|
|
return new StorageRetryPolicy(nextPolicy, options, this.retryOptions);
|
|
};
|
|
return StorageRetryPolicyFactory;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* TelemetryPolicy is a policy used to tag user-agent header for every requests.
|
|
*
|
|
* @class TelemetryPolicy
|
|
* @extends {BaseRequestPolicy}
|
|
*/
|
|
var TelemetryPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(TelemetryPolicy, _super);
|
|
/**
|
|
* Creates an instance of TelemetryPolicy.
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @param {string} telemetry
|
|
* @memberof TelemetryPolicy
|
|
*/
|
|
function TelemetryPolicy(nextPolicy, options, telemetry) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.telemetry = telemetry;
|
|
return _this;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param {WebResource} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof TelemetryPolicy
|
|
*/
|
|
TelemetryPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
{
|
|
if (!request.headers) {
|
|
request.headers = new coreHttp.HttpHeaders();
|
|
}
|
|
if (!request.headers.get(HeaderConstants.USER_AGENT)) {
|
|
request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);
|
|
}
|
|
}
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
});
|
|
});
|
|
};
|
|
return TelemetryPolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* TelemetryPolicyFactory is a factory class helping generating {@link TelemetryPolicy} objects.
|
|
*
|
|
* @export
|
|
* @class TelemetryPolicyFactory
|
|
* @implements {RequestPolicyFactory}
|
|
*/
|
|
var TelemetryPolicyFactory = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of TelemetryPolicyFactory.
|
|
* @param {UserAgentOptions} [telemetry]
|
|
* @memberof TelemetryPolicyFactory
|
|
*/
|
|
function TelemetryPolicyFactory(telemetry) {
|
|
var userAgentInfo = [];
|
|
{
|
|
if (telemetry) {
|
|
var telemetryString = (telemetry.userAgentPrefix || "").replace(" ", "");
|
|
if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) {
|
|
userAgentInfo.push(telemetryString);
|
|
}
|
|
}
|
|
// e.g. azsdk-js-storageblob/10.0.0
|
|
var libInfo = "azsdk-js-storageblob/" + SDK_VERSION;
|
|
if (userAgentInfo.indexOf(libInfo) === -1) {
|
|
userAgentInfo.push(libInfo);
|
|
}
|
|
// e.g. (NODE-VERSION 4.9.1; Windows_NT 10.0.16299)
|
|
var runtimeInfo = "(NODE-VERSION " + process.version + "; " + os.type() + " " + os.release() + ")";
|
|
if (userAgentInfo.indexOf(runtimeInfo) === -1) {
|
|
userAgentInfo.push(runtimeInfo);
|
|
}
|
|
}
|
|
this.telemetryString = userAgentInfo.join(" ");
|
|
}
|
|
/**
|
|
* Creates a TelemetryPolicy object.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @returns {TelemetryPolicy}
|
|
* @memberof TelemetryPolicyFactory
|
|
*/
|
|
TelemetryPolicyFactory.prototype.create = function (nextPolicy, options) {
|
|
return new TelemetryPolicy(nextPolicy, options, this.telemetryString);
|
|
};
|
|
return TelemetryPolicyFactory;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var _defaultHttpClient = new coreHttp.DefaultHttpClient();
|
|
function getCachedDefaultHttpClient() {
|
|
return _defaultHttpClient;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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.
|
|
*
|
|
* @export
|
|
* @class Pipeline
|
|
*/
|
|
var Pipeline = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.
|
|
*
|
|
* @param {RequestPolicyFactory[]} factories
|
|
* @param {PipelineOptions} [options={}]
|
|
* @memberof Pipeline
|
|
*/
|
|
function Pipeline(factories, options) {
|
|
if (options === void 0) { options = {}; }
|
|
this.factories = factories;
|
|
// when options.httpClient is not specified, passing in a DefaultHttpClient instance to
|
|
// avoid each client creating its own http client.
|
|
this.options = tslib.__assign(tslib.__assign({}, options), { httpClient: options.httpClient || getCachedDefaultHttpClient() });
|
|
}
|
|
/**
|
|
* Transfer Pipeline object to ServiceClientOptions object which is required by
|
|
* ServiceClient constructor.
|
|
*
|
|
* @returns {ServiceClientOptions} The ServiceClientOptions object from this Pipeline.
|
|
* @memberof Pipeline
|
|
*/
|
|
Pipeline.prototype.toServiceClientOptions = function () {
|
|
return {
|
|
httpClient: this.options.httpClient,
|
|
requestPolicyFactories: this.factories
|
|
};
|
|
};
|
|
return Pipeline;
|
|
}());
|
|
/**
|
|
* Creates a new Pipeline object with Credential provided.
|
|
*
|
|
* @export
|
|
* @param {StorageSharedKeyCredential | AnonymousCredential | TokenCredential} 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 {StoragePipelineOptions} [pipelineOptions] Optional. Options.
|
|
* @returns {Pipeline} A new Pipeline object.
|
|
*/
|
|
function newPipeline(credential, pipelineOptions) {
|
|
// Order is important. Closer to the API at the top & closer to the network at the bottom.
|
|
// The credential's policy factory must appear close to the wire so it can sign any
|
|
// changes made by other factories (like UniqueRequestIDPolicyFactory)
|
|
if (pipelineOptions === void 0) { pipelineOptions = {}; }
|
|
var telemetryPolicy = new TelemetryPolicyFactory(pipelineOptions.userAgentOptions);
|
|
var factories = [
|
|
coreHttp.tracingPolicy({ userAgent: telemetryPolicy.telemetryString }),
|
|
coreHttp.keepAlivePolicy(pipelineOptions.keepAliveOptions),
|
|
telemetryPolicy,
|
|
coreHttp.generateClientRequestIdPolicy(),
|
|
new StorageBrowserPolicyFactory(),
|
|
coreHttp.deserializationPolicy(),
|
|
new StorageRetryPolicyFactory(pipelineOptions.retryOptions),
|
|
coreHttp.logPolicy({
|
|
logger: logger.info,
|
|
allowedHeaderNames: StorageBlobLoggingAllowedHeaderNames,
|
|
allowedQueryParameters: StorageBlobLoggingAllowedQueryParameters
|
|
})
|
|
];
|
|
{
|
|
// policies only avaiable in Node.js runtime, not in browsers
|
|
factories.push(coreHttp.proxyPolicy(pipelineOptions.proxyOptions));
|
|
factories.push(coreHttp.disableResponseDecompressionPolicy());
|
|
}
|
|
factories.push(coreHttp.isTokenCredential(credential)
|
|
? coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes)
|
|
: credential);
|
|
return new Pipeline(factories, pipelineOptions);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
var ABORT_ERROR = new abortController.AbortError("The operation was aborted.");
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* A Node.js ReadableStream will internally retry when internal ReadableStream unexpected ends.
|
|
*
|
|
* @class RetriableReadableStream
|
|
* @extends {Readable}
|
|
*/
|
|
var RetriableReadableStream = /** @class */ (function (_super) {
|
|
tslib.__extends(RetriableReadableStream, _super);
|
|
/**
|
|
* Creates an instance of RetriableReadableStream.
|
|
*
|
|
* @param {NodeJS.ReadableStream} source The current ReadableStream returned from getter
|
|
* @param {ReadableStreamGetter} getter A method calling downloading request returning
|
|
* a new ReadableStream from specified offset
|
|
* @param {number} offset Offset position in original data source to read
|
|
* @param {number} count How much data in original data source to read
|
|
* @param {RetriableReadableStreamOptions} [options={}]
|
|
* @memberof RetriableReadableStream
|
|
*/
|
|
function RetriableReadableStream(source, getter, offset, count, options) {
|
|
if (options === void 0) { options = {}; }
|
|
var _this = _super.call(this) || this;
|
|
_this.retries = 0;
|
|
_this.abortHandler = function () {
|
|
_this.source.pause();
|
|
_this.emit("error", ABORT_ERROR);
|
|
};
|
|
_this.aborter = options.abortSignal || abortController.AbortSignal.none;
|
|
_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.aborter.addEventListener("abort", _this.abortHandler);
|
|
_this.setSourceDataHandler();
|
|
_this.setSourceEndHandler();
|
|
_this.setSourceErrorHandler();
|
|
return _this;
|
|
}
|
|
RetriableReadableStream.prototype._read = function () {
|
|
if (!this.aborter.aborted) {
|
|
this.source.resume();
|
|
}
|
|
};
|
|
RetriableReadableStream.prototype.setSourceDataHandler = function () {
|
|
var _this = this;
|
|
this.source.on("data", function (data) {
|
|
if (_this.options.doInjectErrorOnce) {
|
|
_this.options.doInjectErrorOnce = undefined;
|
|
_this.source.pause();
|
|
_this.source.removeAllListeners("data");
|
|
_this.source.emit("end");
|
|
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();
|
|
}
|
|
});
|
|
};
|
|
RetriableReadableStream.prototype.setSourceEndHandler = function () {
|
|
var _this = this;
|
|
this.source.on("end", function () {
|
|
// console.log(
|
|
// `Source stream emits end, offset: ${
|
|
// this.offset
|
|
// }, dest end : ${this.end}`
|
|
// );
|
|
if (_this.offset - 1 === _this.end) {
|
|
_this.aborter.removeEventListener("abort", _this.abortHandler);
|
|
_this.push(null);
|
|
}
|
|
else if (_this.offset <= _this.end) {
|
|
// console.log(
|
|
// `retries: ${this.retries}, max retries: ${this.maxRetries}`
|
|
// );
|
|
if (_this.retries < _this.maxRetryRequests) {
|
|
_this.retries += 1;
|
|
_this.getter(_this.offset)
|
|
.then(function (newSource) {
|
|
_this.source = newSource;
|
|
_this.setSourceDataHandler();
|
|
_this.setSourceEndHandler();
|
|
_this.setSourceErrorHandler();
|
|
})
|
|
.catch(function (error) {
|
|
_this.emit("error", error);
|
|
});
|
|
}
|
|
else {
|
|
_this.emit("error", new Error(
|
|
// tslint:disable-next-line:max-line-length
|
|
"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.emit("error", new Error("Data corruption failure: Received more data than original request, data needed offset is " + _this.end + ", received offset: " + (_this.offset - 1)));
|
|
}
|
|
});
|
|
};
|
|
RetriableReadableStream.prototype.setSourceErrorHandler = function () {
|
|
var _this = this;
|
|
this.source.on("error", function (error) {
|
|
_this.emit("error", error);
|
|
});
|
|
};
|
|
return RetriableReadableStream;
|
|
}(stream.Readable));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* BlobDownloadResponse implements BlobDownloadResponseModel 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.
|
|
*
|
|
* @export
|
|
* @class BlobDownloadResponse
|
|
* @implements {BlobDownloadResponseModel}
|
|
*/
|
|
var BlobDownloadResponse = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of BlobDownloadResponse.
|
|
*
|
|
* @param {BlobDownloadResponseModel} originalResponse
|
|
* @param {ReadableStreamGetter} getter
|
|
* @param {number} offset
|
|
* @param {number} count
|
|
* @param {RetriableReadableStreamOptions} [options={}]
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
function BlobDownloadResponse(originalResponse, getter, offset, count, options) {
|
|
if (options === void 0) { options = {}; }
|
|
this.originalResponse = originalResponse;
|
|
this.blobDownloadStream = new RetriableReadableStream(this.originalResponse.readableStreamBody, getter, offset, count, options);
|
|
}
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "acceptRanges", {
|
|
/**
|
|
* Indicates that the service supports
|
|
* requests for partial file content.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.acceptRanges;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "cacheControl", {
|
|
/**
|
|
* Returns if it was previously specified
|
|
* for the file.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.cacheControl;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentDisposition", {
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the 'x-ms-content-disposition' header and specifies how to process the
|
|
* response.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentDisposition;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentEncoding", {
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Encoding request header.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentEncoding;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentLanguage", {
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Language request header.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentLanguage;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "blobSequenceNumber", {
|
|
/**
|
|
* The current sequence number for a
|
|
* page blob. This header is not returned for block blobs or append blobs.
|
|
*
|
|
* @readonly
|
|
* @type {(number | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.blobSequenceNumber;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "blobType", {
|
|
/**
|
|
* The blob's type. Possible values include:
|
|
* 'BlockBlob', 'PageBlob', 'AppendBlob'.
|
|
*
|
|
* @readonly
|
|
* @type {(BlobType | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.blobType;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentLength", {
|
|
/**
|
|
* The number of bytes present in the
|
|
* response body.
|
|
*
|
|
* @readonly
|
|
* @type {(number | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentLength;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentMD5", {
|
|
/**
|
|
* 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
|
|
* @type {(Uint8Array | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentMD5;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentRange", {
|
|
/**
|
|
* Indicates the range of bytes returned if
|
|
* the client requested a subset of the file by setting the Range request
|
|
* header.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentRange;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentType", {
|
|
/**
|
|
* The content type specified for the file.
|
|
* The default content type is 'application/octet-stream'
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentType;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copyCompletedOn", {
|
|
/**
|
|
* 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
|
|
* @type {(Date | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copyCompletedOn;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copyId", {
|
|
/**
|
|
* String identifier for the last attempted Copy
|
|
* File operation where this file was the destination file.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copyId;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copyProgress", {
|
|
/**
|
|
* 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
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copyProgress;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copySource", {
|
|
/**
|
|
* 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
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copySource;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copyStatus", {
|
|
/**
|
|
* State of the copy operation
|
|
* identified by 'x-ms-copy-id'. Possible values include: 'pending',
|
|
* 'success', 'aborted', 'failed'
|
|
*
|
|
* @readonly
|
|
* @type {(CopyStatusType | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copyStatus;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "copyStatusDescription", {
|
|
/**
|
|
* Only appears when
|
|
* x-ms-copy-status is failed or pending. Describes cause of fatal or
|
|
* non-fatal copy operation failure.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.copyStatusDescription;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "leaseDuration", {
|
|
/**
|
|
* When a blob is leased,
|
|
* specifies whether the lease is of infinite or fixed duration. Possible
|
|
* values include: 'infinite', 'fixed'.
|
|
*
|
|
* @readonly
|
|
* @type {(LeaseDurationType | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.leaseDuration;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "leaseState", {
|
|
/**
|
|
* Lease state of the blob. Possible
|
|
* values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
|
|
*
|
|
* @readonly
|
|
* @type {(LeaseStateType | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.leaseState;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "leaseStatus", {
|
|
/**
|
|
* The current lease status of the
|
|
* blob. Possible values include: 'locked', 'unlocked'.
|
|
*
|
|
* @readonly
|
|
* @type {(LeaseStatusType | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.leaseStatus;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "date", {
|
|
/**
|
|
* A UTC date/time value generated by the service that
|
|
* indicates the time at which the response was initiated.
|
|
*
|
|
* @readonly
|
|
* @type {(Date | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.date;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "blobCommittedBlockCount", {
|
|
/**
|
|
* The number of committed blocks
|
|
* present in the blob. This header is returned only for append blobs.
|
|
*
|
|
* @readonly
|
|
* @type {(number | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.blobCommittedBlockCount;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "etag", {
|
|
/**
|
|
* The ETag contains a value that you can use to
|
|
* perform operations conditionally, in quotes.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.etag;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "errorCode", {
|
|
/**
|
|
* The error code.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.errorCode;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "isServerEncrypted", {
|
|
/**
|
|
* 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
|
|
* @type {(boolean | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.isServerEncrypted;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "blobContentMD5", {
|
|
/**
|
|
* 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
|
|
* @type {(Uint8Array | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.blobContentMD5;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "lastModified", {
|
|
/**
|
|
* 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
|
|
* @type {(Date | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.lastModified;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "metadata", {
|
|
/**
|
|
* A name-value pair
|
|
* to associate with a file storage object.
|
|
*
|
|
* @readonly
|
|
* @type {(Metadata | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.metadata;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "requestId", {
|
|
/**
|
|
* This header uniquely identifies the request
|
|
* that was made and can be used for troubleshooting the request.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.requestId;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "clientRequestId", {
|
|
/**
|
|
* If a client request id header is sent in the request, this header will be present in the
|
|
* response with the same value.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.clientRequestId;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "version", {
|
|
/**
|
|
* Indicates the version of the File service used
|
|
* to execute the request.
|
|
*
|
|
* @readonly
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.version;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "encryptionKeySha256", {
|
|
/**
|
|
* 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
|
|
* @type {(string | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.encryptionKeySha256;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentCrc64", {
|
|
/**
|
|
* 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)
|
|
*
|
|
* @type {(Uint8Array | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.contentCrc64;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "contentAsBlob", {
|
|
/**
|
|
* The response body as a browser Blob.
|
|
* Always undefined in node.js.
|
|
*
|
|
* @readonly
|
|
* @type {(Promise<Blob> | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse.blobBody;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "readableStreamBody", {
|
|
/**
|
|
* 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
|
|
* @type {(NodeJS.ReadableStream | undefined)}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return coreHttp.isNode ? this.blobDownloadStream : undefined;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobDownloadResponse.prototype, "_response", {
|
|
/**
|
|
* The HTTP response.
|
|
*
|
|
* @type {HttpResponse}
|
|
* @memberof BlobDownloadResponse
|
|
*/
|
|
get: function () {
|
|
return this.originalResponse._response;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
return BlobDownloadResponse;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
/**
|
|
* Generate a range string. For example:
|
|
*
|
|
* "bytes=255-" or "bytes=0-511"
|
|
*
|
|
* @export
|
|
* @param {Range} iRange
|
|
* @returns {string}
|
|
*/
|
|
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 + "-";
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
(function (BlockBlobTier) {
|
|
/**
|
|
* Optmized 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 and stored for at least 180 days
|
|
* with flexible latency requirements (on the order of hours).
|
|
*/
|
|
BlockBlobTier["Archive"] = "Archive";
|
|
})(exports.BlockBlobTier || (exports.BlockBlobTier = {}));
|
|
(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";
|
|
})(exports.PremiumPageBlobTier || (exports.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;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* Reads a readable stream into buffer. Fill the buffer from offset to end.
|
|
*
|
|
* @export
|
|
* @param {NodeJS.ReadableStream} stream A Node.js Readable stream
|
|
* @param {Buffer} buffer Buffer to be filled, length must >= offset
|
|
* @param {number} offset From which position in the buffer to be filled, inclusive
|
|
* @param {number} end To which position in the buffer to be filled, exclusive
|
|
* @param {string} [encoding] Encoding of the Readable stream
|
|
* @returns {Promise<void>}
|
|
*/
|
|
function streamToBuffer(stream, buffer, offset, end, encoding) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var pos, count;
|
|
return tslib.__generator(this, function (_a) {
|
|
pos = 0;
|
|
count = end - offset;
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
stream.on("readable", function () {
|
|
if (pos >= count) {
|
|
resolve();
|
|
return;
|
|
}
|
|
var chunk = stream.read();
|
|
if (!chunk) {
|
|
return;
|
|
}
|
|
if (typeof chunk === "string") {
|
|
chunk = Buffer.from(chunk, encoding);
|
|
}
|
|
// How much data needed in this chunk
|
|
var chunkLength = pos + chunk.length > count ? count - pos : chunk.length;
|
|
buffer.fill(chunk.slice(0, chunkLength), offset + pos, offset + pos + chunkLength);
|
|
pos += chunkLength;
|
|
});
|
|
stream.on("end", function () {
|
|
if (pos < count) {
|
|
reject(new Error("Stream drains before getting enough data needed. Data read: " + pos + ", data need: " + count));
|
|
}
|
|
resolve();
|
|
});
|
|
stream.on("error", reject);
|
|
})];
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* Reads a readable stream into buffer entirely.
|
|
*
|
|
* @export
|
|
* @param {NodeJS.ReadableStream} stream A Node.js Readable stream
|
|
* @param {Buffer} buffer Buffer to be filled, length must >= offset
|
|
* @param {string} [encoding] Encoding of the Readable stream
|
|
* @returns {Promise<number>} with the count of bytes read.
|
|
* @throws {RangeError} If buffer size is not big enough.
|
|
*/
|
|
function streamToBuffer2(stream, buffer, encoding) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var pos, bufferSize;
|
|
return tslib.__generator(this, function (_a) {
|
|
pos = 0;
|
|
bufferSize = buffer.length;
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
stream.on("readable", function () {
|
|
var chunk = stream.read();
|
|
if (!chunk) {
|
|
return;
|
|
}
|
|
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", function () {
|
|
resolve(pos);
|
|
});
|
|
stream.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.
|
|
*
|
|
* @export
|
|
* @param {NodeJS.ReadableStream} rs The read stream.
|
|
* @param {string} file Destination file path.
|
|
* @returns {Promise<void>}
|
|
*/
|
|
function readStreamToLocalFile(rs, file) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
var ws = fs.createWriteStream(file);
|
|
rs.on("error", function (err) {
|
|
reject(err);
|
|
});
|
|
ws.on("error", function (err) {
|
|
reject(err);
|
|
});
|
|
ws.on("close", resolve);
|
|
rs.pipe(ws);
|
|
})];
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Promisified version of fs.stat().
|
|
*/
|
|
var fsStat = util.promisify(fs.stat);
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* Credential policy used to sign HTTP(S) requests before sending. This is an
|
|
* abstract class.
|
|
*
|
|
* @export
|
|
* @abstract
|
|
* @class CredentialPolicy
|
|
* @extends {BaseRequestPolicy}
|
|
*/
|
|
var CredentialPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(CredentialPolicy, _super);
|
|
function CredentialPolicy() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param {WebResource} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof CredentialPolicy
|
|
*/
|
|
CredentialPolicy.prototype.sendRequest = function (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}.
|
|
*
|
|
* @protected
|
|
* @abstract
|
|
* @param {WebResource} request
|
|
* @returns {WebResource}
|
|
* @memberof CredentialPolicy
|
|
*/
|
|
CredentialPolicy.prototype.signRequest = function (request) {
|
|
// Child classes must override this method with request signing. This method
|
|
// will be executed in sendRequest().
|
|
return request;
|
|
};
|
|
return CredentialPolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key.
|
|
*
|
|
* @export
|
|
* @class StorageSharedKeyCredentialPolicy
|
|
* @extends {CredentialPolicy}
|
|
*/
|
|
var StorageSharedKeyCredentialPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(StorageSharedKeyCredentialPolicy, _super);
|
|
/**
|
|
* Creates an instance of StorageSharedKeyCredentialPolicy.
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @param {StorageSharedKeyCredential} factory
|
|
* @memberof StorageSharedKeyCredentialPolicy
|
|
*/
|
|
function StorageSharedKeyCredentialPolicy(nextPolicy, options, factory) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.factory = factory;
|
|
return _this;
|
|
}
|
|
/**
|
|
* Signs request.
|
|
*
|
|
* @protected
|
|
* @param {WebResource} request
|
|
* @returns {WebResource}
|
|
* @memberof StorageSharedKeyCredentialPolicy
|
|
*/
|
|
StorageSharedKeyCredentialPolicy.prototype.signRequest = function (request) {
|
|
request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString());
|
|
if (request.body && typeof request.body === "string" && request.body.length > 0) {
|
|
request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
|
|
}
|
|
var stringToSign = [
|
|
request.method.toUpperCase(),
|
|
this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE),
|
|
this.getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING),
|
|
this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH),
|
|
this.getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5),
|
|
this.getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE),
|
|
this.getHeaderValueToSign(request, HeaderConstants.DATE),
|
|
this.getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE),
|
|
this.getHeaderValueToSign(request, HeaderConstants.IF_MATCH),
|
|
this.getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH),
|
|
this.getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE),
|
|
this.getHeaderValueToSign(request, HeaderConstants.RANGE)
|
|
].join("\n") +
|
|
"\n" +
|
|
this.getCanonicalizedHeadersString(request) +
|
|
this.getCanonicalizedResourceString(request);
|
|
var signature = this.factory.computeHMACSHA256(stringToSign);
|
|
request.headers.set(HeaderConstants.AUTHORIZATION, "SharedKey " + this.factory.accountName + ":" + signature);
|
|
// Workaround for https://github.com/axios/axios/issues/2107
|
|
// We should always keep the 'content-length' header once the issue is solved
|
|
// For a better explanation about this workaround, look here: https://github.com/Azure/azure-sdk-for-js/pull/3273
|
|
if (typeof request.body !== "function" && !(request.body && request.onUploadProgress)) {
|
|
request.headers.remove(HeaderConstants.CONTENT_LENGTH);
|
|
}
|
|
// 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://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
|
|
*
|
|
* @private
|
|
* @param {WebResource} request
|
|
* @param {string} headerName
|
|
* @returns {string}
|
|
* @memberof StorageSharedKeyCredentialPolicy
|
|
*/
|
|
StorageSharedKeyCredentialPolicy.prototype.getHeaderValueToSign = function (request, headerName) {
|
|
var 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://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
|
|
if (headerName === 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.
|
|
*
|
|
* @private
|
|
* @param {WebResource} request
|
|
* @returns {string}
|
|
* @memberof StorageSharedKeyCredentialPolicy
|
|
*/
|
|
StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedHeadersString = function (request) {
|
|
var headersArray = request.headers.headersArray().filter(function (value) {
|
|
return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE);
|
|
});
|
|
headersArray.sort(function (a, b) {
|
|
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
|
|
});
|
|
// Remove duplicate headers
|
|
headersArray = headersArray.filter(function (value, index, array) {
|
|
if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
var canonicalizedHeadersStringToSign = "";
|
|
headersArray.forEach(function (header) {
|
|
canonicalizedHeadersStringToSign += header.name
|
|
.toLowerCase()
|
|
.trimRight() + ":" + header.value.trimLeft() + "\n";
|
|
});
|
|
return canonicalizedHeadersStringToSign;
|
|
};
|
|
/**
|
|
* Retrieves the webResource canonicalized resource string.
|
|
*
|
|
* @private
|
|
* @param {WebResource} request
|
|
* @returns {string}
|
|
* @memberof StorageSharedKeyCredentialPolicy
|
|
*/
|
|
StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedResourceString = function (request) {
|
|
var path = getURLPath(request.url) || "/";
|
|
var canonicalizedResourceString = "";
|
|
canonicalizedResourceString += "/" + this.factory.accountName + path;
|
|
var queries = getURLQueries(request.url);
|
|
var lowercaseQueries = {};
|
|
if (queries) {
|
|
var queryKeys = [];
|
|
for (var key in queries) {
|
|
if (queries.hasOwnProperty(key)) {
|
|
var lowercaseKey = key.toLowerCase();
|
|
lowercaseQueries[lowercaseKey] = queries[key];
|
|
queryKeys.push(lowercaseKey);
|
|
}
|
|
}
|
|
queryKeys.sort();
|
|
for (var _i = 0, queryKeys_1 = queryKeys; _i < queryKeys_1.length; _i++) {
|
|
var key = queryKeys_1[_i];
|
|
canonicalizedResourceString += "\n" + key + ":" + decodeURIComponent(lowercaseQueries[key]);
|
|
}
|
|
}
|
|
return canonicalizedResourceString;
|
|
};
|
|
return StorageSharedKeyCredentialPolicy;
|
|
}(CredentialPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @abstract
|
|
* @class Credential
|
|
*/
|
|
var Credential = /** @class */ (function () {
|
|
function Credential() {
|
|
}
|
|
/**
|
|
* Creates a RequestPolicy object.
|
|
*
|
|
* @param {RequestPolicy} _nextPolicy
|
|
* @param {RequestPolicyOptions} _options
|
|
* @returns {RequestPolicy}
|
|
* @memberof Credential
|
|
*/
|
|
Credential.prototype.create = function (
|
|
// tslint:disable-next-line:variable-name
|
|
_nextPolicy,
|
|
// tslint:disable-next-line:variable-name
|
|
_options) {
|
|
throw new Error("Method should be implemented in children classes.");
|
|
};
|
|
return Credential;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* StorageSharedKeyCredential for account key authorization of Azure Storage service.
|
|
*
|
|
* @export
|
|
* @class StorageSharedKeyCredential
|
|
* @extends {Credential}
|
|
*/
|
|
var StorageSharedKeyCredential = /** @class */ (function (_super) {
|
|
tslib.__extends(StorageSharedKeyCredential, _super);
|
|
/**
|
|
* Creates an instance of StorageSharedKeyCredential.
|
|
* @param {string} accountName
|
|
* @param {string} accountKey
|
|
* @memberof StorageSharedKeyCredential
|
|
*/
|
|
function StorageSharedKeyCredential(accountName, accountKey) {
|
|
var _this = _super.call(this) || this;
|
|
_this.accountName = accountName;
|
|
_this.accountKey = Buffer.from(accountKey, "base64");
|
|
return _this;
|
|
}
|
|
/**
|
|
* Creates a StorageSharedKeyCredentialPolicy object.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @returns {StorageSharedKeyCredentialPolicy}
|
|
* @memberof StorageSharedKeyCredential
|
|
*/
|
|
StorageSharedKeyCredential.prototype.create = function (nextPolicy, options) {
|
|
return new StorageSharedKeyCredentialPolicy(nextPolicy, options, this);
|
|
};
|
|
/**
|
|
* Generates a hash signature for an HTTP request or for a SAS.
|
|
*
|
|
* @param {string} stringToSign
|
|
* @returns {string}
|
|
* @memberof StorageSharedKeyCredential
|
|
*/
|
|
StorageSharedKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) {
|
|
return crypto.createHmac("sha256", this.accountKey)
|
|
.update(stringToSign, "utf8")
|
|
.digest("base64");
|
|
};
|
|
return StorageSharedKeyCredential;
|
|
}(Credential));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources
|
|
* or for use with Shared Access Signatures (SAS).
|
|
*
|
|
* @export
|
|
* @class AnonymousCredentialPolicy
|
|
* @extends {CredentialPolicy}
|
|
*/
|
|
var AnonymousCredentialPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(AnonymousCredentialPolicy, _super);
|
|
/**
|
|
* Creates an instance of AnonymousCredentialPolicy.
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @memberof AnonymousCredentialPolicy
|
|
*/
|
|
function AnonymousCredentialPolicy(nextPolicy, options) {
|
|
return _super.call(this, nextPolicy, options) || this;
|
|
}
|
|
return AnonymousCredentialPolicy;
|
|
}(CredentialPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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).
|
|
*
|
|
* @export
|
|
* @class AnonymousCredential
|
|
* @extends {Credential}
|
|
*/
|
|
var AnonymousCredential = /** @class */ (function (_super) {
|
|
tslib.__extends(AnonymousCredential, _super);
|
|
function AnonymousCredential() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
/**
|
|
* Creates an {@link AnonymousCredentialPolicy} object.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @returns {AnonymousCredentialPolicy}
|
|
* @memberof AnonymousCredential
|
|
*/
|
|
AnonymousCredential.prototype.create = function (nextPolicy, options) {
|
|
return new AnonymousCredentialPolicy(nextPolicy, options);
|
|
};
|
|
return AnonymousCredential;
|
|
}(Credential));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* States for Batch.
|
|
*
|
|
* @enum {number}
|
|
*/
|
|
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.
|
|
*
|
|
* @export
|
|
* @class Batch
|
|
*/
|
|
var Batch = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of Batch.
|
|
* @param {number} [concurrency=5]
|
|
* @memberof Batch
|
|
*/
|
|
function Batch(concurrency) {
|
|
if (concurrency === void 0) { concurrency = 5; }
|
|
/**
|
|
* Number of active operations under execution.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof Batch
|
|
*/
|
|
this.actives = 0;
|
|
/**
|
|
* Number of completed operations under execution.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof Batch
|
|
*/
|
|
this.completed = 0;
|
|
/**
|
|
* Offset of next operation to be executed.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof Batch
|
|
*/
|
|
this.offset = 0;
|
|
/**
|
|
* Operation array to be executed.
|
|
*
|
|
* @private
|
|
* @type {Operation[]}
|
|
* @memberof Batch
|
|
*/
|
|
this.operations = [];
|
|
/**
|
|
* States of Batch. When an error happens, state will turn into error.
|
|
* Batch will stop execute left operations.
|
|
*
|
|
* @private
|
|
* @type {BatchStates}
|
|
* @memberof Batch
|
|
*/
|
|
this.state = BatchStates.Good;
|
|
if (concurrency < 1) {
|
|
throw new RangeError("concurrency must be larger than 0");
|
|
}
|
|
this.concurrency = concurrency;
|
|
this.emitter = new events.EventEmitter();
|
|
}
|
|
/**
|
|
* Add a operation into queue.
|
|
*
|
|
* @param {Operation} operation
|
|
* @memberof Batch
|
|
*/
|
|
Batch.prototype.addOperation = function (operation) {
|
|
var _this = this;
|
|
this.operations.push(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var error_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
_a.trys.push([0, 2, , 3]);
|
|
this.actives++;
|
|
return [4 /*yield*/, operation()];
|
|
case 1:
|
|
_a.sent();
|
|
this.actives--;
|
|
this.completed++;
|
|
this.parallelExecute();
|
|
return [3 /*break*/, 3];
|
|
case 2:
|
|
error_1 = _a.sent();
|
|
this.emitter.emit("error", error_1);
|
|
return [3 /*break*/, 3];
|
|
case 3: return [2 /*return*/];
|
|
}
|
|
});
|
|
}); });
|
|
};
|
|
/**
|
|
* Start execute operations in the queue.
|
|
*
|
|
* @returns {Promise<void>}
|
|
* @memberof Batch
|
|
*/
|
|
Batch.prototype.do = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
if (this.operations.length === 0) {
|
|
return [2 /*return*/, Promise.resolve()];
|
|
}
|
|
this.parallelExecute();
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
_this.emitter.on("finish", resolve);
|
|
_this.emitter.on("error", function (error) {
|
|
_this.state = BatchStates.Error;
|
|
reject(error);
|
|
});
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Get next operation to be executed. Return null when reaching ends.
|
|
*
|
|
* @private
|
|
* @returns {(Operation | null)}
|
|
* @memberof Batch
|
|
*/
|
|
Batch.prototype.nextOperation = function () {
|
|
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.
|
|
*
|
|
* @private
|
|
* @returns {void}
|
|
* @memberof Batch
|
|
*/
|
|
Batch.prototype.parallelExecute = function () {
|
|
if (this.state === BatchStates.Error) {
|
|
return;
|
|
}
|
|
if (this.completed >= this.operations.length) {
|
|
this.emitter.emit("finish");
|
|
return;
|
|
}
|
|
while (this.actives < this.concurrency) {
|
|
var operation = this.nextOperation();
|
|
if (operation) {
|
|
operation();
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
return Batch;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Creates a span using the global tracer.
|
|
* @param name The name of the operation being performed.
|
|
* @param tracingOptions The options for the underlying http request.
|
|
*/
|
|
function createSpan(operationName, tracingOptions) {
|
|
if (tracingOptions === void 0) { tracingOptions = {}; }
|
|
var tracer = coreTracing.getTracer();
|
|
var spanOptions = tslib.__assign(tslib.__assign({}, tracingOptions.spanOptions), { kind: api.SpanKind.INTERNAL });
|
|
var span = tracer.startSpan("Azure.Storage.Blob." + operationName, spanOptions);
|
|
span.setAttribute("az.namespace", "Microsoft.Storage");
|
|
var newOptions = tracingOptions.spanOptions || {};
|
|
if (span.isRecording()) {
|
|
newOptions = tslib.__assign(tslib.__assign({}, tracingOptions.spanOptions), { parent: span.context(), attributes: tslib.__assign(tslib.__assign({}, spanOptions.attributes), { "az.namespace": "Microsoft.Storage" }) });
|
|
}
|
|
return {
|
|
span: span,
|
|
spanOptions: newOptions
|
|
};
|
|
}
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is
|
|
* regenerated.
|
|
*/
|
|
var packageName = "azure-storage-blob";
|
|
var packageVersion = "12.1.2";
|
|
var StorageClientContext = /** @class */ (function (_super) {
|
|
tslib.__extends(StorageClientContext, _super);
|
|
/**
|
|
* Initializes a new instance of the StorageClientContext class.
|
|
* @param url The URL of the service account, container, or blob that is the targe of the desired
|
|
* operation.
|
|
* @param [options] The parameter options
|
|
*/
|
|
function StorageClientContext(url, options) {
|
|
var _this = this;
|
|
if (url == undefined) {
|
|
throw new Error("'url' cannot be null.");
|
|
}
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
if (!options.userAgent) {
|
|
var defaultUserAgent = coreHttp.getDefaultUserAgentValue();
|
|
options.userAgent = packageName + "/" + packageVersion + " " + defaultUserAgent;
|
|
}
|
|
_this = _super.call(this, undefined, options) || this;
|
|
_this.version = '2019-07-07';
|
|
_this.baseUri = "{url}";
|
|
_this.requestContentType = "application/json; charset=utf-8";
|
|
_this.url = url;
|
|
return _this;
|
|
}
|
|
return StorageClientContext;
|
|
}(coreHttp.ServiceClient));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient}
|
|
* and etc.
|
|
*
|
|
* @export
|
|
* @class StorageClient
|
|
*/
|
|
var StorageClient = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of StorageClient.
|
|
* @param {string} url url to resource
|
|
* @param {Pipeline} pipeline request policy pipeline.
|
|
* @memberof StorageClient
|
|
*/
|
|
function StorageClient(url, pipeline) {
|
|
// URL should be encoded and only once, protocol layer shouldn't encode URL again
|
|
this.url = escapeURLPath(url);
|
|
this.accountName = getAccountNameFromUrl(url);
|
|
this.pipeline = pipeline;
|
|
this.storageClientContext = new StorageClientContext(this.url, pipeline.toServiceClientOptions());
|
|
this.isHttps = iEqual(getURLScheme(this.url) || "", "https");
|
|
this.credential = new AnonymousCredential();
|
|
for (var _i = 0, _a = this.pipeline.factories; _i < _a.length; _i++) {
|
|
var factory = _a[_i];
|
|
if ((coreHttp.isNode && factory instanceof StorageSharedKeyCredential) ||
|
|
factory instanceof AnonymousCredential ||
|
|
coreHttp.isTokenCredential(factory)) {
|
|
this.credential = factory;
|
|
}
|
|
}
|
|
// Override protocol layer's default content-type
|
|
var storageClientContext = this.storageClientContext;
|
|
storageClientContext.requestContentType = undefined;
|
|
}
|
|
return StorageClient;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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 <= 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.
|
|
* @export
|
|
* @class BufferScheduler
|
|
*/
|
|
var BufferScheduler = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of BufferScheduler.
|
|
*
|
|
* @param {Readable} readable A Node.js Readable stream
|
|
* @param {number} bufferSize Buffer size of every maintained buffer
|
|
* @param {number} maxBuffers How many buffers can be allocated
|
|
* @param {OutgoingHandler} outgoingHandler An async function scheduled to be
|
|
* triggered when a buffer fully filled
|
|
* with stream data
|
|
* @param {number} concurrency Concurrency of executing outgoingHandlers (>0)
|
|
* @param {string} [encoding] [Optional] Encoding of Readable stream when it's a string stream
|
|
* @memberof BufferScheduler
|
|
*/
|
|
function BufferScheduler(readable, bufferSize, maxBuffers, outgoingHandler, concurrency, encoding) {
|
|
/**
|
|
* An internal event emitter.
|
|
*
|
|
* @private
|
|
* @type {EventEmitter}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.emitter = new events.EventEmitter();
|
|
/**
|
|
* An internal offset marker to track data offset in bytes of next outgoingHandler.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.offset = 0;
|
|
/**
|
|
* An internal marker to track whether stream is end.
|
|
*
|
|
* @private
|
|
* @type {boolean}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.isStreamEnd = false;
|
|
/**
|
|
* An internal marker to track whether stream or outgoingHandler returns error.
|
|
*
|
|
* @private
|
|
* @type {boolean}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.isError = false;
|
|
/**
|
|
* How many handlers are executing.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.executingOutgoingHandlers = 0;
|
|
/**
|
|
* How many buffers have been allocated.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.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.
|
|
*
|
|
* @private
|
|
* @type {Buffer[]}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.unresolvedDataArray = [];
|
|
/**
|
|
* How much data consisted in unresolvedDataArray.
|
|
*
|
|
* @private
|
|
* @type {number}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.unresolvedLength = 0;
|
|
/**
|
|
* The array includes all the available buffers can be used to fill data from stream.
|
|
*
|
|
* @private
|
|
* @type {Buffer[]}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.incoming = [];
|
|
/**
|
|
* The array (queue) includes all the buffers filled from stream data.
|
|
*
|
|
* @private
|
|
* @type {Buffer[]}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
this.outgoing = [];
|
|
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.
|
|
*
|
|
* @returns {Promise<void>}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.do = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
_this.readable.on("data", function (data) {
|
|
data = typeof data === "string" ? Buffer.from(data, _this.encoding) : data;
|
|
_this.appendUnresolvedData(data);
|
|
if (!_this.resolveData()) {
|
|
_this.readable.pause();
|
|
}
|
|
});
|
|
_this.readable.on("error", function (err) {
|
|
_this.emitter.emit("error", err);
|
|
});
|
|
_this.readable.on("end", function () {
|
|
_this.isStreamEnd = true;
|
|
_this.emitter.emit("checkEnd");
|
|
});
|
|
_this.emitter.on("error", function (err) {
|
|
_this.isError = true;
|
|
_this.readable.pause();
|
|
reject(err);
|
|
});
|
|
_this.emitter.on("checkEnd", function () {
|
|
if (_this.outgoing.length > 0) {
|
|
_this.triggerOutgoingHandlers();
|
|
return;
|
|
}
|
|
if (_this.isStreamEnd && _this.executingOutgoingHandlers === 0) {
|
|
if (_this.unresolvedLength > 0 && _this.unresolvedLength < _this.bufferSize) {
|
|
_this.outgoingHandler(_this.shiftBufferFromUnresolvedDataArray(), _this.offset)
|
|
.then(resolve)
|
|
.catch(reject);
|
|
}
|
|
else if (_this.unresolvedLength >= _this.bufferSize) {
|
|
return;
|
|
}
|
|
else {
|
|
resolve();
|
|
}
|
|
}
|
|
});
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Insert a new data into unresolved array.
|
|
*
|
|
* @private
|
|
* @param {Buffer} data
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.appendUnresolvedData = function (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.
|
|
*
|
|
* @private
|
|
* @returns {Buffer}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.shiftBufferFromUnresolvedDataArray = function () {
|
|
if (this.unresolvedLength >= this.bufferSize) {
|
|
if (this.bufferSize === this.unresolvedDataArray[0].length) {
|
|
this.unresolvedLength -= this.bufferSize;
|
|
return this.unresolvedDataArray.shift();
|
|
}
|
|
// Lazy concat because Buffer.concat highly drops performance
|
|
var merged = Buffer.concat(this.unresolvedDataArray, this.unresolvedLength);
|
|
var buffer = merged.slice(0, this.bufferSize);
|
|
merged = merged.slice(this.bufferSize);
|
|
this.unresolvedDataArray = [merged];
|
|
this.unresolvedLength -= buffer.length;
|
|
return buffer;
|
|
}
|
|
else if (this.unresolvedLength > 0) {
|
|
var merged = Buffer.concat(this.unresolvedDataArray, this.unresolvedLength);
|
|
this.unresolvedDataArray = [];
|
|
this.unresolvedLength = 0;
|
|
return merged;
|
|
}
|
|
else {
|
|
return Buffer.allocUnsafe(0);
|
|
}
|
|
};
|
|
/**
|
|
* 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.
|
|
*
|
|
* @private
|
|
* @returns {boolean} Return false when buffers in incoming are not enough, else true.
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.resolveData = function () {
|
|
while (this.unresolvedLength >= this.bufferSize) {
|
|
var buffer = void 0;
|
|
if (this.incoming.length > 0) {
|
|
buffer = this.incoming.shift();
|
|
}
|
|
else {
|
|
if (this.numBuffers < this.maxBuffers) {
|
|
buffer = Buffer.allocUnsafe(this.bufferSize);
|
|
this.numBuffers++;
|
|
}
|
|
else {
|
|
// No available buffer, wait for buffer returned
|
|
return false;
|
|
}
|
|
}
|
|
buffer.fill(this.shiftBufferFromUnresolvedDataArray());
|
|
this.outgoing.push(buffer);
|
|
this.triggerOutgoingHandlers();
|
|
}
|
|
return true;
|
|
};
|
|
/**
|
|
* Try to trigger a outgoing handler for every buffer in outgoing. Stop when
|
|
* concurrency reaches.
|
|
*
|
|
* @private
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.triggerOutgoingHandlers = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var buffer;
|
|
return tslib.__generator(this, function (_a) {
|
|
do {
|
|
if (this.executingOutgoingHandlers >= this.concurrency) {
|
|
return [2 /*return*/];
|
|
}
|
|
buffer = this.outgoing.shift();
|
|
if (buffer) {
|
|
this.triggerOutgoingHandler(buffer);
|
|
}
|
|
} while (buffer);
|
|
return [2 /*return*/];
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Trigger a outgoing handler for a buffer shifted from outgoing.
|
|
*
|
|
* @private
|
|
* @param {Buffer} buffer
|
|
* @returns {Promise<any>}
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.triggerOutgoingHandler = function (buffer) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var bufferLength, err_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
bufferLength = buffer.length;
|
|
this.executingOutgoingHandlers++;
|
|
this.offset += bufferLength;
|
|
_a.label = 1;
|
|
case 1:
|
|
_a.trys.push([1, 3, , 4]);
|
|
return [4 /*yield*/, this.outgoingHandler(buffer, this.offset - bufferLength)];
|
|
case 2:
|
|
_a.sent();
|
|
return [3 /*break*/, 4];
|
|
case 3:
|
|
err_1 = _a.sent();
|
|
this.emitter.emit("error", err_1);
|
|
return [2 /*return*/];
|
|
case 4:
|
|
this.executingOutgoingHandlers--;
|
|
this.reuseBuffer(buffer);
|
|
this.emitter.emit("checkEnd");
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Return buffer used by outgoing handler into incoming.
|
|
*
|
|
* @private
|
|
* @param {Buffer} buffer
|
|
* @memberof BufferScheduler
|
|
*/
|
|
BufferScheduler.prototype.reuseBuffer = function (buffer) {
|
|
this.incoming.push(buffer);
|
|
if (!this.isError && this.resolveData() && !this.isStreamEnd) {
|
|
this.readable.resume();
|
|
}
|
|
};
|
|
return BufferScheduler;
|
|
}());
|
|
|
|
/**
|
|
* 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) {
|
|
var pageRange = (response._response.parsedBody.pageRange || []).map(function (x) { return ({
|
|
offset: x.start,
|
|
count: x.end - x.start
|
|
}); });
|
|
var clearRange = (response._response.parsedBody.clearRange || []).map(function (x) { return ({
|
|
offset: x.start,
|
|
count: x.end - x.start
|
|
}); });
|
|
return tslib.__assign(tslib.__assign({}, response), { pageRange: pageRange,
|
|
clearRange: clearRange, _response: tslib.__assign(tslib.__assign({}, response._response), { parsedBody: {
|
|
pageRange: pageRange,
|
|
clearRange: clearRange
|
|
} }) });
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* This is the poller returned by {@link BlobClient.beginCopyFromURL}.
|
|
* This can not be instantiated directly outside of this package.
|
|
*
|
|
* @ignore
|
|
*/
|
|
var BlobBeginCopyFromUrlPoller = /** @class */ (function (_super) {
|
|
tslib.__extends(BlobBeginCopyFromUrlPoller, _super);
|
|
function BlobBeginCopyFromUrlPoller(options) {
|
|
var _this = this;
|
|
var blobClient = options.blobClient, copySource = options.copySource, _a = options.intervalInMs, intervalInMs = _a === void 0 ? 15000 : _a, onProgress = options.onProgress, resumeFrom = options.resumeFrom, startCopyFromURLOptions = options.startCopyFromURLOptions;
|
|
var state;
|
|
if (resumeFrom) {
|
|
state = JSON.parse(resumeFrom).state;
|
|
}
|
|
var operation = makeBlobBeginCopyFromURLPollOperation(tslib.__assign(tslib.__assign({}, state), { blobClient: blobClient,
|
|
copySource: copySource,
|
|
startCopyFromURLOptions: startCopyFromURLOptions }));
|
|
_this = _super.call(this, operation) || this;
|
|
if (typeof onProgress === "function") {
|
|
_this.onProgress(onProgress);
|
|
}
|
|
_this.intervalInMs = intervalInMs;
|
|
return _this;
|
|
}
|
|
BlobBeginCopyFromUrlPoller.prototype.delay = function () {
|
|
return coreHttp.delay(this.intervalInMs);
|
|
};
|
|
return BlobBeginCopyFromUrlPoller;
|
|
}(coreLro.Poller));
|
|
/**
|
|
* 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.
|
|
* @ignore
|
|
*/
|
|
var cancel = function cancel(options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var state, copyId;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
state = this.state;
|
|
copyId = state.copyId;
|
|
if (state.isCompleted) {
|
|
return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
|
|
}
|
|
if (!copyId) {
|
|
state.isCancelled = true;
|
|
return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
|
|
}
|
|
// if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
|
|
return [4 /*yield*/, state.blobClient.abortCopyFromURL(copyId, {
|
|
abortSignal: options.abortSignal
|
|
})];
|
|
case 1:
|
|
// if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
|
|
_a.sent();
|
|
state.isCancelled = true;
|
|
return [2 /*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.
|
|
* @ignore
|
|
*/
|
|
var update = function update(options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var state, blobClient, copySource, startCopyFromURLOptions, result, result, copyStatus, copyProgress, prevCopyProgress, err_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
state = this.state;
|
|
blobClient = state.blobClient, copySource = state.copySource, startCopyFromURLOptions = state.startCopyFromURLOptions;
|
|
if (!!state.isStarted) return [3 /*break*/, 2];
|
|
state.isStarted = true;
|
|
return [4 /*yield*/, blobClient.startCopyFromURL(copySource, startCopyFromURLOptions)];
|
|
case 1:
|
|
result = _a.sent();
|
|
// copyId is needed to abort
|
|
state.copyId = result.copyId;
|
|
if (result.copyStatus === "success") {
|
|
state.result = result;
|
|
state.isCompleted = true;
|
|
}
|
|
return [3 /*break*/, 6];
|
|
case 2:
|
|
if (!!state.isCompleted) return [3 /*break*/, 6];
|
|
_a.label = 3;
|
|
case 3:
|
|
_a.trys.push([3, 5, , 6]);
|
|
return [4 /*yield*/, state.blobClient.getProperties({ abortSignal: options.abortSignal })];
|
|
case 4:
|
|
result = _a.sent();
|
|
copyStatus = result.copyStatus, copyProgress = result.copyProgress;
|
|
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;
|
|
}
|
|
return [3 /*break*/, 6];
|
|
case 5:
|
|
err_1 = _a.sent();
|
|
state.error = err_1;
|
|
state.isCompleted = true;
|
|
return [3 /*break*/, 6];
|
|
case 6: return [2 /*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.
|
|
* @ignore
|
|
*/
|
|
var toString = function toString() {
|
|
return JSON.stringify({ state: this.state }, function (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.
|
|
* @ignore
|
|
*/
|
|
function makeBlobBeginCopyFromURLPollOperation(state) {
|
|
return {
|
|
state: tslib.__assign({}, state),
|
|
cancel: cancel,
|
|
toString: toString,
|
|
update: update
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* A BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob,
|
|
* append blob, or page blob.
|
|
*
|
|
* @export
|
|
* @class BlobClient
|
|
*/
|
|
var BlobClient = /** @class */ (function (_super) {
|
|
tslib.__extends(BlobClient, _super);
|
|
function BlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
|
|
var _a;
|
|
var _this = this;
|
|
options = options || {};
|
|
var pipeline;
|
|
var url;
|
|
if (credentialOrPipelineOrContainerName instanceof Pipeline) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
|
|
coreHttp.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;
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
else if (credentialOrPipelineOrContainerName &&
|
|
typeof credentialOrPipelineOrContainerName === "string" &&
|
|
blobNameOrOptions &&
|
|
typeof blobNameOrOptions === "string") {
|
|
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
|
|
var containerName = credentialOrPipelineOrContainerName;
|
|
var blobName = blobNameOrOptions;
|
|
var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
pipeline = newPipeline(sharedKeyCredential, options);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
url =
|
|
appendToURLPath(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");
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
(_a = _this.getBlobAndContainerNamesFromUrl(), _this._name = _a.blobName, _this._containerName = _a.containerName);
|
|
_this.blobContext = new Blob$1(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
Object.defineProperty(BlobClient.prototype, "name", {
|
|
/**
|
|
* The name of the blob.
|
|
*/
|
|
get: function () {
|
|
return this._name;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobClient.prototype, "containerName", {
|
|
/**
|
|
* The name of the storage container the blob is associated with.
|
|
*/
|
|
get: function () {
|
|
return this._containerName;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* 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 {string} snapshot The snapshot timestamp.
|
|
* @returns {BlobClient} A new BlobClient object identical to the source but with the specified snapshot timestamp
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.withSnapshot = function (snapshot) {
|
|
return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a AppendBlobClient object.
|
|
*
|
|
* @returns {AppendBlobClient}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.getAppendBlobClient = function () {
|
|
return new AppendBlobClient(this.url, this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a BlockBlobClient object.
|
|
*
|
|
* @returns {BlockBlobClient}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.getBlockBlobClient = function () {
|
|
return new BlockBlobClient(this.url, this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a PageBlobClient object.
|
|
*
|
|
* @returns {PageBlobClient}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.getPageBlobClient = function () {
|
|
return new PageBlobClient(this.url, this.pipeline);
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/get-blob
|
|
*
|
|
* @param {number} [offset] From which position of the blob to download, >= 0
|
|
* @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined
|
|
* @param {BlobDownloadOptions} [options] Optional options to Blob Download operation.
|
|
* @returns {Promise<BlobDownloadResponseModel>}
|
|
* @memberof BlobClient
|
|
*
|
|
* Example usage (Node.js):
|
|
*
|
|
* ```js
|
|
* // Download and convert a blob to a string
|
|
* const downloadBlockBlobResponse = await blobClient.download();
|
|
* const downloaded = await streamToString(downloadBlockBlobResponse.readableStreamBody);
|
|
* console.log("Downloaded blob content:", downloaded);
|
|
*
|
|
* async function streamToString(readableStream) {
|
|
* return new Promise((resolve, reject) => {
|
|
* const chunks = [];
|
|
* readableStream.on("data", (data) => {
|
|
* chunks.push(data.toString());
|
|
* });
|
|
* readableStream.on("end", () => {
|
|
* resolve(chunks.join(""));
|
|
* });
|
|
* readableStream.on("error", reject);
|
|
* });
|
|
* }
|
|
* ```
|
|
*
|
|
* Example usage (browser):
|
|
*
|
|
* ```js
|
|
* // Download and convert a blob to a string
|
|
* const downloadBlockBlobResponse = await blobClient.download();
|
|
* const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody);
|
|
* console.log(
|
|
* "Downloaded blob content",
|
|
* downloaded
|
|
* );
|
|
*
|
|
* async function blobToString(blob: Blob): Promise<string> {
|
|
* const fileReader = new FileReader();
|
|
* return new Promise<string>((resolve, reject) => {
|
|
* fileReader.onloadend = (ev: any) => {
|
|
* resolve(ev.target!.result);
|
|
* };
|
|
* fileReader.onerror = reject;
|
|
* fileReader.readAsText(blob);
|
|
* });
|
|
* }
|
|
* ```
|
|
*/
|
|
BlobClient.prototype.download = function (offset, count, options) {
|
|
if (offset === void 0) { offset = 0; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, res_1, e_1;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
options.conditions = options.conditions || {};
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
_a = createSpan("BlobClient-download", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.download({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
onDownloadProgress: coreHttp.isNode ? undefined : options.onProgress,
|
|
range: offset === 0 && !count ? undefined : rangeToString({ offset: offset, count: count }),
|
|
rangeGetContentMD5: options.rangeGetContentMD5,
|
|
rangeGetContentCRC64: options.rangeGetContentCrc64,
|
|
snapshot: options.snapshot,
|
|
cpkInfo: options.customerProvidedKey,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2:
|
|
res_1 = _b.sent();
|
|
// 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_1.contentLength === undefined) {
|
|
throw new RangeError("File download response doesn't contain valid content length header");
|
|
}
|
|
if (!res_1.etag) {
|
|
throw new RangeError("File download response doesn't contain valid etag header");
|
|
}
|
|
return [2 /*return*/, new BlobDownloadResponse(res_1, function (start) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var updatedOptions;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
updatedOptions = {
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: {
|
|
ifMatch: options.conditions.ifMatch || res_1.etag,
|
|
ifModifiedSince: options.conditions.ifModifiedSince,
|
|
ifNoneMatch: options.conditions.ifNoneMatch,
|
|
ifUnmodifiedSince: options.conditions.ifUnmodifiedSince
|
|
},
|
|
range: rangeToString({
|
|
count: offset + res_1.contentLength - start,
|
|
offset: start
|
|
}),
|
|
rangeGetContentMD5: options.rangeGetContentMD5,
|
|
rangeGetContentCRC64: options.rangeGetContentCrc64,
|
|
snapshot: options.snapshot,
|
|
cpkInfo: options.customerProvidedKey
|
|
};
|
|
return [4 /*yield*/, this.blobContext.download(tslib.__assign({ abortSignal: options.abortSignal }, updatedOptions))];
|
|
case 1:
|
|
// Debug purpose only
|
|
// console.log(
|
|
// `Read from internal stream, range: ${
|
|
// updatedOptions.range
|
|
// }, options: ${JSON.stringify(updatedOptions)}`
|
|
// );
|
|
return [2 /*return*/, (_a.sent()).readableStreamBody];
|
|
}
|
|
});
|
|
}); }, offset, res_1.contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
maxRetryRequests: options.maxRetryRequests,
|
|
onProgress: options.onProgress
|
|
})];
|
|
case 3:
|
|
e_1 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_1.message
|
|
});
|
|
throw e_1;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns true if the Azrue 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 {BlobExistsOptions} [options] options to Exists operation.
|
|
* @returns {Promise<boolean>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.exists = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_2;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-exists", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
customerProvidedKey: options.customerProvidedKey,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 2:
|
|
_b.sent();
|
|
return [2 /*return*/, true];
|
|
case 3:
|
|
e_2 = _b.sent();
|
|
if (e_2.statusCode === 404) {
|
|
span.setStatus({
|
|
code: api.CanonicalCode.NOT_FOUND,
|
|
message: "Expected exception when checking blob existence"
|
|
});
|
|
return [2 /*return*/, false];
|
|
}
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_2.message
|
|
});
|
|
throw e_2;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/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 {BlobGetPropertiesOptions} [options] Optional options to Get Properties operation.
|
|
* @returns {Promise<BlobGetPropertiesResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.getProperties = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_3;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-getProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
options.conditions = options.conditions || {};
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blobContext.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_3 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_3.message
|
|
});
|
|
throw e_3;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob
|
|
*
|
|
* @param {BlobDeleteOptions} [options] Optional options to Blob Delete operation.
|
|
* @returns {Promise<BlobDeleteResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.delete = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_4;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-delete", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.deleteMethod({
|
|
abortSignal: options.abortSignal,
|
|
deleteSnapshots: options.deleteSnapshots,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_4 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_4.message
|
|
});
|
|
throw e_4;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/undelete-blob
|
|
*
|
|
* @param {BlobUndeleteOptions} [options] Optional options to Blob Undelete operation.
|
|
* @returns {Promise<BlobUndeleteResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.undelete = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_5;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-undelete", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.undelete({
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_5 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_5.message
|
|
});
|
|
throw e_5;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Sets system properties on the blob.
|
|
*
|
|
* If no value provided, or no value provided for the specificed blob HTTP headers,
|
|
* these blob HTTP headers without a value will be cleared.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties
|
|
*
|
|
* @param {BlobHTTPHeaders} [blobHTTPHeaders] If no value provided, or no value provided for
|
|
* the specificed blob HTTP headers, these blob HTTP
|
|
* headers without a value will be cleared.
|
|
* @param {BlobSetHTTPHeadersOptions} [options] Optional options to Blob Set HTTP Headers operation.
|
|
* @returns {Promise<BlobSetHTTPHeadersResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.setHTTPHeaders = function (blobHTTPHeaders, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_6;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-setHTTPHeaders", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blobContext.setHTTPHeaders({
|
|
abortSignal: options.abortSignal,
|
|
blobHTTPHeaders: blobHTTPHeaders,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_6 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_6.message
|
|
});
|
|
throw e_6;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata
|
|
*
|
|
* @param {Metadata} [metadata] Replace existing metadata with this value.
|
|
* If no value provided the existing metadata will be removed.
|
|
* @param {BlobSetMetadataOptions} [options] Optional options to Set Metadata operation.
|
|
* @returns {Promise<BlobSetMetadataResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.setMetadata = function (metadata, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_7;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-setMetadata", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blobContext.setMetadata({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_7 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_7.message
|
|
});
|
|
throw e_7;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Get a {@link BlobLeaseClient} that manages leases on the blob.
|
|
*
|
|
* @param {string} [proposeLeaseId] Initial proposed lease Id.
|
|
* @returns {BlobLeaseClient} A new BlobLeaseClient object for managing leases on the blob.
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.getBlobLeaseClient = function (proposeLeaseId) {
|
|
return new BlobLeaseClient(this, proposeLeaseId);
|
|
};
|
|
/**
|
|
* Creates a read-only snapshot of a blob.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob
|
|
*
|
|
* @param {BlobCreateSnapshotOptions} [options] Optional options to the Blob Create Snapshot operation.
|
|
* @returns {Promise<BlobCreateSnapshotResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.createSnapshot = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_8;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-createSnapshot", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blobContext.createSnapshot({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_8 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_8.message
|
|
});
|
|
throw e_8;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob
|
|
*
|
|
* Example using automatic polling:
|
|
*
|
|
* ```js
|
|
* const copyPoller = await blobClient.beginCopyFromURL('url');
|
|
* const result = await copyPoller.pollUntilDone();
|
|
* ```
|
|
*
|
|
* Example using manual polling:
|
|
*
|
|
* ```js
|
|
* const copyPoller = await blobClient.beginCopyFromURL('url');
|
|
* while (!poller.isDone()) {
|
|
* await poller.poll();
|
|
* }
|
|
* const result = copyPoller.getResult();
|
|
* ```
|
|
*
|
|
* Example using progress updates:
|
|
*
|
|
* ```js
|
|
* const copyPoller = await blobClient.beginCopyFromURL('url', {
|
|
* onProgress(state) {
|
|
* console.log(`Progress: ${state.copyProgress}`);
|
|
* }
|
|
* });
|
|
* const result = await copyPoller.pollUntilDone();
|
|
* ```
|
|
*
|
|
* Example using a changing polling interval (default 15 seconds):
|
|
*
|
|
* ```js
|
|
* const copyPoller = await blobClient.beginCopyFromURL('url', {
|
|
* intervalInMs: 1000 // poll blob every 1 second for copy progress
|
|
* });
|
|
* const result = await copyPoller.pollUntilDone();
|
|
* ```
|
|
*
|
|
* Example using copy cancellation:
|
|
*
|
|
* ```js
|
|
* const copyPoller = await blobClient.beginCopyFromURL('url');
|
|
* // cancel operation after starting it.
|
|
* try {
|
|
* await copyPoller.cancelOperation();
|
|
* // calls to get the result now throw PollerCancelledError
|
|
* await copyPoller.getResult();
|
|
* } catch (err) {
|
|
* if (err.name === 'PollerCancelledError') {
|
|
* console.log('The copy was cancelled.');
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* @param {string} copySource url to the source Azure Blob/File.
|
|
* @param {BlobBeginCopyFromURLOptions} [options] Optional options to the Blob Start Copy From URL operation.
|
|
*/
|
|
BlobClient.prototype.beginCopyFromURL = function (copySource, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var client, poller;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
client = {
|
|
abortCopyFromURL: function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return _this.abortCopyFromURL.apply(_this, args);
|
|
},
|
|
getProperties: function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return _this.getProperties.apply(_this, args);
|
|
},
|
|
startCopyFromURL: function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return _this.startCopyFromURL.apply(_this, args);
|
|
}
|
|
};
|
|
poller = new BlobBeginCopyFromUrlPoller({
|
|
blobClient: client,
|
|
copySource: 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.
|
|
return [4 /*yield*/, poller.poll()];
|
|
case 1:
|
|
// Trigger the startCopyFromURL call by calling poll.
|
|
// Any errors from this method should be surfaced to the user.
|
|
_a.sent();
|
|
return [2 /*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://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob
|
|
*
|
|
* @param {string} copyId Id of the Copy From URL operation.
|
|
* @param {BlobAbortCopyFromURLOptions} [options] Optional options to the Blob Abort Copy From URL operation.
|
|
* @returns {Promise<BlobAbortCopyFromURLResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.abortCopyFromURL = function (copyId, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_9;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-abortCopyFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.abortCopyFromURL(copyId, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_9 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_9.message
|
|
});
|
|
throw e_9;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url
|
|
*
|
|
* @param {string} copySource The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication
|
|
* @param {BlobSyncCopyFromURLOptions} [options={}]
|
|
* @returns {Promise<BlobCopyFromURLResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.syncCopyFromURL = function (copySource, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_10;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-syncCopyFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.copyFromURL(copySource, {
|
|
abortSignal: options.abortSignal,
|
|
metadata: options.metadata,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
},
|
|
sourceContentMD5: options.sourceContentMD5,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_10 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_10.message
|
|
});
|
|
throw e_10;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier
|
|
*
|
|
* @param {BlockBlobTier | PremiumPageBlobTier | string} tier The tier to be set on the blob. Valid values are Hot, Cool, or Archive.
|
|
* @param {BlobSetTierOptions} [options] Optional options to the Blob Set Tier operation.
|
|
* @returns {Promise<BlobsSetTierResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.setAccessTier = function (tier, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_11;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-setAccessTier", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.setTier(toAccessTier(tier), {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
rehydratePriority: options.rehydratePriority,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_11 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_11.message
|
|
});
|
|
throw e_11;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BlobClient.prototype.downloadToBuffer = function (param1, param2, param3, param4) {
|
|
if (param4 === void 0) { param4 = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var buffer, offset, count, options, _a, span, spanOptions, response, transferProgress_1, batch, _loop_1, off, e_12;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
offset = 0;
|
|
count = 0;
|
|
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 || {};
|
|
}
|
|
_a = createSpan("BlobClient-downloadToBuffer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 5, 6, 7]);
|
|
if (!options.blockSize) {
|
|
options.blockSize = 0;
|
|
}
|
|
if (options.blockSize < 0) {
|
|
throw new RangeError("blockSize option must be >= 0");
|
|
}
|
|
if (options.blockSize === 0) {
|
|
options.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 > 0");
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
if (!!count) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, this.getProperties(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2:
|
|
response = _b.sent();
|
|
count = response.contentLength - offset;
|
|
if (count < 0) {
|
|
throw new RangeError("offset " + offset + " shouldn't be larger than blob size " + response.contentLength);
|
|
}
|
|
_b.label = 3;
|
|
case 3:
|
|
// 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);
|
|
}
|
|
transferProgress_1 = 0;
|
|
batch = new Batch(options.concurrency);
|
|
_loop_1 = function (off) {
|
|
batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var chunkEnd, response, stream;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
chunkEnd = offset + count;
|
|
if (off + options.blockSize < chunkEnd) {
|
|
chunkEnd = off + options.blockSize;
|
|
}
|
|
return [4 /*yield*/, this.download(off, chunkEnd - off, {
|
|
abortSignal: options.abortSignal,
|
|
conditions: options.conditions,
|
|
maxRetryRequests: options.maxRetryRequestsPerBlock,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 1:
|
|
response = _a.sent();
|
|
stream = response.readableStreamBody;
|
|
return [4 /*yield*/, streamToBuffer(stream, buffer, off - offset, chunkEnd - offset)];
|
|
case 2:
|
|
_a.sent();
|
|
// 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_1 += chunkEnd - off;
|
|
if (options.onProgress) {
|
|
options.onProgress({ loadedBytes: transferProgress_1 });
|
|
}
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); });
|
|
};
|
|
for (off = offset; off < offset + count; off = off + options.blockSize) {
|
|
_loop_1(off);
|
|
}
|
|
return [4 /*yield*/, batch.do()];
|
|
case 4:
|
|
_b.sent();
|
|
return [2 /*return*/, buffer];
|
|
case 5:
|
|
e_12 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_12.message
|
|
});
|
|
throw e_12;
|
|
case 6:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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 {string} filePath
|
|
* @param {number} [offset] From which position of the block blob to download.
|
|
* @param {number} [count] How much data to be downloaded. Will download to the end when passing undefined.
|
|
* @param {BlobDownloadOptions} [options] Options to Blob download options.
|
|
* @returns {Promise<BlobDownloadResponseModel>} 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.
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.downloadToFile = function (filePath, offset, count, options) {
|
|
if (offset === void 0) { offset = 0; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, response, e_13;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-downloadToFile", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 5, 6, 7]);
|
|
return [4 /*yield*/, this.download(offset, count, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2:
|
|
response = _b.sent();
|
|
if (!response.readableStreamBody) return [3 /*break*/, 4];
|
|
return [4 /*yield*/, readStreamToLocalFile(response.readableStreamBody, filePath)];
|
|
case 3:
|
|
_b.sent();
|
|
_b.label = 4;
|
|
case 4:
|
|
// The stream is no longer accessible so setting it to undefined.
|
|
response.blobDownloadStream = undefined;
|
|
return [2 /*return*/, response];
|
|
case 5:
|
|
e_13 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_13.message
|
|
});
|
|
throw e_13;
|
|
case 6:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BlobClient.prototype.getBlobAndContainerNamesFromUrl = function () {
|
|
var containerName;
|
|
var 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
|
|
var parsedUrl = coreHttp.URLBuilder.parse(this.url);
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// "https://myaccount.blob.core.windows.net/containername/blob".
|
|
// .getPath() -> /containername/blob
|
|
var pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?");
|
|
containerName = pathComponents[1];
|
|
blobName = pathComponents[3];
|
|
}
|
|
else {
|
|
// 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
|
|
var pathComponents = parsedUrl.getPath().match("/([^/]*)/([^/]*)(/(.*))?");
|
|
containerName = pathComponents[2];
|
|
blobName = pathComponents[4];
|
|
}
|
|
// 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 (!blobName) {
|
|
throw new Error("Provided blobName is invalid.");
|
|
}
|
|
else if (!containerName) {
|
|
throw new Error("Provided containerName is invalid.");
|
|
}
|
|
return { blobName: blobName, containerName: 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://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob
|
|
*
|
|
* @param {string} copySource url to the source Azure Blob/File.
|
|
* @param {BlobStartCopyFromURLOptions} [options] Optional options to the Blob Start Copy From URL operation.
|
|
* @returns {Promise<BlobStartCopyFromURLResponse>}
|
|
* @memberof BlobClient
|
|
*/
|
|
BlobClient.prototype.startCopyFromURL = function (copySource, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_14;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobClient-startCopyFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blobContext.startCopyFromURL(copySource, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
},
|
|
rehydratePriority: options.rehydratePriority,
|
|
tier: toAccessTier(options.tier),
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_14 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_14.message
|
|
});
|
|
throw e_14;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BlobClient;
|
|
}(StorageClient));
|
|
/**
|
|
* AppendBlobClient defines a set of operations applicable to append blobs.
|
|
*
|
|
* @export
|
|
* @class AppendBlobClient
|
|
* @extends {BlobClient}
|
|
*/
|
|
var AppendBlobClient = /** @class */ (function (_super) {
|
|
tslib.__extends(AppendBlobClient, _super);
|
|
function AppendBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
|
|
var _this = this;
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
var pipeline;
|
|
var url;
|
|
options = options || {};
|
|
if (credentialOrPipelineOrContainerName instanceof Pipeline) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
|
|
coreHttp.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;
|
|
// 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)
|
|
var containerName = credentialOrPipelineOrContainerName;
|
|
var blobName = blobNameOrOptions;
|
|
var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
pipeline = newPipeline(sharedKeyCredential, options);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
url =
|
|
appendToURLPath(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");
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
_this.appendBlobContext = new AppendBlob(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
/**
|
|
* 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 {string} snapshot The snapshot timestamp.
|
|
* @returns {AppendBlobClient} A new AppendBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
* @memberof AppendBlobClient
|
|
*/
|
|
AppendBlobClient.prototype.withSnapshot = function (snapshot) {
|
|
return new AppendBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a 0-length append blob. Call AppendBlock to append data to an append blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param {AppendBlobCreateOptions} [options] Options to the Append Block Create operation.
|
|
* @returns {Promise<AppendBlobCreateResponse>}
|
|
* @memberof AppendBlobClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const appendBlobClient = containerClient.getAppendBlobClient("<blob name>");
|
|
* await appendBlobClient.create();
|
|
* ```
|
|
*/
|
|
AppendBlobClient.prototype.create = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_15;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("AppendBlobClient-create", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.appendBlobContext.create(0, {
|
|
abortSignal: options.abortSignal,
|
|
blobHTTPHeaders: options.blobHTTPHeaders,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_15 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_15.message
|
|
});
|
|
throw e_15;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Commits a new block of data to the end of the existing append blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/append-block
|
|
*
|
|
* @param {HttpRequestBody} body Data to be appended.
|
|
* @param {number} contentLength Length of the body in bytes.
|
|
* @param {AppendBlobAppendBlockOptions} [options] Options to the Append Block operation.
|
|
* @returns {Promise<AppendBlobAppendBlockResponse>}
|
|
* @memberof AppendBlobClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const content = "Hello World!";
|
|
*
|
|
* // Create a new append blob and append data to the blob.
|
|
* const newAppendBlobClient = containerClient.getAppendBlobClient("<blob name>");
|
|
* await newAppendBlobClient.create();
|
|
* await newAppendBlobClient.appendBlock(content, content.length);
|
|
*
|
|
* // Append data to an existing append blob.
|
|
* const existingAppendBlobClient = containerClient.getAppendBlobClient("<blob name>");
|
|
* await existingAppendBlobClient.appendBlock(content, content.length);
|
|
* ```
|
|
*/
|
|
AppendBlobClient.prototype.appendBlock = function (body, contentLength, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_16;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("AppendBlobClient-appendBlock", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.appendBlobContext.appendBlock(body, contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
appendPositionAccessConditions: options.conditions,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
onUploadProgress: options.onProgress,
|
|
transactionalContentMD5: options.transactionalContentMD5,
|
|
transactionalContentCrc64: options.transactionalContentCrc64,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_16 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_16.message
|
|
});
|
|
throw e_16;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/append-block-from-url
|
|
*
|
|
* @param {string} 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 {number} sourceOffset Offset in source to be appended
|
|
* @param {number} count Number of bytes to be appended as a block
|
|
* @param {AppendBlobAppendBlockFromURLOptions} [options={}]
|
|
* @returns {Promise<AppendBlobAppendBlockFromUrlResponse>}
|
|
* @memberof AppendBlobClient
|
|
*/
|
|
AppendBlobClient.prototype.appendBlockFromURL = function (sourceURL, sourceOffset, count, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_17;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("AppendBlobClient-appendBlockFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, {
|
|
abortSignal: options.abortSignal,
|
|
sourceRange: rangeToString({ offset: sourceOffset, count: count }),
|
|
sourceContentMD5: options.sourceContentMD5,
|
|
sourceContentCrc64: options.sourceContentCrc64,
|
|
leaseAccessConditions: options.conditions,
|
|
appendPositionAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
},
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_17 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_17.message
|
|
});
|
|
throw e_17;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return AppendBlobClient;
|
|
}(BlobClient));
|
|
/**
|
|
* BlockBlobClient defines a set of operations applicable to block blobs.
|
|
*
|
|
* @export
|
|
* @class BlockBlobClient
|
|
* @extends {BlobClient}
|
|
*/
|
|
var BlockBlobClient = /** @class */ (function (_super) {
|
|
tslib.__extends(BlockBlobClient, _super);
|
|
function BlockBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
|
|
var _this = this;
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
var pipeline;
|
|
var url;
|
|
options = options || {};
|
|
if (credentialOrPipelineOrContainerName instanceof Pipeline) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
|
|
coreHttp.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;
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
else if (credentialOrPipelineOrContainerName &&
|
|
typeof credentialOrPipelineOrContainerName === "string" &&
|
|
blobNameOrOptions &&
|
|
typeof blobNameOrOptions === "string") {
|
|
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
|
|
var containerName = credentialOrPipelineOrContainerName;
|
|
var blobName = blobNameOrOptions;
|
|
var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
pipeline = newPipeline(sharedKeyCredential, options);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
url =
|
|
appendToURLPath(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");
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
_this.blockBlobContext = new BlockBlob(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
/**
|
|
* 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 {string} snapshot The snapshot timestamp.
|
|
* @returns {BlockBlobClient} A new BlockBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.withSnapshot = function (snapshot) {
|
|
return new BlockBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param {HttpRequestBody} body Blob, string, ArrayBuffer, ArrayBufferView or a function
|
|
* which returns a new Readable stream whose offset is from data source beginning.
|
|
* @param {number} contentLength Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
|
|
* string including non non-Base64/Hex-encoded characters.
|
|
* @param {BlockBlobUploadOptions} [options] Options to the Block Blob Upload operation.
|
|
* @returns {Promise<BlockBlobUploadResponse>} Response data for the Block Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const content = "Hello world!";
|
|
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
|
|
* ```
|
|
*/
|
|
BlockBlobClient.prototype.upload = function (body, contentLength, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_18;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("BlockBlobClient-upload", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blockBlobContext.upload(body, contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
blobHTTPHeaders: options.blobHTTPHeaders,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
onUploadProgress: options.onProgress,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
tier: toAccessTier(options.tier),
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_18 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_18.message
|
|
});
|
|
throw e_18;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Uploads the specified block to the block blob's "staging area" to be later
|
|
* committed by a call to commitBlockList.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-block
|
|
*
|
|
* @param {string} blockId A 64-byte value that is base64-encoded
|
|
* @param {HttpRequestBody} body Data to upload to the staging area.
|
|
* @param {number} contentLength Number of bytes to upload.
|
|
* @param {BlockBlobStageBlockOptions} [options] Options to the Block Blob Stage Block operation.
|
|
* @returns {Promise<BlockBlobStageBlockResponse>} Response data for the Block Blob Stage Block operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.stageBlock = function (blockId, body, contentLength, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_19;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlockBlobClient-stageBlock", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blockBlobContext.stageBlock(blockId, contentLength, body, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
onUploadProgress: options.onProgress,
|
|
transactionalContentMD5: options.transactionalContentMD5,
|
|
transactionalContentCrc64: options.transactionalContentCrc64,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_19 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_19.message
|
|
});
|
|
throw e_19;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url
|
|
*
|
|
* @param {string} blockId A 64-byte value that is base64-encoded
|
|
* @param {string} 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 {number} [offset] From which position of the blob to download, >= 0
|
|
* @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined
|
|
* @param {BlockBlobStageBlockFromURLOptions} [options={}] Options to the Block Blob Stage Block From URL operation.
|
|
* @returns {Promise<BlockBlobStageBlockFromURLResponse>} Response data for the Block Blob Stage Block From URL operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.stageBlockFromURL = function (blockId, sourceURL, offset, count, options) {
|
|
if (offset === void 0) { offset = 0; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_20;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlockBlobClient-stageBlockFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, 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: offset, count: count }),
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_20 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_20.message
|
|
});
|
|
throw e_20;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/rest/api/storageservices/put-block-list
|
|
*
|
|
* @param {string[]} blocks Array of 64-byte value that is base64-encoded
|
|
* @param {BlockBlobCommitBlockListOptions} [options] Options to the Block Blob Commit Block List operation.
|
|
* @returns {Promise<BlockBlobCommitBlockListResponse>} Response data for the Block Blob Commit Block List operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.commitBlockList = function (blocks, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_21;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("BlockBlobClient-commitBlockList", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.blockBlobContext.commitBlockList({ latest: blocks }, {
|
|
abortSignal: options.abortSignal,
|
|
blobHTTPHeaders: options.blobHTTPHeaders,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
tier: toAccessTier(options.tier),
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_21 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_21.message
|
|
});
|
|
throw e_21;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns the list of blocks that have been uploaded as part of a block blob
|
|
* using the specified block list filter.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/get-block-list
|
|
*
|
|
* @param {BlockListType} listType Specifies whether to return the list of committed blocks,
|
|
* the list of uncommitted blocks, or both lists together.
|
|
* @param {BlockBlobGetBlockListOptions} [options] Options to the Block Blob Get Block List operation.
|
|
* @returns {Promise<BlockBlobGetBlockListResponse>} Response data for the Block Blob Get Block List operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.getBlockList = function (listType, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, res, e_22;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlockBlobClient-getBlockList", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.blockBlobContext.getBlockList(listType, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2:
|
|
res = _b.sent();
|
|
if (!res.committedBlocks) {
|
|
res.committedBlocks = [];
|
|
}
|
|
if (!res.uncommittedBlocks) {
|
|
res.uncommittedBlocks = [];
|
|
}
|
|
return [2 /*return*/, res];
|
|
case 3:
|
|
e_22 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_22.message
|
|
});
|
|
throw e_22;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
// High level functions
|
|
/**
|
|
* ONLY AVAILABLE IN BROWSERS.
|
|
*
|
|
* Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.
|
|
*
|
|
* When buffer length <= 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.
|
|
*
|
|
* @export
|
|
* @param {Blob | ArrayBuffer | ArrayBufferView} browserData Blob, File, ArrayBuffer or ArrayBufferView
|
|
* @param {BlockBlobParallelUploadOptions} [options] Options to upload browser data.
|
|
* @returns {Promise<BlobUploadCommonResponse>} Response data for the Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.uploadBrowserData = function (browserData, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, browserBlob_1, e_23;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlockBlobClient-uploadBrowserData", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
browserBlob_1 = new Blob([browserData]);
|
|
return [4 /*yield*/, this.uploadSeekableBlob(function (offset, size) {
|
|
return browserBlob_1.slice(offset, offset + size);
|
|
}, browserBlob_1.size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_23 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_23.message
|
|
});
|
|
throw e_23;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* ONLY AVAILABLE IN BROWSERS.
|
|
*
|
|
* Uploads a browser {@link Blob} object to block blob. Requires a blobFactory as the data source,
|
|
* which need to return a {@link Blob} object with the offset and size provided.
|
|
*
|
|
* When buffer length <= 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 {(offset: number, size: number) => Blob} blobFactory
|
|
* @param {number} size size of the data to upload.
|
|
* @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
|
|
* @returns {Promise<BlobUploadCommonResponse>} Response data for the Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.uploadSeekableBlob = function (blobFactory, size, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, numBlocks_1, blockList_1, blockIDPrefix_1, transferProgress_2, batch, _loop_2, i, e_24;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.blockSize) {
|
|
options.blockSize = 0;
|
|
}
|
|
if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
|
|
throw new RangeError("blockSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES);
|
|
}
|
|
if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {
|
|
options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;
|
|
}
|
|
if (options.maxSingleShotSize < 0 ||
|
|
options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {
|
|
throw new RangeError("maxSingleShotSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES);
|
|
}
|
|
if (options.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 > options.maxSingleShotSize) {
|
|
options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);
|
|
if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {
|
|
options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
|
|
}
|
|
}
|
|
}
|
|
if (!options.blobHTTPHeaders) {
|
|
options.blobHTTPHeaders = {};
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
_a = createSpan("BlockBlobClient-UploadSeekableBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 5, 6, 7]);
|
|
if (!(size <= options.maxSingleShotSize)) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, this.upload(blobFactory(0, size), size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
numBlocks_1 = Math.floor((size - 1) / options.blockSize) + 1;
|
|
if (numBlocks_1 > 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));
|
|
}
|
|
blockList_1 = [];
|
|
blockIDPrefix_1 = coreHttp.generateUuid();
|
|
transferProgress_2 = 0;
|
|
batch = new Batch(options.concurrency);
|
|
_loop_2 = function (i) {
|
|
batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var blockID, start, end, contentLength;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
blockID = generateBlockID(blockIDPrefix_1, i);
|
|
start = options.blockSize * i;
|
|
end = i === numBlocks_1 - 1 ? size : start + options.blockSize;
|
|
contentLength = end - start;
|
|
blockList_1.push(blockID);
|
|
return [4 /*yield*/, this.stageBlock(blockID, blobFactory(start, contentLength), contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
conditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 1:
|
|
_a.sent();
|
|
// 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_2 += contentLength;
|
|
if (options.onProgress) {
|
|
options.onProgress({
|
|
loadedBytes: transferProgress_2
|
|
});
|
|
}
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); });
|
|
};
|
|
for (i = 0; i < numBlocks_1; i++) {
|
|
_loop_2(i);
|
|
}
|
|
return [4 /*yield*/, batch.do()];
|
|
case 4:
|
|
_b.sent();
|
|
return [2 /*return*/, this.commitBlockList(blockList_1, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 5:
|
|
e_24 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_24.message
|
|
});
|
|
throw e_24;
|
|
case 6:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Uploads a local file in blocks to a block blob.
|
|
*
|
|
* When file size <= 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 {string} filePath Full path of local file
|
|
* @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
|
|
* @returns {(Promise<BlobUploadCommonResponse>)} Response data for the Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.uploadFile = function (filePath, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, size, e_25;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlockBlobClient-uploadFile", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 4, 5, 6]);
|
|
return [4 /*yield*/, fsStat(filePath)];
|
|
case 2:
|
|
size = (_b.sent()).size;
|
|
return [4 /*yield*/, this.uploadResetableStream(function (offset, count) {
|
|
return fs.createReadStream(filePath, {
|
|
autoClose: true,
|
|
end: count ? offset + count - 1 : Infinity,
|
|
start: offset
|
|
});
|
|
}, size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 3: return [2 /*return*/, _b.sent()];
|
|
case 4:
|
|
e_25 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_25.message
|
|
});
|
|
throw e_25;
|
|
case 5:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 6: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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 {Readable} stream Node.js Readable stream
|
|
* @param {number} bufferSize Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB
|
|
* @param {number} maxConcurrency Max concurrency indicates the max number of buffers that can be allocated,
|
|
* positive correlation with max uploading concurrency. Default value is 5
|
|
* @param {BlockBlobUploadStreamOptions} [options] Options to Upload Stream to Block Blob operation.
|
|
* @returns {Promise<BlobUploadCommonResponse>} Response data for the Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.uploadStream = function (stream, bufferSize, maxConcurrency, options) {
|
|
if (bufferSize === void 0) { bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES; }
|
|
if (maxConcurrency === void 0) { maxConcurrency = 5; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, blockNum_1, blockIDPrefix_2, transferProgress_3, blockList_2, scheduler, e_26;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.blobHTTPHeaders) {
|
|
options.blobHTTPHeaders = {};
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
_a = createSpan("BlockBlobClient-uploadStream", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 4, 5, 6]);
|
|
blockNum_1 = 0;
|
|
blockIDPrefix_2 = coreHttp.generateUuid();
|
|
transferProgress_3 = 0;
|
|
blockList_2 = [];
|
|
scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, function (buffer) { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var blockID;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
blockID = generateBlockID(blockIDPrefix_2, blockNum_1);
|
|
blockList_2.push(blockID);
|
|
blockNum_1++;
|
|
return [4 /*yield*/, this.stageBlock(blockID, buffer, buffer.length, {
|
|
conditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 1:
|
|
_a.sent();
|
|
// Update progress after block is successfully uploaded to server, in case of block trying
|
|
transferProgress_3 += buffer.length;
|
|
if (options.onProgress) {
|
|
options.onProgress({ loadedBytes: transferProgress_3 });
|
|
}
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); },
|
|
// 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));
|
|
return [4 /*yield*/, scheduler.do()];
|
|
case 2:
|
|
_b.sent();
|
|
return [4 /*yield*/, this.commitBlockList(blockList_2, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 3: return [2 /*return*/, _b.sent()];
|
|
case 4:
|
|
e_26 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_26.message
|
|
});
|
|
throw e_26;
|
|
case 5:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 6: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Accepts a Node.js Readable stream factory, and uploads in blocks to a block blob.
|
|
* The Readable stream factory must returns a Node.js Readable stream starting from the offset defined. The offset
|
|
* is the offset in the block blob to be uploaded.
|
|
*
|
|
* When buffer length <= 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.
|
|
*
|
|
* @export
|
|
* @param {(offset: number) => NodeJS.ReadableStream} streamFactory Returns a Node.js Readable stream starting
|
|
* from the offset defined
|
|
* @param {number} size Size of the block blob
|
|
* @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
|
|
* @returns {(Promise<BlobUploadCommonResponse>)} Response data for the Blob Upload operation.
|
|
* @memberof BlockBlobClient
|
|
*/
|
|
BlockBlobClient.prototype.uploadResetableStream = function (streamFactory, size, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, numBlocks_2, blockList_3, blockIDPrefix_3, transferProgress_4, batch, _loop_3, i, e_27;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.blockSize) {
|
|
options.blockSize = 0;
|
|
}
|
|
if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
|
|
throw new RangeError("blockSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES);
|
|
}
|
|
if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {
|
|
options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;
|
|
}
|
|
if (options.maxSingleShotSize < 0 ||
|
|
options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {
|
|
throw new RangeError("maxSingleShotSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES);
|
|
}
|
|
if (options.blockSize === 0) {
|
|
if (size > BLOCK_BLOB_MAX_BLOCKS * BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
|
|
throw new RangeError(size + " is too larger to upload to a block blob.");
|
|
}
|
|
if (size > options.maxSingleShotSize) {
|
|
options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);
|
|
if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {
|
|
options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
|
|
}
|
|
}
|
|
}
|
|
if (!options.blobHTTPHeaders) {
|
|
options.blobHTTPHeaders = {};
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
_a = createSpan("BlockBlobClient-uploadResetableStream", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 6, 7, 8]);
|
|
if (!(size <= options.maxSingleShotSize)) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, this.upload(function () { return streamFactory(0); }, size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
numBlocks_2 = Math.floor((size - 1) / options.blockSize) + 1;
|
|
if (numBlocks_2 > 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));
|
|
}
|
|
blockList_3 = [];
|
|
blockIDPrefix_3 = coreHttp.generateUuid();
|
|
transferProgress_4 = 0;
|
|
batch = new Batch(options.concurrency);
|
|
_loop_3 = function (i) {
|
|
batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
var blockID, start, end, contentLength;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
blockID = generateBlockID(blockIDPrefix_3, i);
|
|
start = options.blockSize * i;
|
|
end = i === numBlocks_2 - 1 ? size : start + options.blockSize;
|
|
contentLength = end - start;
|
|
blockList_3.push(blockID);
|
|
return [4 /*yield*/, this.stageBlock(blockID, function () { return streamFactory(start, contentLength); }, contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
conditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 1:
|
|
_a.sent();
|
|
// Update progress after block is successfully uploaded to server, in case of block trying
|
|
transferProgress_4 += contentLength;
|
|
if (options.onProgress) {
|
|
options.onProgress({ loadedBytes: transferProgress_4 });
|
|
}
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); });
|
|
};
|
|
for (i = 0; i < numBlocks_2; i++) {
|
|
_loop_3(i);
|
|
}
|
|
return [4 /*yield*/, batch.do()];
|
|
case 4:
|
|
_b.sent();
|
|
return [4 /*yield*/, this.commitBlockList(blockList_3, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 5: return [2 /*return*/, _b.sent()];
|
|
case 6:
|
|
e_27 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_27.message
|
|
});
|
|
throw e_27;
|
|
case 7:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 8: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BlockBlobClient;
|
|
}(BlobClient));
|
|
/**
|
|
* PageBlobClient defines a set of operations applicable to page blobs.
|
|
*
|
|
* @export
|
|
* @class PageBlobClient
|
|
* @extends {BlobClient}
|
|
*/
|
|
var PageBlobClient = /** @class */ (function (_super) {
|
|
tslib.__extends(PageBlobClient, _super);
|
|
function PageBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
|
|
var _this = this;
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
var pipeline;
|
|
var url;
|
|
options = options || {};
|
|
if (credentialOrPipelineOrContainerName instanceof Pipeline) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
|
|
coreHttp.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;
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
else if (credentialOrPipelineOrContainerName &&
|
|
typeof credentialOrPipelineOrContainerName === "string" &&
|
|
blobNameOrOptions &&
|
|
typeof blobNameOrOptions === "string") {
|
|
// (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
|
|
var containerName = credentialOrPipelineOrContainerName;
|
|
var blobName = blobNameOrOptions;
|
|
var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
pipeline = newPipeline(sharedKeyCredential, options);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
url =
|
|
appendToURLPath(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");
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
_this.pageBlobContext = new PageBlob(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
/**
|
|
* 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 {string} snapshot The snapshot timestamp.
|
|
* @returns {PageBlobClient} A new PageBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.withSnapshot = function (snapshot) {
|
|
return new PageBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a page blob of the specified length. Call uploadPages to upload data
|
|
* data to a page blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param {number} size size of the page blob.
|
|
* @param {PageBlobCreateOptions} [options] Options to the Page Blob Create operation.
|
|
* @returns {Promise<PageBlobCreateResponse>} Response data for the Page Blob Create operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.create = function (size, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_28;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-create", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.pageBlobContext.create(0, size, {
|
|
abortSignal: options.abortSignal,
|
|
blobHTTPHeaders: options.blobHTTPHeaders,
|
|
blobSequenceNumber: options.blobSequenceNumber,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: options.metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
tier: toAccessTier(options.tier),
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_28 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_28.message
|
|
});
|
|
throw e_28;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-page
|
|
*
|
|
* @param {HttpRequestBody} body Data to upload
|
|
* @param {number} offset Offset of destination page blob
|
|
* @param {number} count Content length of the body, also number of bytes to be uploaded
|
|
* @param {PageBlobUploadPagesOptions} [options] Options to the Page Blob Upload Pages operation.
|
|
* @returns {Promise<PageBlobsUploadPagesResponse>} Response data for the Page Blob Upload Pages operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.uploadPages = function (body, offset, count, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_29;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-uploadPages", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.pageBlobContext.uploadPages(body, count, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
onUploadProgress: options.onProgress,
|
|
range: rangeToString({ offset: offset, count: count }),
|
|
sequenceNumberAccessConditions: options.conditions,
|
|
transactionalContentMD5: options.transactionalContentMD5,
|
|
transactionalContentCrc64: options.transactionalContentCrc64,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_29 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_29.message
|
|
});
|
|
throw e_29;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* The Upload Pages operation writes a range of pages to a page blob where the
|
|
* contents are read from a URL.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-page-from-url
|
|
*
|
|
* @param {string} sourceURL Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication
|
|
* @param {number} sourceOffset The source offset to copy from. Pass 0 to copy from the beginning of source page blob
|
|
* @param {number} destOffset Offset of destination page blob
|
|
* @param {number} count Number of bytes to be uploaded from source page blob
|
|
* @param {PageBlobUploadPagesFromURLOptions} [options={}]
|
|
* @returns {Promise<PageBlobUploadPagesFromURLResponse>}
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.uploadPagesFromURL = function (sourceURL, sourceOffset, destOffset, count, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_30;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
_a = createSpan("PageBlobClient-uploadPagesFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return [4 /*yield*/, this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({ offset: sourceOffset, count: count }), 0, rangeToString({ offset: destOffset, count: count }), {
|
|
abortSignal: options.abortSignal,
|
|
sourceContentMD5: options.sourceContentMD5,
|
|
sourceContentCrc64: options.sourceContentCrc64,
|
|
leaseAccessConditions: options.conditions,
|
|
sequenceNumberAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
},
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_30 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_30.message
|
|
});
|
|
throw e_30;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Frees the specified pages from the page blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-page
|
|
*
|
|
* @param {number} [offset] Starting byte position of the pages to clear.
|
|
* @param {number} [count] Number of bytes to clear.
|
|
* @param {PageBlobClearPagesOptions} [options] Options to the Page Blob Clear Pages operation.
|
|
* @returns {Promise<PageBlobClearPagesResponse>} Response data for the Page Blob Clear Pages operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.clearPages = function (offset, count, options) {
|
|
if (offset === void 0) { offset = 0; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_31;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-clearPages", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext.clearPages(0, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
range: rangeToString({ offset: offset, count: count }),
|
|
sequenceNumberAccessConditions: options.conditions,
|
|
cpkInfo: options.customerProvidedKey,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_31 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_31.message
|
|
});
|
|
throw e_31;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns the list of valid page ranges for a page blob or snapshot of a page blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
|
|
*
|
|
* @param {number} [offset] Starting byte position of the page ranges.
|
|
* @param {number} [count] Number of bytes to get.
|
|
* @param {PageBlobGetPageRangesOptions} [options] Options to the Page Blob Get Ranges operation.
|
|
* @returns {Promise<PageBlobGetPageRangesResponse>} Response data for the Page Blob Get Ranges operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.getPageRanges = function (offset, count, options) {
|
|
if (offset === void 0) { offset = 0; }
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_32;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-getPageRanges", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext
|
|
.getPageRanges({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
range: rangeToString({ offset: offset, count: count }),
|
|
spanOptions: spanOptions
|
|
})
|
|
.then(rangeResponseFromModel)];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_32 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_32.message
|
|
});
|
|
throw e_32;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Gets the collection of page ranges that differ between a specified snapshot and this page blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
|
|
*
|
|
* @param {number} offset Starting byte position of the page blob
|
|
* @param {number} count Number of bytes to get ranges diff.
|
|
* @param {string} prevSnapshot Timestamp of snapshot to retrive the difference.
|
|
* @param {PageBlobGetPageRangesDiffOptions} [options] Options to the Page Blob Get Page Ranges Diff operation.
|
|
* @returns {Promise<PageBlobGetPageRangesDiffResponse>} Response data for the Page Blob Get Page Range Diff operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.getPageRangesDiff = function (offset, count, prevSnapshot, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_33;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-getPageRangesDiff", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext
|
|
.getPageRangesDiff({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
prevsnapshot: prevSnapshot,
|
|
range: rangeToString({ offset: offset, count: count }),
|
|
spanOptions: spanOptions
|
|
})
|
|
.then(rangeResponseFromModel)];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_33 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_33.message
|
|
});
|
|
throw e_33;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Gets the collection of page ranges that differ between a specified snapshot and this page blob for managed disks.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
|
|
*
|
|
* @param {number} offset Starting byte position of the page blob
|
|
* @param {number} count Number of bytes to get ranges diff.
|
|
* @param {string} prevSnapshotUrl URL of snapshot to retrive the difference.
|
|
* @param {PageBlobGetPageRangesDiffOptions} [options] Options to the Page Blob Get Page Ranges Diff operation.
|
|
* @returns {Promise<PageBlobGetPageRangesDiffResponse>} Response data for the Page Blob Get Page Range Diff operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.getPageRangesDiffForManagedDisks = function (offset, count, prevSnapshotUrl, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_34;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-GetPageRangesDiffForManagedDisks", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext
|
|
.getPageRangesDiff({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
prevSnapshotUrl: prevSnapshotUrl,
|
|
range: rangeToString({ offset: offset, count: count }),
|
|
spanOptions: spanOptions
|
|
})
|
|
.then(rangeResponseFromModel)];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_34 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_34.message
|
|
});
|
|
throw e_34;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Resizes the page blob to the specified size (which must be a multiple of 512).
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties
|
|
*
|
|
* @param {number} size Target size
|
|
* @param {PageBlobResizeOptions} [options] Options to the Page Blob Resize operation.
|
|
* @returns {Promise<PageBlobResizeResponse>} Response data for the Page Blob Resize operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.resize = function (size, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_35;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-resize", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext.resize(size, {
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_35 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_35.message
|
|
});
|
|
throw e_35;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Sets a page blob's sequence number.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties
|
|
*
|
|
* @param {SequenceNumberActionType} sequenceNumberAction Indicates how the service should modify the blob's sequence number.
|
|
* @param {number} [sequenceNumber] Required if sequenceNumberAction is max or update
|
|
* @param {PageBlobUpdateSequenceNumberOptions} [options] Options to the Page Blob Update Sequence Number operation.
|
|
* @returns {Promise<PageBlobUpdateSequenceNumberResponse>} Response data for the Page Blob Update Sequence Number operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.updateSequenceNumber = function (sequenceNumberAction, sequenceNumber, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_36;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("PageBlobClient-updateSequenceNumber", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, {
|
|
abortSignal: options.abortSignal,
|
|
blobSequenceNumber: sequenceNumber,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_36 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_36.message
|
|
});
|
|
throw e_36;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob
|
|
* @see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots
|
|
*
|
|
* @param {string} copySource Specifies the name of the source page blob snapshot. For example,
|
|
* https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
|
|
* @param {PageBlobStartCopyIncrementalOptions} [options] Options to the Page Blob Copy Incremental operation.
|
|
* @returns {Promise<PageBlobCopyIncrementalResponse>} Response data for the Page Blob Copy Incremental operation.
|
|
* @memberof PageBlobClient
|
|
*/
|
|
PageBlobClient.prototype.startCopyIncremental = function (copySource, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_37;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("PageBlobClient-startCopyIncremental", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.pageBlobContext.copyIncremental(copySource, {
|
|
abortSignal: options.abortSignal,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_37 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_37.message
|
|
});
|
|
throw e_37;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return PageBlobClient;
|
|
}(BlobClient));
|
|
/**
|
|
* A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}.
|
|
*
|
|
* @export
|
|
* @class BlobLeaseClient
|
|
*/
|
|
var BlobLeaseClient = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of BlobLeaseClient.
|
|
* @param {(ContainerClient | BlobClient)} client The client to make the lease operation requests.
|
|
* @param {string} leaseId Initial proposed lease id.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
function BlobLeaseClient(client, leaseId) {
|
|
var clientContext = new StorageClientContext(client.url, client.pipeline.toServiceClientOptions());
|
|
this._url = client.url;
|
|
if (client instanceof ContainerClient) {
|
|
this._containerOrBlobOperation = new Container(clientContext);
|
|
}
|
|
else {
|
|
this._containerOrBlobOperation = new Blob$1(clientContext);
|
|
}
|
|
if (!leaseId) {
|
|
leaseId = coreHttp.generateUuid();
|
|
}
|
|
this._leaseId = leaseId;
|
|
}
|
|
Object.defineProperty(BlobLeaseClient.prototype, "leaseId", {
|
|
/**
|
|
* Gets the lease Id.
|
|
*
|
|
* @readonly
|
|
* @memberof BlobLeaseClient
|
|
* @type {string}
|
|
*/
|
|
get: function () {
|
|
return this._leaseId;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(BlobLeaseClient.prototype, "url", {
|
|
/**
|
|
* Gets the url.
|
|
*
|
|
* @readonly
|
|
* @memberof BlobLeaseClient
|
|
* @type {string}
|
|
*/
|
|
get: function () {
|
|
return this._url;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
|
|
* and
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
|
|
*
|
|
* @param {number} duration Must be between 15 to 60 seconds, or infinite (-1)
|
|
* @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
|
|
* @returns {Promise<LeaseOperationResponse>} Response data for acquire lease operation.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
BlobLeaseClient.prototype.acquireLease = function (duration, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_38;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobLeaseClient-acquireLease", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this._containerOrBlobOperation.acquireLease({
|
|
abortSignal: options.abortSignal,
|
|
duration: duration,
|
|
modifiedAccessConditions: options.conditions,
|
|
proposedLeaseId: this._leaseId,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_38 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_38.message
|
|
});
|
|
throw e_38;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* To change the ID of the lease.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
|
|
* and
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
|
|
*
|
|
* @param {string} proposedLeaseId the proposed new lease Id.
|
|
* @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
|
|
* @returns {Promise<LeaseOperationResponse>} Response data for change lease operation.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
BlobLeaseClient.prototype.changeLease = function (proposedLeaseId, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, response, e_39;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobLeaseClient-changeLease", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, {
|
|
abortSignal: options.abortSignal,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2:
|
|
response = _b.sent();
|
|
this._leaseId = proposedLeaseId;
|
|
return [2 /*return*/, response];
|
|
case 3:
|
|
e_39 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_39.message
|
|
});
|
|
throw e_39;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
|
|
* and
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
|
|
*
|
|
* @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
|
|
* @returns {Promise<LeaseOperationResponse>} Response data for release lease operation.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
BlobLeaseClient.prototype.releaseLease = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_40;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobLeaseClient-releaseLease", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this._containerOrBlobOperation.releaseLease(this._leaseId, {
|
|
abortSignal: options.abortSignal,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_40 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_40.message
|
|
});
|
|
throw e_40;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* To renew the lease.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
|
|
* and
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
|
|
*
|
|
* @param {LeaseOperationOptions} [options={}] Optional option to configure lease management operations.
|
|
* @returns {Promise<LeaseOperationResponse>} Response data for renew lease operation.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
BlobLeaseClient.prototype.renewLease = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_41;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobLeaseClient-renewLease", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this._containerOrBlobOperation.renewLease(this._leaseId, {
|
|
abortSignal: options.abortSignal,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_41 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_41.message
|
|
});
|
|
throw e_41;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* To end the lease but ensure that another client cannot acquire a new lease
|
|
* until the current lease period has expired.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
|
|
* and
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
|
|
*
|
|
* @static
|
|
* @param {number} breakPeriod Break period
|
|
* @param {LeaseOperationOptions} [options={}] Optional options to configure lease management operations.
|
|
* @returns {Promise<LeaseOperationResponse>} Response data for break lease operation.
|
|
* @memberof BlobLeaseClient
|
|
*/
|
|
BlobLeaseClient.prototype.breakLease = function (breakPeriod, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, operationOptions, e_42;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobLeaseClient-breakLease", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
operationOptions = {
|
|
abortSignal: options.abortSignal,
|
|
breakPeriod: breakPeriod,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
};
|
|
return [4 /*yield*/, this._containerOrBlobOperation.breakLease(operationOptions)];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_42 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_42.message
|
|
});
|
|
throw e_42;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BlobLeaseClient;
|
|
}());
|
|
/**
|
|
* A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs.
|
|
*
|
|
* @export
|
|
* @class ContainerClient
|
|
*/
|
|
var ContainerClient = /** @class */ (function (_super) {
|
|
tslib.__extends(ContainerClient, _super);
|
|
function ContainerClient(urlOrConnectionString, credentialOrPipelineOrContainerName, options) {
|
|
var _this = this;
|
|
var pipeline;
|
|
var url;
|
|
options = options || {};
|
|
if (credentialOrPipelineOrContainerName instanceof Pipeline) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
|
|
coreHttp.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)
|
|
var containerName = credentialOrPipelineOrContainerName;
|
|
var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName));
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
pipeline = newPipeline(sharedKeyCredential, options);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
url =
|
|
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");
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
_this._containerName = _this.getContainerNameFromUrl();
|
|
_this.containerContext = new Container(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
Object.defineProperty(ContainerClient.prototype, "containerName", {
|
|
/**
|
|
* The name of the container.
|
|
*/
|
|
get: function () {
|
|
return this._containerName;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Creates a new container under the specified account. If the container with
|
|
* the same name already exists, the operation fails.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container
|
|
*
|
|
* @param {ContainerCreateOptions} [options] Options to Container Create operation.
|
|
* @returns {Promise<ContainerCreateResponse>}
|
|
* @memberof ContainerClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const containerClient = blobServiceClient.getContainerClient("<container name>");
|
|
* const createContainerResponse = await containerClient.create();
|
|
* console.log("Container was created successfully", createContainerResponse.requestId);
|
|
* ```
|
|
*/
|
|
ContainerClient.prototype.create = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_43;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-create", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.create(tslib.__assign(tslib.__assign({}, options), { spanOptions: spanOptions }))];
|
|
case 2:
|
|
// Spread operator in destructuring assignments,
|
|
// this will filter out unwanted properties from the response object into result object
|
|
return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_43 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_43.message
|
|
});
|
|
throw e_43;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns true if the Azrue 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 {ContainerExistsOptions} [options={}]
|
|
* @returns {Promise<boolean>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.exists = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_44;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-exists", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
|
|
})];
|
|
case 2:
|
|
_b.sent();
|
|
return [2 /*return*/, true];
|
|
case 3:
|
|
e_44 = _b.sent();
|
|
if (e_44.statusCode === 404) {
|
|
span.setStatus({
|
|
code: api.CanonicalCode.NOT_FOUND,
|
|
message: "Expected exception when checking container existence"
|
|
});
|
|
return [2 /*return*/, false];
|
|
}
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_44.message
|
|
});
|
|
throw e_44;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Creates a {@link BlobClient}
|
|
*
|
|
* @param {string} blobName A blob name
|
|
* @returns {BlobClient} A new BlobClient object for the given blob name.
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getBlobClient = function (blobName) {
|
|
return new BlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates an {@link AppendBlobClient}
|
|
*
|
|
* @param {string} blobName An append blob name
|
|
* @returns {AppendBlobClient}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getAppendBlobClient = function (blobName) {
|
|
return new AppendBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a {@link BlockBlobClient}
|
|
*
|
|
* @param {string} blobName A block blob name
|
|
* @returns {BlockBlobClient}
|
|
* @memberof ContainerClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const content = "Hello world!";
|
|
*
|
|
* const blockBlobClient = containerClient.getBlockBlobClient("<blob name>");
|
|
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
|
|
* ```
|
|
*/
|
|
ContainerClient.prototype.getBlockBlobClient = function (blobName) {
|
|
return new BlockBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
};
|
|
/**
|
|
* Creates a {@link PageBlobClient}
|
|
*
|
|
* @param {string} blobName A page blob name
|
|
* @returns {PageBlobClient}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getPageBlobClient = function (blobName) {
|
|
return new PageBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/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 {ContainerGetPropertiesOptions} [options] Options to Container Get Properties operation.
|
|
* @returns {Promise<ContainerGetPropertiesResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getProperties = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_45;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
_a = createSpan("ContainerClient-getProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.getProperties(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal }, options.conditions), { spanOptions: spanOptions }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_45 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_45.message
|
|
});
|
|
throw e_45;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Marks the specified container for deletion. The container and any blobs
|
|
* contained within it are later deleted during garbage collection.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container
|
|
*
|
|
* @param {ContainerDeleteMethodOptions} [options] Options to Container Delete operation.
|
|
* @returns {Promise<ContainerDeleteResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.delete = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_46;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
if ((options.conditions.ifMatch && options.conditions.ifMatch !== ETagNone) ||
|
|
(options.conditions.ifNoneMatch && options.conditions.ifNoneMatch !== ETagNone)) {
|
|
throw new RangeError("the IfMatch and IfNoneMatch access conditions must have their default\
|
|
values because they are ignored by the service");
|
|
}
|
|
_a = createSpan("ContainerClient-delete", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.deleteMethod({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_46 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_46.message
|
|
});
|
|
throw e_46;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata
|
|
*
|
|
* @param {Metadata} [metadata] Replace existing metadata with this value.
|
|
* If no value provided the existing metadata will be removed.
|
|
* @param {ContainerSetMetadataOptions} [options] Options to Container Set Metadata operation.
|
|
* @returns {Promise<ContainerSetMetadataResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.setMetadata = function (metadata, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_47;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
if (options.conditions.ifUnmodifiedSince ||
|
|
(options.conditions.ifMatch && options.conditions.ifMatch !== ETagNone) ||
|
|
(options.conditions.ifNoneMatch && options.conditions.ifNoneMatch !== ETagNone)) {
|
|
throw new RangeError("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values\
|
|
because they are ignored by the blob service");
|
|
}
|
|
_a = createSpan("ContainerClient-setMetadata", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.setMetadata({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
metadata: metadata,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_47 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_47.message
|
|
});
|
|
throw e_47;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/get-container-acl
|
|
*
|
|
* @param {ContainerGetAccessPolicyOptions} [options] Options to Container Get Access Policy operation.
|
|
* @returns {Promise<ContainerGetAccessPolicyResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getAccessPolicy = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, response, res, _i, response_1, identifier, accessPolicy, e_48;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
_a = createSpan("ContainerClient-getAccessPolicy", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.getAccessPolicy({
|
|
abortSignal: options.abortSignal,
|
|
leaseAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2:
|
|
response = _b.sent();
|
|
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 (_i = 0, response_1 = response; _i < response_1.length; _i++) {
|
|
identifier = response_1[_i];
|
|
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: accessPolicy,
|
|
id: identifier.id
|
|
});
|
|
}
|
|
return [2 /*return*/, res];
|
|
case 3:
|
|
e_48 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_48.message
|
|
});
|
|
throw e_48;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl
|
|
*
|
|
* @param {PublicAccessType} [access] The level of public access to data in the container.
|
|
* @param {SignedIdentifier[]} [containerAcl] Array of elements each having a unique Id and details of the access policy.
|
|
* @param {ContainerSetAccessPolicyOptions} [options] Options to Container Set Access Policy operation.
|
|
* @returns {Promise<ContainerSetAccessPolicyResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.setAccessPolicy = function (access, containerAcl, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, acl, _i, _b, identifier, e_49;
|
|
return tslib.__generator(this, function (_c) {
|
|
switch (_c.label) {
|
|
case 0:
|
|
options.conditions = options.conditions || {};
|
|
_a = createSpan("ContainerClient-setAccessPolicy", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_c.label = 1;
|
|
case 1:
|
|
_c.trys.push([1, 3, 4, 5]);
|
|
acl = [];
|
|
for (_i = 0, _b = containerAcl || []; _i < _b.length; _i++) {
|
|
identifier = _b[_i];
|
|
acl.push({
|
|
accessPolicy: {
|
|
expiresOn: identifier.accessPolicy.expiresOn
|
|
? truncatedISO8061Date(identifier.accessPolicy.expiresOn)
|
|
: "",
|
|
permissions: identifier.accessPolicy.permissions,
|
|
startsOn: identifier.accessPolicy.startsOn
|
|
? truncatedISO8061Date(identifier.accessPolicy.startsOn)
|
|
: ""
|
|
},
|
|
id: identifier.id
|
|
});
|
|
}
|
|
return [4 /*yield*/, this.containerContext.setAccessPolicy({
|
|
abortSignal: options.abortSignal,
|
|
access: access,
|
|
containerAcl: acl,
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: options.conditions,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _c.sent()];
|
|
case 3:
|
|
e_49 = _c.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_49.message
|
|
});
|
|
throw e_49;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Get a {@link BlobLeaseClient} that manages leases on the container.
|
|
*
|
|
* @param {string} [proposeLeaseId] Initial proposed lease Id.
|
|
* @returns {BlobLeaseClient} A new BlobLeaseClient object for managing leases on the container.
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.getBlobLeaseClient = function (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://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param {string} blobName Name of the block blob to create or update.
|
|
* @param {HttpRequestBody} body Blob, string, ArrayBuffer, ArrayBufferView or a function
|
|
* which returns a new Readable stream whose offset is from data source beginning.
|
|
* @param {number} contentLength Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
|
|
* string including non non-Base64/Hex-encoded characters.
|
|
* @param {BlockBlobUploadOptions} [options] Options to configure the Block Blob Upload operation.
|
|
* @returns {Promise<{ blockBlobClient: BlockBlobClient; response: BlockBlobUploadResponse }>} Block Blob upload response data and the corresponding BlockBlobClient instance.
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.uploadBlockBlob = function (blobName, body, contentLength, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, blockBlobClient, response, e_50;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-uploadBlockBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
blockBlobClient = this.getBlockBlobClient(blobName);
|
|
return [4 /*yield*/, blockBlobClient.upload(body, contentLength, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2:
|
|
response = _b.sent();
|
|
return [2 /*return*/, {
|
|
blockBlobClient: blockBlobClient,
|
|
response: response
|
|
}];
|
|
case 3:
|
|
e_50 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_50.message
|
|
});
|
|
throw e_50;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob
|
|
*
|
|
* @param {string} blobName
|
|
* @param {BlobDeleteOptions} [options] Options to Blob Delete operation.
|
|
* @returns {Promise<BlobDeleteResponse>} Block blob deletion response data.
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.deleteBlob = function (blobName, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, blobClient, e_51;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-deleteBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
blobClient = this.getBlobClient(blobName);
|
|
return [4 /*yield*/, blobClient.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_51 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_51.message
|
|
});
|
|
throw e_51;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/rest/api/storageservices/list-blobs
|
|
*
|
|
* @param {string} [marker] A string value that identifies the portion of the list to be returned with the next list operation.
|
|
* @param {ContainerListBlobsSegmentOptions} [options] Options to Container List Blob Flat Segment operation.
|
|
* @returns {Promise<ContainerListBlobFlatSegmentResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listBlobFlatSegment = function (marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_52;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-listBlobFlatSegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.listBlobFlatSegment(tslib.__assign(tslib.__assign({ marker: marker }, options), { spanOptions: spanOptions }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_52 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_52.message
|
|
});
|
|
throw e_52;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/rest/api/storageservices/list-blobs
|
|
*
|
|
* @param {string} delimiter The charactor or string used to define the virtual hierarchy
|
|
* @param {string} [marker] A string value that identifies the portion of the list to be returned with the next list operation.
|
|
* @param {ContainerListBlobsSegmentOptions} [options] Options to Container List Blob Hierarchy Segment operation.
|
|
* @returns {Promise<ContainerListBlobHierarchySegmentResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listBlobHierarchySegment = function (delimiter, marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_53;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("ContainerClient-listBlobHierarchySegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.containerContext.listBlobHierarchySegment(delimiter, tslib.__assign(tslib.__assign({ marker: marker }, options), { spanOptions: spanOptions }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_53 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_53.message
|
|
});
|
|
throw e_53;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse
|
|
*
|
|
* @private
|
|
* @param {string} [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 {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
|
|
* @returns {AsyncIterableIterator<ContainerListBlobFlatSegmentResponse>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listSegments = function (marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listSegments_1() {
|
|
var listBlobsFlatSegmentResponse;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
|
|
_a.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(this.listBlobFlatSegment(marker, options))];
|
|
case 2:
|
|
listBlobsFlatSegmentResponse = _a.sent();
|
|
marker = listBlobsFlatSegmentResponse.continuationToken;
|
|
return [4 /*yield*/, tslib.__await(listBlobsFlatSegmentResponse)];
|
|
case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
|
|
case 4: return [4 /*yield*/, _a.sent()];
|
|
case 5:
|
|
_a.sent();
|
|
_a.label = 6;
|
|
case 6:
|
|
if (marker) return [3 /*break*/, 1];
|
|
_a.label = 7;
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator of {@link BlobItem} objects
|
|
*
|
|
* @private
|
|
* @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
|
|
* @returns {AsyncIterableIterator<BlobItem>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listItems = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listItems_1() {
|
|
var marker, _a, _b, listBlobsFlatSegmentResponse, e_54_1;
|
|
var e_54, _c;
|
|
return tslib.__generator(this, function (_d) {
|
|
switch (_d.label) {
|
|
case 0:
|
|
_d.trys.push([0, 7, 8, 13]);
|
|
_a = tslib.__asyncValues(this.listSegments(marker, options));
|
|
_d.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(_a.next())];
|
|
case 2:
|
|
if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6];
|
|
listBlobsFlatSegmentResponse = _b.value;
|
|
return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(listBlobsFlatSegmentResponse.segment.blobItems)))];
|
|
case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])];
|
|
case 4:
|
|
_d.sent();
|
|
_d.label = 5;
|
|
case 5: return [3 /*break*/, 1];
|
|
case 6: return [3 /*break*/, 13];
|
|
case 7:
|
|
e_54_1 = _d.sent();
|
|
e_54 = { error: e_54_1 };
|
|
return [3 /*break*/, 13];
|
|
case 8:
|
|
_d.trys.push([8, , 11, 12]);
|
|
if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10];
|
|
return [4 /*yield*/, tslib.__await(_c.call(_a))];
|
|
case 9:
|
|
_d.sent();
|
|
_d.label = 10;
|
|
case 10: return [3 /*break*/, 12];
|
|
case 11:
|
|
if (e_54) throw e_54.error;
|
|
return [7 /*endfinally*/];
|
|
case 12: return [7 /*endfinally*/];
|
|
case 13: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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.
|
|
*
|
|
* Example using `for await` syntax:
|
|
*
|
|
* ```js
|
|
* // Get the containerClient before you run these snippets,
|
|
* // Can be obtained from `blobServiceClient.getContainerClient("<your-container-name>");`
|
|
* let i = 1;
|
|
* for await (const blob of containerClient.listBlobsFlat()) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `iter.next()`:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* let iter = containerClient.listBlobsFlat();
|
|
* let blobItem = await iter.next();
|
|
* while (!blobItem.done) {
|
|
* console.log(`Blob ${i++}: ${blobItem.value.name}`);
|
|
* blobItem = await iter.next();
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `byPage()`:
|
|
*
|
|
* ```js
|
|
* // passing optional maxPageSize in the page settings
|
|
* let i = 1;
|
|
* for await (const response of containerClient.listBlobsFlat().byPage({ maxPageSize: 20 })) {
|
|
* for (const blob of response.segment.blobItems) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using paging with a marker:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* let iterator = containerClient.listBlobsFlat().byPage({ maxPageSize: 2 });
|
|
* let response = (await iterator.next()).value;
|
|
*
|
|
* // Prints 2 blob names
|
|
* 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
|
|
* for (const blob of response.segment.blobItems) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* ```
|
|
*
|
|
* @param {ContainerListBlobsOptions} [options={}] Options to list blobs.
|
|
* @returns {PagedAsyncIterableIterator<BlobItem, ContainerListBlobFlatSegmentResponse>} An asyncIterableIterator that supports paging.
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listBlobsFlat = function (options) {
|
|
var _a;
|
|
var _this = this;
|
|
if (options === void 0) { options = {}; }
|
|
var 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.includeUncommitedBlobs) {
|
|
include.push("uncommittedblobs");
|
|
}
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {}));
|
|
// AsyncIterableIterator to iterate over blobs
|
|
var iter = this.listItems(updatedOptions);
|
|
return _a = {
|
|
/**
|
|
* @member {Promise} [next] The next method, part of the iteration protocol
|
|
*/
|
|
next: function () {
|
|
return iter.next();
|
|
}
|
|
},
|
|
/**
|
|
* @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
_a[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
},
|
|
/**
|
|
* @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
_a.byPage = function (settings) {
|
|
if (settings === void 0) { settings = {}; }
|
|
return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
|
|
},
|
|
_a;
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse
|
|
*
|
|
* @private
|
|
* @param {string} delimiter The charactor or string used to define the virtual hierarchy
|
|
* @param {string} [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 {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
|
|
* @returns {AsyncIterableIterator<ContainerListBlobHierarchySegmentResponse>}
|
|
* @memberof ContainerClient
|
|
*/ ContainerClient.prototype.listHierarchySegments = function (delimiter, marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listHierarchySegments_1() {
|
|
var listBlobsHierarchySegmentResponse;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
|
|
_a.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(this.listBlobHierarchySegment(delimiter, marker, options))];
|
|
case 2:
|
|
listBlobsHierarchySegmentResponse = _a.sent();
|
|
marker = listBlobsHierarchySegmentResponse.continuationToken;
|
|
return [4 /*yield*/, tslib.__await(listBlobsHierarchySegmentResponse)];
|
|
case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
|
|
case 4: return [4 /*yield*/, _a.sent()];
|
|
case 5:
|
|
_a.sent();
|
|
_a.label = 6;
|
|
case 6:
|
|
if (marker) return [3 /*break*/, 1];
|
|
_a.label = 7;
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects.
|
|
*
|
|
* @private
|
|
* @param {string} delimiter The charactor or string used to define the virtual hierarchy
|
|
* @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
|
|
* @returns {AsyncIterableIterator<{ kind: "prefix" } & BlobPrefix | { kind: "blob" } & BlobItem>}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listItemsByHierarchy = function (delimiter, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listItemsByHierarchy_1() {
|
|
var marker, _a, _b, listBlobsHierarchySegmentResponse, segment, _i, _c, prefix, _d, _e, blob, e_55_1;
|
|
var e_55, _f;
|
|
return tslib.__generator(this, function (_g) {
|
|
switch (_g.label) {
|
|
case 0:
|
|
_g.trys.push([0, 14, 15, 20]);
|
|
_a = tslib.__asyncValues(this.listHierarchySegments(delimiter, marker, options));
|
|
_g.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(_a.next())];
|
|
case 2:
|
|
if (!(_b = _g.sent(), !_b.done)) return [3 /*break*/, 13];
|
|
listBlobsHierarchySegmentResponse = _b.value;
|
|
segment = listBlobsHierarchySegmentResponse.segment;
|
|
if (!segment.blobPrefixes) return [3 /*break*/, 7];
|
|
_i = 0, _c = segment.blobPrefixes;
|
|
_g.label = 3;
|
|
case 3:
|
|
if (!(_i < _c.length)) return [3 /*break*/, 7];
|
|
prefix = _c[_i];
|
|
return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "prefix" }, prefix))];
|
|
case 4: return [4 /*yield*/, _g.sent()];
|
|
case 5:
|
|
_g.sent();
|
|
_g.label = 6;
|
|
case 6:
|
|
_i++;
|
|
return [3 /*break*/, 3];
|
|
case 7:
|
|
_d = 0, _e = segment.blobItems;
|
|
_g.label = 8;
|
|
case 8:
|
|
if (!(_d < _e.length)) return [3 /*break*/, 12];
|
|
blob = _e[_d];
|
|
return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "blob" }, blob))];
|
|
case 9: return [4 /*yield*/, _g.sent()];
|
|
case 10:
|
|
_g.sent();
|
|
_g.label = 11;
|
|
case 11:
|
|
_d++;
|
|
return [3 /*break*/, 8];
|
|
case 12: return [3 /*break*/, 1];
|
|
case 13: return [3 /*break*/, 20];
|
|
case 14:
|
|
e_55_1 = _g.sent();
|
|
e_55 = { error: e_55_1 };
|
|
return [3 /*break*/, 20];
|
|
case 15:
|
|
_g.trys.push([15, , 18, 19]);
|
|
if (!(_b && !_b.done && (_f = _a.return))) return [3 /*break*/, 17];
|
|
return [4 /*yield*/, tslib.__await(_f.call(_a))];
|
|
case 16:
|
|
_g.sent();
|
|
_g.label = 17;
|
|
case 17: return [3 /*break*/, 19];
|
|
case 18:
|
|
if (e_55) throw e_55.error;
|
|
return [7 /*endfinally*/];
|
|
case 19: return [7 /*endfinally*/];
|
|
case 20: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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.
|
|
*
|
|
* Example using `for await` syntax:
|
|
*
|
|
* ```js
|
|
* for await (const item of containerClient.listBlobsByHierarchy("/")) {
|
|
* if (item.kind === "prefix") {
|
|
* console.log(`\tBlobPrefix: ${item.name}`);
|
|
* } else {
|
|
* console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `iter.next()`:
|
|
*
|
|
* ```js
|
|
* let iter = await containerClient.listBlobsByHierarchy("/", { prefix: "prefix1/" });
|
|
* let entity = await iter.next();
|
|
* while (!entity.done) {
|
|
* let item = entity.value;
|
|
* if (item.kind === "prefix") {
|
|
* console.log(`\tBlobPrefix: ${item.name}`);
|
|
* } else {
|
|
* console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
|
|
* }
|
|
* entity = await iter.next();
|
|
* }
|
|
* ```js
|
|
*
|
|
* Example using `byPage()`:
|
|
*
|
|
* ```js
|
|
* console.log("Listing blobs by hierarchy by page");
|
|
* for await (const response of containerClient.listBlobsByHierarchy("/").byPage()) {
|
|
* const segment = response.segment;
|
|
* if (segment.blobPrefixes) {
|
|
* for (const prefix of segment.blobPrefixes) {
|
|
* console.log(`\tBlobPrefix: ${prefix.name}`);
|
|
* }
|
|
* }
|
|
* for (const blob of response.segment.blobItems) {
|
|
* console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using paging with a max page size:
|
|
*
|
|
* ```js
|
|
* console.log("Listing blobs by hierarchy by page, specifying a prefix and a max page size");
|
|
*
|
|
* let i = 1;
|
|
* for await (const response of containerClient.listBlobsByHierarchy("/", { prefix: "prefix2/sub1/"}).byPage({ maxPageSize: 2 })) {
|
|
* console.log(`Page ${i++}`);
|
|
* const segment = response.segment;
|
|
*
|
|
* if (segment.blobPrefixes) {
|
|
* for (const prefix of segment.blobPrefixes) {
|
|
* console.log(`\tBlobPrefix: ${prefix.name}`);
|
|
* }
|
|
* }
|
|
*
|
|
* for (const blob of response.segment.blobItems) {
|
|
* console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* @param {string} delimiter The charactor or string used to define the virtual hierarchy
|
|
* @param {ContainerListBlobsOptions} [options={}] Options to list blobs operation.
|
|
* @returns {(PagedAsyncIterableIterator<
|
|
* { kind: "prefix" } & BlobPrefix | { kind: "blob" } & BlobItem,
|
|
* ContainerListBlobHierarchySegmentResponse
|
|
* >)}
|
|
* @memberof ContainerClient
|
|
*/
|
|
ContainerClient.prototype.listBlobsByHierarchy = function (delimiter, options) {
|
|
var _a;
|
|
var _this = this;
|
|
if (options === void 0) { options = {}; }
|
|
var 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.includeUncommitedBlobs) {
|
|
include.push("uncommittedblobs");
|
|
}
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {}));
|
|
// AsyncIterableIterator to iterate over blob prefixes and blobs
|
|
var iter = this.listItemsByHierarchy(delimiter, updatedOptions);
|
|
return _a = {
|
|
/**
|
|
* @member {Promise} [next] The next method, part of the iteration protocol
|
|
*/
|
|
next: function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, iter.next()];
|
|
});
|
|
});
|
|
}
|
|
},
|
|
/**
|
|
* @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
_a[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
},
|
|
/**
|
|
* @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
_a.byPage = function (settings) {
|
|
if (settings === void 0) { settings = {}; }
|
|
return _this.listHierarchySegments(delimiter, settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
|
|
},
|
|
_a;
|
|
};
|
|
ContainerClient.prototype.getContainerNameFromUrl = function () {
|
|
var 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
|
|
var parsedUrl = coreHttp.URLBuilder.parse(this.url);
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// "https://myaccount.blob.core.windows.net/containername".
|
|
// .getPath() -> /containername
|
|
containerName = parsedUrl.getPath().split("/")[1];
|
|
}
|
|
else {
|
|
// 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.getPath().split("/")[2];
|
|
}
|
|
// 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.");
|
|
}
|
|
};
|
|
return ContainerClient;
|
|
}(StorageClient));
|
|
|
|
function getBodyAsText(batchResponse) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var buffer, responseLength;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
buffer = Buffer.alloc(BATCH_MAX_PAYLOAD_IN_BYTES);
|
|
return [4 /*yield*/, streamToBuffer2(batchResponse.readableStreamBody, buffer)];
|
|
case 1:
|
|
responseLength = _a.sent();
|
|
// Slice the buffer to trim the empty ending.
|
|
buffer = buffer.slice(0, responseLength);
|
|
return [2 /*return*/, buffer.toString()];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function utf8ByteLength(str) {
|
|
return Buffer.byteLength(str);
|
|
}
|
|
|
|
var HTTP_HEADER_DELIMITER = ": ";
|
|
var SPACE_DELIMITER = " ";
|
|
var NOT_FOUND = -1;
|
|
/**
|
|
* Util class for parsing batch response.
|
|
*/
|
|
var BatchResponseParser = /** @class */ (function () {
|
|
function BatchResponseParser(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://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response
|
|
BatchResponseParser.prototype.parseBatchResponse = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var responseBodyAsText, subResponses, subResponseCount, deserializedSubResponses, subResponsesSucceededCount, subResponsesFailedCount, index, subResponse, deserializedSubResponse, responseLines, subRespHeaderStartFound, subRespHeaderEndFound, subRespFailed, contentId, _i, responseLines_1, responseLine, tokens, tokens;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
// 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 + "'.");
|
|
}
|
|
return [4 /*yield*/, getBodyAsText(this.batchResponse)];
|
|
case 1:
|
|
responseBodyAsText = _a.sent();
|
|
subResponses = responseBodyAsText
|
|
.split(this.batchResponseEnding)[0] // string after ending is useless
|
|
.split(this.perResponsePrefix)
|
|
.slice(1);
|
|
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.");
|
|
}
|
|
deserializedSubResponses = new Array(subResponseCount);
|
|
subResponsesSucceededCount = 0;
|
|
subResponsesFailedCount = 0;
|
|
// Parse sub subResponses.
|
|
for (index = 0; index < subResponseCount; index++) {
|
|
subResponse = subResponses[index];
|
|
deserializedSubResponses[index] = {};
|
|
deserializedSubResponse = deserializedSubResponses[index];
|
|
deserializedSubResponse.headers = new coreHttp.HttpHeaders();
|
|
responseLines = subResponse.split("" + HTTP_LINE_ENDING);
|
|
subRespHeaderStartFound = false;
|
|
subRespHeaderEndFound = false;
|
|
subRespFailed = false;
|
|
contentId = NOT_FOUND;
|
|
for (_i = 0, responseLines_1 = responseLines; _i < responseLines_1.length; _i++) {
|
|
responseLine = responseLines_1[_i];
|
|
if (!subRespHeaderStartFound) {
|
|
// Convention line to indicate content ID
|
|
if (responseLine.startsWith(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;
|
|
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 + "'.");
|
|
}
|
|
tokens = responseLine.split(HTTP_HEADER_DELIMITER);
|
|
deserializedSubResponse.headers.set(tokens[0], tokens[1]);
|
|
if (tokens[0] === 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
|
|
if (contentId != NOT_FOUND) {
|
|
deserializedSubResponse._request = this.subRequests.get(contentId);
|
|
}
|
|
if (subRespFailed) {
|
|
subResponsesFailedCount++;
|
|
}
|
|
else {
|
|
subResponsesSucceededCount++;
|
|
}
|
|
}
|
|
return [2 /*return*/, {
|
|
subResponses: deserializedSubResponses,
|
|
subResponsesSucceededCount: subResponsesSucceededCount,
|
|
subResponsesFailedCount: subResponsesFailedCount
|
|
}];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BatchResponseParser;
|
|
}());
|
|
|
|
var MutexLockStatus;
|
|
(function (MutexLockStatus) {
|
|
MutexLockStatus[MutexLockStatus["LOCKED"] = 0] = "LOCKED";
|
|
MutexLockStatus[MutexLockStatus["UNLOCKED"] = 1] = "UNLOCKED";
|
|
})(MutexLockStatus || (MutexLockStatus = {}));
|
|
/**
|
|
* An async mutex lock.
|
|
*
|
|
* @export
|
|
* @class Mutex
|
|
*/
|
|
var Mutex = /** @class */ (function () {
|
|
function Mutex() {
|
|
}
|
|
/**
|
|
* Lock for a specific key. If the lock has been acquired by another customer, then
|
|
* will wait until getting the lock.
|
|
*
|
|
* @static
|
|
* @param {string} key lock key
|
|
* @returns {Promise<void>}
|
|
* @memberof Mutex
|
|
*/
|
|
Mutex.lock = function (key) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, new Promise(function (resolve) {
|
|
if (_this.keys[key] === undefined || _this.keys[key] === MutexLockStatus.UNLOCKED) {
|
|
_this.keys[key] = MutexLockStatus.LOCKED;
|
|
resolve();
|
|
}
|
|
else {
|
|
_this.onUnlockEvent(key, function () {
|
|
_this.keys[key] = MutexLockStatus.LOCKED;
|
|
resolve();
|
|
});
|
|
}
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Unlock a key.
|
|
*
|
|
* @static
|
|
* @param {string} key
|
|
* @returns {Promise<void>}
|
|
* @memberof Mutex
|
|
*/
|
|
Mutex.unlock = function (key) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, new Promise(function (resolve) {
|
|
if (_this.keys[key] === MutexLockStatus.LOCKED) {
|
|
_this.emitUnlockEvent(key);
|
|
}
|
|
delete _this.keys[key];
|
|
resolve();
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
Mutex.onUnlockEvent = function (key, handler) {
|
|
if (this.listeners[key] === undefined) {
|
|
this.listeners[key] = [handler];
|
|
}
|
|
else {
|
|
this.listeners[key].push(handler);
|
|
}
|
|
};
|
|
Mutex.emitUnlockEvent = function (key) {
|
|
var _this = this;
|
|
if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {
|
|
var handler_1 = this.listeners[key].shift();
|
|
setImmediate(function () {
|
|
handler_1.call(_this);
|
|
});
|
|
}
|
|
};
|
|
Mutex.keys = {};
|
|
Mutex.listeners = {};
|
|
return Mutex;
|
|
}());
|
|
|
|
/**
|
|
* A BlobBatch represents an aggregated set of operations on blobs.
|
|
* Currently, only `delete` and `setAccessTier` are supported.
|
|
*
|
|
* @export
|
|
* @class BlobBatch
|
|
*/
|
|
var BlobBatch = /** @class */ (function () {
|
|
function BlobBatch() {
|
|
this.batch = "batch";
|
|
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
|
|
*/
|
|
BlobBatch.prototype.getMultiPartContentType = function () {
|
|
return this.batchRequest.getMultipartContentType();
|
|
};
|
|
/**
|
|
* Get assembled HTTP request body for sub requests.
|
|
*/
|
|
BlobBatch.prototype.getHttpRequestBody = function () {
|
|
return this.batchRequest.getHttpRequestBody();
|
|
};
|
|
/**
|
|
* Get sub requests that are added into the batch request.
|
|
*/
|
|
BlobBatch.prototype.getSubRequests = function () {
|
|
return this.batchRequest.getSubRequests();
|
|
};
|
|
BlobBatch.prototype.addSubRequestInternal = function (subRequest, assembleSubRequestFunc) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4 /*yield*/, Mutex.lock(this.batch)];
|
|
case 1:
|
|
_a.sent();
|
|
_a.label = 2;
|
|
case 2:
|
|
_a.trys.push([2, , 4, 6]);
|
|
this.batchRequest.preAddSubRequest(subRequest);
|
|
return [4 /*yield*/, assembleSubRequestFunc()];
|
|
case 3:
|
|
_a.sent();
|
|
this.batchRequest.postAddSubRequest(subRequest);
|
|
return [3 /*break*/, 6];
|
|
case 4: return [4 /*yield*/, Mutex.unlock(this.batch)];
|
|
case 5:
|
|
_a.sent();
|
|
return [7 /*endfinally*/];
|
|
case 6: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BlobBatch.prototype.setBatchType = function (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.");
|
|
}
|
|
};
|
|
BlobBatch.prototype.deleteBlob = function (urlOrBlobClient, credentialOrOptions, options) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var url, credential, _a, span, spanOptions, e_1;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (typeof urlOrBlobClient === "string" &&
|
|
((coreHttp.isNode && credentialOrOptions instanceof StorageSharedKeyCredential) ||
|
|
credentialOrOptions instanceof AnonymousCredential ||
|
|
coreHttp.isTokenCredential(credentialOrOptions))) {
|
|
// First overload
|
|
url = urlOrBlobClient;
|
|
credential = credentialOrOptions;
|
|
}
|
|
else if (urlOrBlobClient instanceof 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 = {};
|
|
}
|
|
_a = createSpan("BatchDeleteRequest-addSubRequest", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
this.setBatchType("delete");
|
|
return [4 /*yield*/, this.addSubRequestInternal({
|
|
url: url,
|
|
credential: credential
|
|
}, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 1:
|
|
_a.sent();
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); })];
|
|
case 2:
|
|
_b.sent();
|
|
return [3 /*break*/, 5];
|
|
case 3:
|
|
e_1 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_1.message
|
|
});
|
|
throw e_1;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BlobBatch.prototype.setBlobAccessTier = function (urlOrBlobClient, credentialOrTier, tierOrOptions, options) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var url, credential, tier, _a, span, spanOptions, e_2;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (typeof urlOrBlobClient === "string" &&
|
|
((coreHttp.isNode && credentialOrTier instanceof StorageSharedKeyCredential) ||
|
|
credentialOrTier instanceof AnonymousCredential ||
|
|
coreHttp.isTokenCredential(credentialOrTier))) {
|
|
// First overload
|
|
url = urlOrBlobClient;
|
|
credential = credentialOrTier;
|
|
tier = tierOrOptions;
|
|
}
|
|
else if (urlOrBlobClient instanceof 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 = {};
|
|
}
|
|
_a = createSpan("BatchSetTierRequest-addSubRequest", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
this.setBatchType("setAccessTier");
|
|
return [4 /*yield*/, this.addSubRequestInternal({
|
|
url: url,
|
|
credential: credential
|
|
}, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 1:
|
|
_a.sent();
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
}); })];
|
|
case 2:
|
|
_b.sent();
|
|
return [3 /*break*/, 5];
|
|
case 3:
|
|
e_2 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_2.message
|
|
});
|
|
throw e_2;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BlobBatch;
|
|
}());
|
|
/**
|
|
* Inner batch request class which is responsible for assembling and serializing sub requests.
|
|
* See https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#request-body for how requests are assembled.
|
|
*/
|
|
var InnerBatchRequest = /** @class */ (function () {
|
|
function InnerBatchRequest() {
|
|
this.operationCount = 0;
|
|
this.body = "";
|
|
var tempGuid = coreHttp.generateUuid();
|
|
// batch_{batchid}
|
|
this.boundary = "batch_" + tempGuid;
|
|
// --batch_{batchid}
|
|
// Content-Type: application/http
|
|
// Content-Transfer-Encoding: binary
|
|
this.subRequestPrefix = "--" + this.boundary + HTTP_LINE_ENDING + HeaderConstants.CONTENT_TYPE + ": application/http" + HTTP_LINE_ENDING + 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 exising
|
|
* 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 {StorageSharedKeyCredential | AnonymousCredential | TokenCredential} 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.
|
|
*/
|
|
InnerBatchRequest.prototype.createPipeline = function (credential) {
|
|
var isAnonymousCreds = credential instanceof AnonymousCredential;
|
|
var policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserilizationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory]
|
|
var factories = new Array(policyFactoryLength);
|
|
factories[0] = coreHttp.deserializationPolicy(); // Default deserializationPolicy is provided by protocol layer
|
|
factories[1] = new BatchHeaderFilterPolicyFactory(); // Use batch header filter policy to exclude unnecessary headers
|
|
if (!isAnonymousCreds) {
|
|
factories[2] = coreHttp.isTokenCredential(credential)
|
|
? coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes)
|
|
: credential;
|
|
}
|
|
factories[policyFactoryLength - 1] = new BatchRequestAssemblePolicyFactory(this); // Use batch assemble policy to assemble request and intercept request from going to wire
|
|
return new Pipeline(factories, {});
|
|
};
|
|
InnerBatchRequest.prototype.appendSubRequestToBody = function (request) {
|
|
// Start to assemble sub request
|
|
this.body += [
|
|
this.subRequestPrefix,
|
|
HeaderConstants.CONTENT_ID + ": " + this.operationCount,
|
|
"",
|
|
request.method.toString() + " " + getURLPathAndQuery(request.url) + " " + HTTP_VERSION_1_1 + HTTP_LINE_ENDING // sub request start line with method
|
|
].join(HTTP_LINE_ENDING);
|
|
for (var _i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) {
|
|
var header = _a[_i];
|
|
this.body += header.name + ": " + header.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
|
|
};
|
|
InnerBatchRequest.prototype.preAddSubRequest = function (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
|
|
var path = getURLPath(subRequest.url);
|
|
if (!path || path == "") {
|
|
throw new RangeError("Invalid url for sub request: '" + subRequest.url + "'");
|
|
}
|
|
};
|
|
InnerBatchRequest.prototype.postAddSubRequest = function (subRequest) {
|
|
this.subRequests.set(this.operationCount, subRequest);
|
|
this.operationCount++;
|
|
};
|
|
// Return the http request body with assembling the ending line to the sub request body.
|
|
InnerBatchRequest.prototype.getHttpRequestBody = function () {
|
|
return "" + this.body + this.batchRequestEnding + HTTP_LINE_ENDING;
|
|
};
|
|
InnerBatchRequest.prototype.getMultipartContentType = function () {
|
|
return this.multipartContentType;
|
|
};
|
|
InnerBatchRequest.prototype.getSubRequests = function () {
|
|
return this.subRequests;
|
|
};
|
|
return InnerBatchRequest;
|
|
}());
|
|
var BatchRequestAssemblePolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(BatchRequestAssemblePolicy, _super);
|
|
function BatchRequestAssemblePolicy(batchRequest, nextPolicy, options) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.dummyResponse = {
|
|
request: new coreHttp.WebResource(),
|
|
status: 200,
|
|
headers: new coreHttp.HttpHeaders()
|
|
};
|
|
_this.batchRequest = batchRequest;
|
|
return _this;
|
|
}
|
|
BatchRequestAssemblePolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0: return [4 /*yield*/, this.batchRequest.appendSubRequestToBody(request)];
|
|
case 1:
|
|
_a.sent();
|
|
return [2 /*return*/, this.dummyResponse]; // Intercept request from going to wire
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BatchRequestAssemblePolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
var BatchRequestAssemblePolicyFactory = /** @class */ (function () {
|
|
function BatchRequestAssemblePolicyFactory(batchRequest) {
|
|
this.batchRequest = batchRequest;
|
|
}
|
|
BatchRequestAssemblePolicyFactory.prototype.create = function (nextPolicy, options) {
|
|
return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options);
|
|
};
|
|
return BatchRequestAssemblePolicyFactory;
|
|
}());
|
|
var BatchHeaderFilterPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(BatchHeaderFilterPolicy, _super);
|
|
function BatchHeaderFilterPolicy(nextPolicy, options) {
|
|
return _super.call(this, nextPolicy, options) || this;
|
|
}
|
|
BatchHeaderFilterPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var xMsHeaderName, _i, _a, header;
|
|
return tslib.__generator(this, function (_b) {
|
|
xMsHeaderName = "";
|
|
for (_i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) {
|
|
header = _a[_i];
|
|
if (iEqual(header.name, HeaderConstants.X_MS_VERSION)) {
|
|
xMsHeaderName = header.name;
|
|
}
|
|
}
|
|
if (xMsHeaderName !== "") {
|
|
request.headers.remove(xMsHeaderName); // The subrequests should not have the x-ms-version header.
|
|
}
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
});
|
|
});
|
|
};
|
|
return BatchHeaderFilterPolicy;
|
|
}(coreHttp.BaseRequestPolicy));
|
|
var BatchHeaderFilterPolicyFactory = /** @class */ (function () {
|
|
function BatchHeaderFilterPolicyFactory() {
|
|
}
|
|
BatchHeaderFilterPolicyFactory.prototype.create = function (nextPolicy, options) {
|
|
return new BatchHeaderFilterPolicy(nextPolicy, options);
|
|
};
|
|
return BatchHeaderFilterPolicyFactory;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* A BlobBatchClient allows you to make batched requests to the Azure Storage Blob service.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
|
|
*/
|
|
var BlobBatchClient = /** @class */ (function () {
|
|
function BlobBatchClient(url, credentialOrPipeline, options) {
|
|
var pipeline;
|
|
if (credentialOrPipeline instanceof Pipeline) {
|
|
pipeline = credentialOrPipeline;
|
|
}
|
|
else if (!credentialOrPipeline) {
|
|
// no credential provided
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
else {
|
|
pipeline = newPipeline(credentialOrPipeline, options);
|
|
}
|
|
var storageClientContext = new StorageClientContext(url, pipeline.toServiceClientOptions());
|
|
this._serviceContext = new Service(storageClientContext);
|
|
}
|
|
/**
|
|
* Creates a {@link BlobBatch}.
|
|
* A BlobBatch represents an aggregated set of operations on blobs.
|
|
*/
|
|
BlobBatchClient.prototype.createBatch = function () {
|
|
return new BlobBatch();
|
|
};
|
|
BlobBatchClient.prototype.deleteBlobs = function (urlsOrBlobClients, credentialOrOptions, options) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var batch, _i, urlsOrBlobClients_1, urlOrBlobClient;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
batch = new BlobBatch();
|
|
_i = 0, urlsOrBlobClients_1 = urlsOrBlobClients;
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(_i < urlsOrBlobClients_1.length)) return [3 /*break*/, 6];
|
|
urlOrBlobClient = urlsOrBlobClients_1[_i];
|
|
if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options)];
|
|
case 2:
|
|
_a.sent();
|
|
return [3 /*break*/, 5];
|
|
case 3: return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions)];
|
|
case 4:
|
|
_a.sent();
|
|
_a.label = 5;
|
|
case 5:
|
|
_i++;
|
|
return [3 /*break*/, 1];
|
|
case 6: return [2 /*return*/, this.submitBatch(batch)];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BlobBatchClient.prototype.setBlobsAccessTier = function (urlsOrBlobClients, credentialOrTier, tierOrOptions, options) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var batch, _i, urlsOrBlobClients_2, urlOrBlobClient;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
batch = new BlobBatch();
|
|
_i = 0, urlsOrBlobClients_2 = urlsOrBlobClients;
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(_i < urlsOrBlobClients_2.length)) return [3 /*break*/, 6];
|
|
urlOrBlobClient = urlsOrBlobClients_2[_i];
|
|
if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3];
|
|
return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options)];
|
|
case 2:
|
|
_a.sent();
|
|
return [3 /*break*/, 5];
|
|
case 3: return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions)];
|
|
case 4:
|
|
_a.sent();
|
|
_a.label = 5;
|
|
case 5:
|
|
_i++;
|
|
return [3 /*break*/, 1];
|
|
case 6: return [2 /*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:
|
|
*
|
|
* ```js
|
|
* let batchRequest = new BlobBatch();
|
|
* await batchRequest.deleteBlob(urlInString0, credential0);
|
|
* await batchRequest.deleteBlob(urlInString1, credential1, {
|
|
* deleteSnapshots: "include"
|
|
* });
|
|
* const batchResp = await blobBatchClient.submitBatch(batchRequest);
|
|
* console.log(batchResp.subResponsesSucceededCount);
|
|
* ```
|
|
*
|
|
* Example using a lease:
|
|
*
|
|
* ```js
|
|
* let batchRequest = new BlobBatch();
|
|
* await batchRequest.setBlobAccessTier(blockBlobClient0, "Cool");
|
|
* await batchRequest.setBlobAccessTier(blockBlobClient1, "Cool", {
|
|
* conditions: { leaseId: leaseId }
|
|
* });
|
|
* const batchResp = await blobBatchClient.submitBatch(batchRequest);
|
|
* console.log(batchResp.subResponsesSucceededCount);
|
|
* ```
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
|
|
*
|
|
* @param {BlobBatch} batchRequest A set of Delete or SetTier operations.
|
|
* @param {BlobBatchSubmitBatchOptionalParams} [options]
|
|
* @returns {Promise<BlobBatchSubmitBatchResponse>}
|
|
* @memberof BlobBatchClient
|
|
*/
|
|
BlobBatchClient.prototype.submitBatch = function (batchRequest, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, batchRequestBody, rawBatchResponse, batchResponseParser, responseSummary, res, e_1;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
if (!batchRequest || batchRequest.getSubRequests().size == 0) {
|
|
throw new RangeError("Batch request should contain one or more sub requests.");
|
|
}
|
|
_a = createSpan("BlobBatchClient-submitBatch", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 4, 5, 6]);
|
|
batchRequestBody = batchRequest.getHttpRequestBody();
|
|
return [4 /*yield*/, this._serviceContext.submitBatch(batchRequestBody, utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), tslib.__assign(tslib.__assign({}, options), { spanOptions: spanOptions }))];
|
|
case 2:
|
|
rawBatchResponse = _b.sent();
|
|
batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests());
|
|
return [4 /*yield*/, batchResponseParser.parseBatchResponse()];
|
|
case 3:
|
|
responseSummary = _b.sent();
|
|
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 [2 /*return*/, res];
|
|
case 4:
|
|
e_1 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_1.message
|
|
});
|
|
throw e_1;
|
|
case 5:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 6: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BlobBatchClient;
|
|
}());
|
|
|
|
/**
|
|
* A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you
|
|
* to manipulate blob containers.
|
|
*
|
|
* @export
|
|
* @class BlobServiceClient
|
|
*/
|
|
var BlobServiceClient = /** @class */ (function (_super) {
|
|
tslib.__extends(BlobServiceClient, _super);
|
|
function BlobServiceClient(url, credentialOrPipeline, options) {
|
|
var _this = this;
|
|
var pipeline;
|
|
if (credentialOrPipeline instanceof Pipeline) {
|
|
pipeline = credentialOrPipeline;
|
|
}
|
|
else if ((coreHttp.isNode && credentialOrPipeline instanceof StorageSharedKeyCredential) ||
|
|
credentialOrPipeline instanceof AnonymousCredential ||
|
|
coreHttp.isTokenCredential(credentialOrPipeline)) {
|
|
pipeline = newPipeline(credentialOrPipeline, options);
|
|
}
|
|
else {
|
|
// The second parameter is undefined. Use anonymous credential
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
_this = _super.call(this, url, pipeline) || this;
|
|
_this.serviceContext = new Service(_this.storageClientContext);
|
|
return _this;
|
|
}
|
|
/**
|
|
*
|
|
* Creates an instance of BlobServiceClient from connection string.
|
|
*
|
|
* @param {string} 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 {StoragePipelineOptions} [options] Optional. Options to configure the HTTP pipeline.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.fromConnectionString = function (connectionString, options) {
|
|
options = options || {};
|
|
var extractedCreds = extractConnectionStringParts(connectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
var pipeline = newPipeline(sharedKeyCredential, options);
|
|
return new BlobServiceClient(extractedCreds.url, pipeline);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
var pipeline = newPipeline(new AnonymousCredential(), options);
|
|
return new BlobServiceClient(extractedCreds.url + "?" + extractedCreds.accountSas, pipeline);
|
|
}
|
|
else {
|
|
throw new Error("Connection string must be either an Account connection string or a SAS connection string");
|
|
}
|
|
};
|
|
/**
|
|
* Creates a {@link ContainerClient} object
|
|
*
|
|
* @param {string} containerName A container name
|
|
* @returns {ContainerClient} A new ContainerClient object for the given container name.
|
|
* @memberof BlobServiceClient
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const containerClient = blobServiceClient.getContainerClient("<container name>");
|
|
* ```
|
|
*/
|
|
BlobServiceClient.prototype.getContainerClient = function (containerName) {
|
|
return new ContainerClient(appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline);
|
|
};
|
|
/**
|
|
* Create a Blob container.
|
|
*
|
|
* @param {string} containerName Name of the container to create.
|
|
* @param {ContainerCreateOptions} [options] Options to configure Container Create operation.
|
|
* @returns {Promise<{ containerClient: ContainerClient; containerCreateResponse: ContainerCreateResponse }>} Container creation response and the corresponding container client.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.createContainer = function (containerName, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, containerClient, containerCreateResponse, e_1;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-createContainer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
containerClient = this.getContainerClient(containerName);
|
|
return [4 /*yield*/, containerClient.create(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2:
|
|
containerCreateResponse = _b.sent();
|
|
return [2 /*return*/, {
|
|
containerClient: containerClient,
|
|
containerCreateResponse: containerCreateResponse
|
|
}];
|
|
case 3:
|
|
e_1 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_1.message
|
|
});
|
|
throw e_1;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Deletes a Blob container.
|
|
*
|
|
* @param {string} containerName Name of the container to delete.
|
|
* @param {ContainerDeleteMethodOptions} [options] Options to configure Container Delete operation.
|
|
* @returns {Promise<ContainerDeleteResponse>} Container deletion response.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.deleteContainer = function (containerName, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, containerClient, e_2;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-deleteContainer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
containerClient = this.getContainerClient(containerName);
|
|
return [4 /*yield*/, containerClient.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_2 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_2.message
|
|
});
|
|
throw e_2;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Gets the properties of a storage account’s Blob service, including properties
|
|
* for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties
|
|
*
|
|
* @param {ServiceGetPropertiesOptions} [options] Options to the Service Get Properties operation.
|
|
* @returns {Promise<ServiceGetPropertiesResponse>} Response data for the Service Get Properties operation.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.getProperties = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_3;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-getProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_3 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_3.message
|
|
});
|
|
throw e_3;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-service-properties}
|
|
*
|
|
* @param {BlobServiceProperties} properties
|
|
* @param {ServiceSetPropertiesOptions} [options] Options to the Service Set Properties operation.
|
|
* @returns {Promise<ServiceSetPropertiesResponse>} Response data for the Service Set Properties operation.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.setProperties = function (properties, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_4;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-setProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.setProperties(properties, {
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_4 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_4.message
|
|
});
|
|
throw e_4;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats}
|
|
*
|
|
* @param {ServiceGetStatisticsOptions} [options] Options to the Service Get Statistics operation.
|
|
* @returns {Promise<ServiceGetStatisticsResponse>} Response data for the Service Get Statistics operation.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.getStatistics = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_5;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-getStatistics", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.getStatistics({
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_5 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_5.message
|
|
});
|
|
throw e_5;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/get-account-information
|
|
*
|
|
* @param {ServiceGetAccountInfoOptions} [options] Options to the Service Get Account Info operation.
|
|
* @returns {Promise<ServiceGetAccountInfoResponse>} Response data for the Service Get Account Info operation.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.getAccountInfo = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_6;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-getAccountInfo", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.getAccountInfo({
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_6 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_6.message
|
|
});
|
|
throw e_6;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns a list of the containers under the specified account.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2
|
|
*
|
|
* @param {string} [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 NextMarker value within the response body if the
|
|
* listing operation did not return all containers remaining to be listed
|
|
* with the current page. The NextMarker 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 {ServiceListContainersSegmentOptions} [options] Options to the Service List Container Segment operation.
|
|
* @returns {Promise<ServiceListContainersSegmentResponse>} Response data for the Service List Container Segment operation.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.listContainersSegment = function (marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, e_7;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-listContainersSegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.listContainersSegment(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal, marker: marker }, options), { spanOptions: spanOptions }))];
|
|
case 2: return [2 /*return*/, _b.sent()];
|
|
case 3:
|
|
e_7 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_7.message
|
|
});
|
|
throw e_7;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses
|
|
*
|
|
* @private
|
|
* @param {string} [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 NextMarker value within the response body if the
|
|
* listing operation did not return all containers remaining to be listed
|
|
* with the current page. The NextMarker 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 {ServiceListContainersSegmentOptions} [options] Options to list containers operation.
|
|
* @returns {AsyncIterableIterator<ServiceListContainersSegmentResponse>}
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.listSegments = function (marker, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listSegments_1() {
|
|
var listContainersSegmentResponse;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
|
|
_a.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(this.listContainersSegment(marker, options))];
|
|
case 2:
|
|
listContainersSegmentResponse = _a.sent();
|
|
listContainersSegmentResponse.containerItems =
|
|
listContainersSegmentResponse.containerItems || [];
|
|
marker = listContainersSegmentResponse.continuationToken;
|
|
return [4 /*yield*/, tslib.__await(listContainersSegmentResponse)];
|
|
case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
|
|
case 4: return [4 /*yield*/, _a.sent()];
|
|
case 5:
|
|
_a.sent();
|
|
_a.label = 6;
|
|
case 6:
|
|
if (marker) return [3 /*break*/, 1];
|
|
_a.label = 7;
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Returns an AsyncIterableIterator for Container Items
|
|
*
|
|
* @private
|
|
* @param {ServiceListContainersSegmentOptions} [options] Options to list containers operation.
|
|
* @returns {AsyncIterableIterator<ContainerItem>}
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.listItems = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__asyncGenerator(this, arguments, function listItems_1() {
|
|
var marker, _a, _b, segment, e_8_1;
|
|
var e_8, _c;
|
|
return tslib.__generator(this, function (_d) {
|
|
switch (_d.label) {
|
|
case 0:
|
|
_d.trys.push([0, 7, 8, 13]);
|
|
_a = tslib.__asyncValues(this.listSegments(marker, options));
|
|
_d.label = 1;
|
|
case 1: return [4 /*yield*/, tslib.__await(_a.next())];
|
|
case 2:
|
|
if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6];
|
|
segment = _b.value;
|
|
return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(segment.containerItems)))];
|
|
case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])];
|
|
case 4:
|
|
_d.sent();
|
|
_d.label = 5;
|
|
case 5: return [3 /*break*/, 1];
|
|
case 6: return [3 /*break*/, 13];
|
|
case 7:
|
|
e_8_1 = _d.sent();
|
|
e_8 = { error: e_8_1 };
|
|
return [3 /*break*/, 13];
|
|
case 8:
|
|
_d.trys.push([8, , 11, 12]);
|
|
if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10];
|
|
return [4 /*yield*/, tslib.__await(_c.call(_a))];
|
|
case 9:
|
|
_d.sent();
|
|
_d.label = 10;
|
|
case 10: return [3 /*break*/, 12];
|
|
case 11:
|
|
if (e_8) throw e_8.error;
|
|
return [7 /*endfinally*/];
|
|
case 12: return [7 /*endfinally*/];
|
|
case 13: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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.
|
|
*
|
|
* Example using `for await` syntax:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* for await (const container of blobServiceClient.listContainers()) {
|
|
* console.log(`Container ${i++}: ${container.name}`);
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `iter.next()`:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* const iter = blobServiceClient.listContainers();
|
|
* let containerItem = await iter.next();
|
|
* while (!containerItem.done) {
|
|
* console.log(`Container ${i++}: ${containerItem.value.name}`);
|
|
* containerItem = await iter.next();
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `byPage()`:
|
|
*
|
|
* ```js
|
|
* // passing optional maxPageSize in the page settings
|
|
* let i = 1;
|
|
* for await (const response of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) {
|
|
* if (response.containerItems) {
|
|
* for (const container of response.containerItems) {
|
|
* console.log(`Container ${i++}: ${container.name}`);
|
|
* }
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using paging with a marker:
|
|
*
|
|
* ```js
|
|
* let 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 {ServiceListContainersOptions} [options={}] Options to list containers.
|
|
* @returns {PagedAsyncIterableIterator<ContainerItem, ServiceListContainersSegmentResponse>} An asyncIterableIterator that supports paging.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.listContainers = function (options) {
|
|
var _a;
|
|
var _this = this;
|
|
if (options === void 0) { options = {}; }
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
// AsyncIterableIterator to iterate over containers
|
|
var listSegmentOptions = tslib.__assign(tslib.__assign({}, options), (options.includeMetadata ? { include: "metadata" } : {}));
|
|
var iter = this.listItems(listSegmentOptions);
|
|
return _a = {
|
|
/**
|
|
* @member {Promise} [next] The next method, part of the iteration protocol
|
|
*/
|
|
next: function () {
|
|
return iter.next();
|
|
}
|
|
},
|
|
/**
|
|
* @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
_a[Symbol.asyncIterator] = function () {
|
|
return this;
|
|
},
|
|
/**
|
|
* @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
_a.byPage = function (settings) {
|
|
if (settings === void 0) { settings = {}; }
|
|
return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions));
|
|
},
|
|
_a;
|
|
};
|
|
/**
|
|
* ONLY AVAILABLE WHEN USING BEARER TOKEN AUTHENTICATION (TokenCredential).
|
|
*
|
|
* Retrieves a user delegation key for the Blob service. This is only a valid operation when using
|
|
* bearer token authentication.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key
|
|
*
|
|
* @param {Date} startsOn The start time for the user delegation SAS. Must be within 7 days of the current time
|
|
* @param {Date} expiresOn The end time for the user delegation SAS. Must be within 7 days of the current time
|
|
* @returns {Promise<ServiceGetUserDelegationKeyResponse>}
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.getUserDelegationKey = function (startsOn, expiresOn, options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a, span, spanOptions, response, userDelegationKey, res, e_9;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = createSpan("BlobServiceClient-getUserDelegationKey", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 3, 4, 5]);
|
|
return [4 /*yield*/, this.serviceContext.getUserDelegationKey({
|
|
startsOn: truncatedISO8061Date(startsOn, false),
|
|
expiresOn: truncatedISO8061Date(expiresOn, false)
|
|
}, {
|
|
abortSignal: options.abortSignal,
|
|
spanOptions: spanOptions
|
|
})];
|
|
case 2:
|
|
response = _b.sent();
|
|
userDelegationKey = {
|
|
signedObjectId: response.signedObjectId,
|
|
signedTenantId: response.signedTenantId,
|
|
signedStartsOn: new Date(response.signedStartsOn),
|
|
signedExpiresOn: new Date(response.signedExpiresOn),
|
|
signedService: response.signedService,
|
|
signedVersion: response.signedVersion,
|
|
value: response.value
|
|
};
|
|
res = tslib.__assign({ _response: response._response, requestId: response.requestId, clientRequestId: response.clientRequestId, version: response.version, date: response.date, errorCode: response.errorCode }, userDelegationKey);
|
|
return [2 /*return*/, res];
|
|
case 3:
|
|
e_9 = _b.sent();
|
|
span.setStatus({
|
|
code: api.CanonicalCode.UNKNOWN,
|
|
message: e_9.message
|
|
});
|
|
throw e_9;
|
|
case 4:
|
|
span.end();
|
|
return [7 /*endfinally*/];
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* Creates a BlobBatchClient object to conduct batch operations.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
|
|
*
|
|
* @returns {BlobBatchClient} A new BlobBatchClient object for this service.
|
|
* @memberof BlobServiceClient
|
|
*/
|
|
BlobServiceClient.prototype.getBlobBatchClient = function () {
|
|
return new BlobBatchClient(this.url, this.pipeline);
|
|
};
|
|
return BlobServiceClient;
|
|
}(StorageClient));
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @class AccountSASPermissions
|
|
*/
|
|
var AccountSASPermissions = /** @class */ (function () {
|
|
function AccountSASPermissions() {
|
|
/**
|
|
* Permission to read resources and list queues and tables granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Permission to write resources granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Permission to create blobs and files granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.delete = false;
|
|
/**
|
|
* Permission to list blob containers, blobs, shares, directories, and files granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.list = false;
|
|
/**
|
|
* Permission to add messages, table entities, and append to blobs granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Permission to create blobs and files granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Permissions to update messages and table entities granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.update = false;
|
|
/**
|
|
* Permission to get and delete messages granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
this.process = false;
|
|
}
|
|
/**
|
|
* Parse initializes the AccountSASPermissions fields from a string.
|
|
*
|
|
* @static
|
|
* @param {string} permissions
|
|
* @returns {AccountSASPermissions}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
AccountSASPermissions.parse = function (permissions) {
|
|
var accountSASPermissions = new AccountSASPermissions();
|
|
for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
|
|
var c = permissions_1[_i];
|
|
switch (c) {
|
|
case "r":
|
|
accountSASPermissions.read = true;
|
|
break;
|
|
case "w":
|
|
accountSASPermissions.write = true;
|
|
break;
|
|
case "d":
|
|
accountSASPermissions.delete = 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;
|
|
default:
|
|
throw new RangeError("Invalid permission character: " + c);
|
|
}
|
|
}
|
|
return accountSASPermissions;
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
|
|
*
|
|
* @returns {string}
|
|
* @memberof AccountSASPermissions
|
|
*/
|
|
AccountSASPermissions.prototype.toString = function () {
|
|
// The order of the characters should be as specified here to ensure correctness:
|
|
// https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
|
|
// Use a string array instead of string concatenating += operator for performance
|
|
var permissions = [];
|
|
if (this.read) {
|
|
permissions.push("r");
|
|
}
|
|
if (this.write) {
|
|
permissions.push("w");
|
|
}
|
|
if (this.delete) {
|
|
permissions.push("d");
|
|
}
|
|
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");
|
|
}
|
|
return permissions.join("");
|
|
};
|
|
return AccountSASPermissions;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @class AccountSASResourceTypes
|
|
*/
|
|
var AccountSASResourceTypes = /** @class */ (function () {
|
|
function AccountSASResourceTypes() {
|
|
/**
|
|
* Permission to access service level APIs granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASResourceTypes
|
|
*/
|
|
this.service = false;
|
|
/**
|
|
* Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASResourceTypes
|
|
*/
|
|
this.container = false;
|
|
/**
|
|
* Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASResourceTypes
|
|
*/
|
|
this.object = false;
|
|
}
|
|
/**
|
|
* 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.
|
|
*
|
|
* @static
|
|
* @param {string} resourceTypes
|
|
* @returns {AccountSASResourceTypes}
|
|
* @memberof AccountSASResourceTypes
|
|
*/
|
|
AccountSASResourceTypes.parse = function (resourceTypes) {
|
|
var accountSASResourceTypes = new AccountSASResourceTypes();
|
|
for (var _i = 0, resourceTypes_1 = resourceTypes; _i < resourceTypes_1.length; _i++) {
|
|
var c = resourceTypes_1[_i];
|
|
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;
|
|
};
|
|
/**
|
|
* Converts the given resource types to a string.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
|
|
*
|
|
* @returns {string}
|
|
* @memberof AccountSASResourceTypes
|
|
*/
|
|
AccountSASResourceTypes.prototype.toString = function () {
|
|
var resourceTypes = [];
|
|
if (this.service) {
|
|
resourceTypes.push("s");
|
|
}
|
|
if (this.container) {
|
|
resourceTypes.push("c");
|
|
}
|
|
if (this.object) {
|
|
resourceTypes.push("o");
|
|
}
|
|
return resourceTypes.join("");
|
|
};
|
|
return AccountSASResourceTypes;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @class AccountSASServices
|
|
*/
|
|
var AccountSASServices = /** @class */ (function () {
|
|
function AccountSASServices() {
|
|
/**
|
|
* Permission to access blob resources granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
this.blob = false;
|
|
/**
|
|
* Permission to access file resources granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
this.file = false;
|
|
/**
|
|
* Permission to access queue resources granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
this.queue = false;
|
|
/**
|
|
* Permission to access table resources granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
this.table = false;
|
|
}
|
|
/**
|
|
* 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.
|
|
*
|
|
* @static
|
|
* @param {string} services
|
|
* @returns {AccountSASServices}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
AccountSASServices.parse = function (services) {
|
|
var accountSASServices = new AccountSASServices();
|
|
for (var _i = 0, services_1 = services; _i < services_1.length; _i++) {
|
|
var c = services_1[_i];
|
|
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;
|
|
};
|
|
/**
|
|
* Converts the given services to a string.
|
|
*
|
|
* @returns {string}
|
|
* @memberof AccountSASServices
|
|
*/
|
|
AccountSASServices.prototype.toString = function () {
|
|
var 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("");
|
|
};
|
|
return AccountSASServices;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
/**
|
|
* Generate SasIPRange format string. For example:
|
|
*
|
|
* "8.8.8.8" or "1.1.1.1-255.255.255.255"
|
|
*
|
|
* @export
|
|
* @param {SasIPRange} ipRange
|
|
* @returns {string}
|
|
*/
|
|
function ipRangeToString(ipRange) {
|
|
return ipRange.end ? ipRange.start + "-" + ipRange.end : ipRange.start;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
(function (SASProtocol) {
|
|
/**
|
|
* Protocol that allows HTTPS only
|
|
*/
|
|
SASProtocol["Https"] = "https";
|
|
/**
|
|
* Protocol that allows both HTTPS and HTTP
|
|
*/
|
|
SASProtocol["HttpsAndHttp"] = "https,http";
|
|
})(exports.SASProtocol || (exports.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 {@code 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.
|
|
*
|
|
* @export
|
|
* @class SASQueryParameters
|
|
*/
|
|
var SASQueryParameters = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of SASQueryParameters.
|
|
*
|
|
* @param {string} version Representing the storage version
|
|
* @param {string} signature Representing the signature for the SAS token
|
|
* @param {string} [permissions] Representing the storage permissions
|
|
* @param {string} [services] Representing the storage services being accessed (only for Account SAS)
|
|
* @param {string} [resourceTypes] Representing the storage resource types being accessed (only for Account SAS)
|
|
* @param {SASProtocol} [protocol] Representing the allowed HTTP protocol(s)
|
|
* @param {Date} [startsOn] Representing the start time for this SAS token
|
|
* @param {Date} [expiresOn] Representing the expiry time for this SAS token
|
|
* @param {SasIPRange} [ipRange] Representing the range of valid IP addresses for this SAS token
|
|
* @param {string} [identifier] Representing the signed identifier (only for Service SAS)
|
|
* @param {string} [resource] Representing the storage container or blob (only for Service SAS)
|
|
* @param {string} [cacheControl] Representing the cache-control header (only for Blob/File Service SAS)
|
|
* @param {string} [contentDisposition] Representing the content-disposition header (only for Blob/File Service SAS)
|
|
* @param {string} [contentEncoding] Representing the content-encoding header (only for Blob/File Service SAS)
|
|
* @param {string} [contentLanguage] Representing the content-language header (only for Blob/File Service SAS)
|
|
* @param {string} [contentType] Representing the content-type header (only for Blob/File Service SAS)
|
|
* @param {userDelegationKey} [userDelegationKey] Representing the user delegation key properties
|
|
* @memberof SASQueryParameters
|
|
*/
|
|
function SASQueryParameters(version, signature, permissions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey) {
|
|
this.version = version;
|
|
this.services = services;
|
|
this.resourceTypes = resourceTypes;
|
|
this.expiresOn = expiresOn;
|
|
this.permissions = permissions;
|
|
this.protocol = protocol;
|
|
this.startsOn = startsOn;
|
|
this.ipRangeInner = ipRange;
|
|
this.identifier = identifier;
|
|
this.resource = resource;
|
|
this.signature = signature;
|
|
this.cacheControl = cacheControl;
|
|
this.contentDisposition = contentDisposition;
|
|
this.contentEncoding = contentEncoding;
|
|
this.contentLanguage = contentLanguage;
|
|
this.contentType = contentType;
|
|
if (userDelegationKey) {
|
|
this.signedOid = userDelegationKey.signedObjectId;
|
|
this.signedTenentId = userDelegationKey.signedTenantId;
|
|
this.signedStartsOn = userDelegationKey.signedStartsOn;
|
|
this.signedExpiresOn = userDelegationKey.signedExpiresOn;
|
|
this.signedService = userDelegationKey.signedService;
|
|
this.signedVersion = userDelegationKey.signedVersion;
|
|
}
|
|
}
|
|
Object.defineProperty(SASQueryParameters.prototype, "ipRange", {
|
|
/**
|
|
* Optional. IP range allowed for this SAS.
|
|
*
|
|
* @readonly
|
|
* @type {(SasIPRange | undefined)}
|
|
* @memberof SASQueryParameters
|
|
*/
|
|
get: function () {
|
|
if (this.ipRangeInner) {
|
|
return {
|
|
end: this.ipRangeInner.end,
|
|
start: this.ipRangeInner.start
|
|
};
|
|
}
|
|
return undefined;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Encodes all SAS query parameters into a string that can be appended to a URL.
|
|
*
|
|
* @returns {string}
|
|
* @memberof SASQueryParameters
|
|
*/
|
|
SASQueryParameters.prototype.toString = function () {
|
|
var params = [
|
|
"sv",
|
|
"ss",
|
|
"srt",
|
|
"spr",
|
|
"st",
|
|
"se",
|
|
"sip",
|
|
"si",
|
|
"skoid",
|
|
"sktid",
|
|
"skt",
|
|
"ske",
|
|
"sks",
|
|
"skv",
|
|
"sr",
|
|
"sp",
|
|
"sig",
|
|
"rscc",
|
|
"rscd",
|
|
"rsce",
|
|
"rscl",
|
|
"rsct"
|
|
];
|
|
var queries = [];
|
|
for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
|
|
var param = params_1[_i];
|
|
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 ? truncatedISO8061Date(this.startsOn, false) : undefined);
|
|
break;
|
|
case "se":
|
|
this.tryAppendQueryParameter(queries, param, this.expiresOn ? 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 "skoid": // Signed object ID
|
|
this.tryAppendQueryParameter(queries, param, this.signedOid);
|
|
break;
|
|
case "sktid": // Signed tenant ID
|
|
this.tryAppendQueryParameter(queries, param, this.signedTenentId);
|
|
break;
|
|
case "skt": // Signed key start time
|
|
this.tryAppendQueryParameter(queries, param, this.signedStartsOn ? truncatedISO8061Date(this.signedStartsOn, false) : undefined);
|
|
break;
|
|
case "ske": // Signed key expiry time
|
|
this.tryAppendQueryParameter(queries, param, this.signedExpiresOn ? 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 "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;
|
|
}
|
|
}
|
|
return queries.join("&");
|
|
};
|
|
/**
|
|
* A private helper method used to filter and append query key/value pairs into an array.
|
|
*
|
|
* @private
|
|
* @param {string[]} queries
|
|
* @param {string} key
|
|
* @param {string} [value]
|
|
* @returns {void}
|
|
* @memberof SASQueryParameters
|
|
*/
|
|
SASQueryParameters.prototype.tryAppendQueryParameter = function (queries, key, value) {
|
|
if (!value) {
|
|
return;
|
|
}
|
|
key = encodeURIComponent(key);
|
|
value = encodeURIComponent(value);
|
|
if (key.length > 0 && value.length > 0) {
|
|
queries.push(key + "=" + value);
|
|
}
|
|
};
|
|
return SASQueryParameters;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
|
|
*
|
|
* @param {AccountSASSignatureValues} accountSASSignatureValues
|
|
* @param {StorageSharedKeyCredential} sharedKeyCredential
|
|
* @returns {SASQueryParameters}
|
|
* @memberof AccountSASSignatureValues
|
|
*/
|
|
function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) {
|
|
var version = accountSASSignatureValues.version
|
|
? accountSASSignatureValues.version
|
|
: SERVICE_VERSION;
|
|
var parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString());
|
|
var parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString();
|
|
var parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString();
|
|
var stringToSign = [
|
|
sharedKeyCredential.accountName,
|
|
parsedPermissions,
|
|
parsedServices,
|
|
parsedResourceTypes,
|
|
accountSASSignatureValues.startsOn
|
|
? truncatedISO8061Date(accountSASSignatureValues.startsOn, false)
|
|
: "",
|
|
truncatedISO8061Date(accountSASSignatureValues.expiresOn, false),
|
|
accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "",
|
|
accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "",
|
|
version,
|
|
"" // Account SAS requires an additional newline character
|
|
].join("\n");
|
|
var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @class BlobSASPermissions
|
|
*/
|
|
var BlobSASPermissions = /** @class */ (function () {
|
|
function BlobSASPermissions() {
|
|
/**
|
|
* Specifies Read access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Specifies Add access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Specifies Create access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Specifies Write access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Specifies Delete access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
this.delete = false;
|
|
}
|
|
/**
|
|
* 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.
|
|
*
|
|
* @static
|
|
* @param {string} permissions
|
|
* @returns {BlobSASPermissions}
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
BlobSASPermissions.parse = function (permissions) {
|
|
var blobSASPermissions = new BlobSASPermissions();
|
|
for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
|
|
var char = permissions_1[_i];
|
|
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;
|
|
default:
|
|
throw new RangeError("Invalid permission: " + char);
|
|
}
|
|
}
|
|
return blobSASPermissions;
|
|
};
|
|
/**
|
|
* Converts the given permissions to a string. Using this method will guarantee the permissions are in an
|
|
* order accepted by the service.
|
|
*
|
|
* @returns {string} A string which represents the BlobSASPermissions
|
|
* @memberof BlobSASPermissions
|
|
*/
|
|
BlobSASPermissions.prototype.toString = function () {
|
|
var 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");
|
|
}
|
|
return permissions.join("");
|
|
};
|
|
return BlobSASPermissions;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// 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.
|
|
*
|
|
* @export
|
|
* @class ContainerSASPermissions
|
|
*/
|
|
var ContainerSASPermissions = /** @class */ (function () {
|
|
function ContainerSASPermissions() {
|
|
/**
|
|
* Specifies Read access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Specifies Add access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Specifies Create access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Specifies Write access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Specifies Delete access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.delete = false;
|
|
/**
|
|
* Specifies List access granted.
|
|
*
|
|
* @type {boolean}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
this.list = false;
|
|
}
|
|
/**
|
|
* 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.
|
|
*
|
|
* @static
|
|
* @param {string} permissions
|
|
* @returns {ContainerSASPermissions}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
ContainerSASPermissions.parse = function (permissions) {
|
|
var containerSASPermissions = new ContainerSASPermissions();
|
|
for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
|
|
var char = permissions_1[_i];
|
|
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;
|
|
default:
|
|
throw new RangeError("Invalid permission " + char);
|
|
}
|
|
}
|
|
return containerSASPermissions;
|
|
};
|
|
/**
|
|
* 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://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas
|
|
*
|
|
* @returns {string}
|
|
* @memberof ContainerSASPermissions
|
|
*/
|
|
ContainerSASPermissions.prototype.toString = function () {
|
|
var 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.list) {
|
|
permissions.push("l");
|
|
}
|
|
return permissions.join("");
|
|
};
|
|
return ContainerSASPermissions;
|
|
}());
|
|
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* UserDelegationKeyCredential is only used for generation of user delegation SAS.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas
|
|
*
|
|
* @export
|
|
* @class UserDelegationKeyCredential
|
|
*/
|
|
var UserDelegationKeyCredential = /** @class */ (function () {
|
|
/**
|
|
* Creates an instance of UserDelegationKeyCredential.
|
|
* @param {string} accountName
|
|
* @param {UserDelegationKey} userDelegationKey
|
|
* @memberof UserDelegationKeyCredential
|
|
*/
|
|
function UserDelegationKeyCredential(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 {string} stringToSign
|
|
* @returns {string}
|
|
* @memberof UserDelegationKeyCredential
|
|
*/
|
|
UserDelegationKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) {
|
|
// console.log(`stringToSign: ${JSON.stringify(stringToSign)}`);
|
|
return crypto.createHmac("sha256", this.key)
|
|
.update(stringToSign, "utf8")
|
|
.digest("base64");
|
|
};
|
|
return UserDelegationKeyCredential;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {
|
|
var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
var sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential
|
|
? sharedKeyCredentialOrUserDelegationKey
|
|
: undefined;
|
|
var userDelegationKeyCredential;
|
|
if (sharedKeyCredential === undefined && accountName !== undefined) {
|
|
userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey);
|
|
}
|
|
if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) {
|
|
throw TypeError("Invalid sharedKeyCredential, userDelegationKey or accountName.");
|
|
}
|
|
// Version 2018-11-09 adds support for the signed resource and signed blob snapshot time fields.
|
|
// https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string
|
|
if (version >= "2018-11-09") {
|
|
if (sharedKeyCredential !== undefined) {
|
|
return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential);
|
|
}
|
|
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} blobSASSignatureValues
|
|
* @param {StorageSharedKeyCredential} sharedKeyCredential
|
|
* @returns {SASQueryParameters}
|
|
*/
|
|
function generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) {
|
|
if (!blobSASSignatureValues.identifier &&
|
|
!blobSASSignatureValues.permissions && !blobSASSignatureValues.expiresOn) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
|
|
}
|
|
var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
var resource = "c";
|
|
var verifiedPermissions;
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
throw RangeError("'version' must be >= '2018-11-09' when provided 'snapshotTime'.");
|
|
}
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
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.
|
|
var stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
|
|
: "",
|
|
blobSASSignatureValues.expiresOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
|
|
: "",
|
|
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
|
|
blobSASSignatureValues.identifier,
|
|
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
|
|
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
|
|
version,
|
|
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
|
|
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
|
|
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
|
|
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
|
|
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
|
|
].join("\n");
|
|
var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(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);
|
|
}
|
|
/**
|
|
* 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} blobSASSignatureValues
|
|
* @param {StorageSharedKeyCredential} sharedKeyCredential
|
|
* @returns {SASQueryParameters}
|
|
*/
|
|
function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) {
|
|
if (!blobSASSignatureValues.identifier &&
|
|
!blobSASSignatureValues.permissions && !blobSASSignatureValues.expiresOn) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
|
|
}
|
|
var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
var resource = "c";
|
|
var verifiedPermissions;
|
|
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
|
|
throw RangeError("Must provide 'blobName' when provided 'snapshotTime'.");
|
|
}
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
resource = "bs";
|
|
}
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
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.
|
|
var stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
|
|
: "",
|
|
blobSASSignatureValues.expiresOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
|
|
: "",
|
|
getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
|
|
blobSASSignatureValues.identifier,
|
|
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
|
|
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
|
|
version,
|
|
resource,
|
|
blobSASSignatureValues.snapshotTime,
|
|
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
|
|
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
|
|
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
|
|
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
|
|
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
|
|
].join("\n");
|
|
var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(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);
|
|
}
|
|
/**
|
|
* 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: identifier will be ignored, permissions and expiresOn are required.
|
|
*
|
|
* @param {BlobSASSignatureValues} blobSASSignatureValues
|
|
* @param {UserDelegationKeyCredential} userDelegationKeyCredential
|
|
* @returns {SASQueryParameters}
|
|
*/
|
|
function generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) {
|
|
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
|
|
}
|
|
var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
var resource = "c";
|
|
var verifiedPermissions;
|
|
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
|
|
throw RangeError("Must provide 'blobName' when provided 'snapshotTime'.");
|
|
}
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
resource = "bs";
|
|
}
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
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.
|
|
var stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
|
|
: "",
|
|
blobSASSignatureValues.expiresOn
|
|
? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
|
|
: "",
|
|
getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
|
|
userDelegationKeyCredential.userDelegationKey.signedObjectId,
|
|
userDelegationKeyCredential.userDelegationKey.signedTenantId,
|
|
userDelegationKeyCredential.userDelegationKey.signedStartsOn
|
|
? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
|
|
: "",
|
|
userDelegationKeyCredential.userDelegationKey.signedExpiresOn
|
|
? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
|
|
: "",
|
|
userDelegationKeyCredential.userDelegationKey.signedService,
|
|
userDelegationKeyCredential.userDelegationKey.signedVersion,
|
|
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
|
|
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
|
|
version,
|
|
resource,
|
|
blobSASSignatureValues.snapshotTime,
|
|
blobSASSignatureValues.cacheControl,
|
|
blobSASSignatureValues.contentDisposition,
|
|
blobSASSignatureValues.contentEncoding,
|
|
blobSASSignatureValues.contentLanguage,
|
|
blobSASSignatureValues.contentType
|
|
].join("\n");
|
|
var signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(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);
|
|
}
|
|
function getCanonicalName(accountName, containerName, blobName) {
|
|
// Container: "/blob/account/containerName"
|
|
// Blob: "/blob/account/containerName/blobName"
|
|
var elements = ["/blob/" + accountName + "/" + containerName];
|
|
if (blobName) {
|
|
elements.push("/" + blobName);
|
|
}
|
|
return elements.join("");
|
|
}
|
|
|
|
Object.defineProperty(exports, 'BaseRequestPolicy', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.BaseRequestPolicy;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, 'HttpHeaders', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.HttpHeaders;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, 'RequestPolicyOptions', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.RequestPolicyOptions;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, 'RestError', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.RestError;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, 'WebResource', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.WebResource;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, 'deserializationPolicy', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreHttp.deserializationPolicy;
|
|
}
|
|
});
|
|
exports.AccountSASPermissions = AccountSASPermissions;
|
|
exports.AccountSASResourceTypes = AccountSASResourceTypes;
|
|
exports.AccountSASServices = AccountSASServices;
|
|
exports.AnonymousCredential = AnonymousCredential;
|
|
exports.AnonymousCredentialPolicy = AnonymousCredentialPolicy;
|
|
exports.AppendBlobClient = AppendBlobClient;
|
|
exports.BlobBatch = BlobBatch;
|
|
exports.BlobBatchClient = BlobBatchClient;
|
|
exports.BlobClient = BlobClient;
|
|
exports.BlobLeaseClient = BlobLeaseClient;
|
|
exports.BlobSASPermissions = BlobSASPermissions;
|
|
exports.BlobServiceClient = BlobServiceClient;
|
|
exports.BlockBlobClient = BlockBlobClient;
|
|
exports.ContainerClient = ContainerClient;
|
|
exports.ContainerSASPermissions = ContainerSASPermissions;
|
|
exports.Credential = Credential;
|
|
exports.CredentialPolicy = CredentialPolicy;
|
|
exports.PageBlobClient = PageBlobClient;
|
|
exports.Pipeline = Pipeline;
|
|
exports.SASQueryParameters = SASQueryParameters;
|
|
exports.StorageBrowserPolicy = StorageBrowserPolicy;
|
|
exports.StorageBrowserPolicyFactory = StorageBrowserPolicyFactory;
|
|
exports.StorageOAuthScopes = StorageOAuthScopes;
|
|
exports.StorageRetryPolicy = StorageRetryPolicy;
|
|
exports.StorageRetryPolicyFactory = StorageRetryPolicyFactory;
|
|
exports.StorageSharedKeyCredential = StorageSharedKeyCredential;
|
|
exports.StorageSharedKeyCredentialPolicy = StorageSharedKeyCredentialPolicy;
|
|
exports.generateAccountSASQueryParameters = generateAccountSASQueryParameters;
|
|
exports.generateBlobSASQueryParameters = generateBlobSASQueryParameters;
|
|
exports.logger = logger;
|
|
exports.newPipeline = newPipeline;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 383:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const assert = __webpack_require__(357);
|
|
const path = __webpack_require__(622);
|
|
const pathHelper = __webpack_require__(972);
|
|
const 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') {
|
|
assert(itemPath, `Parameter 'itemPath' must not be empty`);
|
|
// Normalize slashes and trim unnecessary trailing slash
|
|
itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);
|
|
// Not rooted
|
|
if (!pathHelper.hasRoot(itemPath)) {
|
|
this.segments = itemPath.split(path.sep);
|
|
}
|
|
// Rooted
|
|
else {
|
|
// Add all segments, while not at the root
|
|
let remaining = itemPath;
|
|
let dir = pathHelper.dirname(remaining);
|
|
while (dir !== remaining) {
|
|
// Add the segment
|
|
const basename = path.basename(remaining);
|
|
this.segments.unshift(basename);
|
|
// Truncate the last segment
|
|
remaining = dir;
|
|
dir = pathHelper.dirname(remaining);
|
|
}
|
|
// Remainder is the root
|
|
this.segments.unshift(remaining);
|
|
}
|
|
}
|
|
// Array
|
|
else {
|
|
// Must not be empty
|
|
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
|
|
assert(segment, `Parameter 'itemPath' must not contain any empty segments`);
|
|
// Normalize slashes
|
|
segment = pathHelper.normalizeSeparators(itemPath[i]);
|
|
// Root segment
|
|
if (i === 0 && pathHelper.hasRoot(segment)) {
|
|
segment = pathHelper.safeTrimTrailingSeparator(segment);
|
|
assert(segment === pathHelper.dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`);
|
|
this.segments.push(segment);
|
|
}
|
|
// All other segments
|
|
else {
|
|
// Must not contain slash
|
|
assert(!segment.includes(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(path.sep) || (IS_WINDOWS && /^[A-Z]:$/i.test(result));
|
|
for (let i = 1; i < this.segments.length; i++) {
|
|
if (skipSlash) {
|
|
skipSlash = false;
|
|
}
|
|
else {
|
|
result += path.sep;
|
|
}
|
|
result += this.segments[i];
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
exports.Path = Path;
|
|
//# sourceMappingURL=internal-path.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 393:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2015, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
const punycode = __webpack_require__(213);
|
|
const urlParse = __webpack_require__(835).parse;
|
|
const util = __webpack_require__(669);
|
|
const pubsuffix = __webpack_require__(562);
|
|
const Store = __webpack_require__(338).Store;
|
|
const MemoryCookieStore = __webpack_require__(332).MemoryCookieStore;
|
|
const pathMatch = __webpack_require__(348).pathMatch;
|
|
const VERSION = __webpack_require__(460);
|
|
const { fromCallback } = __webpack_require__(676);
|
|
|
|
// From RFC6265 S4.1.1
|
|
// note that it excludes \x3B ";"
|
|
const COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/;
|
|
|
|
const CONTROL_CHARS = /[\x00-\x1F]/;
|
|
|
|
// From Chromium // '\r', '\n' and '\0' should be treated as a terminator in
|
|
// the "relaxed" mode, see:
|
|
// https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60
|
|
const TERMINATORS = ["\n", "\r", "\0"];
|
|
|
|
// RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"'
|
|
// Note ';' is \x3B
|
|
const PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/;
|
|
|
|
// date-time parsing constants (RFC6265 S5.1.1)
|
|
|
|
const DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/;
|
|
|
|
const MONTH_TO_NUM = {
|
|
jan: 0,
|
|
feb: 1,
|
|
mar: 2,
|
|
apr: 3,
|
|
may: 4,
|
|
jun: 5,
|
|
jul: 6,
|
|
aug: 7,
|
|
sep: 8,
|
|
oct: 9,
|
|
nov: 10,
|
|
dec: 11
|
|
};
|
|
|
|
const MAX_TIME = 2147483647000; // 31-bit max
|
|
const MIN_TIME = 0; // 31-bit min
|
|
const SAME_SITE_CONTEXT_VAL_ERR =
|
|
'Invalid sameSiteContext option for getCookies(); expected one of "strict", "lax", or "none"';
|
|
|
|
function checkSameSiteContext(value) {
|
|
const context = String(value).toLowerCase();
|
|
if (context === "none" || context === "lax" || context === "strict") {
|
|
return context;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const PrefixSecurityEnum = Object.freeze({
|
|
SILENT: "silent",
|
|
STRICT: "strict",
|
|
DISABLED: "unsafe-disabled"
|
|
});
|
|
|
|
// Dumped from ip-regex@4.0.0, with the following changes:
|
|
// * all capturing groups converted to non-capturing -- "(?:)"
|
|
// * support for IPv6 Scoped Literal ("%eth1") removed
|
|
// * lowercase hexadecimal only
|
|
var IP_REGEX_LOWERCASE =/(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|(?:[a-f\d]{1,4}:){1}(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|(?::(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:)))$)/;
|
|
|
|
/*
|
|
* Parses a Natural number (i.e., non-negative integer) with either the
|
|
* <min>*<max>DIGIT ( non-digit *OCTET )
|
|
* or
|
|
* <min>*<max>DIGIT
|
|
* grammar (RFC6265 S5.1.1).
|
|
*
|
|
* The "trailingOK" boolean controls if the grammar accepts a
|
|
* "( non-digit *OCTET )" trailer.
|
|
*/
|
|
function parseDigits(token, minDigits, maxDigits, trailingOK) {
|
|
let count = 0;
|
|
while (count < token.length) {
|
|
const c = token.charCodeAt(count);
|
|
// "non-digit = %x00-2F / %x3A-FF"
|
|
if (c <= 0x2f || c >= 0x3a) {
|
|
break;
|
|
}
|
|
count++;
|
|
}
|
|
|
|
// constrain to a minimum and maximum number of digits.
|
|
if (count < minDigits || count > maxDigits) {
|
|
return null;
|
|
}
|
|
|
|
if (!trailingOK && count != token.length) {
|
|
return null;
|
|
}
|
|
|
|
return parseInt(token.substr(0, count), 10);
|
|
}
|
|
|
|
function parseTime(token) {
|
|
const parts = token.split(":");
|
|
const result = [0, 0, 0];
|
|
|
|
/* RF6256 S5.1.1:
|
|
* time = hms-time ( non-digit *OCTET )
|
|
* hms-time = time-field ":" time-field ":" time-field
|
|
* time-field = 1*2DIGIT
|
|
*/
|
|
|
|
if (parts.length !== 3) {
|
|
return null;
|
|
}
|
|
|
|
for (let i = 0; i < 3; i++) {
|
|
// "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be
|
|
// followed by "( non-digit *OCTET )" so therefore the last time-field can
|
|
// have a trailer
|
|
const trailingOK = i == 2;
|
|
const num = parseDigits(parts[i], 1, 2, trailingOK);
|
|
if (num === null) {
|
|
return null;
|
|
}
|
|
result[i] = num;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function parseMonth(token) {
|
|
token = String(token)
|
|
.substr(0, 3)
|
|
.toLowerCase();
|
|
const num = MONTH_TO_NUM[token];
|
|
return num >= 0 ? num : null;
|
|
}
|
|
|
|
/*
|
|
* RFC6265 S5.1.1 date parser (see RFC for full grammar)
|
|
*/
|
|
function parseDate(str) {
|
|
if (!str) {
|
|
return;
|
|
}
|
|
|
|
/* RFC6265 S5.1.1:
|
|
* 2. Process each date-token sequentially in the order the date-tokens
|
|
* appear in the cookie-date
|
|
*/
|
|
const tokens = str.split(DATE_DELIM);
|
|
if (!tokens) {
|
|
return;
|
|
}
|
|
|
|
let hour = null;
|
|
let minute = null;
|
|
let second = null;
|
|
let dayOfMonth = null;
|
|
let month = null;
|
|
let year = null;
|
|
|
|
for (let i = 0; i < tokens.length; i++) {
|
|
const token = tokens[i].trim();
|
|
if (!token.length) {
|
|
continue;
|
|
}
|
|
|
|
let result;
|
|
|
|
/* 2.1. If the found-time flag is not set and the token matches the time
|
|
* production, set the found-time flag and set the hour- value,
|
|
* minute-value, and second-value to the numbers denoted by the digits in
|
|
* the date-token, respectively. Skip the remaining sub-steps and continue
|
|
* to the next date-token.
|
|
*/
|
|
if (second === null) {
|
|
result = parseTime(token);
|
|
if (result) {
|
|
hour = result[0];
|
|
minute = result[1];
|
|
second = result[2];
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/* 2.2. If the found-day-of-month flag is not set and the date-token matches
|
|
* the day-of-month production, set the found-day-of- month flag and set
|
|
* the day-of-month-value to the number denoted by the date-token. Skip
|
|
* the remaining sub-steps and continue to the next date-token.
|
|
*/
|
|
if (dayOfMonth === null) {
|
|
// "day-of-month = 1*2DIGIT ( non-digit *OCTET )"
|
|
result = parseDigits(token, 1, 2, true);
|
|
if (result !== null) {
|
|
dayOfMonth = result;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/* 2.3. If the found-month flag is not set and the date-token matches the
|
|
* month production, set the found-month flag and set the month-value to
|
|
* the month denoted by the date-token. Skip the remaining sub-steps and
|
|
* continue to the next date-token.
|
|
*/
|
|
if (month === null) {
|
|
result = parseMonth(token);
|
|
if (result !== null) {
|
|
month = result;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/* 2.4. If the found-year flag is not set and the date-token matches the
|
|
* year production, set the found-year flag and set the year-value to the
|
|
* number denoted by the date-token. Skip the remaining sub-steps and
|
|
* continue to the next date-token.
|
|
*/
|
|
if (year === null) {
|
|
// "year = 2*4DIGIT ( non-digit *OCTET )"
|
|
result = parseDigits(token, 2, 4, true);
|
|
if (result !== null) {
|
|
year = result;
|
|
/* From S5.1.1:
|
|
* 3. If the year-value is greater than or equal to 70 and less
|
|
* than or equal to 99, increment the year-value by 1900.
|
|
* 4. If the year-value is greater than or equal to 0 and less
|
|
* than or equal to 69, increment the year-value by 2000.
|
|
*/
|
|
if (year >= 70 && year <= 99) {
|
|
year += 1900;
|
|
} else if (year >= 0 && year <= 69) {
|
|
year += 2000;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* RFC 6265 S5.1.1
|
|
* "5. Abort these steps and fail to parse the cookie-date if:
|
|
* * at least one of the found-day-of-month, found-month, found-
|
|
* year, or found-time flags is not set,
|
|
* * the day-of-month-value is less than 1 or greater than 31,
|
|
* * the year-value is less than 1601,
|
|
* * the hour-value is greater than 23,
|
|
* * the minute-value is greater than 59, or
|
|
* * the second-value is greater than 59.
|
|
* (Note that leap seconds cannot be represented in this syntax.)"
|
|
*
|
|
* So, in order as above:
|
|
*/
|
|
if (
|
|
dayOfMonth === null ||
|
|
month === null ||
|
|
year === null ||
|
|
second === null ||
|
|
dayOfMonth < 1 ||
|
|
dayOfMonth > 31 ||
|
|
year < 1601 ||
|
|
hour > 23 ||
|
|
minute > 59 ||
|
|
second > 59
|
|
) {
|
|
return;
|
|
}
|
|
|
|
return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second));
|
|
}
|
|
|
|
function formatDate(date) {
|
|
return date.toUTCString();
|
|
}
|
|
|
|
// S5.1.2 Canonicalized Host Names
|
|
function canonicalDomain(str) {
|
|
if (str == null) {
|
|
return null;
|
|
}
|
|
str = str.trim().replace(/^\./, ""); // S4.1.2.3 & S5.2.3: ignore leading .
|
|
|
|
// convert to IDN if any non-ASCII characters
|
|
if (punycode && /[^\u0001-\u007f]/.test(str)) {
|
|
str = punycode.toASCII(str);
|
|
}
|
|
|
|
return str.toLowerCase();
|
|
}
|
|
|
|
// S5.1.3 Domain Matching
|
|
function domainMatch(str, domStr, canonicalize) {
|
|
if (str == null || domStr == null) {
|
|
return null;
|
|
}
|
|
if (canonicalize !== false) {
|
|
str = canonicalDomain(str);
|
|
domStr = canonicalDomain(domStr);
|
|
}
|
|
|
|
/*
|
|
* S5.1.3:
|
|
* "A string domain-matches a given domain string if at least one of the
|
|
* following conditions hold:"
|
|
*
|
|
* " o The domain string and the string are identical. (Note that both the
|
|
* domain string and the string will have been canonicalized to lower case at
|
|
* this point)"
|
|
*/
|
|
if (str == domStr) {
|
|
return true;
|
|
}
|
|
|
|
/* " o All of the following [three] conditions hold:" */
|
|
|
|
/* "* The domain string is a suffix of the string" */
|
|
const idx = str.indexOf(domStr);
|
|
if (idx <= 0) {
|
|
return false; // it's a non-match (-1) or prefix (0)
|
|
}
|
|
|
|
// next, check it's a proper suffix
|
|
// e.g., "a.b.c".indexOf("b.c") === 2
|
|
// 5 === 3+2
|
|
if (str.length !== domStr.length + idx) {
|
|
return false; // it's not a suffix
|
|
}
|
|
|
|
/* " * The last character of the string that is not included in the
|
|
* domain string is a %x2E (".") character." */
|
|
if (str.substr(idx-1,1) !== '.') {
|
|
return false; // doesn't align on "."
|
|
}
|
|
|
|
/* " * The string is a host name (i.e., not an IP address)." */
|
|
if (IP_REGEX_LOWERCASE.test(str)) {
|
|
return false; // it's an IP address
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// RFC6265 S5.1.4 Paths and Path-Match
|
|
|
|
/*
|
|
* "The user agent MUST use an algorithm equivalent to the following algorithm
|
|
* to compute the default-path of a cookie:"
|
|
*
|
|
* Assumption: the path (and not query part or absolute uri) is passed in.
|
|
*/
|
|
function defaultPath(path) {
|
|
// "2. If the uri-path is empty or if the first character of the uri-path is not
|
|
// a %x2F ("/") character, output %x2F ("/") and skip the remaining steps.
|
|
if (!path || path.substr(0, 1) !== "/") {
|
|
return "/";
|
|
}
|
|
|
|
// "3. If the uri-path contains no more than one %x2F ("/") character, output
|
|
// %x2F ("/") and skip the remaining step."
|
|
if (path === "/") {
|
|
return path;
|
|
}
|
|
|
|
const rightSlash = path.lastIndexOf("/");
|
|
if (rightSlash === 0) {
|
|
return "/";
|
|
}
|
|
|
|
// "4. Output the characters of the uri-path from the first character up to,
|
|
// but not including, the right-most %x2F ("/")."
|
|
return path.slice(0, rightSlash);
|
|
}
|
|
|
|
function trimTerminator(str) {
|
|
for (let t = 0; t < TERMINATORS.length; t++) {
|
|
const terminatorIdx = str.indexOf(TERMINATORS[t]);
|
|
if (terminatorIdx !== -1) {
|
|
str = str.substr(0, terminatorIdx);
|
|
}
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
function parseCookiePair(cookiePair, looseMode) {
|
|
cookiePair = trimTerminator(cookiePair);
|
|
|
|
let firstEq = cookiePair.indexOf("=");
|
|
if (looseMode) {
|
|
if (firstEq === 0) {
|
|
// '=' is immediately at start
|
|
cookiePair = cookiePair.substr(1);
|
|
firstEq = cookiePair.indexOf("="); // might still need to split on '='
|
|
}
|
|
} else {
|
|
// non-loose mode
|
|
if (firstEq <= 0) {
|
|
// no '=' or is at start
|
|
return; // needs to have non-empty "cookie-name"
|
|
}
|
|
}
|
|
|
|
let cookieName, cookieValue;
|
|
if (firstEq <= 0) {
|
|
cookieName = "";
|
|
cookieValue = cookiePair.trim();
|
|
} else {
|
|
cookieName = cookiePair.substr(0, firstEq).trim();
|
|
cookieValue = cookiePair.substr(firstEq + 1).trim();
|
|
}
|
|
|
|
if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) {
|
|
return;
|
|
}
|
|
|
|
const c = new Cookie();
|
|
c.key = cookieName;
|
|
c.value = cookieValue;
|
|
return c;
|
|
}
|
|
|
|
function parse(str, options) {
|
|
if (!options || typeof options !== "object") {
|
|
options = {};
|
|
}
|
|
str = str.trim();
|
|
|
|
// We use a regex to parse the "name-value-pair" part of S5.2
|
|
const firstSemi = str.indexOf(";"); // S5.2 step 1
|
|
const cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi);
|
|
const c = parseCookiePair(cookiePair, !!options.loose);
|
|
if (!c) {
|
|
return;
|
|
}
|
|
|
|
if (firstSemi === -1) {
|
|
return c;
|
|
}
|
|
|
|
// S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string
|
|
// (including the %x3B (";") in question)." plus later on in the same section
|
|
// "discard the first ";" and trim".
|
|
const unparsed = str.slice(firstSemi + 1).trim();
|
|
|
|
// "If the unparsed-attributes string is empty, skip the rest of these
|
|
// steps."
|
|
if (unparsed.length === 0) {
|
|
return c;
|
|
}
|
|
|
|
/*
|
|
* S5.2 says that when looping over the items "[p]rocess the attribute-name
|
|
* and attribute-value according to the requirements in the following
|
|
* subsections" for every item. Plus, for many of the individual attributes
|
|
* in S5.3 it says to use the "attribute-value of the last attribute in the
|
|
* cookie-attribute-list". Therefore, in this implementation, we overwrite
|
|
* the previous value.
|
|
*/
|
|
const cookie_avs = unparsed.split(";");
|
|
while (cookie_avs.length) {
|
|
const av = cookie_avs.shift().trim();
|
|
if (av.length === 0) {
|
|
// happens if ";;" appears
|
|
continue;
|
|
}
|
|
const av_sep = av.indexOf("=");
|
|
let av_key, av_value;
|
|
|
|
if (av_sep === -1) {
|
|
av_key = av;
|
|
av_value = null;
|
|
} else {
|
|
av_key = av.substr(0, av_sep);
|
|
av_value = av.substr(av_sep + 1);
|
|
}
|
|
|
|
av_key = av_key.trim().toLowerCase();
|
|
|
|
if (av_value) {
|
|
av_value = av_value.trim();
|
|
}
|
|
|
|
switch (av_key) {
|
|
case "expires": // S5.2.1
|
|
if (av_value) {
|
|
const exp = parseDate(av_value);
|
|
// "If the attribute-value failed to parse as a cookie date, ignore the
|
|
// cookie-av."
|
|
if (exp) {
|
|
// over and underflow not realistically a concern: V8's getTime() seems to
|
|
// store something larger than a 32-bit time_t (even with 32-bit node)
|
|
c.expires = exp;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "max-age": // S5.2.2
|
|
if (av_value) {
|
|
// "If the first character of the attribute-value is not a DIGIT or a "-"
|
|
// character ...[or]... If the remainder of attribute-value contains a
|
|
// non-DIGIT character, ignore the cookie-av."
|
|
if (/^-?[0-9]+$/.test(av_value)) {
|
|
const delta = parseInt(av_value, 10);
|
|
// "If delta-seconds is less than or equal to zero (0), let expiry-time
|
|
// be the earliest representable date and time."
|
|
c.setMaxAge(delta);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "domain": // S5.2.3
|
|
// "If the attribute-value is empty, the behavior is undefined. However,
|
|
// the user agent SHOULD ignore the cookie-av entirely."
|
|
if (av_value) {
|
|
// S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E
|
|
// (".") character."
|
|
const domain = av_value.trim().replace(/^\./, "");
|
|
if (domain) {
|
|
// "Convert the cookie-domain to lower case."
|
|
c.domain = domain.toLowerCase();
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "path": // S5.2.4
|
|
/*
|
|
* "If the attribute-value is empty or if the first character of the
|
|
* attribute-value is not %x2F ("/"):
|
|
* Let cookie-path be the default-path.
|
|
* Otherwise:
|
|
* Let cookie-path be the attribute-value."
|
|
*
|
|
* We'll represent the default-path as null since it depends on the
|
|
* context of the parsing.
|
|
*/
|
|
c.path = av_value && av_value[0] === "/" ? av_value : null;
|
|
break;
|
|
|
|
case "secure": // S5.2.5
|
|
/*
|
|
* "If the attribute-name case-insensitively matches the string "Secure",
|
|
* the user agent MUST append an attribute to the cookie-attribute-list
|
|
* with an attribute-name of Secure and an empty attribute-value."
|
|
*/
|
|
c.secure = true;
|
|
break;
|
|
|
|
case "httponly": // S5.2.6 -- effectively the same as 'secure'
|
|
c.httpOnly = true;
|
|
break;
|
|
|
|
case "samesite": // RFC6265bis-02 S5.3.7
|
|
const enforcement = av_value ? av_value.toLowerCase() : "";
|
|
switch (enforcement) {
|
|
case "strict":
|
|
c.sameSite = "strict";
|
|
break;
|
|
case "lax":
|
|
c.sameSite = "lax";
|
|
break;
|
|
default:
|
|
// RFC6265bis-02 S5.3.7 step 1:
|
|
// "If cookie-av's attribute-value is not a case-insensitive match
|
|
// for "Strict" or "Lax", ignore the "cookie-av"."
|
|
// This effectively sets it to 'none' from the prototype.
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
c.extensions = c.extensions || [];
|
|
c.extensions.push(av);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
/**
|
|
* If the cookie-name begins with a case-sensitive match for the
|
|
* string "__Secure-", abort these steps and ignore the cookie
|
|
* entirely unless the cookie's secure-only-flag is true.
|
|
* @param cookie
|
|
* @returns boolean
|
|
*/
|
|
function isSecurePrefixConditionMet(cookie) {
|
|
return !cookie.key.startsWith("__Secure-") || cookie.secure;
|
|
}
|
|
|
|
/**
|
|
* If the cookie-name begins with a case-sensitive match for the
|
|
* string "__Host-", abort these steps and ignore the cookie
|
|
* entirely unless the cookie meets all the following criteria:
|
|
* 1. The cookie's secure-only-flag is true.
|
|
* 2. The cookie's host-only-flag is true.
|
|
* 3. The cookie-attribute-list contains an attribute with an
|
|
* attribute-name of "Path", and the cookie's path is "/".
|
|
* @param cookie
|
|
* @returns boolean
|
|
*/
|
|
function isHostPrefixConditionMet(cookie) {
|
|
return (
|
|
!cookie.key.startsWith("__Host-") ||
|
|
(cookie.secure &&
|
|
cookie.hostOnly &&
|
|
cookie.path != null &&
|
|
cookie.path === "/")
|
|
);
|
|
}
|
|
|
|
// avoid the V8 deoptimization monster!
|
|
function jsonParse(str) {
|
|
let obj;
|
|
try {
|
|
obj = JSON.parse(str);
|
|
} catch (e) {
|
|
return e;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function fromJSON(str) {
|
|
if (!str) {
|
|
return null;
|
|
}
|
|
|
|
let obj;
|
|
if (typeof str === "string") {
|
|
obj = jsonParse(str);
|
|
if (obj instanceof Error) {
|
|
return null;
|
|
}
|
|
} else {
|
|
// assume it's an Object
|
|
obj = str;
|
|
}
|
|
|
|
const c = new Cookie();
|
|
for (let i = 0; i < Cookie.serializableProperties.length; i++) {
|
|
const prop = Cookie.serializableProperties[i];
|
|
if (obj[prop] === undefined || obj[prop] === cookieDefaults[prop]) {
|
|
continue; // leave as prototype default
|
|
}
|
|
|
|
if (prop === "expires" || prop === "creation" || prop === "lastAccessed") {
|
|
if (obj[prop] === null) {
|
|
c[prop] = null;
|
|
} else {
|
|
c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]);
|
|
}
|
|
} else {
|
|
c[prop] = obj[prop];
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
/* Section 5.4 part 2:
|
|
* "* Cookies with longer paths are listed before cookies with
|
|
* shorter paths.
|
|
*
|
|
* * Among cookies that have equal-length path fields, cookies with
|
|
* earlier creation-times are listed before cookies with later
|
|
* creation-times."
|
|
*/
|
|
|
|
function cookieCompare(a, b) {
|
|
let cmp = 0;
|
|
|
|
// descending for length: b CMP a
|
|
const aPathLen = a.path ? a.path.length : 0;
|
|
const bPathLen = b.path ? b.path.length : 0;
|
|
cmp = bPathLen - aPathLen;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
// ascending for time: a CMP b
|
|
const aTime = a.creation ? a.creation.getTime() : MAX_TIME;
|
|
const bTime = b.creation ? b.creation.getTime() : MAX_TIME;
|
|
cmp = aTime - bTime;
|
|
if (cmp !== 0) {
|
|
return cmp;
|
|
}
|
|
|
|
// break ties for the same millisecond (precision of JavaScript's clock)
|
|
cmp = a.creationIndex - b.creationIndex;
|
|
|
|
return cmp;
|
|
}
|
|
|
|
// Gives the permutation of all possible pathMatch()es of a given path. The
|
|
// array is in longest-to-shortest order. Handy for indexing.
|
|
function permutePath(path) {
|
|
if (path === "/") {
|
|
return ["/"];
|
|
}
|
|
const permutations = [path];
|
|
while (path.length > 1) {
|
|
const lindex = path.lastIndexOf("/");
|
|
if (lindex === 0) {
|
|
break;
|
|
}
|
|
path = path.substr(0, lindex);
|
|
permutations.push(path);
|
|
}
|
|
permutations.push("/");
|
|
return permutations;
|
|
}
|
|
|
|
function getCookieContext(url) {
|
|
if (url instanceof Object) {
|
|
return url;
|
|
}
|
|
// NOTE: decodeURI will throw on malformed URIs (see GH-32).
|
|
// Therefore, we will just skip decoding for such URIs.
|
|
try {
|
|
url = decodeURI(url);
|
|
} catch (err) {
|
|
// Silently swallow error
|
|
}
|
|
|
|
return urlParse(url);
|
|
}
|
|
|
|
const cookieDefaults = {
|
|
// the order in which the RFC has them:
|
|
key: "",
|
|
value: "",
|
|
expires: "Infinity",
|
|
maxAge: null,
|
|
domain: null,
|
|
path: null,
|
|
secure: false,
|
|
httpOnly: false,
|
|
extensions: null,
|
|
// set by the CookieJar:
|
|
hostOnly: null,
|
|
pathIsDefault: null,
|
|
creation: null,
|
|
lastAccessed: null,
|
|
sameSite: "none"
|
|
};
|
|
|
|
class Cookie {
|
|
constructor(options = {}) {
|
|
if (util.inspect.custom) {
|
|
this[util.inspect.custom] = this.inspect;
|
|
}
|
|
|
|
Object.assign(this, cookieDefaults, options);
|
|
this.creation = this.creation || new Date();
|
|
|
|
// used to break creation ties in cookieCompare():
|
|
Object.defineProperty(this, "creationIndex", {
|
|
configurable: false,
|
|
enumerable: false, // important for assert.deepEqual checks
|
|
writable: true,
|
|
value: ++Cookie.cookiesCreated
|
|
});
|
|
}
|
|
|
|
inspect() {
|
|
const now = Date.now();
|
|
const hostOnly = this.hostOnly != null ? this.hostOnly : "?";
|
|
const createAge = this.creation
|
|
? `${now - this.creation.getTime()}ms`
|
|
: "?";
|
|
const accessAge = this.lastAccessed
|
|
? `${now - this.lastAccessed.getTime()}ms`
|
|
: "?";
|
|
return `Cookie="${this.toString()}; hostOnly=${hostOnly}; aAge=${accessAge}; cAge=${createAge}"`;
|
|
}
|
|
|
|
toJSON() {
|
|
const obj = {};
|
|
|
|
for (const prop of Cookie.serializableProperties) {
|
|
if (this[prop] === cookieDefaults[prop]) {
|
|
continue; // leave as prototype default
|
|
}
|
|
|
|
if (
|
|
prop === "expires" ||
|
|
prop === "creation" ||
|
|
prop === "lastAccessed"
|
|
) {
|
|
if (this[prop] === null) {
|
|
obj[prop] = null;
|
|
} else {
|
|
obj[prop] =
|
|
this[prop] == "Infinity" // intentionally not ===
|
|
? "Infinity"
|
|
: this[prop].toISOString();
|
|
}
|
|
} else if (prop === "maxAge") {
|
|
if (this[prop] !== null) {
|
|
// again, intentionally not ===
|
|
obj[prop] =
|
|
this[prop] == Infinity || this[prop] == -Infinity
|
|
? this[prop].toString()
|
|
: this[prop];
|
|
}
|
|
} else {
|
|
if (this[prop] !== cookieDefaults[prop]) {
|
|
obj[prop] = this[prop];
|
|
}
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
clone() {
|
|
return fromJSON(this.toJSON());
|
|
}
|
|
|
|
validate() {
|
|
if (!COOKIE_OCTETS.test(this.value)) {
|
|
return false;
|
|
}
|
|
if (
|
|
this.expires != Infinity &&
|
|
!(this.expires instanceof Date) &&
|
|
!parseDate(this.expires)
|
|
) {
|
|
return false;
|
|
}
|
|
if (this.maxAge != null && this.maxAge <= 0) {
|
|
return false; // "Max-Age=" non-zero-digit *DIGIT
|
|
}
|
|
if (this.path != null && !PATH_VALUE.test(this.path)) {
|
|
return false;
|
|
}
|
|
|
|
const cdomain = this.cdomain();
|
|
if (cdomain) {
|
|
if (cdomain.match(/\.$/)) {
|
|
return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this
|
|
}
|
|
const suffix = pubsuffix.getPublicSuffix(cdomain);
|
|
if (suffix == null) {
|
|
// it's a public suffix
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
setExpires(exp) {
|
|
if (exp instanceof Date) {
|
|
this.expires = exp;
|
|
} else {
|
|
this.expires = parseDate(exp) || "Infinity";
|
|
}
|
|
}
|
|
|
|
setMaxAge(age) {
|
|
if (age === Infinity || age === -Infinity) {
|
|
this.maxAge = age.toString(); // so JSON.stringify() works
|
|
} else {
|
|
this.maxAge = age;
|
|
}
|
|
}
|
|
|
|
cookieString() {
|
|
let val = this.value;
|
|
if (val == null) {
|
|
val = "";
|
|
}
|
|
if (this.key === "") {
|
|
return val;
|
|
}
|
|
return `${this.key}=${val}`;
|
|
}
|
|
|
|
// gives Set-Cookie header format
|
|
toString() {
|
|
let str = this.cookieString();
|
|
|
|
if (this.expires != Infinity) {
|
|
if (this.expires instanceof Date) {
|
|
str += `; Expires=${formatDate(this.expires)}`;
|
|
} else {
|
|
str += `; Expires=${this.expires}`;
|
|
}
|
|
}
|
|
|
|
if (this.maxAge != null && this.maxAge != Infinity) {
|
|
str += `; Max-Age=${this.maxAge}`;
|
|
}
|
|
|
|
if (this.domain && !this.hostOnly) {
|
|
str += `; Domain=${this.domain}`;
|
|
}
|
|
if (this.path) {
|
|
str += `; Path=${this.path}`;
|
|
}
|
|
|
|
if (this.secure) {
|
|
str += "; Secure";
|
|
}
|
|
if (this.httpOnly) {
|
|
str += "; HttpOnly";
|
|
}
|
|
if (this.sameSite && this.sameSite !== "none") {
|
|
const ssCanon = Cookie.sameSiteCanonical[this.sameSite.toLowerCase()];
|
|
str += `; SameSite=${ssCanon ? ssCanon : this.sameSite}`;
|
|
}
|
|
if (this.extensions) {
|
|
this.extensions.forEach(ext => {
|
|
str += `; ${ext}`;
|
|
});
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
// TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
|
|
// elsewhere)
|
|
// S5.3 says to give the "latest representable date" for which we use Infinity
|
|
// For "expired" we use 0
|
|
TTL(now) {
|
|
/* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires
|
|
* attribute, the Max-Age attribute has precedence and controls the
|
|
* expiration date of the cookie.
|
|
* (Concurs with S5.3 step 3)
|
|
*/
|
|
if (this.maxAge != null) {
|
|
return this.maxAge <= 0 ? 0 : this.maxAge * 1000;
|
|
}
|
|
|
|
let expires = this.expires;
|
|
if (expires != Infinity) {
|
|
if (!(expires instanceof Date)) {
|
|
expires = parseDate(expires) || Infinity;
|
|
}
|
|
|
|
if (expires == Infinity) {
|
|
return Infinity;
|
|
}
|
|
|
|
return expires.getTime() - (now || Date.now());
|
|
}
|
|
|
|
return Infinity;
|
|
}
|
|
|
|
// expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
|
|
// elsewhere)
|
|
expiryTime(now) {
|
|
if (this.maxAge != null) {
|
|
const relativeTo = now || this.creation || new Date();
|
|
const age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000;
|
|
return relativeTo.getTime() + age;
|
|
}
|
|
|
|
if (this.expires == Infinity) {
|
|
return Infinity;
|
|
}
|
|
return this.expires.getTime();
|
|
}
|
|
|
|
// expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie()
|
|
// elsewhere), except it returns a Date
|
|
expiryDate(now) {
|
|
const millisec = this.expiryTime(now);
|
|
if (millisec == Infinity) {
|
|
return new Date(MAX_TIME);
|
|
} else if (millisec == -Infinity) {
|
|
return new Date(MIN_TIME);
|
|
} else {
|
|
return new Date(millisec);
|
|
}
|
|
}
|
|
|
|
// This replaces the "persistent-flag" parts of S5.3 step 3
|
|
isPersistent() {
|
|
return this.maxAge != null || this.expires != Infinity;
|
|
}
|
|
|
|
// Mostly S5.1.2 and S5.2.3:
|
|
canonicalizedDomain() {
|
|
if (this.domain == null) {
|
|
return null;
|
|
}
|
|
return canonicalDomain(this.domain);
|
|
}
|
|
|
|
cdomain() {
|
|
return this.canonicalizedDomain();
|
|
}
|
|
}
|
|
|
|
Cookie.cookiesCreated = 0;
|
|
Cookie.parse = parse;
|
|
Cookie.fromJSON = fromJSON;
|
|
Cookie.serializableProperties = Object.keys(cookieDefaults);
|
|
Cookie.sameSiteLevel = {
|
|
strict: 3,
|
|
lax: 2,
|
|
none: 1
|
|
};
|
|
|
|
Cookie.sameSiteCanonical = {
|
|
strict: "Strict",
|
|
lax: "Lax"
|
|
};
|
|
|
|
function getNormalizedPrefixSecurity(prefixSecurity) {
|
|
if (prefixSecurity != null) {
|
|
const normalizedPrefixSecurity = prefixSecurity.toLowerCase();
|
|
/* The three supported options */
|
|
switch (normalizedPrefixSecurity) {
|
|
case PrefixSecurityEnum.STRICT:
|
|
case PrefixSecurityEnum.SILENT:
|
|
case PrefixSecurityEnum.DISABLED:
|
|
return normalizedPrefixSecurity;
|
|
}
|
|
}
|
|
/* Default is SILENT */
|
|
return PrefixSecurityEnum.SILENT;
|
|
}
|
|
|
|
class CookieJar {
|
|
constructor(store, options = { rejectPublicSuffixes: true }) {
|
|
if (typeof options === "boolean") {
|
|
options = { rejectPublicSuffixes: options };
|
|
}
|
|
this.rejectPublicSuffixes = options.rejectPublicSuffixes;
|
|
this.enableLooseMode = !!options.looseMode;
|
|
this.allowSpecialUseDomain = !!options.allowSpecialUseDomain;
|
|
this.store = store || new MemoryCookieStore();
|
|
this.prefixSecurity = getNormalizedPrefixSecurity(options.prefixSecurity);
|
|
this._cloneSync = syncWrap("clone");
|
|
this._importCookiesSync = syncWrap("_importCookies");
|
|
this.getCookiesSync = syncWrap("getCookies");
|
|
this.getCookieStringSync = syncWrap("getCookieString");
|
|
this.getSetCookieStringsSync = syncWrap("getSetCookieStrings");
|
|
this.removeAllCookiesSync = syncWrap("removeAllCookies");
|
|
this.setCookieSync = syncWrap("setCookie");
|
|
this.serializeSync = syncWrap("serialize");
|
|
}
|
|
|
|
setCookie(cookie, url, options, cb) {
|
|
let err;
|
|
const context = getCookieContext(url);
|
|
if (typeof options === "function") {
|
|
cb = options;
|
|
options = {};
|
|
}
|
|
|
|
const host = canonicalDomain(context.hostname);
|
|
const loose = options.loose || this.enableLooseMode;
|
|
|
|
let sameSiteContext = null;
|
|
if (options.sameSiteContext) {
|
|
sameSiteContext = checkSameSiteContext(options.sameSiteContext);
|
|
if (!sameSiteContext) {
|
|
return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
|
|
}
|
|
}
|
|
|
|
// S5.3 step 1
|
|
if (typeof cookie === "string" || cookie instanceof String) {
|
|
cookie = Cookie.parse(cookie, { loose: loose });
|
|
if (!cookie) {
|
|
err = new Error("Cookie failed to parse");
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
} else if (!(cookie instanceof Cookie)) {
|
|
// If you're seeing this error, and are passing in a Cookie object,
|
|
// it *might* be a Cookie object from another loaded version of tough-cookie.
|
|
err = new Error(
|
|
"First argument to setCookie must be a Cookie object or string"
|
|
);
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
|
|
// S5.3 step 2
|
|
const now = options.now || new Date(); // will assign later to save effort in the face of errors
|
|
|
|
// S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie()
|
|
|
|
// S5.3 step 4: NOOP; domain is null by default
|
|
|
|
// S5.3 step 5: public suffixes
|
|
if (this.rejectPublicSuffixes && cookie.domain) {
|
|
const suffix = pubsuffix.getPublicSuffix(cookie.cdomain());
|
|
if (suffix == null) {
|
|
// e.g. "com"
|
|
err = new Error("Cookie has domain set to a public suffix");
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
}
|
|
|
|
// S5.3 step 6:
|
|
if (cookie.domain) {
|
|
if (!domainMatch(host, cookie.cdomain(), false)) {
|
|
err = new Error(
|
|
`Cookie not in this host's domain. Cookie:${cookie.cdomain()} Request:${host}`
|
|
);
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
|
|
if (cookie.hostOnly == null) {
|
|
// don't reset if already set
|
|
cookie.hostOnly = false;
|
|
}
|
|
} else {
|
|
cookie.hostOnly = true;
|
|
cookie.domain = host;
|
|
}
|
|
|
|
//S5.2.4 If the attribute-value is empty or if the first character of the
|
|
//attribute-value is not %x2F ("/"):
|
|
//Let cookie-path be the default-path.
|
|
if (!cookie.path || cookie.path[0] !== "/") {
|
|
cookie.path = defaultPath(context.pathname);
|
|
cookie.pathIsDefault = true;
|
|
}
|
|
|
|
// S5.3 step 8: NOOP; secure attribute
|
|
// S5.3 step 9: NOOP; httpOnly attribute
|
|
|
|
// S5.3 step 10
|
|
if (options.http === false && cookie.httpOnly) {
|
|
err = new Error("Cookie is HttpOnly and this isn't an HTTP API");
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
|
|
// 6252bis-02 S5.4 Step 13 & 14:
|
|
if (cookie.sameSite !== "none" && sameSiteContext) {
|
|
// "If the cookie's "same-site-flag" is not "None", and the cookie
|
|
// is being set from a context whose "site for cookies" is not an
|
|
// exact match for request-uri's host's registered domain, then
|
|
// abort these steps and ignore the newly created cookie entirely."
|
|
if (sameSiteContext === "none") {
|
|
err = new Error(
|
|
"Cookie is SameSite but this is a cross-origin request"
|
|
);
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
}
|
|
|
|
/* 6265bis-02 S5.4 Steps 15 & 16 */
|
|
const ignoreErrorForPrefixSecurity =
|
|
this.prefixSecurity === PrefixSecurityEnum.SILENT;
|
|
const prefixSecurityDisabled =
|
|
this.prefixSecurity === PrefixSecurityEnum.DISABLED;
|
|
/* If prefix checking is not disabled ...*/
|
|
if (!prefixSecurityDisabled) {
|
|
let errorFound = false;
|
|
let errorMsg;
|
|
/* Check secure prefix condition */
|
|
if (!isSecurePrefixConditionMet(cookie)) {
|
|
errorFound = true;
|
|
errorMsg = "Cookie has __Secure prefix but Secure attribute is not set";
|
|
} else if (!isHostPrefixConditionMet(cookie)) {
|
|
/* Check host prefix condition */
|
|
errorFound = true;
|
|
errorMsg =
|
|
"Cookie has __Host prefix but either Secure or HostOnly attribute is not set or Path is not '/'";
|
|
}
|
|
if (errorFound) {
|
|
return cb(
|
|
options.ignoreError || ignoreErrorForPrefixSecurity
|
|
? null
|
|
: new Error(errorMsg)
|
|
);
|
|
}
|
|
}
|
|
|
|
const store = this.store;
|
|
|
|
if (!store.updateCookie) {
|
|
store.updateCookie = function(oldCookie, newCookie, cb) {
|
|
this.putCookie(newCookie, cb);
|
|
};
|
|
}
|
|
|
|
function withCookie(err, oldCookie) {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
const next = function(err) {
|
|
if (err) {
|
|
return cb(err);
|
|
} else {
|
|
cb(null, cookie);
|
|
}
|
|
};
|
|
|
|
if (oldCookie) {
|
|
// S5.3 step 11 - "If the cookie store contains a cookie with the same name,
|
|
// domain, and path as the newly created cookie:"
|
|
if (options.http === false && oldCookie.httpOnly) {
|
|
// step 11.2
|
|
err = new Error("old Cookie is HttpOnly and this isn't an HTTP API");
|
|
return cb(options.ignoreError ? null : err);
|
|
}
|
|
cookie.creation = oldCookie.creation; // step 11.3
|
|
cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker
|
|
cookie.lastAccessed = now;
|
|
// Step 11.4 (delete cookie) is implied by just setting the new one:
|
|
store.updateCookie(oldCookie, cookie, next); // step 12
|
|
} else {
|
|
cookie.creation = cookie.lastAccessed = now;
|
|
store.putCookie(cookie, next); // step 12
|
|
}
|
|
}
|
|
|
|
store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie);
|
|
}
|
|
|
|
// RFC6365 S5.4
|
|
getCookies(url, options, cb) {
|
|
const context = getCookieContext(url);
|
|
if (typeof options === "function") {
|
|
cb = options;
|
|
options = {};
|
|
}
|
|
|
|
const host = canonicalDomain(context.hostname);
|
|
const path = context.pathname || "/";
|
|
|
|
let secure = options.secure;
|
|
if (
|
|
secure == null &&
|
|
context.protocol &&
|
|
(context.protocol == "https:" || context.protocol == "wss:")
|
|
) {
|
|
secure = true;
|
|
}
|
|
|
|
let sameSiteLevel = 0;
|
|
if (options.sameSiteContext) {
|
|
const sameSiteContext = checkSameSiteContext(options.sameSiteContext);
|
|
sameSiteLevel = Cookie.sameSiteLevel[sameSiteContext];
|
|
if (!sameSiteLevel) {
|
|
return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR));
|
|
}
|
|
}
|
|
|
|
let http = options.http;
|
|
if (http == null) {
|
|
http = true;
|
|
}
|
|
|
|
const now = options.now || Date.now();
|
|
const expireCheck = options.expire !== false;
|
|
const allPaths = !!options.allPaths;
|
|
const store = this.store;
|
|
|
|
function matchingCookie(c) {
|
|
// "Either:
|
|
// The cookie's host-only-flag is true and the canonicalized
|
|
// request-host is identical to the cookie's domain.
|
|
// Or:
|
|
// The cookie's host-only-flag is false and the canonicalized
|
|
// request-host domain-matches the cookie's domain."
|
|
if (c.hostOnly) {
|
|
if (c.domain != host) {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (!domainMatch(host, c.domain, false)) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// "The request-uri's path path-matches the cookie's path."
|
|
if (!allPaths && !pathMatch(path, c.path)) {
|
|
return false;
|
|
}
|
|
|
|
// "If the cookie's secure-only-flag is true, then the request-uri's
|
|
// scheme must denote a "secure" protocol"
|
|
if (c.secure && !secure) {
|
|
return false;
|
|
}
|
|
|
|
// "If the cookie's http-only-flag is true, then exclude the cookie if the
|
|
// cookie-string is being generated for a "non-HTTP" API"
|
|
if (c.httpOnly && !http) {
|
|
return false;
|
|
}
|
|
|
|
// RFC6265bis-02 S5.3.7
|
|
if (sameSiteLevel) {
|
|
const cookieLevel = Cookie.sameSiteLevel[c.sameSite || "none"];
|
|
if (cookieLevel > sameSiteLevel) {
|
|
// only allow cookies at or below the request level
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// deferred from S5.3
|
|
// non-RFC: allow retention of expired cookies by choice
|
|
if (expireCheck && c.expiryTime() <= now) {
|
|
store.removeCookie(c.domain, c.path, c.key, () => {}); // result ignored
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
store.findCookies(
|
|
host,
|
|
allPaths ? null : path,
|
|
this.allowSpecialUseDomain,
|
|
(err, cookies) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
cookies = cookies.filter(matchingCookie);
|
|
|
|
// sorting of S5.4 part 2
|
|
if (options.sort !== false) {
|
|
cookies = cookies.sort(cookieCompare);
|
|
}
|
|
|
|
// S5.4 part 3
|
|
const now = new Date();
|
|
for (const cookie of cookies) {
|
|
cookie.lastAccessed = now;
|
|
}
|
|
// TODO persist lastAccessed
|
|
|
|
cb(null, cookies);
|
|
}
|
|
);
|
|
}
|
|
|
|
getCookieString(...args) {
|
|
const cb = args.pop();
|
|
const next = function(err, cookies) {
|
|
if (err) {
|
|
cb(err);
|
|
} else {
|
|
cb(
|
|
null,
|
|
cookies
|
|
.sort(cookieCompare)
|
|
.map(c => c.cookieString())
|
|
.join("; ")
|
|
);
|
|
}
|
|
};
|
|
args.push(next);
|
|
this.getCookies.apply(this, args);
|
|
}
|
|
|
|
getSetCookieStrings(...args) {
|
|
const cb = args.pop();
|
|
const next = function(err, cookies) {
|
|
if (err) {
|
|
cb(err);
|
|
} else {
|
|
cb(
|
|
null,
|
|
cookies.map(c => {
|
|
return c.toString();
|
|
})
|
|
);
|
|
}
|
|
};
|
|
args.push(next);
|
|
this.getCookies.apply(this, args);
|
|
}
|
|
|
|
serialize(cb) {
|
|
let type = this.store.constructor.name;
|
|
if (type === "Object") {
|
|
type = null;
|
|
}
|
|
|
|
// update README.md "Serialization Format" if you change this, please!
|
|
const serialized = {
|
|
// The version of tough-cookie that serialized this jar. Generally a good
|
|
// practice since future versions can make data import decisions based on
|
|
// known past behavior. When/if this matters, use `semver`.
|
|
version: `tough-cookie@${VERSION}`,
|
|
|
|
// add the store type, to make humans happy:
|
|
storeType: type,
|
|
|
|
// CookieJar configuration:
|
|
rejectPublicSuffixes: !!this.rejectPublicSuffixes,
|
|
|
|
// this gets filled from getAllCookies:
|
|
cookies: []
|
|
};
|
|
|
|
if (
|
|
!(
|
|
this.store.getAllCookies &&
|
|
typeof this.store.getAllCookies === "function"
|
|
)
|
|
) {
|
|
return cb(
|
|
new Error(
|
|
"store does not support getAllCookies and cannot be serialized"
|
|
)
|
|
);
|
|
}
|
|
|
|
this.store.getAllCookies((err, cookies) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
serialized.cookies = cookies.map(cookie => {
|
|
// convert to serialized 'raw' cookies
|
|
cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie;
|
|
|
|
// Remove the index so new ones get assigned during deserialization
|
|
delete cookie.creationIndex;
|
|
|
|
return cookie;
|
|
});
|
|
|
|
return cb(null, serialized);
|
|
});
|
|
}
|
|
|
|
toJSON() {
|
|
return this.serializeSync();
|
|
}
|
|
|
|
// use the class method CookieJar.deserialize instead of calling this directly
|
|
_importCookies(serialized, cb) {
|
|
let cookies = serialized.cookies;
|
|
if (!cookies || !Array.isArray(cookies)) {
|
|
return cb(new Error("serialized jar has no cookies array"));
|
|
}
|
|
cookies = cookies.slice(); // do not modify the original
|
|
|
|
const putNext = err => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
if (!cookies.length) {
|
|
return cb(err, this);
|
|
}
|
|
|
|
let cookie;
|
|
try {
|
|
cookie = fromJSON(cookies.shift());
|
|
} catch (e) {
|
|
return cb(e);
|
|
}
|
|
|
|
if (cookie === null) {
|
|
return putNext(null); // skip this cookie
|
|
}
|
|
|
|
this.store.putCookie(cookie, putNext);
|
|
};
|
|
|
|
putNext();
|
|
}
|
|
|
|
clone(newStore, cb) {
|
|
if (arguments.length === 1) {
|
|
cb = newStore;
|
|
newStore = null;
|
|
}
|
|
|
|
this.serialize((err, serialized) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
CookieJar.deserialize(serialized, newStore, cb);
|
|
});
|
|
}
|
|
|
|
cloneSync(newStore) {
|
|
if (arguments.length === 0) {
|
|
return this._cloneSync();
|
|
}
|
|
if (!newStore.synchronous) {
|
|
throw new Error(
|
|
"CookieJar clone destination store is not synchronous; use async API instead."
|
|
);
|
|
}
|
|
return this._cloneSync(newStore);
|
|
}
|
|
|
|
removeAllCookies(cb) {
|
|
const store = this.store;
|
|
|
|
// Check that the store implements its own removeAllCookies(). The default
|
|
// implementation in Store will immediately call the callback with a "not
|
|
// implemented" Error.
|
|
if (
|
|
typeof store.removeAllCookies === "function" &&
|
|
store.removeAllCookies !== Store.prototype.removeAllCookies
|
|
) {
|
|
return store.removeAllCookies(cb);
|
|
}
|
|
|
|
store.getAllCookies((err, cookies) => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
|
|
if (cookies.length === 0) {
|
|
return cb(null);
|
|
}
|
|
|
|
let completedCount = 0;
|
|
const removeErrors = [];
|
|
|
|
function removeCookieCb(removeErr) {
|
|
if (removeErr) {
|
|
removeErrors.push(removeErr);
|
|
}
|
|
|
|
completedCount++;
|
|
|
|
if (completedCount === cookies.length) {
|
|
return cb(removeErrors.length ? removeErrors[0] : null);
|
|
}
|
|
}
|
|
|
|
cookies.forEach(cookie => {
|
|
store.removeCookie(
|
|
cookie.domain,
|
|
cookie.path,
|
|
cookie.key,
|
|
removeCookieCb
|
|
);
|
|
});
|
|
});
|
|
}
|
|
|
|
static deserialize(strOrObj, store, cb) {
|
|
if (arguments.length !== 3) {
|
|
// store is optional
|
|
cb = store;
|
|
store = null;
|
|
}
|
|
|
|
let serialized;
|
|
if (typeof strOrObj === "string") {
|
|
serialized = jsonParse(strOrObj);
|
|
if (serialized instanceof Error) {
|
|
return cb(serialized);
|
|
}
|
|
} else {
|
|
serialized = strOrObj;
|
|
}
|
|
|
|
const jar = new CookieJar(store, serialized.rejectPublicSuffixes);
|
|
jar._importCookies(serialized, err => {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
cb(null, jar);
|
|
});
|
|
}
|
|
|
|
static deserializeSync(strOrObj, store) {
|
|
const serialized =
|
|
typeof strOrObj === "string" ? JSON.parse(strOrObj) : strOrObj;
|
|
const jar = new CookieJar(store, serialized.rejectPublicSuffixes);
|
|
|
|
// catch this mistake early:
|
|
if (!jar.store.synchronous) {
|
|
throw new Error(
|
|
"CookieJar store is not synchronous; use async API instead."
|
|
);
|
|
}
|
|
|
|
jar._importCookiesSync(serialized);
|
|
return jar;
|
|
}
|
|
}
|
|
CookieJar.fromJSON = CookieJar.deserializeSync;
|
|
|
|
[
|
|
"_importCookies",
|
|
"clone",
|
|
"getCookies",
|
|
"getCookieString",
|
|
"getSetCookieStrings",
|
|
"removeAllCookies",
|
|
"serialize",
|
|
"setCookie"
|
|
].forEach(name => {
|
|
CookieJar.prototype[name] = fromCallback(CookieJar.prototype[name]);
|
|
});
|
|
CookieJar.deserialize = fromCallback(CookieJar.deserialize);
|
|
|
|
// Use a closure to provide a true imperative API for synchronous stores.
|
|
function syncWrap(method) {
|
|
return function(...args) {
|
|
if (!this.store.synchronous) {
|
|
throw new Error(
|
|
"CookieJar store is not synchronous; use async API instead."
|
|
);
|
|
}
|
|
|
|
let syncErr, syncResult;
|
|
this[method](...args, (err, result) => {
|
|
syncErr = err;
|
|
syncResult = result;
|
|
});
|
|
|
|
if (syncErr) {
|
|
throw syncErr;
|
|
}
|
|
return syncResult;
|
|
};
|
|
}
|
|
|
|
exports.version = VERSION;
|
|
exports.CookieJar = CookieJar;
|
|
exports.Cookie = Cookie;
|
|
exports.Store = Store;
|
|
exports.MemoryCookieStore = MemoryCookieStore;
|
|
exports.parseDate = parseDate;
|
|
exports.formatDate = formatDate;
|
|
exports.parse = parse;
|
|
exports.fromJSON = fromJSON;
|
|
exports.domainMatch = domainMatch;
|
|
exports.defaultPath = defaultPath;
|
|
exports.pathMatch = pathMatch;
|
|
exports.getPublicSuffix = pubsuffix.getPublicSuffix;
|
|
exports.cookieCompare = cookieCompare;
|
|
exports.permuteDomain = __webpack_require__(89).permuteDomain;
|
|
exports.permutePath = permutePath;
|
|
exports.canonicalDomain = canonicalDomain;
|
|
exports.PrefixSecurityEnum = PrefixSecurityEnum;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 413:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(141);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 417:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("crypto");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 422:
|
|
/***/ (function(module) {
|
|
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
|
|
/* global global, define, System, Reflect, Promise */
|
|
var __extends;
|
|
var __assign;
|
|
var __rest;
|
|
var __decorate;
|
|
var __param;
|
|
var __metadata;
|
|
var __awaiter;
|
|
var __generator;
|
|
var __exportStar;
|
|
var __values;
|
|
var __read;
|
|
var __spread;
|
|
var __spreadArrays;
|
|
var __await;
|
|
var __asyncGenerator;
|
|
var __asyncDelegator;
|
|
var __asyncValues;
|
|
var __makeTemplateObject;
|
|
var __importStar;
|
|
var __importDefault;
|
|
var __classPrivateFieldGet;
|
|
var __classPrivateFieldSet;
|
|
var __createBinding;
|
|
(function (factory) {
|
|
var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
|
|
if (typeof define === "function" && define.amd) {
|
|
define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
|
|
}
|
|
else if ( true && typeof module.exports === "object") {
|
|
factory(createExporter(root, createExporter(module.exports)));
|
|
}
|
|
else {
|
|
factory(createExporter(root));
|
|
}
|
|
function createExporter(exports, previous) {
|
|
if (exports !== root) {
|
|
if (typeof Object.create === "function") {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
}
|
|
else {
|
|
exports.__esModule = true;
|
|
}
|
|
}
|
|
return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
|
|
}
|
|
})
|
|
(function (exporter) {
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
|
|
__assign = Object.assign || function (t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
__rest = function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
__decorate = function (decorators, target, key, desc) {
|
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
};
|
|
|
|
__param = function (paramIndex, decorator) {
|
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
};
|
|
|
|
__metadata = function (metadataKey, metadataValue) {
|
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
|
};
|
|
|
|
__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());
|
|
});
|
|
};
|
|
|
|
__generator = function (thisArg, body) {
|
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0: case 1: t = op; break;
|
|
case 4: _.label++; return { value: op[1], done: false };
|
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop(); continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
};
|
|
|
|
__createBinding = function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
};
|
|
|
|
__exportStar = function (m, exports) {
|
|
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
};
|
|
|
|
__values = function (o) {
|
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
if (m) return m.call(o);
|
|
if (o && typeof o.length === "number") return {
|
|
next: function () {
|
|
if (o && i >= o.length) o = void 0;
|
|
return { value: o && o[i++], done: !o };
|
|
}
|
|
};
|
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
};
|
|
|
|
__read = function (o, n) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
if (!m) return o;
|
|
var i = m.call(o), r, ar = [], e;
|
|
try {
|
|
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
}
|
|
catch (error) { e = { error: error }; }
|
|
finally {
|
|
try {
|
|
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
}
|
|
finally { if (e) throw e.error; }
|
|
}
|
|
return ar;
|
|
};
|
|
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
__spreadArrays = function () {
|
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
r[k] = a[j];
|
|
return r;
|
|
};
|
|
|
|
__await = function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
__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 = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
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]); }
|
|
};
|
|
|
|
__asyncDelegator = function (o) {
|
|
var i, p;
|
|
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
|
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
|
|
};
|
|
|
|
__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); }
|
|
};
|
|
|
|
__makeTemplateObject = function (cooked, raw) {
|
|
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
return cooked;
|
|
};
|
|
|
|
__importStar = function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
|
|
__importDefault = function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
|
|
__classPrivateFieldGet = function (receiver, privateMap) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to get private field on non-instance");
|
|
}
|
|
return privateMap.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, privateMap, value) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to set private field on non-instance");
|
|
}
|
|
privateMap.set(receiver, value);
|
|
return value;
|
|
};
|
|
|
|
exporter("__extends", __extends);
|
|
exporter("__assign", __assign);
|
|
exporter("__rest", __rest);
|
|
exporter("__decorate", __decorate);
|
|
exporter("__param", __param);
|
|
exporter("__metadata", __metadata);
|
|
exporter("__awaiter", __awaiter);
|
|
exporter("__generator", __generator);
|
|
exporter("__exportStar", __exportStar);
|
|
exporter("__createBinding", __createBinding);
|
|
exporter("__values", __values);
|
|
exporter("__read", __read);
|
|
exporter("__spread", __spread);
|
|
exporter("__spreadArrays", __spreadArrays);
|
|
exporter("__await", __await);
|
|
exporter("__asyncGenerator", __asyncGenerator);
|
|
exporter("__asyncDelegator", __asyncDelegator);
|
|
exporter("__asyncValues", __asyncValues);
|
|
exporter("__makeTemplateObject", __makeTemplateObject);
|
|
exporter("__importStar", __importStar);
|
|
exporter("__importDefault", __importDefault);
|
|
exporter("__classPrivateFieldGet", __classPrivateFieldGet);
|
|
exporter("__classPrivateFieldSet", __classPrivateFieldSet);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 423:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
assign = __webpack_require__(582).assign;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLDeclaration = __webpack_require__(738);
|
|
|
|
XMLDocType = __webpack_require__(735);
|
|
|
|
XMLCData = __webpack_require__(657);
|
|
|
|
XMLComment = __webpack_require__(919);
|
|
|
|
XMLElement = __webpack_require__(796);
|
|
|
|
XMLRaw = __webpack_require__(660);
|
|
|
|
XMLText = __webpack_require__(708);
|
|
|
|
XMLProcessingInstruction = __webpack_require__(491);
|
|
|
|
XMLDummy = __webpack_require__(956);
|
|
|
|
XMLDTDAttList = __webpack_require__(801);
|
|
|
|
XMLDTDElement = __webpack_require__(463);
|
|
|
|
XMLDTDEntity = __webpack_require__(661);
|
|
|
|
XMLDTDNotation = __webpack_require__(19);
|
|
|
|
WriterState = __webpack_require__(541);
|
|
|
|
module.exports = XMLWriterBase = (function() {
|
|
function XMLWriterBase(options) {
|
|
var key, ref, value;
|
|
options || (options = {});
|
|
this.options = options;
|
|
ref = options.writer || {};
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this["_" + key] = this[key];
|
|
this[key] = value;
|
|
}
|
|
}
|
|
|
|
XMLWriterBase.prototype.filterOptions = function(options) {
|
|
var filteredOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6;
|
|
options || (options = {});
|
|
options = assign({}, this.options, options);
|
|
filteredOptions = {
|
|
writer: this
|
|
};
|
|
filteredOptions.pretty = options.pretty || false;
|
|
filteredOptions.allowEmpty = options.allowEmpty || false;
|
|
filteredOptions.indent = (ref = options.indent) != null ? ref : ' ';
|
|
filteredOptions.newline = (ref1 = options.newline) != null ? ref1 : '\n';
|
|
filteredOptions.offset = (ref2 = options.offset) != null ? ref2 : 0;
|
|
filteredOptions.dontPrettyTextNodes = (ref3 = (ref4 = options.dontPrettyTextNodes) != null ? ref4 : options.dontprettytextnodes) != null ? ref3 : 0;
|
|
filteredOptions.spaceBeforeSlash = (ref5 = (ref6 = options.spaceBeforeSlash) != null ? ref6 : options.spacebeforeslash) != null ? ref5 : '';
|
|
if (filteredOptions.spaceBeforeSlash === true) {
|
|
filteredOptions.spaceBeforeSlash = ' ';
|
|
}
|
|
filteredOptions.suppressPrettyCount = 0;
|
|
filteredOptions.user = {};
|
|
filteredOptions.state = WriterState.None;
|
|
return filteredOptions;
|
|
};
|
|
|
|
XMLWriterBase.prototype.indent = function(node, options, level) {
|
|
var indentLevel;
|
|
if (!options.pretty || options.suppressPrettyCount) {
|
|
return '';
|
|
} else if (options.pretty) {
|
|
indentLevel = (level || 0) + options.offset + 1;
|
|
if (indentLevel > 0) {
|
|
return new Array(indentLevel).join(options.indent);
|
|
}
|
|
}
|
|
return '';
|
|
};
|
|
|
|
XMLWriterBase.prototype.endline = function(node, options, level) {
|
|
if (!options.pretty || options.suppressPrettyCount) {
|
|
return '';
|
|
} else {
|
|
return options.newline;
|
|
}
|
|
};
|
|
|
|
XMLWriterBase.prototype.attribute = function(att, options, level) {
|
|
var r;
|
|
this.openAttribute(att, options, level);
|
|
r = ' ' + att.name + '="' + att.value + '"';
|
|
this.closeAttribute(att, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.cdata = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<![CDATA[';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += ']]>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.comment = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!-- ';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += ' -->' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.declaration = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<?xml';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' version="' + node.version + '"';
|
|
if (node.encoding != null) {
|
|
r += ' encoding="' + node.encoding + '"';
|
|
}
|
|
if (node.standalone != null) {
|
|
r += ' standalone="' + node.standalone + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '?>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.docType = function(node, options, level) {
|
|
var child, i, len, r, ref;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
r += '<!DOCTYPE ' + node.root().name;
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.children.length > 0) {
|
|
r += ' [';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
ref = node.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
r += this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += ']';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.element = function(node, options, level) {
|
|
var att, child, childNodeCount, firstChildNode, i, j, len, len1, name, prettySuppressed, r, ref, ref1, ref2;
|
|
level || (level = 0);
|
|
prettySuppressed = false;
|
|
r = '';
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r += this.indent(node, options, level) + '<' + node.name;
|
|
ref = node.attribs;
|
|
for (name in ref) {
|
|
if (!hasProp.call(ref, name)) continue;
|
|
att = ref[name];
|
|
r += this.attribute(att, options, level);
|
|
}
|
|
childNodeCount = node.children.length;
|
|
firstChildNode = childNodeCount === 0 ? null : node.children[0];
|
|
if (childNodeCount === 0 || node.children.every(function(e) {
|
|
return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';
|
|
})) {
|
|
if (options.allowEmpty) {
|
|
r += '>';
|
|
options.state = WriterState.CloseTag;
|
|
r += '</' + node.name + '>' + this.endline(node, options, level);
|
|
} else {
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '/>' + this.endline(node, options, level);
|
|
}
|
|
} else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {
|
|
r += '>';
|
|
options.state = WriterState.InsideTag;
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
r += this.writeChildNode(firstChildNode, options, level + 1);
|
|
options.suppressPrettyCount--;
|
|
prettySuppressed = false;
|
|
options.state = WriterState.CloseTag;
|
|
r += '</' + node.name + '>' + this.endline(node, options, level);
|
|
} else {
|
|
if (options.dontPrettyTextNodes) {
|
|
ref1 = node.children;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
child = ref1[i];
|
|
if ((child.type === NodeType.Text || child.type === NodeType.Raw) && (child.value != null)) {
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
r += '>' + this.endline(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
ref2 = node.children;
|
|
for (j = 0, len1 = ref2.length; j < len1; j++) {
|
|
child = ref2[j];
|
|
r += this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += this.indent(node, options, level) + '</' + node.name + '>';
|
|
if (prettySuppressed) {
|
|
options.suppressPrettyCount--;
|
|
}
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
}
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.writeChildNode = function(node, options, level) {
|
|
switch (node.type) {
|
|
case NodeType.CData:
|
|
return this.cdata(node, options, level);
|
|
case NodeType.Comment:
|
|
return this.comment(node, options, level);
|
|
case NodeType.Element:
|
|
return this.element(node, options, level);
|
|
case NodeType.Raw:
|
|
return this.raw(node, options, level);
|
|
case NodeType.Text:
|
|
return this.text(node, options, level);
|
|
case NodeType.ProcessingInstruction:
|
|
return this.processingInstruction(node, options, level);
|
|
case NodeType.Dummy:
|
|
return '';
|
|
case NodeType.Declaration:
|
|
return this.declaration(node, options, level);
|
|
case NodeType.DocType:
|
|
return this.docType(node, options, level);
|
|
case NodeType.AttributeDeclaration:
|
|
return this.dtdAttList(node, options, level);
|
|
case NodeType.ElementDeclaration:
|
|
return this.dtdElement(node, options, level);
|
|
case NodeType.EntityDeclaration:
|
|
return this.dtdEntity(node, options, level);
|
|
case NodeType.NotationDeclaration:
|
|
return this.dtdNotation(node, options, level);
|
|
default:
|
|
throw new Error("Unknown XML node type: " + node.constructor.name);
|
|
}
|
|
};
|
|
|
|
XMLWriterBase.prototype.processingInstruction = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<?';
|
|
options.state = WriterState.InsideTag;
|
|
r += node.target;
|
|
if (node.value) {
|
|
r += ' ' + node.value;
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '?>';
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.raw = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.text = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level);
|
|
options.state = WriterState.InsideTag;
|
|
r += node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdAttList = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ATTLIST';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.elementName + ' ' + node.attributeName + ' ' + node.attributeType;
|
|
if (node.defaultValueType !== '#DEFAULT') {
|
|
r += ' ' + node.defaultValueType;
|
|
}
|
|
if (node.defaultValue) {
|
|
r += ' "' + node.defaultValue + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdElement = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ELEMENT';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.name + ' ' + node.value;
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdEntity = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!ENTITY';
|
|
options.state = WriterState.InsideTag;
|
|
if (node.pe) {
|
|
r += ' %';
|
|
}
|
|
r += ' ' + node.name;
|
|
if (node.value) {
|
|
r += ' "' + node.value + '"';
|
|
} else {
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.nData) {
|
|
r += ' NDATA ' + node.nData;
|
|
}
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.dtdNotation = function(node, options, level) {
|
|
var r;
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
r = this.indent(node, options, level) + '<!NOTATION';
|
|
options.state = WriterState.InsideTag;
|
|
r += ' ' + node.name;
|
|
if (node.pubID && node.sysID) {
|
|
r += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.pubID) {
|
|
r += ' PUBLIC "' + node.pubID + '"';
|
|
} else if (node.sysID) {
|
|
r += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
r += options.spaceBeforeSlash + '>' + this.endline(node, options, level);
|
|
options.state = WriterState.None;
|
|
this.closeNode(node, options, level);
|
|
return r;
|
|
};
|
|
|
|
XMLWriterBase.prototype.openNode = function(node, options, level) {};
|
|
|
|
XMLWriterBase.prototype.closeNode = function(node, options, level) {};
|
|
|
|
XMLWriterBase.prototype.openAttribute = function(att, options, level) {};
|
|
|
|
XMLWriterBase.prototype.closeAttribute = function(att, options, level) {};
|
|
|
|
return XMLWriterBase;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 424:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var iterate = __webpack_require__(157)
|
|
, initState = __webpack_require__(147)
|
|
, terminator = __webpack_require__(939)
|
|
;
|
|
|
|
// Public API
|
|
module.exports = parallel;
|
|
|
|
/**
|
|
* Runs iterator over provided array elements in parallel
|
|
*
|
|
* @param {array|object} list - array or object (named list) to iterate over
|
|
* @param {function} iterator - iterator to run
|
|
* @param {function} callback - invoked when all elements processed
|
|
* @returns {function} - jobs terminator
|
|
*/
|
|
function parallel(list, iterator, callback)
|
|
{
|
|
var state = initState(list);
|
|
|
|
while (state.index < (state['keyedList'] || list).length)
|
|
{
|
|
iterate(list, iterator, state, function(error, result)
|
|
{
|
|
if (error)
|
|
{
|
|
callback(error, result);
|
|
return;
|
|
}
|
|
|
|
// looks like it's the last one
|
|
if (Object.keys(state.jobs).length === 0)
|
|
{
|
|
callback(null, state.results);
|
|
return;
|
|
}
|
|
});
|
|
|
|
state.index++;
|
|
}
|
|
|
|
return terminator.bind(state, callback);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 431:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const os = __importStar(__webpack_require__(87));
|
|
/**
|
|
* Commands
|
|
*
|
|
* Command Format:
|
|
* ::name key=value,key=value::message
|
|
*
|
|
* Examples:
|
|
* ::warning::This is the message
|
|
* ::set-env name=MY_VAR::some value
|
|
*/
|
|
function issueCommand(command, properties, message) {
|
|
const cmd = new Command(command, properties, message);
|
|
process.stdout.write(cmd.toString() + os.EOL);
|
|
}
|
|
exports.issueCommand = issueCommand;
|
|
function issue(name, message = '') {
|
|
issueCommand(name, {}, message);
|
|
}
|
|
exports.issue = issue;
|
|
const CMD_STRING = '::';
|
|
class Command {
|
|
constructor(command, properties, message) {
|
|
if (!command) {
|
|
command = 'missing.command';
|
|
}
|
|
this.command = command;
|
|
this.properties = properties;
|
|
this.message = message;
|
|
}
|
|
toString() {
|
|
let cmdStr = CMD_STRING + this.command;
|
|
if (this.properties && Object.keys(this.properties).length > 0) {
|
|
cmdStr += ' ';
|
|
let first = true;
|
|
for (const key in this.properties) {
|
|
if (this.properties.hasOwnProperty(key)) {
|
|
const val = this.properties[key];
|
|
if (val) {
|
|
if (first) {
|
|
first = false;
|
|
}
|
|
else {
|
|
cmdStr += ',';
|
|
}
|
|
cmdStr += `${key}=${escapeProperty(val)}`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
|
return cmdStr;
|
|
}
|
|
}
|
|
/**
|
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
|
* @param input input to sanitize into a string
|
|
*/
|
|
function toCommandValue(input) {
|
|
if (input === null || input === undefined) {
|
|
return '';
|
|
}
|
|
else if (typeof input === 'string' || input instanceof String) {
|
|
return input;
|
|
}
|
|
return JSON.stringify(input);
|
|
}
|
|
exports.toCommandValue = toCommandValue;
|
|
function escapeData(s) {
|
|
return toCommandValue(s)
|
|
.replace(/%/g, '%25')
|
|
.replace(/\r/g, '%0D')
|
|
.replace(/\n/g, '%0A');
|
|
}
|
|
function escapeProperty(s) {
|
|
return toCommandValue(s)
|
|
.replace(/%/g, '%25')
|
|
.replace(/\r/g, '%0D')
|
|
.replace(/\n/g, '%0A')
|
|
.replace(/:/g, '%3A')
|
|
.replace(/,/g, '%2C');
|
|
}
|
|
//# sourceMappingURL=command.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 434:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const exec_1 = __webpack_require__(986);
|
|
const io = __importStar(__webpack_require__(1));
|
|
const fs_1 = __webpack_require__(747);
|
|
const path = __importStar(__webpack_require__(622));
|
|
const utils = __importStar(__webpack_require__(15));
|
|
const constants_1 = __webpack_require__(931);
|
|
function getTarPath(args, compressionMethod) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
if (IS_WINDOWS) {
|
|
const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
|
|
if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
|
|
// We only use zstandard compression on windows when gnu tar is installed due to
|
|
// a bug with compressing large files with bsdtar + zstd
|
|
args.push('--force-local');
|
|
}
|
|
else if (fs_1.existsSync(systemTar)) {
|
|
return systemTar;
|
|
}
|
|
else if (yield utils.isGnuTarInstalled()) {
|
|
args.push('--force-local');
|
|
}
|
|
}
|
|
return yield io.which('tar', true);
|
|
});
|
|
}
|
|
function execTar(args, compressionMethod, cwd) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
|
|
}
|
|
catch (error) {
|
|
throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
|
|
}
|
|
});
|
|
}
|
|
function getWorkingDirectory() {
|
|
var _a;
|
|
return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd();
|
|
}
|
|
function extractTar(archivePath, compressionMethod) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Create directory to extract tar into
|
|
const workingDirectory = getWorkingDirectory();
|
|
yield io.mkdirP(workingDirectory);
|
|
// --d: Decompress.
|
|
// --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.
|
|
function getCompressionProgram() {
|
|
switch (compressionMethod) {
|
|
case constants_1.CompressionMethod.Zstd:
|
|
return ['--use-compress-program', 'zstd -d --long=30'];
|
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
|
return ['--use-compress-program', 'zstd -d'];
|
|
default:
|
|
return ['-z'];
|
|
}
|
|
}
|
|
const args = [
|
|
...getCompressionProgram(),
|
|
'-xf',
|
|
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
|
'-P',
|
|
'-C',
|
|
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
|
|
];
|
|
yield execTar(args, compressionMethod);
|
|
});
|
|
}
|
|
exports.extractTar = extractTar;
|
|
function createTar(archiveFolder, sourceDirectories, compressionMethod) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Write source directories to manifest.txt to avoid command length limits
|
|
const manifestFilename = 'manifest.txt';
|
|
const cacheFileName = utils.getCacheFileName(compressionMethod);
|
|
fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
|
|
const workingDirectory = getWorkingDirectory();
|
|
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
|
|
// --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() {
|
|
switch (compressionMethod) {
|
|
case constants_1.CompressionMethod.Zstd:
|
|
return ['--use-compress-program', 'zstd -T0 --long=30'];
|
|
case constants_1.CompressionMethod.ZstdWithoutLong:
|
|
return ['--use-compress-program', 'zstd -T0'];
|
|
default:
|
|
return ['-z'];
|
|
}
|
|
}
|
|
const args = [
|
|
...getCompressionProgram(),
|
|
'-cf',
|
|
cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
|
'-P',
|
|
'-C',
|
|
workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
|
'--files-from',
|
|
manifestFilename
|
|
];
|
|
yield execTar(args, compressionMethod, archiveFolder);
|
|
});
|
|
}
|
|
exports.createTar = createTar;
|
|
//# sourceMappingURL=tar.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 440:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
function __export(m) {
|
|
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
}
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__export(__webpack_require__(2));
|
|
__export(__webpack_require__(744));
|
|
__export(__webpack_require__(753));
|
|
__export(__webpack_require__(40));
|
|
__export(__webpack_require__(43));
|
|
__export(__webpack_require__(625));
|
|
__export(__webpack_require__(450));
|
|
__export(__webpack_require__(767));
|
|
__export(__webpack_require__(151));
|
|
__export(__webpack_require__(162));
|
|
__export(__webpack_require__(670));
|
|
__export(__webpack_require__(932));
|
|
__export(__webpack_require__(975));
|
|
var context_base_1 = __webpack_require__(459);
|
|
exports.Context = context_base_1.Context;
|
|
const context_1 = __webpack_require__(492);
|
|
/** Entrypoint for context API */
|
|
exports.context = context_1.ContextAPI.getInstance();
|
|
const trace_1 = __webpack_require__(875);
|
|
/** Entrypoint for trace API */
|
|
exports.trace = trace_1.TraceAPI.getInstance();
|
|
const metrics_1 = __webpack_require__(136);
|
|
/** Entrypoint for metrics API */
|
|
exports.metrics = metrics_1.MetricsAPI.getInstance();
|
|
const propagation_1 = __webpack_require__(22);
|
|
/** Entrypoint for propagation API */
|
|
exports.propagation = propagation_1.PropagationAPI.getInstance();
|
|
exports.default = {
|
|
trace: exports.trace,
|
|
metrics: exports.metrics,
|
|
context: exports.context,
|
|
propagation: exports.propagation,
|
|
};
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 443:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (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 (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getInputAsArray = exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = void 0;
|
|
const core = __importStar(__webpack_require__(470));
|
|
const constants_1 = __webpack_require__(694);
|
|
function isExactKeyMatch(key, cacheKey) {
|
|
return !!(cacheKey &&
|
|
cacheKey.localeCompare(key, undefined, {
|
|
sensitivity: "accent"
|
|
}) === 0);
|
|
}
|
|
exports.isExactKeyMatch = isExactKeyMatch;
|
|
function setCacheState(state) {
|
|
core.saveState(constants_1.State.CacheMatchedKey, state);
|
|
}
|
|
exports.setCacheState = setCacheState;
|
|
function setCacheHitOutput(isCacheHit) {
|
|
core.setOutput(constants_1.Outputs.CacheHit, isCacheHit.toString());
|
|
}
|
|
exports.setCacheHitOutput = setCacheHitOutput;
|
|
function setOutputAndState(key, cacheKey) {
|
|
setCacheHitOutput(isExactKeyMatch(key, cacheKey));
|
|
// Store the matched cache key if it exists
|
|
cacheKey && setCacheState(cacheKey);
|
|
}
|
|
exports.setOutputAndState = setOutputAndState;
|
|
function getCacheState() {
|
|
const cacheKey = core.getState(constants_1.State.CacheMatchedKey);
|
|
if (cacheKey) {
|
|
core.debug(`Cache state/key: ${cacheKey}`);
|
|
return cacheKey;
|
|
}
|
|
return undefined;
|
|
}
|
|
exports.getCacheState = getCacheState;
|
|
function logWarning(message) {
|
|
const warningPrefix = "[warning]";
|
|
core.info(`${warningPrefix}${message}`);
|
|
}
|
|
exports.logWarning = logWarning;
|
|
// Cache token authorized for all events that are tied to a ref
|
|
// See GitHub Context https://help.github.com/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context
|
|
function isValidEvent() {
|
|
return constants_1.RefKey in process.env && Boolean(process.env[constants_1.RefKey]);
|
|
}
|
|
exports.isValidEvent = isValidEvent;
|
|
function getInputAsArray(name, options) {
|
|
return core
|
|
.getInput(name, options)
|
|
.split("\n")
|
|
.map(s => s.trim())
|
|
.filter(x => x !== "");
|
|
}
|
|
exports.getInputAsArray = getInputAsArray;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 450:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const NoopMeter_1 = __webpack_require__(625);
|
|
/**
|
|
* An implementation of the {@link MeterProvider} which returns an impotent Meter
|
|
* for all calls to `getMeter`
|
|
*/
|
|
class NoopMeterProvider {
|
|
getMeter(_name, _version) {
|
|
return NoopMeter_1.NOOP_METER;
|
|
}
|
|
}
|
|
exports.NoopMeterProvider = NoopMeterProvider;
|
|
exports.NOOP_METER_PROVIDER = new NoopMeterProvider();
|
|
//# sourceMappingURL=NoopMeterProvider.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 451:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLNamedNodeMap;
|
|
|
|
module.exports = XMLNamedNodeMap = (function() {
|
|
function XMLNamedNodeMap(nodes) {
|
|
this.nodes = nodes;
|
|
}
|
|
|
|
Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {
|
|
get: function() {
|
|
return Object.keys(this.nodes).length || 0;
|
|
}
|
|
});
|
|
|
|
XMLNamedNodeMap.prototype.clone = function() {
|
|
return this.nodes = null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.getNamedItem = function(name) {
|
|
return this.nodes[name];
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.setNamedItem = function(node) {
|
|
var oldNode;
|
|
oldNode = this.nodes[node.nodeName];
|
|
this.nodes[node.nodeName] = node;
|
|
return oldNode || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.removeNamedItem = function(name) {
|
|
var oldNode;
|
|
oldNode = this.nodes[name];
|
|
delete this.nodes[name];
|
|
return oldNode || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.item = function(index) {
|
|
return this.nodes[Object.keys(this.nodes)[index]] || null;
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
return XMLNamedNodeMap;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 454:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var Stream = _interopDefault(__webpack_require__(794));
|
|
var http = _interopDefault(__webpack_require__(605));
|
|
var Url = _interopDefault(__webpack_require__(835));
|
|
var https = _interopDefault(__webpack_require__(211));
|
|
var zlib = _interopDefault(__webpack_require__(761));
|
|
|
|
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
|
|
|
|
// fix for "Readable" isn't a named export issue
|
|
const Readable = Stream.Readable;
|
|
|
|
const BUFFER = Symbol('buffer');
|
|
const TYPE = Symbol('type');
|
|
|
|
class Blob {
|
|
constructor() {
|
|
this[TYPE] = '';
|
|
|
|
const blobParts = arguments[0];
|
|
const options = arguments[1];
|
|
|
|
const buffers = [];
|
|
let size = 0;
|
|
|
|
if (blobParts) {
|
|
const a = blobParts;
|
|
const length = Number(a.length);
|
|
for (let i = 0; i < length; i++) {
|
|
const element = a[i];
|
|
let buffer;
|
|
if (element instanceof Buffer) {
|
|
buffer = element;
|
|
} else if (ArrayBuffer.isView(element)) {
|
|
buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
|
|
} else if (element instanceof ArrayBuffer) {
|
|
buffer = Buffer.from(element);
|
|
} else if (element instanceof Blob) {
|
|
buffer = element[BUFFER];
|
|
} else {
|
|
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
|
|
}
|
|
size += buffer.length;
|
|
buffers.push(buffer);
|
|
}
|
|
}
|
|
|
|
this[BUFFER] = Buffer.concat(buffers);
|
|
|
|
let type = options && options.type !== undefined && String(options.type).toLowerCase();
|
|
if (type && !/[^\u0020-\u007E]/.test(type)) {
|
|
this[TYPE] = type;
|
|
}
|
|
}
|
|
get size() {
|
|
return this[BUFFER].length;
|
|
}
|
|
get type() {
|
|
return this[TYPE];
|
|
}
|
|
text() {
|
|
return Promise.resolve(this[BUFFER].toString());
|
|
}
|
|
arrayBuffer() {
|
|
const buf = this[BUFFER];
|
|
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
return Promise.resolve(ab);
|
|
}
|
|
stream() {
|
|
const readable = new Readable();
|
|
readable._read = function () {};
|
|
readable.push(this[BUFFER]);
|
|
readable.push(null);
|
|
return readable;
|
|
}
|
|
toString() {
|
|
return '[object Blob]';
|
|
}
|
|
slice() {
|
|
const size = this.size;
|
|
|
|
const start = arguments[0];
|
|
const end = arguments[1];
|
|
let relativeStart, relativeEnd;
|
|
if (start === undefined) {
|
|
relativeStart = 0;
|
|
} else if (start < 0) {
|
|
relativeStart = Math.max(size + start, 0);
|
|
} else {
|
|
relativeStart = Math.min(start, size);
|
|
}
|
|
if (end === undefined) {
|
|
relativeEnd = size;
|
|
} else if (end < 0) {
|
|
relativeEnd = Math.max(size + end, 0);
|
|
} else {
|
|
relativeEnd = Math.min(end, size);
|
|
}
|
|
const span = Math.max(relativeEnd - relativeStart, 0);
|
|
|
|
const buffer = this[BUFFER];
|
|
const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
|
|
const blob = new Blob([], { type: arguments[2] });
|
|
blob[BUFFER] = slicedBuffer;
|
|
return blob;
|
|
}
|
|
}
|
|
|
|
Object.defineProperties(Blob.prototype, {
|
|
size: { enumerable: true },
|
|
type: { enumerable: true },
|
|
slice: { enumerable: true }
|
|
});
|
|
|
|
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
|
|
value: 'Blob',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
/**
|
|
* fetch-error.js
|
|
*
|
|
* FetchError interface for operational errors
|
|
*/
|
|
|
|
/**
|
|
* Create FetchError instance
|
|
*
|
|
* @param String message Error message for human
|
|
* @param String type Error type for machine
|
|
* @param String systemError For Node.js system error
|
|
* @return FetchError
|
|
*/
|
|
function FetchError(message, type, systemError) {
|
|
Error.call(this, message);
|
|
|
|
this.message = message;
|
|
this.type = type;
|
|
|
|
// when err.type is `system`, err.code contains system error code
|
|
if (systemError) {
|
|
this.code = this.errno = systemError.code;
|
|
}
|
|
|
|
// hide custom error implementation details from end-users
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
|
|
FetchError.prototype = Object.create(Error.prototype);
|
|
FetchError.prototype.constructor = FetchError;
|
|
FetchError.prototype.name = 'FetchError';
|
|
|
|
let convert;
|
|
try {
|
|
convert = __webpack_require__(18).convert;
|
|
} catch (e) {}
|
|
|
|
const INTERNALS = Symbol('Body internals');
|
|
|
|
// fix an issue where "PassThrough" isn't a named export for node <10
|
|
const PassThrough = Stream.PassThrough;
|
|
|
|
/**
|
|
* Body mixin
|
|
*
|
|
* Ref: https://fetch.spec.whatwg.org/#body
|
|
*
|
|
* @param Stream body Readable stream
|
|
* @param Object opts Response options
|
|
* @return Void
|
|
*/
|
|
function Body(body) {
|
|
var _this = this;
|
|
|
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
_ref$size = _ref.size;
|
|
|
|
let size = _ref$size === undefined ? 0 : _ref$size;
|
|
var _ref$timeout = _ref.timeout;
|
|
let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
|
|
|
|
if (body == null) {
|
|
// body is undefined or null
|
|
body = null;
|
|
} else if (isURLSearchParams(body)) {
|
|
// body is a URLSearchParams
|
|
body = Buffer.from(body.toString());
|
|
} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
|
|
// body is ArrayBuffer
|
|
body = Buffer.from(body);
|
|
} else if (ArrayBuffer.isView(body)) {
|
|
// body is ArrayBufferView
|
|
body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
|
|
} else if (body instanceof Stream) ; else {
|
|
// none of the above
|
|
// coerce to string then buffer
|
|
body = Buffer.from(String(body));
|
|
}
|
|
this[INTERNALS] = {
|
|
body,
|
|
disturbed: false,
|
|
error: null
|
|
};
|
|
this.size = size;
|
|
this.timeout = timeout;
|
|
|
|
if (body instanceof Stream) {
|
|
body.on('error', function (err) {
|
|
const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
|
|
_this[INTERNALS].error = error;
|
|
});
|
|
}
|
|
}
|
|
|
|
Body.prototype = {
|
|
get body() {
|
|
return this[INTERNALS].body;
|
|
},
|
|
|
|
get bodyUsed() {
|
|
return this[INTERNALS].disturbed;
|
|
},
|
|
|
|
/**
|
|
* Decode response as ArrayBuffer
|
|
*
|
|
* @return Promise
|
|
*/
|
|
arrayBuffer() {
|
|
return consumeBody.call(this).then(function (buf) {
|
|
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Return raw response as Blob
|
|
*
|
|
* @return Promise
|
|
*/
|
|
blob() {
|
|
let ct = this.headers && this.headers.get('content-type') || '';
|
|
return consumeBody.call(this).then(function (buf) {
|
|
return Object.assign(
|
|
// Prevent copying
|
|
new Blob([], {
|
|
type: ct.toLowerCase()
|
|
}), {
|
|
[BUFFER]: buf
|
|
});
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as json
|
|
*
|
|
* @return Promise
|
|
*/
|
|
json() {
|
|
var _this2 = this;
|
|
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
try {
|
|
return JSON.parse(buffer.toString());
|
|
} catch (err) {
|
|
return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as text
|
|
*
|
|
* @return Promise
|
|
*/
|
|
text() {
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
return buffer.toString();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Decode response as buffer (non-spec api)
|
|
*
|
|
* @return Promise
|
|
*/
|
|
buffer() {
|
|
return consumeBody.call(this);
|
|
},
|
|
|
|
/**
|
|
* Decode response as text, while automatically detecting the encoding and
|
|
* trying to decode to UTF-8 (non-spec api)
|
|
*
|
|
* @return Promise
|
|
*/
|
|
textConverted() {
|
|
var _this3 = this;
|
|
|
|
return consumeBody.call(this).then(function (buffer) {
|
|
return convertBody(buffer, _this3.headers);
|
|
});
|
|
}
|
|
};
|
|
|
|
// In browsers, all properties are enumerable.
|
|
Object.defineProperties(Body.prototype, {
|
|
body: { enumerable: true },
|
|
bodyUsed: { enumerable: true },
|
|
arrayBuffer: { enumerable: true },
|
|
blob: { enumerable: true },
|
|
json: { enumerable: true },
|
|
text: { enumerable: true }
|
|
});
|
|
|
|
Body.mixIn = function (proto) {
|
|
for (const name of Object.getOwnPropertyNames(Body.prototype)) {
|
|
// istanbul ignore else: future proof
|
|
if (!(name in proto)) {
|
|
const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
|
|
Object.defineProperty(proto, name, desc);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Consume and convert an entire Body to a Buffer.
|
|
*
|
|
* Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
|
|
*
|
|
* @return Promise
|
|
*/
|
|
function consumeBody() {
|
|
var _this4 = this;
|
|
|
|
if (this[INTERNALS].disturbed) {
|
|
return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
|
|
}
|
|
|
|
this[INTERNALS].disturbed = true;
|
|
|
|
if (this[INTERNALS].error) {
|
|
return Body.Promise.reject(this[INTERNALS].error);
|
|
}
|
|
|
|
let body = this.body;
|
|
|
|
// body is null
|
|
if (body === null) {
|
|
return Body.Promise.resolve(Buffer.alloc(0));
|
|
}
|
|
|
|
// body is blob
|
|
if (isBlob(body)) {
|
|
body = body.stream();
|
|
}
|
|
|
|
// body is buffer
|
|
if (Buffer.isBuffer(body)) {
|
|
return Body.Promise.resolve(body);
|
|
}
|
|
|
|
// istanbul ignore if: should never happen
|
|
if (!(body instanceof Stream)) {
|
|
return Body.Promise.resolve(Buffer.alloc(0));
|
|
}
|
|
|
|
// body is stream
|
|
// get ready to actually consume the body
|
|
let accum = [];
|
|
let accumBytes = 0;
|
|
let abort = false;
|
|
|
|
return new Body.Promise(function (resolve, reject) {
|
|
let resTimeout;
|
|
|
|
// allow timeout on slow response body
|
|
if (_this4.timeout) {
|
|
resTimeout = setTimeout(function () {
|
|
abort = true;
|
|
reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
|
|
}, _this4.timeout);
|
|
}
|
|
|
|
// handle stream errors
|
|
body.on('error', function (err) {
|
|
if (err.name === 'AbortError') {
|
|
// if the request was aborted, reject with this Error
|
|
abort = true;
|
|
reject(err);
|
|
} else {
|
|
// other errors, such as incorrect content-encoding
|
|
reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
|
|
}
|
|
});
|
|
|
|
body.on('data', function (chunk) {
|
|
if (abort || chunk === null) {
|
|
return;
|
|
}
|
|
|
|
if (_this4.size && accumBytes + chunk.length > _this4.size) {
|
|
abort = true;
|
|
reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
|
|
return;
|
|
}
|
|
|
|
accumBytes += chunk.length;
|
|
accum.push(chunk);
|
|
});
|
|
|
|
body.on('end', function () {
|
|
if (abort) {
|
|
return;
|
|
}
|
|
|
|
clearTimeout(resTimeout);
|
|
|
|
try {
|
|
resolve(Buffer.concat(accum, accumBytes));
|
|
} catch (err) {
|
|
// handle streams that have accumulated too much data (issue #414)
|
|
reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Detect buffer encoding and convert to target encoding
|
|
* ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
|
|
*
|
|
* @param Buffer buffer Incoming buffer
|
|
* @param String encoding Target encoding
|
|
* @return String
|
|
*/
|
|
function convertBody(buffer, headers) {
|
|
if (typeof convert !== 'function') {
|
|
throw new Error('The package `encoding` must be installed to use the textConverted() function');
|
|
}
|
|
|
|
const ct = headers.get('content-type');
|
|
let charset = 'utf-8';
|
|
let res, str;
|
|
|
|
// header
|
|
if (ct) {
|
|
res = /charset=([^;]*)/i.exec(ct);
|
|
}
|
|
|
|
// no charset in content type, peek at response body for at most 1024 bytes
|
|
str = buffer.slice(0, 1024).toString();
|
|
|
|
// html5
|
|
if (!res && str) {
|
|
res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
|
|
}
|
|
|
|
// html4
|
|
if (!res && str) {
|
|
res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
|
|
|
|
if (res) {
|
|
res = /charset=(.*)/i.exec(res.pop());
|
|
}
|
|
}
|
|
|
|
// xml
|
|
if (!res && str) {
|
|
res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
|
|
}
|
|
|
|
// found charset
|
|
if (res) {
|
|
charset = res.pop();
|
|
|
|
// prevent decode issues when sites use incorrect encoding
|
|
// ref: https://hsivonen.fi/encoding-menu/
|
|
if (charset === 'gb2312' || charset === 'gbk') {
|
|
charset = 'gb18030';
|
|
}
|
|
}
|
|
|
|
// turn raw buffers into a single utf-8 buffer
|
|
return convert(buffer, 'UTF-8', charset).toString();
|
|
}
|
|
|
|
/**
|
|
* Detect a URLSearchParams object
|
|
* ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
|
|
*
|
|
* @param Object obj Object to detect by type or brand
|
|
* @return String
|
|
*/
|
|
function isURLSearchParams(obj) {
|
|
// Duck-typing as a necessary condition.
|
|
if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
// Brand-checking and more duck-typing as optional condition.
|
|
return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
|
|
}
|
|
|
|
/**
|
|
* Check if `obj` is a W3C `Blob` object (which `File` inherits from)
|
|
* @param {*} obj
|
|
* @return {boolean}
|
|
*/
|
|
function isBlob(obj) {
|
|
return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
|
|
}
|
|
|
|
/**
|
|
* Clone body given Res/Req instance
|
|
*
|
|
* @param Mixed instance Response or Request instance
|
|
* @return Mixed
|
|
*/
|
|
function clone(instance) {
|
|
let p1, p2;
|
|
let body = instance.body;
|
|
|
|
// don't allow cloning a used body
|
|
if (instance.bodyUsed) {
|
|
throw new Error('cannot clone body after it is used');
|
|
}
|
|
|
|
// check that body is a stream and not form-data object
|
|
// note: we can't clone the form-data object without having it as a dependency
|
|
if (body instanceof Stream && typeof body.getBoundary !== 'function') {
|
|
// tee instance body
|
|
p1 = new PassThrough();
|
|
p2 = new PassThrough();
|
|
body.pipe(p1);
|
|
body.pipe(p2);
|
|
// set instance body to teed body and return the other teed body
|
|
instance[INTERNALS].body = p1;
|
|
body = p2;
|
|
}
|
|
|
|
return body;
|
|
}
|
|
|
|
/**
|
|
* Performs the operation "extract a `Content-Type` value from |object|" as
|
|
* specified in the specification:
|
|
* https://fetch.spec.whatwg.org/#concept-bodyinit-extract
|
|
*
|
|
* This function assumes that instance.body is present.
|
|
*
|
|
* @param Mixed instance Any options.body input
|
|
*/
|
|
function extractContentType(body) {
|
|
if (body === null) {
|
|
// body is null
|
|
return null;
|
|
} else if (typeof body === 'string') {
|
|
// body is string
|
|
return 'text/plain;charset=UTF-8';
|
|
} else if (isURLSearchParams(body)) {
|
|
// body is a URLSearchParams
|
|
return 'application/x-www-form-urlencoded;charset=UTF-8';
|
|
} else if (isBlob(body)) {
|
|
// body is blob
|
|
return body.type || null;
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
return null;
|
|
} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
|
|
// body is ArrayBuffer
|
|
return null;
|
|
} else if (ArrayBuffer.isView(body)) {
|
|
// body is ArrayBufferView
|
|
return null;
|
|
} else if (typeof body.getBoundary === 'function') {
|
|
// detect form data input from form-data module
|
|
return `multipart/form-data;boundary=${body.getBoundary()}`;
|
|
} else if (body instanceof Stream) {
|
|
// body is stream
|
|
// can't really do much about this
|
|
return null;
|
|
} else {
|
|
// Body constructor defaults other things to string
|
|
return 'text/plain;charset=UTF-8';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The Fetch Standard treats this as if "total bytes" is a property on the body.
|
|
* For us, we have to explicitly get it with a function.
|
|
*
|
|
* ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
|
|
*
|
|
* @param Body instance Instance of Body
|
|
* @return Number? Number of bytes, or null if not possible
|
|
*/
|
|
function getTotalBytes(instance) {
|
|
const body = instance.body;
|
|
|
|
|
|
if (body === null) {
|
|
// body is null
|
|
return 0;
|
|
} else if (isBlob(body)) {
|
|
return body.size;
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
return body.length;
|
|
} else if (body && typeof body.getLengthSync === 'function') {
|
|
// detect form data input from form-data module
|
|
if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
|
|
body.hasKnownLength && body.hasKnownLength()) {
|
|
// 2.x
|
|
return body.getLengthSync();
|
|
}
|
|
return null;
|
|
} else {
|
|
// body is stream
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Write a Body to a Node.js WritableStream (e.g. http.Request) object.
|
|
*
|
|
* @param Body instance Instance of Body
|
|
* @return Void
|
|
*/
|
|
function writeToStream(dest, instance) {
|
|
const body = instance.body;
|
|
|
|
|
|
if (body === null) {
|
|
// body is null
|
|
dest.end();
|
|
} else if (isBlob(body)) {
|
|
body.stream().pipe(dest);
|
|
} else if (Buffer.isBuffer(body)) {
|
|
// body is buffer
|
|
dest.write(body);
|
|
dest.end();
|
|
} else {
|
|
// body is stream
|
|
body.pipe(dest);
|
|
}
|
|
}
|
|
|
|
// expose Promise
|
|
Body.Promise = global.Promise;
|
|
|
|
/**
|
|
* headers.js
|
|
*
|
|
* Headers class offers convenient helpers
|
|
*/
|
|
|
|
const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
|
|
const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
|
|
|
|
function validateName(name) {
|
|
name = `${name}`;
|
|
if (invalidTokenRegex.test(name) || name === '') {
|
|
throw new TypeError(`${name} is not a legal HTTP header name`);
|
|
}
|
|
}
|
|
|
|
function validateValue(value) {
|
|
value = `${value}`;
|
|
if (invalidHeaderCharRegex.test(value)) {
|
|
throw new TypeError(`${value} is not a legal HTTP header value`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find the key in the map object given a header name.
|
|
*
|
|
* Returns undefined if not found.
|
|
*
|
|
* @param String name Header name
|
|
* @return String|Undefined
|
|
*/
|
|
function find(map, name) {
|
|
name = name.toLowerCase();
|
|
for (const key in map) {
|
|
if (key.toLowerCase() === name) {
|
|
return key;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
const MAP = Symbol('map');
|
|
class Headers {
|
|
/**
|
|
* Headers class
|
|
*
|
|
* @param Object headers Response headers
|
|
* @return Void
|
|
*/
|
|
constructor() {
|
|
let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
|
|
|
|
this[MAP] = Object.create(null);
|
|
|
|
if (init instanceof Headers) {
|
|
const rawHeaders = init.raw();
|
|
const headerNames = Object.keys(rawHeaders);
|
|
|
|
for (const headerName of headerNames) {
|
|
for (const value of rawHeaders[headerName]) {
|
|
this.append(headerName, value);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// We don't worry about converting prop to ByteString here as append()
|
|
// will handle it.
|
|
if (init == null) ; else if (typeof init === 'object') {
|
|
const method = init[Symbol.iterator];
|
|
if (method != null) {
|
|
if (typeof method !== 'function') {
|
|
throw new TypeError('Header pairs must be iterable');
|
|
}
|
|
|
|
// sequence<sequence<ByteString>>
|
|
// Note: per spec we have to first exhaust the lists then process them
|
|
const pairs = [];
|
|
for (const pair of init) {
|
|
if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
|
|
throw new TypeError('Each header pair must be iterable');
|
|
}
|
|
pairs.push(Array.from(pair));
|
|
}
|
|
|
|
for (const pair of pairs) {
|
|
if (pair.length !== 2) {
|
|
throw new TypeError('Each header pair must be a name/value tuple');
|
|
}
|
|
this.append(pair[0], pair[1]);
|
|
}
|
|
} else {
|
|
// record<ByteString, ByteString>
|
|
for (const key of Object.keys(init)) {
|
|
const value = init[key];
|
|
this.append(key, value);
|
|
}
|
|
}
|
|
} else {
|
|
throw new TypeError('Provided initializer must be an object');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return combined header value given name
|
|
*
|
|
* @param String name Header name
|
|
* @return Mixed
|
|
*/
|
|
get(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
const key = find(this[MAP], name);
|
|
if (key === undefined) {
|
|
return null;
|
|
}
|
|
|
|
return this[MAP][key].join(', ');
|
|
}
|
|
|
|
/**
|
|
* Iterate over all headers
|
|
*
|
|
* @param Function callback Executed for each item with parameters (value, name, thisArg)
|
|
* @param Boolean thisArg `this` context for callback function
|
|
* @return Void
|
|
*/
|
|
forEach(callback) {
|
|
let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
|
|
let pairs = getHeaders(this);
|
|
let i = 0;
|
|
while (i < pairs.length) {
|
|
var _pairs$i = pairs[i];
|
|
const name = _pairs$i[0],
|
|
value = _pairs$i[1];
|
|
|
|
callback.call(thisArg, value, name, this);
|
|
pairs = getHeaders(this);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Overwrite header values given name
|
|
*
|
|
* @param String name Header name
|
|
* @param String value Header value
|
|
* @return Void
|
|
*/
|
|
set(name, value) {
|
|
name = `${name}`;
|
|
value = `${value}`;
|
|
validateName(name);
|
|
validateValue(value);
|
|
const key = find(this[MAP], name);
|
|
this[MAP][key !== undefined ? key : name] = [value];
|
|
}
|
|
|
|
/**
|
|
* Append a value onto existing header
|
|
*
|
|
* @param String name Header name
|
|
* @param String value Header value
|
|
* @return Void
|
|
*/
|
|
append(name, value) {
|
|
name = `${name}`;
|
|
value = `${value}`;
|
|
validateName(name);
|
|
validateValue(value);
|
|
const key = find(this[MAP], name);
|
|
if (key !== undefined) {
|
|
this[MAP][key].push(value);
|
|
} else {
|
|
this[MAP][name] = [value];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check for header name existence
|
|
*
|
|
* @param String name Header name
|
|
* @return Boolean
|
|
*/
|
|
has(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
return find(this[MAP], name) !== undefined;
|
|
}
|
|
|
|
/**
|
|
* Delete all header values given name
|
|
*
|
|
* @param String name Header name
|
|
* @return Void
|
|
*/
|
|
delete(name) {
|
|
name = `${name}`;
|
|
validateName(name);
|
|
const key = find(this[MAP], name);
|
|
if (key !== undefined) {
|
|
delete this[MAP][key];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return raw headers (non-spec api)
|
|
*
|
|
* @return Object
|
|
*/
|
|
raw() {
|
|
return this[MAP];
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on keys.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
keys() {
|
|
return createHeadersIterator(this, 'key');
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on values.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
values() {
|
|
return createHeadersIterator(this, 'value');
|
|
}
|
|
|
|
/**
|
|
* Get an iterator on entries.
|
|
*
|
|
* This is the default iterator of the Headers object.
|
|
*
|
|
* @return Iterator
|
|
*/
|
|
[Symbol.iterator]() {
|
|
return createHeadersIterator(this, 'key+value');
|
|
}
|
|
}
|
|
Headers.prototype.entries = Headers.prototype[Symbol.iterator];
|
|
|
|
Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
|
|
value: 'Headers',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperties(Headers.prototype, {
|
|
get: { enumerable: true },
|
|
forEach: { enumerable: true },
|
|
set: { enumerable: true },
|
|
append: { enumerable: true },
|
|
has: { enumerable: true },
|
|
delete: { enumerable: true },
|
|
keys: { enumerable: true },
|
|
values: { enumerable: true },
|
|
entries: { enumerable: true }
|
|
});
|
|
|
|
function getHeaders(headers) {
|
|
let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
|
|
|
|
const keys = Object.keys(headers[MAP]).sort();
|
|
return keys.map(kind === 'key' ? function (k) {
|
|
return k.toLowerCase();
|
|
} : kind === 'value' ? function (k) {
|
|
return headers[MAP][k].join(', ');
|
|
} : function (k) {
|
|
return [k.toLowerCase(), headers[MAP][k].join(', ')];
|
|
});
|
|
}
|
|
|
|
const INTERNAL = Symbol('internal');
|
|
|
|
function createHeadersIterator(target, kind) {
|
|
const iterator = Object.create(HeadersIteratorPrototype);
|
|
iterator[INTERNAL] = {
|
|
target,
|
|
kind,
|
|
index: 0
|
|
};
|
|
return iterator;
|
|
}
|
|
|
|
const HeadersIteratorPrototype = Object.setPrototypeOf({
|
|
next() {
|
|
// istanbul ignore if
|
|
if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
|
|
throw new TypeError('Value of `this` is not a HeadersIterator');
|
|
}
|
|
|
|
var _INTERNAL = this[INTERNAL];
|
|
const target = _INTERNAL.target,
|
|
kind = _INTERNAL.kind,
|
|
index = _INTERNAL.index;
|
|
|
|
const values = getHeaders(target, kind);
|
|
const len = values.length;
|
|
if (index >= len) {
|
|
return {
|
|
value: undefined,
|
|
done: true
|
|
};
|
|
}
|
|
|
|
this[INTERNAL].index = index + 1;
|
|
|
|
return {
|
|
value: values[index],
|
|
done: false
|
|
};
|
|
}
|
|
}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
|
|
|
|
Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
|
|
value: 'HeadersIterator',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
/**
|
|
* Export the Headers object in a form that Node.js can consume.
|
|
*
|
|
* @param Headers headers
|
|
* @return Object
|
|
*/
|
|
function exportNodeCompatibleHeaders(headers) {
|
|
const obj = Object.assign({ __proto__: null }, headers[MAP]);
|
|
|
|
// http.request() only supports string as Host header. This hack makes
|
|
// specifying custom Host header possible.
|
|
const hostHeaderKey = find(headers[MAP], 'Host');
|
|
if (hostHeaderKey !== undefined) {
|
|
obj[hostHeaderKey] = obj[hostHeaderKey][0];
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
/**
|
|
* Create a Headers object from an object of headers, ignoring those that do
|
|
* not conform to HTTP grammar productions.
|
|
*
|
|
* @param Object obj Object of headers
|
|
* @return Headers
|
|
*/
|
|
function createHeadersLenient(obj) {
|
|
const headers = new Headers();
|
|
for (const name of Object.keys(obj)) {
|
|
if (invalidTokenRegex.test(name)) {
|
|
continue;
|
|
}
|
|
if (Array.isArray(obj[name])) {
|
|
for (const val of obj[name]) {
|
|
if (invalidHeaderCharRegex.test(val)) {
|
|
continue;
|
|
}
|
|
if (headers[MAP][name] === undefined) {
|
|
headers[MAP][name] = [val];
|
|
} else {
|
|
headers[MAP][name].push(val);
|
|
}
|
|
}
|
|
} else if (!invalidHeaderCharRegex.test(obj[name])) {
|
|
headers[MAP][name] = [obj[name]];
|
|
}
|
|
}
|
|
return headers;
|
|
}
|
|
|
|
const INTERNALS$1 = Symbol('Response internals');
|
|
|
|
// fix an issue where "STATUS_CODES" aren't a named export for node <10
|
|
const STATUS_CODES = http.STATUS_CODES;
|
|
|
|
/**
|
|
* Response class
|
|
*
|
|
* @param Stream body Readable stream
|
|
* @param Object opts Response options
|
|
* @return Void
|
|
*/
|
|
class Response {
|
|
constructor() {
|
|
let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
Body.call(this, body, opts);
|
|
|
|
const status = opts.status || 200;
|
|
const headers = new Headers(opts.headers);
|
|
|
|
if (body != null && !headers.has('Content-Type')) {
|
|
const contentType = extractContentType(body);
|
|
if (contentType) {
|
|
headers.append('Content-Type', contentType);
|
|
}
|
|
}
|
|
|
|
this[INTERNALS$1] = {
|
|
url: opts.url,
|
|
status,
|
|
statusText: opts.statusText || STATUS_CODES[status],
|
|
headers,
|
|
counter: opts.counter
|
|
};
|
|
}
|
|
|
|
get url() {
|
|
return this[INTERNALS$1].url || '';
|
|
}
|
|
|
|
get status() {
|
|
return this[INTERNALS$1].status;
|
|
}
|
|
|
|
/**
|
|
* Convenience property representing if the request ended normally
|
|
*/
|
|
get ok() {
|
|
return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
|
|
}
|
|
|
|
get redirected() {
|
|
return this[INTERNALS$1].counter > 0;
|
|
}
|
|
|
|
get statusText() {
|
|
return this[INTERNALS$1].statusText;
|
|
}
|
|
|
|
get headers() {
|
|
return this[INTERNALS$1].headers;
|
|
}
|
|
|
|
/**
|
|
* Clone this response
|
|
*
|
|
* @return Response
|
|
*/
|
|
clone() {
|
|
return new Response(clone(this), {
|
|
url: this.url,
|
|
status: this.status,
|
|
statusText: this.statusText,
|
|
headers: this.headers,
|
|
ok: this.ok,
|
|
redirected: this.redirected
|
|
});
|
|
}
|
|
}
|
|
|
|
Body.mixIn(Response.prototype);
|
|
|
|
Object.defineProperties(Response.prototype, {
|
|
url: { enumerable: true },
|
|
status: { enumerable: true },
|
|
ok: { enumerable: true },
|
|
redirected: { enumerable: true },
|
|
statusText: { enumerable: true },
|
|
headers: { enumerable: true },
|
|
clone: { enumerable: true }
|
|
});
|
|
|
|
Object.defineProperty(Response.prototype, Symbol.toStringTag, {
|
|
value: 'Response',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
const INTERNALS$2 = Symbol('Request internals');
|
|
|
|
// fix an issue where "format", "parse" aren't a named export for node <10
|
|
const parse_url = Url.parse;
|
|
const format_url = Url.format;
|
|
|
|
const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
|
|
|
|
/**
|
|
* Check if a value is an instance of Request.
|
|
*
|
|
* @param Mixed input
|
|
* @return Boolean
|
|
*/
|
|
function isRequest(input) {
|
|
return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
|
|
}
|
|
|
|
function isAbortSignal(signal) {
|
|
const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
|
|
return !!(proto && proto.constructor.name === 'AbortSignal');
|
|
}
|
|
|
|
/**
|
|
* Request class
|
|
*
|
|
* @param Mixed input Url or Request instance
|
|
* @param Object init Custom options
|
|
* @return Void
|
|
*/
|
|
class Request {
|
|
constructor(input) {
|
|
let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
let parsedURL;
|
|
|
|
// normalize input
|
|
if (!isRequest(input)) {
|
|
if (input && input.href) {
|
|
// in order to support Node.js' Url objects; though WHATWG's URL objects
|
|
// will fall into this branch also (since their `toString()` will return
|
|
// `href` property anyway)
|
|
parsedURL = parse_url(input.href);
|
|
} else {
|
|
// coerce input to a string before attempting to parse
|
|
parsedURL = parse_url(`${input}`);
|
|
}
|
|
input = {};
|
|
} else {
|
|
parsedURL = parse_url(input.url);
|
|
}
|
|
|
|
let method = init.method || input.method || 'GET';
|
|
method = method.toUpperCase();
|
|
|
|
if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
|
|
throw new TypeError('Request with GET/HEAD method cannot have body');
|
|
}
|
|
|
|
let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
|
|
|
|
Body.call(this, inputBody, {
|
|
timeout: init.timeout || input.timeout || 0,
|
|
size: init.size || input.size || 0
|
|
});
|
|
|
|
const headers = new Headers(init.headers || input.headers || {});
|
|
|
|
if (inputBody != null && !headers.has('Content-Type')) {
|
|
const contentType = extractContentType(inputBody);
|
|
if (contentType) {
|
|
headers.append('Content-Type', contentType);
|
|
}
|
|
}
|
|
|
|
let signal = isRequest(input) ? input.signal : null;
|
|
if ('signal' in init) signal = init.signal;
|
|
|
|
if (signal != null && !isAbortSignal(signal)) {
|
|
throw new TypeError('Expected signal to be an instanceof AbortSignal');
|
|
}
|
|
|
|
this[INTERNALS$2] = {
|
|
method,
|
|
redirect: init.redirect || input.redirect || 'follow',
|
|
headers,
|
|
parsedURL,
|
|
signal
|
|
};
|
|
|
|
// node-fetch-only options
|
|
this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
|
|
this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
|
|
this.counter = init.counter || input.counter || 0;
|
|
this.agent = init.agent || input.agent;
|
|
}
|
|
|
|
get method() {
|
|
return this[INTERNALS$2].method;
|
|
}
|
|
|
|
get url() {
|
|
return format_url(this[INTERNALS$2].parsedURL);
|
|
}
|
|
|
|
get headers() {
|
|
return this[INTERNALS$2].headers;
|
|
}
|
|
|
|
get redirect() {
|
|
return this[INTERNALS$2].redirect;
|
|
}
|
|
|
|
get signal() {
|
|
return this[INTERNALS$2].signal;
|
|
}
|
|
|
|
/**
|
|
* Clone this request
|
|
*
|
|
* @return Request
|
|
*/
|
|
clone() {
|
|
return new Request(this);
|
|
}
|
|
}
|
|
|
|
Body.mixIn(Request.prototype);
|
|
|
|
Object.defineProperty(Request.prototype, Symbol.toStringTag, {
|
|
value: 'Request',
|
|
writable: false,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperties(Request.prototype, {
|
|
method: { enumerable: true },
|
|
url: { enumerable: true },
|
|
headers: { enumerable: true },
|
|
redirect: { enumerable: true },
|
|
clone: { enumerable: true },
|
|
signal: { enumerable: true }
|
|
});
|
|
|
|
/**
|
|
* Convert a Request to Node.js http request options.
|
|
*
|
|
* @param Request A Request instance
|
|
* @return Object The options object to be passed to http.request
|
|
*/
|
|
function getNodeRequestOptions(request) {
|
|
const parsedURL = request[INTERNALS$2].parsedURL;
|
|
const headers = new Headers(request[INTERNALS$2].headers);
|
|
|
|
// fetch step 1.3
|
|
if (!headers.has('Accept')) {
|
|
headers.set('Accept', '*/*');
|
|
}
|
|
|
|
// Basic fetch
|
|
if (!parsedURL.protocol || !parsedURL.hostname) {
|
|
throw new TypeError('Only absolute URLs are supported');
|
|
}
|
|
|
|
if (!/^https?:$/.test(parsedURL.protocol)) {
|
|
throw new TypeError('Only HTTP(S) protocols are supported');
|
|
}
|
|
|
|
if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
|
|
throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
|
|
}
|
|
|
|
// HTTP-network-or-cache fetch steps 2.4-2.7
|
|
let contentLengthValue = null;
|
|
if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
|
|
contentLengthValue = '0';
|
|
}
|
|
if (request.body != null) {
|
|
const totalBytes = getTotalBytes(request);
|
|
if (typeof totalBytes === 'number') {
|
|
contentLengthValue = String(totalBytes);
|
|
}
|
|
}
|
|
if (contentLengthValue) {
|
|
headers.set('Content-Length', contentLengthValue);
|
|
}
|
|
|
|
// HTTP-network-or-cache fetch step 2.11
|
|
if (!headers.has('User-Agent')) {
|
|
headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
|
|
}
|
|
|
|
// HTTP-network-or-cache fetch step 2.15
|
|
if (request.compress && !headers.has('Accept-Encoding')) {
|
|
headers.set('Accept-Encoding', 'gzip,deflate');
|
|
}
|
|
|
|
let agent = request.agent;
|
|
if (typeof agent === 'function') {
|
|
agent = agent(parsedURL);
|
|
}
|
|
|
|
if (!headers.has('Connection') && !agent) {
|
|
headers.set('Connection', 'close');
|
|
}
|
|
|
|
// HTTP-network fetch step 4.2
|
|
// chunked encoding is handled by Node.js
|
|
|
|
return Object.assign({}, parsedURL, {
|
|
method: request.method,
|
|
headers: exportNodeCompatibleHeaders(headers),
|
|
agent
|
|
});
|
|
}
|
|
|
|
/**
|
|
* abort-error.js
|
|
*
|
|
* AbortError interface for cancelled requests
|
|
*/
|
|
|
|
/**
|
|
* Create AbortError instance
|
|
*
|
|
* @param String message Error message for human
|
|
* @return AbortError
|
|
*/
|
|
function AbortError(message) {
|
|
Error.call(this, message);
|
|
|
|
this.type = 'aborted';
|
|
this.message = message;
|
|
|
|
// hide custom error implementation details from end-users
|
|
Error.captureStackTrace(this, this.constructor);
|
|
}
|
|
|
|
AbortError.prototype = Object.create(Error.prototype);
|
|
AbortError.prototype.constructor = AbortError;
|
|
AbortError.prototype.name = 'AbortError';
|
|
|
|
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
|
|
const PassThrough$1 = Stream.PassThrough;
|
|
const resolve_url = Url.resolve;
|
|
|
|
/**
|
|
* Fetch function
|
|
*
|
|
* @param Mixed url Absolute url or Request instance
|
|
* @param Object opts Fetch options
|
|
* @return Promise
|
|
*/
|
|
function fetch(url, opts) {
|
|
|
|
// allow custom promise
|
|
if (!fetch.Promise) {
|
|
throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
|
|
}
|
|
|
|
Body.Promise = fetch.Promise;
|
|
|
|
// wrap http.request into fetch
|
|
return new fetch.Promise(function (resolve, reject) {
|
|
// build request object
|
|
const request = new Request(url, opts);
|
|
const options = getNodeRequestOptions(request);
|
|
|
|
const send = (options.protocol === 'https:' ? https : http).request;
|
|
const signal = request.signal;
|
|
|
|
let response = null;
|
|
|
|
const abort = function abort() {
|
|
let error = new AbortError('The user aborted a request.');
|
|
reject(error);
|
|
if (request.body && request.body instanceof Stream.Readable) {
|
|
request.body.destroy(error);
|
|
}
|
|
if (!response || !response.body) return;
|
|
response.body.emit('error', error);
|
|
};
|
|
|
|
if (signal && signal.aborted) {
|
|
abort();
|
|
return;
|
|
}
|
|
|
|
const abortAndFinalize = function abortAndFinalize() {
|
|
abort();
|
|
finalize();
|
|
};
|
|
|
|
// send request
|
|
const req = send(options);
|
|
let reqTimeout;
|
|
|
|
if (signal) {
|
|
signal.addEventListener('abort', abortAndFinalize);
|
|
}
|
|
|
|
function finalize() {
|
|
req.abort();
|
|
if (signal) signal.removeEventListener('abort', abortAndFinalize);
|
|
clearTimeout(reqTimeout);
|
|
}
|
|
|
|
if (request.timeout) {
|
|
req.once('socket', function (socket) {
|
|
reqTimeout = setTimeout(function () {
|
|
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
|
|
finalize();
|
|
}, request.timeout);
|
|
});
|
|
}
|
|
|
|
req.on('error', function (err) {
|
|
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
|
|
finalize();
|
|
});
|
|
|
|
req.on('response', function (res) {
|
|
clearTimeout(reqTimeout);
|
|
|
|
const headers = createHeadersLenient(res.headers);
|
|
|
|
// HTTP fetch step 5
|
|
if (fetch.isRedirect(res.statusCode)) {
|
|
// HTTP fetch step 5.2
|
|
const location = headers.get('Location');
|
|
|
|
// HTTP fetch step 5.3
|
|
const locationURL = location === null ? null : resolve_url(request.url, location);
|
|
|
|
// HTTP fetch step 5.5
|
|
switch (request.redirect) {
|
|
case 'error':
|
|
reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect'));
|
|
finalize();
|
|
return;
|
|
case 'manual':
|
|
// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
|
|
if (locationURL !== null) {
|
|
// handle corrupted header
|
|
try {
|
|
headers.set('Location', locationURL);
|
|
} catch (err) {
|
|
// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
|
|
reject(err);
|
|
}
|
|
}
|
|
break;
|
|
case 'follow':
|
|
// HTTP-redirect fetch step 2
|
|
if (locationURL === null) {
|
|
break;
|
|
}
|
|
|
|
// HTTP-redirect fetch step 5
|
|
if (request.counter >= request.follow) {
|
|
reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
|
|
finalize();
|
|
return;
|
|
}
|
|
|
|
// HTTP-redirect fetch step 6 (counter increment)
|
|
// Create a new Request object.
|
|
const requestOpts = {
|
|
headers: new Headers(request.headers),
|
|
follow: request.follow,
|
|
counter: request.counter + 1,
|
|
agent: request.agent,
|
|
compress: request.compress,
|
|
method: request.method,
|
|
body: request.body,
|
|
signal: request.signal,
|
|
timeout: request.timeout
|
|
};
|
|
|
|
// HTTP-redirect fetch step 9
|
|
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
|
|
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
|
|
finalize();
|
|
return;
|
|
}
|
|
|
|
// HTTP-redirect fetch step 11
|
|
if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
|
|
requestOpts.method = 'GET';
|
|
requestOpts.body = undefined;
|
|
requestOpts.headers.delete('content-length');
|
|
}
|
|
|
|
// HTTP-redirect fetch step 15
|
|
resolve(fetch(new Request(locationURL, requestOpts)));
|
|
finalize();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// prepare response
|
|
res.once('end', function () {
|
|
if (signal) signal.removeEventListener('abort', abortAndFinalize);
|
|
});
|
|
let body = res.pipe(new PassThrough$1());
|
|
|
|
const response_options = {
|
|
url: request.url,
|
|
status: res.statusCode,
|
|
statusText: res.statusMessage,
|
|
headers: headers,
|
|
size: request.size,
|
|
timeout: request.timeout,
|
|
counter: request.counter
|
|
};
|
|
|
|
// HTTP-network fetch step 12.1.1.3
|
|
const codings = headers.get('Content-Encoding');
|
|
|
|
// HTTP-network fetch step 12.1.1.4: handle content codings
|
|
|
|
// in following scenarios we ignore compression support
|
|
// 1. compression support is disabled
|
|
// 2. HEAD request
|
|
// 3. no Content-Encoding header
|
|
// 4. no content response (204)
|
|
// 5. content not modified response (304)
|
|
if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
|
|
response = new Response(body, response_options);
|
|
resolve(response);
|
|
return;
|
|
}
|
|
|
|
// For Node v6+
|
|
// Be less strict when decoding compressed responses, since sometimes
|
|
// servers send slightly invalid responses that are still accepted
|
|
// by common browsers.
|
|
// Always using Z_SYNC_FLUSH is what cURL does.
|
|
const zlibOptions = {
|
|
flush: zlib.Z_SYNC_FLUSH,
|
|
finishFlush: zlib.Z_SYNC_FLUSH
|
|
};
|
|
|
|
// for gzip
|
|
if (codings == 'gzip' || codings == 'x-gzip') {
|
|
body = body.pipe(zlib.createGunzip(zlibOptions));
|
|
response = new Response(body, response_options);
|
|
resolve(response);
|
|
return;
|
|
}
|
|
|
|
// for deflate
|
|
if (codings == 'deflate' || codings == 'x-deflate') {
|
|
// handle the infamous raw deflate response from old servers
|
|
// a hack for old IIS and Apache servers
|
|
const raw = res.pipe(new PassThrough$1());
|
|
raw.once('data', function (chunk) {
|
|
// see http://stackoverflow.com/questions/37519828
|
|
if ((chunk[0] & 0x0F) === 0x08) {
|
|
body = body.pipe(zlib.createInflate());
|
|
} else {
|
|
body = body.pipe(zlib.createInflateRaw());
|
|
}
|
|
response = new Response(body, response_options);
|
|
resolve(response);
|
|
});
|
|
return;
|
|
}
|
|
|
|
// for br
|
|
if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
|
|
body = body.pipe(zlib.createBrotliDecompress());
|
|
response = new Response(body, response_options);
|
|
resolve(response);
|
|
return;
|
|
}
|
|
|
|
// otherwise, use response as-is
|
|
response = new Response(body, response_options);
|
|
resolve(response);
|
|
});
|
|
|
|
writeToStream(req, request);
|
|
});
|
|
}
|
|
/**
|
|
* Redirect code matching
|
|
*
|
|
* @param Number code Status code
|
|
* @return Boolean
|
|
*/
|
|
fetch.isRedirect = function (code) {
|
|
return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
|
|
};
|
|
|
|
// expose Promise
|
|
fetch.Promise = global.Promise;
|
|
|
|
module.exports = exports = fetch;
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.default = exports;
|
|
exports.Headers = Headers;
|
|
exports.Request = Request;
|
|
exports.Response = Response;
|
|
exports.FetchError = FetchError;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 458:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLStreamWriter, XMLWriterBase,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLWriterBase = __webpack_require__(423);
|
|
|
|
WriterState = __webpack_require__(541);
|
|
|
|
module.exports = XMLStreamWriter = (function(superClass) {
|
|
extend(XMLStreamWriter, superClass);
|
|
|
|
function XMLStreamWriter(stream, options) {
|
|
this.stream = stream;
|
|
XMLStreamWriter.__super__.constructor.call(this, options);
|
|
}
|
|
|
|
XMLStreamWriter.prototype.endline = function(node, options, level) {
|
|
if (node.isLastRootNode && options.state === WriterState.CloseTag) {
|
|
return '';
|
|
} else {
|
|
return XMLStreamWriter.__super__.endline.call(this, node, options, level);
|
|
}
|
|
};
|
|
|
|
XMLStreamWriter.prototype.document = function(doc, options) {
|
|
var child, i, j, k, len, len1, ref, ref1, results;
|
|
ref = doc.children;
|
|
for (i = j = 0, len = ref.length; j < len; i = ++j) {
|
|
child = ref[i];
|
|
child.isLastRootNode = i === doc.children.length - 1;
|
|
}
|
|
options = this.filterOptions(options);
|
|
ref1 = doc.children;
|
|
results = [];
|
|
for (k = 0, len1 = ref1.length; k < len1; k++) {
|
|
child = ref1[k];
|
|
results.push(this.writeChildNode(child, options, 0));
|
|
}
|
|
return results;
|
|
};
|
|
|
|
XMLStreamWriter.prototype.attribute = function(att, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.attribute.call(this, att, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.cdata = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.cdata.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.comment = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.comment.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.declaration = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.declaration.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.docType = function(node, options, level) {
|
|
var child, j, len, ref;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
this.stream.write(this.indent(node, options, level));
|
|
this.stream.write('<!DOCTYPE ' + node.root().name);
|
|
if (node.pubID && node.sysID) {
|
|
this.stream.write(' PUBLIC "' + node.pubID + '" "' + node.sysID + '"');
|
|
} else if (node.sysID) {
|
|
this.stream.write(' SYSTEM "' + node.sysID + '"');
|
|
}
|
|
if (node.children.length > 0) {
|
|
this.stream.write(' [');
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.InsideTag;
|
|
ref = node.children;
|
|
for (j = 0, len = ref.length; j < len; j++) {
|
|
child = ref[j];
|
|
this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(']');
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(options.spaceBeforeSlash + '>');
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.None;
|
|
return this.closeNode(node, options, level);
|
|
};
|
|
|
|
XMLStreamWriter.prototype.element = function(node, options, level) {
|
|
var att, child, childNodeCount, firstChildNode, j, len, name, prettySuppressed, ref, ref1;
|
|
level || (level = 0);
|
|
this.openNode(node, options, level);
|
|
options.state = WriterState.OpenTag;
|
|
this.stream.write(this.indent(node, options, level) + '<' + node.name);
|
|
ref = node.attribs;
|
|
for (name in ref) {
|
|
if (!hasProp.call(ref, name)) continue;
|
|
att = ref[name];
|
|
this.attribute(att, options, level);
|
|
}
|
|
childNodeCount = node.children.length;
|
|
firstChildNode = childNodeCount === 0 ? null : node.children[0];
|
|
if (childNodeCount === 0 || node.children.every(function(e) {
|
|
return (e.type === NodeType.Text || e.type === NodeType.Raw) && e.value === '';
|
|
})) {
|
|
if (options.allowEmpty) {
|
|
this.stream.write('>');
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write('</' + node.name + '>');
|
|
} else {
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(options.spaceBeforeSlash + '/>');
|
|
}
|
|
} else if (options.pretty && childNodeCount === 1 && (firstChildNode.type === NodeType.Text || firstChildNode.type === NodeType.Raw) && (firstChildNode.value != null)) {
|
|
this.stream.write('>');
|
|
options.state = WriterState.InsideTag;
|
|
options.suppressPrettyCount++;
|
|
prettySuppressed = true;
|
|
this.writeChildNode(firstChildNode, options, level + 1);
|
|
options.suppressPrettyCount--;
|
|
prettySuppressed = false;
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write('</' + node.name + '>');
|
|
} else {
|
|
this.stream.write('>' + this.endline(node, options, level));
|
|
options.state = WriterState.InsideTag;
|
|
ref1 = node.children;
|
|
for (j = 0, len = ref1.length; j < len; j++) {
|
|
child = ref1[j];
|
|
this.writeChildNode(child, options, level + 1);
|
|
}
|
|
options.state = WriterState.CloseTag;
|
|
this.stream.write(this.indent(node, options, level) + '</' + node.name + '>');
|
|
}
|
|
this.stream.write(this.endline(node, options, level));
|
|
options.state = WriterState.None;
|
|
return this.closeNode(node, options, level);
|
|
};
|
|
|
|
XMLStreamWriter.prototype.processingInstruction = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.processingInstruction.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.raw = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.raw.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.text = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.text.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdAttList = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdAttList.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdElement = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdElement.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdEntity = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdEntity.call(this, node, options, level));
|
|
};
|
|
|
|
XMLStreamWriter.prototype.dtdNotation = function(node, options, level) {
|
|
return this.stream.write(XMLStreamWriter.__super__.dtdNotation.call(this, node, options, level));
|
|
};
|
|
|
|
return XMLStreamWriter;
|
|
|
|
})(XMLWriterBase);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 459:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
function __export(m) {
|
|
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
}
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__export(__webpack_require__(560));
|
|
__export(__webpack_require__(53));
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 460:
|
|
/***/ (function(module) {
|
|
|
|
// generated by genversion
|
|
module.exports = '4.0.0'
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 463:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDElement, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDTDElement = (function(superClass) {
|
|
extend(XMLDTDElement, superClass);
|
|
|
|
function XMLDTDElement(parent, name, value) {
|
|
XMLDTDElement.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD element name. " + this.debugInfo());
|
|
}
|
|
if (!value) {
|
|
value = '(#PCDATA)';
|
|
}
|
|
if (Array.isArray(value)) {
|
|
value = '(' + value.join(',') + ')';
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.ElementDeclaration;
|
|
this.value = this.stringify.dtdElementValue(value);
|
|
}
|
|
|
|
XMLDTDElement.prototype.toString = function(options) {
|
|
return this.options.writer.dtdElement(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDElement;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 470:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const command_1 = __webpack_require__(431);
|
|
const os = __importStar(__webpack_require__(87));
|
|
const path = __importStar(__webpack_require__(622));
|
|
/**
|
|
* The code to exit an action
|
|
*/
|
|
var ExitCode;
|
|
(function (ExitCode) {
|
|
/**
|
|
* A code indicating that the action was successful
|
|
*/
|
|
ExitCode[ExitCode["Success"] = 0] = "Success";
|
|
/**
|
|
* A code indicating that the action was a failure
|
|
*/
|
|
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
|
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
|
//-----------------------------------------------------------------------
|
|
// Variables
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Sets env variable for this action and future actions in the job
|
|
* @param name the name of the variable to set
|
|
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function exportVariable(name, val) {
|
|
const convertedVal = command_1.toCommandValue(val);
|
|
process.env[name] = convertedVal;
|
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
|
}
|
|
exports.exportVariable = exportVariable;
|
|
/**
|
|
* Registers a secret which will get masked from logs
|
|
* @param secret value of the secret
|
|
*/
|
|
function setSecret(secret) {
|
|
command_1.issueCommand('add-mask', {}, secret);
|
|
}
|
|
exports.setSecret = setSecret;
|
|
/**
|
|
* Prepends inputPath to the PATH (for this action and future actions)
|
|
* @param inputPath
|
|
*/
|
|
function addPath(inputPath) {
|
|
command_1.issueCommand('add-path', {}, inputPath);
|
|
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
|
}
|
|
exports.addPath = addPath;
|
|
/**
|
|
* Gets the value of an input. The value is also trimmed.
|
|
*
|
|
* @param name name of the input to get
|
|
* @param options optional. See InputOptions.
|
|
* @returns string
|
|
*/
|
|
function getInput(name, options) {
|
|
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
|
if (options && options.required && !val) {
|
|
throw new Error(`Input required and not supplied: ${name}`);
|
|
}
|
|
return val.trim();
|
|
}
|
|
exports.getInput = getInput;
|
|
/**
|
|
* Sets the value of an output.
|
|
*
|
|
* @param name name of the output to set
|
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function setOutput(name, value) {
|
|
command_1.issueCommand('set-output', { name }, value);
|
|
}
|
|
exports.setOutput = setOutput;
|
|
/**
|
|
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
|
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
|
*
|
|
*/
|
|
function setCommandEcho(enabled) {
|
|
command_1.issue('echo', enabled ? 'on' : 'off');
|
|
}
|
|
exports.setCommandEcho = setCommandEcho;
|
|
//-----------------------------------------------------------------------
|
|
// Results
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Sets the action status to failed.
|
|
* When the action exits it will be with an exit code of 1
|
|
* @param message add error issue message
|
|
*/
|
|
function setFailed(message) {
|
|
process.exitCode = ExitCode.Failure;
|
|
error(message);
|
|
}
|
|
exports.setFailed = setFailed;
|
|
//-----------------------------------------------------------------------
|
|
// Logging Commands
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Gets whether Actions Step Debug is on or not
|
|
*/
|
|
function isDebug() {
|
|
return process.env['RUNNER_DEBUG'] === '1';
|
|
}
|
|
exports.isDebug = isDebug;
|
|
/**
|
|
* Writes debug message to user log
|
|
* @param message debug message
|
|
*/
|
|
function debug(message) {
|
|
command_1.issueCommand('debug', {}, message);
|
|
}
|
|
exports.debug = debug;
|
|
/**
|
|
* Adds an error issue
|
|
* @param message error issue message. Errors will be converted to string via toString()
|
|
*/
|
|
function error(message) {
|
|
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.error = error;
|
|
/**
|
|
* Adds an warning issue
|
|
* @param message warning issue message. Errors will be converted to string via toString()
|
|
*/
|
|
function warning(message) {
|
|
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.warning = warning;
|
|
/**
|
|
* Writes info to log with console.log.
|
|
* @param message info message
|
|
*/
|
|
function info(message) {
|
|
process.stdout.write(message + os.EOL);
|
|
}
|
|
exports.info = info;
|
|
/**
|
|
* Begin an output group.
|
|
*
|
|
* Output until the next `groupEnd` will be foldable in this group
|
|
*
|
|
* @param name The name of the output group
|
|
*/
|
|
function startGroup(name) {
|
|
command_1.issue('group', name);
|
|
}
|
|
exports.startGroup = startGroup;
|
|
/**
|
|
* End an output group.
|
|
*/
|
|
function endGroup() {
|
|
command_1.issue('endgroup');
|
|
}
|
|
exports.endGroup = endGroup;
|
|
/**
|
|
* Wrap an asynchronous function call in a group.
|
|
*
|
|
* Returns the same type as the function itself.
|
|
*
|
|
* @param name The name of the group
|
|
* @param fn The function to wrap in the group
|
|
*/
|
|
function group(name, fn) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
startGroup(name);
|
|
let result;
|
|
try {
|
|
result = yield fn();
|
|
}
|
|
finally {
|
|
endGroup();
|
|
}
|
|
return result;
|
|
});
|
|
}
|
|
exports.group = group;
|
|
//-----------------------------------------------------------------------
|
|
// Wrapper action state
|
|
//-----------------------------------------------------------------------
|
|
/**
|
|
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
|
*
|
|
* @param name name of the state to store
|
|
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
function saveState(name, value) {
|
|
command_1.issueCommand('save-state', { name }, value);
|
|
}
|
|
exports.saveState = saveState;
|
|
/**
|
|
* Gets the value of an state set by this action's main execution.
|
|
*
|
|
* @param name name of the state to get
|
|
* @returns string
|
|
*/
|
|
function getState(name) {
|
|
return process.env[`STATE_${name}`] || '';
|
|
}
|
|
exports.getState = getState;
|
|
//# sourceMappingURL=core.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 476:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var builder, defaults, escapeCDATA, requiresCDATA, wrapCDATA,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
builder = __webpack_require__(312);
|
|
|
|
defaults = __webpack_require__(791).defaults;
|
|
|
|
requiresCDATA = function(entry) {
|
|
return typeof entry === "string" && (entry.indexOf('&') >= 0 || entry.indexOf('>') >= 0 || entry.indexOf('<') >= 0);
|
|
};
|
|
|
|
wrapCDATA = function(entry) {
|
|
return "<![CDATA[" + (escapeCDATA(entry)) + "]]>";
|
|
};
|
|
|
|
escapeCDATA = function(entry) {
|
|
return entry.replace(']]>', ']]]]><![CDATA[>');
|
|
};
|
|
|
|
exports.Builder = (function() {
|
|
function Builder(opts) {
|
|
var key, ref, value;
|
|
this.options = {};
|
|
ref = defaults["0.2"];
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this.options[key] = value;
|
|
}
|
|
for (key in opts) {
|
|
if (!hasProp.call(opts, key)) continue;
|
|
value = opts[key];
|
|
this.options[key] = value;
|
|
}
|
|
}
|
|
|
|
Builder.prototype.buildObject = function(rootObj) {
|
|
var attrkey, charkey, render, rootElement, rootName;
|
|
attrkey = this.options.attrkey;
|
|
charkey = this.options.charkey;
|
|
if ((Object.keys(rootObj).length === 1) && (this.options.rootName === defaults['0.2'].rootName)) {
|
|
rootName = Object.keys(rootObj)[0];
|
|
rootObj = rootObj[rootName];
|
|
} else {
|
|
rootName = this.options.rootName;
|
|
}
|
|
render = (function(_this) {
|
|
return function(element, obj) {
|
|
var attr, child, entry, index, key, value;
|
|
if (typeof obj !== 'object') {
|
|
if (_this.options.cdata && requiresCDATA(obj)) {
|
|
element.raw(wrapCDATA(obj));
|
|
} else {
|
|
element.txt(obj);
|
|
}
|
|
} else if (Array.isArray(obj)) {
|
|
for (index in obj) {
|
|
if (!hasProp.call(obj, index)) continue;
|
|
child = obj[index];
|
|
for (key in child) {
|
|
entry = child[key];
|
|
element = render(element.ele(key), entry).up();
|
|
}
|
|
}
|
|
} else {
|
|
for (key in obj) {
|
|
if (!hasProp.call(obj, key)) continue;
|
|
child = obj[key];
|
|
if (key === attrkey) {
|
|
if (typeof child === "object") {
|
|
for (attr in child) {
|
|
value = child[attr];
|
|
element = element.att(attr, value);
|
|
}
|
|
}
|
|
} else if (key === charkey) {
|
|
if (_this.options.cdata && requiresCDATA(child)) {
|
|
element = element.raw(wrapCDATA(child));
|
|
} else {
|
|
element = element.txt(child);
|
|
}
|
|
} else if (Array.isArray(child)) {
|
|
for (index in child) {
|
|
if (!hasProp.call(child, index)) continue;
|
|
entry = child[index];
|
|
if (typeof entry === 'string') {
|
|
if (_this.options.cdata && requiresCDATA(entry)) {
|
|
element = element.ele(key).raw(wrapCDATA(entry)).up();
|
|
} else {
|
|
element = element.ele(key, entry).up();
|
|
}
|
|
} else {
|
|
element = render(element.ele(key), entry).up();
|
|
}
|
|
}
|
|
} else if (typeof child === "object") {
|
|
element = render(element.ele(key), child).up();
|
|
} else {
|
|
if (typeof child === 'string' && _this.options.cdata && requiresCDATA(child)) {
|
|
element = element.ele(key).raw(wrapCDATA(child)).up();
|
|
} else {
|
|
if (child == null) {
|
|
child = '';
|
|
}
|
|
element = element.ele(key, child.toString()).up();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return element;
|
|
};
|
|
})(this);
|
|
rootElement = builder.create(rootName, this.options.xmldec, this.options.doctype, {
|
|
headless: this.options.headless,
|
|
allowSurrogateChars: this.options.allowSurrogateChars
|
|
});
|
|
return render(rootElement, rootObj).end(this.options.renderOpts);
|
|
};
|
|
|
|
return Builder;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 491:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLProcessingInstruction,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLCharacterData = __webpack_require__(639);
|
|
|
|
module.exports = XMLProcessingInstruction = (function(superClass) {
|
|
extend(XMLProcessingInstruction, superClass);
|
|
|
|
function XMLProcessingInstruction(parent, target, value) {
|
|
XMLProcessingInstruction.__super__.constructor.call(this, parent);
|
|
if (target == null) {
|
|
throw new Error("Missing instruction target. " + this.debugInfo());
|
|
}
|
|
this.type = NodeType.ProcessingInstruction;
|
|
this.target = this.stringify.insTarget(target);
|
|
this.name = this.target;
|
|
if (value) {
|
|
this.value = this.stringify.insValue(value);
|
|
}
|
|
}
|
|
|
|
XMLProcessingInstruction.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLProcessingInstruction.prototype.toString = function(options) {
|
|
return this.options.writer.processingInstruction(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLProcessingInstruction.prototype.isEqualNode = function(node) {
|
|
if (!XMLProcessingInstruction.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.target !== this.target) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLProcessingInstruction;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 492:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const context_base_1 = __webpack_require__(459);
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Context API
|
|
*/
|
|
class ContextAPI {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
constructor() {
|
|
this._contextManager = new context_base_1.NoopContextManager();
|
|
}
|
|
/** Get the singleton instance of the Context API */
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new ContextAPI();
|
|
}
|
|
return this._instance;
|
|
}
|
|
/**
|
|
* Set the current context manager. Returns the initialized context manager
|
|
*/
|
|
setGlobalContextManager(contextManager) {
|
|
this._contextManager = contextManager;
|
|
return contextManager;
|
|
}
|
|
/**
|
|
* Get the currently active context
|
|
*/
|
|
active() {
|
|
return this._contextManager.active();
|
|
}
|
|
/**
|
|
* Execute a function with an active context
|
|
*
|
|
* @param context context to be active during function execution
|
|
* @param fn function to execute in a context
|
|
*/
|
|
with(context, fn) {
|
|
return this._contextManager.with(context, fn);
|
|
}
|
|
/**
|
|
* Bind a context to a target function or event emitter
|
|
*
|
|
* @param target function or event emitter to bind
|
|
* @param context context to bind to the event emitter or function. Defaults to the currently active context
|
|
*/
|
|
bind(target, context = this.active()) {
|
|
return this._contextManager.bind(target, context);
|
|
}
|
|
}
|
|
exports.ContextAPI = ContextAPI;
|
|
//# sourceMappingURL=context.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 500:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = defer;
|
|
|
|
/**
|
|
* Runs provided function on next iteration of the event loop
|
|
*
|
|
* @param {function} fn - function to run
|
|
*/
|
|
function defer(fn)
|
|
{
|
|
var nextTick = typeof setImmediate == 'function'
|
|
? setImmediate
|
|
: (
|
|
typeof process == 'object' && typeof process.nextTick == 'function'
|
|
? process.nextTick
|
|
: null
|
|
);
|
|
|
|
if (nextTick)
|
|
{
|
|
nextTick(fn);
|
|
}
|
|
else
|
|
{
|
|
setTimeout(fn, 0);
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 512:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = {"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma","es"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/mrb-publish+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["keynote"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana"},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 515:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMImplementation;
|
|
|
|
module.exports = XMLDOMImplementation = (function() {
|
|
function XMLDOMImplementation() {}
|
|
|
|
XMLDOMImplementation.prototype.hasFeature = function(feature, version) {
|
|
return true;
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createDocument = function(namespaceURI, qualifiedName, doctype) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.createHTMLDocument = function(title) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
XMLDOMImplementation.prototype.getFeature = function(feature, version) {
|
|
throw new Error("This DOM method is not implemented.");
|
|
};
|
|
|
|
return XMLDOMImplementation;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 524:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMConfiguration, XMLDOMErrorHandler, XMLDOMStringList;
|
|
|
|
XMLDOMErrorHandler = __webpack_require__(724);
|
|
|
|
XMLDOMStringList = __webpack_require__(556);
|
|
|
|
module.exports = XMLDOMConfiguration = (function() {
|
|
function XMLDOMConfiguration() {
|
|
var clonedSelf;
|
|
this.defaultParams = {
|
|
"canonical-form": false,
|
|
"cdata-sections": false,
|
|
"comments": false,
|
|
"datatype-normalization": false,
|
|
"element-content-whitespace": true,
|
|
"entities": true,
|
|
"error-handler": new XMLDOMErrorHandler(),
|
|
"infoset": true,
|
|
"validate-if-schema": false,
|
|
"namespaces": true,
|
|
"namespace-declarations": true,
|
|
"normalize-characters": false,
|
|
"schema-location": '',
|
|
"schema-type": '',
|
|
"split-cdata-sections": true,
|
|
"validate": false,
|
|
"well-formed": true
|
|
};
|
|
this.params = clonedSelf = Object.create(this.defaultParams);
|
|
}
|
|
|
|
Object.defineProperty(XMLDOMConfiguration.prototype, 'parameterNames', {
|
|
get: function() {
|
|
return new XMLDOMStringList(Object.keys(this.defaultParams));
|
|
}
|
|
});
|
|
|
|
XMLDOMConfiguration.prototype.getParameter = function(name) {
|
|
if (this.params.hasOwnProperty(name)) {
|
|
return this.params[name];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLDOMConfiguration.prototype.canSetParameter = function(name, value) {
|
|
return true;
|
|
};
|
|
|
|
XMLDOMConfiguration.prototype.setParameter = function(name, value) {
|
|
if (value != null) {
|
|
return this.params[name] = value;
|
|
} else {
|
|
return delete this.params[name];
|
|
}
|
|
};
|
|
|
|
return XMLDOMConfiguration;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 538:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
/**
|
|
* Returns a copy of the upload options with defaults filled in.
|
|
*
|
|
* @param copy the original upload options
|
|
*/
|
|
function getUploadOptions(copy) {
|
|
const result = {
|
|
uploadConcurrency: 4,
|
|
uploadChunkSize: 32 * 1024 * 1024
|
|
};
|
|
if (copy) {
|
|
if (typeof copy.uploadConcurrency === 'number') {
|
|
result.uploadConcurrency = copy.uploadConcurrency;
|
|
}
|
|
if (typeof copy.uploadChunkSize === 'number') {
|
|
result.uploadChunkSize = copy.uploadChunkSize;
|
|
}
|
|
}
|
|
core.debug(`Upload concurrency: ${result.uploadConcurrency}`);
|
|
core.debug(`Upload chunk size: ${result.uploadChunkSize}`);
|
|
return result;
|
|
}
|
|
exports.getUploadOptions = getUploadOptions;
|
|
/**
|
|
* Returns a copy of the download options with defaults filled in.
|
|
*
|
|
* @param copy the original download options
|
|
*/
|
|
function getDownloadOptions(copy) {
|
|
const result = {
|
|
useAzureSdk: true,
|
|
downloadConcurrency: 8,
|
|
timeoutInMs: 30000
|
|
};
|
|
if (copy) {
|
|
if (typeof copy.useAzureSdk === 'boolean') {
|
|
result.useAzureSdk = copy.useAzureSdk;
|
|
}
|
|
if (typeof copy.downloadConcurrency === 'number') {
|
|
result.downloadConcurrency = copy.downloadConcurrency;
|
|
}
|
|
if (typeof copy.timeoutInMs === 'number') {
|
|
result.timeoutInMs = copy.timeoutInMs;
|
|
}
|
|
}
|
|
core.debug(`Use Azure SDK: ${result.useAzureSdk}`);
|
|
core.debug(`Download concurrency: ${result.downloadConcurrency}`);
|
|
core.debug(`Request timeout (ms): ${result.timeoutInMs}`);
|
|
return result;
|
|
}
|
|
exports.getDownloadOptions = getDownloadOptions;
|
|
//# sourceMappingURL=options.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 539:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const url = __webpack_require__(835);
|
|
const http = __webpack_require__(605);
|
|
const https = __webpack_require__(211);
|
|
const pm = __webpack_require__(950);
|
|
let tunnel;
|
|
var HttpCodes;
|
|
(function (HttpCodes) {
|
|
HttpCodes[HttpCodes["OK"] = 200] = "OK";
|
|
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
|
|
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
|
|
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
|
|
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
|
|
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
|
|
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
|
|
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
|
|
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
|
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
|
|
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
|
|
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
|
|
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
|
|
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
|
|
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
|
|
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
|
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
|
|
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
|
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
|
|
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
|
|
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
|
|
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
|
|
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
|
|
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
|
|
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
|
|
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
|
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
|
|
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
|
|
var Headers;
|
|
(function (Headers) {
|
|
Headers["Accept"] = "accept";
|
|
Headers["ContentType"] = "content-type";
|
|
})(Headers = exports.Headers || (exports.Headers = {}));
|
|
var MediaTypes;
|
|
(function (MediaTypes) {
|
|
MediaTypes["ApplicationJson"] = "application/json";
|
|
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
|
|
/**
|
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
|
*/
|
|
function getProxyUrl(serverUrl) {
|
|
let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
|
|
return proxyUrl ? proxyUrl.href : '';
|
|
}
|
|
exports.getProxyUrl = getProxyUrl;
|
|
const HttpRedirectCodes = [
|
|
HttpCodes.MovedPermanently,
|
|
HttpCodes.ResourceMoved,
|
|
HttpCodes.SeeOther,
|
|
HttpCodes.TemporaryRedirect,
|
|
HttpCodes.PermanentRedirect
|
|
];
|
|
const HttpResponseRetryCodes = [
|
|
HttpCodes.BadGateway,
|
|
HttpCodes.ServiceUnavailable,
|
|
HttpCodes.GatewayTimeout
|
|
];
|
|
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
|
|
const ExponentialBackoffCeiling = 10;
|
|
const ExponentialBackoffTimeSlice = 5;
|
|
class HttpClientResponse {
|
|
constructor(message) {
|
|
this.message = message;
|
|
}
|
|
readBody() {
|
|
return new Promise(async (resolve, reject) => {
|
|
let output = Buffer.alloc(0);
|
|
this.message.on('data', (chunk) => {
|
|
output = Buffer.concat([output, chunk]);
|
|
});
|
|
this.message.on('end', () => {
|
|
resolve(output.toString());
|
|
});
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClientResponse = HttpClientResponse;
|
|
function isHttps(requestUrl) {
|
|
let parsedUrl = url.parse(requestUrl);
|
|
return parsedUrl.protocol === 'https:';
|
|
}
|
|
exports.isHttps = isHttps;
|
|
class HttpClient {
|
|
constructor(userAgent, handlers, requestOptions) {
|
|
this._ignoreSslError = false;
|
|
this._allowRedirects = true;
|
|
this._allowRedirectDowngrade = false;
|
|
this._maxRedirects = 50;
|
|
this._allowRetries = false;
|
|
this._maxRetries = 1;
|
|
this._keepAlive = false;
|
|
this._disposed = false;
|
|
this.userAgent = userAgent;
|
|
this.handlers = handlers || [];
|
|
this.requestOptions = requestOptions;
|
|
if (requestOptions) {
|
|
if (requestOptions.ignoreSslError != null) {
|
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
|
}
|
|
this._socketTimeout = requestOptions.socketTimeout;
|
|
if (requestOptions.allowRedirects != null) {
|
|
this._allowRedirects = requestOptions.allowRedirects;
|
|
}
|
|
if (requestOptions.allowRedirectDowngrade != null) {
|
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
|
}
|
|
if (requestOptions.maxRedirects != null) {
|
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
|
}
|
|
if (requestOptions.keepAlive != null) {
|
|
this._keepAlive = requestOptions.keepAlive;
|
|
}
|
|
if (requestOptions.allowRetries != null) {
|
|
this._allowRetries = requestOptions.allowRetries;
|
|
}
|
|
if (requestOptions.maxRetries != null) {
|
|
this._maxRetries = requestOptions.maxRetries;
|
|
}
|
|
}
|
|
}
|
|
options(requestUrl, additionalHeaders) {
|
|
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
|
|
}
|
|
get(requestUrl, additionalHeaders) {
|
|
return this.request('GET', requestUrl, null, additionalHeaders || {});
|
|
}
|
|
del(requestUrl, additionalHeaders) {
|
|
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
|
|
}
|
|
post(requestUrl, data, additionalHeaders) {
|
|
return this.request('POST', requestUrl, data, additionalHeaders || {});
|
|
}
|
|
patch(requestUrl, data, additionalHeaders) {
|
|
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
|
|
}
|
|
put(requestUrl, data, additionalHeaders) {
|
|
return this.request('PUT', requestUrl, data, additionalHeaders || {});
|
|
}
|
|
head(requestUrl, additionalHeaders) {
|
|
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
|
|
}
|
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
|
return this.request(verb, requestUrl, stream, additionalHeaders);
|
|
}
|
|
/**
|
|
* Gets a typed object from an endpoint
|
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
|
*/
|
|
async getJson(requestUrl, additionalHeaders = {}) {
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
let res = await this.get(requestUrl, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
}
|
|
async postJson(requestUrl, obj, additionalHeaders = {}) {
|
|
let data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
let res = await this.post(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
}
|
|
async putJson(requestUrl, obj, additionalHeaders = {}) {
|
|
let data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
let res = await this.put(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
}
|
|
async patchJson(requestUrl, obj, additionalHeaders = {}) {
|
|
let data = JSON.stringify(obj, null, 2);
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
let res = await this.patch(requestUrl, data, additionalHeaders);
|
|
return this._processResponse(res, this.requestOptions);
|
|
}
|
|
/**
|
|
* Makes a raw http request.
|
|
* All other methods such as get, post, patch, and request ultimately call this.
|
|
* Prefer get, del, post and patch
|
|
*/
|
|
async request(verb, requestUrl, data, headers) {
|
|
if (this._disposed) {
|
|
throw new Error('Client has already been disposed.');
|
|
}
|
|
let parsedUrl = url.parse(requestUrl);
|
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
|
// Only perform retries on reads since writes may not be idempotent.
|
|
let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
|
|
? this._maxRetries + 1
|
|
: 1;
|
|
let numTries = 0;
|
|
let response;
|
|
while (numTries < maxTries) {
|
|
response = await this.requestRaw(info, data);
|
|
// Check if it's an authentication challenge
|
|
if (response &&
|
|
response.message &&
|
|
response.message.statusCode === HttpCodes.Unauthorized) {
|
|
let authenticationHandler;
|
|
for (let i = 0; i < this.handlers.length; i++) {
|
|
if (this.handlers[i].canHandleAuthentication(response)) {
|
|
authenticationHandler = this.handlers[i];
|
|
break;
|
|
}
|
|
}
|
|
if (authenticationHandler) {
|
|
return authenticationHandler.handleAuthentication(this, info, data);
|
|
}
|
|
else {
|
|
// We have received an unauthorized response but have no handlers to handle it.
|
|
// Let the response return to the caller.
|
|
return response;
|
|
}
|
|
}
|
|
let redirectsRemaining = this._maxRedirects;
|
|
while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
|
|
this._allowRedirects &&
|
|
redirectsRemaining > 0) {
|
|
const redirectUrl = response.message.headers['location'];
|
|
if (!redirectUrl) {
|
|
// if there's no location to redirect to, we won't
|
|
break;
|
|
}
|
|
let parsedRedirectUrl = url.parse(redirectUrl);
|
|
if (parsedUrl.protocol == 'https:' &&
|
|
parsedUrl.protocol != parsedRedirectUrl.protocol &&
|
|
!this._allowRedirectDowngrade) {
|
|
throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
|
|
}
|
|
// we need to finish reading the response before reassigning response
|
|
// which will leak the open socket.
|
|
await response.readBody();
|
|
// strip authorization header if redirected to a different hostname
|
|
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
|
|
for (let header in headers) {
|
|
// header names are case insensitive
|
|
if (header.toLowerCase() === 'authorization') {
|
|
delete headers[header];
|
|
}
|
|
}
|
|
}
|
|
// let's make the request with the new redirectUrl
|
|
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
|
|
response = await this.requestRaw(info, data);
|
|
redirectsRemaining--;
|
|
}
|
|
if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
|
|
// If not a retry code, return immediately instead of retrying
|
|
return response;
|
|
}
|
|
numTries += 1;
|
|
if (numTries < maxTries) {
|
|
await response.readBody();
|
|
await this._performExponentialBackoff(numTries);
|
|
}
|
|
}
|
|
return response;
|
|
}
|
|
/**
|
|
* Needs to be called if keepAlive is set to true in request options.
|
|
*/
|
|
dispose() {
|
|
if (this._agent) {
|
|
this._agent.destroy();
|
|
}
|
|
this._disposed = true;
|
|
}
|
|
/**
|
|
* Raw request.
|
|
* @param info
|
|
* @param data
|
|
*/
|
|
requestRaw(info, data) {
|
|
return new Promise((resolve, reject) => {
|
|
let callbackForResult = function (err, res) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
resolve(res);
|
|
};
|
|
this.requestRawWithCallback(info, data, callbackForResult);
|
|
});
|
|
}
|
|
/**
|
|
* Raw request with callback.
|
|
* @param info
|
|
* @param data
|
|
* @param onResult
|
|
*/
|
|
requestRawWithCallback(info, data, onResult) {
|
|
let socket;
|
|
if (typeof data === 'string') {
|
|
info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
|
|
}
|
|
let callbackCalled = false;
|
|
let handleResult = (err, res) => {
|
|
if (!callbackCalled) {
|
|
callbackCalled = true;
|
|
onResult(err, res);
|
|
}
|
|
};
|
|
let req = info.httpModule.request(info.options, (msg) => {
|
|
let res = new HttpClientResponse(msg);
|
|
handleResult(null, res);
|
|
});
|
|
req.on('socket', sock => {
|
|
socket = sock;
|
|
});
|
|
// If we ever get disconnected, we want the socket to timeout eventually
|
|
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
|
|
if (socket) {
|
|
socket.end();
|
|
}
|
|
handleResult(new Error('Request timeout: ' + info.options.path), null);
|
|
});
|
|
req.on('error', function (err) {
|
|
// err has statusCode property
|
|
// res should have headers
|
|
handleResult(err, null);
|
|
});
|
|
if (data && typeof data === 'string') {
|
|
req.write(data, 'utf8');
|
|
}
|
|
if (data && typeof data !== 'string') {
|
|
data.on('close', function () {
|
|
req.end();
|
|
});
|
|
data.pipe(req);
|
|
}
|
|
else {
|
|
req.end();
|
|
}
|
|
}
|
|
/**
|
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
|
*/
|
|
getAgent(serverUrl) {
|
|
let parsedUrl = url.parse(serverUrl);
|
|
return this._getAgent(parsedUrl);
|
|
}
|
|
_prepareRequest(method, requestUrl, headers) {
|
|
const info = {};
|
|
info.parsedUrl = requestUrl;
|
|
const usingSsl = info.parsedUrl.protocol === 'https:';
|
|
info.httpModule = usingSsl ? https : http;
|
|
const defaultPort = usingSsl ? 443 : 80;
|
|
info.options = {};
|
|
info.options.host = info.parsedUrl.hostname;
|
|
info.options.port = info.parsedUrl.port
|
|
? parseInt(info.parsedUrl.port)
|
|
: defaultPort;
|
|
info.options.path =
|
|
(info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
|
|
info.options.method = method;
|
|
info.options.headers = this._mergeHeaders(headers);
|
|
if (this.userAgent != null) {
|
|
info.options.headers['user-agent'] = this.userAgent;
|
|
}
|
|
info.options.agent = this._getAgent(info.parsedUrl);
|
|
// gives handlers an opportunity to participate
|
|
if (this.handlers) {
|
|
this.handlers.forEach(handler => {
|
|
handler.prepareRequest(info.options);
|
|
});
|
|
}
|
|
return info;
|
|
}
|
|
_mergeHeaders(headers) {
|
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
|
|
}
|
|
return lowercaseKeys(headers || {});
|
|
}
|
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
|
const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
|
let clientHeader;
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
|
}
|
|
return additionalHeaders[header] || clientHeader || _default;
|
|
}
|
|
_getAgent(parsedUrl) {
|
|
let agent;
|
|
let proxyUrl = pm.getProxyUrl(parsedUrl);
|
|
let useProxy = proxyUrl && proxyUrl.hostname;
|
|
if (this._keepAlive && useProxy) {
|
|
agent = this._proxyAgent;
|
|
}
|
|
if (this._keepAlive && !useProxy) {
|
|
agent = this._agent;
|
|
}
|
|
// if agent is already assigned use that agent.
|
|
if (!!agent) {
|
|
return agent;
|
|
}
|
|
const usingSsl = parsedUrl.protocol === 'https:';
|
|
let maxSockets = 100;
|
|
if (!!this.requestOptions) {
|
|
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
|
|
}
|
|
if (useProxy) {
|
|
// If using proxy, need tunnel
|
|
if (!tunnel) {
|
|
tunnel = __webpack_require__(413);
|
|
}
|
|
const agentOptions = {
|
|
maxSockets: maxSockets,
|
|
keepAlive: this._keepAlive,
|
|
proxy: {
|
|
proxyAuth: proxyUrl.auth,
|
|
host: proxyUrl.hostname,
|
|
port: proxyUrl.port
|
|
}
|
|
};
|
|
let tunnelAgent;
|
|
const overHttps = proxyUrl.protocol === 'https:';
|
|
if (usingSsl) {
|
|
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
|
|
}
|
|
else {
|
|
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
|
|
}
|
|
agent = tunnelAgent(agentOptions);
|
|
this._proxyAgent = agent;
|
|
}
|
|
// if reusing agent across request and tunneling agent isn't assigned create a new agent
|
|
if (this._keepAlive && !agent) {
|
|
const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
|
|
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
|
|
this._agent = agent;
|
|
}
|
|
// if not using private agent and tunnel agent isn't setup then use global agent
|
|
if (!agent) {
|
|
agent = usingSsl ? https.globalAgent : http.globalAgent;
|
|
}
|
|
if (usingSsl && this._ignoreSslError) {
|
|
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
|
|
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
|
|
// we have to cast it to any and change it directly
|
|
agent.options = Object.assign(agent.options || {}, {
|
|
rejectUnauthorized: false
|
|
});
|
|
}
|
|
return agent;
|
|
}
|
|
_performExponentialBackoff(retryNumber) {
|
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
|
return new Promise(resolve => setTimeout(() => resolve(), ms));
|
|
}
|
|
static dateTimeDeserializer(key, value) {
|
|
if (typeof value === 'string') {
|
|
let a = new Date(value);
|
|
if (!isNaN(a.valueOf())) {
|
|
return a;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
async _processResponse(res, options) {
|
|
return new Promise(async (resolve, reject) => {
|
|
const statusCode = res.message.statusCode;
|
|
const response = {
|
|
statusCode: statusCode,
|
|
result: null,
|
|
headers: {}
|
|
};
|
|
// not found leads to null obj returned
|
|
if (statusCode == HttpCodes.NotFound) {
|
|
resolve(response);
|
|
}
|
|
let obj;
|
|
let contents;
|
|
// get the result from the body
|
|
try {
|
|
contents = await res.readBody();
|
|
if (contents && contents.length > 0) {
|
|
if (options && options.deserializeDates) {
|
|
obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
|
|
}
|
|
else {
|
|
obj = JSON.parse(contents);
|
|
}
|
|
response.result = obj;
|
|
}
|
|
response.headers = res.message.headers;
|
|
}
|
|
catch (err) {
|
|
// Invalid resource (contents not json); leaving result obj null
|
|
}
|
|
// note that 3xx redirects are handled by the http layer.
|
|
if (statusCode > 299) {
|
|
let msg;
|
|
// if exception/error in body, attempt to get better error
|
|
if (obj && obj.message) {
|
|
msg = obj.message;
|
|
}
|
|
else if (contents && contents.length > 0) {
|
|
// it may be the case that the exception is in the body message as string
|
|
msg = contents;
|
|
}
|
|
else {
|
|
msg = 'Failed request: (' + statusCode + ')';
|
|
}
|
|
let err = new Error(msg);
|
|
// attach statusCode and body obj (if available) to the error object
|
|
err['statusCode'] = statusCode;
|
|
if (response.result) {
|
|
err['result'] = response.result;
|
|
}
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(response);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClient = HttpClient;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 541:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
None: 0,
|
|
OpenTag: 1,
|
|
InsideTag: 2,
|
|
CloseTag: 3
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 547:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var util = __webpack_require__(669);
|
|
var Stream = __webpack_require__(794).Stream;
|
|
var DelayedStream = __webpack_require__(152);
|
|
|
|
module.exports = CombinedStream;
|
|
function CombinedStream() {
|
|
this.writable = false;
|
|
this.readable = true;
|
|
this.dataSize = 0;
|
|
this.maxDataSize = 2 * 1024 * 1024;
|
|
this.pauseStreams = true;
|
|
|
|
this._released = false;
|
|
this._streams = [];
|
|
this._currentStream = null;
|
|
this._insideLoop = false;
|
|
this._pendingNext = false;
|
|
}
|
|
util.inherits(CombinedStream, Stream);
|
|
|
|
CombinedStream.create = function(options) {
|
|
var combinedStream = new this();
|
|
|
|
options = options || {};
|
|
for (var option in options) {
|
|
combinedStream[option] = options[option];
|
|
}
|
|
|
|
return combinedStream;
|
|
};
|
|
|
|
CombinedStream.isStreamLike = function(stream) {
|
|
return (typeof stream !== 'function')
|
|
&& (typeof stream !== 'string')
|
|
&& (typeof stream !== 'boolean')
|
|
&& (typeof stream !== 'number')
|
|
&& (!Buffer.isBuffer(stream));
|
|
};
|
|
|
|
CombinedStream.prototype.append = function(stream) {
|
|
var isStreamLike = CombinedStream.isStreamLike(stream);
|
|
|
|
if (isStreamLike) {
|
|
if (!(stream instanceof DelayedStream)) {
|
|
var newStream = DelayedStream.create(stream, {
|
|
maxDataSize: Infinity,
|
|
pauseStream: this.pauseStreams,
|
|
});
|
|
stream.on('data', this._checkDataSize.bind(this));
|
|
stream = newStream;
|
|
}
|
|
|
|
this._handleErrors(stream);
|
|
|
|
if (this.pauseStreams) {
|
|
stream.pause();
|
|
}
|
|
}
|
|
|
|
this._streams.push(stream);
|
|
return this;
|
|
};
|
|
|
|
CombinedStream.prototype.pipe = function(dest, options) {
|
|
Stream.prototype.pipe.call(this, dest, options);
|
|
this.resume();
|
|
return dest;
|
|
};
|
|
|
|
CombinedStream.prototype._getNext = function() {
|
|
this._currentStream = null;
|
|
|
|
if (this._insideLoop) {
|
|
this._pendingNext = true;
|
|
return; // defer call
|
|
}
|
|
|
|
this._insideLoop = true;
|
|
try {
|
|
do {
|
|
this._pendingNext = false;
|
|
this._realGetNext();
|
|
} while (this._pendingNext);
|
|
} finally {
|
|
this._insideLoop = false;
|
|
}
|
|
};
|
|
|
|
CombinedStream.prototype._realGetNext = function() {
|
|
var stream = this._streams.shift();
|
|
|
|
|
|
if (typeof stream == 'undefined') {
|
|
this.end();
|
|
return;
|
|
}
|
|
|
|
if (typeof stream !== 'function') {
|
|
this._pipeNext(stream);
|
|
return;
|
|
}
|
|
|
|
var getStream = stream;
|
|
getStream(function(stream) {
|
|
var isStreamLike = CombinedStream.isStreamLike(stream);
|
|
if (isStreamLike) {
|
|
stream.on('data', this._checkDataSize.bind(this));
|
|
this._handleErrors(stream);
|
|
}
|
|
|
|
this._pipeNext(stream);
|
|
}.bind(this));
|
|
};
|
|
|
|
CombinedStream.prototype._pipeNext = function(stream) {
|
|
this._currentStream = stream;
|
|
|
|
var isStreamLike = CombinedStream.isStreamLike(stream);
|
|
if (isStreamLike) {
|
|
stream.on('end', this._getNext.bind(this));
|
|
stream.pipe(this, {end: false});
|
|
return;
|
|
}
|
|
|
|
var value = stream;
|
|
this.write(value);
|
|
this._getNext();
|
|
};
|
|
|
|
CombinedStream.prototype._handleErrors = function(stream) {
|
|
var self = this;
|
|
stream.on('error', function(err) {
|
|
self._emitError(err);
|
|
});
|
|
};
|
|
|
|
CombinedStream.prototype.write = function(data) {
|
|
this.emit('data', data);
|
|
};
|
|
|
|
CombinedStream.prototype.pause = function() {
|
|
if (!this.pauseStreams) {
|
|
return;
|
|
}
|
|
|
|
if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
|
|
this.emit('pause');
|
|
};
|
|
|
|
CombinedStream.prototype.resume = function() {
|
|
if (!this._released) {
|
|
this._released = true;
|
|
this.writable = true;
|
|
this._getNext();
|
|
}
|
|
|
|
if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
|
|
this.emit('resume');
|
|
};
|
|
|
|
CombinedStream.prototype.end = function() {
|
|
this._reset();
|
|
this.emit('end');
|
|
};
|
|
|
|
CombinedStream.prototype.destroy = function() {
|
|
this._reset();
|
|
this.emit('close');
|
|
};
|
|
|
|
CombinedStream.prototype._reset = function() {
|
|
this.writable = false;
|
|
this._streams = [];
|
|
this._currentStream = null;
|
|
};
|
|
|
|
CombinedStream.prototype._checkDataSize = function() {
|
|
this._updateDataSize();
|
|
if (this.dataSize <= this.maxDataSize) {
|
|
return;
|
|
}
|
|
|
|
var message =
|
|
'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
|
|
this._emitError(new Error(message));
|
|
};
|
|
|
|
CombinedStream.prototype._updateDataSize = function() {
|
|
this.dataSize = 0;
|
|
|
|
var self = this;
|
|
this._streams.forEach(function(stream) {
|
|
if (!stream.dataSize) {
|
|
return;
|
|
}
|
|
|
|
self.dataSize += stream.dataSize;
|
|
});
|
|
|
|
if (this._currentStream && this._currentStream.dataSize) {
|
|
this.dataSize += this._currentStream.dataSize;
|
|
}
|
|
};
|
|
|
|
CombinedStream.prototype._emitError = function(err) {
|
|
this._reset();
|
|
this.emit('error', err);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 556:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMStringList;
|
|
|
|
module.exports = XMLDOMStringList = (function() {
|
|
function XMLDOMStringList(arr) {
|
|
this.arr = arr || [];
|
|
}
|
|
|
|
Object.defineProperty(XMLDOMStringList.prototype, 'length', {
|
|
get: function() {
|
|
return this.arr.length;
|
|
}
|
|
});
|
|
|
|
XMLDOMStringList.prototype.item = function(index) {
|
|
return this.arr[index] || null;
|
|
};
|
|
|
|
XMLDOMStringList.prototype.contains = function(str) {
|
|
return this.arr.indexOf(str) !== -1;
|
|
};
|
|
|
|
return XMLDOMStringList;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 559:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDOMConfiguration, XMLDOMImplementation, XMLDocument, XMLNode, XMLStringWriter, XMLStringifier, isPlainObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isPlainObject = __webpack_require__(582).isPlainObject;
|
|
|
|
XMLDOMImplementation = __webpack_require__(515);
|
|
|
|
XMLDOMConfiguration = __webpack_require__(524);
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLStringifier = __webpack_require__(602);
|
|
|
|
XMLStringWriter = __webpack_require__(347);
|
|
|
|
module.exports = XMLDocument = (function(superClass) {
|
|
extend(XMLDocument, superClass);
|
|
|
|
function XMLDocument(options) {
|
|
XMLDocument.__super__.constructor.call(this, null);
|
|
this.name = "#document";
|
|
this.type = NodeType.Document;
|
|
this.documentURI = null;
|
|
this.domConfig = new XMLDOMConfiguration();
|
|
options || (options = {});
|
|
if (!options.writer) {
|
|
options.writer = new XMLStringWriter();
|
|
}
|
|
this.options = options;
|
|
this.stringify = new XMLStringifier(options);
|
|
}
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'implementation', {
|
|
value: new XMLDOMImplementation()
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'doctype', {
|
|
get: function() {
|
|
var child, i, len, ref;
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.DocType) {
|
|
return child;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'documentElement', {
|
|
get: function() {
|
|
return this.rootObject || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'inputEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'strictErrorChecking', {
|
|
get: function() {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlEncoding', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].encoding;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlStandalone', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].standalone === 'yes';
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'xmlVersion', {
|
|
get: function() {
|
|
if (this.children.length !== 0 && this.children[0].type === NodeType.Declaration) {
|
|
return this.children[0].version;
|
|
} else {
|
|
return "1.0";
|
|
}
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'URL', {
|
|
get: function() {
|
|
return this.documentURI;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'origin', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'compatMode', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'characterSet', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocument.prototype, 'contentType', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
XMLDocument.prototype.end = function(writer) {
|
|
var writerOptions;
|
|
writerOptions = {};
|
|
if (!writer) {
|
|
writer = this.options.writer;
|
|
} else if (isPlainObject(writer)) {
|
|
writerOptions = writer;
|
|
writer = this.options.writer;
|
|
}
|
|
return writer.document(this, writer.filterOptions(writerOptions));
|
|
};
|
|
|
|
XMLDocument.prototype.toString = function(options) {
|
|
return this.options.writer.document(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLDocument.prototype.createElement = function(tagName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createDocumentFragment = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createTextNode = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createComment = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createCDATASection = function(data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createProcessingInstruction = function(target, data) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createAttribute = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createEntityReference = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByTagName = function(tagname) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.importNode = function(importedNode, deep) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createElementNS = function(namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createAttributeNS = function(namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementById = function(elementId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.adoptNode = function(source) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.normalizeDocument = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.renameNode = function(node, namespaceURI, qualifiedName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.getElementsByClassName = function(classNames) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createEvent = function(eventInterface) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createRange = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createNodeIterator = function(root, whatToShow, filter) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLDocument.prototype.createTreeWalker = function(root, whatToShow, filter) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
return XMLDocument;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 560:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* Class which stores and manages current context values. All methods which
|
|
* update context such as get and delete do not modify an existing context,
|
|
* but create a new one with updated values.
|
|
*/
|
|
class Context {
|
|
/**
|
|
* Construct a new context which inherits values from an optional parent context.
|
|
*
|
|
* @param parentContext a context from which to inherit values
|
|
*/
|
|
constructor(parentContext) {
|
|
this._currentContext = parentContext ? new Map(parentContext) : new Map();
|
|
}
|
|
/** Get a key to uniquely identify a context value */
|
|
static createKey(description) {
|
|
return Symbol(description);
|
|
}
|
|
/**
|
|
* Get a value from the context.
|
|
*
|
|
* @param key key which identifies a context value
|
|
*/
|
|
getValue(key) {
|
|
return this._currentContext.get(key);
|
|
}
|
|
/**
|
|
* Create a new context which inherits from this context and has
|
|
* the given key set to the given value.
|
|
*
|
|
* @param key context key for which to set the value
|
|
* @param value value to set for the given key
|
|
*/
|
|
setValue(key, value) {
|
|
const context = new Context(this._currentContext);
|
|
context._currentContext.set(key, value);
|
|
return context;
|
|
}
|
|
/**
|
|
* Return a new context which inherits from this context but does
|
|
* not contain a value for the given key.
|
|
*
|
|
* @param key context key for which to clear a value
|
|
*/
|
|
deleteValue(key) {
|
|
const context = new Context(this._currentContext);
|
|
context._currentContext.delete(key);
|
|
return context;
|
|
}
|
|
}
|
|
exports.Context = Context;
|
|
/** The root context is used as the default parent context when there is no active context */
|
|
Context.ROOT_CONTEXT = new Context();
|
|
/**
|
|
* This is another identifier to the root context which allows developers to easily search the
|
|
* codebase for direct uses of context which need to be removed in later PRs.
|
|
*
|
|
* It's existence is temporary and it should be removed when all references are fixed.
|
|
*/
|
|
Context.TODO = Context.ROOT_CONTEXT;
|
|
//# sourceMappingURL=context.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 562:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) 2018, Salesforce.com, 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:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. 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.
|
|
*
|
|
* 3. Neither the name of Salesforce.com 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 HOLDER 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.
|
|
*/
|
|
|
|
const psl = __webpack_require__(750);
|
|
|
|
function getPublicSuffix(domain) {
|
|
return psl.get(domain);
|
|
}
|
|
|
|
exports.getPublicSuffix = getPublicSuffix;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 566:
|
|
/***/ (function(module) {
|
|
|
|
// API
|
|
module.exports = abort;
|
|
|
|
/**
|
|
* Aborts leftover active jobs
|
|
*
|
|
* @param {object} state - current state object
|
|
*/
|
|
function abort(state)
|
|
{
|
|
Object.keys(state.jobs).forEach(clean.bind(state));
|
|
|
|
// reset leftover jobs
|
|
state.jobs = {};
|
|
}
|
|
|
|
/**
|
|
* Cleans up leftover job by invoking abort function for the provided job id
|
|
*
|
|
* @this state
|
|
* @param {string|number} key - job id to abort
|
|
*/
|
|
function clean(key)
|
|
{
|
|
if (typeof this.jobs[key] == 'function')
|
|
{
|
|
this.jobs[key]();
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 582:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var assign, getValue, isArray, isEmpty, isFunction, isObject, isPlainObject,
|
|
slice = [].slice,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
assign = function() {
|
|
var i, key, len, source, sources, target;
|
|
target = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
|
if (isFunction(Object.assign)) {
|
|
Object.assign.apply(null, arguments);
|
|
} else {
|
|
for (i = 0, len = sources.length; i < len; i++) {
|
|
source = sources[i];
|
|
if (source != null) {
|
|
for (key in source) {
|
|
if (!hasProp.call(source, key)) continue;
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
|
|
isFunction = function(val) {
|
|
return !!val && Object.prototype.toString.call(val) === '[object Function]';
|
|
};
|
|
|
|
isObject = function(val) {
|
|
var ref;
|
|
return !!val && ((ref = typeof val) === 'function' || ref === 'object');
|
|
};
|
|
|
|
isArray = function(val) {
|
|
if (isFunction(Array.isArray)) {
|
|
return Array.isArray(val);
|
|
} else {
|
|
return Object.prototype.toString.call(val) === '[object Array]';
|
|
}
|
|
};
|
|
|
|
isEmpty = function(val) {
|
|
var key;
|
|
if (isArray(val)) {
|
|
return !val.length;
|
|
} else {
|
|
for (key in val) {
|
|
if (!hasProp.call(val, key)) continue;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
|
|
isPlainObject = function(val) {
|
|
var ctor, proto;
|
|
return isObject(val) && (proto = Object.getPrototypeOf(val)) && (ctor = proto.constructor) && (typeof ctor === 'function') && (ctor instanceof ctor) && (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object));
|
|
};
|
|
|
|
getValue = function(obj) {
|
|
if (isFunction(obj.valueOf)) {
|
|
return obj.valueOf();
|
|
} else {
|
|
return obj;
|
|
}
|
|
};
|
|
|
|
module.exports.assign = assign;
|
|
|
|
module.exports.isFunction = isFunction;
|
|
|
|
module.exports.isObject = isObject;
|
|
|
|
module.exports.isArray = isArray;
|
|
|
|
module.exports.isEmpty = isEmpty;
|
|
|
|
module.exports.isPlainObject = isPlainObject;
|
|
|
|
module.exports.getValue = getValue;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 585:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "v1", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v3", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v2.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v4", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v3.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "v5", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _v4.default;
|
|
}
|
|
});
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(173));
|
|
|
|
var _v2 = _interopRequireDefault(__webpack_require__(298));
|
|
|
|
var _v3 = _interopRequireDefault(__webpack_require__(606));
|
|
|
|
var _v4 = _interopRequireDefault(__webpack_require__(90));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/***/ }),
|
|
|
|
/***/ 597:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const pathHelper = __webpack_require__(972);
|
|
const internal_match_kind_1 = __webpack_require__(327);
|
|
const 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 = IS_WINDOWS
|
|
? pattern.searchPath.toUpperCase()
|
|
: pattern.searchPath;
|
|
searchPathMap[key] = 'candidate';
|
|
}
|
|
const result = [];
|
|
for (const pattern of patterns) {
|
|
// Check if already included
|
|
const key = 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 = pathHelper.dirname(tempKey);
|
|
while (parent !== tempKey) {
|
|
if (searchPathMap[parent]) {
|
|
foundAncestor = true;
|
|
break;
|
|
}
|
|
tempKey = parent;
|
|
parent = pathHelper.dirname(tempKey);
|
|
}
|
|
// Include the search pattern in the result
|
|
if (!foundAncestor) {
|
|
result.push(pattern.searchPath);
|
|
searchPathMap[key] = 'included';
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
exports.getSearchPaths = getSearchPaths;
|
|
/**
|
|
* Matches the patterns against the path
|
|
*/
|
|
function match(patterns, itemPath) {
|
|
let result = internal_match_kind_1.MatchKind.None;
|
|
for (const pattern of patterns) {
|
|
if (pattern.negate) {
|
|
result &= ~pattern.match(itemPath);
|
|
}
|
|
else {
|
|
result |= pattern.match(itemPath);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
exports.match = match;
|
|
/**
|
|
* Checks whether to descend further into the directory
|
|
*/
|
|
function partialMatch(patterns, itemPath) {
|
|
return patterns.some(x => !x.negate && x.partialMatch(itemPath));
|
|
}
|
|
exports.partialMatch = partialMatch;
|
|
//# sourceMappingURL=internal-pattern-helper.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 601:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __webpack_require__(470);
|
|
/**
|
|
* Returns a copy with defaults filled in.
|
|
*/
|
|
function getOptions(copy) {
|
|
const result = {
|
|
followSymbolicLinks: true,
|
|
implicitDescendants: true,
|
|
omitBrokenSymbolicLinks: true
|
|
};
|
|
if (copy) {
|
|
if (typeof copy.followSymbolicLinks === 'boolean') {
|
|
result.followSymbolicLinks = copy.followSymbolicLinks;
|
|
core.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`);
|
|
}
|
|
if (typeof copy.implicitDescendants === 'boolean') {
|
|
result.implicitDescendants = copy.implicitDescendants;
|
|
core.debug(`implicitDescendants '${result.implicitDescendants}'`);
|
|
}
|
|
if (typeof copy.omitBrokenSymbolicLinks === 'boolean') {
|
|
result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks;
|
|
core.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
exports.getOptions = getOptions;
|
|
//# sourceMappingURL=internal-glob-options-helper.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 602:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLStringifier,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
module.exports = XMLStringifier = (function() {
|
|
function XMLStringifier(options) {
|
|
this.assertLegalName = bind(this.assertLegalName, this);
|
|
this.assertLegalChar = bind(this.assertLegalChar, this);
|
|
var key, ref, value;
|
|
options || (options = {});
|
|
this.options = options;
|
|
if (!this.options.version) {
|
|
this.options.version = '1.0';
|
|
}
|
|
ref = options.stringify || {};
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this[key] = value;
|
|
}
|
|
}
|
|
|
|
XMLStringifier.prototype.name = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalName('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.text = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar(this.textEscape('' + val || ''));
|
|
};
|
|
|
|
XMLStringifier.prototype.cdata = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
val = val.replace(']]>', ']]]]><![CDATA[>');
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.comment = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (val.match(/--/)) {
|
|
throw new Error("Comment text cannot contain double-hypen: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.raw = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return '' + val || '';
|
|
};
|
|
|
|
XMLStringifier.prototype.attValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar(this.attEscape(val = '' + val || ''));
|
|
};
|
|
|
|
XMLStringifier.prototype.insTarget = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.insValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (val.match(/\?>/)) {
|
|
throw new Error("Invalid processing instruction value: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlVersion = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (!val.match(/1\.[0-9]+/)) {
|
|
throw new Error("Invalid version number: " + val);
|
|
}
|
|
return val;
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlEncoding = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
val = '' + val || '';
|
|
if (!val.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/)) {
|
|
throw new Error("Invalid encoding: " + val);
|
|
}
|
|
return this.assertLegalChar(val);
|
|
};
|
|
|
|
XMLStringifier.prototype.xmlStandalone = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
if (val) {
|
|
return "yes";
|
|
} else {
|
|
return "no";
|
|
}
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdPubID = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdSysID = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdElementValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdAttType = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdAttDefault = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdEntityValue = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.dtdNData = function(val) {
|
|
if (this.options.noValidation) {
|
|
return val;
|
|
}
|
|
return this.assertLegalChar('' + val || '');
|
|
};
|
|
|
|
XMLStringifier.prototype.convertAttKey = '@';
|
|
|
|
XMLStringifier.prototype.convertPIKey = '?';
|
|
|
|
XMLStringifier.prototype.convertTextKey = '#text';
|
|
|
|
XMLStringifier.prototype.convertCDataKey = '#cdata';
|
|
|
|
XMLStringifier.prototype.convertCommentKey = '#comment';
|
|
|
|
XMLStringifier.prototype.convertRawKey = '#raw';
|
|
|
|
XMLStringifier.prototype.assertLegalChar = function(str) {
|
|
var regex, res;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
regex = '';
|
|
if (this.options.version === '1.0') {
|
|
regex = /[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|
if (res = str.match(regex)) {
|
|
throw new Error("Invalid character in string: " + str + " at index " + res.index);
|
|
}
|
|
} else if (this.options.version === '1.1') {
|
|
regex = /[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
|
|
if (res = str.match(regex)) {
|
|
throw new Error("Invalid character in string: " + str + " at index " + res.index);
|
|
}
|
|
}
|
|
return str;
|
|
};
|
|
|
|
XMLStringifier.prototype.assertLegalName = function(str) {
|
|
var regex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
this.assertLegalChar(str);
|
|
regex = /^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/;
|
|
if (!str.match(regex)) {
|
|
throw new Error("Invalid character in name");
|
|
}
|
|
return str;
|
|
};
|
|
|
|
XMLStringifier.prototype.textEscape = function(str) {
|
|
var ampregex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\r/g, '
');
|
|
};
|
|
|
|
XMLStringifier.prototype.attEscape = function(str) {
|
|
var ampregex;
|
|
if (this.options.noValidation) {
|
|
return str;
|
|
}
|
|
ampregex = this.options.noDoubleEncoding ? /(?!&\S+;)&/g : /&/g;
|
|
return str.replace(ampregex, '&').replace(/</g, '<').replace(/"/g, '"').replace(/\t/g, '	').replace(/\n/g, '
').replace(/\r/g, '
');
|
|
};
|
|
|
|
return XMLStringifier;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 605:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("http");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 606:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _rng = _interopRequireDefault(__webpack_require__(733));
|
|
|
|
var _bytesToUuid = _interopRequireDefault(__webpack_require__(940));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function v4(options, buf, offset) {
|
|
options = options || {};
|
|
|
|
const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
|
|
|
|
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
|
|
if (buf) {
|
|
offset = offset || 0;
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
buf[offset + i] = rnds[i];
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
return (0, _bytesToUuid.default)(rnds);
|
|
}
|
|
|
|
var _default = v4;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 614:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("events");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 616:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function sha1(bytes) {
|
|
if (Array.isArray(bytes)) {
|
|
bytes = Buffer.from(bytes);
|
|
} else if (typeof bytes === 'string') {
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
}
|
|
|
|
return _crypto.default.createHash('sha1').update(bytes).digest();
|
|
}
|
|
|
|
var _default = sha1;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 621:
|
|
/***/ (function(module) {
|
|
|
|
"use strict";
|
|
|
|
module.exports = balanced;
|
|
function balanced(a, b, str) {
|
|
if (a instanceof RegExp) a = maybeMatch(a, str);
|
|
if (b instanceof RegExp) b = maybeMatch(b, str);
|
|
|
|
var r = range(a, b, str);
|
|
|
|
return r && {
|
|
start: r[0],
|
|
end: r[1],
|
|
pre: str.slice(0, r[0]),
|
|
body: str.slice(r[0] + a.length, r[1]),
|
|
post: str.slice(r[1] + b.length)
|
|
};
|
|
}
|
|
|
|
function maybeMatch(reg, str) {
|
|
var m = str.match(reg);
|
|
return m ? m[0] : null;
|
|
}
|
|
|
|
balanced.range = range;
|
|
function range(a, b, str) {
|
|
var begs, beg, left, right, result;
|
|
var ai = str.indexOf(a);
|
|
var bi = str.indexOf(b, ai + 1);
|
|
var i = ai;
|
|
|
|
if (ai >= 0 && bi > 0) {
|
|
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) {
|
|
result = [ begs.pop(), bi ];
|
|
} else {
|
|
beg = begs.pop();
|
|
if (beg < left) {
|
|
left = beg;
|
|
right = bi;
|
|
}
|
|
|
|
bi = str.indexOf(b, i + 1);
|
|
}
|
|
|
|
i = ai < bi && ai >= 0 ? ai : bi;
|
|
}
|
|
|
|
if (begs.length) {
|
|
result = [ left, right ];
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 622:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("path");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 625:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* NoopMeter is a noop implementation of the {@link Meter} interface. It reuses
|
|
* constant NoopMetrics for all of its methods.
|
|
*/
|
|
class NoopMeter {
|
|
constructor() { }
|
|
/**
|
|
* Returns constant noop measure.
|
|
* @param name the name of the metric.
|
|
* @param [options] the metric options.
|
|
*/
|
|
createMeasure(name, options) {
|
|
return exports.NOOP_MEASURE_METRIC;
|
|
}
|
|
/**
|
|
* Returns a constant noop counter.
|
|
* @param name the name of the metric.
|
|
* @param [options] the metric options.
|
|
*/
|
|
createCounter(name, options) {
|
|
return exports.NOOP_COUNTER_METRIC;
|
|
}
|
|
/**
|
|
* Returns constant noop observer.
|
|
* @param name the name of the metric.
|
|
* @param [options] the metric options.
|
|
*/
|
|
createObserver(name, options) {
|
|
return exports.NOOP_OBSERVER_METRIC;
|
|
}
|
|
}
|
|
exports.NoopMeter = NoopMeter;
|
|
class NoopMetric {
|
|
constructor(instrument) {
|
|
this._instrument = instrument;
|
|
}
|
|
/**
|
|
* Returns a Bound Instrument associated with specified Labels.
|
|
* It is recommended to keep a reference to the Bound Instrument instead of
|
|
* always calling this method for every operations.
|
|
* @param labels key-values pairs that are associated with a specific metric
|
|
* that you want to record.
|
|
*/
|
|
bind(labels) {
|
|
return this._instrument;
|
|
}
|
|
/**
|
|
* Removes the Binding from the metric, if it is present.
|
|
* @param labels key-values pairs that are associated with a specific metric.
|
|
*/
|
|
unbind(labels) {
|
|
return;
|
|
}
|
|
/**
|
|
* Clears all timeseries from the Metric.
|
|
*/
|
|
clear() {
|
|
return;
|
|
}
|
|
}
|
|
exports.NoopMetric = NoopMetric;
|
|
class NoopCounterMetric extends NoopMetric {
|
|
add(value, labels) {
|
|
this.bind(labels).add(value);
|
|
}
|
|
}
|
|
exports.NoopCounterMetric = NoopCounterMetric;
|
|
class NoopMeasureMetric extends NoopMetric {
|
|
record(value, labels, correlationContext, spanContext) {
|
|
if (typeof correlationContext === 'undefined') {
|
|
this.bind(labels).record(value);
|
|
}
|
|
else if (typeof spanContext === 'undefined') {
|
|
this.bind(labels).record(value, correlationContext);
|
|
}
|
|
else {
|
|
this.bind(labels).record(value, correlationContext, spanContext);
|
|
}
|
|
}
|
|
}
|
|
exports.NoopMeasureMetric = NoopMeasureMetric;
|
|
class NoopObserverMetric extends NoopMetric {
|
|
setCallback(callback) { }
|
|
}
|
|
exports.NoopObserverMetric = NoopObserverMetric;
|
|
class NoopBoundCounter {
|
|
add(value) {
|
|
return;
|
|
}
|
|
}
|
|
exports.NoopBoundCounter = NoopBoundCounter;
|
|
class NoopBoundMeasure {
|
|
record(value, correlationContext, spanContext) {
|
|
return;
|
|
}
|
|
}
|
|
exports.NoopBoundMeasure = NoopBoundMeasure;
|
|
class NoopBoundObserver {
|
|
setCallback(callback) { }
|
|
}
|
|
exports.NoopBoundObserver = NoopBoundObserver;
|
|
exports.NOOP_METER = new NoopMeter();
|
|
exports.NOOP_BOUND_COUNTER = new NoopBoundCounter();
|
|
exports.NOOP_COUNTER_METRIC = new NoopCounterMetric(exports.NOOP_BOUND_COUNTER);
|
|
exports.NOOP_BOUND_MEASURE = new NoopBoundMeasure();
|
|
exports.NOOP_MEASURE_METRIC = new NoopMeasureMetric(exports.NOOP_BOUND_MEASURE);
|
|
exports.NOOP_BOUND_OBSERVER = new NoopBoundObserver();
|
|
exports.NOOP_OBSERVER_METRIC = new NoopObserverMetric(exports.NOOP_BOUND_OBSERVER);
|
|
//# sourceMappingURL=NoopMeter.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 631:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("net");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 639:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLCharacterData, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
module.exports = XMLCharacterData = (function(superClass) {
|
|
extend(XMLCharacterData, superClass);
|
|
|
|
function XMLCharacterData(parent) {
|
|
XMLCharacterData.__super__.constructor.call(this, parent);
|
|
this.value = '';
|
|
}
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'data', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'length', {
|
|
get: function() {
|
|
return this.value.length;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLCharacterData.prototype, 'textContent', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
XMLCharacterData.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLCharacterData.prototype.substringData = function(offset, count) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.appendData = function(arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.insertData = function(offset, arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.deleteData = function(offset, count) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.replaceData = function(offset, count, arg) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLCharacterData.prototype.isEqualNode = function(node) {
|
|
if (!XMLCharacterData.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.data !== this.data) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLCharacterData;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 645:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
;(function (sax) { // wrapper for non-node envs
|
|
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
|
|
sax.SAXParser = SAXParser
|
|
sax.SAXStream = SAXStream
|
|
sax.createStream = createStream
|
|
|
|
// When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.
|
|
// When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),
|
|
// since that's the earliest that a buffer overrun could occur. This way, checks are
|
|
// as rare as required, but as often as necessary to ensure never crossing this bound.
|
|
// Furthermore, buffers are only tested at most once per write(), so passing a very
|
|
// large string into write() might have undesirable effects, but this is manageable by
|
|
// the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme
|
|
// edge case, result in creating at most one complete copy of the string passed in.
|
|
// Set to Infinity to have unlimited buffers.
|
|
sax.MAX_BUFFER_LENGTH = 64 * 1024
|
|
|
|
var buffers = [
|
|
'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',
|
|
'procInstName', 'procInstBody', 'entity', 'attribName',
|
|
'attribValue', 'cdata', 'script'
|
|
]
|
|
|
|
sax.EVENTS = [
|
|
'text',
|
|
'processinginstruction',
|
|
'sgmldeclaration',
|
|
'doctype',
|
|
'comment',
|
|
'opentagstart',
|
|
'attribute',
|
|
'opentag',
|
|
'closetag',
|
|
'opencdata',
|
|
'cdata',
|
|
'closecdata',
|
|
'error',
|
|
'end',
|
|
'ready',
|
|
'script',
|
|
'opennamespace',
|
|
'closenamespace'
|
|
]
|
|
|
|
function SAXParser (strict, opt) {
|
|
if (!(this instanceof SAXParser)) {
|
|
return new SAXParser(strict, opt)
|
|
}
|
|
|
|
var parser = this
|
|
clearBuffers(parser)
|
|
parser.q = parser.c = ''
|
|
parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
|
|
parser.opt = opt || {}
|
|
parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags
|
|
parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'
|
|
parser.tags = []
|
|
parser.closed = parser.closedRoot = parser.sawRoot = false
|
|
parser.tag = parser.error = null
|
|
parser.strict = !!strict
|
|
parser.noscript = !!(strict || parser.opt.noscript)
|
|
parser.state = S.BEGIN
|
|
parser.strictEntities = parser.opt.strictEntities
|
|
parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)
|
|
parser.attribList = []
|
|
|
|
// namespaces form a prototype chain.
|
|
// it always points at the current tag,
|
|
// which protos to its parent tag.
|
|
if (parser.opt.xmlns) {
|
|
parser.ns = Object.create(rootNS)
|
|
}
|
|
|
|
// mostly just for error reporting
|
|
parser.trackPosition = parser.opt.position !== false
|
|
if (parser.trackPosition) {
|
|
parser.position = parser.line = parser.column = 0
|
|
}
|
|
emit(parser, 'onready')
|
|
}
|
|
|
|
if (!Object.create) {
|
|
Object.create = function (o) {
|
|
function F () {}
|
|
F.prototype = o
|
|
var newf = new F()
|
|
return newf
|
|
}
|
|
}
|
|
|
|
if (!Object.keys) {
|
|
Object.keys = function (o) {
|
|
var a = []
|
|
for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
|
|
return a
|
|
}
|
|
}
|
|
|
|
function checkBufferLength (parser) {
|
|
var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
|
|
var maxActual = 0
|
|
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
var len = parser[buffers[i]].length
|
|
if (len > maxAllowed) {
|
|
// Text/cdata nodes can get big, and since they're buffered,
|
|
// we can get here under normal conditions.
|
|
// Avoid issues by emitting the text node now,
|
|
// so at least it won't get any bigger.
|
|
switch (buffers[i]) {
|
|
case 'textNode':
|
|
closeText(parser)
|
|
break
|
|
|
|
case 'cdata':
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
parser.cdata = ''
|
|
break
|
|
|
|
case 'script':
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
break
|
|
|
|
default:
|
|
error(parser, 'Max buffer length exceeded: ' + buffers[i])
|
|
}
|
|
}
|
|
maxActual = Math.max(maxActual, len)
|
|
}
|
|
// schedule the next check for the earliest possible buffer overrun.
|
|
var m = sax.MAX_BUFFER_LENGTH - maxActual
|
|
parser.bufferCheckPosition = m + parser.position
|
|
}
|
|
|
|
function clearBuffers (parser) {
|
|
for (var i = 0, l = buffers.length; i < l; i++) {
|
|
parser[buffers[i]] = ''
|
|
}
|
|
}
|
|
|
|
function flushBuffers (parser) {
|
|
closeText(parser)
|
|
if (parser.cdata !== '') {
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
parser.cdata = ''
|
|
}
|
|
if (parser.script !== '') {
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
}
|
|
}
|
|
|
|
SAXParser.prototype = {
|
|
end: function () { end(this) },
|
|
write: write,
|
|
resume: function () { this.error = null; return this },
|
|
close: function () { return this.write(null) },
|
|
flush: function () { flushBuffers(this) }
|
|
}
|
|
|
|
var Stream
|
|
try {
|
|
Stream = __webpack_require__(794).Stream
|
|
} catch (ex) {
|
|
Stream = function () {}
|
|
}
|
|
|
|
var streamWraps = sax.EVENTS.filter(function (ev) {
|
|
return ev !== 'error' && ev !== 'end'
|
|
})
|
|
|
|
function createStream (strict, opt) {
|
|
return new SAXStream(strict, opt)
|
|
}
|
|
|
|
function SAXStream (strict, opt) {
|
|
if (!(this instanceof SAXStream)) {
|
|
return new SAXStream(strict, opt)
|
|
}
|
|
|
|
Stream.apply(this)
|
|
|
|
this._parser = new SAXParser(strict, opt)
|
|
this.writable = true
|
|
this.readable = true
|
|
|
|
var me = this
|
|
|
|
this._parser.onend = function () {
|
|
me.emit('end')
|
|
}
|
|
|
|
this._parser.onerror = function (er) {
|
|
me.emit('error', er)
|
|
|
|
// if didn't throw, then means error was handled.
|
|
// go ahead and clear error, so we can write again.
|
|
me._parser.error = null
|
|
}
|
|
|
|
this._decoder = null
|
|
|
|
streamWraps.forEach(function (ev) {
|
|
Object.defineProperty(me, 'on' + ev, {
|
|
get: function () {
|
|
return me._parser['on' + ev]
|
|
},
|
|
set: function (h) {
|
|
if (!h) {
|
|
me.removeAllListeners(ev)
|
|
me._parser['on' + ev] = h
|
|
return h
|
|
}
|
|
me.on(ev, h)
|
|
},
|
|
enumerable: true,
|
|
configurable: false
|
|
})
|
|
})
|
|
}
|
|
|
|
SAXStream.prototype = Object.create(Stream.prototype, {
|
|
constructor: {
|
|
value: SAXStream
|
|
}
|
|
})
|
|
|
|
SAXStream.prototype.write = function (data) {
|
|
if (typeof Buffer === 'function' &&
|
|
typeof Buffer.isBuffer === 'function' &&
|
|
Buffer.isBuffer(data)) {
|
|
if (!this._decoder) {
|
|
var SD = __webpack_require__(304).StringDecoder
|
|
this._decoder = new SD('utf8')
|
|
}
|
|
data = this._decoder.write(data)
|
|
}
|
|
|
|
this._parser.write(data.toString())
|
|
this.emit('data', data)
|
|
return true
|
|
}
|
|
|
|
SAXStream.prototype.end = function (chunk) {
|
|
if (chunk && chunk.length) {
|
|
this.write(chunk)
|
|
}
|
|
this._parser.end()
|
|
return true
|
|
}
|
|
|
|
SAXStream.prototype.on = function (ev, handler) {
|
|
var me = this
|
|
if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {
|
|
me._parser['on' + ev] = function () {
|
|
var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)
|
|
args.splice(0, 0, ev)
|
|
me.emit.apply(me, args)
|
|
}
|
|
}
|
|
|
|
return Stream.prototype.on.call(me, ev, handler)
|
|
}
|
|
|
|
// this really needs to be replaced with character classes.
|
|
// XML allows all manner of ridiculous numbers and digits.
|
|
var CDATA = '[CDATA['
|
|
var DOCTYPE = 'DOCTYPE'
|
|
var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
|
|
var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'
|
|
var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
|
|
|
|
// http://www.w3.org/TR/REC-xml/#NT-NameStartChar
|
|
// This implementation works on strings, a single character at a time
|
|
// as such, it cannot ever support astral-plane characters (10000-EFFFF)
|
|
// without a significant breaking change to either this parser, or the
|
|
// JavaScript language. Implementation of an emoji-capable xml parser
|
|
// is left as an exercise for the reader.
|
|
var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
|
|
|
|
var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
|
|
|
|
var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
|
|
var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
|
|
|
|
function isWhitespace (c) {
|
|
return c === ' ' || c === '\n' || c === '\r' || c === '\t'
|
|
}
|
|
|
|
function isQuote (c) {
|
|
return c === '"' || c === '\''
|
|
}
|
|
|
|
function isAttribEnd (c) {
|
|
return c === '>' || isWhitespace(c)
|
|
}
|
|
|
|
function isMatch (regex, c) {
|
|
return regex.test(c)
|
|
}
|
|
|
|
function notMatch (regex, c) {
|
|
return !isMatch(regex, c)
|
|
}
|
|
|
|
var S = 0
|
|
sax.STATE = {
|
|
BEGIN: S++, // leading byte order mark or whitespace
|
|
BEGIN_WHITESPACE: S++, // leading whitespace
|
|
TEXT: S++, // general stuff
|
|
TEXT_ENTITY: S++, // & and such.
|
|
OPEN_WAKA: S++, // <
|
|
SGML_DECL: S++, // <!BLARG
|
|
SGML_DECL_QUOTED: S++, // <!BLARG foo "bar
|
|
DOCTYPE: S++, // <!DOCTYPE
|
|
DOCTYPE_QUOTED: S++, // <!DOCTYPE "//blah
|
|
DOCTYPE_DTD: S++, // <!DOCTYPE "//blah" [ ...
|
|
DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE "//blah" [ "foo
|
|
COMMENT_STARTING: S++, // <!-
|
|
COMMENT: S++, // <!--
|
|
COMMENT_ENDING: S++, // <!-- blah -
|
|
COMMENT_ENDED: S++, // <!-- blah --
|
|
CDATA: S++, // <![CDATA[ something
|
|
CDATA_ENDING: S++, // ]
|
|
CDATA_ENDING_2: S++, // ]]
|
|
PROC_INST: S++, // <?hi
|
|
PROC_INST_BODY: S++, // <?hi there
|
|
PROC_INST_ENDING: S++, // <?hi "there" ?
|
|
OPEN_TAG: S++, // <strong
|
|
OPEN_TAG_SLASH: S++, // <strong /
|
|
ATTRIB: S++, // <a
|
|
ATTRIB_NAME: S++, // <a foo
|
|
ATTRIB_NAME_SAW_WHITE: S++, // <a foo _
|
|
ATTRIB_VALUE: S++, // <a foo=
|
|
ATTRIB_VALUE_QUOTED: S++, // <a foo="bar
|
|
ATTRIB_VALUE_CLOSED: S++, // <a foo="bar"
|
|
ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar
|
|
ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar="""
|
|
ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="
|
|
CLOSE_TAG: S++, // </a
|
|
CLOSE_TAG_SAW_WHITE: S++, // </a >
|
|
SCRIPT: S++, // <script> ...
|
|
SCRIPT_ENDING: S++ // <script> ... <
|
|
}
|
|
|
|
sax.XML_ENTITIES = {
|
|
'amp': '&',
|
|
'gt': '>',
|
|
'lt': '<',
|
|
'quot': '"',
|
|
'apos': "'"
|
|
}
|
|
|
|
sax.ENTITIES = {
|
|
'amp': '&',
|
|
'gt': '>',
|
|
'lt': '<',
|
|
'quot': '"',
|
|
'apos': "'",
|
|
'AElig': 198,
|
|
'Aacute': 193,
|
|
'Acirc': 194,
|
|
'Agrave': 192,
|
|
'Aring': 197,
|
|
'Atilde': 195,
|
|
'Auml': 196,
|
|
'Ccedil': 199,
|
|
'ETH': 208,
|
|
'Eacute': 201,
|
|
'Ecirc': 202,
|
|
'Egrave': 200,
|
|
'Euml': 203,
|
|
'Iacute': 205,
|
|
'Icirc': 206,
|
|
'Igrave': 204,
|
|
'Iuml': 207,
|
|
'Ntilde': 209,
|
|
'Oacute': 211,
|
|
'Ocirc': 212,
|
|
'Ograve': 210,
|
|
'Oslash': 216,
|
|
'Otilde': 213,
|
|
'Ouml': 214,
|
|
'THORN': 222,
|
|
'Uacute': 218,
|
|
'Ucirc': 219,
|
|
'Ugrave': 217,
|
|
'Uuml': 220,
|
|
'Yacute': 221,
|
|
'aacute': 225,
|
|
'acirc': 226,
|
|
'aelig': 230,
|
|
'agrave': 224,
|
|
'aring': 229,
|
|
'atilde': 227,
|
|
'auml': 228,
|
|
'ccedil': 231,
|
|
'eacute': 233,
|
|
'ecirc': 234,
|
|
'egrave': 232,
|
|
'eth': 240,
|
|
'euml': 235,
|
|
'iacute': 237,
|
|
'icirc': 238,
|
|
'igrave': 236,
|
|
'iuml': 239,
|
|
'ntilde': 241,
|
|
'oacute': 243,
|
|
'ocirc': 244,
|
|
'ograve': 242,
|
|
'oslash': 248,
|
|
'otilde': 245,
|
|
'ouml': 246,
|
|
'szlig': 223,
|
|
'thorn': 254,
|
|
'uacute': 250,
|
|
'ucirc': 251,
|
|
'ugrave': 249,
|
|
'uuml': 252,
|
|
'yacute': 253,
|
|
'yuml': 255,
|
|
'copy': 169,
|
|
'reg': 174,
|
|
'nbsp': 160,
|
|
'iexcl': 161,
|
|
'cent': 162,
|
|
'pound': 163,
|
|
'curren': 164,
|
|
'yen': 165,
|
|
'brvbar': 166,
|
|
'sect': 167,
|
|
'uml': 168,
|
|
'ordf': 170,
|
|
'laquo': 171,
|
|
'not': 172,
|
|
'shy': 173,
|
|
'macr': 175,
|
|
'deg': 176,
|
|
'plusmn': 177,
|
|
'sup1': 185,
|
|
'sup2': 178,
|
|
'sup3': 179,
|
|
'acute': 180,
|
|
'micro': 181,
|
|
'para': 182,
|
|
'middot': 183,
|
|
'cedil': 184,
|
|
'ordm': 186,
|
|
'raquo': 187,
|
|
'frac14': 188,
|
|
'frac12': 189,
|
|
'frac34': 190,
|
|
'iquest': 191,
|
|
'times': 215,
|
|
'divide': 247,
|
|
'OElig': 338,
|
|
'oelig': 339,
|
|
'Scaron': 352,
|
|
'scaron': 353,
|
|
'Yuml': 376,
|
|
'fnof': 402,
|
|
'circ': 710,
|
|
'tilde': 732,
|
|
'Alpha': 913,
|
|
'Beta': 914,
|
|
'Gamma': 915,
|
|
'Delta': 916,
|
|
'Epsilon': 917,
|
|
'Zeta': 918,
|
|
'Eta': 919,
|
|
'Theta': 920,
|
|
'Iota': 921,
|
|
'Kappa': 922,
|
|
'Lambda': 923,
|
|
'Mu': 924,
|
|
'Nu': 925,
|
|
'Xi': 926,
|
|
'Omicron': 927,
|
|
'Pi': 928,
|
|
'Rho': 929,
|
|
'Sigma': 931,
|
|
'Tau': 932,
|
|
'Upsilon': 933,
|
|
'Phi': 934,
|
|
'Chi': 935,
|
|
'Psi': 936,
|
|
'Omega': 937,
|
|
'alpha': 945,
|
|
'beta': 946,
|
|
'gamma': 947,
|
|
'delta': 948,
|
|
'epsilon': 949,
|
|
'zeta': 950,
|
|
'eta': 951,
|
|
'theta': 952,
|
|
'iota': 953,
|
|
'kappa': 954,
|
|
'lambda': 955,
|
|
'mu': 956,
|
|
'nu': 957,
|
|
'xi': 958,
|
|
'omicron': 959,
|
|
'pi': 960,
|
|
'rho': 961,
|
|
'sigmaf': 962,
|
|
'sigma': 963,
|
|
'tau': 964,
|
|
'upsilon': 965,
|
|
'phi': 966,
|
|
'chi': 967,
|
|
'psi': 968,
|
|
'omega': 969,
|
|
'thetasym': 977,
|
|
'upsih': 978,
|
|
'piv': 982,
|
|
'ensp': 8194,
|
|
'emsp': 8195,
|
|
'thinsp': 8201,
|
|
'zwnj': 8204,
|
|
'zwj': 8205,
|
|
'lrm': 8206,
|
|
'rlm': 8207,
|
|
'ndash': 8211,
|
|
'mdash': 8212,
|
|
'lsquo': 8216,
|
|
'rsquo': 8217,
|
|
'sbquo': 8218,
|
|
'ldquo': 8220,
|
|
'rdquo': 8221,
|
|
'bdquo': 8222,
|
|
'dagger': 8224,
|
|
'Dagger': 8225,
|
|
'bull': 8226,
|
|
'hellip': 8230,
|
|
'permil': 8240,
|
|
'prime': 8242,
|
|
'Prime': 8243,
|
|
'lsaquo': 8249,
|
|
'rsaquo': 8250,
|
|
'oline': 8254,
|
|
'frasl': 8260,
|
|
'euro': 8364,
|
|
'image': 8465,
|
|
'weierp': 8472,
|
|
'real': 8476,
|
|
'trade': 8482,
|
|
'alefsym': 8501,
|
|
'larr': 8592,
|
|
'uarr': 8593,
|
|
'rarr': 8594,
|
|
'darr': 8595,
|
|
'harr': 8596,
|
|
'crarr': 8629,
|
|
'lArr': 8656,
|
|
'uArr': 8657,
|
|
'rArr': 8658,
|
|
'dArr': 8659,
|
|
'hArr': 8660,
|
|
'forall': 8704,
|
|
'part': 8706,
|
|
'exist': 8707,
|
|
'empty': 8709,
|
|
'nabla': 8711,
|
|
'isin': 8712,
|
|
'notin': 8713,
|
|
'ni': 8715,
|
|
'prod': 8719,
|
|
'sum': 8721,
|
|
'minus': 8722,
|
|
'lowast': 8727,
|
|
'radic': 8730,
|
|
'prop': 8733,
|
|
'infin': 8734,
|
|
'ang': 8736,
|
|
'and': 8743,
|
|
'or': 8744,
|
|
'cap': 8745,
|
|
'cup': 8746,
|
|
'int': 8747,
|
|
'there4': 8756,
|
|
'sim': 8764,
|
|
'cong': 8773,
|
|
'asymp': 8776,
|
|
'ne': 8800,
|
|
'equiv': 8801,
|
|
'le': 8804,
|
|
'ge': 8805,
|
|
'sub': 8834,
|
|
'sup': 8835,
|
|
'nsub': 8836,
|
|
'sube': 8838,
|
|
'supe': 8839,
|
|
'oplus': 8853,
|
|
'otimes': 8855,
|
|
'perp': 8869,
|
|
'sdot': 8901,
|
|
'lceil': 8968,
|
|
'rceil': 8969,
|
|
'lfloor': 8970,
|
|
'rfloor': 8971,
|
|
'lang': 9001,
|
|
'rang': 9002,
|
|
'loz': 9674,
|
|
'spades': 9824,
|
|
'clubs': 9827,
|
|
'hearts': 9829,
|
|
'diams': 9830
|
|
}
|
|
|
|
Object.keys(sax.ENTITIES).forEach(function (key) {
|
|
var e = sax.ENTITIES[key]
|
|
var s = typeof e === 'number' ? String.fromCharCode(e) : e
|
|
sax.ENTITIES[key] = s
|
|
})
|
|
|
|
for (var s in sax.STATE) {
|
|
sax.STATE[sax.STATE[s]] = s
|
|
}
|
|
|
|
// shorthand
|
|
S = sax.STATE
|
|
|
|
function emit (parser, event, data) {
|
|
parser[event] && parser[event](data)
|
|
}
|
|
|
|
function emitNode (parser, nodeType, data) {
|
|
if (parser.textNode) closeText(parser)
|
|
emit(parser, nodeType, data)
|
|
}
|
|
|
|
function closeText (parser) {
|
|
parser.textNode = textopts(parser.opt, parser.textNode)
|
|
if (parser.textNode) emit(parser, 'ontext', parser.textNode)
|
|
parser.textNode = ''
|
|
}
|
|
|
|
function textopts (opt, text) {
|
|
if (opt.trim) text = text.trim()
|
|
if (opt.normalize) text = text.replace(/\s+/g, ' ')
|
|
return text
|
|
}
|
|
|
|
function error (parser, er) {
|
|
closeText(parser)
|
|
if (parser.trackPosition) {
|
|
er += '\nLine: ' + parser.line +
|
|
'\nColumn: ' + parser.column +
|
|
'\nChar: ' + parser.c
|
|
}
|
|
er = new Error(er)
|
|
parser.error = er
|
|
emit(parser, 'onerror', er)
|
|
return parser
|
|
}
|
|
|
|
function end (parser) {
|
|
if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')
|
|
if ((parser.state !== S.BEGIN) &&
|
|
(parser.state !== S.BEGIN_WHITESPACE) &&
|
|
(parser.state !== S.TEXT)) {
|
|
error(parser, 'Unexpected end')
|
|
}
|
|
closeText(parser)
|
|
parser.c = ''
|
|
parser.closed = true
|
|
emit(parser, 'onend')
|
|
SAXParser.call(parser, parser.strict, parser.opt)
|
|
return parser
|
|
}
|
|
|
|
function strictFail (parser, message) {
|
|
if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {
|
|
throw new Error('bad call to strictFail')
|
|
}
|
|
if (parser.strict) {
|
|
error(parser, message)
|
|
}
|
|
}
|
|
|
|
function newTag (parser) {
|
|
if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
var tag = parser.tag = { name: parser.tagName, attributes: {} }
|
|
|
|
// will be overridden if tag contails an xmlns="foo" or xmlns:foo="bar"
|
|
if (parser.opt.xmlns) {
|
|
tag.ns = parent.ns
|
|
}
|
|
parser.attribList.length = 0
|
|
emitNode(parser, 'onopentagstart', tag)
|
|
}
|
|
|
|
function qname (name, attribute) {
|
|
var i = name.indexOf(':')
|
|
var qualName = i < 0 ? [ '', name ] : name.split(':')
|
|
var prefix = qualName[0]
|
|
var local = qualName[1]
|
|
|
|
// <x "xmlns"="http://foo">
|
|
if (attribute && name === 'xmlns') {
|
|
prefix = 'xmlns'
|
|
local = ''
|
|
}
|
|
|
|
return { prefix: prefix, local: local }
|
|
}
|
|
|
|
function attrib (parser) {
|
|
if (!parser.strict) {
|
|
parser.attribName = parser.attribName[parser.looseCase]()
|
|
}
|
|
|
|
if (parser.attribList.indexOf(parser.attribName) !== -1 ||
|
|
parser.tag.attributes.hasOwnProperty(parser.attribName)) {
|
|
parser.attribName = parser.attribValue = ''
|
|
return
|
|
}
|
|
|
|
if (parser.opt.xmlns) {
|
|
var qn = qname(parser.attribName, true)
|
|
var prefix = qn.prefix
|
|
var local = qn.local
|
|
|
|
if (prefix === 'xmlns') {
|
|
// namespace binding attribute. push the binding into scope
|
|
if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {
|
|
strictFail(parser,
|
|
'xml: prefix must be bound to ' + XML_NAMESPACE + '\n' +
|
|
'Actual: ' + parser.attribValue)
|
|
} else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {
|
|
strictFail(parser,
|
|
'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\n' +
|
|
'Actual: ' + parser.attribValue)
|
|
} else {
|
|
var tag = parser.tag
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (tag.ns === parent.ns) {
|
|
tag.ns = Object.create(parent.ns)
|
|
}
|
|
tag.ns[local] = parser.attribValue
|
|
}
|
|
}
|
|
|
|
// defer onattribute events until all attributes have been seen
|
|
// so any new bindings can take effect. preserve attribute order
|
|
// so deferred events can be emitted in document order
|
|
parser.attribList.push([parser.attribName, parser.attribValue])
|
|
} else {
|
|
// in non-xmlns mode, we can emit the event right away
|
|
parser.tag.attributes[parser.attribName] = parser.attribValue
|
|
emitNode(parser, 'onattribute', {
|
|
name: parser.attribName,
|
|
value: parser.attribValue
|
|
})
|
|
}
|
|
|
|
parser.attribName = parser.attribValue = ''
|
|
}
|
|
|
|
function openTag (parser, selfClosing) {
|
|
if (parser.opt.xmlns) {
|
|
// emit namespace binding events
|
|
var tag = parser.tag
|
|
|
|
// add namespace info to tag
|
|
var qn = qname(parser.tagName)
|
|
tag.prefix = qn.prefix
|
|
tag.local = qn.local
|
|
tag.uri = tag.ns[qn.prefix] || ''
|
|
|
|
if (tag.prefix && !tag.uri) {
|
|
strictFail(parser, 'Unbound namespace prefix: ' +
|
|
JSON.stringify(parser.tagName))
|
|
tag.uri = qn.prefix
|
|
}
|
|
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (tag.ns && parent.ns !== tag.ns) {
|
|
Object.keys(tag.ns).forEach(function (p) {
|
|
emitNode(parser, 'onopennamespace', {
|
|
prefix: p,
|
|
uri: tag.ns[p]
|
|
})
|
|
})
|
|
}
|
|
|
|
// handle deferred onattribute events
|
|
// Note: do not apply default ns to attributes:
|
|
// http://www.w3.org/TR/REC-xml-names/#defaulting
|
|
for (var i = 0, l = parser.attribList.length; i < l; i++) {
|
|
var nv = parser.attribList[i]
|
|
var name = nv[0]
|
|
var value = nv[1]
|
|
var qualName = qname(name, true)
|
|
var prefix = qualName.prefix
|
|
var local = qualName.local
|
|
var uri = prefix === '' ? '' : (tag.ns[prefix] || '')
|
|
var a = {
|
|
name: name,
|
|
value: value,
|
|
prefix: prefix,
|
|
local: local,
|
|
uri: uri
|
|
}
|
|
|
|
// if there's any attributes with an undefined namespace,
|
|
// then fail on them now.
|
|
if (prefix && prefix !== 'xmlns' && !uri) {
|
|
strictFail(parser, 'Unbound namespace prefix: ' +
|
|
JSON.stringify(prefix))
|
|
a.uri = prefix
|
|
}
|
|
parser.tag.attributes[name] = a
|
|
emitNode(parser, 'onattribute', a)
|
|
}
|
|
parser.attribList.length = 0
|
|
}
|
|
|
|
parser.tag.isSelfClosing = !!selfClosing
|
|
|
|
// process the tag
|
|
parser.sawRoot = true
|
|
parser.tags.push(parser.tag)
|
|
emitNode(parser, 'onopentag', parser.tag)
|
|
if (!selfClosing) {
|
|
// special case for <script> in non-strict mode.
|
|
if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
parser.state = S.TEXT
|
|
}
|
|
parser.tag = null
|
|
parser.tagName = ''
|
|
}
|
|
parser.attribName = parser.attribValue = ''
|
|
parser.attribList.length = 0
|
|
}
|
|
|
|
function closeTag (parser) {
|
|
if (!parser.tagName) {
|
|
strictFail(parser, 'Weird empty close tag.')
|
|
parser.textNode += '</>'
|
|
parser.state = S.TEXT
|
|
return
|
|
}
|
|
|
|
if (parser.script) {
|
|
if (parser.tagName !== 'script') {
|
|
parser.script += '</' + parser.tagName + '>'
|
|
parser.tagName = ''
|
|
parser.state = S.SCRIPT
|
|
return
|
|
}
|
|
emitNode(parser, 'onscript', parser.script)
|
|
parser.script = ''
|
|
}
|
|
|
|
// first make sure that the closing tag actually exists.
|
|
// <a><b></c></b></a> will close everything, otherwise.
|
|
var t = parser.tags.length
|
|
var tagName = parser.tagName
|
|
if (!parser.strict) {
|
|
tagName = tagName[parser.looseCase]()
|
|
}
|
|
var closeTo = tagName
|
|
while (t--) {
|
|
var close = parser.tags[t]
|
|
if (close.name !== closeTo) {
|
|
// fail the first time in strict mode
|
|
strictFail(parser, 'Unexpected close tag')
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
// didn't find it. we already failed for strict, so just abort.
|
|
if (t < 0) {
|
|
strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)
|
|
parser.textNode += '</' + parser.tagName + '>'
|
|
parser.state = S.TEXT
|
|
return
|
|
}
|
|
parser.tagName = tagName
|
|
var s = parser.tags.length
|
|
while (s-- > t) {
|
|
var tag = parser.tag = parser.tags.pop()
|
|
parser.tagName = parser.tag.name
|
|
emitNode(parser, 'onclosetag', parser.tagName)
|
|
|
|
var x = {}
|
|
for (var i in tag.ns) {
|
|
x[i] = tag.ns[i]
|
|
}
|
|
|
|
var parent = parser.tags[parser.tags.length - 1] || parser
|
|
if (parser.opt.xmlns && tag.ns !== parent.ns) {
|
|
// remove namespace bindings introduced by tag
|
|
Object.keys(tag.ns).forEach(function (p) {
|
|
var n = tag.ns[p]
|
|
emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })
|
|
})
|
|
}
|
|
}
|
|
if (t === 0) parser.closedRoot = true
|
|
parser.tagName = parser.attribValue = parser.attribName = ''
|
|
parser.attribList.length = 0
|
|
parser.state = S.TEXT
|
|
}
|
|
|
|
function parseEntity (parser) {
|
|
var entity = parser.entity
|
|
var entityLC = entity.toLowerCase()
|
|
var num
|
|
var numStr = ''
|
|
|
|
if (parser.ENTITIES[entity]) {
|
|
return parser.ENTITIES[entity]
|
|
}
|
|
if (parser.ENTITIES[entityLC]) {
|
|
return parser.ENTITIES[entityLC]
|
|
}
|
|
entity = entityLC
|
|
if (entity.charAt(0) === '#') {
|
|
if (entity.charAt(1) === 'x') {
|
|
entity = entity.slice(2)
|
|
num = parseInt(entity, 16)
|
|
numStr = num.toString(16)
|
|
} else {
|
|
entity = entity.slice(1)
|
|
num = parseInt(entity, 10)
|
|
numStr = num.toString(10)
|
|
}
|
|
}
|
|
entity = entity.replace(/^0+/, '')
|
|
if (isNaN(num) || numStr.toLowerCase() !== entity) {
|
|
strictFail(parser, 'Invalid character entity')
|
|
return '&' + parser.entity + ';'
|
|
}
|
|
|
|
return String.fromCodePoint(num)
|
|
}
|
|
|
|
function beginWhiteSpace (parser, c) {
|
|
if (c === '<') {
|
|
parser.state = S.OPEN_WAKA
|
|
parser.startTagPosition = parser.position
|
|
} else if (!isWhitespace(c)) {
|
|
// have to process this as a text node.
|
|
// weird, but happens.
|
|
strictFail(parser, 'Non-whitespace before first tag.')
|
|
parser.textNode = c
|
|
parser.state = S.TEXT
|
|
}
|
|
}
|
|
|
|
function charAt (chunk, i) {
|
|
var result = ''
|
|
if (i < chunk.length) {
|
|
result = chunk.charAt(i)
|
|
}
|
|
return result
|
|
}
|
|
|
|
function write (chunk) {
|
|
var parser = this
|
|
if (this.error) {
|
|
throw this.error
|
|
}
|
|
if (parser.closed) {
|
|
return error(parser,
|
|
'Cannot write after close. Assign an onready handler.')
|
|
}
|
|
if (chunk === null) {
|
|
return end(parser)
|
|
}
|
|
if (typeof chunk === 'object') {
|
|
chunk = chunk.toString()
|
|
}
|
|
var i = 0
|
|
var c = ''
|
|
while (true) {
|
|
c = charAt(chunk, i++)
|
|
parser.c = c
|
|
|
|
if (!c) {
|
|
break
|
|
}
|
|
|
|
if (parser.trackPosition) {
|
|
parser.position++
|
|
if (c === '\n') {
|
|
parser.line++
|
|
parser.column = 0
|
|
} else {
|
|
parser.column++
|
|
}
|
|
}
|
|
|
|
switch (parser.state) {
|
|
case S.BEGIN:
|
|
parser.state = S.BEGIN_WHITESPACE
|
|
if (c === '\uFEFF') {
|
|
continue
|
|
}
|
|
beginWhiteSpace(parser, c)
|
|
continue
|
|
|
|
case S.BEGIN_WHITESPACE:
|
|
beginWhiteSpace(parser, c)
|
|
continue
|
|
|
|
case S.TEXT:
|
|
if (parser.sawRoot && !parser.closedRoot) {
|
|
var starti = i - 1
|
|
while (c && c !== '<' && c !== '&') {
|
|
c = charAt(chunk, i++)
|
|
if (c && parser.trackPosition) {
|
|
parser.position++
|
|
if (c === '\n') {
|
|
parser.line++
|
|
parser.column = 0
|
|
} else {
|
|
parser.column++
|
|
}
|
|
}
|
|
}
|
|
parser.textNode += chunk.substring(starti, i - 1)
|
|
}
|
|
if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
|
|
parser.state = S.OPEN_WAKA
|
|
parser.startTagPosition = parser.position
|
|
} else {
|
|
if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {
|
|
strictFail(parser, 'Text data outside of root node.')
|
|
}
|
|
if (c === '&') {
|
|
parser.state = S.TEXT_ENTITY
|
|
} else {
|
|
parser.textNode += c
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.SCRIPT:
|
|
// only non-strict
|
|
if (c === '<') {
|
|
parser.state = S.SCRIPT_ENDING
|
|
} else {
|
|
parser.script += c
|
|
}
|
|
continue
|
|
|
|
case S.SCRIPT_ENDING:
|
|
if (c === '/') {
|
|
parser.state = S.CLOSE_TAG
|
|
} else {
|
|
parser.script += '<' + c
|
|
parser.state = S.SCRIPT
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_WAKA:
|
|
// either a /, ?, !, or text is coming next.
|
|
if (c === '!') {
|
|
parser.state = S.SGML_DECL
|
|
parser.sgmlDecl = ''
|
|
} else if (isWhitespace(c)) {
|
|
// wait for it...
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.state = S.OPEN_TAG
|
|
parser.tagName = c
|
|
} else if (c === '/') {
|
|
parser.state = S.CLOSE_TAG
|
|
parser.tagName = ''
|
|
} else if (c === '?') {
|
|
parser.state = S.PROC_INST
|
|
parser.procInstName = parser.procInstBody = ''
|
|
} else {
|
|
strictFail(parser, 'Unencoded <')
|
|
// if there was some whitespace, then add that in.
|
|
if (parser.startTagPosition + 1 < parser.position) {
|
|
var pad = parser.position - parser.startTagPosition
|
|
c = new Array(pad).join(' ') + c
|
|
}
|
|
parser.textNode += '<' + c
|
|
parser.state = S.TEXT
|
|
}
|
|
continue
|
|
|
|
case S.SGML_DECL:
|
|
if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {
|
|
emitNode(parser, 'onopencdata')
|
|
parser.state = S.CDATA
|
|
parser.sgmlDecl = ''
|
|
parser.cdata = ''
|
|
} else if (parser.sgmlDecl + c === '--') {
|
|
parser.state = S.COMMENT
|
|
parser.comment = ''
|
|
parser.sgmlDecl = ''
|
|
} else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {
|
|
parser.state = S.DOCTYPE
|
|
if (parser.doctype || parser.sawRoot) {
|
|
strictFail(parser,
|
|
'Inappropriately located doctype declaration')
|
|
}
|
|
parser.doctype = ''
|
|
parser.sgmlDecl = ''
|
|
} else if (c === '>') {
|
|
emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)
|
|
parser.sgmlDecl = ''
|
|
parser.state = S.TEXT
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.SGML_DECL_QUOTED
|
|
parser.sgmlDecl += c
|
|
} else {
|
|
parser.sgmlDecl += c
|
|
}
|
|
continue
|
|
|
|
case S.SGML_DECL_QUOTED:
|
|
if (c === parser.q) {
|
|
parser.state = S.SGML_DECL
|
|
parser.q = ''
|
|
}
|
|
parser.sgmlDecl += c
|
|
continue
|
|
|
|
case S.DOCTYPE:
|
|
if (c === '>') {
|
|
parser.state = S.TEXT
|
|
emitNode(parser, 'ondoctype', parser.doctype)
|
|
parser.doctype = true // just remember that we saw it.
|
|
} else {
|
|
parser.doctype += c
|
|
if (c === '[') {
|
|
parser.state = S.DOCTYPE_DTD
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.DOCTYPE_QUOTED
|
|
parser.q = c
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_QUOTED:
|
|
parser.doctype += c
|
|
if (c === parser.q) {
|
|
parser.q = ''
|
|
parser.state = S.DOCTYPE
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_DTD:
|
|
parser.doctype += c
|
|
if (c === ']') {
|
|
parser.state = S.DOCTYPE
|
|
} else if (isQuote(c)) {
|
|
parser.state = S.DOCTYPE_DTD_QUOTED
|
|
parser.q = c
|
|
}
|
|
continue
|
|
|
|
case S.DOCTYPE_DTD_QUOTED:
|
|
parser.doctype += c
|
|
if (c === parser.q) {
|
|
parser.state = S.DOCTYPE_DTD
|
|
parser.q = ''
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT:
|
|
if (c === '-') {
|
|
parser.state = S.COMMENT_ENDING
|
|
} else {
|
|
parser.comment += c
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT_ENDING:
|
|
if (c === '-') {
|
|
parser.state = S.COMMENT_ENDED
|
|
parser.comment = textopts(parser.opt, parser.comment)
|
|
if (parser.comment) {
|
|
emitNode(parser, 'oncomment', parser.comment)
|
|
}
|
|
parser.comment = ''
|
|
} else {
|
|
parser.comment += '-' + c
|
|
parser.state = S.COMMENT
|
|
}
|
|
continue
|
|
|
|
case S.COMMENT_ENDED:
|
|
if (c !== '>') {
|
|
strictFail(parser, 'Malformed comment')
|
|
// allow <!-- blah -- bloo --> in non-strict mode,
|
|
// which is a comment of " blah -- bloo "
|
|
parser.comment += '--' + c
|
|
parser.state = S.COMMENT
|
|
} else {
|
|
parser.state = S.TEXT
|
|
}
|
|
continue
|
|
|
|
case S.CDATA:
|
|
if (c === ']') {
|
|
parser.state = S.CDATA_ENDING
|
|
} else {
|
|
parser.cdata += c
|
|
}
|
|
continue
|
|
|
|
case S.CDATA_ENDING:
|
|
if (c === ']') {
|
|
parser.state = S.CDATA_ENDING_2
|
|
} else {
|
|
parser.cdata += ']' + c
|
|
parser.state = S.CDATA
|
|
}
|
|
continue
|
|
|
|
case S.CDATA_ENDING_2:
|
|
if (c === '>') {
|
|
if (parser.cdata) {
|
|
emitNode(parser, 'oncdata', parser.cdata)
|
|
}
|
|
emitNode(parser, 'onclosecdata')
|
|
parser.cdata = ''
|
|
parser.state = S.TEXT
|
|
} else if (c === ']') {
|
|
parser.cdata += ']'
|
|
} else {
|
|
parser.cdata += ']]' + c
|
|
parser.state = S.CDATA
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST:
|
|
if (c === '?') {
|
|
parser.state = S.PROC_INST_ENDING
|
|
} else if (isWhitespace(c)) {
|
|
parser.state = S.PROC_INST_BODY
|
|
} else {
|
|
parser.procInstName += c
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST_BODY:
|
|
if (!parser.procInstBody && isWhitespace(c)) {
|
|
continue
|
|
} else if (c === '?') {
|
|
parser.state = S.PROC_INST_ENDING
|
|
} else {
|
|
parser.procInstBody += c
|
|
}
|
|
continue
|
|
|
|
case S.PROC_INST_ENDING:
|
|
if (c === '>') {
|
|
emitNode(parser, 'onprocessinginstruction', {
|
|
name: parser.procInstName,
|
|
body: parser.procInstBody
|
|
})
|
|
parser.procInstName = parser.procInstBody = ''
|
|
parser.state = S.TEXT
|
|
} else {
|
|
parser.procInstBody += '?' + c
|
|
parser.state = S.PROC_INST_BODY
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_TAG:
|
|
if (isMatch(nameBody, c)) {
|
|
parser.tagName += c
|
|
} else {
|
|
newTag(parser)
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else {
|
|
if (!isWhitespace(c)) {
|
|
strictFail(parser, 'Invalid character in tag name')
|
|
}
|
|
parser.state = S.ATTRIB
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.OPEN_TAG_SLASH:
|
|
if (c === '>') {
|
|
openTag(parser, true)
|
|
closeTag(parser)
|
|
} else {
|
|
strictFail(parser, 'Forward-slash in opening tag not followed by >')
|
|
parser.state = S.ATTRIB
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB:
|
|
// haven't read the attribute name yet.
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.attribName = c
|
|
parser.attribValue = ''
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_NAME:
|
|
if (c === '=') {
|
|
parser.state = S.ATTRIB_VALUE
|
|
} else if (c === '>') {
|
|
strictFail(parser, 'Attribute without value')
|
|
parser.attribValue = parser.attribName
|
|
attrib(parser)
|
|
openTag(parser)
|
|
} else if (isWhitespace(c)) {
|
|
parser.state = S.ATTRIB_NAME_SAW_WHITE
|
|
} else if (isMatch(nameBody, c)) {
|
|
parser.attribName += c
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_NAME_SAW_WHITE:
|
|
if (c === '=') {
|
|
parser.state = S.ATTRIB_VALUE
|
|
} else if (isWhitespace(c)) {
|
|
continue
|
|
} else {
|
|
strictFail(parser, 'Attribute without value')
|
|
parser.tag.attributes[parser.attribName] = ''
|
|
parser.attribValue = ''
|
|
emitNode(parser, 'onattribute', {
|
|
name: parser.attribName,
|
|
value: ''
|
|
})
|
|
parser.attribName = ''
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else if (isMatch(nameStart, c)) {
|
|
parser.attribName = c
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
parser.state = S.ATTRIB
|
|
}
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE:
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (isQuote(c)) {
|
|
parser.q = c
|
|
parser.state = S.ATTRIB_VALUE_QUOTED
|
|
} else {
|
|
strictFail(parser, 'Unquoted attribute value')
|
|
parser.state = S.ATTRIB_VALUE_UNQUOTED
|
|
parser.attribValue = c
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_QUOTED:
|
|
if (c !== parser.q) {
|
|
if (c === '&') {
|
|
parser.state = S.ATTRIB_VALUE_ENTITY_Q
|
|
} else {
|
|
parser.attribValue += c
|
|
}
|
|
continue
|
|
}
|
|
attrib(parser)
|
|
parser.q = ''
|
|
parser.state = S.ATTRIB_VALUE_CLOSED
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_CLOSED:
|
|
if (isWhitespace(c)) {
|
|
parser.state = S.ATTRIB
|
|
} else if (c === '>') {
|
|
openTag(parser)
|
|
} else if (c === '/') {
|
|
parser.state = S.OPEN_TAG_SLASH
|
|
} else if (isMatch(nameStart, c)) {
|
|
strictFail(parser, 'No whitespace between attributes')
|
|
parser.attribName = c
|
|
parser.attribValue = ''
|
|
parser.state = S.ATTRIB_NAME
|
|
} else {
|
|
strictFail(parser, 'Invalid attribute name')
|
|
}
|
|
continue
|
|
|
|
case S.ATTRIB_VALUE_UNQUOTED:
|
|
if (!isAttribEnd(c)) {
|
|
if (c === '&') {
|
|
parser.state = S.ATTRIB_VALUE_ENTITY_U
|
|
} else {
|
|
parser.attribValue += c
|
|
}
|
|
continue
|
|
}
|
|
attrib(parser)
|
|
if (c === '>') {
|
|
openTag(parser)
|
|
} else {
|
|
parser.state = S.ATTRIB
|
|
}
|
|
continue
|
|
|
|
case S.CLOSE_TAG:
|
|
if (!parser.tagName) {
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
} else if (notMatch(nameStart, c)) {
|
|
if (parser.script) {
|
|
parser.script += '</' + c
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
strictFail(parser, 'Invalid tagname in closing tag.')
|
|
}
|
|
} else {
|
|
parser.tagName = c
|
|
}
|
|
} else if (c === '>') {
|
|
closeTag(parser)
|
|
} else if (isMatch(nameBody, c)) {
|
|
parser.tagName += c
|
|
} else if (parser.script) {
|
|
parser.script += '</' + parser.tagName
|
|
parser.tagName = ''
|
|
parser.state = S.SCRIPT
|
|
} else {
|
|
if (!isWhitespace(c)) {
|
|
strictFail(parser, 'Invalid tagname in closing tag')
|
|
}
|
|
parser.state = S.CLOSE_TAG_SAW_WHITE
|
|
}
|
|
continue
|
|
|
|
case S.CLOSE_TAG_SAW_WHITE:
|
|
if (isWhitespace(c)) {
|
|
continue
|
|
}
|
|
if (c === '>') {
|
|
closeTag(parser)
|
|
} else {
|
|
strictFail(parser, 'Invalid characters in closing tag')
|
|
}
|
|
continue
|
|
|
|
case S.TEXT_ENTITY:
|
|
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
case S.ATTRIB_VALUE_ENTITY_U:
|
|
var returnState
|
|
var buffer
|
|
switch (parser.state) {
|
|
case S.TEXT_ENTITY:
|
|
returnState = S.TEXT
|
|
buffer = 'textNode'
|
|
break
|
|
|
|
case S.ATTRIB_VALUE_ENTITY_Q:
|
|
returnState = S.ATTRIB_VALUE_QUOTED
|
|
buffer = 'attribValue'
|
|
break
|
|
|
|
case S.ATTRIB_VALUE_ENTITY_U:
|
|
returnState = S.ATTRIB_VALUE_UNQUOTED
|
|
buffer = 'attribValue'
|
|
break
|
|
}
|
|
|
|
if (c === ';') {
|
|
parser[buffer] += parseEntity(parser)
|
|
parser.entity = ''
|
|
parser.state = returnState
|
|
} else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {
|
|
parser.entity += c
|
|
} else {
|
|
strictFail(parser, 'Invalid character in entity name')
|
|
parser[buffer] += '&' + parser.entity + c
|
|
parser.entity = ''
|
|
parser.state = returnState
|
|
}
|
|
|
|
continue
|
|
|
|
default:
|
|
throw new Error(parser, 'Unknown state: ' + parser.state)
|
|
}
|
|
} // while
|
|
|
|
if (parser.position >= parser.bufferCheckPosition) {
|
|
checkBufferLength(parser)
|
|
}
|
|
return parser
|
|
}
|
|
|
|
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
|
|
/* istanbul ignore next */
|
|
if (!String.fromCodePoint) {
|
|
(function () {
|
|
var stringFromCharCode = String.fromCharCode
|
|
var floor = Math.floor
|
|
var fromCodePoint = function () {
|
|
var MAX_SIZE = 0x4000
|
|
var codeUnits = []
|
|
var highSurrogate
|
|
var lowSurrogate
|
|
var index = -1
|
|
var length = arguments.length
|
|
if (!length) {
|
|
return ''
|
|
}
|
|
var result = ''
|
|
while (++index < length) {
|
|
var codePoint = Number(arguments[index])
|
|
if (
|
|
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
|
|
codePoint < 0 || // not a valid Unicode code point
|
|
codePoint > 0x10FFFF || // not a valid Unicode code point
|
|
floor(codePoint) !== codePoint // not an integer
|
|
) {
|
|
throw RangeError('Invalid code point: ' + codePoint)
|
|
}
|
|
if (codePoint <= 0xFFFF) { // BMP code point
|
|
codeUnits.push(codePoint)
|
|
} else { // Astral code point; split in surrogate halves
|
|
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
codePoint -= 0x10000
|
|
highSurrogate = (codePoint >> 10) + 0xD800
|
|
lowSurrogate = (codePoint % 0x400) + 0xDC00
|
|
codeUnits.push(highSurrogate, lowSurrogate)
|
|
}
|
|
if (index + 1 === length || codeUnits.length > MAX_SIZE) {
|
|
result += stringFromCharCode.apply(null, codeUnits)
|
|
codeUnits.length = 0
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
/* istanbul ignore next */
|
|
if (Object.defineProperty) {
|
|
Object.defineProperty(String, 'fromCodePoint', {
|
|
value: fromCodePoint,
|
|
configurable: true,
|
|
writable: true
|
|
})
|
|
} else {
|
|
String.fromCodePoint = fromCodePoint
|
|
}
|
|
}())
|
|
}
|
|
})( false ? undefined : exports)
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 657:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCData, XMLCharacterData,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLCharacterData = __webpack_require__(639);
|
|
|
|
module.exports = XMLCData = (function(superClass) {
|
|
extend(XMLCData, superClass);
|
|
|
|
function XMLCData(parent, text) {
|
|
XMLCData.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing CDATA text. " + this.debugInfo());
|
|
}
|
|
this.name = "#cdata-section";
|
|
this.type = NodeType.CData;
|
|
this.value = this.stringify.cdata(text);
|
|
}
|
|
|
|
XMLCData.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLCData.prototype.toString = function(options) {
|
|
return this.options.writer.cdata(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLCData;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 660:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLNode, XMLRaw,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
module.exports = XMLRaw = (function(superClass) {
|
|
extend(XMLRaw, superClass);
|
|
|
|
function XMLRaw(parent, text) {
|
|
XMLRaw.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing raw text. " + this.debugInfo());
|
|
}
|
|
this.type = NodeType.Raw;
|
|
this.value = this.stringify.raw(text);
|
|
}
|
|
|
|
XMLRaw.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLRaw.prototype.toString = function(options) {
|
|
return this.options.writer.raw(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLRaw;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 661:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDEntity, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = __webpack_require__(582).isObject;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDTDEntity = (function(superClass) {
|
|
extend(XMLDTDEntity, superClass);
|
|
|
|
function XMLDTDEntity(parent, pe, name, value) {
|
|
XMLDTDEntity.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing DTD entity name. " + this.debugInfo(name));
|
|
}
|
|
if (value == null) {
|
|
throw new Error("Missing DTD entity value. " + this.debugInfo(name));
|
|
}
|
|
this.pe = !!pe;
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.EntityDeclaration;
|
|
if (!isObject(value)) {
|
|
this.value = this.stringify.dtdEntityValue(value);
|
|
this.internal = true;
|
|
} else {
|
|
if (!value.pubID && !value.sysID) {
|
|
throw new Error("Public and/or system identifiers are required for an external entity. " + this.debugInfo(name));
|
|
}
|
|
if (value.pubID && !value.sysID) {
|
|
throw new Error("System identifier is required for a public external entity. " + this.debugInfo(name));
|
|
}
|
|
this.internal = false;
|
|
if (value.pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(value.pubID);
|
|
}
|
|
if (value.sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(value.sysID);
|
|
}
|
|
if (value.nData != null) {
|
|
this.nData = this.stringify.dtdNData(value.nData);
|
|
}
|
|
if (this.pe && this.nData) {
|
|
throw new Error("Notation declaration is not allowed in a parameter entity. " + this.debugInfo(name));
|
|
}
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'notationName', {
|
|
get: function() {
|
|
return this.nData || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'inputEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'xmlEncoding', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDTDEntity.prototype, 'xmlVersion', {
|
|
get: function() {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
XMLDTDEntity.prototype.toString = function(options) {
|
|
return this.options.writer.dtdEntity(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDEntity;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 669:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("util");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 670:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* Type of span. Can be used to specify additional relationships between spans
|
|
* in addition to a parent/child relationship.
|
|
*/
|
|
var SpanKind;
|
|
(function (SpanKind) {
|
|
/** Default value. Indicates that the span is used internally. */
|
|
SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL";
|
|
/**
|
|
* Indicates that the span covers server-side handling of an RPC or other
|
|
* remote request.
|
|
*/
|
|
SpanKind[SpanKind["SERVER"] = 1] = "SERVER";
|
|
/**
|
|
* Indicates that the span covers the client-side wrapper around an RPC or
|
|
* other remote request.
|
|
*/
|
|
SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT";
|
|
/**
|
|
* Indicates that the span describes producer sending a message to a
|
|
* broker. Unlike client and server, there is no direct critical path latency
|
|
* relationship between producer and consumer spans.
|
|
*/
|
|
SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER";
|
|
/**
|
|
* Indicates that the span describes consumer receiving a message from a
|
|
* broker. Unlike client and server, there is no direct critical path latency
|
|
* relationship between producer and consumer spans.
|
|
*/
|
|
SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER";
|
|
})(SpanKind = exports.SpanKind || (exports.SpanKind = {}));
|
|
//# sourceMappingURL=span_kind.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 672:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var _a;
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const assert_1 = __webpack_require__(357);
|
|
const fs = __webpack_require__(747);
|
|
const path = __webpack_require__(622);
|
|
_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
|
|
exports.IS_WINDOWS = process.platform === 'win32';
|
|
function exists(fsPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield exports.stat(fsPath);
|
|
}
|
|
catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
return false;
|
|
}
|
|
throw err;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
exports.exists = exists;
|
|
function isDirectory(fsPath, useStat = false) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath);
|
|
return stats.isDirectory();
|
|
});
|
|
}
|
|
exports.isDirectory = isDirectory;
|
|
/**
|
|
* On OSX/Linux, true if path starts with '/'. On Windows, true for paths like:
|
|
* \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases).
|
|
*/
|
|
function isRooted(p) {
|
|
p = normalizeSeparators(p);
|
|
if (!p) {
|
|
throw new Error('isRooted() parameter "p" cannot be empty');
|
|
}
|
|
if (exports.IS_WINDOWS) {
|
|
return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello
|
|
); // e.g. C: or C:\hello
|
|
}
|
|
return p.startsWith('/');
|
|
}
|
|
exports.isRooted = isRooted;
|
|
/**
|
|
* Recursively create a directory at `fsPath`.
|
|
*
|
|
* This implementation is optimistic, meaning it attempts to create the full
|
|
* path first, and backs up the path stack from there.
|
|
*
|
|
* @param fsPath The path to create
|
|
* @param maxDepth The maximum recursion depth
|
|
* @param depth The current recursion depth
|
|
*/
|
|
function mkdirP(fsPath, maxDepth = 1000, depth = 1) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
|
fsPath = path.resolve(fsPath);
|
|
if (depth >= maxDepth)
|
|
return exports.mkdir(fsPath);
|
|
try {
|
|
yield exports.mkdir(fsPath);
|
|
return;
|
|
}
|
|
catch (err) {
|
|
switch (err.code) {
|
|
case 'ENOENT': {
|
|
yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);
|
|
yield exports.mkdir(fsPath);
|
|
return;
|
|
}
|
|
default: {
|
|
let stats;
|
|
try {
|
|
stats = yield exports.stat(fsPath);
|
|
}
|
|
catch (err2) {
|
|
throw err;
|
|
}
|
|
if (!stats.isDirectory())
|
|
throw err;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
exports.mkdirP = mkdirP;
|
|
/**
|
|
* Best effort attempt to determine whether a file exists and is executable.
|
|
* @param filePath file path to check
|
|
* @param extensions additional file extensions to try
|
|
* @return if file exists and is executable, returns the file path. otherwise empty string.
|
|
*/
|
|
function tryGetExecutablePath(filePath, extensions) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let stats = undefined;
|
|
try {
|
|
// test file exists
|
|
stats = yield exports.stat(filePath);
|
|
}
|
|
catch (err) {
|
|
if (err.code !== 'ENOENT') {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
|
}
|
|
}
|
|
if (stats && stats.isFile()) {
|
|
if (exports.IS_WINDOWS) {
|
|
// on Windows, test for valid extension
|
|
const upperExt = path.extname(filePath).toUpperCase();
|
|
if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
else {
|
|
if (isUnixExecutable(stats)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
}
|
|
// try each extension
|
|
const originalFilePath = filePath;
|
|
for (const extension of extensions) {
|
|
filePath = originalFilePath + extension;
|
|
stats = undefined;
|
|
try {
|
|
stats = yield exports.stat(filePath);
|
|
}
|
|
catch (err) {
|
|
if (err.code !== 'ENOENT') {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`);
|
|
}
|
|
}
|
|
if (stats && stats.isFile()) {
|
|
if (exports.IS_WINDOWS) {
|
|
// preserve the case of the actual file (since an extension was appended)
|
|
try {
|
|
const directory = path.dirname(filePath);
|
|
const upperName = path.basename(filePath).toUpperCase();
|
|
for (const actualName of yield exports.readdir(directory)) {
|
|
if (upperName === actualName.toUpperCase()) {
|
|
filePath = path.join(directory, actualName);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (err) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`);
|
|
}
|
|
return filePath;
|
|
}
|
|
else {
|
|
if (isUnixExecutable(stats)) {
|
|
return filePath;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return '';
|
|
});
|
|
}
|
|
exports.tryGetExecutablePath = tryGetExecutablePath;
|
|
function normalizeSeparators(p) {
|
|
p = p || '';
|
|
if (exports.IS_WINDOWS) {
|
|
// convert slashes on Windows
|
|
p = p.replace(/\//g, '\\');
|
|
// remove redundant slashes
|
|
return p.replace(/\\\\+/g, '\\');
|
|
}
|
|
// remove redundant slashes
|
|
return p.replace(/\/\/+/g, '/');
|
|
}
|
|
// on Mac/Linux, test the execute bit
|
|
// R W X R W X R W X
|
|
// 256 128 64 32 16 8 4 2 1
|
|
function isUnixExecutable(stats) {
|
|
return ((stats.mode & 1) > 0 ||
|
|
((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
|
|
((stats.mode & 64) > 0 && stats.uid === process.getuid()));
|
|
}
|
|
//# sourceMappingURL=io-util.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 676:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
|
|
exports.fromCallback = function (fn) {
|
|
return Object.defineProperty(function () {
|
|
if (typeof arguments[arguments.length - 1] === 'function') fn.apply(this, arguments)
|
|
else {
|
|
return new Promise((resolve, reject) => {
|
|
arguments[arguments.length] = (err, res) => {
|
|
if (err) return reject(err)
|
|
resolve(res)
|
|
}
|
|
arguments.length++
|
|
fn.apply(this, arguments)
|
|
})
|
|
}
|
|
}, 'name', { value: fn.name })
|
|
}
|
|
|
|
exports.fromPromise = function (fn) {
|
|
return Object.defineProperty(function () {
|
|
const cb = arguments[arguments.length - 1]
|
|
if (typeof cb !== 'function') return fn.apply(this, arguments)
|
|
else fn.apply(this, arguments).then(r => cb(null, r), cb)
|
|
}, 'name', { value: fn.name })
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 683:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
Element: 1,
|
|
Attribute: 2,
|
|
Text: 3,
|
|
CData: 4,
|
|
EntityReference: 5,
|
|
EntityDeclaration: 6,
|
|
ProcessingInstruction: 7,
|
|
Comment: 8,
|
|
Document: 9,
|
|
DocType: 10,
|
|
DocumentFragment: 11,
|
|
NotationDeclaration: 12,
|
|
Declaration: 201,
|
|
Raw: 202,
|
|
AttributeDeclaration: 203,
|
|
ElementDeclaration: 204,
|
|
Dummy: 205
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 692:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const utils = __importStar(__webpack_require__(15));
|
|
const cacheHttpClient = __importStar(__webpack_require__(114));
|
|
const tar_1 = __webpack_require__(434);
|
|
class ValidationError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = 'ValidationError';
|
|
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
}
|
|
}
|
|
exports.ValidationError = ValidationError;
|
|
class ReserveCacheError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = 'ReserveCacheError';
|
|
Object.setPrototypeOf(this, ReserveCacheError.prototype);
|
|
}
|
|
}
|
|
exports.ReserveCacheError = ReserveCacheError;
|
|
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.`);
|
|
}
|
|
}
|
|
/**
|
|
* 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
|
|
* @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for key
|
|
* @param downloadOptions cache download options
|
|
* @returns string returns the key for the cache hit, otherwise returns undefined
|
|
*/
|
|
function restoreCache(paths, primaryKey, restoreKeys, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
checkPaths(paths);
|
|
restoreKeys = restoreKeys || [];
|
|
const keys = [primaryKey, ...restoreKeys];
|
|
core.debug('Resolved Keys:');
|
|
core.debug(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 utils.getCompressionMethod();
|
|
// path are needed to compute version
|
|
const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
|
|
compressionMethod
|
|
});
|
|
if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
|
|
// Cache not found
|
|
return undefined;
|
|
}
|
|
const archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod));
|
|
core.debug(`Archive Path: ${archivePath}`);
|
|
try {
|
|
// Download the cache from the cache entry
|
|
yield cacheHttpClient.downloadCache(cacheEntry.archiveLocation, archivePath, options);
|
|
const archiveFileSize = utils.getArchiveFileSizeIsBytes(archivePath);
|
|
core.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`);
|
|
yield tar_1.extractTar(archivePath, compressionMethod);
|
|
}
|
|
finally {
|
|
// Try to delete the archive to save space
|
|
try {
|
|
yield utils.unlinkFile(archivePath);
|
|
}
|
|
catch (error) {
|
|
core.debug(`Failed to delete archive: ${error}`);
|
|
}
|
|
}
|
|
return cacheEntry.cacheKey;
|
|
});
|
|
}
|
|
exports.restoreCache = restoreCache;
|
|
/**
|
|
* 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 options cache upload options
|
|
* @returns number returns cacheId if the cache was saved successfully and throws an error if save fails
|
|
*/
|
|
function saveCache(paths, key, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
checkPaths(paths);
|
|
checkKey(key);
|
|
const compressionMethod = yield utils.getCompressionMethod();
|
|
core.debug('Reserving Cache');
|
|
const cacheId = yield cacheHttpClient.reserveCache(key, paths, {
|
|
compressionMethod
|
|
});
|
|
if (cacheId === -1) {
|
|
throw new ReserveCacheError(`Unable to reserve cache with key ${key}, another job may be creating this cache.`);
|
|
}
|
|
core.debug(`Cache ID: ${cacheId}`);
|
|
const cachePaths = yield utils.resolvePaths(paths);
|
|
core.debug('Cache Paths:');
|
|
core.debug(`${JSON.stringify(cachePaths)}`);
|
|
const archiveFolder = yield utils.createTempDirectory();
|
|
const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod));
|
|
core.debug(`Archive Path: ${archivePath}`);
|
|
yield tar_1.createTar(archiveFolder, cachePaths, compressionMethod);
|
|
const fileSizeLimit = 5 * 1024 * 1024 * 1024; // 5GB per repo limit
|
|
const archiveFileSize = utils.getArchiveFileSizeIsBytes(archivePath);
|
|
core.debug(`File Size: ${archiveFileSize}`);
|
|
if (archiveFileSize > fileSizeLimit) {
|
|
throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 5GB limit, not saving cache.`);
|
|
}
|
|
core.debug(`Saving Cache (ID: ${cacheId})`);
|
|
yield cacheHttpClient.saveCache(cacheId, archivePath, options);
|
|
return cacheId;
|
|
});
|
|
}
|
|
exports.saveCache = saveCache;
|
|
//# sourceMappingURL=cache.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 694:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.RefKey = exports.Events = exports.State = exports.Outputs = exports.Inputs = void 0;
|
|
var Inputs;
|
|
(function (Inputs) {
|
|
Inputs["Key"] = "key";
|
|
Inputs["Path"] = "path";
|
|
Inputs["RestoreKeys"] = "restore-keys";
|
|
})(Inputs = exports.Inputs || (exports.Inputs = {}));
|
|
var Outputs;
|
|
(function (Outputs) {
|
|
Outputs["CacheHit"] = "cache-hit";
|
|
})(Outputs = exports.Outputs || (exports.Outputs = {}));
|
|
var State;
|
|
(function (State) {
|
|
State["CachePrimaryKey"] = "CACHE_KEY";
|
|
State["CacheMatchedKey"] = "CACHE_RESULT";
|
|
})(State = exports.State || (exports.State = {}));
|
|
var Events;
|
|
(function (Events) {
|
|
Events["Key"] = "GITHUB_EVENT_NAME";
|
|
Events["Push"] = "push";
|
|
Events["PullRequest"] = "pull_request";
|
|
})(Events = exports.Events || (exports.Events = {}));
|
|
exports.RefKey = "GITHUB_REF";
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 708:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLText,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLCharacterData = __webpack_require__(639);
|
|
|
|
module.exports = XMLText = (function(superClass) {
|
|
extend(XMLText, superClass);
|
|
|
|
function XMLText(parent, text) {
|
|
XMLText.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing element text. " + this.debugInfo());
|
|
}
|
|
this.name = "#text";
|
|
this.type = NodeType.Text;
|
|
this.value = this.stringify.text(text);
|
|
}
|
|
|
|
Object.defineProperty(XMLText.prototype, 'isElementContentWhitespace', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLText.prototype, 'wholeText', {
|
|
get: function() {
|
|
var next, prev, str;
|
|
str = '';
|
|
prev = this.previousSibling;
|
|
while (prev) {
|
|
str = prev.data + str;
|
|
prev = prev.previousSibling;
|
|
}
|
|
str += this.data;
|
|
next = this.nextSibling;
|
|
while (next) {
|
|
str = str + next.data;
|
|
next = next.nextSibling;
|
|
}
|
|
return str;
|
|
}
|
|
});
|
|
|
|
XMLText.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLText.prototype.toString = function(options) {
|
|
return this.options.writer.text(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLText.prototype.splitText = function(offset) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLText.prototype.replaceWholeText = function(content) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
return XMLText;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 722:
|
|
/***/ (function(module) {
|
|
|
|
/**
|
|
* Convert array of 16 byte values to UUID string format of the form:
|
|
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
*/
|
|
var byteToHex = [];
|
|
for (var i = 0; i < 256; ++i) {
|
|
byteToHex[i] = (i + 0x100).toString(16).substr(1);
|
|
}
|
|
|
|
function bytesToUuid(buf, offset) {
|
|
var i = offset || 0;
|
|
var bth = byteToHex;
|
|
// join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
|
|
return ([
|
|
bth[buf[i++]], bth[buf[i++]],
|
|
bth[buf[i++]], bth[buf[i++]], '-',
|
|
bth[buf[i++]], bth[buf[i++]], '-',
|
|
bth[buf[i++]], bth[buf[i++]], '-',
|
|
bth[buf[i++]], bth[buf[i++]], '-',
|
|
bth[buf[i++]], bth[buf[i++]],
|
|
bth[buf[i++]], bth[buf[i++]],
|
|
bth[buf[i++]], bth[buf[i++]]
|
|
]).join('');
|
|
}
|
|
|
|
module.exports = bytesToUuid;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 724:
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var XMLDOMErrorHandler;
|
|
|
|
module.exports = XMLDOMErrorHandler = (function() {
|
|
function XMLDOMErrorHandler() {}
|
|
|
|
XMLDOMErrorHandler.prototype.handleError = function(error) {
|
|
throw new Error(error);
|
|
};
|
|
|
|
return XMLDOMErrorHandler;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 728:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
class SearchState {
|
|
constructor(path, level) {
|
|
this.path = path;
|
|
this.level = level;
|
|
}
|
|
}
|
|
exports.SearchState = SearchState;
|
|
//# sourceMappingURL=internal-search-state.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 733:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = rng;
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const rnds8 = new Uint8Array(16);
|
|
|
|
function rng() {
|
|
return _crypto.default.randomFillSync(rnds8);
|
|
}
|
|
|
|
/***/ }),
|
|
|
|
/***/ 735:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLNamedNodeMap, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = __webpack_require__(582).isObject;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLDTDAttList = __webpack_require__(801);
|
|
|
|
XMLDTDEntity = __webpack_require__(661);
|
|
|
|
XMLDTDElement = __webpack_require__(463);
|
|
|
|
XMLDTDNotation = __webpack_require__(19);
|
|
|
|
XMLNamedNodeMap = __webpack_require__(451);
|
|
|
|
module.exports = XMLDocType = (function(superClass) {
|
|
extend(XMLDocType, superClass);
|
|
|
|
function XMLDocType(parent, pubID, sysID) {
|
|
var child, i, len, ref, ref1, ref2;
|
|
XMLDocType.__super__.constructor.call(this, parent);
|
|
this.type = NodeType.DocType;
|
|
if (parent.children) {
|
|
ref = parent.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.Element) {
|
|
this.name = child.name;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
this.documentObject = parent;
|
|
if (isObject(pubID)) {
|
|
ref1 = pubID, pubID = ref1.pubID, sysID = ref1.sysID;
|
|
}
|
|
if (sysID == null) {
|
|
ref2 = [pubID, sysID], sysID = ref2[0], pubID = ref2[1];
|
|
}
|
|
if (pubID != null) {
|
|
this.pubID = this.stringify.dtdPubID(pubID);
|
|
}
|
|
if (sysID != null) {
|
|
this.sysID = this.stringify.dtdSysID(sysID);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'entities', {
|
|
get: function() {
|
|
var child, i, len, nodes, ref;
|
|
nodes = {};
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if ((child.type === NodeType.EntityDeclaration) && !child.pe) {
|
|
nodes[child.name] = child;
|
|
}
|
|
}
|
|
return new XMLNamedNodeMap(nodes);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'notations', {
|
|
get: function() {
|
|
var child, i, len, nodes, ref;
|
|
nodes = {};
|
|
ref = this.children;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
child = ref[i];
|
|
if (child.type === NodeType.NotationDeclaration) {
|
|
nodes[child.name] = child;
|
|
}
|
|
}
|
|
return new XMLNamedNodeMap(nodes);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'publicId', {
|
|
get: function() {
|
|
return this.pubID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'systemId', {
|
|
get: function() {
|
|
return this.sysID;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLDocType.prototype, 'internalSubset', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
XMLDocType.prototype.element = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDElement(this, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
var child;
|
|
child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.entity = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDEntity(this, false, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.pEntity = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDEntity(this, true, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.notation = function(name, value) {
|
|
var child;
|
|
child = new XMLDTDNotation(this, name, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLDocType.prototype.toString = function(options) {
|
|
return this.options.writer.docType(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLDocType.prototype.ele = function(name, value) {
|
|
return this.element(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
};
|
|
|
|
XMLDocType.prototype.ent = function(name, value) {
|
|
return this.entity(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.pent = function(name, value) {
|
|
return this.pEntity(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.not = function(name, value) {
|
|
return this.notation(name, value);
|
|
};
|
|
|
|
XMLDocType.prototype.up = function() {
|
|
return this.root() || this.documentObject;
|
|
};
|
|
|
|
XMLDocType.prototype.isEqualNode = function(node) {
|
|
if (!XMLDocType.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.name !== this.name) {
|
|
return false;
|
|
}
|
|
if (node.publicId !== this.publicId) {
|
|
return false;
|
|
}
|
|
if (node.systemId !== this.systemId) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLDocType;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 738:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDeclaration, XMLNode, isObject,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
isObject = __webpack_require__(582).isObject;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDeclaration = (function(superClass) {
|
|
extend(XMLDeclaration, superClass);
|
|
|
|
function XMLDeclaration(parent, version, encoding, standalone) {
|
|
var ref;
|
|
XMLDeclaration.__super__.constructor.call(this, parent);
|
|
if (isObject(version)) {
|
|
ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;
|
|
}
|
|
if (!version) {
|
|
version = '1.0';
|
|
}
|
|
this.type = NodeType.Declaration;
|
|
this.version = this.stringify.xmlVersion(version);
|
|
if (encoding != null) {
|
|
this.encoding = this.stringify.xmlEncoding(encoding);
|
|
}
|
|
if (standalone != null) {
|
|
this.standalone = this.stringify.xmlStandalone(standalone);
|
|
}
|
|
}
|
|
|
|
XMLDeclaration.prototype.toString = function(options) {
|
|
return this.options.writer.declaration(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDeclaration;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 744:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* No-op implementations of {@link HttpTextPropagator}.
|
|
*/
|
|
class NoopHttpTextPropagator {
|
|
/** Noop inject function does nothing */
|
|
inject(context, carrier, setter) { }
|
|
/** Noop extract function does nothing and returns the input context */
|
|
extract(context, carrier, getter) {
|
|
return context;
|
|
}
|
|
}
|
|
exports.NoopHttpTextPropagator = NoopHttpTextPropagator;
|
|
exports.NOOP_HTTP_TEXT_PROPAGATOR = new NoopHttpTextPropagator();
|
|
//# sourceMappingURL=NoopHttpTextPropagator.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 747:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("fs");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 750:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
|
|
|
|
|
|
|
var Punycode = __webpack_require__(213);
|
|
|
|
|
|
var internals = {};
|
|
|
|
|
|
//
|
|
// Read rules from file.
|
|
//
|
|
internals.rules = __webpack_require__(50).map(function (rule) {
|
|
|
|
return {
|
|
rule: rule,
|
|
suffix: rule.replace(/^(\*\.|\!)/, ''),
|
|
punySuffix: -1,
|
|
wildcard: rule.charAt(0) === '*',
|
|
exception: rule.charAt(0) === '!'
|
|
};
|
|
});
|
|
|
|
|
|
//
|
|
// Check is given string ends with `suffix`.
|
|
//
|
|
internals.endsWith = function (str, suffix) {
|
|
|
|
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
|
};
|
|
|
|
|
|
//
|
|
// Find rule for a given domain.
|
|
//
|
|
internals.findRule = function (domain) {
|
|
|
|
var punyDomain = Punycode.toASCII(domain);
|
|
return internals.rules.reduce(function (memo, rule) {
|
|
|
|
if (rule.punySuffix === -1){
|
|
rule.punySuffix = Punycode.toASCII(rule.suffix);
|
|
}
|
|
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
|
|
return memo;
|
|
}
|
|
// This has been commented out as it never seems to run. This is because
|
|
// sub tlds always appear after their parents and we never find a shorter
|
|
// match.
|
|
//if (memo) {
|
|
// var memoSuffix = Punycode.toASCII(memo.suffix);
|
|
// if (memoSuffix.length >= punySuffix.length) {
|
|
// return memo;
|
|
// }
|
|
//}
|
|
return rule;
|
|
}, null);
|
|
};
|
|
|
|
|
|
//
|
|
// Error codes and messages.
|
|
//
|
|
exports.errorCodes = {
|
|
DOMAIN_TOO_SHORT: 'Domain name too short.',
|
|
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
|
|
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
|
|
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
|
|
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
|
|
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
|
|
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
|
|
};
|
|
|
|
|
|
//
|
|
// Validate domain name and throw if not valid.
|
|
//
|
|
// From wikipedia:
|
|
//
|
|
// Hostnames are composed of series of labels concatenated with dots, as are all
|
|
// domain names. Each label must be between 1 and 63 characters long, and the
|
|
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
|
|
//
|
|
// Allowed chars:
|
|
//
|
|
// * `a-z`
|
|
// * `0-9`
|
|
// * `-` but not as a starting or ending character
|
|
// * `.` as a separator for the textual portions of a domain name
|
|
//
|
|
// * http://en.wikipedia.org/wiki/Domain_name
|
|
// * http://en.wikipedia.org/wiki/Hostname
|
|
//
|
|
internals.validate = function (input) {
|
|
|
|
// Before we can validate we need to take care of IDNs with unicode chars.
|
|
var ascii = Punycode.toASCII(input);
|
|
|
|
if (ascii.length < 1) {
|
|
return 'DOMAIN_TOO_SHORT';
|
|
}
|
|
if (ascii.length > 255) {
|
|
return 'DOMAIN_TOO_LONG';
|
|
}
|
|
|
|
// Check each part's length and allowed chars.
|
|
var labels = ascii.split('.');
|
|
var label;
|
|
|
|
for (var i = 0; i < labels.length; ++i) {
|
|
label = labels[i];
|
|
if (!label.length) {
|
|
return 'LABEL_TOO_SHORT';
|
|
}
|
|
if (label.length > 63) {
|
|
return 'LABEL_TOO_LONG';
|
|
}
|
|
if (label.charAt(0) === '-') {
|
|
return 'LABEL_STARTS_WITH_DASH';
|
|
}
|
|
if (label.charAt(label.length - 1) === '-') {
|
|
return 'LABEL_ENDS_WITH_DASH';
|
|
}
|
|
if (!/^[a-z0-9\-]+$/.test(label)) {
|
|
return 'LABEL_INVALID_CHARS';
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
//
|
|
// Public API
|
|
//
|
|
|
|
|
|
//
|
|
// Parse domain.
|
|
//
|
|
exports.parse = function (input) {
|
|
|
|
if (typeof input !== 'string') {
|
|
throw new TypeError('Domain name must be a string.');
|
|
}
|
|
|
|
// Force domain to lowercase.
|
|
var domain = input.slice(0).toLowerCase();
|
|
|
|
// Handle FQDN.
|
|
// TODO: Simply remove trailing dot?
|
|
if (domain.charAt(domain.length - 1) === '.') {
|
|
domain = domain.slice(0, domain.length - 1);
|
|
}
|
|
|
|
// Validate and sanitise input.
|
|
var error = internals.validate(domain);
|
|
if (error) {
|
|
return {
|
|
input: input,
|
|
error: {
|
|
message: exports.errorCodes[error],
|
|
code: error
|
|
}
|
|
};
|
|
}
|
|
|
|
var parsed = {
|
|
input: input,
|
|
tld: null,
|
|
sld: null,
|
|
domain: null,
|
|
subdomain: null,
|
|
listed: false
|
|
};
|
|
|
|
var domainParts = domain.split('.');
|
|
|
|
// Non-Internet TLD
|
|
if (domainParts[domainParts.length - 1] === 'local') {
|
|
return parsed;
|
|
}
|
|
|
|
var handlePunycode = function () {
|
|
|
|
if (!/xn--/.test(domain)) {
|
|
return parsed;
|
|
}
|
|
if (parsed.domain) {
|
|
parsed.domain = Punycode.toASCII(parsed.domain);
|
|
}
|
|
if (parsed.subdomain) {
|
|
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
|
|
}
|
|
return parsed;
|
|
};
|
|
|
|
var rule = internals.findRule(domain);
|
|
|
|
// Unlisted tld.
|
|
if (!rule) {
|
|
if (domainParts.length < 2) {
|
|
return parsed;
|
|
}
|
|
parsed.tld = domainParts.pop();
|
|
parsed.sld = domainParts.pop();
|
|
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
|
if (domainParts.length) {
|
|
parsed.subdomain = domainParts.pop();
|
|
}
|
|
return handlePunycode();
|
|
}
|
|
|
|
// At this point we know the public suffix is listed.
|
|
parsed.listed = true;
|
|
|
|
var tldParts = rule.suffix.split('.');
|
|
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
|
|
|
|
if (rule.exception) {
|
|
privateParts.push(tldParts.shift());
|
|
}
|
|
|
|
parsed.tld = tldParts.join('.');
|
|
|
|
if (!privateParts.length) {
|
|
return handlePunycode();
|
|
}
|
|
|
|
if (rule.wildcard) {
|
|
tldParts.unshift(privateParts.pop());
|
|
parsed.tld = tldParts.join('.');
|
|
}
|
|
|
|
if (!privateParts.length) {
|
|
return handlePunycode();
|
|
}
|
|
|
|
parsed.sld = privateParts.pop();
|
|
parsed.domain = [parsed.sld, parsed.tld].join('.');
|
|
|
|
if (privateParts.length) {
|
|
parsed.subdomain = privateParts.join('.');
|
|
}
|
|
|
|
return handlePunycode();
|
|
};
|
|
|
|
|
|
//
|
|
// Get domain.
|
|
//
|
|
exports.get = function (domain) {
|
|
|
|
if (!domain) {
|
|
return null;
|
|
}
|
|
return exports.parse(domain).domain || null;
|
|
};
|
|
|
|
|
|
//
|
|
// Check whether domain belongs to a known public suffix.
|
|
//
|
|
exports.isValid = function (domain) {
|
|
|
|
var parsed = exports.parse(domain);
|
|
return Boolean(parsed.domain && parsed.listed);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 751:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var defer = __webpack_require__(500);
|
|
|
|
// API
|
|
module.exports = async;
|
|
|
|
/**
|
|
* Runs provided callback asynchronously
|
|
* even if callback itself is not
|
|
*
|
|
* @param {function} callback - callback to invoke
|
|
* @returns {function} - augmented callback
|
|
*/
|
|
function async(callback)
|
|
{
|
|
var isAsync = false;
|
|
|
|
// check if async happened
|
|
defer(function() { isAsync = true; });
|
|
|
|
return function async_callback(err, result)
|
|
{
|
|
if (isAsync)
|
|
{
|
|
callback(err, result);
|
|
}
|
|
else
|
|
{
|
|
defer(function nextTick_callback()
|
|
{
|
|
callback(err, result);
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 753:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* Default setter which sets value via direct property access
|
|
*
|
|
* @param carrier
|
|
* @param key
|
|
*/
|
|
function defaultSetter(carrier, key, value) {
|
|
carrier[key] = value;
|
|
}
|
|
exports.defaultSetter = defaultSetter;
|
|
//# sourceMappingURL=setter.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 761:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("zlib");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 766:
|
|
/***/ (function(module) {
|
|
|
|
// populates missing values
|
|
module.exports = function(dst, src) {
|
|
|
|
Object.keys(src).forEach(function(prop)
|
|
{
|
|
dst[prop] = dst[prop] || src[prop];
|
|
});
|
|
|
|
return dst;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 767:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const trace_flags_1 = __webpack_require__(975);
|
|
exports.INVALID_TRACE_ID = '0';
|
|
exports.INVALID_SPAN_ID = '0';
|
|
const INVALID_SPAN_CONTEXT = {
|
|
traceId: exports.INVALID_TRACE_ID,
|
|
spanId: exports.INVALID_SPAN_ID,
|
|
traceFlags: trace_flags_1.TraceFlags.NONE,
|
|
};
|
|
/**
|
|
* The NoopSpan is the default {@link Span} that is used when no Span
|
|
* implementation is available. All operations are no-op including context
|
|
* propagation.
|
|
*/
|
|
class NoopSpan {
|
|
constructor(_spanContext = INVALID_SPAN_CONTEXT) {
|
|
this._spanContext = _spanContext;
|
|
}
|
|
// Returns a SpanContext.
|
|
context() {
|
|
return this._spanContext;
|
|
}
|
|
// By default does nothing
|
|
setAttribute(key, value) {
|
|
return this;
|
|
}
|
|
// By default does nothing
|
|
setAttributes(attributes) {
|
|
return this;
|
|
}
|
|
// By default does nothing
|
|
addEvent(name, attributes) {
|
|
return this;
|
|
}
|
|
// By default does nothing
|
|
setStatus(status) {
|
|
return this;
|
|
}
|
|
// By default does nothing
|
|
updateName(name) {
|
|
return this;
|
|
}
|
|
// By default does nothing
|
|
end(endTime) { }
|
|
// isRecording always returns false for noopSpan.
|
|
isRecording() {
|
|
return false;
|
|
}
|
|
}
|
|
exports.NoopSpan = NoopSpan;
|
|
exports.NOOP_SPAN = new NoopSpan();
|
|
//# sourceMappingURL=NoopSpan.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 768:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, WriterState, XMLAttribute, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDocument, XMLDocumentCB, XMLElement, XMLProcessingInstruction, XMLRaw, XMLStringWriter, XMLStringifier, XMLText, getValue, isFunction, isObject, isPlainObject, ref,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref = __webpack_require__(582), isObject = ref.isObject, isFunction = ref.isFunction, isPlainObject = ref.isPlainObject, getValue = ref.getValue;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLDocument = __webpack_require__(559);
|
|
|
|
XMLElement = __webpack_require__(796);
|
|
|
|
XMLCData = __webpack_require__(657);
|
|
|
|
XMLComment = __webpack_require__(919);
|
|
|
|
XMLRaw = __webpack_require__(660);
|
|
|
|
XMLText = __webpack_require__(708);
|
|
|
|
XMLProcessingInstruction = __webpack_require__(491);
|
|
|
|
XMLDeclaration = __webpack_require__(738);
|
|
|
|
XMLDocType = __webpack_require__(735);
|
|
|
|
XMLDTDAttList = __webpack_require__(801);
|
|
|
|
XMLDTDEntity = __webpack_require__(661);
|
|
|
|
XMLDTDElement = __webpack_require__(463);
|
|
|
|
XMLDTDNotation = __webpack_require__(19);
|
|
|
|
XMLAttribute = __webpack_require__(884);
|
|
|
|
XMLStringifier = __webpack_require__(602);
|
|
|
|
XMLStringWriter = __webpack_require__(347);
|
|
|
|
WriterState = __webpack_require__(541);
|
|
|
|
module.exports = XMLDocumentCB = (function() {
|
|
function XMLDocumentCB(options, onData, onEnd) {
|
|
var writerOptions;
|
|
this.name = "?xml";
|
|
this.type = NodeType.Document;
|
|
options || (options = {});
|
|
writerOptions = {};
|
|
if (!options.writer) {
|
|
options.writer = new XMLStringWriter();
|
|
} else if (isPlainObject(options.writer)) {
|
|
writerOptions = options.writer;
|
|
options.writer = new XMLStringWriter();
|
|
}
|
|
this.options = options;
|
|
this.writer = options.writer;
|
|
this.writerOptions = this.writer.filterOptions(writerOptions);
|
|
this.stringify = new XMLStringifier(options);
|
|
this.onDataCallback = onData || function() {};
|
|
this.onEndCallback = onEnd || function() {};
|
|
this.currentNode = null;
|
|
this.currentLevel = -1;
|
|
this.openTags = {};
|
|
this.documentStarted = false;
|
|
this.documentCompleted = false;
|
|
this.root = null;
|
|
}
|
|
|
|
XMLDocumentCB.prototype.createChildNode = function(node) {
|
|
var att, attName, attributes, child, i, len, ref1, ref2;
|
|
switch (node.type) {
|
|
case NodeType.CData:
|
|
this.cdata(node.value);
|
|
break;
|
|
case NodeType.Comment:
|
|
this.comment(node.value);
|
|
break;
|
|
case NodeType.Element:
|
|
attributes = {};
|
|
ref1 = node.attribs;
|
|
for (attName in ref1) {
|
|
if (!hasProp.call(ref1, attName)) continue;
|
|
att = ref1[attName];
|
|
attributes[attName] = att.value;
|
|
}
|
|
this.node(node.name, attributes);
|
|
break;
|
|
case NodeType.Dummy:
|
|
this.dummy();
|
|
break;
|
|
case NodeType.Raw:
|
|
this.raw(node.value);
|
|
break;
|
|
case NodeType.Text:
|
|
this.text(node.value);
|
|
break;
|
|
case NodeType.ProcessingInstruction:
|
|
this.instruction(node.target, node.value);
|
|
break;
|
|
default:
|
|
throw new Error("This XML node type is not supported in a JS object: " + node.constructor.name);
|
|
}
|
|
ref2 = node.children;
|
|
for (i = 0, len = ref2.length; i < len; i++) {
|
|
child = ref2[i];
|
|
this.createChildNode(child);
|
|
if (child.type === NodeType.Element) {
|
|
this.up();
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dummy = function() {
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.node = function(name, attributes, text) {
|
|
var ref1;
|
|
if (name == null) {
|
|
throw new Error("Missing node name.");
|
|
}
|
|
if (this.root && this.currentLevel === -1) {
|
|
throw new Error("Document can only have one root node. " + this.debugInfo(name));
|
|
}
|
|
this.openCurrent();
|
|
name = getValue(name);
|
|
if (attributes == null) {
|
|
attributes = {};
|
|
}
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref1 = [attributes, text], text = ref1[0], attributes = ref1[1];
|
|
}
|
|
this.currentNode = new XMLElement(this, name, attributes);
|
|
this.currentNode.children = false;
|
|
this.currentLevel++;
|
|
this.openTags[this.currentLevel] = this.currentNode;
|
|
if (text != null) {
|
|
this.text(text);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.element = function(name, attributes, text) {
|
|
var child, i, len, oldValidationFlag, ref1, root;
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
this.dtdElement.apply(this, arguments);
|
|
} else {
|
|
if (Array.isArray(name) || isObject(name) || isFunction(name)) {
|
|
oldValidationFlag = this.options.noValidation;
|
|
this.options.noValidation = true;
|
|
root = new XMLDocument(this.options).element('TEMP_ROOT');
|
|
root.element(name);
|
|
this.options.noValidation = oldValidationFlag;
|
|
ref1 = root.children;
|
|
for (i = 0, len = ref1.length; i < len; i++) {
|
|
child = ref1[i];
|
|
this.createChildNode(child);
|
|
if (child.type === NodeType.Element) {
|
|
this.up();
|
|
}
|
|
}
|
|
} else {
|
|
this.node(name, attributes, text);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.attribute = function(name, value) {
|
|
var attName, attValue;
|
|
if (!this.currentNode || this.currentNode.children) {
|
|
throw new Error("att() can only be used immediately after an ele() call in callback mode. " + this.debugInfo(name));
|
|
}
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (isObject(name)) {
|
|
for (attName in name) {
|
|
if (!hasProp.call(name, attName)) continue;
|
|
attValue = name[attName];
|
|
this.attribute(attName, attValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
if (this.options.keepNullAttributes && (value == null)) {
|
|
this.currentNode.attribs[name] = new XMLAttribute(this, name, "");
|
|
} else if (value != null) {
|
|
this.currentNode.attribs[name] = new XMLAttribute(this, name, value);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.text = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLText(this, value);
|
|
this.onData(this.writer.text(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.cdata = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLCData(this, value);
|
|
this.onData(this.writer.cdata(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.comment = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLComment(this, value);
|
|
this.onData(this.writer.comment(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.raw = function(value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLRaw(this, value);
|
|
this.onData(this.writer.raw(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.instruction = function(target, value) {
|
|
var i, insTarget, insValue, len, node;
|
|
this.openCurrent();
|
|
if (target != null) {
|
|
target = getValue(target);
|
|
}
|
|
if (value != null) {
|
|
value = getValue(value);
|
|
}
|
|
if (Array.isArray(target)) {
|
|
for (i = 0, len = target.length; i < len; i++) {
|
|
insTarget = target[i];
|
|
this.instruction(insTarget);
|
|
}
|
|
} else if (isObject(target)) {
|
|
for (insTarget in target) {
|
|
if (!hasProp.call(target, insTarget)) continue;
|
|
insValue = target[insTarget];
|
|
this.instruction(insTarget, insValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
node = new XMLProcessingInstruction(this, target, value);
|
|
this.onData(this.writer.processingInstruction(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.declaration = function(version, encoding, standalone) {
|
|
var node;
|
|
this.openCurrent();
|
|
if (this.documentStarted) {
|
|
throw new Error("declaration() must be the first node.");
|
|
}
|
|
node = new XMLDeclaration(this, version, encoding, standalone);
|
|
this.onData(this.writer.declaration(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.doctype = function(root, pubID, sysID) {
|
|
this.openCurrent();
|
|
if (root == null) {
|
|
throw new Error("Missing root node name.");
|
|
}
|
|
if (this.root) {
|
|
throw new Error("dtd() must come before the root node.");
|
|
}
|
|
this.currentNode = new XMLDocType(this, pubID, sysID);
|
|
this.currentNode.rootNodeName = root;
|
|
this.currentNode.children = false;
|
|
this.currentLevel++;
|
|
this.openTags[this.currentLevel] = this.currentNode;
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dtdElement = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDElement(this, name, value);
|
|
this.onData(this.writer.dtdElement(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);
|
|
this.onData(this.writer.dtdAttList(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.entity = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDEntity(this, false, name, value);
|
|
this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.pEntity = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDEntity(this, true, name, value);
|
|
this.onData(this.writer.dtdEntity(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.notation = function(name, value) {
|
|
var node;
|
|
this.openCurrent();
|
|
node = new XMLDTDNotation(this, name, value);
|
|
this.onData(this.writer.dtdNotation(node, this.writerOptions, this.currentLevel + 1), this.currentLevel + 1);
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.up = function() {
|
|
if (this.currentLevel < 0) {
|
|
throw new Error("The document node has no parent.");
|
|
}
|
|
if (this.currentNode) {
|
|
if (this.currentNode.children) {
|
|
this.closeNode(this.currentNode);
|
|
} else {
|
|
this.openNode(this.currentNode);
|
|
}
|
|
this.currentNode = null;
|
|
} else {
|
|
this.closeNode(this.openTags[this.currentLevel]);
|
|
}
|
|
delete this.openTags[this.currentLevel];
|
|
this.currentLevel--;
|
|
return this;
|
|
};
|
|
|
|
XMLDocumentCB.prototype.end = function() {
|
|
while (this.currentLevel >= 0) {
|
|
this.up();
|
|
}
|
|
return this.onEnd();
|
|
};
|
|
|
|
XMLDocumentCB.prototype.openCurrent = function() {
|
|
if (this.currentNode) {
|
|
this.currentNode.children = true;
|
|
return this.openNode(this.currentNode);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.openNode = function(node) {
|
|
var att, chunk, name, ref1;
|
|
if (!node.isOpen) {
|
|
if (!this.root && this.currentLevel === 0 && node.type === NodeType.Element) {
|
|
this.root = node;
|
|
}
|
|
chunk = '';
|
|
if (node.type === NodeType.Element) {
|
|
this.writerOptions.state = WriterState.OpenTag;
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<' + node.name;
|
|
ref1 = node.attribs;
|
|
for (name in ref1) {
|
|
if (!hasProp.call(ref1, name)) continue;
|
|
att = ref1[name];
|
|
chunk += this.writer.attribute(att, this.writerOptions, this.currentLevel);
|
|
}
|
|
chunk += (node.children ? '>' : '/>') + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
this.writerOptions.state = WriterState.InsideTag;
|
|
} else {
|
|
this.writerOptions.state = WriterState.OpenTag;
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '<!DOCTYPE ' + node.rootNodeName;
|
|
if (node.pubID && node.sysID) {
|
|
chunk += ' PUBLIC "' + node.pubID + '" "' + node.sysID + '"';
|
|
} else if (node.sysID) {
|
|
chunk += ' SYSTEM "' + node.sysID + '"';
|
|
}
|
|
if (node.children) {
|
|
chunk += ' [';
|
|
this.writerOptions.state = WriterState.InsideTag;
|
|
} else {
|
|
this.writerOptions.state = WriterState.CloseTag;
|
|
chunk += '>';
|
|
}
|
|
chunk += this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
}
|
|
this.onData(chunk, this.currentLevel);
|
|
return node.isOpen = true;
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.closeNode = function(node) {
|
|
var chunk;
|
|
if (!node.isClosed) {
|
|
chunk = '';
|
|
this.writerOptions.state = WriterState.CloseTag;
|
|
if (node.type === NodeType.Element) {
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + '</' + node.name + '>' + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
} else {
|
|
chunk = this.writer.indent(node, this.writerOptions, this.currentLevel) + ']>' + this.writer.endline(node, this.writerOptions, this.currentLevel);
|
|
}
|
|
this.writerOptions.state = WriterState.None;
|
|
this.onData(chunk, this.currentLevel);
|
|
return node.isClosed = true;
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.onData = function(chunk, level) {
|
|
this.documentStarted = true;
|
|
return this.onDataCallback(chunk, level + 1);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.onEnd = function() {
|
|
this.documentCompleted = true;
|
|
return this.onEndCallback();
|
|
};
|
|
|
|
XMLDocumentCB.prototype.debugInfo = function(name) {
|
|
if (name == null) {
|
|
return "";
|
|
} else {
|
|
return "node: <" + name + ">";
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ele = function() {
|
|
return this.element.apply(this, arguments);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.nod = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.txt = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dat = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.com = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ins = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dec = function(version, encoding, standalone) {
|
|
return this.declaration(version, encoding, standalone);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.dtd = function(root, pubID, sysID) {
|
|
return this.doctype(root, pubID, sysID);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.e = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.n = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.t = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.d = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.c = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.r = function(value) {
|
|
return this.raw(value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.i = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.att = function() {
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
return this.attList.apply(this, arguments);
|
|
} else {
|
|
return this.attribute.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.a = function() {
|
|
if (this.currentNode && this.currentNode.type === NodeType.DocType) {
|
|
return this.attList.apply(this, arguments);
|
|
} else {
|
|
return this.attribute.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
XMLDocumentCB.prototype.ent = function(name, value) {
|
|
return this.entity(name, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.pent = function(name, value) {
|
|
return this.pEntity(name, value);
|
|
};
|
|
|
|
XMLDocumentCB.prototype.not = function(name, value) {
|
|
return this.notation(name, value);
|
|
};
|
|
|
|
return XMLDocumentCB;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 778:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (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 (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
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 });
|
|
const cache = __importStar(__webpack_require__(692));
|
|
const core = __importStar(__webpack_require__(470));
|
|
const constants_1 = __webpack_require__(694);
|
|
const utils = __importStar(__webpack_require__(443));
|
|
function run() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
// Validate inputs, this can cause task failure
|
|
if (!utils.isValidEvent()) {
|
|
utils.logWarning(`Event Validation Error: The event type ${process.env[constants_1.Events.Key]} is not supported because it's not tied to a branch or tag ref.`);
|
|
return;
|
|
}
|
|
const primaryKey = core.getInput(constants_1.Inputs.Key, { required: true });
|
|
core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
|
|
const restoreKeys = utils.getInputAsArray(constants_1.Inputs.RestoreKeys);
|
|
const cachePaths = utils.getInputAsArray(constants_1.Inputs.Path, {
|
|
required: true
|
|
});
|
|
try {
|
|
const cacheKey = yield cache.restoreCache(cachePaths, primaryKey, restoreKeys);
|
|
if (!cacheKey) {
|
|
core.info(`Cache not found for input keys: ${[
|
|
primaryKey,
|
|
...restoreKeys
|
|
].join(", ")}`);
|
|
return;
|
|
}
|
|
// Store the matched cache key
|
|
utils.setCacheState(cacheKey);
|
|
const isExactKeyMatch = utils.isExactKeyMatch(primaryKey, cacheKey);
|
|
utils.setCacheHitOutput(isExactKeyMatch);
|
|
core.info(`Cache restored from key: ${cacheKey}`);
|
|
}
|
|
catch (error) {
|
|
if (error.name === cache.ValidationError.name) {
|
|
throw error;
|
|
}
|
|
else {
|
|
utils.logWarning(error.message);
|
|
utils.setCacheHitOutput(false);
|
|
}
|
|
}
|
|
}
|
|
catch (error) {
|
|
core.setFailed(error.message);
|
|
}
|
|
});
|
|
}
|
|
run();
|
|
exports.default = run;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 779:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* mime-types
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
* MIT Licensed
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
* Module dependencies.
|
|
* @private
|
|
*/
|
|
|
|
var db = __webpack_require__(852)
|
|
var extname = __webpack_require__(622).extname
|
|
|
|
/**
|
|
* Module variables.
|
|
* @private
|
|
*/
|
|
|
|
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
|
|
var TEXT_TYPE_REGEXP = /^text\//i
|
|
|
|
/**
|
|
* Module exports.
|
|
* @public
|
|
*/
|
|
|
|
exports.charset = charset
|
|
exports.charsets = { lookup: charset }
|
|
exports.contentType = contentType
|
|
exports.extension = extension
|
|
exports.extensions = Object.create(null)
|
|
exports.lookup = lookup
|
|
exports.types = Object.create(null)
|
|
|
|
// Populate the extensions/types maps
|
|
populateMaps(exports.extensions, exports.types)
|
|
|
|
/**
|
|
* Get the default charset for a MIME type.
|
|
*
|
|
* @param {string} type
|
|
* @return {boolean|string}
|
|
*/
|
|
|
|
function charset (type) {
|
|
if (!type || typeof type !== 'string') {
|
|
return false
|
|
}
|
|
|
|
// TODO: use media-typer
|
|
var match = EXTRACT_TYPE_REGEXP.exec(type)
|
|
var mime = match && db[match[1].toLowerCase()]
|
|
|
|
if (mime && mime.charset) {
|
|
return mime.charset
|
|
}
|
|
|
|
// default text/* to utf-8
|
|
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
|
|
return 'UTF-8'
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
/**
|
|
* Create a full Content-Type header given a MIME type or extension.
|
|
*
|
|
* @param {string} str
|
|
* @return {boolean|string}
|
|
*/
|
|
|
|
function contentType (str) {
|
|
// TODO: should this even be in this module?
|
|
if (!str || typeof str !== 'string') {
|
|
return false
|
|
}
|
|
|
|
var mime = str.indexOf('/') === -1
|
|
? exports.lookup(str)
|
|
: str
|
|
|
|
if (!mime) {
|
|
return false
|
|
}
|
|
|
|
// TODO: use content-type or other module
|
|
if (mime.indexOf('charset') === -1) {
|
|
var charset = exports.charset(mime)
|
|
if (charset) mime += '; charset=' + charset.toLowerCase()
|
|
}
|
|
|
|
return mime
|
|
}
|
|
|
|
/**
|
|
* Get the default extension for a MIME type.
|
|
*
|
|
* @param {string} type
|
|
* @return {boolean|string}
|
|
*/
|
|
|
|
function extension (type) {
|
|
if (!type || typeof type !== 'string') {
|
|
return false
|
|
}
|
|
|
|
// TODO: use media-typer
|
|
var match = EXTRACT_TYPE_REGEXP.exec(type)
|
|
|
|
// get extensions
|
|
var exts = match && exports.extensions[match[1].toLowerCase()]
|
|
|
|
if (!exts || !exts.length) {
|
|
return false
|
|
}
|
|
|
|
return exts[0]
|
|
}
|
|
|
|
/**
|
|
* Lookup the MIME type for a file path/extension.
|
|
*
|
|
* @param {string} path
|
|
* @return {boolean|string}
|
|
*/
|
|
|
|
function lookup (path) {
|
|
if (!path || typeof path !== 'string') {
|
|
return false
|
|
}
|
|
|
|
// get the extension ("ext" or ".ext" or full path)
|
|
var extension = extname('x.' + path)
|
|
.toLowerCase()
|
|
.substr(1)
|
|
|
|
if (!extension) {
|
|
return false
|
|
}
|
|
|
|
return exports.types[extension] || false
|
|
}
|
|
|
|
/**
|
|
* Populate the extensions and types maps.
|
|
* @private
|
|
*/
|
|
|
|
function populateMaps (extensions, types) {
|
|
// source preference (least -> most)
|
|
var preference = ['nginx', 'apache', undefined, 'iana']
|
|
|
|
Object.keys(db).forEach(function forEachMimeType (type) {
|
|
var mime = db[type]
|
|
var exts = mime.extensions
|
|
|
|
if (!exts || !exts.length) {
|
|
return
|
|
}
|
|
|
|
// mime -> extensions
|
|
extensions[type] = exts
|
|
|
|
// extension -> mime
|
|
for (var i = 0; i < exts.length; i++) {
|
|
var extension = exts[i]
|
|
|
|
if (types[extension]) {
|
|
var from = preference.indexOf(db[types[extension]].source)
|
|
var to = preference.indexOf(mime.source)
|
|
|
|
if (types[extension] !== 'application/octet-stream' &&
|
|
(from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
|
|
// skip the remapping
|
|
continue
|
|
}
|
|
}
|
|
|
|
// set the extension -> mime
|
|
types[extension] = type
|
|
}
|
|
})
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 790:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var CombinedStream = __webpack_require__(547);
|
|
var util = __webpack_require__(669);
|
|
var path = __webpack_require__(622);
|
|
var http = __webpack_require__(605);
|
|
var https = __webpack_require__(211);
|
|
var parseUrl = __webpack_require__(835).parse;
|
|
var fs = __webpack_require__(747);
|
|
var mime = __webpack_require__(779);
|
|
var asynckit = __webpack_require__(334);
|
|
var populate = __webpack_require__(766);
|
|
|
|
// Public API
|
|
module.exports = FormData;
|
|
|
|
// make it a Stream
|
|
util.inherits(FormData, CombinedStream);
|
|
|
|
/**
|
|
* Create readable "multipart/form-data" streams.
|
|
* Can be used to submit forms
|
|
* and file uploads to other web applications.
|
|
*
|
|
* @constructor
|
|
* @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
|
|
*/
|
|
function FormData(options) {
|
|
if (!(this instanceof FormData)) {
|
|
return new FormData(options);
|
|
}
|
|
|
|
this._overheadLength = 0;
|
|
this._valueLength = 0;
|
|
this._valuesToMeasure = [];
|
|
|
|
CombinedStream.call(this);
|
|
|
|
options = options || {};
|
|
for (var option in options) {
|
|
this[option] = options[option];
|
|
}
|
|
}
|
|
|
|
FormData.LINE_BREAK = '\r\n';
|
|
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
|
|
|
|
FormData.prototype.append = function(field, value, options) {
|
|
|
|
options = options || {};
|
|
|
|
// allow filename as single option
|
|
if (typeof options == 'string') {
|
|
options = {filename: options};
|
|
}
|
|
|
|
var append = CombinedStream.prototype.append.bind(this);
|
|
|
|
// all that streamy business can't handle numbers
|
|
if (typeof value == 'number') {
|
|
value = '' + value;
|
|
}
|
|
|
|
// https://github.com/felixge/node-form-data/issues/38
|
|
if (util.isArray(value)) {
|
|
// Please convert your array into string
|
|
// the way web server expects it
|
|
this._error(new Error('Arrays are not supported.'));
|
|
return;
|
|
}
|
|
|
|
var header = this._multiPartHeader(field, value, options);
|
|
var footer = this._multiPartFooter();
|
|
|
|
append(header);
|
|
append(value);
|
|
append(footer);
|
|
|
|
// pass along options.knownLength
|
|
this._trackLength(header, value, options);
|
|
};
|
|
|
|
FormData.prototype._trackLength = function(header, value, options) {
|
|
var valueLength = 0;
|
|
|
|
// used w/ getLengthSync(), when length is known.
|
|
// e.g. for streaming directly from a remote server,
|
|
// w/ a known file a size, and not wanting to wait for
|
|
// incoming file to finish to get its size.
|
|
if (options.knownLength != null) {
|
|
valueLength += +options.knownLength;
|
|
} else if (Buffer.isBuffer(value)) {
|
|
valueLength = value.length;
|
|
} else if (typeof value === 'string') {
|
|
valueLength = Buffer.byteLength(value);
|
|
}
|
|
|
|
this._valueLength += valueLength;
|
|
|
|
// @check why add CRLF? does this account for custom/multiple CRLFs?
|
|
this._overheadLength +=
|
|
Buffer.byteLength(header) +
|
|
FormData.LINE_BREAK.length;
|
|
|
|
// empty or either doesn't have path or not an http response
|
|
if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {
|
|
return;
|
|
}
|
|
|
|
// no need to bother with the length
|
|
if (!options.knownLength) {
|
|
this._valuesToMeasure.push(value);
|
|
}
|
|
};
|
|
|
|
FormData.prototype._lengthRetriever = function(value, callback) {
|
|
|
|
if (value.hasOwnProperty('fd')) {
|
|
|
|
// take read range into a account
|
|
// `end` = Infinity –> read file till the end
|
|
//
|
|
// TODO: Looks like there is bug in Node fs.createReadStream
|
|
// it doesn't respect `end` options without `start` options
|
|
// Fix it when node fixes it.
|
|
// https://github.com/joyent/node/issues/7819
|
|
if (value.end != undefined && value.end != Infinity && value.start != undefined) {
|
|
|
|
// when end specified
|
|
// no need to calculate range
|
|
// inclusive, starts with 0
|
|
callback(null, value.end + 1 - (value.start ? value.start : 0));
|
|
|
|
// not that fast snoopy
|
|
} else {
|
|
// still need to fetch file size from fs
|
|
fs.stat(value.path, function(err, stat) {
|
|
|
|
var fileSize;
|
|
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
}
|
|
|
|
// update final size based on the range options
|
|
fileSize = stat.size - (value.start ? value.start : 0);
|
|
callback(null, fileSize);
|
|
});
|
|
}
|
|
|
|
// or http response
|
|
} else if (value.hasOwnProperty('httpVersion')) {
|
|
callback(null, +value.headers['content-length']);
|
|
|
|
// or request stream http://github.com/mikeal/request
|
|
} else if (value.hasOwnProperty('httpModule')) {
|
|
// wait till response come back
|
|
value.on('response', function(response) {
|
|
value.pause();
|
|
callback(null, +response.headers['content-length']);
|
|
});
|
|
value.resume();
|
|
|
|
// something else
|
|
} else {
|
|
callback('Unknown stream');
|
|
}
|
|
};
|
|
|
|
FormData.prototype._multiPartHeader = function(field, value, options) {
|
|
// custom header specified (as string)?
|
|
// it becomes responsible for boundary
|
|
// (e.g. to handle extra CRLFs on .NET servers)
|
|
if (typeof options.header == 'string') {
|
|
return options.header;
|
|
}
|
|
|
|
var contentDisposition = this._getContentDisposition(value, options);
|
|
var contentType = this._getContentType(value, options);
|
|
|
|
var contents = '';
|
|
var headers = {
|
|
// add custom disposition as third element or keep it two elements if not
|
|
'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
|
|
// if no content type. allow it to be empty array
|
|
'Content-Type': [].concat(contentType || [])
|
|
};
|
|
|
|
// allow custom headers.
|
|
if (typeof options.header == 'object') {
|
|
populate(headers, options.header);
|
|
}
|
|
|
|
var header;
|
|
for (var prop in headers) {
|
|
if (!headers.hasOwnProperty(prop)) continue;
|
|
header = headers[prop];
|
|
|
|
// skip nullish headers.
|
|
if (header == null) {
|
|
continue;
|
|
}
|
|
|
|
// convert all headers to arrays.
|
|
if (!Array.isArray(header)) {
|
|
header = [header];
|
|
}
|
|
|
|
// add non-empty headers.
|
|
if (header.length) {
|
|
contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
|
|
}
|
|
}
|
|
|
|
return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
|
|
};
|
|
|
|
FormData.prototype._getContentDisposition = function(value, options) {
|
|
|
|
var filename
|
|
, contentDisposition
|
|
;
|
|
|
|
if (typeof options.filepath === 'string') {
|
|
// custom filepath for relative paths
|
|
filename = path.normalize(options.filepath).replace(/\\/g, '/');
|
|
} else if (options.filename || value.name || value.path) {
|
|
// custom filename take precedence
|
|
// formidable and the browser add a name property
|
|
// fs- and request- streams have path property
|
|
filename = path.basename(options.filename || value.name || value.path);
|
|
} else if (value.readable && value.hasOwnProperty('httpVersion')) {
|
|
// or try http response
|
|
filename = path.basename(value.client._httpMessage.path || '');
|
|
}
|
|
|
|
if (filename) {
|
|
contentDisposition = 'filename="' + filename + '"';
|
|
}
|
|
|
|
return contentDisposition;
|
|
};
|
|
|
|
FormData.prototype._getContentType = function(value, options) {
|
|
|
|
// use custom content-type above all
|
|
var contentType = options.contentType;
|
|
|
|
// or try `name` from formidable, browser
|
|
if (!contentType && value.name) {
|
|
contentType = mime.lookup(value.name);
|
|
}
|
|
|
|
// or try `path` from fs-, request- streams
|
|
if (!contentType && value.path) {
|
|
contentType = mime.lookup(value.path);
|
|
}
|
|
|
|
// or if it's http-reponse
|
|
if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
|
|
contentType = value.headers['content-type'];
|
|
}
|
|
|
|
// or guess it from the filepath or filename
|
|
if (!contentType && (options.filepath || options.filename)) {
|
|
contentType = mime.lookup(options.filepath || options.filename);
|
|
}
|
|
|
|
// fallback to the default content type if `value` is not simple value
|
|
if (!contentType && typeof value == 'object') {
|
|
contentType = FormData.DEFAULT_CONTENT_TYPE;
|
|
}
|
|
|
|
return contentType;
|
|
};
|
|
|
|
FormData.prototype._multiPartFooter = function() {
|
|
return function(next) {
|
|
var footer = FormData.LINE_BREAK;
|
|
|
|
var lastPart = (this._streams.length === 0);
|
|
if (lastPart) {
|
|
footer += this._lastBoundary();
|
|
}
|
|
|
|
next(footer);
|
|
}.bind(this);
|
|
};
|
|
|
|
FormData.prototype._lastBoundary = function() {
|
|
return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
|
|
};
|
|
|
|
FormData.prototype.getHeaders = function(userHeaders) {
|
|
var header;
|
|
var formHeaders = {
|
|
'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
|
|
};
|
|
|
|
for (header in userHeaders) {
|
|
if (userHeaders.hasOwnProperty(header)) {
|
|
formHeaders[header.toLowerCase()] = userHeaders[header];
|
|
}
|
|
}
|
|
|
|
return formHeaders;
|
|
};
|
|
|
|
FormData.prototype.getBoundary = function() {
|
|
if (!this._boundary) {
|
|
this._generateBoundary();
|
|
}
|
|
|
|
return this._boundary;
|
|
};
|
|
|
|
FormData.prototype.getBuffer = function() {
|
|
var dataBuffer = new Buffer.alloc( 0 );
|
|
var boundary = this.getBoundary();
|
|
|
|
// Create the form content. Add Line breaks to the end of data.
|
|
for (var i = 0, len = this._streams.length; i < len; i++) {
|
|
if (typeof this._streams[i] !== 'function') {
|
|
|
|
// Add content to the buffer.
|
|
if(Buffer.isBuffer(this._streams[i])) {
|
|
dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
|
|
}else {
|
|
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
|
|
}
|
|
|
|
// Add break after content.
|
|
if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
|
|
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add the footer and return the Buffer object.
|
|
return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
|
|
};
|
|
|
|
FormData.prototype._generateBoundary = function() {
|
|
// This generates a 50 character boundary similar to those used by Firefox.
|
|
// They are optimized for boyer-moore parsing.
|
|
var boundary = '--------------------------';
|
|
for (var i = 0; i < 24; i++) {
|
|
boundary += Math.floor(Math.random() * 10).toString(16);
|
|
}
|
|
|
|
this._boundary = boundary;
|
|
};
|
|
|
|
// Note: getLengthSync DOESN'T calculate streams length
|
|
// As workaround one can calculate file size manually
|
|
// and add it as knownLength option
|
|
FormData.prototype.getLengthSync = function() {
|
|
var knownLength = this._overheadLength + this._valueLength;
|
|
|
|
// Don't get confused, there are 3 "internal" streams for each keyval pair
|
|
// so it basically checks if there is any value added to the form
|
|
if (this._streams.length) {
|
|
knownLength += this._lastBoundary().length;
|
|
}
|
|
|
|
// https://github.com/form-data/form-data/issues/40
|
|
if (!this.hasKnownLength()) {
|
|
// Some async length retrievers are present
|
|
// therefore synchronous length calculation is false.
|
|
// Please use getLength(callback) to get proper length
|
|
this._error(new Error('Cannot calculate proper length in synchronous way.'));
|
|
}
|
|
|
|
return knownLength;
|
|
};
|
|
|
|
// Public API to check if length of added values is known
|
|
// https://github.com/form-data/form-data/issues/196
|
|
// https://github.com/form-data/form-data/issues/262
|
|
FormData.prototype.hasKnownLength = function() {
|
|
var hasKnownLength = true;
|
|
|
|
if (this._valuesToMeasure.length) {
|
|
hasKnownLength = false;
|
|
}
|
|
|
|
return hasKnownLength;
|
|
};
|
|
|
|
FormData.prototype.getLength = function(cb) {
|
|
var knownLength = this._overheadLength + this._valueLength;
|
|
|
|
if (this._streams.length) {
|
|
knownLength += this._lastBoundary().length;
|
|
}
|
|
|
|
if (!this._valuesToMeasure.length) {
|
|
process.nextTick(cb.bind(this, null, knownLength));
|
|
return;
|
|
}
|
|
|
|
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
|
|
if (err) {
|
|
cb(err);
|
|
return;
|
|
}
|
|
|
|
values.forEach(function(length) {
|
|
knownLength += length;
|
|
});
|
|
|
|
cb(null, knownLength);
|
|
});
|
|
};
|
|
|
|
FormData.prototype.submit = function(params, cb) {
|
|
var request
|
|
, options
|
|
, defaults = {method: 'post'}
|
|
;
|
|
|
|
// parse provided url if it's string
|
|
// or treat it as options object
|
|
if (typeof params == 'string') {
|
|
|
|
params = parseUrl(params);
|
|
options = populate({
|
|
port: params.port,
|
|
path: params.pathname,
|
|
host: params.hostname,
|
|
protocol: params.protocol
|
|
}, defaults);
|
|
|
|
// use custom params
|
|
} else {
|
|
|
|
options = populate(params, defaults);
|
|
// if no port provided use default one
|
|
if (!options.port) {
|
|
options.port = options.protocol == 'https:' ? 443 : 80;
|
|
}
|
|
}
|
|
|
|
// put that good code in getHeaders to some use
|
|
options.headers = this.getHeaders(params.headers);
|
|
|
|
// https if specified, fallback to http in any other case
|
|
if (options.protocol == 'https:') {
|
|
request = https.request(options);
|
|
} else {
|
|
request = http.request(options);
|
|
}
|
|
|
|
// get content length and fire away
|
|
this.getLength(function(err, length) {
|
|
if (err) {
|
|
this._error(err);
|
|
return;
|
|
}
|
|
|
|
// add content length
|
|
request.setHeader('Content-Length', length);
|
|
|
|
this.pipe(request);
|
|
if (cb) {
|
|
var onResponse;
|
|
|
|
var callback = function (error, responce) {
|
|
request.removeListener('error', callback);
|
|
request.removeListener('response', onResponse);
|
|
|
|
return cb.call(this, error, responce);
|
|
};
|
|
|
|
onResponse = callback.bind(this, null);
|
|
|
|
request.on('error', callback);
|
|
request.on('response', onResponse);
|
|
}
|
|
}.bind(this));
|
|
|
|
return request;
|
|
};
|
|
|
|
FormData.prototype._error = function(err) {
|
|
if (!this.error) {
|
|
this.error = err;
|
|
this.pause();
|
|
this.emit('error', err);
|
|
}
|
|
};
|
|
|
|
FormData.prototype.toString = function () {
|
|
return '[object FormData]';
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 791:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
exports.defaults = {
|
|
"0.1": {
|
|
explicitCharkey: false,
|
|
trim: true,
|
|
normalize: true,
|
|
normalizeTags: false,
|
|
attrkey: "@",
|
|
charkey: "#",
|
|
explicitArray: false,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: false,
|
|
validator: null,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
childkey: '@@',
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: null,
|
|
attrValueProcessors: null,
|
|
tagNameProcessors: null,
|
|
valueProcessors: null,
|
|
emptyTag: ''
|
|
},
|
|
"0.2": {
|
|
explicitCharkey: false,
|
|
trim: false,
|
|
normalize: false,
|
|
normalizeTags: false,
|
|
attrkey: "$",
|
|
charkey: "_",
|
|
explicitArray: true,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: true,
|
|
validator: null,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
preserveChildrenOrder: false,
|
|
childkey: '$$',
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: null,
|
|
attrValueProcessors: null,
|
|
tagNameProcessors: null,
|
|
valueProcessors: null,
|
|
rootName: 'root',
|
|
xmldec: {
|
|
'version': '1.0',
|
|
'encoding': 'UTF-8',
|
|
'standalone': true
|
|
},
|
|
doctype: null,
|
|
renderOpts: {
|
|
'pretty': true,
|
|
'indent': ' ',
|
|
'newline': '\n'
|
|
},
|
|
headless: false,
|
|
chunkSize: 10000,
|
|
emptyTag: '',
|
|
cdata: false
|
|
}
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 794:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("stream");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 796:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLAttribute, XMLElement, XMLNamedNodeMap, XMLNode, getValue, isFunction, isObject, ref,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref = __webpack_require__(582), isObject = ref.isObject, isFunction = ref.isFunction, getValue = ref.getValue;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLAttribute = __webpack_require__(884);
|
|
|
|
XMLNamedNodeMap = __webpack_require__(451);
|
|
|
|
module.exports = XMLElement = (function(superClass) {
|
|
extend(XMLElement, superClass);
|
|
|
|
function XMLElement(parent, name, attributes) {
|
|
var child, j, len, ref1;
|
|
XMLElement.__super__.constructor.call(this, parent);
|
|
if (name == null) {
|
|
throw new Error("Missing element name. " + this.debugInfo());
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.type = NodeType.Element;
|
|
this.attribs = {};
|
|
this.schemaTypeInfo = null;
|
|
if (attributes != null) {
|
|
this.attribute(attributes);
|
|
}
|
|
if (parent.type === NodeType.Document) {
|
|
this.isRoot = true;
|
|
this.documentObject = parent;
|
|
parent.rootObject = this;
|
|
if (parent.children) {
|
|
ref1 = parent.children;
|
|
for (j = 0, len = ref1.length; j < len; j++) {
|
|
child = ref1[j];
|
|
if (child.type === NodeType.DocType) {
|
|
child.name = this.name;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'tagName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'namespaceURI', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'prefix', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'localName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'id', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'className', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'classList', {
|
|
get: function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLElement.prototype, 'attributes', {
|
|
get: function() {
|
|
if (!this.attributeMap || !this.attributeMap.nodes) {
|
|
this.attributeMap = new XMLNamedNodeMap(this.attribs);
|
|
}
|
|
return this.attributeMap;
|
|
}
|
|
});
|
|
|
|
XMLElement.prototype.clone = function() {
|
|
var att, attName, clonedSelf, ref1;
|
|
clonedSelf = Object.create(this);
|
|
if (clonedSelf.isRoot) {
|
|
clonedSelf.documentObject = null;
|
|
}
|
|
clonedSelf.attribs = {};
|
|
ref1 = this.attribs;
|
|
for (attName in ref1) {
|
|
if (!hasProp.call(ref1, attName)) continue;
|
|
att = ref1[attName];
|
|
clonedSelf.attribs[attName] = att.clone();
|
|
}
|
|
clonedSelf.children = [];
|
|
this.children.forEach(function(child) {
|
|
var clonedChild;
|
|
clonedChild = child.clone();
|
|
clonedChild.parent = clonedSelf;
|
|
return clonedSelf.children.push(clonedChild);
|
|
});
|
|
return clonedSelf;
|
|
};
|
|
|
|
XMLElement.prototype.attribute = function(name, value) {
|
|
var attName, attValue;
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (isObject(name)) {
|
|
for (attName in name) {
|
|
if (!hasProp.call(name, attName)) continue;
|
|
attValue = name[attName];
|
|
this.attribute(attName, attValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
if (this.options.keepNullAttributes && (value == null)) {
|
|
this.attribs[name] = new XMLAttribute(this, name, "");
|
|
} else if (value != null) {
|
|
this.attribs[name] = new XMLAttribute(this, name, value);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLElement.prototype.removeAttribute = function(name) {
|
|
var attName, j, len;
|
|
if (name == null) {
|
|
throw new Error("Missing attribute name. " + this.debugInfo());
|
|
}
|
|
name = getValue(name);
|
|
if (Array.isArray(name)) {
|
|
for (j = 0, len = name.length; j < len; j++) {
|
|
attName = name[j];
|
|
delete this.attribs[attName];
|
|
}
|
|
} else {
|
|
delete this.attribs[name];
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLElement.prototype.toString = function(options) {
|
|
return this.options.writer.element(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLElement.prototype.att = function(name, value) {
|
|
return this.attribute(name, value);
|
|
};
|
|
|
|
XMLElement.prototype.a = function(name, value) {
|
|
return this.attribute(name, value);
|
|
};
|
|
|
|
XMLElement.prototype.getAttribute = function(name) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name].value;
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setAttribute = function(name, value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNode = function(name) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name];
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNode = function(newAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.removeAttributeNode = function(oldAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagName = function(name) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.removeAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setAttributeNodeNS = function(newAttr) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.hasAttribute = function(name) {
|
|
return this.attribs.hasOwnProperty(name);
|
|
};
|
|
|
|
XMLElement.prototype.hasAttributeNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttribute = function(name, isId) {
|
|
if (this.attribs.hasOwnProperty(name)) {
|
|
return this.attribs[name].isId;
|
|
} else {
|
|
return isId;
|
|
}
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.setIdAttributeNode = function(idAttr, isId) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagName = function(tagname) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.getElementsByClassName = function(classNames) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLElement.prototype.isEqualNode = function(node) {
|
|
var i, j, ref1;
|
|
if (!XMLElement.__super__.isEqualNode.apply(this, arguments).isEqualNode(node)) {
|
|
return false;
|
|
}
|
|
if (node.namespaceURI !== this.namespaceURI) {
|
|
return false;
|
|
}
|
|
if (node.prefix !== this.prefix) {
|
|
return false;
|
|
}
|
|
if (node.localName !== this.localName) {
|
|
return false;
|
|
}
|
|
if (node.attribs.length !== this.attribs.length) {
|
|
return false;
|
|
}
|
|
for (i = j = 0, ref1 = this.attribs.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; i = 0 <= ref1 ? ++j : --j) {
|
|
if (!this.attribs[i].isEqualNode(node.attribs[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLElement;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 801:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDTDAttList, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDTDAttList = (function(superClass) {
|
|
extend(XMLDTDAttList, superClass);
|
|
|
|
function XMLDTDAttList(parent, elementName, attributeName, attributeType, defaultValueType, defaultValue) {
|
|
XMLDTDAttList.__super__.constructor.call(this, parent);
|
|
if (elementName == null) {
|
|
throw new Error("Missing DTD element name. " + this.debugInfo());
|
|
}
|
|
if (attributeName == null) {
|
|
throw new Error("Missing DTD attribute name. " + this.debugInfo(elementName));
|
|
}
|
|
if (!attributeType) {
|
|
throw new Error("Missing DTD attribute type. " + this.debugInfo(elementName));
|
|
}
|
|
if (!defaultValueType) {
|
|
throw new Error("Missing DTD attribute default. " + this.debugInfo(elementName));
|
|
}
|
|
if (defaultValueType.indexOf('#') !== 0) {
|
|
defaultValueType = '#' + defaultValueType;
|
|
}
|
|
if (!defaultValueType.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/)) {
|
|
throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. " + this.debugInfo(elementName));
|
|
}
|
|
if (defaultValue && !defaultValueType.match(/^(#FIXED|#DEFAULT)$/)) {
|
|
throw new Error("Default value only applies to #FIXED or #DEFAULT. " + this.debugInfo(elementName));
|
|
}
|
|
this.elementName = this.stringify.name(elementName);
|
|
this.type = NodeType.AttributeDeclaration;
|
|
this.attributeName = this.stringify.name(attributeName);
|
|
this.attributeType = this.stringify.dtdAttType(attributeType);
|
|
if (defaultValue) {
|
|
this.defaultValue = this.stringify.dtdAttDefault(defaultValue);
|
|
}
|
|
this.defaultValueType = defaultValueType;
|
|
}
|
|
|
|
XMLDTDAttList.prototype.toString = function(options) {
|
|
return this.options.writer.dtdAttList(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLDTDAttList;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 826:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var rng = __webpack_require__(139);
|
|
var bytesToUuid = __webpack_require__(722);
|
|
|
|
function v4(options, buf, offset) {
|
|
var i = buf && offset || 0;
|
|
|
|
if (typeof(options) == 'string') {
|
|
buf = options === 'binary' ? new Array(16) : null;
|
|
options = null;
|
|
}
|
|
options = options || {};
|
|
|
|
var rnds = options.random || (options.rng || rng)();
|
|
|
|
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
rnds[6] = (rnds[6] & 0x0f) | 0x40;
|
|
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
|
|
|
// Copy bytes to buffer, if provided
|
|
if (buf) {
|
|
for (var ii = 0; ii < 16; ++ii) {
|
|
buf[i + ii] = rnds[ii];
|
|
}
|
|
}
|
|
|
|
return buf || bytesToUuid(rnds);
|
|
}
|
|
|
|
module.exports = v4;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 835:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("url");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 852:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
/*!
|
|
* mime-db
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module exports.
|
|
*/
|
|
|
|
module.exports = __webpack_require__(512)
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 855:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var DocumentPosition, NodeType, XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLNamedNodeMap, XMLNode, XMLNodeList, XMLProcessingInstruction, XMLRaw, XMLText, getValue, isEmpty, isFunction, isObject, ref1,
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
ref1 = __webpack_require__(582), isObject = ref1.isObject, isFunction = ref1.isFunction, isEmpty = ref1.isEmpty, getValue = ref1.getValue;
|
|
|
|
XMLElement = null;
|
|
|
|
XMLCData = null;
|
|
|
|
XMLComment = null;
|
|
|
|
XMLDeclaration = null;
|
|
|
|
XMLDocType = null;
|
|
|
|
XMLRaw = null;
|
|
|
|
XMLText = null;
|
|
|
|
XMLProcessingInstruction = null;
|
|
|
|
XMLDummy = null;
|
|
|
|
NodeType = null;
|
|
|
|
XMLNodeList = null;
|
|
|
|
XMLNamedNodeMap = null;
|
|
|
|
DocumentPosition = null;
|
|
|
|
module.exports = XMLNode = (function() {
|
|
function XMLNode(parent1) {
|
|
this.parent = parent1;
|
|
if (this.parent) {
|
|
this.options = this.parent.options;
|
|
this.stringify = this.parent.stringify;
|
|
}
|
|
this.value = null;
|
|
this.children = [];
|
|
this.baseURI = null;
|
|
if (!XMLElement) {
|
|
XMLElement = __webpack_require__(796);
|
|
XMLCData = __webpack_require__(657);
|
|
XMLComment = __webpack_require__(919);
|
|
XMLDeclaration = __webpack_require__(738);
|
|
XMLDocType = __webpack_require__(735);
|
|
XMLRaw = __webpack_require__(660);
|
|
XMLText = __webpack_require__(708);
|
|
XMLProcessingInstruction = __webpack_require__(491);
|
|
XMLDummy = __webpack_require__(956);
|
|
NodeType = __webpack_require__(683);
|
|
XMLNodeList = __webpack_require__(265);
|
|
XMLNamedNodeMap = __webpack_require__(451);
|
|
DocumentPosition = __webpack_require__(65);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeType', {
|
|
get: function() {
|
|
return this.type;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nodeValue', {
|
|
get: function() {
|
|
return this.value;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'parentNode', {
|
|
get: function() {
|
|
return this.parent;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'childNodes', {
|
|
get: function() {
|
|
if (!this.childNodeList || !this.childNodeList.nodes) {
|
|
this.childNodeList = new XMLNodeList(this.children);
|
|
}
|
|
return this.childNodeList;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'firstChild', {
|
|
get: function() {
|
|
return this.children[0] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'lastChild', {
|
|
get: function() {
|
|
return this.children[this.children.length - 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'previousSibling', {
|
|
get: function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
return this.parent.children[i - 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'nextSibling', {
|
|
get: function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
return this.parent.children[i + 1] || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'ownerDocument', {
|
|
get: function() {
|
|
return this.document() || null;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLNode.prototype, 'textContent', {
|
|
get: function() {
|
|
var child, j, len, ref2, str;
|
|
if (this.nodeType === NodeType.Element || this.nodeType === NodeType.DocumentFragment) {
|
|
str = '';
|
|
ref2 = this.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (child.textContent) {
|
|
str += child.textContent;
|
|
}
|
|
}
|
|
return str;
|
|
} else {
|
|
return null;
|
|
}
|
|
},
|
|
set: function(value) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
}
|
|
});
|
|
|
|
XMLNode.prototype.setParent = function(parent) {
|
|
var child, j, len, ref2, results;
|
|
this.parent = parent;
|
|
if (parent) {
|
|
this.options = parent.options;
|
|
this.stringify = parent.stringify;
|
|
}
|
|
ref2 = this.children;
|
|
results = [];
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
results.push(child.setParent(this));
|
|
}
|
|
return results;
|
|
};
|
|
|
|
XMLNode.prototype.element = function(name, attributes, text) {
|
|
var childNode, item, j, k, key, lastChild, len, len1, ref2, ref3, val;
|
|
lastChild = null;
|
|
if (attributes === null && (text == null)) {
|
|
ref2 = [{}, null], attributes = ref2[0], text = ref2[1];
|
|
}
|
|
if (attributes == null) {
|
|
attributes = {};
|
|
}
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref3 = [attributes, text], text = ref3[0], attributes = ref3[1];
|
|
}
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
if (Array.isArray(name)) {
|
|
for (j = 0, len = name.length; j < len; j++) {
|
|
item = name[j];
|
|
lastChild = this.element(item);
|
|
}
|
|
} else if (isFunction(name)) {
|
|
lastChild = this.element(name.apply());
|
|
} else if (isObject(name)) {
|
|
for (key in name) {
|
|
if (!hasProp.call(name, key)) continue;
|
|
val = name[key];
|
|
if (isFunction(val)) {
|
|
val = val.apply();
|
|
}
|
|
if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {
|
|
lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);
|
|
} else if (!this.options.separateArrayItems && Array.isArray(val) && isEmpty(val)) {
|
|
lastChild = this.dummy();
|
|
} else if (isObject(val) && isEmpty(val)) {
|
|
lastChild = this.element(key);
|
|
} else if (!this.options.keepNullNodes && (val == null)) {
|
|
lastChild = this.dummy();
|
|
} else if (!this.options.separateArrayItems && Array.isArray(val)) {
|
|
for (k = 0, len1 = val.length; k < len1; k++) {
|
|
item = val[k];
|
|
childNode = {};
|
|
childNode[key] = item;
|
|
lastChild = this.element(childNode);
|
|
}
|
|
} else if (isObject(val)) {
|
|
if (!this.options.ignoreDecorators && this.stringify.convertTextKey && key.indexOf(this.stringify.convertTextKey) === 0) {
|
|
lastChild = this.element(val);
|
|
} else {
|
|
lastChild = this.element(key);
|
|
lastChild.element(val);
|
|
}
|
|
} else {
|
|
lastChild = this.element(key, val);
|
|
}
|
|
}
|
|
} else if (!this.options.keepNullNodes && text === null) {
|
|
lastChild = this.dummy();
|
|
} else {
|
|
if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {
|
|
lastChild = this.text(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {
|
|
lastChild = this.cdata(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {
|
|
lastChild = this.comment(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {
|
|
lastChild = this.raw(text);
|
|
} else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && name.indexOf(this.stringify.convertPIKey) === 0) {
|
|
lastChild = this.instruction(name.substr(this.stringify.convertPIKey.length), text);
|
|
} else {
|
|
lastChild = this.node(name, attributes, text);
|
|
}
|
|
}
|
|
if (lastChild == null) {
|
|
throw new Error("Could not create any elements with: " + name + ". " + this.debugInfo());
|
|
}
|
|
return lastChild;
|
|
};
|
|
|
|
XMLNode.prototype.insertBefore = function(name, attributes, text) {
|
|
var child, i, newChild, refChild, removed;
|
|
if (name != null ? name.type : void 0) {
|
|
newChild = name;
|
|
refChild = attributes;
|
|
newChild.setParent(this);
|
|
if (refChild) {
|
|
i = children.indexOf(refChild);
|
|
removed = children.splice(i);
|
|
children.push(newChild);
|
|
Array.prototype.push.apply(children, removed);
|
|
} else {
|
|
children.push(newChild);
|
|
}
|
|
return newChild;
|
|
} else {
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.element(name, attributes, text);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return child;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.insertAfter = function(name, attributes, text) {
|
|
var child, i, removed;
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot insert elements at root level. " + this.debugInfo(name));
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.element(name, attributes, text);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.remove = function() {
|
|
var i, ref2;
|
|
if (this.isRoot) {
|
|
throw new Error("Cannot remove the root element. " + this.debugInfo());
|
|
}
|
|
i = this.parent.children.indexOf(this);
|
|
[].splice.apply(this.parent.children, [i, i - i + 1].concat(ref2 = [])), ref2;
|
|
return this.parent;
|
|
};
|
|
|
|
XMLNode.prototype.node = function(name, attributes, text) {
|
|
var child, ref2;
|
|
if (name != null) {
|
|
name = getValue(name);
|
|
}
|
|
attributes || (attributes = {});
|
|
attributes = getValue(attributes);
|
|
if (!isObject(attributes)) {
|
|
ref2 = [attributes, text], text = ref2[0], attributes = ref2[1];
|
|
}
|
|
child = new XMLElement(this, name, attributes);
|
|
if (text != null) {
|
|
child.text(text);
|
|
}
|
|
this.children.push(child);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.text = function(value) {
|
|
var child;
|
|
if (isObject(value)) {
|
|
this.element(value);
|
|
}
|
|
child = new XMLText(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.cdata = function(value) {
|
|
var child;
|
|
child = new XMLCData(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.comment = function(value) {
|
|
var child;
|
|
child = new XMLComment(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.commentBefore = function(value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.comment(value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.commentAfter = function(value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.comment(value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.raw = function(value) {
|
|
var child;
|
|
child = new XMLRaw(this, value);
|
|
this.children.push(child);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.dummy = function() {
|
|
var child;
|
|
child = new XMLDummy(this);
|
|
return child;
|
|
};
|
|
|
|
XMLNode.prototype.instruction = function(target, value) {
|
|
var insTarget, insValue, instruction, j, len;
|
|
if (target != null) {
|
|
target = getValue(target);
|
|
}
|
|
if (value != null) {
|
|
value = getValue(value);
|
|
}
|
|
if (Array.isArray(target)) {
|
|
for (j = 0, len = target.length; j < len; j++) {
|
|
insTarget = target[j];
|
|
this.instruction(insTarget);
|
|
}
|
|
} else if (isObject(target)) {
|
|
for (insTarget in target) {
|
|
if (!hasProp.call(target, insTarget)) continue;
|
|
insValue = target[insTarget];
|
|
this.instruction(insTarget, insValue);
|
|
}
|
|
} else {
|
|
if (isFunction(value)) {
|
|
value = value.apply();
|
|
}
|
|
instruction = new XMLProcessingInstruction(this, target, value);
|
|
this.children.push(instruction);
|
|
}
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.instructionBefore = function(target, value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i);
|
|
child = this.parent.instruction(target, value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.instructionAfter = function(target, value) {
|
|
var child, i, removed;
|
|
i = this.parent.children.indexOf(this);
|
|
removed = this.parent.children.splice(i + 1);
|
|
child = this.parent.instruction(target, value);
|
|
Array.prototype.push.apply(this.parent.children, removed);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.declaration = function(version, encoding, standalone) {
|
|
var doc, xmldec;
|
|
doc = this.document();
|
|
xmldec = new XMLDeclaration(doc, version, encoding, standalone);
|
|
if (doc.children.length === 0) {
|
|
doc.children.unshift(xmldec);
|
|
} else if (doc.children[0].type === NodeType.Declaration) {
|
|
doc.children[0] = xmldec;
|
|
} else {
|
|
doc.children.unshift(xmldec);
|
|
}
|
|
return doc.root() || doc;
|
|
};
|
|
|
|
XMLNode.prototype.dtd = function(pubID, sysID) {
|
|
var child, doc, doctype, i, j, k, len, len1, ref2, ref3;
|
|
doc = this.document();
|
|
doctype = new XMLDocType(doc, pubID, sysID);
|
|
ref2 = doc.children;
|
|
for (i = j = 0, len = ref2.length; j < len; i = ++j) {
|
|
child = ref2[i];
|
|
if (child.type === NodeType.DocType) {
|
|
doc.children[i] = doctype;
|
|
return doctype;
|
|
}
|
|
}
|
|
ref3 = doc.children;
|
|
for (i = k = 0, len1 = ref3.length; k < len1; i = ++k) {
|
|
child = ref3[i];
|
|
if (child.isRoot) {
|
|
doc.children.splice(i, 0, doctype);
|
|
return doctype;
|
|
}
|
|
}
|
|
doc.children.push(doctype);
|
|
return doctype;
|
|
};
|
|
|
|
XMLNode.prototype.up = function() {
|
|
if (this.isRoot) {
|
|
throw new Error("The root node has no parent. Use doc() if you need to get the document object.");
|
|
}
|
|
return this.parent;
|
|
};
|
|
|
|
XMLNode.prototype.root = function() {
|
|
var node;
|
|
node = this;
|
|
while (node) {
|
|
if (node.type === NodeType.Document) {
|
|
return node.rootObject;
|
|
} else if (node.isRoot) {
|
|
return node;
|
|
} else {
|
|
node = node.parent;
|
|
}
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.document = function() {
|
|
var node;
|
|
node = this;
|
|
while (node) {
|
|
if (node.type === NodeType.Document) {
|
|
return node;
|
|
} else {
|
|
node = node.parent;
|
|
}
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.end = function(options) {
|
|
return this.document().end(options);
|
|
};
|
|
|
|
XMLNode.prototype.prev = function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
if (i < 1) {
|
|
throw new Error("Already at the first node. " + this.debugInfo());
|
|
}
|
|
return this.parent.children[i - 1];
|
|
};
|
|
|
|
XMLNode.prototype.next = function() {
|
|
var i;
|
|
i = this.parent.children.indexOf(this);
|
|
if (i === -1 || i === this.parent.children.length - 1) {
|
|
throw new Error("Already at the last node. " + this.debugInfo());
|
|
}
|
|
return this.parent.children[i + 1];
|
|
};
|
|
|
|
XMLNode.prototype.importDocument = function(doc) {
|
|
var clonedRoot;
|
|
clonedRoot = doc.root().clone();
|
|
clonedRoot.parent = this;
|
|
clonedRoot.isRoot = false;
|
|
this.children.push(clonedRoot);
|
|
return this;
|
|
};
|
|
|
|
XMLNode.prototype.debugInfo = function(name) {
|
|
var ref2, ref3;
|
|
name = name || this.name;
|
|
if ((name == null) && !((ref2 = this.parent) != null ? ref2.name : void 0)) {
|
|
return "";
|
|
} else if (name == null) {
|
|
return "parent: <" + this.parent.name + ">";
|
|
} else if (!((ref3 = this.parent) != null ? ref3.name : void 0)) {
|
|
return "node: <" + name + ">";
|
|
} else {
|
|
return "node: <" + name + ">, parent: <" + this.parent.name + ">";
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.ele = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.nod = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.txt = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLNode.prototype.dat = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLNode.prototype.com = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLNode.prototype.ins = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLNode.prototype.doc = function() {
|
|
return this.document();
|
|
};
|
|
|
|
XMLNode.prototype.dec = function(version, encoding, standalone) {
|
|
return this.declaration(version, encoding, standalone);
|
|
};
|
|
|
|
XMLNode.prototype.e = function(name, attributes, text) {
|
|
return this.element(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.n = function(name, attributes, text) {
|
|
return this.node(name, attributes, text);
|
|
};
|
|
|
|
XMLNode.prototype.t = function(value) {
|
|
return this.text(value);
|
|
};
|
|
|
|
XMLNode.prototype.d = function(value) {
|
|
return this.cdata(value);
|
|
};
|
|
|
|
XMLNode.prototype.c = function(value) {
|
|
return this.comment(value);
|
|
};
|
|
|
|
XMLNode.prototype.r = function(value) {
|
|
return this.raw(value);
|
|
};
|
|
|
|
XMLNode.prototype.i = function(target, value) {
|
|
return this.instruction(target, value);
|
|
};
|
|
|
|
XMLNode.prototype.u = function() {
|
|
return this.up();
|
|
};
|
|
|
|
XMLNode.prototype.importXMLBuilder = function(doc) {
|
|
return this.importDocument(doc);
|
|
};
|
|
|
|
XMLNode.prototype.replaceChild = function(newChild, oldChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.removeChild = function(oldChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.appendChild = function(newChild) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.hasChildNodes = function() {
|
|
return this.children.length !== 0;
|
|
};
|
|
|
|
XMLNode.prototype.cloneNode = function(deep) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.normalize = function() {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isSupported = function(feature, version) {
|
|
return true;
|
|
};
|
|
|
|
XMLNode.prototype.hasAttributes = function() {
|
|
return this.attribs.length !== 0;
|
|
};
|
|
|
|
XMLNode.prototype.compareDocumentPosition = function(other) {
|
|
var ref, res;
|
|
ref = this;
|
|
if (ref === other) {
|
|
return 0;
|
|
} else if (this.document() !== other.document()) {
|
|
res = DocumentPosition.Disconnected | DocumentPosition.ImplementationSpecific;
|
|
if (Math.random() < 0.5) {
|
|
res |= DocumentPosition.Preceding;
|
|
} else {
|
|
res |= DocumentPosition.Following;
|
|
}
|
|
return res;
|
|
} else if (ref.isAncestor(other)) {
|
|
return DocumentPosition.Contains | DocumentPosition.Preceding;
|
|
} else if (ref.isDescendant(other)) {
|
|
return DocumentPosition.Contains | DocumentPosition.Following;
|
|
} else if (ref.isPreceding(other)) {
|
|
return DocumentPosition.Preceding;
|
|
} else {
|
|
return DocumentPosition.Following;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.isSameNode = function(other) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.lookupPrefix = function(namespaceURI) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isDefaultNamespace = function(namespaceURI) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.lookupNamespaceURI = function(prefix) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.isEqualNode = function(node) {
|
|
var i, j, ref2;
|
|
if (node.nodeType !== this.nodeType) {
|
|
return false;
|
|
}
|
|
if (node.children.length !== this.children.length) {
|
|
return false;
|
|
}
|
|
for (i = j = 0, ref2 = this.children.length - 1; 0 <= ref2 ? j <= ref2 : j >= ref2; i = 0 <= ref2 ? ++j : --j) {
|
|
if (!this.children[i].isEqualNode(node.children[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
XMLNode.prototype.getFeature = function(feature, version) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.setUserData = function(key, data, handler) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.getUserData = function(key) {
|
|
throw new Error("This DOM method is not implemented." + this.debugInfo());
|
|
};
|
|
|
|
XMLNode.prototype.contains = function(other) {
|
|
if (!other) {
|
|
return false;
|
|
}
|
|
return other === this || this.isDescendant(other);
|
|
};
|
|
|
|
XMLNode.prototype.isDescendant = function(node) {
|
|
var child, isDescendantChild, j, len, ref2;
|
|
ref2 = this.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (node === child) {
|
|
return true;
|
|
}
|
|
isDescendantChild = child.isDescendant(node);
|
|
if (isDescendantChild) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
XMLNode.prototype.isAncestor = function(node) {
|
|
return node.isDescendant(this);
|
|
};
|
|
|
|
XMLNode.prototype.isPreceding = function(node) {
|
|
var nodePos, thisPos;
|
|
nodePos = this.treePosition(node);
|
|
thisPos = this.treePosition(this);
|
|
if (nodePos === -1 || thisPos === -1) {
|
|
return false;
|
|
} else {
|
|
return nodePos < thisPos;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.isFollowing = function(node) {
|
|
var nodePos, thisPos;
|
|
nodePos = this.treePosition(node);
|
|
thisPos = this.treePosition(this);
|
|
if (nodePos === -1 || thisPos === -1) {
|
|
return false;
|
|
} else {
|
|
return nodePos > thisPos;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.treePosition = function(node) {
|
|
var found, pos;
|
|
pos = 0;
|
|
found = false;
|
|
this.foreachTreeNode(this.document(), function(childNode) {
|
|
pos++;
|
|
if (!found && childNode === node) {
|
|
return found = true;
|
|
}
|
|
});
|
|
if (found) {
|
|
return pos;
|
|
} else {
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
XMLNode.prototype.foreachTreeNode = function(node, func) {
|
|
var child, j, len, ref2, res;
|
|
node || (node = this.document());
|
|
ref2 = node.children;
|
|
for (j = 0, len = ref2.length; j < len; j++) {
|
|
child = ref2[j];
|
|
if (res = func(child)) {
|
|
return res;
|
|
} else {
|
|
res = this.foreachTreeNode(child, func);
|
|
if (res) {
|
|
return res;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
return XMLNode;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 865:
|
|
/***/ (function(module) {
|
|
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
/* global global, define, System, Reflect, Promise */
|
|
var __extends;
|
|
var __assign;
|
|
var __rest;
|
|
var __decorate;
|
|
var __param;
|
|
var __metadata;
|
|
var __awaiter;
|
|
var __generator;
|
|
var __exportStar;
|
|
var __values;
|
|
var __read;
|
|
var __spread;
|
|
var __spreadArrays;
|
|
var __await;
|
|
var __asyncGenerator;
|
|
var __asyncDelegator;
|
|
var __asyncValues;
|
|
var __makeTemplateObject;
|
|
var __importStar;
|
|
var __importDefault;
|
|
var __classPrivateFieldGet;
|
|
var __classPrivateFieldSet;
|
|
var __createBinding;
|
|
(function (factory) {
|
|
var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
|
|
if (typeof define === "function" && define.amd) {
|
|
define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
|
|
}
|
|
else if ( true && typeof module.exports === "object") {
|
|
factory(createExporter(root, createExporter(module.exports)));
|
|
}
|
|
else {
|
|
factory(createExporter(root));
|
|
}
|
|
function createExporter(exports, previous) {
|
|
if (exports !== root) {
|
|
if (typeof Object.create === "function") {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
}
|
|
else {
|
|
exports.__esModule = true;
|
|
}
|
|
}
|
|
return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
|
|
}
|
|
})
|
|
(function (exporter) {
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
|
|
__assign = Object.assign || function (t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
__rest = function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
|
|
__decorate = function (decorators, target, key, desc) {
|
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
};
|
|
|
|
__param = function (paramIndex, decorator) {
|
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
};
|
|
|
|
__metadata = function (metadataKey, metadataValue) {
|
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
|
};
|
|
|
|
__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());
|
|
});
|
|
};
|
|
|
|
__generator = function (thisArg, body) {
|
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
function step(op) {
|
|
if (f) throw new TypeError("Generator is already executing.");
|
|
while (_) try {
|
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0: case 1: t = op; break;
|
|
case 4: _.label++; return { value: op[1], done: false };
|
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop(); continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
};
|
|
|
|
__exportStar = function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
};
|
|
|
|
__createBinding = Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
});
|
|
|
|
__values = function (o) {
|
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
if (m) return m.call(o);
|
|
if (o && typeof o.length === "number") return {
|
|
next: function () {
|
|
if (o && i >= o.length) o = void 0;
|
|
return { value: o && o[i++], done: !o };
|
|
}
|
|
};
|
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
};
|
|
|
|
__read = function (o, n) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
if (!m) return o;
|
|
var i = m.call(o), r, ar = [], e;
|
|
try {
|
|
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
}
|
|
catch (error) { e = { error: error }; }
|
|
finally {
|
|
try {
|
|
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
}
|
|
finally { if (e) throw e.error; }
|
|
}
|
|
return ar;
|
|
};
|
|
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
__spreadArrays = function () {
|
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
r[k] = a[j];
|
|
return r;
|
|
};
|
|
|
|
__await = function (v) {
|
|
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
|
};
|
|
|
|
__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 = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
|
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]); }
|
|
};
|
|
|
|
__asyncDelegator = function (o) {
|
|
var i, p;
|
|
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
|
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
|
|
};
|
|
|
|
__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); }
|
|
};
|
|
|
|
__makeTemplateObject = function (cooked, raw) {
|
|
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
return cooked;
|
|
};
|
|
|
|
var __setModuleDefault = Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
};
|
|
|
|
__importStar = function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
|
|
__importDefault = function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
|
|
__classPrivateFieldGet = function (receiver, privateMap) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to get private field on non-instance");
|
|
}
|
|
return privateMap.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, privateMap, value) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to set private field on non-instance");
|
|
}
|
|
privateMap.set(receiver, value);
|
|
return value;
|
|
};
|
|
|
|
exporter("__extends", __extends);
|
|
exporter("__assign", __assign);
|
|
exporter("__rest", __rest);
|
|
exporter("__decorate", __decorate);
|
|
exporter("__param", __param);
|
|
exporter("__metadata", __metadata);
|
|
exporter("__awaiter", __awaiter);
|
|
exporter("__generator", __generator);
|
|
exporter("__exportStar", __exportStar);
|
|
exporter("__createBinding", __createBinding);
|
|
exporter("__values", __values);
|
|
exporter("__read", __read);
|
|
exporter("__spread", __spread);
|
|
exporter("__spreadArrays", __spreadArrays);
|
|
exporter("__await", __await);
|
|
exporter("__asyncGenerator", __asyncGenerator);
|
|
exporter("__asyncDelegator", __asyncDelegator);
|
|
exporter("__asyncValues", __asyncValues);
|
|
exporter("__makeTemplateObject", __makeTemplateObject);
|
|
exporter("__importStar", __importStar);
|
|
exporter("__importDefault", __importDefault);
|
|
exporter("__classPrivateFieldGet", __classPrivateFieldGet);
|
|
exporter("__classPrivateFieldSet", __classPrivateFieldSet);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 875:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2020, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const NoopTracerProvider_1 = __webpack_require__(162);
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Tracing API
|
|
*/
|
|
class TraceAPI {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
constructor() {
|
|
this._tracerProvider = NoopTracerProvider_1.NOOP_TRACER_PROVIDER;
|
|
}
|
|
/** Get the singleton instance of the Trace API */
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new TraceAPI();
|
|
}
|
|
return this._instance;
|
|
}
|
|
/**
|
|
* Set the current global tracer. Returns the initialized global tracer provider
|
|
*/
|
|
setGlobalTracerProvider(provider) {
|
|
this._tracerProvider = provider;
|
|
return provider;
|
|
}
|
|
/**
|
|
* Returns the global tracer provider.
|
|
*/
|
|
getTracerProvider() {
|
|
return this._tracerProvider;
|
|
}
|
|
/**
|
|
* Returns a tracer from the global tracer provider.
|
|
*/
|
|
getTracer(name, version) {
|
|
return this.getTracerProvider().getTracer(name, version);
|
|
}
|
|
}
|
|
exports.TraceAPI = TraceAPI;
|
|
//# sourceMappingURL=trace.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 884:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLAttribute, XMLNode;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
module.exports = XMLAttribute = (function() {
|
|
function XMLAttribute(parent, name, value) {
|
|
this.parent = parent;
|
|
if (this.parent) {
|
|
this.options = this.parent.options;
|
|
this.stringify = this.parent.stringify;
|
|
}
|
|
if (name == null) {
|
|
throw new Error("Missing attribute name. " + this.debugInfo(name));
|
|
}
|
|
this.name = this.stringify.name(name);
|
|
this.value = this.stringify.attValue(value);
|
|
this.type = NodeType.Attribute;
|
|
this.isId = false;
|
|
this.schemaTypeInfo = null;
|
|
}
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'nodeType', {
|
|
get: function() {
|
|
return this.type;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'ownerElement', {
|
|
get: function() {
|
|
return this.parent;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'textContent', {
|
|
get: function() {
|
|
return this.value;
|
|
},
|
|
set: function(value) {
|
|
return this.value = value || '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'namespaceURI', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'prefix', {
|
|
get: function() {
|
|
return '';
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'localName', {
|
|
get: function() {
|
|
return this.name;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(XMLAttribute.prototype, 'specified', {
|
|
get: function() {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
XMLAttribute.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLAttribute.prototype.toString = function(options) {
|
|
return this.options.writer.attribute(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
XMLAttribute.prototype.debugInfo = function(name) {
|
|
name = name || this.name;
|
|
if (name == null) {
|
|
return "parent: <" + this.parent.name + ">";
|
|
} else {
|
|
return "attribute: {" + name + "}, parent: <" + this.parent.name + ">";
|
|
}
|
|
};
|
|
|
|
XMLAttribute.prototype.isEqualNode = function(node) {
|
|
if (node.namespaceURI !== this.namespaceURI) {
|
|
return false;
|
|
}
|
|
if (node.prefix !== this.prefix) {
|
|
return false;
|
|
}
|
|
if (node.localName !== this.localName) {
|
|
return false;
|
|
}
|
|
if (node.value !== this.value) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
return XMLAttribute;
|
|
|
|
})();
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 885:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var bom, defaults, events, isEmpty, processItem, processors, sax, setImmediate,
|
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
sax = __webpack_require__(645);
|
|
|
|
events = __webpack_require__(614);
|
|
|
|
bom = __webpack_require__(210);
|
|
|
|
processors = __webpack_require__(350);
|
|
|
|
setImmediate = __webpack_require__(343).setImmediate;
|
|
|
|
defaults = __webpack_require__(791).defaults;
|
|
|
|
isEmpty = function(thing) {
|
|
return typeof thing === "object" && (thing != null) && Object.keys(thing).length === 0;
|
|
};
|
|
|
|
processItem = function(processors, item, key) {
|
|
var i, len, process;
|
|
for (i = 0, len = processors.length; i < len; i++) {
|
|
process = processors[i];
|
|
item = process(item, key);
|
|
}
|
|
return item;
|
|
};
|
|
|
|
exports.Parser = (function(superClass) {
|
|
extend(Parser, superClass);
|
|
|
|
function Parser(opts) {
|
|
this.parseStringPromise = bind(this.parseStringPromise, this);
|
|
this.parseString = bind(this.parseString, this);
|
|
this.reset = bind(this.reset, this);
|
|
this.assignOrPush = bind(this.assignOrPush, this);
|
|
this.processAsync = bind(this.processAsync, this);
|
|
var key, ref, value;
|
|
if (!(this instanceof exports.Parser)) {
|
|
return new exports.Parser(opts);
|
|
}
|
|
this.options = {};
|
|
ref = defaults["0.2"];
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
value = ref[key];
|
|
this.options[key] = value;
|
|
}
|
|
for (key in opts) {
|
|
if (!hasProp.call(opts, key)) continue;
|
|
value = opts[key];
|
|
this.options[key] = value;
|
|
}
|
|
if (this.options.xmlns) {
|
|
this.options.xmlnskey = this.options.attrkey + "ns";
|
|
}
|
|
if (this.options.normalizeTags) {
|
|
if (!this.options.tagNameProcessors) {
|
|
this.options.tagNameProcessors = [];
|
|
}
|
|
this.options.tagNameProcessors.unshift(processors.normalize);
|
|
}
|
|
this.reset();
|
|
}
|
|
|
|
Parser.prototype.processAsync = function() {
|
|
var chunk, err;
|
|
try {
|
|
if (this.remaining.length <= this.options.chunkSize) {
|
|
chunk = this.remaining;
|
|
this.remaining = '';
|
|
this.saxParser = this.saxParser.write(chunk);
|
|
return this.saxParser.close();
|
|
} else {
|
|
chunk = this.remaining.substr(0, this.options.chunkSize);
|
|
this.remaining = this.remaining.substr(this.options.chunkSize, this.remaining.length);
|
|
this.saxParser = this.saxParser.write(chunk);
|
|
return setImmediate(this.processAsync);
|
|
}
|
|
} catch (error1) {
|
|
err = error1;
|
|
if (!this.saxParser.errThrown) {
|
|
this.saxParser.errThrown = true;
|
|
return this.emit(err);
|
|
}
|
|
}
|
|
};
|
|
|
|
Parser.prototype.assignOrPush = function(obj, key, newValue) {
|
|
if (!(key in obj)) {
|
|
if (!this.options.explicitArray) {
|
|
return obj[key] = newValue;
|
|
} else {
|
|
return obj[key] = [newValue];
|
|
}
|
|
} else {
|
|
if (!(obj[key] instanceof Array)) {
|
|
obj[key] = [obj[key]];
|
|
}
|
|
return obj[key].push(newValue);
|
|
}
|
|
};
|
|
|
|
Parser.prototype.reset = function() {
|
|
var attrkey, charkey, ontext, stack;
|
|
this.removeAllListeners();
|
|
this.saxParser = sax.parser(this.options.strict, {
|
|
trim: false,
|
|
normalize: false,
|
|
xmlns: this.options.xmlns
|
|
});
|
|
this.saxParser.errThrown = false;
|
|
this.saxParser.onerror = (function(_this) {
|
|
return function(error) {
|
|
_this.saxParser.resume();
|
|
if (!_this.saxParser.errThrown) {
|
|
_this.saxParser.errThrown = true;
|
|
return _this.emit("error", error);
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.onend = (function(_this) {
|
|
return function() {
|
|
if (!_this.saxParser.ended) {
|
|
_this.saxParser.ended = true;
|
|
return _this.emit("end", _this.resultObject);
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.ended = false;
|
|
this.EXPLICIT_CHARKEY = this.options.explicitCharkey;
|
|
this.resultObject = null;
|
|
stack = [];
|
|
attrkey = this.options.attrkey;
|
|
charkey = this.options.charkey;
|
|
this.saxParser.onopentag = (function(_this) {
|
|
return function(node) {
|
|
var key, newValue, obj, processedKey, ref;
|
|
obj = {};
|
|
obj[charkey] = "";
|
|
if (!_this.options.ignoreAttrs) {
|
|
ref = node.attributes;
|
|
for (key in ref) {
|
|
if (!hasProp.call(ref, key)) continue;
|
|
if (!(attrkey in obj) && !_this.options.mergeAttrs) {
|
|
obj[attrkey] = {};
|
|
}
|
|
newValue = _this.options.attrValueProcessors ? processItem(_this.options.attrValueProcessors, node.attributes[key], key) : node.attributes[key];
|
|
processedKey = _this.options.attrNameProcessors ? processItem(_this.options.attrNameProcessors, key) : key;
|
|
if (_this.options.mergeAttrs) {
|
|
_this.assignOrPush(obj, processedKey, newValue);
|
|
} else {
|
|
obj[attrkey][processedKey] = newValue;
|
|
}
|
|
}
|
|
}
|
|
obj["#name"] = _this.options.tagNameProcessors ? processItem(_this.options.tagNameProcessors, node.name) : node.name;
|
|
if (_this.options.xmlns) {
|
|
obj[_this.options.xmlnskey] = {
|
|
uri: node.uri,
|
|
local: node.local
|
|
};
|
|
}
|
|
return stack.push(obj);
|
|
};
|
|
})(this);
|
|
this.saxParser.onclosetag = (function(_this) {
|
|
return function() {
|
|
var cdata, emptyStr, key, node, nodeName, obj, objClone, old, s, xpath;
|
|
obj = stack.pop();
|
|
nodeName = obj["#name"];
|
|
if (!_this.options.explicitChildren || !_this.options.preserveChildrenOrder) {
|
|
delete obj["#name"];
|
|
}
|
|
if (obj.cdata === true) {
|
|
cdata = obj.cdata;
|
|
delete obj.cdata;
|
|
}
|
|
s = stack[stack.length - 1];
|
|
if (obj[charkey].match(/^\s*$/) && !cdata) {
|
|
emptyStr = obj[charkey];
|
|
delete obj[charkey];
|
|
} else {
|
|
if (_this.options.trim) {
|
|
obj[charkey] = obj[charkey].trim();
|
|
}
|
|
if (_this.options.normalize) {
|
|
obj[charkey] = obj[charkey].replace(/\s{2,}/g, " ").trim();
|
|
}
|
|
obj[charkey] = _this.options.valueProcessors ? processItem(_this.options.valueProcessors, obj[charkey], nodeName) : obj[charkey];
|
|
if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
|
|
obj = obj[charkey];
|
|
}
|
|
}
|
|
if (isEmpty(obj)) {
|
|
obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;
|
|
}
|
|
if (_this.options.validator != null) {
|
|
xpath = "/" + ((function() {
|
|
var i, len, results;
|
|
results = [];
|
|
for (i = 0, len = stack.length; i < len; i++) {
|
|
node = stack[i];
|
|
results.push(node["#name"]);
|
|
}
|
|
return results;
|
|
})()).concat(nodeName).join("/");
|
|
(function() {
|
|
var err;
|
|
try {
|
|
return obj = _this.options.validator(xpath, s && s[nodeName], obj);
|
|
} catch (error1) {
|
|
err = error1;
|
|
return _this.emit("error", err);
|
|
}
|
|
})();
|
|
}
|
|
if (_this.options.explicitChildren && !_this.options.mergeAttrs && typeof obj === 'object') {
|
|
if (!_this.options.preserveChildrenOrder) {
|
|
node = {};
|
|
if (_this.options.attrkey in obj) {
|
|
node[_this.options.attrkey] = obj[_this.options.attrkey];
|
|
delete obj[_this.options.attrkey];
|
|
}
|
|
if (!_this.options.charsAsChildren && _this.options.charkey in obj) {
|
|
node[_this.options.charkey] = obj[_this.options.charkey];
|
|
delete obj[_this.options.charkey];
|
|
}
|
|
if (Object.getOwnPropertyNames(obj).length > 0) {
|
|
node[_this.options.childkey] = obj;
|
|
}
|
|
obj = node;
|
|
} else if (s) {
|
|
s[_this.options.childkey] = s[_this.options.childkey] || [];
|
|
objClone = {};
|
|
for (key in obj) {
|
|
if (!hasProp.call(obj, key)) continue;
|
|
objClone[key] = obj[key];
|
|
}
|
|
s[_this.options.childkey].push(objClone);
|
|
delete obj["#name"];
|
|
if (Object.keys(obj).length === 1 && charkey in obj && !_this.EXPLICIT_CHARKEY) {
|
|
obj = obj[charkey];
|
|
}
|
|
}
|
|
}
|
|
if (stack.length > 0) {
|
|
return _this.assignOrPush(s, nodeName, obj);
|
|
} else {
|
|
if (_this.options.explicitRoot) {
|
|
old = obj;
|
|
obj = {};
|
|
obj[nodeName] = old;
|
|
}
|
|
_this.resultObject = obj;
|
|
_this.saxParser.ended = true;
|
|
return _this.emit("end", _this.resultObject);
|
|
}
|
|
};
|
|
})(this);
|
|
ontext = (function(_this) {
|
|
return function(text) {
|
|
var charChild, s;
|
|
s = stack[stack.length - 1];
|
|
if (s) {
|
|
s[charkey] += text;
|
|
if (_this.options.explicitChildren && _this.options.preserveChildrenOrder && _this.options.charsAsChildren && (_this.options.includeWhiteChars || text.replace(/\\n/g, '').trim() !== '')) {
|
|
s[_this.options.childkey] = s[_this.options.childkey] || [];
|
|
charChild = {
|
|
'#name': '__text__'
|
|
};
|
|
charChild[charkey] = text;
|
|
if (_this.options.normalize) {
|
|
charChild[charkey] = charChild[charkey].replace(/\s{2,}/g, " ").trim();
|
|
}
|
|
s[_this.options.childkey].push(charChild);
|
|
}
|
|
return s;
|
|
}
|
|
};
|
|
})(this);
|
|
this.saxParser.ontext = ontext;
|
|
return this.saxParser.oncdata = (function(_this) {
|
|
return function(text) {
|
|
var s;
|
|
s = ontext(text);
|
|
if (s) {
|
|
return s.cdata = true;
|
|
}
|
|
};
|
|
})(this);
|
|
};
|
|
|
|
Parser.prototype.parseString = function(str, cb) {
|
|
var err;
|
|
if ((cb != null) && typeof cb === "function") {
|
|
this.on("end", function(result) {
|
|
this.reset();
|
|
return cb(null, result);
|
|
});
|
|
this.on("error", function(err) {
|
|
this.reset();
|
|
return cb(err);
|
|
});
|
|
}
|
|
try {
|
|
str = str.toString();
|
|
if (str.trim() === '') {
|
|
this.emit("end", null);
|
|
return true;
|
|
}
|
|
str = bom.stripBOM(str);
|
|
if (this.options.async) {
|
|
this.remaining = str;
|
|
setImmediate(this.processAsync);
|
|
return this.saxParser;
|
|
}
|
|
return this.saxParser.write(str).close();
|
|
} catch (error1) {
|
|
err = error1;
|
|
if (!(this.saxParser.errThrown || this.saxParser.ended)) {
|
|
this.emit('error', err);
|
|
return this.saxParser.errThrown = true;
|
|
} else if (this.saxParser.ended) {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
Parser.prototype.parseStringPromise = function(str) {
|
|
return new Promise((function(_this) {
|
|
return function(resolve, reject) {
|
|
return _this.parseString(str, function(err, value) {
|
|
if (err) {
|
|
return reject(err);
|
|
} else {
|
|
return resolve(value);
|
|
}
|
|
});
|
|
};
|
|
})(this));
|
|
};
|
|
|
|
return Parser;
|
|
|
|
})(events);
|
|
|
|
exports.parseString = function(str, a, b) {
|
|
var cb, options, parser;
|
|
if (b != null) {
|
|
if (typeof b === 'function') {
|
|
cb = b;
|
|
}
|
|
if (typeof a === 'object') {
|
|
options = a;
|
|
}
|
|
} else {
|
|
if (typeof a === 'function') {
|
|
cb = a;
|
|
}
|
|
options = {};
|
|
}
|
|
parser = new exports.Parser(options);
|
|
return parser.parseString(str, cb);
|
|
};
|
|
|
|
exports.parseStringPromise = function(str, a) {
|
|
var options, parser;
|
|
if (typeof a === 'object') {
|
|
options = a;
|
|
}
|
|
parser = new exports.Parser(options);
|
|
return parser.parseStringPromise(str);
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 889:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*!
|
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for
|
|
* license information.
|
|
*
|
|
* Azure Core LRO SDK for JavaScript - 1.0.2
|
|
*/
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var tslib = __webpack_require__(422);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* When a poller is manually stopped through the `stopPolling` method,
|
|
* the poller will be rejected with an instance of the PollerStoppedError.
|
|
*/
|
|
var PollerStoppedError = /** @class */ (function (_super) {
|
|
tslib.__extends(PollerStoppedError, _super);
|
|
function PollerStoppedError(message) {
|
|
var _this = _super.call(this, message) || this;
|
|
_this.name = "PollerStoppedError";
|
|
Object.setPrototypeOf(_this, PollerStoppedError.prototype);
|
|
return _this;
|
|
}
|
|
return PollerStoppedError;
|
|
}(Error));
|
|
/**
|
|
* When a poller is cancelled through the `cancelOperation` method,
|
|
* the poller will be rejected with an instance of the PollerCancelledError.
|
|
*/
|
|
var PollerCancelledError = /** @class */ (function (_super) {
|
|
tslib.__extends(PollerCancelledError, _super);
|
|
function PollerCancelledError(message) {
|
|
var _this = _super.call(this, message) || this;
|
|
_this.name = "PollerCancelledError";
|
|
Object.setPrototypeOf(_this, PollerCancelledError.prototype);
|
|
return _this;
|
|
}
|
|
return PollerCancelledError;
|
|
}(Error));
|
|
/**
|
|
* 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();
|
|
* ```
|
|
*
|
|
*/
|
|
var Poller = /** @class */ (function () {
|
|
/**
|
|
* 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>.
|
|
*/
|
|
function Poller(operation) {
|
|
var _this = this;
|
|
this.stopped = true;
|
|
this.pollProgressCallbacks = [];
|
|
this.operation = operation;
|
|
this.promise = new Promise(function (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(function () { });
|
|
}
|
|
/**
|
|
* @internal
|
|
* @ignore
|
|
* Starts a loop that will break only if the poller is done
|
|
* or if the poller is stopped.
|
|
*/
|
|
Poller.prototype.startPolling = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (this.stopped) {
|
|
this.stopped = false;
|
|
}
|
|
_a.label = 1;
|
|
case 1:
|
|
if (!(!this.isStopped() && !this.isDone())) return [3 /*break*/, 4];
|
|
return [4 /*yield*/, this.poll()];
|
|
case 2:
|
|
_a.sent();
|
|
return [4 /*yield*/, this.delay()];
|
|
case 3:
|
|
_a.sent();
|
|
return [3 /*break*/, 1];
|
|
case 4: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* @internal
|
|
* @ignore
|
|
* 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.
|
|
*/
|
|
Poller.prototype.pollOnce = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var state, _a, e_1;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
state = this.operation.state;
|
|
_b.label = 1;
|
|
case 1:
|
|
_b.trys.push([1, 4, , 5]);
|
|
if (!!this.isDone()) return [3 /*break*/, 3];
|
|
_a = this;
|
|
return [4 /*yield*/, this.operation.update({
|
|
abortSignal: options.abortSignal,
|
|
fireProgress: this.fireProgress.bind(this)
|
|
})];
|
|
case 2:
|
|
_a.operation = _b.sent();
|
|
if (this.isDone() && this.resolve) {
|
|
this.resolve(state.result);
|
|
}
|
|
_b.label = 3;
|
|
case 3: return [3 /*break*/, 5];
|
|
case 4:
|
|
e_1 = _b.sent();
|
|
state.error = e_1;
|
|
if (this.reject) {
|
|
this.reject(e_1);
|
|
}
|
|
throw e_1;
|
|
case 5: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* @internal
|
|
* @ignore
|
|
* 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.
|
|
*/
|
|
Poller.prototype.fireProgress = function (state) {
|
|
for (var _i = 0, _a = this.pollProgressCallbacks; _i < _a.length; _i++) {
|
|
var callback = _a[_i];
|
|
callback(state);
|
|
}
|
|
};
|
|
/**
|
|
* @internal
|
|
* @ignore
|
|
* Invokes the underlying operation's cancel method, and rejects the
|
|
* pollUntilDone promise.
|
|
*/
|
|
Poller.prototype.cancelOnce = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _a;
|
|
return tslib.__generator(this, function (_b) {
|
|
switch (_b.label) {
|
|
case 0:
|
|
_a = this;
|
|
return [4 /*yield*/, this.operation.cancel(options)];
|
|
case 1:
|
|
_a.operation = _b.sent();
|
|
if (this.reject) {
|
|
this.reject(new PollerCancelledError("Poller cancelled"));
|
|
}
|
|
return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
/**
|
|
* 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.
|
|
*/
|
|
Poller.prototype.poll = function (options) {
|
|
var _this = this;
|
|
if (options === void 0) { options = {}; }
|
|
if (!this.pollOncePromise) {
|
|
this.pollOncePromise = this.pollOnce(options);
|
|
var clearPollOncePromise = function () {
|
|
_this.pollOncePromise = undefined;
|
|
};
|
|
this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise);
|
|
}
|
|
return this.pollOncePromise;
|
|
};
|
|
/**
|
|
* Returns a promise that will resolve once the underlying operation is completed.
|
|
*/
|
|
Poller.prototype.pollUntilDone = function () {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
if (this.stopped) {
|
|
this.startPolling().catch(this.reject);
|
|
}
|
|
return [2 /*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.
|
|
*/
|
|
Poller.prototype.onProgress = function (callback) {
|
|
var _this = this;
|
|
this.pollProgressCallbacks.push(callback);
|
|
return function () {
|
|
_this.pollProgressCallbacks = _this.pollProgressCallbacks.filter(function (c) { return c !== callback; });
|
|
};
|
|
};
|
|
/**
|
|
* Returns true if the poller has finished polling.
|
|
*/
|
|
Poller.prototype.isDone = function () {
|
|
var state = this.operation.state;
|
|
return Boolean(state.isCompleted || state.isCancelled || state.error);
|
|
};
|
|
/**
|
|
* Stops the poller from continuing to poll.
|
|
*/
|
|
Poller.prototype.stopPolling = function () {
|
|
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.
|
|
*/
|
|
Poller.prototype.isStopped = function () {
|
|
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.
|
|
*/
|
|
Poller.prototype.cancelOperation = function (options) {
|
|
if (options === void 0) { options = {}; }
|
|
if (!this.stopped) {
|
|
this.stopped = true;
|
|
}
|
|
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.
|
|
*/
|
|
Poller.prototype.getOperationState = function () {
|
|
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.
|
|
*/
|
|
Poller.prototype.getResult = function () {
|
|
var state = this.operation.state;
|
|
return state.result;
|
|
};
|
|
/**
|
|
* Returns a serialized version of the poller's operation
|
|
* by invoking the operation's toString method.
|
|
*/
|
|
Poller.prototype.toString = function () {
|
|
return this.operation.toString();
|
|
};
|
|
return Poller;
|
|
}());
|
|
|
|
exports.Poller = Poller;
|
|
exports.PollerCancelledError = PollerCancelledError;
|
|
exports.PollerStoppedError = PollerStoppedError;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 892:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var iterate = __webpack_require__(157)
|
|
, initState = __webpack_require__(147)
|
|
, terminator = __webpack_require__(939)
|
|
;
|
|
|
|
// Public API
|
|
module.exports = serialOrdered;
|
|
// sorting helpers
|
|
module.exports.ascending = ascending;
|
|
module.exports.descending = descending;
|
|
|
|
/**
|
|
* Runs iterator over provided sorted array elements in series
|
|
*
|
|
* @param {array|object} list - array or object (named list) to iterate over
|
|
* @param {function} iterator - iterator to run
|
|
* @param {function} sortMethod - custom sort function
|
|
* @param {function} callback - invoked when all elements processed
|
|
* @returns {function} - jobs terminator
|
|
*/
|
|
function serialOrdered(list, iterator, sortMethod, callback)
|
|
{
|
|
var state = initState(list, sortMethod);
|
|
|
|
iterate(list, iterator, state, function iteratorHandler(error, result)
|
|
{
|
|
if (error)
|
|
{
|
|
callback(error, result);
|
|
return;
|
|
}
|
|
|
|
state.index++;
|
|
|
|
// are we there yet?
|
|
if (state.index < (state['keyedList'] || list).length)
|
|
{
|
|
iterate(list, iterator, state, iteratorHandler);
|
|
return;
|
|
}
|
|
|
|
// done here
|
|
callback(null, state.results);
|
|
});
|
|
|
|
return terminator.bind(state, callback);
|
|
}
|
|
|
|
/*
|
|
* -- Sort methods
|
|
*/
|
|
|
|
/**
|
|
* sort helper to sort array elements in ascending order
|
|
*
|
|
* @param {mixed} a - an item to compare
|
|
* @param {mixed} b - an item to compare
|
|
* @returns {number} - comparison result
|
|
*/
|
|
function ascending(a, b)
|
|
{
|
|
return a < b ? -1 : a > b ? 1 : 0;
|
|
}
|
|
|
|
/**
|
|
* sort helper to sort array elements in descending order
|
|
*
|
|
* @param {mixed} a - an item to compare
|
|
* @param {mixed} b - an item to compare
|
|
* @returns {number} - comparison result
|
|
*/
|
|
function descending(a, b)
|
|
{
|
|
return -1 * ascending(a, b);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 896:
|
|
/***/ (function(module) {
|
|
|
|
module.exports = function (xs, fn) {
|
|
var res = [];
|
|
for (var i = 0; i < xs.length; i++) {
|
|
var x = fn(xs[i], i);
|
|
if (isArray(x)) res.push.apply(res, x);
|
|
else res.push(x);
|
|
}
|
|
return res;
|
|
};
|
|
|
|
var isArray = Array.isArray || function (xs) {
|
|
return Object.prototype.toString.call(xs) === '[object Array]';
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 898:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var v1 = __webpack_require__(86);
|
|
var v4 = __webpack_require__(826);
|
|
|
|
var uuid = v4;
|
|
uuid.v1 = v1;
|
|
uuid.v4 = v4;
|
|
|
|
module.exports = uuid;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 899:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const core = __importStar(__webpack_require__(470));
|
|
const http_client_1 = __webpack_require__(539);
|
|
function isSuccessStatusCode(statusCode) {
|
|
if (!statusCode) {
|
|
return false;
|
|
}
|
|
return statusCode >= 200 && statusCode < 300;
|
|
}
|
|
exports.isSuccessStatusCode = isSuccessStatusCode;
|
|
function isServerErrorStatusCode(statusCode) {
|
|
if (!statusCode) {
|
|
return true;
|
|
}
|
|
return statusCode >= 500;
|
|
}
|
|
exports.isServerErrorStatusCode = isServerErrorStatusCode;
|
|
function isRetryableStatusCode(statusCode) {
|
|
if (!statusCode) {
|
|
return false;
|
|
}
|
|
const retryableStatusCodes = [
|
|
http_client_1.HttpCodes.BadGateway,
|
|
http_client_1.HttpCodes.ServiceUnavailable,
|
|
http_client_1.HttpCodes.GatewayTimeout
|
|
];
|
|
return retryableStatusCodes.includes(statusCode);
|
|
}
|
|
exports.isRetryableStatusCode = isRetryableStatusCode;
|
|
function retry(name, method, getStatusCode, maxAttempts = 2) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let response = undefined;
|
|
let statusCode = undefined;
|
|
let isRetryable = false;
|
|
let errorMessage = '';
|
|
let attempt = 1;
|
|
while (attempt <= maxAttempts) {
|
|
try {
|
|
response = yield method();
|
|
statusCode = getStatusCode(response);
|
|
if (!isServerErrorStatusCode(statusCode)) {
|
|
return response;
|
|
}
|
|
isRetryable = isRetryableStatusCode(statusCode);
|
|
errorMessage = `Cache service responded with ${statusCode}`;
|
|
}
|
|
catch (error) {
|
|
isRetryable = true;
|
|
errorMessage = error.message;
|
|
}
|
|
core.debug(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`);
|
|
if (!isRetryable) {
|
|
core.debug(`${name} - Error is not retryable`);
|
|
break;
|
|
}
|
|
attempt++;
|
|
}
|
|
throw Error(`${name} failed: ${errorMessage}`);
|
|
});
|
|
}
|
|
exports.retry = retry;
|
|
function retryTypedResponse(name, method, maxAttempts = 2) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield retry(name, method, (response) => response.statusCode, maxAttempts);
|
|
});
|
|
}
|
|
exports.retryTypedResponse = retryTypedResponse;
|
|
function retryHttpClientResponse(name, method, maxAttempts = 2) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield retry(name, method, (response) => response.message.statusCode, maxAttempts);
|
|
});
|
|
}
|
|
exports.retryHttpClientResponse = retryHttpClientResponse;
|
|
//# sourceMappingURL=requestUtils.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 919:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLCharacterData, XMLComment,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLCharacterData = __webpack_require__(639);
|
|
|
|
module.exports = XMLComment = (function(superClass) {
|
|
extend(XMLComment, superClass);
|
|
|
|
function XMLComment(parent, text) {
|
|
XMLComment.__super__.constructor.call(this, parent);
|
|
if (text == null) {
|
|
throw new Error("Missing comment text. " + this.debugInfo());
|
|
}
|
|
this.name = "#comment";
|
|
this.type = NodeType.Comment;
|
|
this.value = this.stringify.comment(text);
|
|
}
|
|
|
|
XMLComment.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLComment.prototype.toString = function(options) {
|
|
return this.options.writer.comment(this, this.options.writer.filterOptions(options));
|
|
};
|
|
|
|
return XMLComment;
|
|
|
|
})(XMLCharacterData);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 923:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const assert = __webpack_require__(357);
|
|
const os = __webpack_require__(87);
|
|
const path = __webpack_require__(622);
|
|
const pathHelper = __webpack_require__(972);
|
|
const minimatch_1 = __webpack_require__(93);
|
|
const internal_match_kind_1 = __webpack_require__(327);
|
|
const internal_path_1 = __webpack_require__(383);
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
class Pattern {
|
|
constructor(patternOrNegate, segments) {
|
|
/**
|
|
* 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 || [];
|
|
assert(segments.length, `Parameter 'segments' must not empty`);
|
|
const root = Pattern.getLiteral(segments[0]);
|
|
assert(root && pathHelper.hasAbsoluteRoot(root), `Parameter 'segments' first element must be a root path`);
|
|
pattern = new internal_path_1.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);
|
|
// Segments
|
|
this.segments = new internal_path_1.Path(pattern).segments;
|
|
// Trailing slash indicates the pattern should only match directories, not regular files
|
|
this.trailingSeparator = pathHelper
|
|
.normalizeSeparators(pattern)
|
|
.endsWith(path.sep);
|
|
pattern = pathHelper.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 internal_path_1.Path(searchSegments).toString();
|
|
// Root RegExp (required when determining partial match)
|
|
this.rootRegExp = new RegExp(Pattern.regExpEscape(searchSegments[0]), IS_WINDOWS ? 'i' : '');
|
|
// Create minimatch
|
|
const minimatchOptions = {
|
|
dot: true,
|
|
nobrace: true,
|
|
nocase: IS_WINDOWS,
|
|
nocomment: true,
|
|
noext: true,
|
|
nonegate: true
|
|
};
|
|
pattern = IS_WINDOWS ? pattern.replace(/\\/g, '/') : pattern;
|
|
this.minimatch = new minimatch_1.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 = pathHelper.normalizeSeparators(itemPath);
|
|
// Append a trailing slash. Otherwise Minimatch will not match the directory immediately
|
|
// preceeding 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(path.sep)) {
|
|
// 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 aboslute root.
|
|
itemPath = `${itemPath}${path.sep}`;
|
|
}
|
|
}
|
|
else {
|
|
// Normalize slashes and trim unnecessary trailing slash
|
|
itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);
|
|
}
|
|
// Match
|
|
if (this.minimatch.match(itemPath)) {
|
|
return this.trailingSeparator ? internal_match_kind_1.MatchKind.Directory : internal_match_kind_1.MatchKind.All;
|
|
}
|
|
return internal_match_kind_1.MatchKind.None;
|
|
}
|
|
/**
|
|
* Indicates whether the pattern may match descendants of the specified path
|
|
*/
|
|
partialMatch(itemPath) {
|
|
// Normalize slashes and trim unnecessary trailing slash
|
|
itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);
|
|
// matchOne does not handle root path correctly
|
|
if (pathHelper.dirname(itemPath) === itemPath) {
|
|
return this.rootRegExp.test(itemPath);
|
|
}
|
|
return this.minimatch.matchOne(itemPath.split(IS_WINDOWS ? /\\+/ : /\/+/), this.minimatch.set[0], true);
|
|
}
|
|
/**
|
|
* Escapes glob patterns within a path
|
|
*/
|
|
static globEscape(s) {
|
|
return (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) {
|
|
// Empty
|
|
assert(pattern, 'pattern cannot be empty');
|
|
// Must not contain `.` segment, unless first segment
|
|
// Must not contain `..` segment
|
|
const literalSegments = new internal_path_1.Path(pattern).segments.map(x => Pattern.getLiteral(x));
|
|
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
|
|
assert(!pathHelper.hasRoot(pattern) || literalSegments[0], `Invalid pattern '${pattern}'. Root segment must not contain globs.`);
|
|
// Normalize slashes
|
|
pattern = pathHelper.normalizeSeparators(pattern);
|
|
// Replace leading `.` segment
|
|
if (pattern === '.' || pattern.startsWith(`.${path.sep}`)) {
|
|
pattern = Pattern.globEscape(process.cwd()) + pattern.substr(1);
|
|
}
|
|
// Replace leading `~` segment
|
|
else if (pattern === '~' || pattern.startsWith(`~${path.sep}`)) {
|
|
const homedir = os.homedir();
|
|
assert(homedir, 'Unable to determine HOME directory');
|
|
assert(pathHelper.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 (IS_WINDOWS &&
|
|
(pattern.match(/^[A-Z]:$/i) || pattern.match(/^[A-Z]:[^\\]/i))) {
|
|
let root = pathHelper.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 (IS_WINDOWS && (pattern === '\\' || pattern.match(/^\\[^\\]/))) {
|
|
let root = pathHelper.ensureAbsoluteRoot('C:\\dummy-root', '\\');
|
|
if (!root.endsWith('\\')) {
|
|
root += '\\';
|
|
}
|
|
pattern = Pattern.globEscape(root) + pattern.substr(1);
|
|
}
|
|
// Otherwise ensure absolute root
|
|
else {
|
|
pattern = pathHelper.ensureAbsoluteRoot(Pattern.globEscape(process.cwd()), pattern);
|
|
}
|
|
return pathHelper.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 === '\\' && !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 === '\\' && !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, '\\$&');
|
|
}
|
|
}
|
|
exports.Pattern = Pattern;
|
|
//# sourceMappingURL=internal-pattern.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 928:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var tslib = __webpack_require__(422);
|
|
var util = _interopDefault(__webpack_require__(669));
|
|
var os = __webpack_require__(87);
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
function log(message) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
process.stderr.write("" + util.format.apply(util, tslib.__spread([message], args)) + os.EOL);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
var debugEnvVariable = (typeof process !== "undefined" && process.env && process.env.DEBUG) || undefined;
|
|
var enabledString;
|
|
var enabledNamespaces = [];
|
|
var skippedNamespaces = [];
|
|
var debuggers = [];
|
|
if (debugEnvVariable) {
|
|
enable(debugEnvVariable);
|
|
}
|
|
function enable(namespaces) {
|
|
var e_1, _a, e_2, _b;
|
|
enabledString = namespaces;
|
|
enabledNamespaces = [];
|
|
skippedNamespaces = [];
|
|
var wildcard = /\*/g;
|
|
var namespaceList = namespaces.split(",").map(function (ns) { return ns.trim().replace(wildcard, ".*?"); });
|
|
try {
|
|
for (var namespaceList_1 = tslib.__values(namespaceList), namespaceList_1_1 = namespaceList_1.next(); !namespaceList_1_1.done; namespaceList_1_1 = namespaceList_1.next()) {
|
|
var ns = namespaceList_1_1.value;
|
|
if (ns.startsWith("-")) {
|
|
skippedNamespaces.push(new RegExp("^" + ns.substr(1) + "$"));
|
|
}
|
|
else {
|
|
enabledNamespaces.push(new RegExp("^" + ns + "$"));
|
|
}
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (namespaceList_1_1 && !namespaceList_1_1.done && (_a = namespaceList_1.return)) _a.call(namespaceList_1);
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
try {
|
|
for (var debuggers_1 = tslib.__values(debuggers), debuggers_1_1 = debuggers_1.next(); !debuggers_1_1.done; debuggers_1_1 = debuggers_1.next()) {
|
|
var instance = debuggers_1_1.value;
|
|
instance.enabled = enabled(instance.namespace);
|
|
}
|
|
}
|
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
finally {
|
|
try {
|
|
if (debuggers_1_1 && !debuggers_1_1.done && (_b = debuggers_1.return)) _b.call(debuggers_1);
|
|
}
|
|
finally { if (e_2) throw e_2.error; }
|
|
}
|
|
}
|
|
function enabled(namespace) {
|
|
var e_3, _a, e_4, _b;
|
|
if (namespace.endsWith("*")) {
|
|
return true;
|
|
}
|
|
try {
|
|
for (var skippedNamespaces_1 = tslib.__values(skippedNamespaces), skippedNamespaces_1_1 = skippedNamespaces_1.next(); !skippedNamespaces_1_1.done; skippedNamespaces_1_1 = skippedNamespaces_1.next()) {
|
|
var skipped = skippedNamespaces_1_1.value;
|
|
if (skipped.test(namespace)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
finally {
|
|
try {
|
|
if (skippedNamespaces_1_1 && !skippedNamespaces_1_1.done && (_a = skippedNamespaces_1.return)) _a.call(skippedNamespaces_1);
|
|
}
|
|
finally { if (e_3) throw e_3.error; }
|
|
}
|
|
try {
|
|
for (var enabledNamespaces_1 = tslib.__values(enabledNamespaces), enabledNamespaces_1_1 = enabledNamespaces_1.next(); !enabledNamespaces_1_1.done; enabledNamespaces_1_1 = enabledNamespaces_1.next()) {
|
|
var enabled_1 = enabledNamespaces_1_1.value;
|
|
if (enabled_1.test(namespace)) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
finally {
|
|
try {
|
|
if (enabledNamespaces_1_1 && !enabledNamespaces_1_1.done && (_b = enabledNamespaces_1.return)) _b.call(enabledNamespaces_1);
|
|
}
|
|
finally { if (e_4) throw e_4.error; }
|
|
}
|
|
return false;
|
|
}
|
|
function disable() {
|
|
var result = enabledString || "";
|
|
enable("");
|
|
return result;
|
|
}
|
|
function createDebugger(namespace) {
|
|
function debug() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
if (!newDebugger.enabled) {
|
|
return;
|
|
}
|
|
if (args.length > 0) {
|
|
args[0] = namespace + " " + args[0];
|
|
}
|
|
newDebugger.log.apply(newDebugger, tslib.__spread(args));
|
|
}
|
|
var newDebugger = Object.assign(debug, {
|
|
enabled: enabled(namespace),
|
|
destroy: destroy,
|
|
log: debugObj.log,
|
|
namespace: namespace,
|
|
extend: extend
|
|
});
|
|
debuggers.push(newDebugger);
|
|
return newDebugger;
|
|
}
|
|
function destroy() {
|
|
var index = debuggers.indexOf(this);
|
|
if (index >= 0) {
|
|
debuggers.splice(index, 1);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function extend(namespace) {
|
|
var newDebugger = createDebugger(this.namespace + ":" + namespace);
|
|
newDebugger.log = this.log;
|
|
return newDebugger;
|
|
}
|
|
var debugObj = Object.assign(function (namespace) {
|
|
return createDebugger(namespace);
|
|
}, {
|
|
enable: enable,
|
|
enabled: enabled,
|
|
disable: disable,
|
|
log: log
|
|
});
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
var registeredLoggers = new Set();
|
|
var logLevelFromEnv = (typeof process !== "undefined" && process.env && process.env.AZURE_LOG_LEVEL) || undefined;
|
|
var azureLogLevel;
|
|
/**
|
|
* 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.
|
|
*/
|
|
var AzureLogger = debugObj("azure");
|
|
AzureLogger.log = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
debugObj.log.apply(debugObj, tslib.__spread(args));
|
|
};
|
|
var AZURE_LOG_LEVELS = ["verbose", "info", "warning", "error"];
|
|
if (logLevelFromEnv) {
|
|
// avoid calling setLogLevel because we don't want a mis-set environment variable to crash
|
|
if (isAzureLogLevel(logLevelFromEnv)) {
|
|
setLogLevel(logLevelFromEnv);
|
|
}
|
|
else {
|
|
console.error("AZURE_LOG_LEVEL set to unknown log level '" + logLevelFromEnv + "'; logging is not enabled. Acceptable values: " + AZURE_LOG_LEVELS.join(", ") + ".");
|
|
}
|
|
}
|
|
/**
|
|
* Immediately enables logging at the specified log level.
|
|
* @param level The log level to enable for logging.
|
|
* Options from most verbose to least verbose are:
|
|
* - verbose
|
|
* - info
|
|
* - warning
|
|
* - error
|
|
*/
|
|
function setLogLevel(level) {
|
|
var e_1, _a;
|
|
if (level && !isAzureLogLevel(level)) {
|
|
throw new Error("Unknown log level '" + level + "'. Acceptable values: " + AZURE_LOG_LEVELS.join(","));
|
|
}
|
|
azureLogLevel = level;
|
|
var enabledNamespaces = [];
|
|
try {
|
|
for (var registeredLoggers_1 = tslib.__values(registeredLoggers), registeredLoggers_1_1 = registeredLoggers_1.next(); !registeredLoggers_1_1.done; registeredLoggers_1_1 = registeredLoggers_1.next()) {
|
|
var logger = registeredLoggers_1_1.value;
|
|
if (shouldEnable(logger)) {
|
|
enabledNamespaces.push(logger.namespace);
|
|
}
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (registeredLoggers_1_1 && !registeredLoggers_1_1.done && (_a = registeredLoggers_1.return)) _a.call(registeredLoggers_1);
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
debugObj.enable(enabledNamespaces.join(","));
|
|
}
|
|
/**
|
|
* Retrieves the currently specified log level.
|
|
*/
|
|
function getLogLevel() {
|
|
return azureLogLevel;
|
|
}
|
|
var levelMap = {
|
|
verbose: 400,
|
|
info: 300,
|
|
warning: 200,
|
|
error: 100
|
|
};
|
|
/**
|
|
* Creates a logger for use by the Azure SDKs that inherits from `AzureLogger`.
|
|
* @param namespace The name of the SDK package.
|
|
* @ignore
|
|
*/
|
|
function createClientLogger(namespace) {
|
|
var clientRootLogger = AzureLogger.extend(namespace);
|
|
patchLogMethod(AzureLogger, clientRootLogger);
|
|
return {
|
|
error: createLogger(clientRootLogger, "error"),
|
|
warning: createLogger(clientRootLogger, "warning"),
|
|
info: createLogger(clientRootLogger, "info"),
|
|
verbose: createLogger(clientRootLogger, "verbose")
|
|
};
|
|
}
|
|
function patchLogMethod(parent, child) {
|
|
child.log = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
parent.log.apply(parent, tslib.__spread(args));
|
|
};
|
|
}
|
|
function createLogger(parent, level) {
|
|
var logger = Object.assign(parent.extend(level), {
|
|
level: level
|
|
});
|
|
patchLogMethod(parent, logger);
|
|
if (shouldEnable(logger)) {
|
|
var enabledNamespaces = debugObj.disable();
|
|
debugObj.enable(enabledNamespaces + "," + logger.namespace);
|
|
}
|
|
registeredLoggers.add(logger);
|
|
return logger;
|
|
}
|
|
function shouldEnable(logger) {
|
|
if (azureLogLevel && levelMap[logger.level] <= levelMap[azureLogLevel]) {
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
function isAzureLogLevel(logLevel) {
|
|
return AZURE_LOG_LEVELS.includes(logLevel);
|
|
}
|
|
|
|
exports.AzureLogger = AzureLogger;
|
|
exports.createClientLogger = createClientLogger;
|
|
exports.getLogLevel = getLogLevel;
|
|
exports.setLogLevel = setLogLevel;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 931:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var CacheFilename;
|
|
(function (CacheFilename) {
|
|
CacheFilename["Gzip"] = "cache.tgz";
|
|
CacheFilename["Zstd"] = "cache.tzst";
|
|
})(CacheFilename = exports.CacheFilename || (exports.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 = exports.CompressionMethod || (exports.CompressionMethod = {}));
|
|
// 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.
|
|
exports.SocketTimeout = 5000;
|
|
//# sourceMappingURL=constants.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 932:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* An enumeration of canonical status codes.
|
|
*/
|
|
var CanonicalCode;
|
|
(function (CanonicalCode) {
|
|
/**
|
|
* Not an error; returned on success
|
|
*/
|
|
CanonicalCode[CanonicalCode["OK"] = 0] = "OK";
|
|
/**
|
|
* The operation was cancelled (typically by the caller).
|
|
*/
|
|
CanonicalCode[CanonicalCode["CANCELLED"] = 1] = "CANCELLED";
|
|
/**
|
|
* Unknown error. An example of where this error may be returned is
|
|
* if a status value received from another address space belongs to
|
|
* an error-space that is not known in this address space. Also
|
|
* errors raised by APIs that do not return enough error information
|
|
* may be converted to this error.
|
|
*/
|
|
CanonicalCode[CanonicalCode["UNKNOWN"] = 2] = "UNKNOWN";
|
|
/**
|
|
* Client specified an invalid argument. Note that this differs
|
|
* from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments
|
|
* that are problematic regardless of the state of the system
|
|
* (e.g., a malformed file name).
|
|
*/
|
|
CanonicalCode[CanonicalCode["INVALID_ARGUMENT"] = 3] = "INVALID_ARGUMENT";
|
|
/**
|
|
* Deadline expired before operation could complete. For operations
|
|
* that change the state of the system, this error may be returned
|
|
* even if the operation has completed successfully. For example, a
|
|
* successful response from a server could have been delayed long
|
|
* enough for the deadline to expire.
|
|
*/
|
|
CanonicalCode[CanonicalCode["DEADLINE_EXCEEDED"] = 4] = "DEADLINE_EXCEEDED";
|
|
/**
|
|
* Some requested entity (e.g., file or directory) was not found.
|
|
*/
|
|
CanonicalCode[CanonicalCode["NOT_FOUND"] = 5] = "NOT_FOUND";
|
|
/**
|
|
* Some entity that we attempted to create (e.g., file or directory)
|
|
* already exists.
|
|
*/
|
|
CanonicalCode[CanonicalCode["ALREADY_EXISTS"] = 6] = "ALREADY_EXISTS";
|
|
/**
|
|
* The caller does not have permission to execute the specified
|
|
* operation. PERMISSION_DENIED must not be used for rejections
|
|
* caused by exhausting some resource (use RESOURCE_EXHAUSTED
|
|
* instead for those errors). PERMISSION_DENIED must not be
|
|
* used if the caller can not be identified (use UNAUTHENTICATED
|
|
* instead for those errors).
|
|
*/
|
|
CanonicalCode[CanonicalCode["PERMISSION_DENIED"] = 7] = "PERMISSION_DENIED";
|
|
/**
|
|
* Some resource has been exhausted, perhaps a per-user quota, or
|
|
* perhaps the entire file system is out of space.
|
|
*/
|
|
CanonicalCode[CanonicalCode["RESOURCE_EXHAUSTED"] = 8] = "RESOURCE_EXHAUSTED";
|
|
/**
|
|
* Operation was rejected because the system is not in a state
|
|
* required for the operation's execution. For example, directory
|
|
* to be deleted may be non-empty, an rmdir operation is applied to
|
|
* a non-directory, etc.
|
|
*
|
|
* A litmus test that may help a service implementor in deciding
|
|
* between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE:
|
|
*
|
|
* - Use UNAVAILABLE if the client can retry just the failing call.
|
|
* - Use ABORTED if the client should retry at a higher-level
|
|
* (e.g., restarting a read-modify-write sequence).
|
|
* - Use FAILED_PRECONDITION if the client should not retry until
|
|
* the system state has been explicitly fixed. E.g., if an "rmdir"
|
|
* fails because the directory is non-empty, FAILED_PRECONDITION
|
|
* should be returned since the client should not retry unless
|
|
* they have first fixed up the directory by deleting files from it.
|
|
* - Use FAILED_PRECONDITION if the client performs conditional
|
|
* REST Get/Update/Delete on a resource and the resource on the
|
|
* server does not match the condition. E.g., conflicting
|
|
* read-modify-write on the same resource.
|
|
*/
|
|
CanonicalCode[CanonicalCode["FAILED_PRECONDITION"] = 9] = "FAILED_PRECONDITION";
|
|
/**
|
|
* The operation was aborted, typically due to a concurrency issue
|
|
* like sequencer check failures, transaction aborts, etc.
|
|
*
|
|
* See litmus test above for deciding between FAILED_PRECONDITION,
|
|
* ABORTED, and UNAVAILABLE.
|
|
*/
|
|
CanonicalCode[CanonicalCode["ABORTED"] = 10] = "ABORTED";
|
|
/**
|
|
* Operation was attempted past the valid range. E.g., seeking or
|
|
* reading past end of file.
|
|
*
|
|
* Unlike INVALID_ARGUMENT, this error indicates a problem that may
|
|
* be fixed if the system state changes. For example, a 32-bit file
|
|
* system will generate INVALID_ARGUMENT if asked to read at an
|
|
* offset that is not in the range [0,2^32-1], but it will generate
|
|
* OUT_OF_RANGE if asked to read from an offset past the current
|
|
* file size.
|
|
*
|
|
* There is a fair bit of overlap between FAILED_PRECONDITION and
|
|
* OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific
|
|
* error) when it applies so that callers who are iterating through
|
|
* a space can easily look for an OUT_OF_RANGE error to detect when
|
|
* they are done.
|
|
*/
|
|
CanonicalCode[CanonicalCode["OUT_OF_RANGE"] = 11] = "OUT_OF_RANGE";
|
|
/**
|
|
* Operation is not implemented or not supported/enabled in this service.
|
|
*/
|
|
CanonicalCode[CanonicalCode["UNIMPLEMENTED"] = 12] = "UNIMPLEMENTED";
|
|
/**
|
|
* Internal errors. Means some invariants expected by underlying
|
|
* system has been broken. If you see one of these errors,
|
|
* something is very broken.
|
|
*/
|
|
CanonicalCode[CanonicalCode["INTERNAL"] = 13] = "INTERNAL";
|
|
/**
|
|
* The service is currently unavailable. This is a most likely a
|
|
* transient condition and may be corrected by retrying with
|
|
* a backoff.
|
|
*
|
|
* See litmus test above for deciding between FAILED_PRECONDITION,
|
|
* ABORTED, and UNAVAILABLE.
|
|
*/
|
|
CanonicalCode[CanonicalCode["UNAVAILABLE"] = 14] = "UNAVAILABLE";
|
|
/**
|
|
* Unrecoverable data loss or corruption.
|
|
*/
|
|
CanonicalCode[CanonicalCode["DATA_LOSS"] = 15] = "DATA_LOSS";
|
|
/**
|
|
* The request does not have valid authentication credentials for the
|
|
* operation.
|
|
*/
|
|
CanonicalCode[CanonicalCode["UNAUTHENTICATED"] = 16] = "UNAUTHENTICATED";
|
|
})(CanonicalCode = exports.CanonicalCode || (exports.CanonicalCode = {}));
|
|
//# sourceMappingURL=status.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 939:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var abort = __webpack_require__(566)
|
|
, async = __webpack_require__(751)
|
|
;
|
|
|
|
// API
|
|
module.exports = terminator;
|
|
|
|
/**
|
|
* Terminates jobs in the attached state context
|
|
*
|
|
* @this AsyncKitState#
|
|
* @param {function} callback - final callback to invoke after termination
|
|
*/
|
|
function terminator(callback)
|
|
{
|
|
if (!Object.keys(this.jobs).length)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// fast forward iteration index
|
|
this.index = this.size;
|
|
|
|
// abort jobs
|
|
abort(this);
|
|
|
|
// send back results we have so far
|
|
async(callback)(null, this.results);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 940:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
/**
|
|
* Convert array of 16 byte values to UUID string format of the form:
|
|
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
*/
|
|
const byteToHex = [];
|
|
|
|
for (let i = 0; i < 256; ++i) {
|
|
byteToHex.push((i + 0x100).toString(16).substr(1));
|
|
}
|
|
|
|
function bytesToUuid(buf, offset_) {
|
|
const offset = offset_ || 0; // Note: Be careful editing this code! It's been tuned for performance
|
|
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
|
|
return (byteToHex[buf[offset + 0]] + byteToHex[buf[offset + 1]] + byteToHex[buf[offset + 2]] + byteToHex[buf[offset + 3]] + '-' + byteToHex[buf[offset + 4]] + byteToHex[buf[offset + 5]] + '-' + byteToHex[buf[offset + 6]] + byteToHex[buf[offset + 7]] + '-' + byteToHex[buf[offset + 8]] + byteToHex[buf[offset + 9]] + '-' + byteToHex[buf[offset + 10]] + byteToHex[buf[offset + 11]] + byteToHex[buf[offset + 12]] + byteToHex[buf[offset + 13]] + byteToHex[buf[offset + 14]] + byteToHex[buf[offset + 15]]).toLowerCase();
|
|
}
|
|
|
|
var _default = bytesToUuid;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
|
|
/***/ 950:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const url = __webpack_require__(835);
|
|
function getProxyUrl(reqUrl) {
|
|
let usingSsl = reqUrl.protocol === 'https:';
|
|
let proxyUrl;
|
|
if (checkBypass(reqUrl)) {
|
|
return proxyUrl;
|
|
}
|
|
let proxyVar;
|
|
if (usingSsl) {
|
|
proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
|
|
}
|
|
else {
|
|
proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
|
|
}
|
|
if (proxyVar) {
|
|
proxyUrl = url.parse(proxyVar);
|
|
}
|
|
return proxyUrl;
|
|
}
|
|
exports.getProxyUrl = getProxyUrl;
|
|
function checkBypass(reqUrl) {
|
|
if (!reqUrl.hostname) {
|
|
return false;
|
|
}
|
|
let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
|
|
if (!noProxy) {
|
|
return false;
|
|
}
|
|
// Determine the request port
|
|
let reqPort;
|
|
if (reqUrl.port) {
|
|
reqPort = Number(reqUrl.port);
|
|
}
|
|
else if (reqUrl.protocol === 'http:') {
|
|
reqPort = 80;
|
|
}
|
|
else if (reqUrl.protocol === 'https:') {
|
|
reqPort = 443;
|
|
}
|
|
// Format the request hostname and hostname with port
|
|
let upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
|
if (typeof reqPort === 'number') {
|
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
|
}
|
|
// Compare request host against noproxy
|
|
for (let upperNoProxyItem of noProxy
|
|
.split(',')
|
|
.map(x => x.trim().toUpperCase())
|
|
.filter(x => x)) {
|
|
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
exports.checkBypass = checkBypass;
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 956:
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLDummy, XMLNode,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
XMLNode = __webpack_require__(855);
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
module.exports = XMLDummy = (function(superClass) {
|
|
extend(XMLDummy, superClass);
|
|
|
|
function XMLDummy(parent) {
|
|
XMLDummy.__super__.constructor.call(this, parent);
|
|
this.type = NodeType.Dummy;
|
|
}
|
|
|
|
XMLDummy.prototype.clone = function() {
|
|
return Object.create(this);
|
|
};
|
|
|
|
XMLDummy.prototype.toString = function(options) {
|
|
return '';
|
|
};
|
|
|
|
return XMLDummy;
|
|
|
|
})(XMLNode);
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 972:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const assert = __webpack_require__(357);
|
|
const path = __webpack_require__(622);
|
|
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 = path.dirname(p);
|
|
// Trim trailing slash for Windows UNC root, e.g. \\hello\world\
|
|
if (IS_WINDOWS && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) {
|
|
result = safeTrimTrailingSeparator(result);
|
|
}
|
|
return result;
|
|
}
|
|
exports.dirname = dirname;
|
|
/**
|
|
* 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) {
|
|
assert(root, `ensureAbsoluteRoot parameter 'root' must not be empty`);
|
|
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();
|
|
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();
|
|
assert(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);
|
|
return `${cwd[0]}:\\${itemPath.substr(1)}`;
|
|
}
|
|
}
|
|
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 += path.sep;
|
|
}
|
|
return root + itemPath;
|
|
}
|
|
exports.ensureAbsoluteRoot = ensureAbsoluteRoot;
|
|
/**
|
|
* 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) {
|
|
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('/');
|
|
}
|
|
exports.hasAbsoluteRoot = hasAbsoluteRoot;
|
|
/**
|
|
* 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) {
|
|
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('/');
|
|
}
|
|
exports.hasRoot = hasRoot;
|
|
/**
|
|
* 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, '/');
|
|
}
|
|
exports.normalizeSeparators = normalizeSeparators;
|
|
/**
|
|
* 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(path.sep)) {
|
|
return p;
|
|
}
|
|
// Check '/' on Linux/macOS and '\' on Windows
|
|
if (p === 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);
|
|
}
|
|
exports.safeTrimTrailingSeparator = safeTrimTrailingSeparator;
|
|
//# sourceMappingURL=internal-path-helper.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 975:
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*!
|
|
* Copyright 2019, OpenTelemetry Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/**
|
|
* An enumeration that represents global trace flags. These flags are
|
|
* propagated to all child {@link Span}. These determine features such as
|
|
* whether a Span should be traced. It is implemented as a bitmask.
|
|
*/
|
|
var TraceFlags;
|
|
(function (TraceFlags) {
|
|
/** Represents no flag set. */
|
|
TraceFlags[TraceFlags["NONE"] = 0] = "NONE";
|
|
/** Bit to represent whether trace is sampled in trace flags. */
|
|
TraceFlags[TraceFlags["SAMPLED"] = 1] = "SAMPLED";
|
|
})(TraceFlags = exports.TraceFlags || (exports.TraceFlags = {}));
|
|
//# sourceMappingURL=trace_flags.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 986:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
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());
|
|
});
|
|
};
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
result["default"] = mod;
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const tr = __importStar(__webpack_require__(9));
|
|
/**
|
|
* Exec a command.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with return code
|
|
*
|
|
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
|
* @param args optional arguments for tool. Escaping is handled by the lib.
|
|
* @param options optional exec options. See ExecOptions
|
|
* @returns Promise<number> exit code
|
|
*/
|
|
function exec(commandLine, args, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const commandArgs = tr.argStringToArray(commandLine);
|
|
if (commandArgs.length === 0) {
|
|
throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
|
|
}
|
|
// Path to tool to execute should be first arg
|
|
const toolPath = commandArgs[0];
|
|
args = commandArgs.slice(1).concat(args || []);
|
|
const runner = new tr.ToolRunner(toolPath, args, options);
|
|
return runner.exec();
|
|
});
|
|
}
|
|
exports.exec = exec;
|
|
//# sourceMappingURL=exec.js.map
|
|
|
|
/***/ }),
|
|
|
|
/***/ 992:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
"use strict";
|
|
var builder, defaults, parser, processors,
|
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
hasProp = {}.hasOwnProperty;
|
|
|
|
defaults = __webpack_require__(791);
|
|
|
|
builder = __webpack_require__(476);
|
|
|
|
parser = __webpack_require__(885);
|
|
|
|
processors = __webpack_require__(350);
|
|
|
|
exports.defaults = defaults.defaults;
|
|
|
|
exports.processors = processors;
|
|
|
|
exports.ValidationError = (function(superClass) {
|
|
extend(ValidationError, superClass);
|
|
|
|
function ValidationError(message) {
|
|
this.message = message;
|
|
}
|
|
|
|
return ValidationError;
|
|
|
|
})(Error);
|
|
|
|
exports.Builder = builder.Builder;
|
|
|
|
exports.Parser = parser.Parser;
|
|
|
|
exports.parseString = parser.parseString;
|
|
|
|
exports.parseStringPromise = parser.parseStringPromise;
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 999:
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
var uuid = __webpack_require__(585);
|
|
var tslib = __webpack_require__(865);
|
|
var tough = __webpack_require__(393);
|
|
var http = __webpack_require__(605);
|
|
var https = __webpack_require__(211);
|
|
__webpack_require__(454);
|
|
var abortController = __webpack_require__(106);
|
|
var FormData = _interopDefault(__webpack_require__(790));
|
|
var util = __webpack_require__(669);
|
|
var stream = __webpack_require__(794);
|
|
var tunnel = __webpack_require__(413);
|
|
var coreAuth = __webpack_require__(229);
|
|
var logger$1 = __webpack_require__(928);
|
|
var xml2js = __webpack_require__(992);
|
|
var os = __webpack_require__(87);
|
|
var coreTracing = __webpack_require__(263);
|
|
var api = __webpack_require__(440);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* A collection of HttpHeaders that can be sent with a HTTP request.
|
|
*/
|
|
function getHeaderKey(headerName) {
|
|
return headerName.toLowerCase();
|
|
}
|
|
function isHttpHeadersLike(object) {
|
|
if (!object || typeof object !== "object") {
|
|
return false;
|
|
}
|
|
if (typeof object.rawHeaders === "function" &&
|
|
typeof object.clone === "function" &&
|
|
typeof object.get === "function" &&
|
|
typeof object.set === "function" &&
|
|
typeof object.contains === "function" &&
|
|
typeof object.remove === "function" &&
|
|
typeof object.headersArray === "function" &&
|
|
typeof object.headerValues === "function" &&
|
|
typeof object.headerNames === "function" &&
|
|
typeof object.toJson === "function") {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* A collection of HTTP header key/value pairs.
|
|
*/
|
|
var HttpHeaders = /** @class */ (function () {
|
|
function HttpHeaders(rawHeaders) {
|
|
this._headersMap = {};
|
|
if (rawHeaders) {
|
|
for (var 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.
|
|
*/
|
|
HttpHeaders.prototype.set = function (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.
|
|
*/
|
|
HttpHeaders.prototype.get = function (headerName) {
|
|
var 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.
|
|
*/
|
|
HttpHeaders.prototype.contains = function (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.
|
|
*/
|
|
HttpHeaders.prototype.remove = function (headerName) {
|
|
var result = this.contains(headerName);
|
|
delete this._headersMap[getHeaderKey(headerName)];
|
|
return result;
|
|
};
|
|
/**
|
|
* Get the headers that are contained this collection as an object.
|
|
*/
|
|
HttpHeaders.prototype.rawHeaders = function () {
|
|
var result = {};
|
|
for (var headerKey in this._headersMap) {
|
|
var header = this._headersMap[headerKey];
|
|
result[header.name.toLowerCase()] = header.value;
|
|
}
|
|
return result;
|
|
};
|
|
/**
|
|
* Get the headers that are contained in this collection as an array.
|
|
*/
|
|
HttpHeaders.prototype.headersArray = function () {
|
|
var headers = [];
|
|
for (var headerKey in this._headersMap) {
|
|
headers.push(this._headersMap[headerKey]);
|
|
}
|
|
return headers;
|
|
};
|
|
/**
|
|
* Get the header names that are contained in this collection.
|
|
*/
|
|
HttpHeaders.prototype.headerNames = function () {
|
|
var headerNames = [];
|
|
var headers = this.headersArray();
|
|
for (var i = 0; i < headers.length; ++i) {
|
|
headerNames.push(headers[i].name);
|
|
}
|
|
return headerNames;
|
|
};
|
|
/**
|
|
* Get the header values that are contained in this collection.
|
|
*/
|
|
HttpHeaders.prototype.headerValues = function () {
|
|
var headerValues = [];
|
|
var headers = this.headersArray();
|
|
for (var i = 0; i < headers.length; ++i) {
|
|
headerValues.push(headers[i].value);
|
|
}
|
|
return headerValues;
|
|
};
|
|
/**
|
|
* Get the JSON object representation of this HTTP header collection.
|
|
*/
|
|
HttpHeaders.prototype.toJson = function () {
|
|
return this.rawHeaders();
|
|
};
|
|
/**
|
|
* Get the string representation of this HTTP header collection.
|
|
*/
|
|
HttpHeaders.prototype.toString = function () {
|
|
return JSON.stringify(this.toJson());
|
|
};
|
|
/**
|
|
* Create a deep clone/copy of this HttpHeaders collection.
|
|
*/
|
|
HttpHeaders.prototype.clone = function () {
|
|
return new HttpHeaders(this.rawHeaders());
|
|
};
|
|
return HttpHeaders;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Encodes a string in base64 format.
|
|
* @param value the string to encode
|
|
*/
|
|
function encodeString(value) {
|
|
return Buffer.from(value).toString("base64");
|
|
}
|
|
/**
|
|
* Encodes a byte array in base64 format.
|
|
* @param value the Uint8Aray to encode
|
|
*/
|
|
function encodeByteArray(value) {
|
|
// Buffer.from accepts <ArrayBuffer> | <SharedArrayBuffer>-- the TypeScript definition is off here
|
|
// https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length
|
|
var bufferValue = value instanceof Buffer ? value : Buffer.from(value.buffer);
|
|
return bufferValue.toString("base64");
|
|
}
|
|
/**
|
|
* Decodes a base64 string into a byte array.
|
|
* @param value the base64 string to decode
|
|
*/
|
|
function decodeString(value) {
|
|
return Buffer.from(value, "base64");
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
var Constants = {
|
|
/**
|
|
* The core-http version
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
coreHttpVersion: "1.1.4",
|
|
/**
|
|
* Specifies HTTP.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
HTTP: "http:",
|
|
/**
|
|
* Specifies HTTPS.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
HTTPS: "https:",
|
|
/**
|
|
* Specifies HTTP Proxy.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
HTTP_PROXY: "HTTP_PROXY",
|
|
/**
|
|
* Specifies HTTPS Proxy.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
HTTPS_PROXY: "HTTPS_PROXY",
|
|
HttpConstants: {
|
|
/**
|
|
* Http Verbs
|
|
*
|
|
* @const
|
|
* @enum {string}
|
|
*/
|
|
HttpVerbs: {
|
|
PUT: "PUT",
|
|
GET: "GET",
|
|
DELETE: "DELETE",
|
|
POST: "POST",
|
|
MERGE: "MERGE",
|
|
HEAD: "HEAD",
|
|
PATCH: "PATCH"
|
|
},
|
|
StatusCodes: {
|
|
TooManyRequests: 429
|
|
}
|
|
},
|
|
/**
|
|
* Defines constants for use with HTTP headers.
|
|
*/
|
|
HeaderConstants: {
|
|
/**
|
|
* The Authorization header.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
AUTHORIZATION: "authorization",
|
|
AUTHORIZATION_SCHEME: "Bearer",
|
|
/**
|
|
* The Retry-After response-header field can be used with a 503 (Service
|
|
* Unavailable) or 349 (Too Many Requests) responses to indicate how long
|
|
* the service is expected to be unavailable to the requesting client.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
RETRY_AFTER: "Retry-After",
|
|
/**
|
|
* The UserAgent header.
|
|
*
|
|
* @const
|
|
* @type {string}
|
|
*/
|
|
USER_AGENT: "User-Agent"
|
|
}
|
|
};
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var 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;
|
|
/**
|
|
* A constant that indicates whether the environment is node.js or browser based.
|
|
*/
|
|
var isNode = typeof process !== "undefined" &&
|
|
!!process.version &&
|
|
!!process.versions &&
|
|
!!process.versions.node;
|
|
/**
|
|
* Encodes an URI.
|
|
*
|
|
* @param {string} uri The URI to be encoded.
|
|
* @return {string} The encoded URI.
|
|
*/
|
|
function encodeUri(uri) {
|
|
return encodeURIComponent(uri)
|
|
.replace(/!/g, "%21")
|
|
.replace(/"/g, "%27")
|
|
.replace(/\(/g, "%28")
|
|
.replace(/\)/g, "%29")
|
|
.replace(/\*/g, "%2A");
|
|
}
|
|
/**
|
|
* Returns a stripped version of the Http Response which only contains body,
|
|
* headers and the status.
|
|
*
|
|
* @param {HttpOperationResponse} response The Http Response
|
|
*
|
|
* @return {object} The stripped version of Http Response.
|
|
*/
|
|
function stripResponse(response) {
|
|
var strippedResponse = {};
|
|
strippedResponse.body = response.bodyAsText;
|
|
strippedResponse.headers = response.headers;
|
|
strippedResponse.status = response.status;
|
|
return strippedResponse;
|
|
}
|
|
/**
|
|
* Returns a stripped version of the Http Request that does not contain the
|
|
* Authorization header.
|
|
*
|
|
* @param {WebResourceLike} request The Http Request object
|
|
*
|
|
* @return {WebResourceLike} The stripped version of Http Request.
|
|
*/
|
|
function stripRequest(request) {
|
|
var strippedRequest = request.clone();
|
|
if (strippedRequest.headers) {
|
|
strippedRequest.headers.remove("authorization");
|
|
}
|
|
return strippedRequest;
|
|
}
|
|
/**
|
|
* Validates the given uuid as a string
|
|
*
|
|
* @param {string} uuid The uuid as a string that needs to be validated
|
|
*
|
|
* @return {boolean} True if the uuid is valid; false otherwise.
|
|
*/
|
|
function isValidUuid(uuid) {
|
|
return validUuidRegex.test(uuid);
|
|
}
|
|
/**
|
|
* Generated UUID
|
|
*
|
|
* @return {string} RFC4122 v4 UUID.
|
|
*/
|
|
function generateUuid() {
|
|
return uuid.v4();
|
|
}
|
|
/**
|
|
* Executes an array of promises sequentially. Inspiration of this method is here:
|
|
* https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!
|
|
*
|
|
* @param {Array} promiseFactories An array of promise factories(A function that return a promise)
|
|
*
|
|
* @param {any} [kickstart] Input to the first promise that is used to kickstart the promise chain.
|
|
* If not provided then the promise chain starts with undefined.
|
|
*
|
|
* @return A chain of resolved or rejected promises
|
|
*/
|
|
function executePromisesSequentially(promiseFactories, kickstart) {
|
|
var result = Promise.resolve(kickstart);
|
|
promiseFactories.forEach(function (promiseFactory) {
|
|
result = result.then(promiseFactory);
|
|
});
|
|
return result;
|
|
}
|
|
/**
|
|
* A wrapper for setTimeout that resolves a promise after t milliseconds.
|
|
* @param {number} t The number of milliseconds to be delayed.
|
|
* @param {T} value The value to be resolved with after a timeout of t milliseconds.
|
|
* @returns {Promise<T>} Resolved promise
|
|
*/
|
|
function delay(t, value) {
|
|
return new Promise(function (resolve) { return setTimeout(function () { return resolve(value); }, t); });
|
|
}
|
|
/**
|
|
* Converts a Promise to a callback.
|
|
* @param {Promise<any>} promise The Promise to be converted to a callback
|
|
* @returns {Function} A function that takes the callback (cb: Function): void
|
|
* @deprecated generated code should instead depend on responseToBody
|
|
*/
|
|
function promiseToCallback(promise) {
|
|
if (typeof promise.then !== "function") {
|
|
throw new Error("The provided input is not a Promise.");
|
|
}
|
|
return function (cb) {
|
|
promise
|
|
.then(function (data) {
|
|
// eslint-disable-next-line promise/no-callback-in-promise
|
|
return cb(undefined, data);
|
|
})
|
|
.catch(function (err) {
|
|
// eslint-disable-next-line promise/no-callback-in-promise
|
|
cb(err);
|
|
});
|
|
};
|
|
}
|
|
/**
|
|
* Converts a Promise to a service callback.
|
|
* @param {Promise<HttpOperationResponse>} promise - The Promise of HttpOperationResponse to be converted to a service callback
|
|
* @returns {Function} A function that takes the service callback (cb: ServiceCallback<T>): void
|
|
*/
|
|
function promiseToServiceCallback(promise) {
|
|
if (typeof promise.then !== "function") {
|
|
throw new Error("The provided input is not a Promise.");
|
|
}
|
|
return function (cb) {
|
|
promise
|
|
.then(function (data) {
|
|
return process.nextTick(cb, undefined, data.parsedBody, data.request, data);
|
|
})
|
|
.catch(function (err) {
|
|
process.nextTick(cb, err);
|
|
});
|
|
};
|
|
}
|
|
function prepareXMLRootList(obj, elementName) {
|
|
var _a;
|
|
if (!Array.isArray(obj)) {
|
|
obj = [obj];
|
|
}
|
|
return _a = {}, _a[elementName] = obj, _a;
|
|
}
|
|
/**
|
|
* Applies the properties on the prototype of sourceCtors to the prototype of targetCtor
|
|
* @param {object} targetCtor The target object on which the properties need to be applied.
|
|
* @param {Array<object>} sourceCtors An array of source objects from which the properties need to be taken.
|
|
*/
|
|
function applyMixins(targetCtor, sourceCtors) {
|
|
sourceCtors.forEach(function (sourceCtors) {
|
|
Object.getOwnPropertyNames(sourceCtors.prototype).forEach(function (name) {
|
|
targetCtor.prototype[name] = sourceCtors.prototype[name];
|
|
});
|
|
});
|
|
}
|
|
var validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
|
|
/**
|
|
* Indicates whether the given string is in ISO 8601 format.
|
|
* @param {string} value The value to be validated for ISO 8601 duration format.
|
|
* @return {boolean} `true` if valid, `false` otherwise.
|
|
*/
|
|
function isDuration(value) {
|
|
return validateISODuration.test(value);
|
|
}
|
|
/**
|
|
* Replace all of the instances of searchValue in value with the provided replaceValue.
|
|
* @param {string | undefined} value The value to search and replace in.
|
|
* @param {string} searchValue The value to search for in the value argument.
|
|
* @param {string} replaceValue The value to replace searchValue with in the value argument.
|
|
* @returns {string | undefined} The value where each instance of searchValue was replaced with replacedValue.
|
|
*/
|
|
function replaceAll(value, searchValue, replaceValue) {
|
|
return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || "");
|
|
}
|
|
/**
|
|
* Determines whether the given entity is a basic/primitive type
|
|
* (string, number, boolean, null, undefined).
|
|
* @param {any} value Any entity
|
|
* @return {boolean} - true is it is primitive type, false otherwise.
|
|
*/
|
|
function isPrimitiveType(value) {
|
|
return (typeof value !== "object" && typeof value !== "function") || value === null;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var Serializer = /** @class */ (function () {
|
|
function Serializer(modelMappers, isXML) {
|
|
if (modelMappers === void 0) { modelMappers = {}; }
|
|
this.modelMappers = modelMappers;
|
|
this.isXML = isXML;
|
|
}
|
|
Serializer.prototype.validateConstraints = function (mapper, value, objectName) {
|
|
var failValidation = function (constraintName, constraintValue) {
|
|
throw new Error("\"" + objectName + "\" with value \"" + value + "\" should satisfy the constraint \"" + constraintName + "\": " + constraintValue + ".");
|
|
};
|
|
if (mapper.constraints && value != undefined) {
|
|
var _a = mapper.constraints, ExclusiveMaximum = _a.ExclusiveMaximum, ExclusiveMinimum = _a.ExclusiveMinimum, InclusiveMaximum = _a.InclusiveMaximum, InclusiveMinimum = _a.InclusiveMinimum, MaxItems = _a.MaxItems, MaxLength = _a.MaxLength, MinItems = _a.MinItems, MinLength = _a.MinLength, MultipleOf = _a.MultipleOf, Pattern = _a.Pattern, UniqueItems = _a.UniqueItems;
|
|
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) {
|
|
var pattern = typeof Pattern === "string" ? new RegExp(Pattern) : Pattern;
|
|
if (typeof value !== "string" || value.match(pattern) === null) {
|
|
failValidation("Pattern", Pattern);
|
|
}
|
|
}
|
|
if (UniqueItems &&
|
|
value.some(function (item, i, ar) { return ar.indexOf(item) !== i; })) {
|
|
failValidation("UniqueItems", UniqueItems);
|
|
}
|
|
}
|
|
};
|
|
/**
|
|
* Serialize the given object based on its metadata defined in the mapper
|
|
*
|
|
* @param {Mapper} mapper The mapper which defines the metadata of the serializable object
|
|
*
|
|
* @param {object|string|Array|number|boolean|Date|stream} object A valid Javascript object to be serialized
|
|
*
|
|
* @param {string} objectName Name of the serialized object
|
|
*
|
|
* @returns {object|string|Array|number|boolean|Date|stream} A valid serialized Javascript object
|
|
*/
|
|
Serializer.prototype.serialize = function (mapper, object, objectName) {
|
|
var payload = {};
|
|
var 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
|
|
var required = mapper.required, nullable = mapper.nullable;
|
|
if (required && nullable && object === undefined) {
|
|
throw new Error(objectName + " cannot be undefined.");
|
|
}
|
|
if (required && !nullable && object == undefined) {
|
|
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) {
|
|
payload = object;
|
|
}
|
|
else {
|
|
// Validate Constraints if any
|
|
this.validateConstraints(mapper, object, objectName);
|
|
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) {
|
|
var 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);
|
|
}
|
|
else if (mapperType.match(/^Dictionary$/i) !== null) {
|
|
payload = serializeDictionaryType(this, mapper, object, objectName);
|
|
}
|
|
else if (mapperType.match(/^Composite$/i) !== null) {
|
|
payload = serializeCompositeType(this, mapper, object, objectName);
|
|
}
|
|
}
|
|
return payload;
|
|
};
|
|
/**
|
|
* Deserialize the given object based on its metadata defined in the mapper
|
|
*
|
|
* @param {object} mapper The mapper which defines the metadata of the serializable object
|
|
*
|
|
* @param {object|string|Array|number|boolean|Date|stream} responseBody A valid Javascript entity to be deserialized
|
|
*
|
|
* @param {string} objectName Name of the deserialized object
|
|
*
|
|
* @returns {object|string|Array|number|boolean|Date|stream} A valid deserialized Javascript object
|
|
*/
|
|
Serializer.prototype.deserialize = function (mapper, responseBody, objectName) {
|
|
if (responseBody == undefined) {
|
|
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;
|
|
}
|
|
var payload;
|
|
var mapperType = mapper.type.name;
|
|
if (!objectName) {
|
|
objectName = mapper.serializedName;
|
|
}
|
|
if (mapperType.match(/^Composite$/i) !== null) {
|
|
payload = deserializeCompositeType(this, mapper, responseBody, objectName);
|
|
}
|
|
else {
|
|
if (this.isXML) {
|
|
/**
|
|
* If the mapper specifies this as a non-composite type value but the responseBody contains
|
|
* both header ("$") and body ("_") properties, then just reduce the responseBody value to
|
|
* the body ("_") property.
|
|
*/
|
|
if (responseBody["$"] != undefined && responseBody["_"] != undefined) {
|
|
responseBody = responseBody["_"];
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
else if (mapperType.match(/^Dictionary$/i) !== null) {
|
|
payload = deserializeDictionaryType(this, mapper, responseBody, objectName);
|
|
}
|
|
}
|
|
if (mapper.isConstant) {
|
|
payload = mapper.defaultValue;
|
|
}
|
|
return payload;
|
|
};
|
|
return Serializer;
|
|
}());
|
|
function trimEnd(str, ch) {
|
|
var 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.
|
|
var 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) {
|
|
var classes = [];
|
|
var partialclass = "";
|
|
if (prop) {
|
|
var subwords = prop.split(".");
|
|
for (var _i = 0, subwords_1 = subwords; _i < subwords_1.length; _i++) {
|
|
var item = subwords_1[_i];
|
|
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) {
|
|
var objectType = typeof value;
|
|
if (objectType !== "string" &&
|
|
objectType !== "function" &&
|
|
!(value instanceof ArrayBuffer) &&
|
|
!ArrayBuffer.isView(value) &&
|
|
!(typeof Blob === "function" && value instanceof Blob)) {
|
|
throw new Error(objectName + " must be a string, Blob, ArrayBuffer, ArrayBufferView, or a function returning NodeJS.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.");
|
|
}
|
|
var isPresent = allowedValues.some(function (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) {
|
|
var returnValue = "";
|
|
if (value != undefined) {
|
|
if (!(value instanceof Uint8Array)) {
|
|
throw new Error(objectName + " must be of type Uint8Array.");
|
|
}
|
|
returnValue = encodeByteArray(value);
|
|
}
|
|
return returnValue;
|
|
}
|
|
function serializeBase64UrlType(objectName, value) {
|
|
var returnValue = "";
|
|
if (value != undefined) {
|
|
if (!(value instanceof Uint8Array)) {
|
|
throw new Error(objectName + " must be of type Uint8Array.");
|
|
}
|
|
returnValue = bufferToBase64Url(value) || "";
|
|
}
|
|
return returnValue;
|
|
}
|
|
function serializeDateTypes(typeName, value, objectName) {
|
|
if (value != undefined) {
|
|
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) {
|
|
if (!Array.isArray(object)) {
|
|
throw new Error(objectName + " must be of type Array.");
|
|
}
|
|
var 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 of type \"object\" in " + objectName + "."));
|
|
}
|
|
var tempArray = [];
|
|
for (var i = 0; i < object.length; i++) {
|
|
tempArray[i] = serializer.serialize(elementType, object[i], objectName);
|
|
}
|
|
return tempArray;
|
|
}
|
|
function serializeDictionaryType(serializer, mapper, object, objectName) {
|
|
if (typeof object !== "object") {
|
|
throw new Error(objectName + " must be of type object.");
|
|
}
|
|
var 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 + "."));
|
|
}
|
|
var tempDictionary = {};
|
|
for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
tempDictionary[key] = serializer.serialize(valueType, object[key], objectName + "." + key);
|
|
}
|
|
return tempDictionary;
|
|
}
|
|
/**
|
|
* 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) {
|
|
var modelProps = mapper.type.modelProperties;
|
|
if (!modelProps) {
|
|
var 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) + "\".");
|
|
}
|
|
var modelMapper = serializer.modelMappers[className];
|
|
if (!modelMapper) {
|
|
throw new Error("mapper() cannot be null or undefined for model \"" + className + "\".");
|
|
}
|
|
modelProps = modelMapper.type.modelProperties;
|
|
if (!modelProps) {
|
|
throw new Error("modelProperties cannot be null or undefined in the " +
|
|
("mapper \"" + JSON.stringify(modelMapper) + "\" of type \"" + className + "\" for object \"" + objectName + "\"."));
|
|
}
|
|
}
|
|
return modelProps;
|
|
}
|
|
function serializeCompositeType(serializer, mapper, object, objectName) {
|
|
var _a;
|
|
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
|
|
mapper = getPolymorphicMapper(serializer, mapper, object, "clientName");
|
|
}
|
|
if (object != undefined) {
|
|
var payload = {};
|
|
var modelProps = resolveModelProperties(serializer, mapper, objectName);
|
|
for (var _i = 0, _b = Object.keys(modelProps); _i < _b.length; _i++) {
|
|
var key = _b[_i];
|
|
var propertyMapper = modelProps[key];
|
|
if (propertyMapper.readOnly) {
|
|
continue;
|
|
}
|
|
var propName = void 0;
|
|
var parentObject = payload;
|
|
if (serializer.isXML) {
|
|
if (propertyMapper.xmlIsWrapped) {
|
|
propName = propertyMapper.xmlName;
|
|
}
|
|
else {
|
|
propName = propertyMapper.xmlElementName || propertyMapper.xmlName;
|
|
}
|
|
}
|
|
else {
|
|
var paths = splitSerializeName(propertyMapper.serializedName);
|
|
propName = paths.pop();
|
|
for (var _c = 0, paths_1 = paths; _c < paths_1.length; _c++) {
|
|
var pathName = paths_1[_c];
|
|
var childObject = parentObject[pathName];
|
|
if (childObject == undefined &&
|
|
(object[key] != undefined || propertyMapper.defaultValue !== undefined)) {
|
|
parentObject[pathName] = {};
|
|
}
|
|
parentObject = parentObject[pathName];
|
|
}
|
|
}
|
|
if (parentObject != undefined) {
|
|
var propertyObjectName = propertyMapper.serializedName !== ""
|
|
? objectName + "." + propertyMapper.serializedName
|
|
: objectName;
|
|
var toSerialize = object[key];
|
|
var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
|
|
if (polymorphicDiscriminator &&
|
|
polymorphicDiscriminator.clientName === key &&
|
|
toSerialize == undefined) {
|
|
toSerialize = mapper.serializedName;
|
|
}
|
|
var serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName);
|
|
if (serializedValue !== undefined && propName != undefined) {
|
|
if (propertyMapper.xmlIsAttribute) {
|
|
// $ is the key attributes are kept under in xml2js.
|
|
// This keeps things simple while preventing name collision
|
|
// with names in user documents.
|
|
parentObject.$ = parentObject.$ || {};
|
|
parentObject.$[propName] = serializedValue;
|
|
}
|
|
else if (propertyMapper.xmlIsWrapped) {
|
|
parentObject[propName] = (_a = {}, _a[propertyMapper.xmlElementName] = serializedValue, _a);
|
|
}
|
|
else {
|
|
parentObject[propName] = serializedValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var additionalPropertiesMapper = mapper.type.additionalProperties;
|
|
if (additionalPropertiesMapper) {
|
|
var propNames = Object.keys(modelProps);
|
|
var _loop_1 = function (clientPropName) {
|
|
var isAdditionalProperty = propNames.every(function (pn) { return pn !== clientPropName; });
|
|
if (isAdditionalProperty) {
|
|
payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]');
|
|
}
|
|
};
|
|
for (var clientPropName in object) {
|
|
_loop_1(clientPropName);
|
|
}
|
|
}
|
|
return payload;
|
|
}
|
|
return object;
|
|
}
|
|
function isSpecialXmlProperty(propertyName) {
|
|
return ["$", "_"].includes(propertyName);
|
|
}
|
|
function deserializeCompositeType(serializer, mapper, responseBody, objectName) {
|
|
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
|
|
mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName");
|
|
}
|
|
var modelProps = resolveModelProperties(serializer, mapper, objectName);
|
|
var instance = {};
|
|
var handledPropertyNames = [];
|
|
for (var _i = 0, _a = Object.keys(modelProps); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
var propertyMapper = modelProps[key];
|
|
var paths = splitSerializeName(modelProps[key].serializedName);
|
|
handledPropertyNames.push(paths[0]);
|
|
var serializedName = propertyMapper.serializedName, xmlName = propertyMapper.xmlName, xmlElementName = propertyMapper.xmlElementName;
|
|
var propertyObjectName = objectName;
|
|
if (serializedName !== "" && serializedName !== undefined) {
|
|
propertyObjectName = objectName + "." + serializedName;
|
|
}
|
|
var headerCollectionPrefix = propertyMapper.headerCollectionPrefix;
|
|
if (headerCollectionPrefix) {
|
|
var dictionary = {};
|
|
for (var _b = 0, _c = Object.keys(responseBody); _b < _c.length; _b++) {
|
|
var headerKey = _c[_b];
|
|
if (headerKey.startsWith(headerCollectionPrefix)) {
|
|
dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName);
|
|
}
|
|
handledPropertyNames.push(headerKey);
|
|
}
|
|
instance[key] = dictionary;
|
|
}
|
|
else if (serializer.isXML) {
|
|
if (propertyMapper.xmlIsAttribute && responseBody.$) {
|
|
instance[key] = serializer.deserialize(propertyMapper, responseBody.$[xmlName], propertyObjectName);
|
|
}
|
|
else {
|
|
var propertyName = xmlElementName || xmlName || serializedName;
|
|
var unwrappedProperty = responseBody[propertyName];
|
|
if (propertyMapper.xmlIsWrapped) {
|
|
unwrappedProperty = responseBody[xmlName];
|
|
unwrappedProperty = unwrappedProperty && unwrappedProperty[xmlElementName];
|
|
var isEmptyWrappedList = unwrappedProperty === undefined;
|
|
if (isEmptyWrappedList) {
|
|
unwrappedProperty = [];
|
|
}
|
|
}
|
|
instance[key] = serializer.deserialize(propertyMapper, unwrappedProperty, propertyObjectName);
|
|
}
|
|
}
|
|
else {
|
|
// deserialize the property if it is present in the provided responseBody instance
|
|
var propertyInstance = void 0;
|
|
var res = responseBody;
|
|
// traversing the object step by step.
|
|
for (var _d = 0, paths_2 = paths; _d < paths_2.length; _d++) {
|
|
var item = paths_2[_d];
|
|
if (!res)
|
|
break;
|
|
res = res[item];
|
|
}
|
|
propertyInstance = res;
|
|
var 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 = mapper.serializedName;
|
|
}
|
|
var serializedValue = void 0;
|
|
// paging
|
|
if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") {
|
|
propertyInstance = responseBody[key];
|
|
instance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);
|
|
}
|
|
else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) {
|
|
serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);
|
|
instance[key] = serializedValue;
|
|
}
|
|
}
|
|
}
|
|
var additionalPropertiesMapper = mapper.type.additionalProperties;
|
|
if (additionalPropertiesMapper) {
|
|
var isAdditionalProperty = function (responsePropName) {
|
|
for (var clientPropName in modelProps) {
|
|
var paths = splitSerializeName(modelProps[clientPropName].serializedName);
|
|
if (paths[0] === responsePropName) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
for (var responsePropName in responseBody) {
|
|
if (isAdditionalProperty(responsePropName)) {
|
|
instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]');
|
|
}
|
|
}
|
|
}
|
|
else if (responseBody) {
|
|
for (var _e = 0, _f = Object.keys(responseBody); _e < _f.length; _e++) {
|
|
var key = _f[_e];
|
|
if (instance[key] === undefined &&
|
|
!handledPropertyNames.includes(key) &&
|
|
!isSpecialXmlProperty(key)) {
|
|
instance[key] = responseBody[key];
|
|
}
|
|
}
|
|
}
|
|
return instance;
|
|
}
|
|
function deserializeDictionaryType(serializer, mapper, responseBody, objectName) {
|
|
var 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) {
|
|
var tempDictionary = {};
|
|
for (var _i = 0, _a = Object.keys(responseBody); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName);
|
|
}
|
|
return tempDictionary;
|
|
}
|
|
return responseBody;
|
|
}
|
|
function deserializeSequenceType(serializer, mapper, responseBody, objectName) {
|
|
var 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 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];
|
|
}
|
|
var tempArray = [];
|
|
for (var i = 0; i < responseBody.length; i++) {
|
|
tempArray[i] = serializer.deserialize(element, responseBody[i], objectName + "[" + i + "]");
|
|
}
|
|
return tempArray;
|
|
}
|
|
return responseBody;
|
|
}
|
|
function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) {
|
|
var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
|
|
if (polymorphicDiscriminator) {
|
|
var discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];
|
|
if (discriminatorName != undefined) {
|
|
var discriminatorValue = object[discriminatorName];
|
|
if (discriminatorValue != undefined) {
|
|
var typeName = mapper.type.uberParent || mapper.type.className;
|
|
var indexDiscriminator = discriminatorValue === typeName
|
|
? discriminatorValue
|
|
: typeName + "." + discriminatorValue;
|
|
var polymorphicMapper = serializer.modelMappers.discriminators[indexDiscriminator];
|
|
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);
|
|
}
|
|
// TODO: why is this here?
|
|
function serializeObject(toSerialize) {
|
|
if (toSerialize == undefined)
|
|
return undefined;
|
|
if (toSerialize instanceof Uint8Array) {
|
|
toSerialize = encodeByteArray(toSerialize);
|
|
return toSerialize;
|
|
}
|
|
else if (toSerialize instanceof Date) {
|
|
return toSerialize.toISOString();
|
|
}
|
|
else if (Array.isArray(toSerialize)) {
|
|
var array = [];
|
|
for (var i = 0; i < toSerialize.length; i++) {
|
|
array.push(serializeObject(toSerialize[i]));
|
|
}
|
|
return array;
|
|
}
|
|
else if (typeof toSerialize === "object") {
|
|
var dictionary = {};
|
|
for (var property in toSerialize) {
|
|
dictionary[property] = serializeObject(toSerialize[property]);
|
|
}
|
|
return dictionary;
|
|
}
|
|
return toSerialize;
|
|
}
|
|
/**
|
|
* Utility function to create a K:V from a list of strings
|
|
*/
|
|
function strEnum(o) {
|
|
var result = {};
|
|
for (var _i = 0, o_1 = o; _i < o_1.length; _i++) {
|
|
var key = o_1[_i];
|
|
result[key] = key;
|
|
}
|
|
return result;
|
|
}
|
|
var MapperType = strEnum([
|
|
"Base64Url",
|
|
"Boolean",
|
|
"ByteArray",
|
|
"Composite",
|
|
"Date",
|
|
"DateTime",
|
|
"DateTimeRfc1123",
|
|
"Dictionary",
|
|
"Enum",
|
|
"Number",
|
|
"Object",
|
|
"Sequence",
|
|
"String",
|
|
"Stream",
|
|
"TimeSpan",
|
|
"UnixTime"
|
|
]);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function isWebResourceLike(object) {
|
|
if (typeof object !== "object") {
|
|
return false;
|
|
}
|
|
if (typeof object.url === "string" &&
|
|
typeof object.method === "string" &&
|
|
typeof object.headers === "object" &&
|
|
isHttpHeadersLike(object.headers) &&
|
|
typeof object.validateRequestProperties === "function" &&
|
|
typeof object.prepare === "function" &&
|
|
typeof object.clone === "function") {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* Creates a new WebResource object.
|
|
*
|
|
* This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary
|
|
* properties to initiate a request.
|
|
*
|
|
* @constructor
|
|
*/
|
|
var WebResource = /** @class */ (function () {
|
|
function WebResource(url, method, body, query, headers, streamResponseBody, withCredentials, abortSignal, timeout, onUploadProgress, onDownloadProgress, proxySettings, keepAlive, decompressResponse) {
|
|
this.streamResponseBody = streamResponseBody;
|
|
this.url = url || "";
|
|
this.method = method || "GET";
|
|
this.headers = isHttpHeadersLike(headers) ? headers : new HttpHeaders(headers);
|
|
this.body = body;
|
|
this.query = query;
|
|
this.formData = undefined;
|
|
this.withCredentials = withCredentials || false;
|
|
this.abortSignal = abortSignal;
|
|
this.timeout = timeout || 0;
|
|
this.onUploadProgress = onUploadProgress;
|
|
this.onDownloadProgress = onDownloadProgress;
|
|
this.proxySettings = proxySettings;
|
|
this.keepAlive = keepAlive;
|
|
this.decompressResponse = decompressResponse;
|
|
this.requestId = this.headers.get("x-ms-client-request-id") || generateUuid();
|
|
}
|
|
/**
|
|
* Validates that the required properties such as method, url, headers["Content-Type"],
|
|
* headers["accept-language"] are defined. It will throw an error if one of the above
|
|
* mentioned properties are not defined.
|
|
*/
|
|
WebResource.prototype.validateRequestProperties = function () {
|
|
if (!this.method) {
|
|
throw new Error("WebResource.method is required.");
|
|
}
|
|
if (!this.url) {
|
|
throw new Error("WebResource.url is required.");
|
|
}
|
|
};
|
|
/**
|
|
* Prepares the request.
|
|
* @param {RequestPrepareOptions} options Options to provide for preparing the request.
|
|
* @returns {WebResource} Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.
|
|
*/
|
|
WebResource.prototype.prepare = function (options) {
|
|
if (!options) {
|
|
throw new Error("options object is required");
|
|
}
|
|
if (options.method === undefined ||
|
|
options.method === null ||
|
|
typeof options.method.valueOf() !== "string") {
|
|
throw new Error("options.method must be a string.");
|
|
}
|
|
if (options.url && options.pathTemplate) {
|
|
throw new Error("options.url and options.pathTemplate are mutually exclusive. Please provide exactly one of them.");
|
|
}
|
|
if ((options.pathTemplate === undefined ||
|
|
options.pathTemplate === null ||
|
|
typeof options.pathTemplate.valueOf() !== "string") &&
|
|
(options.url === undefined ||
|
|
options.url === null ||
|
|
typeof options.url.valueOf() !== "string")) {
|
|
throw new Error("Please provide exactly one of options.pathTemplate or options.url.");
|
|
}
|
|
// set the url if it is provided.
|
|
if (options.url) {
|
|
if (typeof options.url !== "string") {
|
|
throw new Error('options.url must be of type "string".');
|
|
}
|
|
this.url = options.url;
|
|
}
|
|
// set the method
|
|
if (options.method) {
|
|
var validMethods = ["GET", "PUT", "HEAD", "DELETE", "OPTIONS", "POST", "PATCH", "TRACE"];
|
|
if (validMethods.indexOf(options.method.toUpperCase()) === -1) {
|
|
throw new Error('The provided method "' +
|
|
options.method +
|
|
'" is invalid. Supported HTTP methods are: ' +
|
|
JSON.stringify(validMethods));
|
|
}
|
|
}
|
|
this.method = options.method.toUpperCase();
|
|
// construct the url if path template is provided
|
|
if (options.pathTemplate) {
|
|
var pathTemplate_1 = options.pathTemplate, pathParameters_1 = options.pathParameters;
|
|
if (typeof pathTemplate_1 !== "string") {
|
|
throw new Error('options.pathTemplate must be of type "string".');
|
|
}
|
|
if (!options.baseUrl) {
|
|
options.baseUrl = "https://management.azure.com";
|
|
}
|
|
var baseUrl = options.baseUrl;
|
|
var url_1 = baseUrl +
|
|
(baseUrl.endsWith("/") ? "" : "/") +
|
|
(pathTemplate_1.startsWith("/") ? pathTemplate_1.slice(1) : pathTemplate_1);
|
|
var segments = url_1.match(/({[\w-]*\s*[\w-]*})/gi);
|
|
if (segments && segments.length) {
|
|
if (!pathParameters_1) {
|
|
throw new Error("pathTemplate: " + pathTemplate_1 + " has been provided. Hence, options.pathParameters must also be provided.");
|
|
}
|
|
segments.forEach(function (item) {
|
|
var pathParamName = item.slice(1, -1);
|
|
var pathParam = pathParameters_1[pathParamName];
|
|
if (pathParam === null ||
|
|
pathParam === undefined ||
|
|
!(typeof pathParam === "string" || typeof pathParam === "object")) {
|
|
var stringifiedPathParameters = JSON.stringify(pathParameters_1, undefined, 2);
|
|
throw new Error("pathTemplate: " + pathTemplate_1 + " contains the path parameter " + pathParamName +
|
|
(" however, it is not present in parameters: " + stringifiedPathParameters + ".") +
|
|
("The value of the path parameter can either be a \"string\" of the form { " + pathParamName + ": \"some sample value\" } or ") +
|
|
("it can be an \"object\" of the form { \"" + pathParamName + "\": { value: \"some sample value\", skipUrlEncoding: true } }."));
|
|
}
|
|
if (typeof pathParam.valueOf() === "string") {
|
|
url_1 = url_1.replace(item, encodeURIComponent(pathParam));
|
|
}
|
|
if (typeof pathParam.valueOf() === "object") {
|
|
if (!pathParam.value) {
|
|
throw new Error("options.pathParameters[" + pathParamName + "] is of type \"object\" but it does not contain a \"value\" property.");
|
|
}
|
|
if (pathParam.skipUrlEncoding) {
|
|
url_1 = url_1.replace(item, pathParam.value);
|
|
}
|
|
else {
|
|
url_1 = url_1.replace(item, encodeURIComponent(pathParam.value));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
this.url = url_1;
|
|
}
|
|
// append query parameters to the url if they are provided. They can be provided with pathTemplate or url option.
|
|
if (options.queryParameters) {
|
|
var queryParameters = options.queryParameters;
|
|
if (typeof queryParameters !== "object") {
|
|
throw new Error("options.queryParameters must be of type object. It should be a JSON object " +
|
|
"of \"query-parameter-name\" as the key and the \"query-parameter-value\" as the value. " +
|
|
"The \"query-parameter-value\" may be fo type \"string\" or an \"object\" of the form { value: \"query-parameter-value\", skipUrlEncoding: true }.");
|
|
}
|
|
// append question mark if it is not present in the url
|
|
if (this.url && this.url.indexOf("?") === -1) {
|
|
this.url += "?";
|
|
}
|
|
// construct queryString
|
|
var queryParams = [];
|
|
// We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest().
|
|
this.query = {};
|
|
for (var queryParamName in queryParameters) {
|
|
var queryParam = queryParameters[queryParamName];
|
|
if (queryParam) {
|
|
if (typeof queryParam === "string") {
|
|
queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam));
|
|
this.query[queryParamName] = encodeURIComponent(queryParam);
|
|
}
|
|
else if (typeof queryParam === "object") {
|
|
if (!queryParam.value) {
|
|
throw new Error("options.queryParameters[" + queryParamName + "] is of type \"object\" but it does not contain a \"value\" property.");
|
|
}
|
|
if (queryParam.skipUrlEncoding) {
|
|
queryParams.push(queryParamName + "=" + queryParam.value);
|
|
this.query[queryParamName] = queryParam.value;
|
|
}
|
|
else {
|
|
queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam.value));
|
|
this.query[queryParamName] = encodeURIComponent(queryParam.value);
|
|
}
|
|
}
|
|
}
|
|
} // end-of-for
|
|
// append the queryString
|
|
this.url += queryParams.join("&");
|
|
}
|
|
// add headers to the request if they are provided
|
|
if (options.headers) {
|
|
var headers = options.headers;
|
|
for (var _i = 0, _a = Object.keys(options.headers); _i < _a.length; _i++) {
|
|
var headerName = _a[_i];
|
|
this.headers.set(headerName, headers[headerName]);
|
|
}
|
|
}
|
|
// ensure accept-language is set correctly
|
|
if (!this.headers.get("accept-language")) {
|
|
this.headers.set("accept-language", "en-US");
|
|
}
|
|
// ensure the request-id is set correctly
|
|
if (!this.headers.get("x-ms-client-request-id") && !options.disableClientRequestId) {
|
|
this.headers.set("x-ms-client-request-id", this.requestId);
|
|
}
|
|
// default
|
|
if (!this.headers.get("Content-Type")) {
|
|
this.headers.set("Content-Type", "application/json; charset=utf-8");
|
|
}
|
|
// set the request body. request.js automatically sets the Content-Length request header, so we need not set it explicilty
|
|
this.body = options.body;
|
|
if (options.body !== undefined && options.body !== null) {
|
|
// body as a stream special case. set the body as-is and check for some special request headers specific to sending a stream.
|
|
if (options.bodyIsStream) {
|
|
if (!this.headers.get("Transfer-Encoding")) {
|
|
this.headers.set("Transfer-Encoding", "chunked");
|
|
}
|
|
if (this.headers.get("Content-Type") !== "application/octet-stream") {
|
|
this.headers.set("Content-Type", "application/octet-stream");
|
|
}
|
|
}
|
|
else {
|
|
if (options.serializationMapper) {
|
|
this.body = new Serializer(options.mappers).serialize(options.serializationMapper, options.body, "requestBody");
|
|
}
|
|
if (!options.disableJsonStringifyOnBody) {
|
|
this.body = JSON.stringify(options.body);
|
|
}
|
|
}
|
|
}
|
|
if (options.spanOptions) {
|
|
this.spanOptions = options.spanOptions;
|
|
}
|
|
this.abortSignal = options.abortSignal;
|
|
this.onDownloadProgress = options.onDownloadProgress;
|
|
this.onUploadProgress = options.onUploadProgress;
|
|
return this;
|
|
};
|
|
/**
|
|
* Clone this WebResource HTTP request object.
|
|
* @returns {WebResource} The clone of this WebResource HTTP request object.
|
|
*/
|
|
WebResource.prototype.clone = function () {
|
|
var result = new WebResource(this.url, this.method, this.body, this.query, this.headers && this.headers.clone(), this.streamResponseBody, this.withCredentials, this.abortSignal, this.timeout, this.onUploadProgress, this.onDownloadProgress, this.proxySettings, this.keepAlive, this.decompressResponse);
|
|
if (this.formData) {
|
|
result.formData = this.formData;
|
|
}
|
|
if (this.operationSpec) {
|
|
result.operationSpec = this.operationSpec;
|
|
}
|
|
if (this.shouldDeserialize) {
|
|
result.shouldDeserialize = this.shouldDeserialize;
|
|
}
|
|
if (this.operationResponseGetter) {
|
|
result.operationResponseGetter = this.operationResponseGetter;
|
|
}
|
|
return result;
|
|
};
|
|
return WebResource;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var custom = util.inspect.custom;
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A class that handles the query portion of a URLBuilder.
|
|
*/
|
|
var URLQuery = /** @class */ (function () {
|
|
function URLQuery() {
|
|
this._rawQuery = {};
|
|
}
|
|
/**
|
|
* Get whether or not there any query parameters in this URLQuery.
|
|
*/
|
|
URLQuery.prototype.any = function () {
|
|
return Object.keys(this._rawQuery).length > 0;
|
|
};
|
|
/**
|
|
* Get the keys of the query string.
|
|
*/
|
|
URLQuery.prototype.keys = function () {
|
|
return Object.keys(this._rawQuery);
|
|
};
|
|
/**
|
|
* Set a query parameter with the provided name and value. If the parameterValue is undefined or
|
|
* empty, then this will attempt to remove an existing query parameter with the provided
|
|
* parameterName.
|
|
*/
|
|
URLQuery.prototype.set = function (parameterName, parameterValue) {
|
|
if (parameterName) {
|
|
if (parameterValue !== undefined && parameterValue !== null) {
|
|
var newValue = Array.isArray(parameterValue) ? parameterValue : parameterValue.toString();
|
|
this._rawQuery[parameterName] = newValue;
|
|
}
|
|
else {
|
|
delete this._rawQuery[parameterName];
|
|
}
|
|
}
|
|
};
|
|
/**
|
|
* Get the value of the query parameter with the provided name. If no parameter exists with the
|
|
* provided parameter name, then undefined will be returned.
|
|
*/
|
|
URLQuery.prototype.get = function (parameterName) {
|
|
return parameterName ? this._rawQuery[parameterName] : undefined;
|
|
};
|
|
/**
|
|
* Get the string representation of this query. The return value will not start with a "?".
|
|
*/
|
|
URLQuery.prototype.toString = function () {
|
|
var result = "";
|
|
for (var parameterName in this._rawQuery) {
|
|
if (result) {
|
|
result += "&";
|
|
}
|
|
var parameterValue = this._rawQuery[parameterName];
|
|
if (Array.isArray(parameterValue)) {
|
|
var parameterStrings = [];
|
|
for (var _i = 0, parameterValue_1 = parameterValue; _i < parameterValue_1.length; _i++) {
|
|
var parameterValueElement = parameterValue_1[_i];
|
|
parameterStrings.push(parameterName + "=" + parameterValueElement);
|
|
}
|
|
result += parameterStrings.join("&");
|
|
}
|
|
else {
|
|
result += parameterName + "=" + parameterValue;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
/**
|
|
* Parse a URLQuery from the provided text.
|
|
*/
|
|
URLQuery.parse = function (text) {
|
|
var result = new URLQuery();
|
|
if (text) {
|
|
if (text.startsWith("?")) {
|
|
text = text.substring(1);
|
|
}
|
|
var currentState = "ParameterName";
|
|
var parameterName = "";
|
|
var parameterValue = "";
|
|
for (var i = 0; i < text.length; ++i) {
|
|
var currentCharacter = text[i];
|
|
switch (currentState) {
|
|
case "ParameterName":
|
|
switch (currentCharacter) {
|
|
case "=":
|
|
currentState = "ParameterValue";
|
|
break;
|
|
case "&":
|
|
parameterName = "";
|
|
parameterValue = "";
|
|
break;
|
|
default:
|
|
parameterName += currentCharacter;
|
|
break;
|
|
}
|
|
break;
|
|
case "ParameterValue":
|
|
switch (currentCharacter) {
|
|
case "=":
|
|
parameterName = "";
|
|
parameterValue = "";
|
|
currentState = "Invalid";
|
|
break;
|
|
case "&":
|
|
result.set(parameterName, parameterValue);
|
|
parameterName = "";
|
|
parameterValue = "";
|
|
currentState = "ParameterName";
|
|
break;
|
|
default:
|
|
parameterValue += currentCharacter;
|
|
break;
|
|
}
|
|
break;
|
|
case "Invalid":
|
|
if (currentCharacter === "&") {
|
|
currentState = "ParameterName";
|
|
}
|
|
break;
|
|
default:
|
|
throw new Error("Unrecognized URLQuery parse state: " + currentState);
|
|
}
|
|
}
|
|
if (currentState === "ParameterValue") {
|
|
result.set(parameterName, parameterValue);
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
return URLQuery;
|
|
}());
|
|
/**
|
|
* A class that handles creating, modifying, and parsing URLs.
|
|
*/
|
|
var URLBuilder = /** @class */ (function () {
|
|
function URLBuilder() {
|
|
}
|
|
/**
|
|
* Set the scheme/protocol for this URL. If the provided scheme contains other parts of a URL
|
|
* (such as a host, port, path, or query), those parts will be added to this URL as well.
|
|
*/
|
|
URLBuilder.prototype.setScheme = function (scheme) {
|
|
if (!scheme) {
|
|
this._scheme = undefined;
|
|
}
|
|
else {
|
|
this.set(scheme, "SCHEME");
|
|
}
|
|
};
|
|
/**
|
|
* Get the scheme that has been set in this URL.
|
|
*/
|
|
URLBuilder.prototype.getScheme = function () {
|
|
return this._scheme;
|
|
};
|
|
/**
|
|
* Set the host for this URL. If the provided host contains other parts of a URL (such as a
|
|
* port, path, or query), those parts will be added to this URL as well.
|
|
*/
|
|
URLBuilder.prototype.setHost = function (host) {
|
|
if (!host) {
|
|
this._host = undefined;
|
|
}
|
|
else {
|
|
this.set(host, "SCHEME_OR_HOST");
|
|
}
|
|
};
|
|
/**
|
|
* Get the host that has been set in this URL.
|
|
*/
|
|
URLBuilder.prototype.getHost = function () {
|
|
return this._host;
|
|
};
|
|
/**
|
|
* Set the port for this URL. If the provided port contains other parts of a URL (such as a
|
|
* path or query), those parts will be added to this URL as well.
|
|
*/
|
|
URLBuilder.prototype.setPort = function (port) {
|
|
if (port === undefined || port === null || port === "") {
|
|
this._port = undefined;
|
|
}
|
|
else {
|
|
this.set(port.toString(), "PORT");
|
|
}
|
|
};
|
|
/**
|
|
* Get the port that has been set in this URL.
|
|
*/
|
|
URLBuilder.prototype.getPort = function () {
|
|
return this._port;
|
|
};
|
|
/**
|
|
* Set the path for this URL. If the provided path contains a query, then it will be added to
|
|
* this URL as well.
|
|
*/
|
|
URLBuilder.prototype.setPath = function (path) {
|
|
if (!path) {
|
|
this._path = undefined;
|
|
}
|
|
else {
|
|
var schemeIndex = path.indexOf("://");
|
|
if (schemeIndex !== -1) {
|
|
var schemeStart = path.lastIndexOf("/", schemeIndex);
|
|
// Make sure to only grab the URL part of the path before setting the state back to SCHEME
|
|
// this will handle cases such as "/a/b/c/https://microsoft.com" => "https://microsoft.com"
|
|
this.set(schemeStart === -1 ? path : path.substr(schemeStart + 1), "SCHEME");
|
|
}
|
|
else {
|
|
this.set(path, "PATH");
|
|
}
|
|
}
|
|
};
|
|
/**
|
|
* Append the provided path to this URL's existing path. If the provided path contains a query,
|
|
* then it will be added to this URL as well.
|
|
*/
|
|
URLBuilder.prototype.appendPath = function (path) {
|
|
if (path) {
|
|
var currentPath = this.getPath();
|
|
if (currentPath) {
|
|
if (!currentPath.endsWith("/")) {
|
|
currentPath += "/";
|
|
}
|
|
if (path.startsWith("/")) {
|
|
path = path.substring(1);
|
|
}
|
|
path = currentPath + path;
|
|
}
|
|
this.set(path, "PATH");
|
|
}
|
|
};
|
|
/**
|
|
* Get the path that has been set in this URL.
|
|
*/
|
|
URLBuilder.prototype.getPath = function () {
|
|
return this._path;
|
|
};
|
|
/**
|
|
* Set the query in this URL.
|
|
*/
|
|
URLBuilder.prototype.setQuery = function (query) {
|
|
if (!query) {
|
|
this._query = undefined;
|
|
}
|
|
else {
|
|
this._query = URLQuery.parse(query);
|
|
}
|
|
};
|
|
/**
|
|
* Set a query parameter with the provided name and value in this URL's query. If the provided
|
|
* query parameter value is undefined or empty, then the query parameter will be removed if it
|
|
* existed.
|
|
*/
|
|
URLBuilder.prototype.setQueryParameter = function (queryParameterName, queryParameterValue) {
|
|
if (queryParameterName) {
|
|
if (!this._query) {
|
|
this._query = new URLQuery();
|
|
}
|
|
this._query.set(queryParameterName, queryParameterValue);
|
|
}
|
|
};
|
|
/**
|
|
* Get the value of the query parameter with the provided query parameter name. If no query
|
|
* parameter exists with the provided name, then undefined will be returned.
|
|
*/
|
|
URLBuilder.prototype.getQueryParameterValue = function (queryParameterName) {
|
|
return this._query ? this._query.get(queryParameterName) : undefined;
|
|
};
|
|
/**
|
|
* Get the query in this URL.
|
|
*/
|
|
URLBuilder.prototype.getQuery = function () {
|
|
return this._query ? this._query.toString() : undefined;
|
|
};
|
|
/**
|
|
* Set the parts of this URL by parsing the provided text using the provided startState.
|
|
*/
|
|
URLBuilder.prototype.set = function (text, startState) {
|
|
var tokenizer = new URLTokenizer(text, startState);
|
|
while (tokenizer.next()) {
|
|
var token = tokenizer.current();
|
|
var tokenPath = void 0;
|
|
if (token) {
|
|
switch (token.type) {
|
|
case "SCHEME":
|
|
this._scheme = token.text || undefined;
|
|
break;
|
|
case "HOST":
|
|
this._host = token.text || undefined;
|
|
break;
|
|
case "PORT":
|
|
this._port = token.text || undefined;
|
|
break;
|
|
case "PATH":
|
|
tokenPath = token.text || undefined;
|
|
if (!this._path || this._path === "/" || tokenPath !== "/") {
|
|
this._path = tokenPath;
|
|
}
|
|
break;
|
|
case "QUERY":
|
|
this._query = URLQuery.parse(token.text);
|
|
break;
|
|
default:
|
|
throw new Error("Unrecognized URLTokenType: " + token.type);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
URLBuilder.prototype.toString = function () {
|
|
var result = "";
|
|
if (this._scheme) {
|
|
result += this._scheme + "://";
|
|
}
|
|
if (this._host) {
|
|
result += this._host;
|
|
}
|
|
if (this._port) {
|
|
result += ":" + this._port;
|
|
}
|
|
if (this._path) {
|
|
if (!this._path.startsWith("/")) {
|
|
result += "/";
|
|
}
|
|
result += this._path;
|
|
}
|
|
if (this._query && this._query.any()) {
|
|
result += "?" + this._query.toString();
|
|
}
|
|
return result;
|
|
};
|
|
/**
|
|
* If the provided searchValue is found in this URLBuilder, then replace it with the provided
|
|
* replaceValue.
|
|
*/
|
|
URLBuilder.prototype.replaceAll = function (searchValue, replaceValue) {
|
|
if (searchValue) {
|
|
this.setScheme(replaceAll(this.getScheme(), searchValue, replaceValue));
|
|
this.setHost(replaceAll(this.getHost(), searchValue, replaceValue));
|
|
this.setPort(replaceAll(this.getPort(), searchValue, replaceValue));
|
|
this.setPath(replaceAll(this.getPath(), searchValue, replaceValue));
|
|
this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
|
|
}
|
|
};
|
|
URLBuilder.parse = function (text) {
|
|
var result = new URLBuilder();
|
|
result.set(text, "SCHEME_OR_HOST");
|
|
return result;
|
|
};
|
|
return URLBuilder;
|
|
}());
|
|
var URLToken = /** @class */ (function () {
|
|
function URLToken(text, type) {
|
|
this.text = text;
|
|
this.type = type;
|
|
}
|
|
URLToken.scheme = function (text) {
|
|
return new URLToken(text, "SCHEME");
|
|
};
|
|
URLToken.host = function (text) {
|
|
return new URLToken(text, "HOST");
|
|
};
|
|
URLToken.port = function (text) {
|
|
return new URLToken(text, "PORT");
|
|
};
|
|
URLToken.path = function (text) {
|
|
return new URLToken(text, "PATH");
|
|
};
|
|
URLToken.query = function (text) {
|
|
return new URLToken(text, "QUERY");
|
|
};
|
|
return URLToken;
|
|
}());
|
|
/**
|
|
* Get whether or not the provided character (single character string) is an alphanumeric (letter or
|
|
* digit) character.
|
|
*/
|
|
function isAlphaNumericCharacter(character) {
|
|
var characterCode = character.charCodeAt(0);
|
|
return ((48 /* '0' */ <= characterCode && characterCode <= 57) /* '9' */ ||
|
|
(65 /* 'A' */ <= characterCode && characterCode <= 90) /* 'Z' */ ||
|
|
(97 /* 'a' */ <= characterCode && characterCode <= 122) /* 'z' */);
|
|
}
|
|
/**
|
|
* A class that tokenizes URL strings.
|
|
*/
|
|
var URLTokenizer = /** @class */ (function () {
|
|
function URLTokenizer(_text, state) {
|
|
this._text = _text;
|
|
this._textLength = _text ? _text.length : 0;
|
|
this._currentState = state !== undefined && state !== null ? state : "SCHEME_OR_HOST";
|
|
this._currentIndex = 0;
|
|
}
|
|
/**
|
|
* Get the current URLToken this URLTokenizer is pointing at, or undefined if the URLTokenizer
|
|
* hasn't started or has finished tokenizing.
|
|
*/
|
|
URLTokenizer.prototype.current = function () {
|
|
return this._currentToken;
|
|
};
|
|
/**
|
|
* Advance to the next URLToken and return whether or not a URLToken was found.
|
|
*/
|
|
URLTokenizer.prototype.next = function () {
|
|
if (!hasCurrentCharacter(this)) {
|
|
this._currentToken = undefined;
|
|
}
|
|
else {
|
|
switch (this._currentState) {
|
|
case "SCHEME":
|
|
nextScheme(this);
|
|
break;
|
|
case "SCHEME_OR_HOST":
|
|
nextSchemeOrHost(this);
|
|
break;
|
|
case "HOST":
|
|
nextHost(this);
|
|
break;
|
|
case "PORT":
|
|
nextPort(this);
|
|
break;
|
|
case "PATH":
|
|
nextPath(this);
|
|
break;
|
|
case "QUERY":
|
|
nextQuery(this);
|
|
break;
|
|
default:
|
|
throw new Error("Unrecognized URLTokenizerState: " + this._currentState);
|
|
}
|
|
}
|
|
return !!this._currentToken;
|
|
};
|
|
return URLTokenizer;
|
|
}());
|
|
/**
|
|
* Read the remaining characters from this Tokenizer's character stream.
|
|
*/
|
|
function readRemaining(tokenizer) {
|
|
var result = "";
|
|
if (tokenizer._currentIndex < tokenizer._textLength) {
|
|
result = tokenizer._text.substring(tokenizer._currentIndex);
|
|
tokenizer._currentIndex = tokenizer._textLength;
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Whether or not this URLTokenizer has a current character.
|
|
*/
|
|
function hasCurrentCharacter(tokenizer) {
|
|
return tokenizer._currentIndex < tokenizer._textLength;
|
|
}
|
|
/**
|
|
* Get the character in the text string at the current index.
|
|
*/
|
|
function getCurrentCharacter(tokenizer) {
|
|
return tokenizer._text[tokenizer._currentIndex];
|
|
}
|
|
/**
|
|
* Advance to the character in text that is "step" characters ahead. If no step value is provided,
|
|
* then step will default to 1.
|
|
*/
|
|
function nextCharacter(tokenizer, step) {
|
|
if (hasCurrentCharacter(tokenizer)) {
|
|
if (!step) {
|
|
step = 1;
|
|
}
|
|
tokenizer._currentIndex += step;
|
|
}
|
|
}
|
|
/**
|
|
* Starting with the current character, peek "charactersToPeek" number of characters ahead in this
|
|
* Tokenizer's stream of characters.
|
|
*/
|
|
function peekCharacters(tokenizer, charactersToPeek) {
|
|
var endIndex = tokenizer._currentIndex + charactersToPeek;
|
|
if (tokenizer._textLength < endIndex) {
|
|
endIndex = tokenizer._textLength;
|
|
}
|
|
return tokenizer._text.substring(tokenizer._currentIndex, endIndex);
|
|
}
|
|
/**
|
|
* Read characters from this Tokenizer until the end of the stream or until the provided condition
|
|
* is false when provided the current character.
|
|
*/
|
|
function readWhile(tokenizer, condition) {
|
|
var result = "";
|
|
while (hasCurrentCharacter(tokenizer)) {
|
|
var currentCharacter = getCurrentCharacter(tokenizer);
|
|
if (!condition(currentCharacter)) {
|
|
break;
|
|
}
|
|
else {
|
|
result += currentCharacter;
|
|
nextCharacter(tokenizer);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Read characters from this Tokenizer until a non-alphanumeric character or the end of the
|
|
* character stream is reached.
|
|
*/
|
|
function readWhileLetterOrDigit(tokenizer) {
|
|
return readWhile(tokenizer, function (character) { return isAlphaNumericCharacter(character); });
|
|
}
|
|
/**
|
|
* Read characters from this Tokenizer until one of the provided terminating characters is read or
|
|
* the end of the character stream is reached.
|
|
*/
|
|
function readUntilCharacter(tokenizer) {
|
|
var terminatingCharacters = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
terminatingCharacters[_i - 1] = arguments[_i];
|
|
}
|
|
return readWhile(tokenizer, function (character) { return terminatingCharacters.indexOf(character) === -1; });
|
|
}
|
|
function nextScheme(tokenizer) {
|
|
var scheme = readWhileLetterOrDigit(tokenizer);
|
|
tokenizer._currentToken = URLToken.scheme(scheme);
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "HOST";
|
|
}
|
|
}
|
|
function nextSchemeOrHost(tokenizer) {
|
|
var schemeOrHost = readUntilCharacter(tokenizer, ":", "/", "?");
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentToken = URLToken.host(schemeOrHost);
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else if (getCurrentCharacter(tokenizer) === ":") {
|
|
if (peekCharacters(tokenizer, 3) === "://") {
|
|
tokenizer._currentToken = URLToken.scheme(schemeOrHost);
|
|
tokenizer._currentState = "HOST";
|
|
}
|
|
else {
|
|
tokenizer._currentToken = URLToken.host(schemeOrHost);
|
|
tokenizer._currentState = "PORT";
|
|
}
|
|
}
|
|
else {
|
|
tokenizer._currentToken = URLToken.host(schemeOrHost);
|
|
if (getCurrentCharacter(tokenizer) === "/") {
|
|
tokenizer._currentState = "PATH";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "QUERY";
|
|
}
|
|
}
|
|
}
|
|
function nextHost(tokenizer) {
|
|
if (peekCharacters(tokenizer, 3) === "://") {
|
|
nextCharacter(tokenizer, 3);
|
|
}
|
|
var host = readUntilCharacter(tokenizer, ":", "/", "?");
|
|
tokenizer._currentToken = URLToken.host(host);
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else if (getCurrentCharacter(tokenizer) === ":") {
|
|
tokenizer._currentState = "PORT";
|
|
}
|
|
else if (getCurrentCharacter(tokenizer) === "/") {
|
|
tokenizer._currentState = "PATH";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "QUERY";
|
|
}
|
|
}
|
|
function nextPort(tokenizer) {
|
|
if (getCurrentCharacter(tokenizer) === ":") {
|
|
nextCharacter(tokenizer);
|
|
}
|
|
var port = readUntilCharacter(tokenizer, "/", "?");
|
|
tokenizer._currentToken = URLToken.port(port);
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else if (getCurrentCharacter(tokenizer) === "/") {
|
|
tokenizer._currentState = "PATH";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "QUERY";
|
|
}
|
|
}
|
|
function nextPath(tokenizer) {
|
|
var path = readUntilCharacter(tokenizer, "?");
|
|
tokenizer._currentToken = URLToken.path(path);
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "QUERY";
|
|
}
|
|
}
|
|
function nextQuery(tokenizer) {
|
|
if (getCurrentCharacter(tokenizer) === "?") {
|
|
nextCharacter(tokenizer);
|
|
}
|
|
var query = readRemaining(tokenizer);
|
|
tokenizer._currentToken = URLToken.query(query);
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var RedactedString = "REDACTED";
|
|
var 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",
|
|
"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",
|
|
"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"
|
|
];
|
|
var defaultAllowedQueryParameters = ["api-version"];
|
|
var Sanitizer = /** @class */ (function () {
|
|
function Sanitizer(_a) {
|
|
var _b = _a === void 0 ? {} : _a, _c = _b.allowedHeaderNames, allowedHeaderNames = _c === void 0 ? [] : _c, _d = _b.allowedQueryParameters, allowedQueryParameters = _d === void 0 ? [] : _d;
|
|
allowedHeaderNames = Array.isArray(allowedHeaderNames)
|
|
? defaultAllowedHeaderNames.concat(allowedHeaderNames)
|
|
: defaultAllowedHeaderNames;
|
|
allowedQueryParameters = Array.isArray(allowedQueryParameters)
|
|
? defaultAllowedQueryParameters.concat(allowedQueryParameters)
|
|
: defaultAllowedQueryParameters;
|
|
this.allowedHeaderNames = new Set(allowedHeaderNames.map(function (n) { return n.toLowerCase(); }));
|
|
this.allowedQueryParameters = new Set(allowedQueryParameters.map(function (p) { return p.toLowerCase(); }));
|
|
}
|
|
Sanitizer.prototype.sanitize = function (obj) {
|
|
return JSON.stringify(obj, this.replacer.bind(this), 2);
|
|
};
|
|
Sanitizer.prototype.replacer = function (key, value) {
|
|
// Ensure Errors include their interesting non-enumerable members
|
|
if (value instanceof Error) {
|
|
return tslib.__assign(tslib.__assign({}, value), { name: value.name, message: value.message });
|
|
}
|
|
if (key === "_headersMap") {
|
|
return this.sanitizeHeaders(key, value);
|
|
}
|
|
else if (key === "url") {
|
|
return this.sanitizeUrl(value);
|
|
}
|
|
else if (key === "query") {
|
|
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;
|
|
}
|
|
return value;
|
|
};
|
|
Sanitizer.prototype.sanitizeHeaders = function (_, value) {
|
|
return this.sanitizeObject(value, this.allowedHeaderNames, function (v, k) { return v[k].value; });
|
|
};
|
|
Sanitizer.prototype.sanitizeQuery = function (value) {
|
|
return this.sanitizeObject(value, this.allowedQueryParameters, function (v, k) { return v[k]; });
|
|
};
|
|
Sanitizer.prototype.sanitizeObject = function (value, allowedKeys, accessor) {
|
|
if (typeof value !== "object" || value === null) {
|
|
return value;
|
|
}
|
|
var sanitized = {};
|
|
for (var _i = 0, _a = Object.keys(value); _i < _a.length; _i++) {
|
|
var k = _a[_i];
|
|
if (allowedKeys.has(k.toLowerCase())) {
|
|
sanitized[k] = accessor(value, k);
|
|
}
|
|
else {
|
|
sanitized[k] = RedactedString;
|
|
}
|
|
}
|
|
return sanitized;
|
|
};
|
|
Sanitizer.prototype.sanitizeUrl = function (value) {
|
|
if (typeof value !== "string" || value === null) {
|
|
return value;
|
|
}
|
|
var urlBuilder = URLBuilder.parse(value);
|
|
var queryString = urlBuilder.getQuery();
|
|
if (!queryString) {
|
|
return value;
|
|
}
|
|
var query = URLQuery.parse(queryString);
|
|
for (var _i = 0, _a = query.keys(); _i < _a.length; _i++) {
|
|
var k = _a[_i];
|
|
if (!this.allowedQueryParameters.has(k.toLowerCase())) {
|
|
query.set(k, RedactedString);
|
|
}
|
|
}
|
|
urlBuilder.setQuery(query.toString());
|
|
return urlBuilder.toString();
|
|
};
|
|
return Sanitizer;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var errorSanitizer = new Sanitizer();
|
|
var RestError = /** @class */ (function (_super) {
|
|
tslib.__extends(RestError, _super);
|
|
function RestError(message, code, statusCode, request, response) {
|
|
var _this = _super.call(this, message) || this;
|
|
_this.name = "RestError";
|
|
_this.code = code;
|
|
_this.statusCode = statusCode;
|
|
_this.request = request;
|
|
_this.response = response;
|
|
Object.setPrototypeOf(_this, RestError.prototype);
|
|
return _this;
|
|
}
|
|
/**
|
|
* Logging method for util.inspect in Node
|
|
*/
|
|
RestError.prototype[custom] = function () {
|
|
return "RestError: " + this.message + " \n " + errorSanitizer.sanitize(this);
|
|
};
|
|
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
|
|
RestError.PARSE_ERROR = "PARSE_ERROR";
|
|
return RestError;
|
|
}(Error));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var ReportTransform = /** @class */ (function (_super) {
|
|
tslib.__extends(ReportTransform, _super);
|
|
function ReportTransform(progressCallback) {
|
|
var _this = _super.call(this) || this;
|
|
_this.progressCallback = progressCallback;
|
|
_this.loadedBytes = 0;
|
|
return _this;
|
|
}
|
|
ReportTransform.prototype._transform = function (chunk, _encoding, callback) {
|
|
this.push(chunk);
|
|
this.loadedBytes += chunk.length;
|
|
this.progressCallback({ loadedBytes: this.loadedBytes });
|
|
callback(undefined);
|
|
};
|
|
return ReportTransform;
|
|
}(stream.Transform));
|
|
var FetchHttpClient = /** @class */ (function () {
|
|
function FetchHttpClient() {
|
|
}
|
|
FetchHttpClient.prototype.sendRequest = function (httpRequest) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var abortController$1, abortListener, formData, requestForm_1, appendFormValue, _i, _a, formKey, formValue, j, contentType, body, onUploadProgress, uploadReportStream, platformSpecificRequestInit, requestInit, response, headers, operationResponse, _b, _c, onDownloadProgress, responseBody, downloadReportStream, length_1, error_1, fetchError;
|
|
return tslib.__generator(this, function (_d) {
|
|
switch (_d.label) {
|
|
case 0:
|
|
if (!httpRequest && typeof httpRequest !== "object") {
|
|
throw new Error("'httpRequest' (WebResourceLike) cannot be null or undefined and must be of type object.");
|
|
}
|
|
abortController$1 = new abortController.AbortController();
|
|
if (httpRequest.abortSignal) {
|
|
if (httpRequest.abortSignal.aborted) {
|
|
throw new abortController.AbortError("The operation was aborted.");
|
|
}
|
|
abortListener = function (event) {
|
|
if (event.type === "abort") {
|
|
abortController$1.abort();
|
|
}
|
|
};
|
|
httpRequest.abortSignal.addEventListener("abort", abortListener);
|
|
}
|
|
if (httpRequest.timeout) {
|
|
setTimeout(function () {
|
|
abortController$1.abort();
|
|
}, httpRequest.timeout);
|
|
}
|
|
if (httpRequest.formData) {
|
|
formData = httpRequest.formData;
|
|
requestForm_1 = new FormData();
|
|
appendFormValue = function (key, value) {
|
|
// value function probably returns a stream so we can provide a fresh stream on each retry
|
|
if (typeof value === "function") {
|
|
value = value();
|
|
}
|
|
// eslint-disable-next-line no-prototype-builtins
|
|
if (value && value.hasOwnProperty("value") && value.hasOwnProperty("options")) {
|
|
requestForm_1.append(key, value.value, value.options);
|
|
}
|
|
else {
|
|
requestForm_1.append(key, value);
|
|
}
|
|
};
|
|
for (_i = 0, _a = Object.keys(formData); _i < _a.length; _i++) {
|
|
formKey = _a[_i];
|
|
formValue = formData[formKey];
|
|
if (Array.isArray(formValue)) {
|
|
for (j = 0; j < formValue.length; j++) {
|
|
appendFormValue(formKey, formValue[j]);
|
|
}
|
|
}
|
|
else {
|
|
appendFormValue(formKey, formValue);
|
|
}
|
|
}
|
|
httpRequest.body = requestForm_1;
|
|
httpRequest.formData = undefined;
|
|
contentType = httpRequest.headers.get("Content-Type");
|
|
if (contentType && contentType.indexOf("multipart/form-data") !== -1) {
|
|
if (typeof requestForm_1.getBoundary === "function") {
|
|
httpRequest.headers.set("Content-Type", "multipart/form-data; boundary=" + requestForm_1.getBoundary());
|
|
}
|
|
else {
|
|
// browser will automatically apply a suitable content-type header
|
|
httpRequest.headers.remove("Content-Type");
|
|
}
|
|
}
|
|
}
|
|
body = httpRequest.body
|
|
? typeof httpRequest.body === "function"
|
|
? httpRequest.body()
|
|
: httpRequest.body
|
|
: undefined;
|
|
if (httpRequest.onUploadProgress && httpRequest.body) {
|
|
onUploadProgress = httpRequest.onUploadProgress;
|
|
uploadReportStream = new ReportTransform(onUploadProgress);
|
|
if (isReadableStream(body)) {
|
|
body.pipe(uploadReportStream);
|
|
}
|
|
else {
|
|
uploadReportStream.end(body);
|
|
}
|
|
body = uploadReportStream;
|
|
}
|
|
return [4 /*yield*/, this.prepareRequest(httpRequest)];
|
|
case 1:
|
|
platformSpecificRequestInit = _d.sent();
|
|
requestInit = tslib.__assign({ body: body, headers: httpRequest.headers.rawHeaders(), method: httpRequest.method, signal: abortController$1.signal }, platformSpecificRequestInit);
|
|
_d.label = 2;
|
|
case 2:
|
|
_d.trys.push([2, 8, 9, 10]);
|
|
return [4 /*yield*/, this.fetch(httpRequest.url, requestInit)];
|
|
case 3:
|
|
response = _d.sent();
|
|
headers = parseHeaders(response.headers);
|
|
_b = {
|
|
headers: headers,
|
|
request: httpRequest,
|
|
status: response.status,
|
|
readableStreamBody: httpRequest.streamResponseBody
|
|
? response.body
|
|
: undefined
|
|
};
|
|
if (!!httpRequest.streamResponseBody) return [3 /*break*/, 5];
|
|
return [4 /*yield*/, response.text()];
|
|
case 4:
|
|
_c = _d.sent();
|
|
return [3 /*break*/, 6];
|
|
case 5:
|
|
_c = undefined;
|
|
_d.label = 6;
|
|
case 6:
|
|
operationResponse = (_b.bodyAsText = _c,
|
|
_b);
|
|
onDownloadProgress = httpRequest.onDownloadProgress;
|
|
if (onDownloadProgress) {
|
|
responseBody = response.body || undefined;
|
|
if (isReadableStream(responseBody)) {
|
|
downloadReportStream = new ReportTransform(onDownloadProgress);
|
|
responseBody.pipe(downloadReportStream);
|
|
operationResponse.readableStreamBody = downloadReportStream;
|
|
}
|
|
else {
|
|
length_1 = parseInt(headers.get("Content-Length")) || undefined;
|
|
if (length_1) {
|
|
// Calling callback for non-stream response for consistency with browser
|
|
onDownloadProgress({ loadedBytes: length_1 });
|
|
}
|
|
}
|
|
}
|
|
return [4 /*yield*/, this.processRequest(operationResponse)];
|
|
case 7:
|
|
_d.sent();
|
|
return [2 /*return*/, operationResponse];
|
|
case 8:
|
|
error_1 = _d.sent();
|
|
fetchError = error_1;
|
|
if (fetchError.code === "ENOTFOUND") {
|
|
throw new RestError(fetchError.message, RestError.REQUEST_SEND_ERROR, undefined, httpRequest);
|
|
}
|
|
else if (fetchError.type === "aborted") {
|
|
throw new abortController.AbortError("The operation was aborted.");
|
|
}
|
|
throw fetchError;
|
|
case 9:
|
|
// clean up event listener
|
|
if (httpRequest.abortSignal && abortListener) {
|
|
httpRequest.abortSignal.removeEventListener("abort", abortListener);
|
|
}
|
|
return [7 /*endfinally*/];
|
|
case 10: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return FetchHttpClient;
|
|
}());
|
|
function isReadableStream(body) {
|
|
return body && typeof body.pipe === "function";
|
|
}
|
|
function parseHeaders(headers) {
|
|
var httpHeaders = new HttpHeaders();
|
|
headers.forEach(function (value, key) {
|
|
httpHeaders.set(key, value);
|
|
});
|
|
return httpHeaders;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function createProxyAgent(requestUrl, proxySettings, headers) {
|
|
var host = URLBuilder.parse(proxySettings.host).getHost();
|
|
if (!host) {
|
|
throw new Error("Expecting a non-empty host in proxy settings.");
|
|
}
|
|
if (!isValidPort(proxySettings.port)) {
|
|
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
|
|
}
|
|
var tunnelOptions = {
|
|
proxy: {
|
|
host: host,
|
|
port: proxySettings.port,
|
|
headers: (headers && headers.rawHeaders()) || {}
|
|
}
|
|
};
|
|
if (proxySettings.username && proxySettings.password) {
|
|
tunnelOptions.proxy.proxyAuth = proxySettings.username + ":" + proxySettings.password;
|
|
}
|
|
var isRequestHttps = isUrlHttps(requestUrl);
|
|
var isProxyHttps = isUrlHttps(proxySettings.host);
|
|
var proxyAgent = {
|
|
isHttps: isRequestHttps,
|
|
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
|
|
};
|
|
return proxyAgent;
|
|
}
|
|
function isUrlHttps(url) {
|
|
var urlScheme = URLBuilder.parse(url).getScheme() || "";
|
|
return urlScheme.toLowerCase() === "https";
|
|
}
|
|
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
|
|
if (isRequestHttps && isProxyHttps) {
|
|
return tunnel.httpsOverHttps(tunnelOptions);
|
|
}
|
|
else if (isRequestHttps && !isProxyHttps) {
|
|
return tunnel.httpsOverHttp(tunnelOptions);
|
|
}
|
|
else if (!isRequestHttps && isProxyHttps) {
|
|
return tunnel.httpOverHttps(tunnelOptions);
|
|
}
|
|
else {
|
|
return tunnel.httpOverHttp(tunnelOptions);
|
|
}
|
|
}
|
|
function isValidPort(port) {
|
|
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
|
|
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
|
|
return 0 <= port && port <= 65535;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var globalWithFetch = global;
|
|
if (typeof globalWithFetch.fetch !== "function") {
|
|
var fetch_1 = __webpack_require__(454).default;
|
|
globalWithFetch.fetch = fetch_1;
|
|
}
|
|
function getCachedAgent(isHttps, agentCache) {
|
|
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
|
}
|
|
var NodeFetchHttpClient = /** @class */ (function (_super) {
|
|
tslib.__extends(NodeFetchHttpClient, _super);
|
|
function NodeFetchHttpClient() {
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
_this.proxyAgents = {};
|
|
_this.keepAliveAgents = {};
|
|
_this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
|
|
return _this;
|
|
}
|
|
NodeFetchHttpClient.prototype.getOrCreateAgent = function (httpRequest) {
|
|
var isHttps = isUrlHttps(httpRequest.url);
|
|
// At the moment, proxy settings and keepAlive are mutually
|
|
// exclusive because the 'tunnel' library currently lacks the
|
|
// ability to create a proxy with keepAlive turned on.
|
|
if (httpRequest.proxySettings) {
|
|
var agent = getCachedAgent(isHttps, this.proxyAgents);
|
|
if (agent) {
|
|
return agent;
|
|
}
|
|
var tunnel = createProxyAgent(httpRequest.url, httpRequest.proxySettings, httpRequest.headers);
|
|
agent = tunnel.agent;
|
|
if (tunnel.isHttps) {
|
|
this.proxyAgents.httpsAgent = tunnel.agent;
|
|
}
|
|
else {
|
|
this.proxyAgents.httpAgent = tunnel.agent;
|
|
}
|
|
return agent;
|
|
}
|
|
else if (httpRequest.keepAlive) {
|
|
var agent = getCachedAgent(isHttps, this.keepAliveAgents);
|
|
if (agent) {
|
|
return agent;
|
|
}
|
|
var agentOptions = {
|
|
keepAlive: httpRequest.keepAlive
|
|
};
|
|
if (isHttps) {
|
|
agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions);
|
|
}
|
|
else {
|
|
agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions);
|
|
}
|
|
return agent;
|
|
}
|
|
else {
|
|
return isHttps ? https.globalAgent : http.globalAgent;
|
|
}
|
|
};
|
|
// eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs
|
|
NodeFetchHttpClient.prototype.fetch = function (input, init) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, fetch(input, init)];
|
|
});
|
|
});
|
|
};
|
|
NodeFetchHttpClient.prototype.prepareRequest = function (httpRequest) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var requestInit, cookieString;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
requestInit = {};
|
|
if (!(this.cookieJar && !httpRequest.headers.get("Cookie"))) return [3 /*break*/, 2];
|
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
_this.cookieJar.getCookieString(httpRequest.url, function (err, cookie) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(cookie);
|
|
}
|
|
});
|
|
})];
|
|
case 1:
|
|
cookieString = _a.sent();
|
|
httpRequest.headers.set("Cookie", cookieString);
|
|
_a.label = 2;
|
|
case 2:
|
|
// Set the http(s) agent
|
|
requestInit.agent = this.getOrCreateAgent(httpRequest);
|
|
requestInit.compress = httpRequest.decompressResponse;
|
|
return [2 /*return*/, requestInit];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
NodeFetchHttpClient.prototype.processRequest = function (operationResponse) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var setCookieHeader_1;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!this.cookieJar) return [3 /*break*/, 2];
|
|
setCookieHeader_1 = operationResponse.headers.get("Set-Cookie");
|
|
if (!(setCookieHeader_1 !== undefined)) return [3 /*break*/, 2];
|
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
_this.cookieJar.setCookie(setCookieHeader_1, operationResponse.request.url, { ignoreError: true }, function (err) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve();
|
|
}
|
|
});
|
|
})];
|
|
case 1:
|
|
_a.sent();
|
|
_a.label = 2;
|
|
case 2: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return NodeFetchHttpClient;
|
|
}(FetchHttpClient));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(function (HttpPipelineLogLevel) {
|
|
/**
|
|
* A log level that indicates that no logs will be logged.
|
|
*/
|
|
HttpPipelineLogLevel[HttpPipelineLogLevel["OFF"] = 0] = "OFF";
|
|
/**
|
|
* An error log.
|
|
*/
|
|
HttpPipelineLogLevel[HttpPipelineLogLevel["ERROR"] = 1] = "ERROR";
|
|
/**
|
|
* A warning log.
|
|
*/
|
|
HttpPipelineLogLevel[HttpPipelineLogLevel["WARNING"] = 2] = "WARNING";
|
|
/**
|
|
* An information log.
|
|
*/
|
|
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
|
|
})(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
|
|
|
|
/**
|
|
* Converts an OperationOptions to a RequestOptionsBase
|
|
*
|
|
* @param opts OperationOptions object to convert to RequestOptionsBase
|
|
*/
|
|
function operationOptionsToRequestOptionsBase(opts) {
|
|
var requestOptions = opts.requestOptions, tracingOptions = opts.tracingOptions, additionalOptions = tslib.__rest(opts, ["requestOptions", "tracingOptions"]);
|
|
var result = additionalOptions;
|
|
if (requestOptions) {
|
|
result = tslib.__assign(tslib.__assign({}, result), requestOptions);
|
|
}
|
|
if (tracingOptions) {
|
|
result.spanOptions = tracingOptions.spanOptions;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var BaseRequestPolicy = /** @class */ (function () {
|
|
function BaseRequestPolicy(_nextPolicy, _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.
|
|
*/
|
|
BaseRequestPolicy.prototype.shouldLog = function (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.
|
|
*/
|
|
BaseRequestPolicy.prototype.log = function (logLevel, message) {
|
|
this._options.log(logLevel, message);
|
|
};
|
|
return BaseRequestPolicy;
|
|
}());
|
|
/**
|
|
* Optional properties that can be used when creating a RequestPolicy.
|
|
*/
|
|
var RequestPolicyOptions = /** @class */ (function () {
|
|
function RequestPolicyOptions(_logger) {
|
|
this._logger = _logger;
|
|
}
|
|
/**
|
|
* 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.
|
|
*/
|
|
RequestPolicyOptions.prototype.shouldLog = function (logLevel) {
|
|
return (!!this._logger &&
|
|
logLevel !== exports.HttpPipelineLogLevel.OFF &&
|
|
logLevel <= this._logger.minimumLogLevel);
|
|
};
|
|
/**
|
|
* Attempt to log the provided message to the provided logger. If no logger was provided or if
|
|
* the log level does not meet the logger's threshold, then nothing will be logged.
|
|
* @param logLevel The log level of this log.
|
|
* @param message The message of this log.
|
|
*/
|
|
RequestPolicyOptions.prototype.log = function (logLevel, message) {
|
|
if (this._logger && this.shouldLog(logLevel)) {
|
|
this._logger.log(logLevel, message);
|
|
}
|
|
};
|
|
return RequestPolicyOptions;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var logger = logger$1.createClientLogger("core-http");
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function logPolicy(loggingOptions) {
|
|
if (loggingOptions === void 0) { loggingOptions = {}; }
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new LogPolicy(nextPolicy, options, loggingOptions);
|
|
}
|
|
};
|
|
}
|
|
var LogPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(LogPolicy, _super);
|
|
function LogPolicy(nextPolicy, options, _a) {
|
|
var _b = _a === void 0 ? {} : _a, _c = _b.logger, logger$1 = _c === void 0 ? logger.info : _c, _d = _b.allowedHeaderNames, allowedHeaderNames = _d === void 0 ? [] : _d, _e = _b.allowedQueryParameters, allowedQueryParameters = _e === void 0 ? [] : _e;
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.logger = logger$1;
|
|
_this.sanitizer = new Sanitizer({ allowedHeaderNames: allowedHeaderNames, allowedQueryParameters: allowedQueryParameters });
|
|
return _this;
|
|
}
|
|
Object.defineProperty(LogPolicy.prototype, "allowedHeaderNames", {
|
|
/**
|
|
* Header names whose values will be logged when logging is enabled. Defaults to
|
|
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
|
* specified in this field will be added to that list. Any other values will
|
|
* be written to logs as "REDACTED".
|
|
* @deprecated Pass these into the constructor instead.
|
|
*/
|
|
get: function () {
|
|
return this.sanitizer.allowedHeaderNames;
|
|
},
|
|
/**
|
|
* Header names whose values will be logged when logging is enabled. Defaults to
|
|
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
|
|
* specified in this field will be added to that list. Any other values will
|
|
* be written to logs as "REDACTED".
|
|
* @deprecated Pass these into the constructor instead.
|
|
*/
|
|
set: function (allowedHeaderNames) {
|
|
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(LogPolicy.prototype, "allowedQueryParameters", {
|
|
/**
|
|
* Query string names whose values will be logged when logging is enabled. By default no
|
|
* query string values are logged.
|
|
* @deprecated Pass these into the constructor instead.
|
|
*/
|
|
get: function () {
|
|
return this.sanitizer.allowedQueryParameters;
|
|
},
|
|
/**
|
|
* Query string names whose values will be logged when logging is enabled. By default no
|
|
* query string values are logged.
|
|
* @deprecated Pass these into the constructor instead.
|
|
*/
|
|
set: function (allowedQueryParameters) {
|
|
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
LogPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
if (!this.logger.enabled)
|
|
return this._nextPolicy.sendRequest(request);
|
|
this.logRequest(request);
|
|
return this._nextPolicy.sendRequest(request).then(function (response) { return _this.logResponse(response); });
|
|
};
|
|
LogPolicy.prototype.logRequest = function (request) {
|
|
this.logger("Request: " + this.sanitizer.sanitize(request));
|
|
};
|
|
LogPolicy.prototype.logResponse = function (response) {
|
|
this.logger("Response status code: " + response.status);
|
|
this.logger("Headers: " + this.sanitizer.sanitize(response.headers));
|
|
return response;
|
|
};
|
|
return LogPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* 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.
|
|
*/
|
|
function getPathStringFromParameter(parameter) {
|
|
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
|
|
}
|
|
function getPathStringFromParameterPath(parameterPath, mapper) {
|
|
var result;
|
|
if (typeof parameterPath === "string") {
|
|
result = parameterPath;
|
|
}
|
|
else if (Array.isArray(parameterPath)) {
|
|
result = parameterPath.join(".");
|
|
}
|
|
else {
|
|
result = mapper.serializedName;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function isStreamOperation(operationSpec) {
|
|
var result = false;
|
|
for (var statusCode in operationSpec.responses) {
|
|
var operationResponse = operationSpec.responses[statusCode];
|
|
if (operationResponse.bodyMapper &&
|
|
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
|
result = true;
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed
|
|
// by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536
|
|
// By creating a new copy of the settings each time we instantiate the parser,
|
|
// we are safeguarding against the possibility of the default settings being mutated elsewhere unintentionally.
|
|
var xml2jsDefaultOptionsV2 = {
|
|
explicitCharkey: false,
|
|
trim: false,
|
|
normalize: false,
|
|
normalizeTags: false,
|
|
attrkey: "$",
|
|
charkey: "_",
|
|
explicitArray: true,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: true,
|
|
validator: null,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
preserveChildrenOrder: false,
|
|
childkey: "$$",
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: null,
|
|
attrValueProcessors: null,
|
|
tagNameProcessors: null,
|
|
valueProcessors: null,
|
|
rootName: "root",
|
|
xmldec: {
|
|
version: "1.0",
|
|
encoding: "UTF-8",
|
|
standalone: true
|
|
},
|
|
doctype: null,
|
|
renderOpts: {
|
|
pretty: true,
|
|
indent: " ",
|
|
newline: "\n"
|
|
},
|
|
headless: false,
|
|
chunkSize: 10000,
|
|
emptyTag: "",
|
|
cdata: false
|
|
};
|
|
// The xml2js settings for general XML parsing operations.
|
|
var xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
|
xml2jsParserSettings.explicitArray = false;
|
|
// The xml2js settings for general XML building operations.
|
|
var xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
|
xml2jsBuilderSettings.explicitArray = false;
|
|
xml2jsBuilderSettings.renderOpts = {
|
|
pretty: false
|
|
};
|
|
/**
|
|
* Converts given JSON object to XML string
|
|
* @param obj JSON object to be converted into XML string
|
|
* @param opts Options that govern the parsing of given JSON object
|
|
* `rootName` indicates the name of the root element in the resulting XML
|
|
*/
|
|
function stringifyXML(obj, opts) {
|
|
xml2jsBuilderSettings.rootName = (opts || {}).rootName;
|
|
var builder = new xml2js.Builder(xml2jsBuilderSettings);
|
|
return builder.buildObject(obj);
|
|
}
|
|
/**
|
|
* 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
|
|
*/
|
|
function parseXML(str, opts) {
|
|
xml2jsParserSettings.explicitRoot = !!(opts && opts.includeRoot);
|
|
var xmlParser = new xml2js.Parser(xml2jsParserSettings);
|
|
return new Promise(function (resolve, reject) {
|
|
if (!str) {
|
|
reject(new Error("Document is empty"));
|
|
}
|
|
else {
|
|
xmlParser.parseString(str, function (err, res) {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(res);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Create a new serialization RequestPolicyCreator that will serialized HTTP request bodies as they
|
|
* pass through the HTTP pipeline.
|
|
*/
|
|
function deserializationPolicy(deserializationContentTypes) {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new DeserializationPolicy(nextPolicy, deserializationContentTypes, options);
|
|
}
|
|
};
|
|
}
|
|
var defaultJsonContentTypes = ["application/json", "text/json"];
|
|
var defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
|
|
var DefaultDeserializationOptions = {
|
|
expectedContentTypes: {
|
|
json: defaultJsonContentTypes,
|
|
xml: defaultXmlContentTypes
|
|
}
|
|
};
|
|
/**
|
|
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
|
|
* HTTP pipeline.
|
|
*/
|
|
var DeserializationPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(DeserializationPolicy, _super);
|
|
function DeserializationPolicy(nextPolicy, deserializationContentTypes, options) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.jsonContentTypes =
|
|
(deserializationContentTypes && deserializationContentTypes.json) || defaultJsonContentTypes;
|
|
_this.xmlContentTypes =
|
|
(deserializationContentTypes && deserializationContentTypes.xml) || defaultXmlContentTypes;
|
|
return _this;
|
|
}
|
|
DeserializationPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, this._nextPolicy
|
|
.sendRequest(request)
|
|
.then(function (response) {
|
|
return deserializeResponseBody(_this.jsonContentTypes, _this.xmlContentTypes, response);
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
return DeserializationPolicy;
|
|
}(BaseRequestPolicy));
|
|
function getOperationResponse(parsedResponse) {
|
|
var result;
|
|
var request = parsedResponse.request;
|
|
var operationSpec = request.operationSpec;
|
|
if (operationSpec) {
|
|
var operationResponseGetter = request.operationResponseGetter;
|
|
if (!operationResponseGetter) {
|
|
result = operationSpec.responses[parsedResponse.status];
|
|
}
|
|
else {
|
|
result = operationResponseGetter(operationSpec, parsedResponse);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function shouldDeserializeResponse(parsedResponse) {
|
|
var shouldDeserialize = parsedResponse.request.shouldDeserialize;
|
|
var result;
|
|
if (shouldDeserialize === undefined) {
|
|
result = true;
|
|
}
|
|
else if (typeof shouldDeserialize === "boolean") {
|
|
result = shouldDeserialize;
|
|
}
|
|
else {
|
|
result = shouldDeserialize(parsedResponse);
|
|
}
|
|
return result;
|
|
}
|
|
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response) {
|
|
return parse(jsonContentTypes, xmlContentTypes, response).then(function (parsedResponse) {
|
|
if (!shouldDeserializeResponse(parsedResponse)) {
|
|
return parsedResponse;
|
|
}
|
|
var operationSpec = parsedResponse.request.operationSpec;
|
|
if (!operationSpec || !operationSpec.responses) {
|
|
return parsedResponse;
|
|
}
|
|
var responseSpec = getOperationResponse(parsedResponse);
|
|
var expectedStatusCodes = Object.keys(operationSpec.responses);
|
|
var hasNoExpectedStatusCodes = expectedStatusCodes.length === 0 ||
|
|
(expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default");
|
|
var isExpectedStatusCode = hasNoExpectedStatusCodes
|
|
? 200 <= parsedResponse.status && parsedResponse.status < 300
|
|
: !!responseSpec;
|
|
// There is no operation response spec for current status code.
|
|
// So, treat it as an error case and use the default response spec to deserialize the response.
|
|
if (!isExpectedStatusCode) {
|
|
var defaultResponseSpec = operationSpec.responses.default;
|
|
if (!defaultResponseSpec) {
|
|
return parsedResponse;
|
|
}
|
|
var defaultBodyMapper = defaultResponseSpec.bodyMapper;
|
|
var defaultHeadersMapper = defaultResponseSpec.headersMapper;
|
|
var initialErrorMessage = isStreamOperation(operationSpec)
|
|
? "Unexpected status code: " + parsedResponse.status
|
|
: parsedResponse.bodyAsText;
|
|
var error = new RestError(initialErrorMessage, undefined, parsedResponse.status, parsedResponse.request, parsedResponse);
|
|
try {
|
|
// If error response has a body, try to extract error code & message from it
|
|
// Then try to deserialize it using default body mapper
|
|
if (parsedResponse.parsedBody) {
|
|
var parsedBody = parsedResponse.parsedBody;
|
|
var internalError = parsedBody.error || parsedBody;
|
|
error.code = internalError.code;
|
|
if (internalError.message) {
|
|
error.message = internalError.message;
|
|
}
|
|
if (defaultBodyMapper) {
|
|
var valueToDeserialize = parsedBody;
|
|
if (operationSpec.isXML && defaultBodyMapper.type.name === MapperType.Sequence) {
|
|
valueToDeserialize =
|
|
typeof parsedBody === "object" ? parsedBody[defaultBodyMapper.xmlElementName] : [];
|
|
}
|
|
error.response.parsedBody = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody");
|
|
}
|
|
}
|
|
// 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.rawHeaders(), "operationRes.parsedHeaders");
|
|
}
|
|
}
|
|
catch (defaultError) {
|
|
error.message = "Error \"" + defaultError.message + "\" occurred in deserializing the responseBody - \"" + parsedResponse.bodyAsText + "\" for the default response.";
|
|
}
|
|
throw error;
|
|
}
|
|
// An operation response spec does exist for current status code, so
|
|
// use it to deserialize the response.
|
|
if (responseSpec) {
|
|
if (responseSpec.bodyMapper) {
|
|
var valueToDeserialize = parsedResponse.parsedBody;
|
|
if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) {
|
|
valueToDeserialize =
|
|
typeof valueToDeserialize === "object"
|
|
? valueToDeserialize[responseSpec.bodyMapper.xmlElementName]
|
|
: [];
|
|
}
|
|
try {
|
|
parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody");
|
|
}
|
|
catch (error) {
|
|
var restError = new RestError("Error " + error + " occurred in deserializing the responseBody - " + parsedResponse.bodyAsText, undefined, parsedResponse.status, parsedResponse.request, 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.rawHeaders(), "operationRes.parsedHeaders");
|
|
}
|
|
}
|
|
return parsedResponse;
|
|
});
|
|
}
|
|
function parse(jsonContentTypes, xmlContentTypes, operationResponse) {
|
|
var errorHandler = function (err) {
|
|
var msg = "Error \"" + err + "\" occurred while parsing the response body - " + operationResponse.bodyAsText + ".";
|
|
var errCode = err.code || RestError.PARSE_ERROR;
|
|
var e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse);
|
|
return Promise.reject(e);
|
|
};
|
|
if (!operationResponse.request.streamResponseBody && operationResponse.bodyAsText) {
|
|
var text_1 = operationResponse.bodyAsText;
|
|
var contentType = operationResponse.headers.get("Content-Type") || "";
|
|
var contentComponents = !contentType
|
|
? []
|
|
: contentType.split(";").map(function (component) { return component.toLowerCase(); });
|
|
if (contentComponents.length === 0 ||
|
|
contentComponents.some(function (component) { return jsonContentTypes.indexOf(component) !== -1; })) {
|
|
return new Promise(function (resolve) {
|
|
operationResponse.parsedBody = JSON.parse(text_1);
|
|
resolve(operationResponse);
|
|
}).catch(errorHandler);
|
|
}
|
|
else if (contentComponents.some(function (component) { return xmlContentTypes.indexOf(component) !== -1; })) {
|
|
return parseXML(text_1)
|
|
.then(function (body) {
|
|
operationResponse.parsedBody = body;
|
|
return operationResponse;
|
|
})
|
|
.catch(errorHandler);
|
|
}
|
|
}
|
|
return Promise.resolve(operationResponse);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
var DEFAULT_CLIENT_RETRY_COUNT = 3;
|
|
// intervals are in ms
|
|
var DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;
|
|
var DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;
|
|
var DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;
|
|
function isNumber(n) {
|
|
return typeof n === "number";
|
|
}
|
|
/**
|
|
* @internal
|
|
* Determines if the operation should be retried.
|
|
*
|
|
* @param {number} retryLimit Specifies the max number of retries.
|
|
* @param {(response?: HttpOperationResponse, error?: RetryError) => boolean} predicate Initial chekck on whether to retry based on given responses or errors
|
|
* @param {RetryData} retryData The retry data.
|
|
* @return {boolean} True if the operation qualifies for a retry; false otherwise.
|
|
*/
|
|
function shouldRetry(retryLimit, predicate, retryData, response, error) {
|
|
if (!predicate(response, error)) {
|
|
return false;
|
|
}
|
|
return retryData.retryCount < retryLimit;
|
|
}
|
|
/**
|
|
* @internal
|
|
* Updates the retry data for the next attempt.
|
|
*
|
|
* @param {RetryPolicyOptions} retryOptions specifies retry interval, and its lower bound and upper bound.
|
|
* @param {RetryData} [retryData] The retry data.
|
|
* @param {RetryError} [err] The operation"s error, if any.
|
|
*/
|
|
function updateRetryData(retryOptions, retryData, err) {
|
|
if (retryData === void 0) { retryData = { retryCount: 0, retryInterval: 0 }; }
|
|
if (err) {
|
|
if (retryData.error) {
|
|
err.innerError = retryData.error;
|
|
}
|
|
retryData.error = err;
|
|
}
|
|
// Adjust retry count
|
|
retryData.retryCount++;
|
|
// Adjust retry interval
|
|
var incrementDelta = Math.pow(2, retryData.retryCount - 1) - 1;
|
|
var boundedRandDelta = retryOptions.retryInterval * 0.8 +
|
|
Math.floor(Math.random() * (retryOptions.retryInterval * 0.4));
|
|
incrementDelta *= boundedRandDelta;
|
|
retryData.retryInterval = Math.min(retryOptions.minRetryInterval + incrementDelta, retryOptions.maxRetryInterval);
|
|
return retryData;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
|
|
}
|
|
};
|
|
}
|
|
(function (RetryMode) {
|
|
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
|
|
})(exports.RetryMode || (exports.RetryMode = {}));
|
|
var DefaultRetryOptions = {
|
|
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
|
|
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
|
|
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
|
|
};
|
|
/**
|
|
* @class
|
|
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
|
|
*/
|
|
var ExponentialRetryPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(ExponentialRetryPolicy, _super);
|
|
/**
|
|
* @constructor
|
|
* @param {RequestPolicy} nextPolicy The next RequestPolicy in the pipeline chain.
|
|
* @param {RequestPolicyOptions} options The options for this RequestPolicy.
|
|
* @param {number} [retryCount] The client retry count.
|
|
* @param {number} [retryInterval] The client retry interval, in milliseconds.
|
|
* @param {number} [minRetryInterval] The minimum retry interval, in milliseconds.
|
|
* @param {number} [maxRetryInterval] The maximum retry interval, in milliseconds.
|
|
*/
|
|
function ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;
|
|
_this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;
|
|
_this.maxRetryInterval = isNumber(maxRetryInterval)
|
|
? maxRetryInterval
|
|
: DEFAULT_CLIENT_MAX_RETRY_INTERVAL;
|
|
return _this;
|
|
}
|
|
ExponentialRetryPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.then(function (response) { return retry(_this, request, response); })
|
|
.catch(function (error) { return retry(_this, request, error.response, undefined, error); });
|
|
};
|
|
return ExponentialRetryPolicy;
|
|
}(BaseRequestPolicy));
|
|
function retry(policy, request, response, retryData, requestError) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
function shouldPolicyRetry(response) {
|
|
var statusCode = response === null || response === void 0 ? void 0 : response.status;
|
|
if (statusCode === undefined ||
|
|
(statusCode < 500 && statusCode !== 408) ||
|
|
statusCode === 501 ||
|
|
statusCode === 505) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
var isAborted, res, err_1, err;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
retryData = updateRetryData({
|
|
retryInterval: policy.retryInterval,
|
|
minRetryInterval: 0,
|
|
maxRetryInterval: policy.maxRetryInterval
|
|
}, retryData, requestError);
|
|
isAborted = request.abortSignal && request.abortSignal.aborted;
|
|
if (!(!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response))) return [3 /*break*/, 6];
|
|
logger.info("Retrying request in " + retryData.retryInterval);
|
|
_a.label = 1;
|
|
case 1:
|
|
_a.trys.push([1, 4, , 5]);
|
|
return [4 /*yield*/, delay(retryData.retryInterval)];
|
|
case 2:
|
|
_a.sent();
|
|
return [4 /*yield*/, policy._nextPolicy.sendRequest(request.clone())];
|
|
case 3:
|
|
res = _a.sent();
|
|
return [2 /*return*/, retry(policy, request, res, retryData)];
|
|
case 4:
|
|
err_1 = _a.sent();
|
|
return [2 /*return*/, retry(policy, request, response, retryData, err_1)];
|
|
case 5: return [3 /*break*/, 7];
|
|
case 6:
|
|
if (isAborted || requestError || !response) {
|
|
err = retryData.error ||
|
|
new RestError("Failed to send the request.", RestError.REQUEST_SEND_ERROR, response && response.status, response && response.request, response);
|
|
throw err;
|
|
}
|
|
else {
|
|
return [2 /*return*/, response];
|
|
}
|
|
case 7: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function generateClientRequestIdPolicy(requestIdHeaderName) {
|
|
if (requestIdHeaderName === void 0) { requestIdHeaderName = "x-ms-client-request-id"; }
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
|
|
}
|
|
};
|
|
}
|
|
var GenerateClientRequestIdPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(GenerateClientRequestIdPolicy, _super);
|
|
function GenerateClientRequestIdPolicy(nextPolicy, options, _requestIdHeaderName) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this._requestIdHeaderName = _requestIdHeaderName;
|
|
return _this;
|
|
}
|
|
GenerateClientRequestIdPolicy.prototype.sendRequest = function (request) {
|
|
if (!request.headers.contains(this._requestIdHeaderName)) {
|
|
request.headers.set(this._requestIdHeaderName, request.requestId);
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
};
|
|
return GenerateClientRequestIdPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getDefaultUserAgentKey() {
|
|
return Constants.HeaderConstants.USER_AGENT;
|
|
}
|
|
function getPlatformSpecificData() {
|
|
var runtimeInfo = {
|
|
key: "Node",
|
|
value: process.version
|
|
};
|
|
var osInfo = {
|
|
key: "OS",
|
|
value: "(" + os.arch() + "-" + os.type() + "-" + os.release() + ")"
|
|
};
|
|
return [runtimeInfo, osInfo];
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getRuntimeInfo() {
|
|
var msRestRuntime = {
|
|
key: "core-http",
|
|
value: Constants.coreHttpVersion
|
|
};
|
|
return [msRestRuntime];
|
|
}
|
|
function getUserAgentString(telemetryInfo, keySeparator, valueSeparator) {
|
|
if (keySeparator === void 0) { keySeparator = " "; }
|
|
if (valueSeparator === void 0) { valueSeparator = "/"; }
|
|
return telemetryInfo
|
|
.map(function (info) {
|
|
var value = info.value ? "" + valueSeparator + info.value : "";
|
|
return "" + info.key + value;
|
|
})
|
|
.join(keySeparator);
|
|
}
|
|
var getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
|
function getDefaultUserAgentValue() {
|
|
var runtimeInfo = getRuntimeInfo();
|
|
var platformSpecificData = getPlatformSpecificData();
|
|
var userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
|
return userAgent;
|
|
}
|
|
function userAgentPolicy(userAgentData) {
|
|
var key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
|
? getDefaultUserAgentKey()
|
|
: userAgentData.key;
|
|
var value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
|
? getDefaultUserAgentValue()
|
|
: userAgentData.value;
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new UserAgentPolicy(nextPolicy, options, key, value);
|
|
}
|
|
};
|
|
}
|
|
var UserAgentPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(UserAgentPolicy, _super);
|
|
function UserAgentPolicy(_nextPolicy, _options, headerKey, headerValue) {
|
|
var _this = _super.call(this, _nextPolicy, _options) || this;
|
|
_this._nextPolicy = _nextPolicy;
|
|
_this._options = _options;
|
|
_this.headerKey = headerKey;
|
|
_this.headerValue = headerValue;
|
|
return _this;
|
|
}
|
|
UserAgentPolicy.prototype.sendRequest = function (request) {
|
|
this.addUserAgentHeader(request);
|
|
return this._nextPolicy.sendRequest(request);
|
|
};
|
|
UserAgentPolicy.prototype.addUserAgentHeader = function (request) {
|
|
if (!request.headers) {
|
|
request.headers = new HttpHeaders();
|
|
}
|
|
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
|
request.headers.set(this.headerKey, this.headerValue);
|
|
}
|
|
};
|
|
return UserAgentPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var DefaultRedirectOptions = {
|
|
handleRedirects: true,
|
|
maxRetries: 20
|
|
};
|
|
function redirectPolicy(maximumRetries) {
|
|
if (maximumRetries === void 0) { maximumRetries = 20; }
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
|
}
|
|
};
|
|
}
|
|
var RedirectPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(RedirectPolicy, _super);
|
|
function RedirectPolicy(nextPolicy, options, maxRetries) {
|
|
if (maxRetries === void 0) { maxRetries = 20; }
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.maxRetries = maxRetries;
|
|
return _this;
|
|
}
|
|
RedirectPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
return this._nextPolicy
|
|
.sendRequest(request)
|
|
.then(function (response) { return handleRedirect(_this, response, 0); });
|
|
};
|
|
return RedirectPolicy;
|
|
}(BaseRequestPolicy));
|
|
function handleRedirect(policy, response, currentRetries) {
|
|
var request = response.request, status = response.status;
|
|
var locationHeader = response.headers.get("location");
|
|
if (locationHeader &&
|
|
(status === 300 || status === 307 || (status === 303 && request.method === "POST")) &&
|
|
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
|
var builder = URLBuilder.parse(request.url);
|
|
builder.setPath(locationHeader);
|
|
request.url = builder.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";
|
|
}
|
|
return policy._nextPolicy
|
|
.sendRequest(request)
|
|
.then(function (res) { return handleRedirect(policy, res, currentRetries + 1); });
|
|
}
|
|
return Promise.resolve(response);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function rpRegistrationPolicy(retryTimeout) {
|
|
if (retryTimeout === void 0) { retryTimeout = 30; }
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
|
|
}
|
|
};
|
|
}
|
|
var RPRegistrationPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(RPRegistrationPolicy, _super);
|
|
function RPRegistrationPolicy(nextPolicy, options, _retryTimeout) {
|
|
if (_retryTimeout === void 0) { _retryTimeout = 30; }
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this._retryTimeout = _retryTimeout;
|
|
return _this;
|
|
}
|
|
RPRegistrationPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.then(function (response) { return registerIfNeeded(_this, request, response); });
|
|
};
|
|
return RPRegistrationPolicy;
|
|
}(BaseRequestPolicy));
|
|
function registerIfNeeded(policy, request, response) {
|
|
if (response.status === 409) {
|
|
var rpName = checkRPNotRegisteredError(response.bodyAsText);
|
|
if (rpName) {
|
|
var urlPrefix = extractSubscriptionUrl(request.url);
|
|
return (registerRP(policy, urlPrefix, rpName, request)
|
|
// Autoregistration of ${provider} failed for some reason. We will not return this error
|
|
// instead will return the initial response with 409 status code back to the user.
|
|
// do nothing here as we are returning the original response at the end of this method.
|
|
.catch(function () { return false; })
|
|
.then(function (registrationStatus) {
|
|
if (registrationStatus) {
|
|
// Retry the original request. We have to change the x-ms-client-request-id
|
|
// otherwise Azure endpoint will return the initial 409 (cached) response.
|
|
request.headers.set("x-ms-client-request-id", generateUuid());
|
|
return policy._nextPolicy.sendRequest(request.clone());
|
|
}
|
|
return response;
|
|
}));
|
|
}
|
|
}
|
|
return Promise.resolve(response);
|
|
}
|
|
/**
|
|
* Reuses the headers of the original request and url (if specified).
|
|
* @param {WebResourceLike} originalRequest The original request
|
|
* @param {boolean} reuseUrlToo Should the url from the original request be reused as well. Default false.
|
|
* @returns {object} A new request object with desired headers.
|
|
*/
|
|
function getRequestEssentials(originalRequest, reuseUrlToo) {
|
|
if (reuseUrlToo === void 0) { reuseUrlToo = false; }
|
|
var reqOptions = originalRequest.clone();
|
|
if (reuseUrlToo) {
|
|
reqOptions.url = originalRequest.url;
|
|
}
|
|
// We have to change the x-ms-client-request-id otherwise Azure endpoint
|
|
// will return the initial 409 (cached) response.
|
|
reqOptions.headers.set("x-ms-client-request-id", generateUuid());
|
|
// Set content-type to application/json
|
|
reqOptions.headers.set("Content-Type", "application/json; charset=utf-8");
|
|
return reqOptions;
|
|
}
|
|
/**
|
|
* Validates the error code and message associated with 409 response status code. If it matches to that of
|
|
* RP not registered then it returns the name of the RP else returns undefined.
|
|
* @param {string} body The response body received after making the original request.
|
|
* @returns {string} The name of the RP if condition is satisfied else undefined.
|
|
*/
|
|
function checkRPNotRegisteredError(body) {
|
|
var result, responseBody;
|
|
if (body) {
|
|
try {
|
|
responseBody = JSON.parse(body);
|
|
}
|
|
catch (err) {
|
|
// do nothing;
|
|
}
|
|
if (responseBody &&
|
|
responseBody.error &&
|
|
responseBody.error.message &&
|
|
responseBody.error.code &&
|
|
responseBody.error.code === "MissingSubscriptionRegistration") {
|
|
var matchRes = responseBody.error.message.match(/.*'(.*)'/i);
|
|
if (matchRes) {
|
|
result = matchRes.pop();
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Extracts the first part of the URL, just after subscription:
|
|
* https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
|
|
* @param {string} url The original request url
|
|
* @returns {string} The url prefix as explained above.
|
|
*/
|
|
function extractSubscriptionUrl(url) {
|
|
var result;
|
|
var matchRes = url.match(/.*\/subscriptions\/[a-f0-9-]+\//gi);
|
|
if (matchRes && matchRes[0]) {
|
|
result = matchRes[0];
|
|
}
|
|
else {
|
|
throw new Error("Unable to extract subscriptionId from the given url - " + url + ".");
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Registers the given provider.
|
|
* @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.
|
|
* @param {string} urlPrefix https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
|
|
* @param {string} provider The provider name to be registered.
|
|
* @param {WebResourceLike} originalRequest The original request sent by the user that returned a 409 response
|
|
* with a message that the provider is not registered.
|
|
* @param {registrationCallback} callback The callback that handles the RP registration
|
|
*/
|
|
function registerRP(policy, urlPrefix, provider, originalRequest) {
|
|
var postUrl = urlPrefix + "providers/" + provider + "/register?api-version=2016-02-01";
|
|
var getUrl = urlPrefix + "providers/" + provider + "?api-version=2016-02-01";
|
|
var reqOptions = getRequestEssentials(originalRequest);
|
|
reqOptions.method = "POST";
|
|
reqOptions.url = postUrl;
|
|
return policy._nextPolicy.sendRequest(reqOptions).then(function (response) {
|
|
if (response.status !== 200) {
|
|
throw new Error("Autoregistration of " + provider + " failed. Please try registering manually.");
|
|
}
|
|
return getRegistrationStatus(policy, getUrl, originalRequest);
|
|
});
|
|
}
|
|
/**
|
|
* Polls the registration status of the provider that was registered. Polling happens at an interval of 30 seconds.
|
|
* Polling will happen till the registrationState property of the response body is "Registered".
|
|
* @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.
|
|
* @param {string} url The request url for polling
|
|
* @param {WebResourceLike} originalRequest The original request sent by the user that returned a 409 response
|
|
* with a message that the provider is not registered.
|
|
* @returns {Promise<boolean>} True if RP Registration is successful.
|
|
*/
|
|
function getRegistrationStatus(policy, url, originalRequest) {
|
|
var reqOptions = getRequestEssentials(originalRequest);
|
|
reqOptions.url = url;
|
|
reqOptions.method = "GET";
|
|
return policy._nextPolicy.sendRequest(reqOptions).then(function (res) {
|
|
var obj = res.parsedBody;
|
|
if (res.parsedBody && obj.registrationState && obj.registrationState === "Registered") {
|
|
return true;
|
|
}
|
|
else {
|
|
return delay(policy._retryTimeout * 1000)
|
|
.then(function () { return getRegistrationStatus(policy, url, originalRequest); });
|
|
}
|
|
});
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Defines the default token refresh buffer duration.
|
|
*/
|
|
var TokenRefreshBufferMs = 2 * 60 * 1000; // 2 Minutes
|
|
/**
|
|
* Provides an {@link AccessTokenCache} implementation which clears
|
|
* the cached {@link AccessToken}'s after the expiresOnTimestamp has
|
|
* passed.
|
|
*/
|
|
var ExpiringAccessTokenCache = /** @class */ (function () {
|
|
/**
|
|
* Constructs an instance of {@link ExpiringAccessTokenCache} with
|
|
* an optional expiration buffer time.
|
|
*/
|
|
function ExpiringAccessTokenCache(tokenRefreshBufferMs) {
|
|
if (tokenRefreshBufferMs === void 0) { tokenRefreshBufferMs = TokenRefreshBufferMs; }
|
|
this.cachedToken = undefined;
|
|
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
|
|
}
|
|
ExpiringAccessTokenCache.prototype.setCachedToken = function (accessToken) {
|
|
this.cachedToken = accessToken;
|
|
};
|
|
ExpiringAccessTokenCache.prototype.getCachedToken = function () {
|
|
if (this.cachedToken &&
|
|
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
|
|
this.cachedToken = undefined;
|
|
}
|
|
return this.cachedToken;
|
|
};
|
|
return ExpiringAccessTokenCache;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Creates a new BearerTokenAuthenticationPolicy factory.
|
|
*
|
|
* @param credential The TokenCredential implementation that can supply the bearer token.
|
|
* @param scopes The scopes for which the bearer token applies.
|
|
*/
|
|
function bearerTokenAuthenticationPolicy(credential, scopes) {
|
|
var tokenCache = new ExpiringAccessTokenCache();
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new BearerTokenAuthenticationPolicy(nextPolicy, options, credential, scopes, tokenCache);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
*
|
|
* Provides a RequestPolicy that can request a token from a TokenCredential
|
|
* implementation and then apply it to the Authorization header of a request
|
|
* as a Bearer token.
|
|
*
|
|
*/
|
|
var BearerTokenAuthenticationPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(BearerTokenAuthenticationPolicy, _super);
|
|
/**
|
|
* Creates a new BearerTokenAuthenticationPolicy object.
|
|
*
|
|
* @param nextPolicy The next RequestPolicy in the request pipeline.
|
|
* @param options Options for this RequestPolicy.
|
|
* @param credential The TokenCredential implementation that can supply the bearer token.
|
|
* @param scopes The scopes for which the bearer token applies.
|
|
* @param tokenCache The cache for the most recent AccessToken returned from the TokenCredential.
|
|
*/
|
|
function BearerTokenAuthenticationPolicy(nextPolicy, options, credential, scopes, tokenCache) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.credential = credential;
|
|
_this.scopes = scopes;
|
|
_this.tokenCache = tokenCache;
|
|
return _this;
|
|
}
|
|
/**
|
|
* Applies the Bearer token to the request through the Authorization header.
|
|
* @param webResource
|
|
*/
|
|
BearerTokenAuthenticationPolicy.prototype.sendRequest = function (webResource) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var token;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!webResource.headers)
|
|
webResource.headers = new HttpHeaders();
|
|
return [4 /*yield*/, this.getToken({
|
|
abortSignal: webResource.abortSignal,
|
|
tracingOptions: {
|
|
spanOptions: webResource.spanOptions
|
|
}
|
|
})];
|
|
case 1:
|
|
token = _a.sent();
|
|
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, "Bearer " + token);
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(webResource)];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
BearerTokenAuthenticationPolicy.prototype.getToken = function (options) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var accessToken;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
accessToken = this.tokenCache.getCachedToken();
|
|
if (!(accessToken === undefined)) return [3 /*break*/, 2];
|
|
return [4 /*yield*/, this.credential.getToken(this.scopes, options)];
|
|
case 1:
|
|
accessToken = (_a.sent()) || undefined;
|
|
this.tokenCache.setCachedToken(accessToken);
|
|
_a.label = 2;
|
|
case 2: return [2 /*return*/, accessToken ? accessToken.token : undefined];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return BearerTokenAuthenticationPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* @class
|
|
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
|
|
*
|
|
* @constructor
|
|
* @param {number} retryCount The client retry count.
|
|
* @param {number} retryInterval The client retry interval, in milliseconds.
|
|
* @param {number} minRetryInterval The minimum retry interval, in milliseconds.
|
|
* @param {number} maxRetryInterval The maximum retry interval, in milliseconds.
|
|
*/
|
|
var SystemErrorRetryPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(SystemErrorRetryPolicy, _super);
|
|
function SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;
|
|
_this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;
|
|
_this.minRetryInterval = isNumber(minRetryInterval)
|
|
? minRetryInterval
|
|
: DEFAULT_CLIENT_MIN_RETRY_INTERVAL;
|
|
_this.maxRetryInterval = isNumber(maxRetryInterval)
|
|
? maxRetryInterval
|
|
: DEFAULT_CLIENT_MAX_RETRY_INTERVAL;
|
|
return _this;
|
|
}
|
|
SystemErrorRetryPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.catch(function (error) { return retry$1(_this, request, error.response, error); });
|
|
};
|
|
return SystemErrorRetryPolicy;
|
|
}(BaseRequestPolicy));
|
|
function retry$1(policy, request, operationResponse, err, retryData) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
function shouldPolicyRetry(_response, error) {
|
|
if (error &&
|
|
error.code &&
|
|
(error.code === "ETIMEDOUT" ||
|
|
error.code === "ESOCKETTIMEDOUT" ||
|
|
error.code === "ECONNREFUSED" ||
|
|
error.code === "ECONNRESET" ||
|
|
error.code === "ENOENT")) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
var err_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
retryData = updateRetryData(policy, retryData, err);
|
|
if (!shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, operationResponse, err)) return [3 /*break*/, 5];
|
|
_a.label = 1;
|
|
case 1:
|
|
_a.trys.push([1, 3, , 4]);
|
|
return [4 /*yield*/, delay(retryData.retryInterval)];
|
|
case 2:
|
|
_a.sent();
|
|
return [2 /*return*/, policy._nextPolicy.sendRequest(request.clone())];
|
|
case 3:
|
|
err_1 = _a.sent();
|
|
return [2 /*return*/, retry$1(policy, request, operationResponse, err_1, retryData)];
|
|
case 4: return [3 /*break*/, 6];
|
|
case 5:
|
|
if (err) {
|
|
// If the operation failed in the end, return all errors instead of just the last one
|
|
return [2 /*return*/, Promise.reject(retryData.error)];
|
|
}
|
|
return [2 /*return*/, operationResponse];
|
|
case 6: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(function (QueryCollectionFormat) {
|
|
QueryCollectionFormat["Csv"] = ",";
|
|
QueryCollectionFormat["Ssv"] = " ";
|
|
QueryCollectionFormat["Tsv"] = "\t";
|
|
QueryCollectionFormat["Pipes"] = "|";
|
|
QueryCollectionFormat["Multi"] = "Multi";
|
|
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function loadEnvironmentProxyValue() {
|
|
if (!process) {
|
|
return undefined;
|
|
}
|
|
if (process.env[Constants.HTTPS_PROXY]) {
|
|
return process.env[Constants.HTTPS_PROXY];
|
|
}
|
|
else if (process.env[Constants.HTTPS_PROXY.toLowerCase()]) {
|
|
return process.env[Constants.HTTPS_PROXY.toLowerCase()];
|
|
}
|
|
else if (process.env[Constants.HTTP_PROXY]) {
|
|
return process.env[Constants.HTTP_PROXY];
|
|
}
|
|
else if (process.env[Constants.HTTP_PROXY.toLowerCase()]) {
|
|
return process.env[Constants.HTTP_PROXY.toLowerCase()];
|
|
}
|
|
return undefined;
|
|
}
|
|
function getDefaultProxySettings(proxyUrl) {
|
|
if (!proxyUrl) {
|
|
proxyUrl = loadEnvironmentProxyValue();
|
|
if (!proxyUrl) {
|
|
return undefined;
|
|
}
|
|
}
|
|
var _a = extractAuthFromUrl(proxyUrl), username = _a.username, password = _a.password, urlWithoutAuth = _a.urlWithoutAuth;
|
|
var parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
|
var schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
|
return {
|
|
host: schema + parsedUrl.getHost(),
|
|
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
|
username: username,
|
|
password: password
|
|
};
|
|
}
|
|
function proxyPolicy(proxySettings) {
|
|
if (!proxySettings) {
|
|
proxySettings = getDefaultProxySettings();
|
|
}
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new ProxyPolicy(nextPolicy, options, proxySettings);
|
|
}
|
|
};
|
|
}
|
|
function extractAuthFromUrl(url) {
|
|
var atIndex = url.indexOf("@");
|
|
if (atIndex === -1) {
|
|
return { urlWithoutAuth: url };
|
|
}
|
|
var schemeIndex = url.indexOf("://");
|
|
var authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
|
var auth = url.substring(authStart, atIndex);
|
|
var colonIndex = auth.indexOf(":");
|
|
var hasPassword = colonIndex !== -1;
|
|
var username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
|
var password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
|
var urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
|
return {
|
|
username: username,
|
|
password: password,
|
|
urlWithoutAuth: urlWithoutAuth
|
|
};
|
|
}
|
|
var ProxyPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(ProxyPolicy, _super);
|
|
function ProxyPolicy(nextPolicy, options, proxySettings) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.proxySettings = proxySettings;
|
|
return _this;
|
|
}
|
|
ProxyPolicy.prototype.sendRequest = function (request) {
|
|
if (!request.proxySettings) {
|
|
request.proxySettings = this.proxySettings;
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
};
|
|
return ProxyPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var StatusCodes = Constants.HttpConstants.StatusCodes;
|
|
function throttlingRetryPolicy() {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new ThrottlingRetryPolicy(nextPolicy, options);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* To learn more, please refer to
|
|
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
|
|
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
|
|
* https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
|
|
*/
|
|
var ThrottlingRetryPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(ThrottlingRetryPolicy, _super);
|
|
function ThrottlingRetryPolicy(nextPolicy, options, _handleResponse) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this._handleResponse = _handleResponse || _this._defaultResponseHandler;
|
|
return _this;
|
|
}
|
|
ThrottlingRetryPolicy.prototype.sendRequest = function (httpRequest) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(httpRequest.clone()).then(function (response) {
|
|
if (response.status !== StatusCodes.TooManyRequests) {
|
|
return response;
|
|
}
|
|
else {
|
|
return _this._handleResponse(httpRequest, response);
|
|
}
|
|
})];
|
|
});
|
|
});
|
|
};
|
|
ThrottlingRetryPolicy.prototype._defaultResponseHandler = function (httpRequest, httpResponse) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var retryAfterHeader, delayInMs;
|
|
var _this = this;
|
|
return tslib.__generator(this, function (_a) {
|
|
retryAfterHeader = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER);
|
|
if (retryAfterHeader) {
|
|
delayInMs = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader);
|
|
if (delayInMs) {
|
|
return [2 /*return*/, delay(delayInMs).then(function (_) { return _this._nextPolicy.sendRequest(httpRequest); })];
|
|
}
|
|
}
|
|
return [2 /*return*/, httpResponse];
|
|
});
|
|
});
|
|
};
|
|
ThrottlingRetryPolicy.parseRetryAfterHeader = function (headerValue) {
|
|
var retryAfterInSeconds = Number(headerValue);
|
|
if (Number.isNaN(retryAfterInSeconds)) {
|
|
return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue);
|
|
}
|
|
else {
|
|
return retryAfterInSeconds * 1000;
|
|
}
|
|
};
|
|
ThrottlingRetryPolicy.parseDateRetryAfterHeader = function (headerValue) {
|
|
try {
|
|
var now = Date.now();
|
|
var date = Date.parse(headerValue);
|
|
var diff = date - now;
|
|
return Number.isNaN(diff) ? undefined : diff;
|
|
}
|
|
catch (error) {
|
|
return undefined;
|
|
}
|
|
};
|
|
return ThrottlingRetryPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function signingPolicy(authenticationProvider) {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
|
}
|
|
};
|
|
}
|
|
var SigningPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(SigningPolicy, _super);
|
|
function SigningPolicy(nextPolicy, options, authenticationProvider) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.authenticationProvider = authenticationProvider;
|
|
return _this;
|
|
}
|
|
SigningPolicy.prototype.signRequest = function (request) {
|
|
return this.authenticationProvider.signRequest(request);
|
|
};
|
|
SigningPolicy.prototype.sendRequest = function (request) {
|
|
var _this = this;
|
|
return this.signRequest(request).then(function (nextRequest) {
|
|
return _this._nextPolicy.sendRequest(nextRequest);
|
|
});
|
|
};
|
|
return SigningPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var DefaultKeepAliveOptions = {
|
|
enable: true
|
|
};
|
|
function keepAlivePolicy(keepAliveOptions) {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
|
*/
|
|
var KeepAlivePolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(KeepAlivePolicy, _super);
|
|
/**
|
|
* Creates an instance of KeepAlivePolicy.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
* @param {KeepAliveOptions} [keepAliveOptions]
|
|
*/
|
|
function KeepAlivePolicy(nextPolicy, options, keepAliveOptions) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.keepAliveOptions = keepAliveOptions;
|
|
return _this;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param {WebResourceLike} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
* @memberof KeepAlivePolicy
|
|
*/
|
|
KeepAlivePolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
request.keepAlive = this.keepAliveOptions.enable;
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
});
|
|
});
|
|
};
|
|
return KeepAlivePolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function tracingPolicy(tracingOptions) {
|
|
if (tracingOptions === void 0) { tracingOptions = {}; }
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new TracingPolicy(nextPolicy, options, tracingOptions);
|
|
}
|
|
};
|
|
}
|
|
var TracingPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(TracingPolicy, _super);
|
|
function TracingPolicy(nextPolicy, options, tracingOptions) {
|
|
var _this = _super.call(this, nextPolicy, options) || this;
|
|
_this.userAgent = tracingOptions.userAgent;
|
|
return _this;
|
|
}
|
|
TracingPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var tracer, spanOptions, path, span, spanContext, traceParentHeader, traceState, response, serviceRequestId, err_1;
|
|
return tslib.__generator(this, function (_a) {
|
|
switch (_a.label) {
|
|
case 0:
|
|
if (!request.spanOptions || !request.spanOptions.parent) {
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
}
|
|
tracer = coreTracing.getTracer();
|
|
spanOptions = tslib.__assign(tslib.__assign({}, request.spanOptions), { kind: api.SpanKind.CLIENT });
|
|
path = URLBuilder.parse(request.url).getPath() || "/";
|
|
span = tracer.startSpan(path, spanOptions);
|
|
span.setAttributes({
|
|
"http.method": request.method,
|
|
"http.url": request.url,
|
|
requestId: request.requestId
|
|
});
|
|
if (this.userAgent) {
|
|
span.setAttribute("http.user_agent", this.userAgent);
|
|
}
|
|
_a.label = 1;
|
|
case 1:
|
|
_a.trys.push([1, 3, , 4]);
|
|
spanContext = span.context();
|
|
traceParentHeader = coreTracing.getTraceParentHeader(spanContext);
|
|
if (traceParentHeader) {
|
|
request.headers.set("traceparent", traceParentHeader);
|
|
traceState = spanContext.traceState && spanContext.traceState.serialize();
|
|
// if tracestate is set, traceparent MUST be set, so only set tracestate after traceparent
|
|
if (traceState) {
|
|
request.headers.set("tracestate", traceState);
|
|
}
|
|
}
|
|
return [4 /*yield*/, this._nextPolicy.sendRequest(request)];
|
|
case 2:
|
|
response = _a.sent();
|
|
span.setAttribute("http.status_code", response.status);
|
|
serviceRequestId = response.headers.get("x-ms-request-id");
|
|
if (serviceRequestId) {
|
|
span.setAttribute("serviceRequestId", serviceRequestId);
|
|
}
|
|
span.end();
|
|
return [2 /*return*/, response];
|
|
case 3:
|
|
err_1 = _a.sent();
|
|
span.end();
|
|
throw err_1;
|
|
case 4: return [2 /*return*/];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return TracingPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Returns a request policy factory that can be used to create an instance of
|
|
* {@link DisableResponseDecompressionPolicy}.
|
|
*/
|
|
function disableResponseDecompressionPolicy() {
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
return new DisableResponseDecompressionPolicy(nextPolicy, options);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* A policy to disable response decompression according to Accept-Encoding header
|
|
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
|
|
*/
|
|
var DisableResponseDecompressionPolicy = /** @class */ (function (_super) {
|
|
tslib.__extends(DisableResponseDecompressionPolicy, _super);
|
|
/**
|
|
* Creates an instance of DisableResponseDecompressionPolicy.
|
|
*
|
|
* @param {RequestPolicy} nextPolicy
|
|
* @param {RequestPolicyOptions} options
|
|
*/
|
|
// The parent constructor is protected.
|
|
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
|
function DisableResponseDecompressionPolicy(nextPolicy, options) {
|
|
return _super.call(this, nextPolicy, options) || this;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param {WebResource} request
|
|
* @returns {Promise<HttpOperationResponse>}
|
|
*/
|
|
DisableResponseDecompressionPolicy.prototype.sendRequest = function (request) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
return tslib.__generator(this, function (_a) {
|
|
request.decompressResponse = false;
|
|
return [2 /*return*/, this._nextPolicy.sendRequest(request)];
|
|
});
|
|
});
|
|
};
|
|
return DisableResponseDecompressionPolicy;
|
|
}(BaseRequestPolicy));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* @class
|
|
* Initializes a new instance of the ServiceClient.
|
|
*/
|
|
var ServiceClient = /** @class */ (function () {
|
|
/**
|
|
* The ServiceClient constructor
|
|
* @constructor
|
|
* @param credentials The credentials used for authentication with the service.
|
|
* @param options The service client options that govern the behavior of the client.
|
|
*/
|
|
function ServiceClient(credentials,
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */
|
|
options) {
|
|
var _this = this;
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
this._withCredentials = options.withCredentials || false;
|
|
this._httpClient = options.httpClient || new NodeFetchHttpClient();
|
|
this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger);
|
|
var requestPolicyFactories;
|
|
if (Array.isArray(options.requestPolicyFactories)) {
|
|
logger.info("ServiceClient: using custom request policies");
|
|
requestPolicyFactories = options.requestPolicyFactories;
|
|
}
|
|
else {
|
|
var authPolicyFactory = undefined;
|
|
if (coreAuth.isTokenCredential(credentials)) {
|
|
logger.info("ServiceClient: creating bearer token authentication policy from provided credentials");
|
|
// Create a wrapped RequestPolicyFactory here so that we can provide the
|
|
// correct scope to the BearerTokenAuthenticationPolicy at the first time
|
|
// one is requested. This is needed because generated ServiceClient
|
|
// implementations do not set baseUri until after ServiceClient's constructor
|
|
// is finished, leaving baseUri empty at the time when it is needed to
|
|
// build the correct scope name.
|
|
var wrappedPolicyFactory = function () {
|
|
var bearerTokenPolicyFactory = undefined;
|
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
var serviceClient = _this;
|
|
return {
|
|
create: function (nextPolicy, options) {
|
|
if (bearerTokenPolicyFactory === undefined || bearerTokenPolicyFactory === null) {
|
|
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, (serviceClient.baseUri || "") + "/.default");
|
|
}
|
|
return bearerTokenPolicyFactory.create(nextPolicy, options);
|
|
}
|
|
};
|
|
};
|
|
authPolicyFactory = wrappedPolicyFactory();
|
|
}
|
|
else if (credentials && typeof credentials.signRequest === "function") {
|
|
logger.info("ServiceClient: creating signing policy from provided credentials");
|
|
authPolicyFactory = signingPolicy(credentials);
|
|
}
|
|
else if (credentials !== undefined && credentials !== null) {
|
|
throw new Error("The credentials argument must implement the TokenCredential interface");
|
|
}
|
|
logger.info("ServiceClient: using default request policies");
|
|
requestPolicyFactories = createDefaultRequestPolicyFactories(authPolicyFactory, options);
|
|
if (options.requestPolicyFactories) {
|
|
// options.requestPolicyFactories can also be a function that manipulates
|
|
// the default requestPolicyFactories array
|
|
var newRequestPolicyFactories = options.requestPolicyFactories(requestPolicyFactories);
|
|
if (newRequestPolicyFactories) {
|
|
requestPolicyFactories = newRequestPolicyFactories;
|
|
}
|
|
}
|
|
}
|
|
this._requestPolicyFactories = requestPolicyFactories;
|
|
}
|
|
/**
|
|
* Send the provided httpRequest.
|
|
*/
|
|
ServiceClient.prototype.sendRequest = function (options) {
|
|
if (options === null || options === undefined || typeof options !== "object") {
|
|
throw new Error("options cannot be null or undefined and it must be of type object.");
|
|
}
|
|
var httpRequest;
|
|
try {
|
|
if (isWebResourceLike(options)) {
|
|
options.validateRequestProperties();
|
|
httpRequest = options;
|
|
}
|
|
else {
|
|
httpRequest = new WebResource();
|
|
httpRequest = httpRequest.prepare(options);
|
|
}
|
|
}
|
|
catch (error) {
|
|
return Promise.reject(error);
|
|
}
|
|
var httpPipeline = this._httpClient;
|
|
if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) {
|
|
for (var i = this._requestPolicyFactories.length - 1; i >= 0; --i) {
|
|
httpPipeline = this._requestPolicyFactories[i].create(httpPipeline, this._requestPolicyOptions);
|
|
}
|
|
}
|
|
return httpPipeline.sendRequest(httpRequest);
|
|
};
|
|
/**
|
|
* Send an HTTP request that is populated using the provided OperationSpec.
|
|
* @param {OperationArguments} operationArguments The arguments that the HTTP request's templated values will be populated from.
|
|
* @param {OperationSpec} operationSpec The OperationSpec to use to populate the httpRequest.
|
|
* @param {ServiceCallback} callback The callback to call when the response is received.
|
|
*/
|
|
ServiceClient.prototype.sendOperationRequest = function (operationArguments, operationSpec, callback) {
|
|
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
var httpRequest, result, baseUri, requestUrl, _i, _a, urlParameter, urlParameterValue, _b, _c, queryParameter, queryParameterValue, index, item, index, contentType, _d, _e, headerParameter, headerValue, headerCollectionPrefix, _f, _g, key, options, customHeaderName, rawResponse, sendRequestError, error_1, error_2, cb;
|
|
return tslib.__generator(this, function (_h) {
|
|
switch (_h.label) {
|
|
case 0:
|
|
if (typeof operationArguments.options === "function") {
|
|
callback = operationArguments.options;
|
|
operationArguments.options = undefined;
|
|
}
|
|
httpRequest = new WebResource();
|
|
_h.label = 1;
|
|
case 1:
|
|
_h.trys.push([1, 6, , 7]);
|
|
baseUri = operationSpec.baseUrl || this.baseUri;
|
|
if (!baseUri) {
|
|
throw new Error("If operationSpec.baseUrl is not specified, then the ServiceClient must have a baseUri string property that contains the base URL to use.");
|
|
}
|
|
httpRequest.method = operationSpec.httpMethod;
|
|
httpRequest.operationSpec = operationSpec;
|
|
requestUrl = URLBuilder.parse(baseUri);
|
|
if (operationSpec.path) {
|
|
requestUrl.appendPath(operationSpec.path);
|
|
}
|
|
if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) {
|
|
for (_i = 0, _a = operationSpec.urlParameters; _i < _a.length; _i++) {
|
|
urlParameter = _a[_i];
|
|
urlParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer);
|
|
urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter));
|
|
if (!urlParameter.skipEncoding) {
|
|
urlParameterValue = encodeURIComponent(urlParameterValue);
|
|
}
|
|
requestUrl.replaceAll("{" + (urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)) + "}", urlParameterValue);
|
|
}
|
|
}
|
|
if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) {
|
|
for (_b = 0, _c = operationSpec.queryParameters; _b < _c.length; _b++) {
|
|
queryParameter = _c[_b];
|
|
queryParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer);
|
|
if (queryParameterValue !== undefined && queryParameterValue !== null) {
|
|
queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter));
|
|
if (queryParameter.collectionFormat !== undefined &&
|
|
queryParameter.collectionFormat !== null) {
|
|
if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Multi) {
|
|
if (queryParameterValue.length === 0) {
|
|
queryParameterValue = "";
|
|
}
|
|
else {
|
|
for (index in queryParameterValue) {
|
|
item = queryParameterValue[index];
|
|
queryParameterValue[index] =
|
|
item === undefined || item === null ? "" : item.toString();
|
|
}
|
|
}
|
|
}
|
|
else if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Ssv ||
|
|
queryParameter.collectionFormat === exports.QueryCollectionFormat.Tsv) {
|
|
queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);
|
|
}
|
|
}
|
|
if (!queryParameter.skipEncoding) {
|
|
if (Array.isArray(queryParameterValue)) {
|
|
for (index in queryParameterValue) {
|
|
if (queryParameterValue[index] !== undefined &&
|
|
queryParameterValue[index] !== null) {
|
|
queryParameterValue[index] = encodeURIComponent(queryParameterValue[index]);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
queryParameterValue = encodeURIComponent(queryParameterValue);
|
|
}
|
|
}
|
|
if (queryParameter.collectionFormat !== undefined &&
|
|
queryParameter.collectionFormat !== null &&
|
|
queryParameter.collectionFormat !== exports.QueryCollectionFormat.Multi &&
|
|
queryParameter.collectionFormat !== exports.QueryCollectionFormat.Ssv &&
|
|
queryParameter.collectionFormat !== exports.QueryCollectionFormat.Tsv) {
|
|
queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);
|
|
}
|
|
requestUrl.setQueryParameter(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);
|
|
}
|
|
}
|
|
}
|
|
httpRequest.url = requestUrl.toString();
|
|
contentType = operationSpec.contentType || this.requestContentType;
|
|
if (contentType) {
|
|
httpRequest.headers.set("Content-Type", contentType);
|
|
}
|
|
if (operationSpec.headerParameters) {
|
|
for (_d = 0, _e = operationSpec.headerParameters; _d < _e.length; _d++) {
|
|
headerParameter = _e[_d];
|
|
headerValue = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer);
|
|
if (headerValue !== undefined && headerValue !== null) {
|
|
headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter));
|
|
headerCollectionPrefix = headerParameter.mapper
|
|
.headerCollectionPrefix;
|
|
if (headerCollectionPrefix) {
|
|
for (_f = 0, _g = Object.keys(headerValue); _f < _g.length; _f++) {
|
|
key = _g[_f];
|
|
httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]);
|
|
}
|
|
}
|
|
else {
|
|
httpRequest.headers.set(headerParameter.mapper.serializedName ||
|
|
getPathStringFromParameter(headerParameter), headerValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
options = operationArguments.options;
|
|
if (options) {
|
|
if (options.customHeaders) {
|
|
for (customHeaderName in options.customHeaders) {
|
|
httpRequest.headers.set(customHeaderName, options.customHeaders[customHeaderName]);
|
|
}
|
|
}
|
|
if (options.abortSignal) {
|
|
httpRequest.abortSignal = options.abortSignal;
|
|
}
|
|
if (options.timeout) {
|
|
httpRequest.timeout = options.timeout;
|
|
}
|
|
if (options.onUploadProgress) {
|
|
httpRequest.onUploadProgress = options.onUploadProgress;
|
|
}
|
|
if (options.onDownloadProgress) {
|
|
httpRequest.onDownloadProgress = options.onDownloadProgress;
|
|
}
|
|
if (options.spanOptions) {
|
|
httpRequest.spanOptions = options.spanOptions;
|
|
}
|
|
if (options.shouldDeserialize !== undefined && options.shouldDeserialize !== null) {
|
|
httpRequest.shouldDeserialize = options.shouldDeserialize;
|
|
}
|
|
}
|
|
httpRequest.withCredentials = this._withCredentials;
|
|
serializeRequestBody(this, httpRequest, operationArguments, operationSpec);
|
|
if (httpRequest.streamResponseBody === undefined || httpRequest.streamResponseBody === null) {
|
|
httpRequest.streamResponseBody = isStreamOperation(operationSpec);
|
|
}
|
|
rawResponse = void 0;
|
|
sendRequestError = void 0;
|
|
_h.label = 2;
|
|
case 2:
|
|
_h.trys.push([2, 4, , 5]);
|
|
return [4 /*yield*/, this.sendRequest(httpRequest)];
|
|
case 3:
|
|
rawResponse = _h.sent();
|
|
return [3 /*break*/, 5];
|
|
case 4:
|
|
error_1 = _h.sent();
|
|
sendRequestError = error_1;
|
|
return [3 /*break*/, 5];
|
|
case 5:
|
|
if (sendRequestError) {
|
|
if (sendRequestError.response) {
|
|
sendRequestError.details = flattenResponse(sendRequestError.response, operationSpec.responses[sendRequestError.statusCode] ||
|
|
operationSpec.responses["default"]);
|
|
}
|
|
result = Promise.reject(sendRequestError);
|
|
}
|
|
else {
|
|
result = Promise.resolve(flattenResponse(rawResponse, operationSpec.responses[rawResponse.status]));
|
|
}
|
|
return [3 /*break*/, 7];
|
|
case 6:
|
|
error_2 = _h.sent();
|
|
result = Promise.reject(error_2);
|
|
return [3 /*break*/, 7];
|
|
case 7:
|
|
cb = callback;
|
|
if (cb) {
|
|
result
|
|
// tslint:disable-next-line:no-null-keyword
|
|
.then(function (res) { return cb(null, res._response.parsedBody, res._response.request, res._response); })
|
|
.catch(function (err) { return cb(err); });
|
|
}
|
|
return [2 /*return*/, result];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return ServiceClient;
|
|
}());
|
|
function serializeRequestBody(serviceClient, httpRequest, operationArguments, operationSpec) {
|
|
var _a;
|
|
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
|
|
httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer);
|
|
var bodyMapper = operationSpec.requestBody.mapper;
|
|
var required = bodyMapper.required, xmlName = bodyMapper.xmlName, xmlElementName = bodyMapper.xmlElementName, serializedName = bodyMapper.serializedName;
|
|
var typeName = bodyMapper.type.name;
|
|
try {
|
|
if ((httpRequest.body !== undefined && httpRequest.body !== null) || required) {
|
|
var requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody);
|
|
httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString);
|
|
var isStream = typeName === MapperType.Stream;
|
|
if (operationSpec.isXML) {
|
|
if (typeName === MapperType.Sequence) {
|
|
httpRequest.body = stringifyXML(prepareXMLRootList(httpRequest.body, xmlElementName || xmlName || serializedName), { rootName: xmlName || serializedName });
|
|
}
|
|
else if (!isStream) {
|
|
httpRequest.body = stringifyXML(httpRequest.body, {
|
|
rootName: xmlName || serializedName
|
|
});
|
|
}
|
|
}
|
|
else if (typeName === MapperType.String &&
|
|
(((_a = operationSpec.contentType) === null || _a === void 0 ? void 0 : _a.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) {
|
|
httpRequest.body = JSON.stringify(httpRequest.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) {
|
|
httpRequest.formData = {};
|
|
for (var _i = 0, _b = operationSpec.formDataParameters; _i < _b.length; _i++) {
|
|
var formDataParameter = _b[_i];
|
|
var formDataParameterValue = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer);
|
|
if (formDataParameterValue !== undefined && formDataParameterValue !== null) {
|
|
var formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);
|
|
httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function getValueOrFunctionResult(value, defaultValueCreator) {
|
|
var result;
|
|
if (typeof value === "string") {
|
|
result = value;
|
|
}
|
|
else {
|
|
result = defaultValueCreator();
|
|
if (typeof value === "function") {
|
|
result = value(result);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
|
|
var factories = [];
|
|
if (options.generateClientRequestIdHeader) {
|
|
factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName));
|
|
}
|
|
if (authPolicyFactory) {
|
|
factories.push(authPolicyFactory);
|
|
}
|
|
var userAgentHeaderName = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName);
|
|
var userAgentHeaderValue = getValueOrFunctionResult(options.userAgent, getDefaultUserAgentValue);
|
|
if (userAgentHeaderName && userAgentHeaderValue) {
|
|
factories.push(userAgentPolicy({ key: userAgentHeaderName, value: userAgentHeaderValue }));
|
|
}
|
|
factories.push(redirectPolicy());
|
|
factories.push(rpRegistrationPolicy(options.rpRegistrationRetryTimeout));
|
|
if (!options.noRetryPolicy) {
|
|
factories.push(exponentialRetryPolicy());
|
|
factories.push(systemErrorRetryPolicy());
|
|
factories.push(throttlingRetryPolicy());
|
|
}
|
|
factories.push(deserializationPolicy(options.deserializationContentTypes));
|
|
{
|
|
factories.push(proxyPolicy(options.proxySettings));
|
|
}
|
|
factories.push(logPolicy({ logger: logger.info }));
|
|
return factories;
|
|
}
|
|
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
|
var requestPolicyFactories = [];
|
|
var userAgentValue = undefined;
|
|
if (pipelineOptions.userAgentOptions && pipelineOptions.userAgentOptions.userAgentPrefix) {
|
|
var userAgentInfo = [];
|
|
userAgentInfo.push(pipelineOptions.userAgentOptions.userAgentPrefix);
|
|
// Add the default user agent value if it isn't already specified
|
|
// by the userAgentPrefix option.
|
|
var defaultUserAgentInfo = getDefaultUserAgentValue();
|
|
if (userAgentInfo.indexOf(defaultUserAgentInfo) === -1) {
|
|
userAgentInfo.push(defaultUserAgentInfo);
|
|
}
|
|
userAgentValue = userAgentInfo.join(" ");
|
|
}
|
|
var keepAliveOptions = tslib.__assign(tslib.__assign({}, DefaultKeepAliveOptions), pipelineOptions.keepAliveOptions);
|
|
var retryOptions = tslib.__assign(tslib.__assign({}, DefaultRetryOptions), pipelineOptions.retryOptions);
|
|
var redirectOptions = tslib.__assign(tslib.__assign({}, DefaultRedirectOptions), pipelineOptions.redirectOptions);
|
|
{
|
|
requestPolicyFactories.push(proxyPolicy(pipelineOptions.proxyOptions));
|
|
}
|
|
var deserializationOptions = tslib.__assign(tslib.__assign({}, DefaultDeserializationOptions), pipelineOptions.deserializationOptions);
|
|
var loggingOptions = tslib.__assign({}, pipelineOptions.loggingOptions);
|
|
requestPolicyFactories.push(tracingPolicy({ userAgent: userAgentValue }), keepAlivePolicy(keepAliveOptions), userAgentPolicy({ value: userAgentValue }), generateClientRequestIdPolicy(), deserializationPolicy(deserializationOptions.expectedContentTypes), throttlingRetryPolicy(), systemErrorRetryPolicy(), exponentialRetryPolicy(retryOptions.maxRetries, retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs));
|
|
if (redirectOptions.handleRedirects) {
|
|
requestPolicyFactories.push(redirectPolicy(redirectOptions.maxRetries));
|
|
}
|
|
if (authPolicyFactory) {
|
|
requestPolicyFactories.push(authPolicyFactory);
|
|
}
|
|
requestPolicyFactories.push(logPolicy(loggingOptions));
|
|
if (isNode && pipelineOptions.decompressResponse === false) {
|
|
requestPolicyFactories.push(disableResponseDecompressionPolicy());
|
|
}
|
|
return {
|
|
httpClient: pipelineOptions.httpClient,
|
|
requestPolicyFactories: requestPolicyFactories
|
|
};
|
|
}
|
|
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
|
|
return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer);
|
|
}
|
|
function getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameterPath, parameterMapper, serializer) {
|
|
var value;
|
|
if (typeof parameterPath === "string") {
|
|
parameterPath = [parameterPath];
|
|
}
|
|
if (Array.isArray(parameterPath)) {
|
|
if (parameterPath.length > 0) {
|
|
if (parameterMapper.isConstant) {
|
|
value = parameterMapper.defaultValue;
|
|
}
|
|
else {
|
|
var propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);
|
|
if (!propertySearchResult.propertyFound) {
|
|
propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath);
|
|
}
|
|
var useDefaultValue = false;
|
|
if (!propertySearchResult.propertyFound) {
|
|
useDefaultValue =
|
|
parameterMapper.required ||
|
|
(parameterPath[0] === "options" && parameterPath.length === 2);
|
|
}
|
|
value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;
|
|
}
|
|
// Serialize just for validation purposes.
|
|
var parameterPathString = getPathStringFromParameterPath(parameterPath, parameterMapper);
|
|
serializer.serialize(parameterMapper, value, parameterPathString);
|
|
}
|
|
}
|
|
else {
|
|
if (parameterMapper.required) {
|
|
value = {};
|
|
}
|
|
for (var propertyName in parameterPath) {
|
|
var propertyMapper = parameterMapper.type.modelProperties[propertyName];
|
|
var propertyPath = parameterPath[propertyName];
|
|
var propertyValue = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer);
|
|
// Serialize just for validation purposes.
|
|
var propertyPathString = getPathStringFromParameterPath(propertyPath, propertyMapper);
|
|
serializer.serialize(propertyMapper, propertyValue, propertyPathString);
|
|
if (propertyValue !== undefined && propertyValue !== null) {
|
|
if (!value) {
|
|
value = {};
|
|
}
|
|
value[propertyName] = propertyValue;
|
|
}
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
function getPropertyFromParameterPath(parent, parameterPath) {
|
|
var result = { propertyFound: false };
|
|
var i = 0;
|
|
for (; i < parameterPath.length; ++i) {
|
|
var parameterPathPart = parameterPath[i];
|
|
// Make sure to check inherited properties too, so don't use hasOwnProperty().
|
|
if (parent !== undefined && parent !== null && parameterPathPart in parent) {
|
|
parent = parent[parameterPathPart];
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
if (i === parameterPath.length) {
|
|
result.propertyValue = parent;
|
|
result.propertyFound = true;
|
|
}
|
|
return result;
|
|
}
|
|
function flattenResponse(_response, responseSpec) {
|
|
var parsedHeaders = _response.parsedHeaders;
|
|
var bodyMapper = responseSpec && responseSpec.bodyMapper;
|
|
var addOperationResponse = function (obj) {
|
|
return Object.defineProperty(obj, "_response", {
|
|
value: _response
|
|
});
|
|
};
|
|
if (bodyMapper) {
|
|
var typeName = bodyMapper.type.name;
|
|
if (typeName === "Stream") {
|
|
return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), { blobBody: _response.blobBody, readableStreamBody: _response.readableStreamBody }));
|
|
}
|
|
var modelProperties_1 = (typeName === "Composite" && bodyMapper.type.modelProperties) || {};
|
|
var isPageableResponse = Object.keys(modelProperties_1).some(function (k) { return modelProperties_1[k].serializedName === ""; });
|
|
if (typeName === "Sequence" || isPageableResponse) {
|
|
var arrayResponse = tslib.__spreadArrays((_response.parsedBody || []));
|
|
for (var _i = 0, _a = Object.keys(modelProperties_1); _i < _a.length; _i++) {
|
|
var key = _a[_i];
|
|
if (modelProperties_1[key].serializedName) {
|
|
arrayResponse[key] = _response.parsedBody[key];
|
|
}
|
|
}
|
|
if (parsedHeaders) {
|
|
for (var _b = 0, _c = Object.keys(parsedHeaders); _b < _c.length; _b++) {
|
|
var key = _c[_b];
|
|
arrayResponse[key] = parsedHeaders[key];
|
|
}
|
|
}
|
|
addOperationResponse(arrayResponse);
|
|
return arrayResponse;
|
|
}
|
|
if (typeName === "Composite" || typeName === "Dictionary") {
|
|
return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), _response.parsedBody));
|
|
}
|
|
}
|
|
if (bodyMapper ||
|
|
_response.request.method === "HEAD" ||
|
|
isPrimitiveType(_response.parsedBody)) {
|
|
// primitive body types and HEAD booleans
|
|
return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), { body: _response.parsedBody }));
|
|
}
|
|
return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), _response.parsedBody));
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var HeaderConstants = Constants.HeaderConstants;
|
|
var DEFAULT_AUTHORIZATION_SCHEME = "Basic";
|
|
var BasicAuthenticationCredentials = /** @class */ (function () {
|
|
/**
|
|
* Creates a new BasicAuthenticationCredentials object.
|
|
*
|
|
* @constructor
|
|
* @param {string} userName User name.
|
|
* @param {string} password Password.
|
|
* @param {string} [authorizationScheme] The authorization scheme.
|
|
*/
|
|
function BasicAuthenticationCredentials(userName, password, authorizationScheme) {
|
|
if (authorizationScheme === void 0) { authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME; }
|
|
this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
|
|
if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
|
|
throw new Error("userName cannot be null or undefined and must be of type string.");
|
|
}
|
|
if (password === null || password === undefined || typeof password.valueOf() !== "string") {
|
|
throw new Error("password cannot be null or undefined and must be of type string.");
|
|
}
|
|
this.userName = userName;
|
|
this.password = password;
|
|
this.authorizationScheme = authorizationScheme;
|
|
}
|
|
/**
|
|
* Signs a request with the Authentication header.
|
|
*
|
|
* @param {WebResourceLike} webResource The WebResourceLike to be signed.
|
|
* @returns {Promise<WebResourceLike>} The signed request object.
|
|
*/
|
|
BasicAuthenticationCredentials.prototype.signRequest = function (webResource) {
|
|
var credentials = this.userName + ":" + this.password;
|
|
var encodedCredentials = this.authorizationScheme + " " + encodeString(credentials);
|
|
if (!webResource.headers)
|
|
webResource.headers = new HttpHeaders();
|
|
webResource.headers.set(HeaderConstants.AUTHORIZATION, encodedCredentials);
|
|
return Promise.resolve(webResource);
|
|
};
|
|
return BasicAuthenticationCredentials;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Authenticates to a service using an API key.
|
|
*/
|
|
var ApiKeyCredentials = /** @class */ (function () {
|
|
/**
|
|
* @constructor
|
|
* @param {object} options Specifies the options to be provided for auth. Either header or query needs to be provided.
|
|
*/
|
|
function ApiKeyCredentials(options) {
|
|
if (!options || (options && !options.inHeader && !options.inQuery)) {
|
|
throw new Error("options cannot be null or undefined. Either \"inHeader\" or \"inQuery\" property of the options object needs to be provided.");
|
|
}
|
|
this.inHeader = options.inHeader;
|
|
this.inQuery = options.inQuery;
|
|
}
|
|
/**
|
|
* Signs a request with the values provided in the inHeader and inQuery parameter.
|
|
*
|
|
* @param {WebResourceLike} webResource The WebResourceLike to be signed.
|
|
* @returns {Promise<WebResourceLike>} The signed request object.
|
|
*/
|
|
ApiKeyCredentials.prototype.signRequest = function (webResource) {
|
|
if (!webResource) {
|
|
return Promise.reject(new Error("webResource cannot be null or undefined and must be of type \"object\"."));
|
|
}
|
|
if (this.inHeader) {
|
|
if (!webResource.headers) {
|
|
webResource.headers = new HttpHeaders();
|
|
}
|
|
for (var headerName in this.inHeader) {
|
|
webResource.headers.set(headerName, this.inHeader[headerName]);
|
|
}
|
|
}
|
|
if (this.inQuery) {
|
|
if (!webResource.url) {
|
|
return Promise.reject(new Error("url cannot be null in the request object."));
|
|
}
|
|
if (webResource.url.indexOf("?") < 0) {
|
|
webResource.url += "?";
|
|
}
|
|
for (var key in this.inQuery) {
|
|
if (!webResource.url.endsWith("?")) {
|
|
webResource.url += "&";
|
|
}
|
|
webResource.url += key + "=" + this.inQuery[key];
|
|
}
|
|
}
|
|
return Promise.resolve(webResource);
|
|
};
|
|
return ApiKeyCredentials;
|
|
}());
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
var TopicCredentials = /** @class */ (function (_super) {
|
|
tslib.__extends(TopicCredentials, _super);
|
|
/**
|
|
* Creates a new EventGrid TopicCredentials object.
|
|
*
|
|
* @constructor
|
|
* @param {string} topicKey The EventGrid topic key
|
|
*/
|
|
function TopicCredentials(topicKey) {
|
|
var _this = this;
|
|
if (!topicKey || (topicKey && typeof topicKey !== "string")) {
|
|
throw new Error("topicKey cannot be null or undefined and must be of type string.");
|
|
}
|
|
var options = {
|
|
inHeader: {
|
|
"aeg-sas-key": topicKey
|
|
}
|
|
};
|
|
_this = _super.call(this, options) || this;
|
|
return _this;
|
|
}
|
|
return TopicCredentials;
|
|
}(ApiKeyCredentials));
|
|
|
|
Object.defineProperty(exports, 'isTokenCredential', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreAuth.isTokenCredential;
|
|
}
|
|
});
|
|
exports.ApiKeyCredentials = ApiKeyCredentials;
|
|
exports.BaseRequestPolicy = BaseRequestPolicy;
|
|
exports.BasicAuthenticationCredentials = BasicAuthenticationCredentials;
|
|
exports.BearerTokenAuthenticationPolicy = BearerTokenAuthenticationPolicy;
|
|
exports.Constants = Constants;
|
|
exports.DefaultHttpClient = NodeFetchHttpClient;
|
|
exports.DisableResponseDecompressionPolicy = DisableResponseDecompressionPolicy;
|
|
exports.ExpiringAccessTokenCache = ExpiringAccessTokenCache;
|
|
exports.HttpHeaders = HttpHeaders;
|
|
exports.KeepAlivePolicy = KeepAlivePolicy;
|
|
exports.MapperType = MapperType;
|
|
exports.RequestPolicyOptions = RequestPolicyOptions;
|
|
exports.RestError = RestError;
|
|
exports.Serializer = Serializer;
|
|
exports.ServiceClient = ServiceClient;
|
|
exports.TopicCredentials = TopicCredentials;
|
|
exports.URLBuilder = URLBuilder;
|
|
exports.URLQuery = URLQuery;
|
|
exports.WebResource = WebResource;
|
|
exports.applyMixins = applyMixins;
|
|
exports.bearerTokenAuthenticationPolicy = bearerTokenAuthenticationPolicy;
|
|
exports.createPipelineFromOptions = createPipelineFromOptions;
|
|
exports.delay = delay;
|
|
exports.deserializationPolicy = deserializationPolicy;
|
|
exports.deserializeResponseBody = deserializeResponseBody;
|
|
exports.disableResponseDecompressionPolicy = disableResponseDecompressionPolicy;
|
|
exports.encodeUri = encodeUri;
|
|
exports.executePromisesSequentially = executePromisesSequentially;
|
|
exports.exponentialRetryPolicy = exponentialRetryPolicy;
|
|
exports.flattenResponse = flattenResponse;
|
|
exports.generateClientRequestIdPolicy = generateClientRequestIdPolicy;
|
|
exports.generateUuid = generateUuid;
|
|
exports.getDefaultProxySettings = getDefaultProxySettings;
|
|
exports.getDefaultUserAgentValue = getDefaultUserAgentValue;
|
|
exports.isDuration = isDuration;
|
|
exports.isNode = isNode;
|
|
exports.isValidUuid = isValidUuid;
|
|
exports.keepAlivePolicy = keepAlivePolicy;
|
|
exports.logPolicy = logPolicy;
|
|
exports.operationOptionsToRequestOptionsBase = operationOptionsToRequestOptionsBase;
|
|
exports.parseXML = parseXML;
|
|
exports.promiseToCallback = promiseToCallback;
|
|
exports.promiseToServiceCallback = promiseToServiceCallback;
|
|
exports.proxyPolicy = proxyPolicy;
|
|
exports.redirectPolicy = redirectPolicy;
|
|
exports.serializeObject = serializeObject;
|
|
exports.signingPolicy = signingPolicy;
|
|
exports.stringifyXML = stringifyXML;
|
|
exports.stripRequest = stripRequest;
|
|
exports.stripResponse = stripResponse;
|
|
exports.systemErrorRetryPolicy = systemErrorRetryPolicy;
|
|
exports.throttlingRetryPolicy = throttlingRetryPolicy;
|
|
exports.tracingPolicy = tracingPolicy;
|
|
exports.userAgentPolicy = userAgentPolicy;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ })
|
|
|
|
/******/ }); |