mirror of
https://code.forgejo.org/actions/cache
synced 2025-03-09 19:34:30 +00:00
58652 lines
No EOL
2.4 MiB
58652 lines
No EOL
2.4 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();
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ([
|
|
/* 0 */,
|
|
/* 1 */
|
|
/***/ (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 (k !== "default" && 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 });
|
|
exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0;
|
|
const assert_1 = __webpack_require__(357);
|
|
const childProcess = __importStar(__webpack_require__(129));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const util_1 = __webpack_require__(669);
|
|
const ioUtil = __importStar(__webpack_require__(672));
|
|
const exec = util_1.promisify(childProcess.exec);
|
|
const execFile = util_1.promisify(childProcess.execFile);
|
|
/**
|
|
* 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, copySourceDirectory } = 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() && copySourceDirectory
|
|
? 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.
|
|
// Check for invalid characters
|
|
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
|
if (/[*"<>|]/.test(inputPath)) {
|
|
throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');
|
|
}
|
|
try {
|
|
const cmdPath = ioUtil.getCmdPath();
|
|
if (yield ioUtil.isDirectory(inputPath, true)) {
|
|
yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, {
|
|
env: { inputPath }
|
|
});
|
|
}
|
|
else {
|
|
yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, {
|
|
env: { 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 execFile(`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* () {
|
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
|
yield ioUtil.mkdir(fsPath, { recursive: true });
|
|
});
|
|
}
|
|
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.`);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
const matches = yield findInPath(tool);
|
|
if (matches && matches.length > 0) {
|
|
return matches[0];
|
|
}
|
|
return '';
|
|
});
|
|
}
|
|
exports.which = which;
|
|
/**
|
|
* Returns a list of all occurrences of the given tool on the system path.
|
|
*
|
|
* @returns Promise<string[]> the paths of the tool
|
|
*/
|
|
function findInPath(tool) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (!tool) {
|
|
throw new Error("parameter 'tool' is required");
|
|
}
|
|
// 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(path.sep)) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
// find all matches
|
|
const matches = [];
|
|
for (const directory of directories) {
|
|
const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions);
|
|
if (filePath) {
|
|
matches.push(filePath);
|
|
}
|
|
}
|
|
return matches;
|
|
});
|
|
}
|
|
exports.findInPath = findInPath;
|
|
function readCopyOptions(options) {
|
|
const force = options.force == null ? true : options.force;
|
|
const recursive = Boolean(options.recursive);
|
|
const copySourceDirectory = options.copySourceDirectory == null
|
|
? true
|
|
: Boolean(options.copySourceDirectory);
|
|
return { force, recursive, copySourceDirectory };
|
|
}
|
|
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 */,
|
|
/* 3 */,
|
|
/* 4 */,
|
|
/* 5 */,
|
|
/* 6 */,
|
|
/* 7 */,
|
|
/* 8 */,
|
|
/* 9 */
|
|
/***/ (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 (k !== "default" && 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 });
|
|
exports.argStringToArray = exports.ToolRunner = void 0;
|
|
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));
|
|
const timers_1 = __webpack_require__(213);
|
|
/* 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);
|
|
}
|
|
return s;
|
|
}
|
|
catch (err) {
|
|
// streaming lines to console is best effort. Don't fail a build.
|
|
this._debug(`error processing line. Failed with error ${err}`);
|
|
return '';
|
|
}
|
|
}
|
|
_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) => __awaiter(this, void 0, void 0, function* () {
|
|
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);
|
|
});
|
|
if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) {
|
|
return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`));
|
|
}
|
|
const fileName = this._getSpawnFileName();
|
|
const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
|
|
let 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);
|
|
}
|
|
stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => {
|
|
if (this.options.listeners && this.options.listeners.stdline) {
|
|
this.options.listeners.stdline(line);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
let 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);
|
|
}
|
|
errbuffer = 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 = timers_1.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
|
|
|
|
/***/ }),
|
|
/* 10 */,
|
|
/* 11 */,
|
|
/* 12 */,
|
|
/* 13 */,
|
|
/* 14 */,
|
|
/* 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 getArchiveFileSizeInBytes(filePath) {
|
|
return fs.statSync(filePath).size;
|
|
}
|
|
exports.getArchiveFileSizeInBytes = getArchiveFileSizeInBytes;
|
|
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)
|
|
.replace(new RegExp(`\\${path.sep}`, 'g'), '/');
|
|
core.debug(`Matched: ${relativeFile}`);
|
|
// Paths are made relative so the tar entries are all relative to the root of the workspace.
|
|
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");
|
|
|
|
/***/ }),
|
|
/* 17 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 20 */,
|
|
/* 21 */,
|
|
/* 22 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.PropagationAPI = void 0;
|
|
var global_utils_1 = __webpack_require__(525);
|
|
var NoopTextMapPropagator_1 = __webpack_require__(918);
|
|
var TextMapPropagator_1 = __webpack_require__(881);
|
|
var context_helpers_1 = __webpack_require__(483);
|
|
var utils_1 = __webpack_require__(112);
|
|
var diag_1 = __webpack_require__(118);
|
|
var API_NAME = 'propagation';
|
|
var NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator_1.NoopTextMapPropagator();
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Propagation API
|
|
*/
|
|
var PropagationAPI = /** @class */ (function () {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
function PropagationAPI() {
|
|
this.createBaggage = utils_1.createBaggage;
|
|
this.getBaggage = context_helpers_1.getBaggage;
|
|
this.setBaggage = context_helpers_1.setBaggage;
|
|
this.deleteBaggage = context_helpers_1.deleteBaggage;
|
|
}
|
|
/** Get the singleton instance of the Propagator API */
|
|
PropagationAPI.getInstance = function () {
|
|
if (!this._instance) {
|
|
this._instance = new PropagationAPI();
|
|
}
|
|
return this._instance;
|
|
};
|
|
/**
|
|
* Set the current propagator.
|
|
*
|
|
* @returns true if the propagator was successfully registered, else false
|
|
*/
|
|
PropagationAPI.prototype.setGlobalPropagator = function (propagator) {
|
|
return global_utils_1.registerGlobal(API_NAME, propagator, diag_1.DiagAPI.instance());
|
|
};
|
|
/**
|
|
* Inject context into a carrier to be propagated inter-process
|
|
*
|
|
* @param context Context carrying tracing data to inject
|
|
* @param carrier carrier to inject context into
|
|
* @param setter Function used to set values on the carrier
|
|
*/
|
|
PropagationAPI.prototype.inject = function (context, carrier, setter) {
|
|
if (setter === void 0) { setter = TextMapPropagator_1.defaultTextMapSetter; }
|
|
return this._getGlobalPropagator().inject(context, carrier, setter);
|
|
};
|
|
/**
|
|
* Extract context from a carrier
|
|
*
|
|
* @param context Context which the newly created context will inherit from
|
|
* @param carrier Carrier to extract context from
|
|
* @param getter Function used to extract keys from a carrier
|
|
*/
|
|
PropagationAPI.prototype.extract = function (context, carrier, getter) {
|
|
if (getter === void 0) { getter = TextMapPropagator_1.defaultTextMapGetter; }
|
|
return this._getGlobalPropagator().extract(context, carrier, getter);
|
|
};
|
|
/**
|
|
* Return a list of all fields which may be used by the propagator.
|
|
*/
|
|
PropagationAPI.prototype.fields = function () {
|
|
return this._getGlobalPropagator().fields();
|
|
};
|
|
/** Remove the global propagator */
|
|
PropagationAPI.prototype.disable = function () {
|
|
global_utils_1.unregisterGlobal(API_NAME, diag_1.DiagAPI.instance());
|
|
};
|
|
PropagationAPI.prototype._getGlobalPropagator = function () {
|
|
return global_utils_1.getGlobal(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR;
|
|
};
|
|
return PropagationAPI;
|
|
}());
|
|
exports.PropagationAPI = PropagationAPI;
|
|
//# sourceMappingURL=propagation.js.map
|
|
|
|
/***/ }),
|
|
/* 23 */,
|
|
/* 24 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
var _default = '00000000-0000-0000-0000-000000000000';
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 25 */,
|
|
/* 26 */,
|
|
/* 27 */,
|
|
/* 28 */,
|
|
/* 29 */,
|
|
/* 30 */,
|
|
/* 31 */,
|
|
/* 32 */,
|
|
/* 33 */,
|
|
/* 34 */,
|
|
/* 35 */,
|
|
/* 36 */,
|
|
/* 37 */,
|
|
/* 38 */,
|
|
/* 39 */,
|
|
/* 40 */,
|
|
/* 41 */,
|
|
/* 42 */,
|
|
/* 43 */,
|
|
/* 44 */,
|
|
/* 45 */,
|
|
/* 46 */,
|
|
/* 47 */,
|
|
/* 48 */,
|
|
/* 49 */,
|
|
/* 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"];
|
|
|
|
/***/ }),
|
|
/* 51 */,
|
|
/* 52 */,
|
|
/* 53 */,
|
|
/* 54 */,
|
|
/* 55 */,
|
|
/* 56 */,
|
|
/* 57 */,
|
|
/* 58 */,
|
|
/* 59 */,
|
|
/* 60 */,
|
|
/* 61 */,
|
|
/* 62 */,
|
|
/* 63 */,
|
|
/* 64 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 66 */,
|
|
/* 67 */,
|
|
/* 68 */,
|
|
/* 69 */,
|
|
/* 70 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
exports.URL = __webpack_require__(782).interface;
|
|
exports.serializeURL = __webpack_require__(936).serializeURL;
|
|
exports.serializeURLOrigin = __webpack_require__(936).serializeURLOrigin;
|
|
exports.basicURLParse = __webpack_require__(936).basicURLParse;
|
|
exports.setTheUsername = __webpack_require__(936).setTheUsername;
|
|
exports.setThePassword = __webpack_require__(936).setThePassword;
|
|
exports.serializeHost = __webpack_require__(936).serializeHost;
|
|
exports.serializeInteger = __webpack_require__(936).serializeInteger;
|
|
exports.parseURL = __webpack_require__(936).parseURL;
|
|
|
|
|
|
/***/ }),
|
|
/* 71 */
|
|
/***/ (function() {
|
|
|
|
"use strict";
|
|
|
|
if (typeof Symbol === undefined || !Symbol.asyncIterator) {
|
|
Symbol.asyncIterator = Symbol.for("Symbol.asyncIterator");
|
|
}
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
/* 72 */,
|
|
/* 73 */,
|
|
/* 74 */,
|
|
/* 75 */,
|
|
/* 76 */,
|
|
/* 77 */,
|
|
/* 78 */,
|
|
/* 79 */,
|
|
/* 80 */,
|
|
/* 81 */,
|
|
/* 82 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
// We use any as a valid input type
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.toCommandProperties = exports.toCommandValue = void 0;
|
|
/**
|
|
* 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;
|
|
/**
|
|
*
|
|
* @param annotationProperties
|
|
* @returns The command properties to send with the actual annotation command
|
|
* See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
|
|
*/
|
|
function toCommandProperties(annotationProperties) {
|
|
if (!Object.keys(annotationProperties).length) {
|
|
return {};
|
|
}
|
|
return {
|
|
title: annotationProperties.title,
|
|
file: annotationProperties.file,
|
|
line: annotationProperties.startLine,
|
|
endLine: annotationProperties.endLine,
|
|
col: annotationProperties.startColumn,
|
|
endColumn: annotationProperties.endColumn
|
|
};
|
|
}
|
|
exports.toCommandProperties = toCommandProperties;
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
/***/ }),
|
|
/* 83 */,
|
|
/* 84 */,
|
|
/* 85 */,
|
|
/* 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");
|
|
|
|
/***/ }),
|
|
/* 88 */,
|
|
/* 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);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 92 */,
|
|
/* 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, '\\$&')
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 94 */,
|
|
/* 95 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=link.js.map
|
|
|
|
/***/ }),
|
|
/* 96 */,
|
|
/* 97 */,
|
|
/* 98 */,
|
|
/* 99 */,
|
|
/* 100 */,
|
|
/* 101 */,
|
|
/* 102 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
// For internal use, subject to change.
|
|
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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.issueCommand = void 0;
|
|
// We use any as a valid input type
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const os = __importStar(__webpack_require__(87));
|
|
const utils_1 = __webpack_require__(82);
|
|
function issueCommand(command, message) {
|
|
const filePath = process.env[`GITHUB_${command}`];
|
|
if (!filePath) {
|
|
throw new Error(`Unable to find environment variable for file command ${command}`);
|
|
}
|
|
if (!fs.existsSync(filePath)) {
|
|
throw new Error(`Missing file at path: ${filePath}`);
|
|
}
|
|
fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
|
|
encoding: 'utf8'
|
|
});
|
|
}
|
|
exports.issueCommand = issueCommand;
|
|
//# sourceMappingURL=file-command.js.map
|
|
|
|
/***/ }),
|
|
/* 103 */,
|
|
/* 104 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(676));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function version(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Invalid UUID');
|
|
}
|
|
|
|
return parseInt(uuid.substr(14, 1), 16);
|
|
}
|
|
|
|
var _default = version;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 105 */,
|
|
/* 106 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var tslib = __webpack_require__(640);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
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
|
|
* ```ts
|
|
* await doAsyncWork(AbortSignal.none);
|
|
* ```
|
|
*/
|
|
var AbortSignal = /** @class */ (function () {
|
|
function AbortSignal() {
|
|
/**
|
|
* onabort event listener.
|
|
*/
|
|
this.onabort = null;
|
|
listenersMap.set(this, []);
|
|
abortedMap.set(this, false);
|
|
}
|
|
Object.defineProperty(AbortSignal.prototype, "aborted", {
|
|
/**
|
|
* Status of whether aborted or not.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get: function () {
|
|
if (!abortedMap.has(this)) {
|
|
throw new TypeError("Expected `this` to be an instance of AbortSignal.");
|
|
}
|
|
return abortedMap.get(this);
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Object.defineProperty(AbortSignal, "none", {
|
|
/**
|
|
* Creates a new AbortSignal instance that will never be aborted.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get: function () {
|
|
return new AbortSignal();
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Added new "abort" event listener, only support "abort" event.
|
|
*
|
|
* @param _type - Only support "abort" event
|
|
* @param listener - The listener to be added
|
|
*/
|
|
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 _type - Only support "abort" event
|
|
* @param listener - The listener to be removed
|
|
*/
|
|
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.
|
|
*
|
|
* @internal
|
|
*/
|
|
// eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters
|
|
function abortSignal(signal) {
|
|
if (signal.aborted) {
|
|
return;
|
|
}
|
|
if (signal.onabort) {
|
|
signal.onabort.call(signal);
|
|
}
|
|
var listeners = listenersMap.get(signal);
|
|
if (listeners) {
|
|
// Create a copy of listeners so mutations to the array
|
|
// (e.g. via removeListener calls) don't affect the listeners
|
|
// we invoke.
|
|
listeners.slice().forEach(function (listener) {
|
|
listener.call(signal, { type: "abort" });
|
|
});
|
|
}
|
|
abortedMap.set(signal, true);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* This error is thrown when an asynchronous operation has been aborted.
|
|
* Check for this error by testing the `name` that the name property of the
|
|
* error matches `"AbortError"`.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* 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
|
|
* ```ts
|
|
* const controller = new AbortController();
|
|
* const signal = controller.signal;
|
|
* doAsyncWork(signal);
|
|
* button.addEventListener('click', () => controller.abort());
|
|
* ```
|
|
*
|
|
* @example
|
|
* Share aborter cross multiple operations in 30s
|
|
* ```ts
|
|
* // 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
|
|
* ```ts
|
|
* // 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));
|
|
* ```
|
|
*/
|
|
var AbortController = /** @class */ (function () {
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
function AbortController(parentSignals) {
|
|
var _this = this;
|
|
this._signal = new AbortSignal();
|
|
if (!parentSignals) {
|
|
return;
|
|
}
|
|
// coerce parentSignals into an array
|
|
if (!Array.isArray(parentSignals)) {
|
|
// eslint-disable-next-line prefer-rest-params
|
|
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
|
|
*/
|
|
get: function () {
|
|
return this._signal;
|
|
},
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
/**
|
|
* Signal that any operations passed this controller's associated abort signal
|
|
* to cancel any remaining work and throw an `AbortError`.
|
|
*/
|
|
AbortController.prototype.abort = function () {
|
|
abortSignal(this._signal);
|
|
};
|
|
/**
|
|
* Creates a new AbortSignal instance that will abort after the provided ms.
|
|
* @param ms - Elapsed time in milliseconds to trigger an abort.
|
|
*/
|
|
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
|
|
|
|
|
|
/***/ }),
|
|
/* 107 */,
|
|
/* 108 */,
|
|
/* 109 */,
|
|
/* 110 */,
|
|
/* 111 */,
|
|
/* 112 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.baggageEntryMetadataFromString = exports.createBaggage = void 0;
|
|
var diag_1 = __webpack_require__(118);
|
|
var baggage_impl_1 = __webpack_require__(666);
|
|
var symbol_1 = __webpack_require__(561);
|
|
var diag = diag_1.DiagAPI.instance();
|
|
/**
|
|
* Create a new Baggage with optional entries
|
|
*
|
|
* @param entries An array of baggage entries the new baggage should contain
|
|
*/
|
|
function createBaggage(entries) {
|
|
if (entries === void 0) { entries = {}; }
|
|
return new baggage_impl_1.BaggageImpl(new Map(Object.entries(entries)));
|
|
}
|
|
exports.createBaggage = createBaggage;
|
|
/**
|
|
* Create a serializable BaggageEntryMetadata object from a string.
|
|
*
|
|
* @param str string metadata. Format is currently not defined by the spec and has no special meaning.
|
|
*
|
|
*/
|
|
function baggageEntryMetadataFromString(str) {
|
|
if (typeof str !== 'string') {
|
|
diag.error("Cannot create baggage metadata from unknown type: " + typeof str);
|
|
str = '';
|
|
}
|
|
return {
|
|
__TYPE__: symbol_1.baggageEntryMetadataSymbol,
|
|
toString: function () {
|
|
return str;
|
|
},
|
|
};
|
|
}
|
|
exports.baggageEntryMetadataFromString = baggageEntryMetadataFromString;
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
/***/ }),
|
|
/* 113 */,
|
|
/* 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)
|
|
};
|
|
const uploadChunkResponse = yield requestUtils_1.retryHttpClientResponse(`uploadChunk (start: ${start}, end: ${end})`, () => __awaiter(this, void 0, void 0, function* () {
|
|
return httpClient.sendStream('PATCH', resourceUrl, openStream(), additionalHeaders);
|
|
}));
|
|
if (!requestUtils_1.isSuccessStatusCode(uploadChunkResponse.message.statusCode)) {
|
|
throw new Error(`Cache service responded with ${uploadChunkResponse.message.statusCode} during upload chunk.`);
|
|
}
|
|
});
|
|
}
|
|
function uploadFile(httpClient, cacheId, archivePath, options) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// Upload Chunks
|
|
const fileSize = utils.getArchiveFileSizeInBytes(archivePath);
|
|
const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`);
|
|
const fd = fs.openSync(archivePath, 'r');
|
|
const uploadOptions = 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.getArchiveFileSizeInBytes(archivePath);
|
|
core.info(`Cache Size: ~${Math.round(cacheSize / (1024 * 1024))} MB (${cacheSize} B)`);
|
|
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
|
|
|
|
/***/ }),
|
|
/* 115 */,
|
|
/* 116 */,
|
|
/* 117 */,
|
|
/* 118 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.DiagAPI = void 0;
|
|
var ComponentLogger_1 = __webpack_require__(362);
|
|
var logLevelLogger_1 = __webpack_require__(673);
|
|
var types_1 = __webpack_require__(545);
|
|
var global_utils_1 = __webpack_require__(525);
|
|
var API_NAME = 'diag';
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry internal
|
|
* diagnostic API
|
|
*/
|
|
var DiagAPI = /** @class */ (function () {
|
|
/**
|
|
* Private internal constructor
|
|
* @private
|
|
*/
|
|
function DiagAPI() {
|
|
function _logProxy(funcName) {
|
|
return function () {
|
|
var logger = global_utils_1.getGlobal('diag');
|
|
// shortcut if logger not set
|
|
if (!logger)
|
|
return;
|
|
return logger[funcName].apply(logger,
|
|
// work around Function.prototype.apply types
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
arguments);
|
|
};
|
|
}
|
|
// Using self local variable for minification purposes as 'this' cannot be minified
|
|
var self = this;
|
|
// DiagAPI specific functions
|
|
self.setLogger = function (logger, logLevel) {
|
|
var _a, _b;
|
|
if (logLevel === void 0) { logLevel = types_1.DiagLogLevel.INFO; }
|
|
if (logger === self) {
|
|
// There isn't much we can do here.
|
|
// Logging to the console might break the user application.
|
|
// Try to log to self. If a logger was previously registered it will receive the log.
|
|
var err = new Error('Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation');
|
|
self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);
|
|
return false;
|
|
}
|
|
var oldLogger = global_utils_1.getGlobal('diag');
|
|
var newLogger = logLevelLogger_1.createLogLevelDiagLogger(logLevel, logger);
|
|
// There already is an logger registered. We'll let it know before overwriting it.
|
|
if (oldLogger) {
|
|
var stack = (_b = new Error().stack) !== null && _b !== void 0 ? _b : '<failed to generate stacktrace>';
|
|
oldLogger.warn("Current logger will be overwritten from " + stack);
|
|
newLogger.warn("Current logger will overwrite one already registered from " + stack);
|
|
}
|
|
return global_utils_1.registerGlobal('diag', newLogger, self, true);
|
|
};
|
|
self.disable = function () {
|
|
global_utils_1.unregisterGlobal(API_NAME, self);
|
|
};
|
|
self.createComponentLogger = function (options) {
|
|
return new ComponentLogger_1.DiagComponentLogger(options);
|
|
};
|
|
self.verbose = _logProxy('verbose');
|
|
self.debug = _logProxy('debug');
|
|
self.info = _logProxy('info');
|
|
self.warn = _logProxy('warn');
|
|
self.error = _logProxy('error');
|
|
}
|
|
/** Get the singleton instance of the DiagAPI API */
|
|
DiagAPI.instance = function () {
|
|
if (!this._instance) {
|
|
this._instance = new DiagAPI();
|
|
}
|
|
return this._instance;
|
|
};
|
|
return DiagAPI;
|
|
}());
|
|
exports.DiagAPI = DiagAPI;
|
|
//# sourceMappingURL=diag.js.map
|
|
|
|
/***/ }),
|
|
/* 119 */,
|
|
/* 120 */,
|
|
/* 121 */,
|
|
/* 122 */,
|
|
/* 123 */,
|
|
/* 124 */,
|
|
/* 125 */,
|
|
/* 126 */,
|
|
/* 127 */,
|
|
/* 128 */,
|
|
/* 129 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("child_process");
|
|
|
|
/***/ }),
|
|
/* 130 */,
|
|
/* 131 */,
|
|
/* 132 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.ROOT_CONTEXT = exports.createContextKey = void 0;
|
|
/** Get a key to uniquely identify a context value */
|
|
function createContextKey(description) {
|
|
// The specification states that for the same input, multiple calls should
|
|
// return different keys. Due to the nature of the JS dependency management
|
|
// system, this creates problems where multiple versions of some package
|
|
// could hold different keys for the same property.
|
|
//
|
|
// Therefore, we use Symbol.for which returns the same key for the same input.
|
|
return Symbol.for(description);
|
|
}
|
|
exports.createContextKey = createContextKey;
|
|
var BaseContext = /** @class */ (function () {
|
|
/**
|
|
* Construct a new context which inherits values from an optional parent context.
|
|
*
|
|
* @param parentContext a context from which to inherit values
|
|
*/
|
|
function BaseContext(parentContext) {
|
|
// for minification
|
|
var self = this;
|
|
self._currentContext = parentContext ? new Map(parentContext) : new Map();
|
|
self.getValue = function (key) { return self._currentContext.get(key); };
|
|
self.setValue = function (key, value) {
|
|
var context = new BaseContext(self._currentContext);
|
|
context._currentContext.set(key, value);
|
|
return context;
|
|
};
|
|
self.deleteValue = function (key) {
|
|
var context = new BaseContext(self._currentContext);
|
|
context._currentContext.delete(key);
|
|
return context;
|
|
};
|
|
}
|
|
return BaseContext;
|
|
}());
|
|
/** The root context is used as the default parent context when there is no active context */
|
|
exports.ROOT_CONTEXT = new BaseContext();
|
|
//# sourceMappingURL=context.js.map
|
|
|
|
/***/ }),
|
|
/* 133 */,
|
|
/* 134 */,
|
|
/* 135 */,
|
|
/* 136 */,
|
|
/* 137 */,
|
|
/* 138 */,
|
|
/* 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);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 140 */,
|
|
/* 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
|
|
|
|
|
|
/***/ }),
|
|
/* 142 */,
|
|
/* 143 */,
|
|
/* 144 */,
|
|
/* 145 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports._globalThis = void 0;
|
|
/** only globals that common to node and browsers are allowed */
|
|
// eslint-disable-next-line node/no-unsupported-features/es-builtins
|
|
exports._globalThis = typeof globalThis === 'object' ? globalThis : global;
|
|
//# sourceMappingURL=globalThis.js.map
|
|
|
|
/***/ }),
|
|
/* 146 */,
|
|
/* 147 */
|
|
/***/ (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 })
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 148 */,
|
|
/* 149 */
|
|
/***/ (function(module) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var conversions = {};
|
|
module.exports = conversions;
|
|
|
|
function sign(x) {
|
|
return x < 0 ? -1 : 1;
|
|
}
|
|
|
|
function evenRound(x) {
|
|
// Round x to the nearest integer, choosing the even integer if it lies halfway between two.
|
|
if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor)
|
|
return Math.floor(x);
|
|
} else {
|
|
return Math.round(x);
|
|
}
|
|
}
|
|
|
|
function createNumberConversion(bitLength, typeOpts) {
|
|
if (!typeOpts.unsigned) {
|
|
--bitLength;
|
|
}
|
|
const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength);
|
|
const upperBound = Math.pow(2, bitLength) - 1;
|
|
|
|
const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength);
|
|
const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1);
|
|
|
|
return function(V, opts) {
|
|
if (!opts) opts = {};
|
|
|
|
let x = +V;
|
|
|
|
if (opts.enforceRange) {
|
|
if (!Number.isFinite(x)) {
|
|
throw new TypeError("Argument is not a finite number");
|
|
}
|
|
|
|
x = sign(x) * Math.floor(Math.abs(x));
|
|
if (x < lowerBound || x > upperBound) {
|
|
throw new TypeError("Argument is not in byte range");
|
|
}
|
|
|
|
return x;
|
|
}
|
|
|
|
if (!isNaN(x) && opts.clamp) {
|
|
x = evenRound(x);
|
|
|
|
if (x < lowerBound) x = lowerBound;
|
|
if (x > upperBound) x = upperBound;
|
|
return x;
|
|
}
|
|
|
|
if (!Number.isFinite(x) || x === 0) {
|
|
return 0;
|
|
}
|
|
|
|
x = sign(x) * Math.floor(Math.abs(x));
|
|
x = x % moduloVal;
|
|
|
|
if (!typeOpts.unsigned && x >= moduloBound) {
|
|
return x - moduloVal;
|
|
} else if (typeOpts.unsigned) {
|
|
if (x < 0) {
|
|
x += moduloVal;
|
|
} else if (x === -0) { // don't return negative zero
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return x;
|
|
}
|
|
}
|
|
|
|
conversions["void"] = function () {
|
|
return undefined;
|
|
};
|
|
|
|
conversions["boolean"] = function (val) {
|
|
return !!val;
|
|
};
|
|
|
|
conversions["byte"] = createNumberConversion(8, { unsigned: false });
|
|
conversions["octet"] = createNumberConversion(8, { unsigned: true });
|
|
|
|
conversions["short"] = createNumberConversion(16, { unsigned: false });
|
|
conversions["unsigned short"] = createNumberConversion(16, { unsigned: true });
|
|
|
|
conversions["long"] = createNumberConversion(32, { unsigned: false });
|
|
conversions["unsigned long"] = createNumberConversion(32, { unsigned: true });
|
|
|
|
conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 });
|
|
conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 });
|
|
|
|
conversions["double"] = function (V) {
|
|
const x = +V;
|
|
|
|
if (!Number.isFinite(x)) {
|
|
throw new TypeError("Argument is not a finite floating-point value");
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
conversions["unrestricted double"] = function (V) {
|
|
const x = +V;
|
|
|
|
if (isNaN(x)) {
|
|
throw new TypeError("Argument is NaN");
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
// not quite valid, but good enough for JS
|
|
conversions["float"] = conversions["double"];
|
|
conversions["unrestricted float"] = conversions["unrestricted double"];
|
|
|
|
conversions["DOMString"] = function (V, opts) {
|
|
if (!opts) opts = {};
|
|
|
|
if (opts.treatNullAsEmptyString && V === null) {
|
|
return "";
|
|
}
|
|
|
|
return String(V);
|
|
};
|
|
|
|
conversions["ByteString"] = function (V, opts) {
|
|
const x = String(V);
|
|
let c = undefined;
|
|
for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {
|
|
if (c > 255) {
|
|
throw new TypeError("Argument is not a valid bytestring");
|
|
}
|
|
}
|
|
|
|
return x;
|
|
};
|
|
|
|
conversions["USVString"] = function (V) {
|
|
const S = String(V);
|
|
const n = S.length;
|
|
const U = [];
|
|
for (let i = 0; i < n; ++i) {
|
|
const c = S.charCodeAt(i);
|
|
if (c < 0xD800 || c > 0xDFFF) {
|
|
U.push(String.fromCodePoint(c));
|
|
} else if (0xDC00 <= c && c <= 0xDFFF) {
|
|
U.push(String.fromCodePoint(0xFFFD));
|
|
} else {
|
|
if (i === n - 1) {
|
|
U.push(String.fromCodePoint(0xFFFD));
|
|
} else {
|
|
const d = S.charCodeAt(i + 1);
|
|
if (0xDC00 <= d && d <= 0xDFFF) {
|
|
const a = c & 0x3FF;
|
|
const b = d & 0x3FF;
|
|
U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b));
|
|
++i;
|
|
} else {
|
|
U.push(String.fromCodePoint(0xFFFD));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return U.join('');
|
|
};
|
|
|
|
conversions["Date"] = function (V, opts) {
|
|
if (!(V instanceof Date)) {
|
|
throw new TypeError("Argument is not a Date object");
|
|
}
|
|
if (isNaN(V)) {
|
|
return undefined;
|
|
}
|
|
|
|
return V;
|
|
};
|
|
|
|
conversions["RegExp"] = function (V, opts) {
|
|
if (!(V instanceof RegExp)) {
|
|
V = new RegExp(V);
|
|
}
|
|
|
|
return V;
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 150 */,
|
|
/* 151 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.NoopTracer = void 0;
|
|
var context_1 = __webpack_require__(492);
|
|
var context_utils_1 = __webpack_require__(720);
|
|
var NonRecordingSpan_1 = __webpack_require__(437);
|
|
var spancontext_utils_1 = __webpack_require__(629);
|
|
var context = context_1.ContextAPI.getInstance();
|
|
/**
|
|
* No-op implementations of {@link Tracer}.
|
|
*/
|
|
var NoopTracer = /** @class */ (function () {
|
|
function NoopTracer() {
|
|
}
|
|
// startSpan starts a noop span.
|
|
NoopTracer.prototype.startSpan = function (name, options, context) {
|
|
var root = Boolean(options === null || options === void 0 ? void 0 : options.root);
|
|
if (root) {
|
|
return new NonRecordingSpan_1.NonRecordingSpan();
|
|
}
|
|
var parentFromContext = context && context_utils_1.getSpanContext(context);
|
|
if (isSpanContext(parentFromContext) &&
|
|
spancontext_utils_1.isSpanContextValid(parentFromContext)) {
|
|
return new NonRecordingSpan_1.NonRecordingSpan(parentFromContext);
|
|
}
|
|
else {
|
|
return new NonRecordingSpan_1.NonRecordingSpan();
|
|
}
|
|
};
|
|
NoopTracer.prototype.startActiveSpan = function (name, arg2, arg3, arg4) {
|
|
var opts;
|
|
var ctx;
|
|
var fn;
|
|
if (arguments.length < 2) {
|
|
return;
|
|
}
|
|
else if (arguments.length === 2) {
|
|
fn = arg2;
|
|
}
|
|
else if (arguments.length === 3) {
|
|
opts = arg2;
|
|
fn = arg3;
|
|
}
|
|
else {
|
|
opts = arg2;
|
|
ctx = arg3;
|
|
fn = arg4;
|
|
}
|
|
var parentContext = ctx !== null && ctx !== void 0 ? ctx : context.active();
|
|
var span = this.startSpan(name, opts, parentContext);
|
|
var contextWithSpanSet = context_utils_1.setSpan(parentContext, span);
|
|
return context.with(contextWithSpanSet, fn, undefined, span);
|
|
};
|
|
return NoopTracer;
|
|
}());
|
|
exports.NoopTracer = NoopTracer;
|
|
function isSpanContext(spanContext) {
|
|
return (typeof spanContext === 'object' &&
|
|
typeof spanContext['spanId'] === 'string' &&
|
|
typeof spanContext['traceId'] === 'string' &&
|
|
typeof spanContext['traceFlags'] === 'number');
|
|
}
|
|
//# 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));
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 153 */,
|
|
/* 154 */,
|
|
/* 155 */,
|
|
/* 156 */,
|
|
/* 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;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 158 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
//# sourceMappingURL=Time.js.map
|
|
|
|
/***/ }),
|
|
/* 159 */,
|
|
/* 160 */,
|
|
/* 161 */,
|
|
/* 162 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.NoopTracerProvider = void 0;
|
|
var NoopTracer_1 = __webpack_require__(151);
|
|
/**
|
|
* An implementation of the {@link TracerProvider} which returns an impotent
|
|
* Tracer for all calls to `getTracer`.
|
|
*
|
|
* All operations are no-op.
|
|
*/
|
|
var NoopTracerProvider = /** @class */ (function () {
|
|
function NoopTracerProvider() {
|
|
}
|
|
NoopTracerProvider.prototype.getTracer = function (_name, _version) {
|
|
return new NoopTracer_1.NoopTracer();
|
|
};
|
|
return NoopTracerProvider;
|
|
}());
|
|
exports.NoopTracerProvider = NoopTracerProvider;
|
|
//# sourceMappingURL=NoopTracerProvider.js.map
|
|
|
|
/***/ }),
|
|
/* 163 */,
|
|
/* 164 */,
|
|
/* 165 */,
|
|
/* 166 */,
|
|
/* 167 */,
|
|
/* 168 */,
|
|
/* 169 */,
|
|
/* 170 */,
|
|
/* 171 */,
|
|
/* 172 */,
|
|
/* 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 _stringify = _interopRequireDefault(__webpack_require__(855));
|
|
|
|
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, _stringify.default)(b);
|
|
}
|
|
|
|
var _default = v1;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 174 */,
|
|
/* 175 */,
|
|
/* 176 */,
|
|
/* 177 */,
|
|
/* 178 */,
|
|
/* 179 */,
|
|
/* 180 */,
|
|
/* 181 */,
|
|
/* 182 */,
|
|
/* 183 */,
|
|
/* 184 */,
|
|
/* 185 */,
|
|
/* 186 */,
|
|
/* 187 */,
|
|
/* 188 */,
|
|
/* 189 */,
|
|
/* 190 */,
|
|
/* 191 */,
|
|
/* 192 */,
|
|
/* 193 */,
|
|
/* 194 */,
|
|
/* 195 */,
|
|
/* 196 */
|
|
/***/ (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["UploadChunkSize"] = "upload-chunk-size";
|
|
})(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";
|
|
|
|
|
|
/***/ }),
|
|
/* 197 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(676));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function parse(uuid) {
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Invalid UUID');
|
|
}
|
|
|
|
let v;
|
|
const arr = new Uint8Array(16); // Parse ########-....-....-....-............
|
|
|
|
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
arr[1] = v >>> 16 & 0xff;
|
|
arr[2] = v >>> 8 & 0xff;
|
|
arr[3] = v & 0xff; // Parse ........-####-....-....-............
|
|
|
|
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
arr[5] = v & 0xff; // Parse ........-....-####-....-............
|
|
|
|
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
arr[7] = v & 0xff; // Parse ........-....-....-####-............
|
|
|
|
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
arr[9] = v & 0xff; // Parse ........-....-....-....-############
|
|
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
|
|
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
arr[11] = v / 0x100000000 & 0xff;
|
|
arr[12] = v >>> 24 & 0xff;
|
|
arr[13] = v >>> 16 & 0xff;
|
|
arr[14] = v >>> 8 & 0xff;
|
|
arr[15] = v & 0xff;
|
|
return arr;
|
|
}
|
|
|
|
var _default = parse;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 198 */,
|
|
/* 199 */,
|
|
/* 200 */,
|
|
/* 201 */,
|
|
/* 202 */,
|
|
/* 203 */,
|
|
/* 204 */,
|
|
/* 205 */,
|
|
/* 206 */,
|
|
/* 207 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=trace_state.js.map
|
|
|
|
/***/ }),
|
|
/* 208 */,
|
|
/* 209 */,
|
|
/* 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");
|
|
|
|
/***/ }),
|
|
/* 212 */,
|
|
/* 213 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("timers");
|
|
|
|
/***/ }),
|
|
/* 214 */,
|
|
/* 215 */,
|
|
/* 216 */,
|
|
/* 217 */,
|
|
/* 218 */,
|
|
/* 219 */,
|
|
/* 220 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=SpanOptions.js.map
|
|
|
|
/***/ }),
|
|
/* 221 */,
|
|
/* 222 */,
|
|
/* 223 */,
|
|
/* 224 */,
|
|
/* 225 */,
|
|
/* 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 227 */,
|
|
/* 228 */,
|
|
/* 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.
|
|
*/
|
|
class AzureKeyCredential {
|
|
/**
|
|
* Create an instance of an AzureKeyCredential for use
|
|
* with a service client.
|
|
*
|
|
* @param key - The initial value of the key to use in authentication
|
|
*/
|
|
constructor(key) {
|
|
if (!key) {
|
|
throw new Error("key must be a non-empty string");
|
|
}
|
|
this._key = key;
|
|
}
|
|
/**
|
|
* The value of the key to be used in authentication
|
|
*/
|
|
get key() {
|
|
return this._key;
|
|
}
|
|
/**
|
|
* 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
|
|
*/
|
|
update(newKey) {
|
|
this._key = newKey;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Helper TypeGuard that checks if something is defined or not.
|
|
* @param thing - Anything
|
|
* @internal
|
|
*/
|
|
function isDefined(thing) {
|
|
return typeof thing !== "undefined" && thing !== null;
|
|
}
|
|
/**
|
|
* Helper TypeGuard that checks if the input is an object with the specified properties.
|
|
* Note: The properties may be inherited.
|
|
* @param thing - Anything.
|
|
* @param properties - The name of the properties that should appear in the object.
|
|
* @internal
|
|
*/
|
|
function isObjectWithProperties(thing, properties) {
|
|
if (!isDefined(thing) || typeof thing !== "object") {
|
|
return false;
|
|
}
|
|
for (const property of properties) {
|
|
if (!objectHasProperty(thing, property)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* Helper TypeGuard that checks if the input is an object with the specified property.
|
|
* Note: The property may be inherited.
|
|
* @param thing - Any object.
|
|
* @param property - The name of the property that should appear in the object.
|
|
* @internal
|
|
*/
|
|
function objectHasProperty(thing, property) {
|
|
return typeof thing === "object" && property in thing;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A static name/key-based credential that supports updating
|
|
* the underlying name and key values.
|
|
*/
|
|
class AzureNamedKeyCredential {
|
|
/**
|
|
* Create an instance of an AzureNamedKeyCredential for use
|
|
* with a service client.
|
|
*
|
|
* @param name - The initial value of the name to use in authentication.
|
|
* @param key - The initial value of the key to use in authentication.
|
|
*/
|
|
constructor(name, key) {
|
|
if (!name || !key) {
|
|
throw new TypeError("name and key must be non-empty strings");
|
|
}
|
|
this._name = name;
|
|
this._key = key;
|
|
}
|
|
/**
|
|
* The value of the key to be used in authentication.
|
|
*/
|
|
get key() {
|
|
return this._key;
|
|
}
|
|
/**
|
|
* The value of the name to be used in authentication.
|
|
*/
|
|
get name() {
|
|
return this._name;
|
|
}
|
|
/**
|
|
* Change the value of the key.
|
|
*
|
|
* Updates will take effect upon the next request after
|
|
* updating the key value.
|
|
*
|
|
* @param newName - The new name value to be used.
|
|
* @param newKey - The new key value to be used.
|
|
*/
|
|
update(newName, newKey) {
|
|
if (!newName || !newKey) {
|
|
throw new TypeError("newName and newKey must be non-empty strings");
|
|
}
|
|
this._name = newName;
|
|
this._key = newKey;
|
|
}
|
|
}
|
|
/**
|
|
* Tests an object to determine whether it implements NamedKeyCredential.
|
|
*
|
|
* @param credential - The assumed NamedKeyCredential to be tested.
|
|
*/
|
|
function isNamedKeyCredential(credential) {
|
|
return (isObjectWithProperties(credential, ["name", "key"]) &&
|
|
typeof credential.key === "string" &&
|
|
typeof credential.name === "string");
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A static-signature-based credential that supports updating
|
|
* the underlying signature value.
|
|
*/
|
|
class AzureSASCredential {
|
|
/**
|
|
* Create an instance of an AzureSASCredential for use
|
|
* with a service client.
|
|
*
|
|
* @param signature - The initial value of the shared access signature to use in authentication
|
|
*/
|
|
constructor(signature) {
|
|
if (!signature) {
|
|
throw new Error("shared access signature must be a non-empty string");
|
|
}
|
|
this._signature = signature;
|
|
}
|
|
/**
|
|
* The value of the shared access signature to be used in authentication
|
|
*/
|
|
get signature() {
|
|
return this._signature;
|
|
}
|
|
/**
|
|
* Change the value of the signature.
|
|
*
|
|
* Updates will take effect upon the next request after
|
|
* updating the signature value.
|
|
*
|
|
* @param newSignature - The new shared access signature value to be used
|
|
*/
|
|
update(newSignature) {
|
|
if (!newSignature) {
|
|
throw new Error("shared access signature must be a non-empty string");
|
|
}
|
|
this._signature = newSignature;
|
|
}
|
|
}
|
|
/**
|
|
* Tests an object to determine whether it implements SASCredential.
|
|
*
|
|
* @param credential - The assumed SASCredential to be tested.
|
|
*/
|
|
function isSASCredential(credential) {
|
|
return (isObjectWithProperties(credential, ["signature"]) && typeof credential.signature === "string");
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Tests an object to determine whether it implements TokenCredential.
|
|
*
|
|
* @param credential - The assumed TokenCredential to be tested.
|
|
*/
|
|
function isTokenCredential(credential) {
|
|
// Check for an object with a 'getToken' function and possibly with
|
|
// a 'signRequest' function. We do this check to make sure that
|
|
// a ServiceClientCredentials implementor (like TokenClientCredentials
|
|
// in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if
|
|
// it doesn't actually implement TokenCredential also.
|
|
const castCredential = credential;
|
|
return (castCredential &&
|
|
typeof castCredential.getToken === "function" &&
|
|
(castCredential.signRequest === undefined || castCredential.getToken.length > 0));
|
|
}
|
|
|
|
exports.AzureKeyCredential = AzureKeyCredential;
|
|
exports.AzureNamedKeyCredential = AzureNamedKeyCredential;
|
|
exports.AzureSASCredential = AzureSASCredential;
|
|
exports.isNamedKeyCredential = isNamedKeyCredential;
|
|
exports.isSASCredential = isSASCredential;
|
|
exports.isTokenCredential = isTokenCredential;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
/* 230 */,
|
|
/* 231 */,
|
|
/* 232 */,
|
|
/* 233 */,
|
|
/* 234 */,
|
|
/* 235 */,
|
|
/* 236 */,
|
|
/* 237 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.DiagConsoleLogger = void 0;
|
|
var consoleMap = [
|
|
{ n: 'error', c: 'error' },
|
|
{ n: 'warn', c: 'warn' },
|
|
{ n: 'info', c: 'info' },
|
|
{ n: 'debug', c: 'debug' },
|
|
{ n: 'verbose', c: 'trace' },
|
|
];
|
|
/**
|
|
* A simple Immutable Console based diagnostic logger which will output any messages to the Console.
|
|
* If you want to limit the amount of logging to a specific level or lower use the
|
|
* {@link createLogLevelDiagLogger}
|
|
*/
|
|
var DiagConsoleLogger = /** @class */ (function () {
|
|
function DiagConsoleLogger() {
|
|
function _consoleFunc(funcName) {
|
|
return function () {
|
|
var orgArguments = arguments;
|
|
if (console) {
|
|
// Some environments only expose the console when the F12 developer console is open
|
|
var theFunc = console[funcName];
|
|
if (typeof theFunc !== 'function') {
|
|
// Not all environments support all functions
|
|
theFunc = console.log;
|
|
}
|
|
// One last final check
|
|
if (typeof theFunc === 'function') {
|
|
return theFunc.apply(console, orgArguments);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
for (var i = 0; i < consoleMap.length; i++) {
|
|
this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);
|
|
}
|
|
}
|
|
return DiagConsoleLogger;
|
|
}());
|
|
exports.DiagConsoleLogger = DiagConsoleLogger;
|
|
//# sourceMappingURL=consoleLogger.js.map
|
|
|
|
/***/ }),
|
|
/* 238 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 239 */,
|
|
/* 240 */,
|
|
/* 241 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = _default;
|
|
exports.URL = exports.DNS = void 0;
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(855));
|
|
|
|
var _parse = _interopRequireDefault(__webpack_require__(197));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
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 = (0, _parse.default)(namespace);
|
|
}
|
|
|
|
if (namespace.length !== 16) {
|
|
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
} // Compute hash of namespace and value, Per 4.3
|
|
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
// hashfunc([...namespace, ... value])`
|
|
|
|
|
|
let bytes = new Uint8Array(16 + value.length);
|
|
bytes.set(namespace);
|
|
bytes.set(value, namespace.length);
|
|
bytes = hashfunc(bytes);
|
|
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, _stringify.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 */,
|
|
/* 243 */,
|
|
/* 244 */,
|
|
/* 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;
|
|
|
|
/***/ }),
|
|
/* 246 */,
|
|
/* 247 */,
|
|
/* 248 */,
|
|
/* 249 */,
|
|
/* 250 */,
|
|
/* 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.getArchiveFileSizeInBytes(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
|
|
|
|
/***/ }),
|
|
/* 252 */,
|
|
/* 253 */,
|
|
/* 254 */,
|
|
/* 255 */,
|
|
/* 256 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
const usm = __webpack_require__(936);
|
|
|
|
exports.implementation = class URLImpl {
|
|
constructor(constructorArgs) {
|
|
const url = constructorArgs[0];
|
|
const base = constructorArgs[1];
|
|
|
|
let parsedBase = null;
|
|
if (base !== undefined) {
|
|
parsedBase = usm.basicURLParse(base);
|
|
if (parsedBase === "failure") {
|
|
throw new TypeError("Invalid base URL");
|
|
}
|
|
}
|
|
|
|
const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase });
|
|
if (parsedURL === "failure") {
|
|
throw new TypeError("Invalid URL");
|
|
}
|
|
|
|
this._url = parsedURL;
|
|
|
|
// TODO: query stuff
|
|
}
|
|
|
|
get href() {
|
|
return usm.serializeURL(this._url);
|
|
}
|
|
|
|
set href(v) {
|
|
const parsedURL = usm.basicURLParse(v);
|
|
if (parsedURL === "failure") {
|
|
throw new TypeError("Invalid URL");
|
|
}
|
|
|
|
this._url = parsedURL;
|
|
}
|
|
|
|
get origin() {
|
|
return usm.serializeURLOrigin(this._url);
|
|
}
|
|
|
|
get protocol() {
|
|
return this._url.scheme + ":";
|
|
}
|
|
|
|
set protocol(v) {
|
|
usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" });
|
|
}
|
|
|
|
get username() {
|
|
return this._url.username;
|
|
}
|
|
|
|
set username(v) {
|
|
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
|
|
return;
|
|
}
|
|
|
|
usm.setTheUsername(this._url, v);
|
|
}
|
|
|
|
get password() {
|
|
return this._url.password;
|
|
}
|
|
|
|
set password(v) {
|
|
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
|
|
return;
|
|
}
|
|
|
|
usm.setThePassword(this._url, v);
|
|
}
|
|
|
|
get host() {
|
|
const url = this._url;
|
|
|
|
if (url.host === null) {
|
|
return "";
|
|
}
|
|
|
|
if (url.port === null) {
|
|
return usm.serializeHost(url.host);
|
|
}
|
|
|
|
return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port);
|
|
}
|
|
|
|
set host(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "host" });
|
|
}
|
|
|
|
get hostname() {
|
|
if (this._url.host === null) {
|
|
return "";
|
|
}
|
|
|
|
return usm.serializeHost(this._url.host);
|
|
}
|
|
|
|
set hostname(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" });
|
|
}
|
|
|
|
get port() {
|
|
if (this._url.port === null) {
|
|
return "";
|
|
}
|
|
|
|
return usm.serializeInteger(this._url.port);
|
|
}
|
|
|
|
set port(v) {
|
|
if (usm.cannotHaveAUsernamePasswordPort(this._url)) {
|
|
return;
|
|
}
|
|
|
|
if (v === "") {
|
|
this._url.port = null;
|
|
} else {
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "port" });
|
|
}
|
|
}
|
|
|
|
get pathname() {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return this._url.path[0];
|
|
}
|
|
|
|
if (this._url.path.length === 0) {
|
|
return "";
|
|
}
|
|
|
|
return "/" + this._url.path.join("/");
|
|
}
|
|
|
|
set pathname(v) {
|
|
if (this._url.cannotBeABaseURL) {
|
|
return;
|
|
}
|
|
|
|
this._url.path = [];
|
|
usm.basicURLParse(v, { url: this._url, stateOverride: "path start" });
|
|
}
|
|
|
|
get search() {
|
|
if (this._url.query === null || this._url.query === "") {
|
|
return "";
|
|
}
|
|
|
|
return "?" + this._url.query;
|
|
}
|
|
|
|
set search(v) {
|
|
// TODO: query stuff
|
|
|
|
const url = this._url;
|
|
|
|
if (v === "") {
|
|
url.query = null;
|
|
return;
|
|
}
|
|
|
|
const input = v[0] === "?" ? v.substring(1) : v;
|
|
url.query = "";
|
|
usm.basicURLParse(input, { url, stateOverride: "query" });
|
|
}
|
|
|
|
get hash() {
|
|
if (this._url.fragment === null || this._url.fragment === "") {
|
|
return "";
|
|
}
|
|
|
|
return "#" + this._url.fragment;
|
|
}
|
|
|
|
set hash(v) {
|
|
if (v === "") {
|
|
this._url.fragment = null;
|
|
return;
|
|
}
|
|
|
|
const input = v[0] === "#" ? v.substring(1) : v;
|
|
this._url.fragment = "";
|
|
usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" });
|
|
}
|
|
|
|
toJSON() {
|
|
return this.href;
|
|
}
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 257 */
|
|
/***/ (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);
|
|
|
|
|
|
/***/ }),
|
|
/* 258 */,
|
|
/* 259 */,
|
|
/* 260 */,
|
|
/* 261 */,
|
|
/* 262 */,
|
|
/* 263 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var api = __webpack_require__(440);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(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";
|
|
})(exports.SpanKind || (exports.SpanKind = {}));
|
|
/**
|
|
* Return the span if one exists
|
|
*
|
|
* @param context - context to get span from
|
|
*/
|
|
function getSpan(context) {
|
|
return api.trace.getSpan(context);
|
|
}
|
|
/**
|
|
* Set the span on a context
|
|
*
|
|
* @param context - context to use as parent
|
|
* @param span - span to set active
|
|
*/
|
|
function setSpan(context, span) {
|
|
return api.trace.setSpan(context, span);
|
|
}
|
|
/**
|
|
* Wrap span context in a NoopSpan and set as span in a new
|
|
* context
|
|
*
|
|
* @param context - context to set active span on
|
|
* @param spanContext - span context to be wrapped
|
|
*/
|
|
function setSpanContext(context, spanContext) {
|
|
return api.trace.setSpanContext(context, spanContext);
|
|
}
|
|
/**
|
|
* Get the span context of the span if it exists.
|
|
*
|
|
* @param context - context to get values from
|
|
*/
|
|
function getSpanContext(context) {
|
|
return api.trace.getSpanContext(context);
|
|
}
|
|
/**
|
|
* Returns true of the given {@link SpanContext} is valid.
|
|
* A valid {@link SpanContext} is one which has a valid trace ID and span ID as per the spec.
|
|
*
|
|
* @param context - the {@link SpanContext} to validate.
|
|
*
|
|
* @returns true if the {@link SpanContext} is valid, false otherwise.
|
|
*/
|
|
function isSpanContextValid(context) {
|
|
return api.trace.isSpanContextValid(context);
|
|
}
|
|
function getTracer(name, version) {
|
|
return api.trace.getTracer(name || "azure/core-tracing", version);
|
|
}
|
|
/** Entrypoint for context API */
|
|
const context = api.context;
|
|
(function (SpanStatusCode) {
|
|
/**
|
|
* The default status.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["UNSET"] = 0] = "UNSET";
|
|
/**
|
|
* The operation has been validated by an Application developer or
|
|
* Operator to have completed successfully.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["OK"] = 1] = "OK";
|
|
/**
|
|
* The operation contains an error.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["ERROR"] = 2] = "ERROR";
|
|
})(exports.SpanStatusCode || (exports.SpanStatusCode = {}));
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function isTracingDisabled() {
|
|
var _a;
|
|
if (typeof process === "undefined") {
|
|
// not supported in browser for now without polyfills
|
|
return false;
|
|
}
|
|
const azureTracingDisabledValue = (_a = process.env.AZURE_TRACING_DISABLED) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
if (azureTracingDisabledValue === "false" || azureTracingDisabledValue === "0") {
|
|
return false;
|
|
}
|
|
return Boolean(azureTracingDisabledValue);
|
|
}
|
|
/**
|
|
* Creates a function that can be used to create spans using the global tracer.
|
|
*
|
|
* Usage:
|
|
*
|
|
* ```typescript
|
|
* // once
|
|
* const createSpan = createSpanFunction({ packagePrefix: "Azure.Data.AppConfiguration", namespace: "Microsoft.AppConfiguration" });
|
|
*
|
|
* // in each operation
|
|
* const span = createSpan("deleteConfigurationSetting", operationOptions);
|
|
* // code...
|
|
* span.end();
|
|
* ```
|
|
*
|
|
* @hidden
|
|
* @param args - allows configuration of the prefix for each span as well as the az.namespace field.
|
|
*/
|
|
function createSpanFunction(args) {
|
|
return function (operationName, operationOptions) {
|
|
const tracer = getTracer();
|
|
const tracingOptions = (operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) || {};
|
|
const spanOptions = Object.assign({ kind: exports.SpanKind.INTERNAL }, tracingOptions.spanOptions);
|
|
const spanName = args.packagePrefix ? `${args.packagePrefix}.${operationName}` : operationName;
|
|
let span;
|
|
if (isTracingDisabled()) {
|
|
span = api.trace.wrapSpanContext(api.INVALID_SPAN_CONTEXT);
|
|
}
|
|
else {
|
|
span = tracer.startSpan(spanName, spanOptions, tracingOptions.tracingContext);
|
|
}
|
|
if (args.namespace) {
|
|
span.setAttribute("az.namespace", args.namespace);
|
|
}
|
|
let newSpanOptions = tracingOptions.spanOptions || {};
|
|
if (span.isRecording() && args.namespace) {
|
|
newSpanOptions = Object.assign(Object.assign({}, tracingOptions.spanOptions), { attributes: Object.assign(Object.assign({}, spanOptions.attributes), { "az.namespace": args.namespace }) });
|
|
}
|
|
const newTracingOptions = Object.assign(Object.assign({}, tracingOptions), { spanOptions: newSpanOptions, tracingContext: setSpan(tracingOptions.tracingContext || context.active(), span) });
|
|
const newOperationOptions = Object.assign(Object.assign({}, operationOptions), { tracingOptions: newTracingOptions });
|
|
return {
|
|
span,
|
|
updatedOptions: newOperationOptions
|
|
};
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
const 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) {
|
|
const parts = traceParentHeader.split("-");
|
|
if (parts.length !== 4) {
|
|
return;
|
|
}
|
|
const [version, traceId, spanId, traceOptions] = parts;
|
|
if (version !== VERSION) {
|
|
return;
|
|
}
|
|
const traceFlags = parseInt(traceOptions, 16);
|
|
const spanContext = {
|
|
spanId,
|
|
traceId,
|
|
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) {
|
|
const missingFields = [];
|
|
if (!spanContext.traceId) {
|
|
missingFields.push("traceId");
|
|
}
|
|
if (!spanContext.spanId) {
|
|
missingFields.push("spanId");
|
|
}
|
|
if (missingFields.length) {
|
|
return;
|
|
}
|
|
const flags = spanContext.traceFlags || 0 /* NONE */;
|
|
const hexFlags = flags.toString(16);
|
|
const 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.context = context;
|
|
exports.createSpanFunction = createSpanFunction;
|
|
exports.extractSpanContextFromTraceParentHeader = extractSpanContextFromTraceParentHeader;
|
|
exports.getSpan = getSpan;
|
|
exports.getSpanContext = getSpanContext;
|
|
exports.getTraceParentHeader = getTraceParentHeader;
|
|
exports.getTracer = getTracer;
|
|
exports.isSpanContextValid = isSpanContextValid;
|
|
exports.setSpan = setSpan;
|
|
exports.setSpanContext = setSpanContext;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
/* 264 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 266 */,
|
|
/* 267 */,
|
|
/* 268 */,
|
|
/* 269 */,
|
|
/* 270 */,
|
|
/* 271 */,
|
|
/* 272 */,
|
|
/* 273 */,
|
|
/* 274 */,
|
|
/* 275 */,
|
|
/* 276 */,
|
|
/* 277 */,
|
|
/* 278 */,
|
|
/* 279 */,
|
|
/* 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 });
|
|
exports.create = void 0;
|
|
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
|
|
|
|
/***/ }),
|
|
/* 282 */,
|
|
/* 283 */,
|
|
/* 284 */,
|
|
/* 285 */,
|
|
/* 286 */,
|
|
/* 287 */,
|
|
/* 288 */,
|
|
/* 289 */,
|
|
/* 290 */,
|
|
/* 291 */,
|
|
/* 292 */,
|
|
/* 293 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("buffer");
|
|
|
|
/***/ }),
|
|
/* 294 */,
|
|
/* 295 */,
|
|
/* 296 */,
|
|
/* 297 */
|
|
/***/ (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 (k !== "default" && 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());
|
|
});
|
|
};
|
|
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 });
|
|
exports.DefaultGlobber = void 0;
|
|
const core = __importStar(__webpack_require__(470));
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const globOptionsHelper = __importStar(__webpack_require__(601));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const patternHelper = __importStar(__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, true, 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;
|
|
|
|
/***/ }),
|
|
/* 299 */,
|
|
/* 300 */,
|
|
/* 301 */,
|
|
/* 302 */,
|
|
/* 303 */,
|
|
/* 304 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("string_decoder");
|
|
|
|
/***/ }),
|
|
/* 305 */,
|
|
/* 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;
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 307 */,
|
|
/* 308 */,
|
|
/* 309 */,
|
|
/* 310 */,
|
|
/* 311 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 313 */,
|
|
/* 314 */,
|
|
/* 315 */,
|
|
/* 316 */,
|
|
/* 317 */,
|
|
/* 318 */,
|
|
/* 319 */,
|
|
/* 320 */,
|
|
/* 321 */,
|
|
/* 322 */,
|
|
/* 323 */,
|
|
/* 324 */,
|
|
/* 325 */,
|
|
/* 326 */,
|
|
/* 327 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.MatchKind = void 0;
|
|
/**
|
|
* 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
|
|
|
|
/***/ }),
|
|
/* 328 */,
|
|
/* 329 */,
|
|
/* 330 */,
|
|
/* 331 */,
|
|
/* 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__(147);
|
|
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;
|
|
|
|
|
|
/***/ }),
|
|
/* 333 */,
|
|
/* 334 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
module.exports =
|
|
{
|
|
parallel : __webpack_require__(424),
|
|
serial : __webpack_require__(91),
|
|
serialOrdered : __webpack_require__(892)
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 335 */,
|
|
/* 336 */,
|
|
/* 337 */,
|
|
/* 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 339 */,
|
|
/* 340 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.SamplingDecision = void 0;
|
|
/**
|
|
* A sampling decision that determines how a {@link Span} will be recorded
|
|
* and collected.
|
|
*/
|
|
var SamplingDecision;
|
|
(function (SamplingDecision) {
|
|
/**
|
|
* `Span.isRecording() === false`, span will not be recorded and all events
|
|
* and attributes will be dropped.
|
|
*/
|
|
SamplingDecision[SamplingDecision["NOT_RECORD"] = 0] = "NOT_RECORD";
|
|
/**
|
|
* `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}
|
|
* MUST NOT be set.
|
|
*/
|
|
SamplingDecision[SamplingDecision["RECORD"] = 1] = "RECORD";
|
|
/**
|
|
* `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}
|
|
* MUST be set.
|
|
*/
|
|
SamplingDecision[SamplingDecision["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED";
|
|
})(SamplingDecision = exports.SamplingDecision || (exports.SamplingDecision = {}));
|
|
//# sourceMappingURL=SamplingResult.js.map
|
|
|
|
/***/ }),
|
|
/* 341 */,
|
|
/* 342 */,
|
|
/* 343 */,
|
|
/* 344 */,
|
|
/* 345 */,
|
|
/* 346 */,
|
|
/* 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 349 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 351 */,
|
|
/* 352 */,
|
|
/* 353 */,
|
|
/* 354 */,
|
|
/* 355 */,
|
|
/* 356 */,
|
|
/* 357 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("assert");
|
|
|
|
/***/ }),
|
|
/* 358 */,
|
|
/* 359 */,
|
|
/* 360 */,
|
|
/* 361 */,
|
|
/* 362 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.DiagComponentLogger = void 0;
|
|
var global_utils_1 = __webpack_require__(525);
|
|
/**
|
|
* Component Logger which is meant to be used as part of any component which
|
|
* will add automatically additional namespace in front of the log message.
|
|
* It will then forward all message to global diag logger
|
|
* @example
|
|
* const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });
|
|
* cLogger.debug('test');
|
|
* // @opentelemetry/instrumentation-http test
|
|
*/
|
|
var DiagComponentLogger = /** @class */ (function () {
|
|
function DiagComponentLogger(props) {
|
|
this._namespace = props.namespace || 'DiagComponentLogger';
|
|
}
|
|
DiagComponentLogger.prototype.debug = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return logProxy('debug', this._namespace, args);
|
|
};
|
|
DiagComponentLogger.prototype.error = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return logProxy('error', this._namespace, args);
|
|
};
|
|
DiagComponentLogger.prototype.info = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return logProxy('info', this._namespace, args);
|
|
};
|
|
DiagComponentLogger.prototype.warn = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return logProxy('warn', this._namespace, args);
|
|
};
|
|
DiagComponentLogger.prototype.verbose = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return logProxy('verbose', this._namespace, args);
|
|
};
|
|
return DiagComponentLogger;
|
|
}());
|
|
exports.DiagComponentLogger = DiagComponentLogger;
|
|
function logProxy(funcName, namespace, args) {
|
|
var logger = global_utils_1.getGlobal('diag');
|
|
// shortcut if logger not set
|
|
if (!logger) {
|
|
return;
|
|
}
|
|
args.unshift(namespace);
|
|
return logger[funcName].apply(logger, args);
|
|
}
|
|
//# sourceMappingURL=ComponentLogger.js.map
|
|
|
|
/***/ }),
|
|
/* 363 */,
|
|
/* 364 */,
|
|
/* 365 */,
|
|
/* 366 */,
|
|
/* 367 */,
|
|
/* 368 */,
|
|
/* 369 */,
|
|
/* 370 */,
|
|
/* 371 */,
|
|
/* 372 */,
|
|
/* 373 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var coreHttp = __webpack_require__(999);
|
|
var tslib = __webpack_require__(608);
|
|
var coreTracing = __webpack_require__(263);
|
|
var logger$1 = __webpack_require__(928);
|
|
var abortController = __webpack_require__(106);
|
|
var os = __webpack_require__(87);
|
|
var crypto = __webpack_require__(417);
|
|
var stream = __webpack_require__(794);
|
|
__webpack_require__(510);
|
|
var coreLro = __webpack_require__(889);
|
|
var events = __webpack_require__(614);
|
|
var fs = __webpack_require__(747);
|
|
var util = __webpack_require__(669);
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
const BlobServiceProperties = {
|
|
serializedName: "BlobServiceProperties",
|
|
xmlName: "StorageServiceProperties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobServiceProperties",
|
|
modelProperties: {
|
|
blobAnalyticsLogging: {
|
|
serializedName: "Logging",
|
|
xmlName: "Logging",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Logging"
|
|
}
|
|
},
|
|
hourMetrics: {
|
|
serializedName: "HourMetrics",
|
|
xmlName: "HourMetrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics"
|
|
}
|
|
},
|
|
minuteMetrics: {
|
|
serializedName: "MinuteMetrics",
|
|
xmlName: "MinuteMetrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics"
|
|
}
|
|
},
|
|
cors: {
|
|
serializedName: "Cors",
|
|
xmlName: "Cors",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "CorsRule",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "CorsRule"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
defaultServiceVersion: {
|
|
serializedName: "DefaultServiceVersion",
|
|
xmlName: "DefaultServiceVersion",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleteRetentionPolicy: {
|
|
serializedName: "DeleteRetentionPolicy",
|
|
xmlName: "DeleteRetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
},
|
|
staticWebsite: {
|
|
serializedName: "StaticWebsite",
|
|
xmlName: "StaticWebsite",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StaticWebsite"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const Logging = {
|
|
serializedName: "Logging",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Logging",
|
|
modelProperties: {
|
|
version: {
|
|
serializedName: "Version",
|
|
required: true,
|
|
xmlName: "Version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleteProperty: {
|
|
serializedName: "Delete",
|
|
required: true,
|
|
xmlName: "Delete",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
read: {
|
|
serializedName: "Read",
|
|
required: true,
|
|
xmlName: "Read",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
write: {
|
|
serializedName: "Write",
|
|
required: true,
|
|
xmlName: "Write",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
retentionPolicy: {
|
|
serializedName: "RetentionPolicy",
|
|
xmlName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const RetentionPolicy = {
|
|
serializedName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy",
|
|
modelProperties: {
|
|
enabled: {
|
|
serializedName: "Enabled",
|
|
required: true,
|
|
xmlName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
days: {
|
|
constraints: {
|
|
InclusiveMinimum: 1
|
|
},
|
|
serializedName: "Days",
|
|
xmlName: "Days",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const Metrics = {
|
|
serializedName: "Metrics",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Metrics",
|
|
modelProperties: {
|
|
version: {
|
|
serializedName: "Version",
|
|
xmlName: "Version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
enabled: {
|
|
serializedName: "Enabled",
|
|
required: true,
|
|
xmlName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
includeAPIs: {
|
|
serializedName: "IncludeAPIs",
|
|
xmlName: "IncludeAPIs",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
retentionPolicy: {
|
|
serializedName: "RetentionPolicy",
|
|
xmlName: "RetentionPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "RetentionPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const CorsRule = {
|
|
serializedName: "CorsRule",
|
|
type: {
|
|
name: "Composite",
|
|
className: "CorsRule",
|
|
modelProperties: {
|
|
allowedOrigins: {
|
|
serializedName: "AllowedOrigins",
|
|
required: true,
|
|
xmlName: "AllowedOrigins",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
allowedMethods: {
|
|
serializedName: "AllowedMethods",
|
|
required: true,
|
|
xmlName: "AllowedMethods",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
allowedHeaders: {
|
|
serializedName: "AllowedHeaders",
|
|
required: true,
|
|
xmlName: "AllowedHeaders",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
exposedHeaders: {
|
|
serializedName: "ExposedHeaders",
|
|
required: true,
|
|
xmlName: "ExposedHeaders",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxAgeInSeconds: {
|
|
constraints: {
|
|
InclusiveMinimum: 0
|
|
},
|
|
serializedName: "MaxAgeInSeconds",
|
|
required: true,
|
|
xmlName: "MaxAgeInSeconds",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const StaticWebsite = {
|
|
serializedName: "StaticWebsite",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StaticWebsite",
|
|
modelProperties: {
|
|
enabled: {
|
|
serializedName: "Enabled",
|
|
required: true,
|
|
xmlName: "Enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
indexDocument: {
|
|
serializedName: "IndexDocument",
|
|
xmlName: "IndexDocument",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorDocument404Path: {
|
|
serializedName: "ErrorDocument404Path",
|
|
xmlName: "ErrorDocument404Path",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
defaultIndexDocumentPath: {
|
|
serializedName: "DefaultIndexDocumentPath",
|
|
xmlName: "DefaultIndexDocumentPath",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const StorageError = {
|
|
serializedName: "StorageError",
|
|
type: {
|
|
name: "Composite",
|
|
className: "StorageError",
|
|
modelProperties: {
|
|
message: {
|
|
serializedName: "Message",
|
|
xmlName: "Message",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
code: {
|
|
serializedName: "Code",
|
|
xmlName: "Code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobServiceStatistics = {
|
|
serializedName: "BlobServiceStatistics",
|
|
xmlName: "StorageServiceStats",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobServiceStatistics",
|
|
modelProperties: {
|
|
geoReplication: {
|
|
serializedName: "GeoReplication",
|
|
xmlName: "GeoReplication",
|
|
type: {
|
|
name: "Composite",
|
|
className: "GeoReplication"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const GeoReplication = {
|
|
serializedName: "GeoReplication",
|
|
type: {
|
|
name: "Composite",
|
|
className: "GeoReplication",
|
|
modelProperties: {
|
|
status: {
|
|
serializedName: "Status",
|
|
required: true,
|
|
xmlName: "Status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["live", "bootstrap", "unavailable"]
|
|
}
|
|
},
|
|
lastSyncOn: {
|
|
serializedName: "LastSyncTime",
|
|
required: true,
|
|
xmlName: "LastSyncTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ListContainersSegmentResponse = {
|
|
serializedName: "ListContainersSegmentResponse",
|
|
xmlName: "EnumerationResults",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListContainersSegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
serializedName: "ServiceEndpoint",
|
|
required: true,
|
|
xmlName: "ServiceEndpoint",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
serializedName: "Prefix",
|
|
xmlName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
serializedName: "Marker",
|
|
xmlName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
serializedName: "MaxResults",
|
|
xmlName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
containerItems: {
|
|
serializedName: "ContainerItems",
|
|
required: true,
|
|
xmlName: "Containers",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Container",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerItem"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
continuationToken: {
|
|
serializedName: "NextMarker",
|
|
xmlName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerItem = {
|
|
serializedName: "ContainerItem",
|
|
xmlName: "Container",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerItem",
|
|
modelProperties: {
|
|
name: {
|
|
serializedName: "Name",
|
|
required: true,
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleted: {
|
|
serializedName: "Deleted",
|
|
xmlName: "Deleted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "Version",
|
|
xmlName: "Version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
properties: {
|
|
serializedName: "Properties",
|
|
xmlName: "Properties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerProperties"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "Metadata",
|
|
xmlName: "Metadata",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerProperties = {
|
|
serializedName: "ContainerProperties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerProperties",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "Last-Modified",
|
|
required: true,
|
|
xmlName: "Last-Modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "Etag",
|
|
required: true,
|
|
xmlName: "Etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "LeaseStatus",
|
|
xmlName: "LeaseStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "LeaseState",
|
|
xmlName: "LeaseState",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "LeaseDuration",
|
|
xmlName: "LeaseDuration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
publicAccess: {
|
|
serializedName: "PublicAccess",
|
|
xmlName: "PublicAccess",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["container", "blob"]
|
|
}
|
|
},
|
|
hasImmutabilityPolicy: {
|
|
serializedName: "HasImmutabilityPolicy",
|
|
xmlName: "HasImmutabilityPolicy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
hasLegalHold: {
|
|
serializedName: "HasLegalHold",
|
|
xmlName: "HasLegalHold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
defaultEncryptionScope: {
|
|
serializedName: "DefaultEncryptionScope",
|
|
xmlName: "DefaultEncryptionScope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
preventEncryptionScopeOverride: {
|
|
serializedName: "DenyEncryptionScopeOverride",
|
|
xmlName: "DenyEncryptionScopeOverride",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
deletedOn: {
|
|
serializedName: "DeletedTime",
|
|
xmlName: "DeletedTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
remainingRetentionDays: {
|
|
serializedName: "RemainingRetentionDays",
|
|
xmlName: "RemainingRetentionDays",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isImmutableStorageWithVersioningEnabled: {
|
|
serializedName: "ImmutableStorageWithVersioningEnabled",
|
|
xmlName: "ImmutableStorageWithVersioningEnabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const KeyInfo = {
|
|
serializedName: "KeyInfo",
|
|
type: {
|
|
name: "Composite",
|
|
className: "KeyInfo",
|
|
modelProperties: {
|
|
startsOn: {
|
|
serializedName: "Start",
|
|
required: true,
|
|
xmlName: "Start",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
serializedName: "Expiry",
|
|
required: true,
|
|
xmlName: "Expiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const UserDelegationKey = {
|
|
serializedName: "UserDelegationKey",
|
|
type: {
|
|
name: "Composite",
|
|
className: "UserDelegationKey",
|
|
modelProperties: {
|
|
signedObjectId: {
|
|
serializedName: "SignedOid",
|
|
required: true,
|
|
xmlName: "SignedOid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedTenantId: {
|
|
serializedName: "SignedTid",
|
|
required: true,
|
|
xmlName: "SignedTid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedStartsOn: {
|
|
serializedName: "SignedStart",
|
|
required: true,
|
|
xmlName: "SignedStart",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedExpiresOn: {
|
|
serializedName: "SignedExpiry",
|
|
required: true,
|
|
xmlName: "SignedExpiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedService: {
|
|
serializedName: "SignedService",
|
|
required: true,
|
|
xmlName: "SignedService",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
signedVersion: {
|
|
serializedName: "SignedVersion",
|
|
required: true,
|
|
xmlName: "SignedVersion",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
value: {
|
|
serializedName: "Value",
|
|
required: true,
|
|
xmlName: "Value",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const FilterBlobSegment = {
|
|
serializedName: "FilterBlobSegment",
|
|
xmlName: "EnumerationResults",
|
|
type: {
|
|
name: "Composite",
|
|
className: "FilterBlobSegment",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
serializedName: "ServiceEndpoint",
|
|
required: true,
|
|
xmlName: "ServiceEndpoint",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
where: {
|
|
serializedName: "Where",
|
|
required: true,
|
|
xmlName: "Where",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobs: {
|
|
serializedName: "Blobs",
|
|
required: true,
|
|
xmlName: "Blobs",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Blob",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "FilterBlobItem"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
continuationToken: {
|
|
serializedName: "NextMarker",
|
|
xmlName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const FilterBlobItem = {
|
|
serializedName: "FilterBlobItem",
|
|
xmlName: "Blob",
|
|
type: {
|
|
name: "Composite",
|
|
className: "FilterBlobItem",
|
|
modelProperties: {
|
|
name: {
|
|
serializedName: "Name",
|
|
required: true,
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
containerName: {
|
|
serializedName: "ContainerName",
|
|
required: true,
|
|
xmlName: "ContainerName",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
tags: {
|
|
serializedName: "Tags",
|
|
xmlName: "Tags",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobTags"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobTags = {
|
|
serializedName: "BlobTags",
|
|
xmlName: "Tags",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobTags",
|
|
modelProperties: {
|
|
blobTagSet: {
|
|
serializedName: "BlobTagSet",
|
|
required: true,
|
|
xmlName: "TagSet",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Tag",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobTag"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobTag = {
|
|
serializedName: "BlobTag",
|
|
xmlName: "Tag",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobTag",
|
|
modelProperties: {
|
|
key: {
|
|
serializedName: "Key",
|
|
required: true,
|
|
xmlName: "Key",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
value: {
|
|
serializedName: "Value",
|
|
required: true,
|
|
xmlName: "Value",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const SignedIdentifier = {
|
|
serializedName: "SignedIdentifier",
|
|
xmlName: "SignedIdentifier",
|
|
type: {
|
|
name: "Composite",
|
|
className: "SignedIdentifier",
|
|
modelProperties: {
|
|
id: {
|
|
serializedName: "Id",
|
|
required: true,
|
|
xmlName: "Id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessPolicy: {
|
|
serializedName: "AccessPolicy",
|
|
xmlName: "AccessPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AccessPolicy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AccessPolicy = {
|
|
serializedName: "AccessPolicy",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AccessPolicy",
|
|
modelProperties: {
|
|
startsOn: {
|
|
serializedName: "Start",
|
|
xmlName: "Start",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
serializedName: "Expiry",
|
|
xmlName: "Expiry",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
permissions: {
|
|
serializedName: "Permission",
|
|
xmlName: "Permission",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ListBlobsFlatSegmentResponse = {
|
|
serializedName: "ListBlobsFlatSegmentResponse",
|
|
xmlName: "EnumerationResults",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListBlobsFlatSegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
serializedName: "ServiceEndpoint",
|
|
required: true,
|
|
xmlName: "ServiceEndpoint",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
containerName: {
|
|
serializedName: "ContainerName",
|
|
required: true,
|
|
xmlName: "ContainerName",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
serializedName: "Prefix",
|
|
xmlName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
serializedName: "Marker",
|
|
xmlName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
serializedName: "MaxResults",
|
|
xmlName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
segment: {
|
|
serializedName: "Segment",
|
|
xmlName: "Blobs",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobFlatListSegment"
|
|
}
|
|
},
|
|
continuationToken: {
|
|
serializedName: "NextMarker",
|
|
xmlName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobFlatListSegment = {
|
|
serializedName: "BlobFlatListSegment",
|
|
xmlName: "Blobs",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobFlatListSegment",
|
|
modelProperties: {
|
|
blobItems: {
|
|
serializedName: "BlobItems",
|
|
required: true,
|
|
xmlName: "BlobItems",
|
|
xmlElementName: "Blob",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItemInternal"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobItemInternal = {
|
|
serializedName: "BlobItemInternal",
|
|
xmlName: "Blob",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItemInternal",
|
|
modelProperties: {
|
|
name: {
|
|
serializedName: "Name",
|
|
required: true,
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deleted: {
|
|
serializedName: "Deleted",
|
|
required: true,
|
|
xmlName: "Deleted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
snapshot: {
|
|
serializedName: "Snapshot",
|
|
required: true,
|
|
xmlName: "Snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "VersionId",
|
|
xmlName: "VersionId",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
isCurrentVersion: {
|
|
serializedName: "IsCurrentVersion",
|
|
xmlName: "IsCurrentVersion",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
properties: {
|
|
serializedName: "Properties",
|
|
xmlName: "Properties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPropertiesInternal"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "Metadata",
|
|
xmlName: "Metadata",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
}
|
|
},
|
|
blobTags: {
|
|
serializedName: "BlobTags",
|
|
xmlName: "Tags",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobTags"
|
|
}
|
|
},
|
|
objectReplicationMetadata: {
|
|
serializedName: "ObjectReplicationMetadata",
|
|
xmlName: "OrMetadata",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
}
|
|
},
|
|
hasVersionsOnly: {
|
|
serializedName: "HasVersionsOnly",
|
|
xmlName: "HasVersionsOnly",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobPropertiesInternal = {
|
|
serializedName: "BlobPropertiesInternal",
|
|
xmlName: "Properties",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPropertiesInternal",
|
|
modelProperties: {
|
|
createdOn: {
|
|
serializedName: "Creation-Time",
|
|
xmlName: "Creation-Time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "Last-Modified",
|
|
required: true,
|
|
xmlName: "Last-Modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "Etag",
|
|
required: true,
|
|
xmlName: "Etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLength: {
|
|
serializedName: "Content-Length",
|
|
xmlName: "Content-Length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "Content-Type",
|
|
xmlName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "Content-Encoding",
|
|
xmlName: "Content-Encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "Content-Language",
|
|
xmlName: "Content-Language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "Content-MD5",
|
|
xmlName: "Content-MD5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "Content-Disposition",
|
|
xmlName: "Content-Disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "Cache-Control",
|
|
xmlName: "Cache-Control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
blobType: {
|
|
serializedName: "BlobType",
|
|
xmlName: "BlobType",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "LeaseStatus",
|
|
xmlName: "LeaseStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "LeaseState",
|
|
xmlName: "LeaseState",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "LeaseDuration",
|
|
xmlName: "LeaseDuration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "CopyId",
|
|
xmlName: "CopyId",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "CopyStatus",
|
|
xmlName: "CopyStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "CopySource",
|
|
xmlName: "CopySource",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "CopyProgress",
|
|
xmlName: "CopyProgress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
serializedName: "CopyCompletionTime",
|
|
xmlName: "CopyCompletionTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "CopyStatusDescription",
|
|
xmlName: "CopyStatusDescription",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
serverEncrypted: {
|
|
serializedName: "ServerEncrypted",
|
|
xmlName: "ServerEncrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
incrementalCopy: {
|
|
serializedName: "IncrementalCopy",
|
|
xmlName: "IncrementalCopy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
destinationSnapshot: {
|
|
serializedName: "DestinationSnapshot",
|
|
xmlName: "DestinationSnapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
deletedOn: {
|
|
serializedName: "DeletedTime",
|
|
xmlName: "DeletedTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
remainingRetentionDays: {
|
|
serializedName: "RemainingRetentionDays",
|
|
xmlName: "RemainingRetentionDays",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
accessTier: {
|
|
serializedName: "AccessTier",
|
|
xmlName: "AccessTier",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"P4",
|
|
"P6",
|
|
"P10",
|
|
"P15",
|
|
"P20",
|
|
"P30",
|
|
"P40",
|
|
"P50",
|
|
"P60",
|
|
"P70",
|
|
"P80",
|
|
"Hot",
|
|
"Cool",
|
|
"Archive"
|
|
]
|
|
}
|
|
},
|
|
accessTierInferred: {
|
|
serializedName: "AccessTierInferred",
|
|
xmlName: "AccessTierInferred",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
archiveStatus: {
|
|
serializedName: "ArchiveStatus",
|
|
xmlName: "ArchiveStatus",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"rehydrate-pending-to-hot",
|
|
"rehydrate-pending-to-cool"
|
|
]
|
|
}
|
|
},
|
|
customerProvidedKeySha256: {
|
|
serializedName: "CustomerProvidedKeySha256",
|
|
xmlName: "CustomerProvidedKeySha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "EncryptionScope",
|
|
xmlName: "EncryptionScope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierChangedOn: {
|
|
serializedName: "AccessTierChangeTime",
|
|
xmlName: "AccessTierChangeTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
tagCount: {
|
|
serializedName: "TagCount",
|
|
xmlName: "TagCount",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
serializedName: "Expiry-Time",
|
|
xmlName: "Expiry-Time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isSealed: {
|
|
serializedName: "Sealed",
|
|
xmlName: "Sealed",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
rehydratePriority: {
|
|
serializedName: "RehydratePriority",
|
|
xmlName: "RehydratePriority",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["High", "Standard"]
|
|
}
|
|
},
|
|
lastAccessedOn: {
|
|
serializedName: "LastAccessTime",
|
|
xmlName: "LastAccessTime",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyExpiresOn: {
|
|
serializedName: "ImmutabilityPolicyUntilDate",
|
|
xmlName: "ImmutabilityPolicyUntilDate",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyMode: {
|
|
serializedName: "ImmutabilityPolicyMode",
|
|
xmlName: "ImmutabilityPolicyMode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["Mutable", "Unlocked", "Locked"]
|
|
}
|
|
},
|
|
legalHold: {
|
|
serializedName: "LegalHold",
|
|
xmlName: "LegalHold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ListBlobsHierarchySegmentResponse = {
|
|
serializedName: "ListBlobsHierarchySegmentResponse",
|
|
xmlName: "EnumerationResults",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ListBlobsHierarchySegmentResponse",
|
|
modelProperties: {
|
|
serviceEndpoint: {
|
|
serializedName: "ServiceEndpoint",
|
|
required: true,
|
|
xmlName: "ServiceEndpoint",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
containerName: {
|
|
serializedName: "ContainerName",
|
|
required: true,
|
|
xmlName: "ContainerName",
|
|
xmlIsAttribute: true,
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
prefix: {
|
|
serializedName: "Prefix",
|
|
xmlName: "Prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
marker: {
|
|
serializedName: "Marker",
|
|
xmlName: "Marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
maxPageSize: {
|
|
serializedName: "MaxResults",
|
|
xmlName: "MaxResults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
delimiter: {
|
|
serializedName: "Delimiter",
|
|
xmlName: "Delimiter",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
segment: {
|
|
serializedName: "Segment",
|
|
xmlName: "Blobs",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobHierarchyListSegment"
|
|
}
|
|
},
|
|
continuationToken: {
|
|
serializedName: "NextMarker",
|
|
xmlName: "NextMarker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobHierarchyListSegment = {
|
|
serializedName: "BlobHierarchyListSegment",
|
|
xmlName: "Blobs",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobHierarchyListSegment",
|
|
modelProperties: {
|
|
blobPrefixes: {
|
|
serializedName: "BlobPrefixes",
|
|
xmlName: "BlobPrefixes",
|
|
xmlElementName: "BlobPrefix",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPrefix"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
blobItems: {
|
|
serializedName: "BlobItems",
|
|
required: true,
|
|
xmlName: "BlobItems",
|
|
xmlElementName: "Blob",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobItemInternal"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobPrefix = {
|
|
serializedName: "BlobPrefix",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobPrefix",
|
|
modelProperties: {
|
|
name: {
|
|
serializedName: "Name",
|
|
required: true,
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockLookupList = {
|
|
serializedName: "BlockLookupList",
|
|
xmlName: "BlockList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockLookupList",
|
|
modelProperties: {
|
|
committed: {
|
|
serializedName: "Committed",
|
|
xmlName: "Committed",
|
|
xmlElementName: "Committed",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
uncommitted: {
|
|
serializedName: "Uncommitted",
|
|
xmlName: "Uncommitted",
|
|
xmlElementName: "Uncommitted",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
latest: {
|
|
serializedName: "Latest",
|
|
xmlName: "Latest",
|
|
xmlElementName: "Latest",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockList = {
|
|
serializedName: "BlockList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockList",
|
|
modelProperties: {
|
|
committedBlocks: {
|
|
serializedName: "CommittedBlocks",
|
|
xmlName: "CommittedBlocks",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Block",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
uncommittedBlocks: {
|
|
serializedName: "UncommittedBlocks",
|
|
xmlName: "UncommittedBlocks",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Block",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const Block = {
|
|
serializedName: "Block",
|
|
type: {
|
|
name: "Composite",
|
|
className: "Block",
|
|
modelProperties: {
|
|
name: {
|
|
serializedName: "Name",
|
|
required: true,
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
size: {
|
|
serializedName: "Size",
|
|
required: true,
|
|
xmlName: "Size",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageList = {
|
|
serializedName: "PageList",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageList",
|
|
modelProperties: {
|
|
pageRange: {
|
|
serializedName: "PageRange",
|
|
xmlName: "PageRange",
|
|
xmlElementName: "PageRange",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageRange"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
clearRange: {
|
|
serializedName: "ClearRange",
|
|
xmlName: "ClearRange",
|
|
xmlElementName: "ClearRange",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "ClearRange"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageRange = {
|
|
serializedName: "PageRange",
|
|
xmlName: "PageRange",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageRange",
|
|
modelProperties: {
|
|
start: {
|
|
serializedName: "Start",
|
|
required: true,
|
|
xmlName: "Start",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
end: {
|
|
serializedName: "End",
|
|
required: true,
|
|
xmlName: "End",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ClearRange = {
|
|
serializedName: "ClearRange",
|
|
xmlName: "ClearRange",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ClearRange",
|
|
modelProperties: {
|
|
start: {
|
|
serializedName: "Start",
|
|
required: true,
|
|
xmlName: "Start",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
end: {
|
|
serializedName: "End",
|
|
required: true,
|
|
xmlName: "End",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const QueryRequest = {
|
|
serializedName: "QueryRequest",
|
|
xmlName: "QueryRequest",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QueryRequest",
|
|
modelProperties: {
|
|
queryType: {
|
|
serializedName: "QueryType",
|
|
required: true,
|
|
xmlName: "QueryType",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
expression: {
|
|
serializedName: "Expression",
|
|
required: true,
|
|
xmlName: "Expression",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
inputSerialization: {
|
|
serializedName: "InputSerialization",
|
|
xmlName: "InputSerialization",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QuerySerialization"
|
|
}
|
|
},
|
|
outputSerialization: {
|
|
serializedName: "OutputSerialization",
|
|
xmlName: "OutputSerialization",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QuerySerialization"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const QuerySerialization = {
|
|
serializedName: "QuerySerialization",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QuerySerialization",
|
|
modelProperties: {
|
|
format: {
|
|
serializedName: "Format",
|
|
xmlName: "Format",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QueryFormat"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const QueryFormat = {
|
|
serializedName: "QueryFormat",
|
|
type: {
|
|
name: "Composite",
|
|
className: "QueryFormat",
|
|
modelProperties: {
|
|
type: {
|
|
serializedName: "Type",
|
|
required: true,
|
|
xmlName: "Type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["delimited", "json", "arrow", "parquet"]
|
|
}
|
|
},
|
|
delimitedTextConfiguration: {
|
|
serializedName: "DelimitedTextConfiguration",
|
|
xmlName: "DelimitedTextConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "DelimitedTextConfiguration"
|
|
}
|
|
},
|
|
jsonTextConfiguration: {
|
|
serializedName: "JsonTextConfiguration",
|
|
xmlName: "JsonTextConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "JsonTextConfiguration"
|
|
}
|
|
},
|
|
arrowConfiguration: {
|
|
serializedName: "ArrowConfiguration",
|
|
xmlName: "ArrowConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ArrowConfiguration"
|
|
}
|
|
},
|
|
parquetTextConfiguration: {
|
|
serializedName: "ParquetTextConfiguration",
|
|
xmlName: "ParquetTextConfiguration",
|
|
type: {
|
|
name: "any"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const DelimitedTextConfiguration = {
|
|
serializedName: "DelimitedTextConfiguration",
|
|
xmlName: "DelimitedTextConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "DelimitedTextConfiguration",
|
|
modelProperties: {
|
|
columnSeparator: {
|
|
serializedName: "ColumnSeparator",
|
|
xmlName: "ColumnSeparator",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
fieldQuote: {
|
|
serializedName: "FieldQuote",
|
|
xmlName: "FieldQuote",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
recordSeparator: {
|
|
serializedName: "RecordSeparator",
|
|
xmlName: "RecordSeparator",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
escapeChar: {
|
|
serializedName: "EscapeChar",
|
|
xmlName: "EscapeChar",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
headersPresent: {
|
|
serializedName: "HeadersPresent",
|
|
xmlName: "HasHeaders",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const JsonTextConfiguration = {
|
|
serializedName: "JsonTextConfiguration",
|
|
xmlName: "JsonTextConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "JsonTextConfiguration",
|
|
modelProperties: {
|
|
recordSeparator: {
|
|
serializedName: "RecordSeparator",
|
|
xmlName: "RecordSeparator",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ArrowConfiguration = {
|
|
serializedName: "ArrowConfiguration",
|
|
xmlName: "ArrowConfiguration",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ArrowConfiguration",
|
|
modelProperties: {
|
|
schema: {
|
|
serializedName: "Schema",
|
|
required: true,
|
|
xmlName: "Schema",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "Field",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "ArrowField"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ArrowField = {
|
|
serializedName: "ArrowField",
|
|
xmlName: "Field",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ArrowField",
|
|
modelProperties: {
|
|
type: {
|
|
serializedName: "Type",
|
|
required: true,
|
|
xmlName: "Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
name: {
|
|
serializedName: "Name",
|
|
xmlName: "Name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
precision: {
|
|
serializedName: "Precision",
|
|
xmlName: "Precision",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
scale: {
|
|
serializedName: "Scale",
|
|
xmlName: "Scale",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceSetPropertiesHeaders = {
|
|
serializedName: "Service_setPropertiesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSetPropertiesHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceSetPropertiesExceptionHeaders = {
|
|
serializedName: "Service_setPropertiesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSetPropertiesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetPropertiesHeaders = {
|
|
serializedName: "Service_getPropertiesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetPropertiesHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetPropertiesExceptionHeaders = {
|
|
serializedName: "Service_getPropertiesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetPropertiesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetStatisticsHeaders = {
|
|
serializedName: "Service_getStatisticsHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetStatisticsHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetStatisticsExceptionHeaders = {
|
|
serializedName: "Service_getStatisticsExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetStatisticsExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceListContainersSegmentHeaders = {
|
|
serializedName: "Service_listContainersSegmentHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceListContainersSegmentHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceListContainersSegmentExceptionHeaders = {
|
|
serializedName: "Service_listContainersSegmentExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceListContainersSegmentExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetUserDelegationKeyHeaders = {
|
|
serializedName: "Service_getUserDelegationKeyHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetUserDelegationKeyHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetUserDelegationKeyExceptionHeaders = {
|
|
serializedName: "Service_getUserDelegationKeyExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetUserDelegationKeyExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetAccountInfoHeaders = {
|
|
serializedName: "Service_getAccountInfoHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
xmlName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
xmlName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2",
|
|
"FileStorage",
|
|
"BlockBlobStorage"
|
|
]
|
|
}
|
|
},
|
|
isHierarchicalNamespaceEnabled: {
|
|
serializedName: "x-ms-is-hns-enabled",
|
|
xmlName: "x-ms-is-hns-enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceGetAccountInfoExceptionHeaders = {
|
|
serializedName: "Service_getAccountInfoExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceGetAccountInfoExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceSubmitBatchHeaders = {
|
|
serializedName: "Service_submitBatchHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSubmitBatchHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceSubmitBatchExceptionHeaders = {
|
|
serializedName: "Service_submitBatchExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceSubmitBatchExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceFilterBlobsHeaders = {
|
|
serializedName: "Service_filterBlobsHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceFilterBlobsHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ServiceFilterBlobsExceptionHeaders = {
|
|
serializedName: "Service_filterBlobsExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ServiceFilterBlobsExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerCreateHeaders = {
|
|
serializedName: "Container_createHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerCreateExceptionHeaders = {
|
|
serializedName: "Container_createExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerCreateExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetPropertiesHeaders = {
|
|
serializedName: "Container_getPropertiesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetPropertiesHeaders",
|
|
modelProperties: {
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
xmlName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
xmlName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
xmlName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
xmlName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobPublicAccess: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
xmlName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["container", "blob"]
|
|
}
|
|
},
|
|
hasImmutabilityPolicy: {
|
|
serializedName: "x-ms-has-immutability-policy",
|
|
xmlName: "x-ms-has-immutability-policy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
hasLegalHold: {
|
|
serializedName: "x-ms-has-legal-hold",
|
|
xmlName: "x-ms-has-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
defaultEncryptionScope: {
|
|
serializedName: "x-ms-default-encryption-scope",
|
|
xmlName: "x-ms-default-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
denyEncryptionScopeOverride: {
|
|
serializedName: "x-ms-deny-encryption-scope-override",
|
|
xmlName: "x-ms-deny-encryption-scope-override",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
isImmutableStorageWithVersioningEnabled: {
|
|
serializedName: "x-ms-immutable-storage-with-versioning-enabled",
|
|
xmlName: "x-ms-immutable-storage-with-versioning-enabled",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetPropertiesExceptionHeaders = {
|
|
serializedName: "Container_getPropertiesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetPropertiesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerDeleteHeaders = {
|
|
serializedName: "Container_deleteHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerDeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerDeleteExceptionHeaders = {
|
|
serializedName: "Container_deleteExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerDeleteExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSetMetadataHeaders = {
|
|
serializedName: "Container_setMetadataHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetMetadataHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSetMetadataExceptionHeaders = {
|
|
serializedName: "Container_setMetadataExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetMetadataExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetAccessPolicyHeaders = {
|
|
serializedName: "Container_getAccessPolicyHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccessPolicyHeaders",
|
|
modelProperties: {
|
|
blobPublicAccess: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
xmlName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["container", "blob"]
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetAccessPolicyExceptionHeaders = {
|
|
serializedName: "Container_getAccessPolicyExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccessPolicyExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSetAccessPolicyHeaders = {
|
|
serializedName: "Container_setAccessPolicyHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetAccessPolicyHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSetAccessPolicyExceptionHeaders = {
|
|
serializedName: "Container_setAccessPolicyExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSetAccessPolicyExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRestoreHeaders = {
|
|
serializedName: "Container_restoreHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRestoreHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRestoreExceptionHeaders = {
|
|
serializedName: "Container_restoreExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRestoreExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRenameHeaders = {
|
|
serializedName: "Container_renameHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRenameHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRenameExceptionHeaders = {
|
|
serializedName: "Container_renameExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRenameExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSubmitBatchHeaders = {
|
|
serializedName: "Container_submitBatchHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSubmitBatchHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerSubmitBatchExceptionHeaders = {
|
|
serializedName: "Container_submitBatchExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerSubmitBatchExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerAcquireLeaseHeaders = {
|
|
serializedName: "Container_acquireLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerAcquireLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerAcquireLeaseExceptionHeaders = {
|
|
serializedName: "Container_acquireLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerAcquireLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerReleaseLeaseHeaders = {
|
|
serializedName: "Container_releaseLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerReleaseLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerReleaseLeaseExceptionHeaders = {
|
|
serializedName: "Container_releaseLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerReleaseLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRenewLeaseHeaders = {
|
|
serializedName: "Container_renewLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRenewLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerRenewLeaseExceptionHeaders = {
|
|
serializedName: "Container_renewLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerRenewLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerBreakLeaseHeaders = {
|
|
serializedName: "Container_breakLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerBreakLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseTime: {
|
|
serializedName: "x-ms-lease-time",
|
|
xmlName: "x-ms-lease-time",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerBreakLeaseExceptionHeaders = {
|
|
serializedName: "Container_breakLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerBreakLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerChangeLeaseHeaders = {
|
|
serializedName: "Container_changeLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerChangeLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerChangeLeaseExceptionHeaders = {
|
|
serializedName: "Container_changeLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerChangeLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerListBlobFlatSegmentHeaders = {
|
|
serializedName: "Container_listBlobFlatSegmentHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobFlatSegmentHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerListBlobFlatSegmentExceptionHeaders = {
|
|
serializedName: "Container_listBlobFlatSegmentExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobFlatSegmentExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerListBlobHierarchySegmentHeaders = {
|
|
serializedName: "Container_listBlobHierarchySegmentHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobHierarchySegmentHeaders",
|
|
modelProperties: {
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerListBlobHierarchySegmentExceptionHeaders = {
|
|
serializedName: "Container_listBlobHierarchySegmentExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerListBlobHierarchySegmentExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetAccountInfoHeaders = {
|
|
serializedName: "Container_getAccountInfoHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
xmlName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
xmlName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2",
|
|
"FileStorage",
|
|
"BlockBlobStorage"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const ContainerGetAccountInfoExceptionHeaders = {
|
|
serializedName: "Container_getAccountInfoExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "ContainerGetAccountInfoExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDownloadHeaders = {
|
|
serializedName: "Blob_downloadHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDownloadHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
xmlName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
objectReplicationPolicyId: {
|
|
serializedName: "x-ms-or-policy-id",
|
|
xmlName: "x-ms-or-policy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
objectReplicationRules: {
|
|
serializedName: "x-ms-or",
|
|
xmlName: "x-ms-or",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-or-"
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
xmlName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentRange: {
|
|
serializedName: "content-range",
|
|
xmlName: "content-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "content-encoding",
|
|
xmlName: "content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "cache-control",
|
|
xmlName: "cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "content-disposition",
|
|
xmlName: "content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "content-language",
|
|
xmlName: "content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
blobType: {
|
|
serializedName: "x-ms-blob-type",
|
|
xmlName: "x-ms-blob-type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"]
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
serializedName: "x-ms-copy-completion-time",
|
|
xmlName: "x-ms-copy-completion-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "x-ms-copy-status-description",
|
|
xmlName: "x-ms-copy-status-description",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "x-ms-copy-progress",
|
|
xmlName: "x-ms-copy-progress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "x-ms-copy-source",
|
|
xmlName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
xmlName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
xmlName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
xmlName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
xmlName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
isCurrentVersion: {
|
|
serializedName: "x-ms-is-current-version",
|
|
xmlName: "x-ms-is-current-version",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
acceptRanges: {
|
|
serializedName: "accept-ranges",
|
|
xmlName: "accept-ranges",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
xmlName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-server-encrypted",
|
|
xmlName: "x-ms-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentMD5: {
|
|
serializedName: "x-ms-blob-content-md5",
|
|
xmlName: "x-ms-blob-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
tagCount: {
|
|
serializedName: "x-ms-tag-count",
|
|
xmlName: "x-ms-tag-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isSealed: {
|
|
serializedName: "x-ms-blob-sealed",
|
|
xmlName: "x-ms-blob-sealed",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
lastAccessed: {
|
|
serializedName: "x-ms-last-access-time",
|
|
xmlName: "x-ms-last-access-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyExpiresOn: {
|
|
serializedName: "x-ms-immutability-policy-until-date",
|
|
xmlName: "x-ms-immutability-policy-until-date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyMode: {
|
|
serializedName: "x-ms-immutability-policy-mode",
|
|
xmlName: "x-ms-immutability-policy-mode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["Mutable", "Unlocked", "Locked"]
|
|
}
|
|
},
|
|
legalHold: {
|
|
serializedName: "x-ms-legal-hold",
|
|
xmlName: "x-ms-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDownloadExceptionHeaders = {
|
|
serializedName: "Blob_downloadExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDownloadExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetPropertiesHeaders = {
|
|
serializedName: "Blob_getPropertiesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetPropertiesHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
createdOn: {
|
|
serializedName: "x-ms-creation-time",
|
|
xmlName: "x-ms-creation-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
xmlName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
},
|
|
objectReplicationPolicyId: {
|
|
serializedName: "x-ms-or-policy-id",
|
|
xmlName: "x-ms-or-policy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
objectReplicationRules: {
|
|
serializedName: "x-ms-or",
|
|
xmlName: "x-ms-or",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-or-"
|
|
},
|
|
blobType: {
|
|
serializedName: "x-ms-blob-type",
|
|
xmlName: "x-ms-blob-type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"]
|
|
}
|
|
},
|
|
copyCompletedOn: {
|
|
serializedName: "x-ms-copy-completion-time",
|
|
xmlName: "x-ms-copy-completion-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "x-ms-copy-status-description",
|
|
xmlName: "x-ms-copy-status-description",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "x-ms-copy-progress",
|
|
xmlName: "x-ms-copy-progress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "x-ms-copy-source",
|
|
xmlName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
xmlName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
isIncrementalCopy: {
|
|
serializedName: "x-ms-incremental-copy",
|
|
xmlName: "x-ms-incremental-copy",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
destinationSnapshot: {
|
|
serializedName: "x-ms-copy-destination-snapshot",
|
|
xmlName: "x-ms-copy-destination-snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
xmlName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
xmlName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
xmlName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
xmlName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "content-encoding",
|
|
xmlName: "content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "content-disposition",
|
|
xmlName: "content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "content-language",
|
|
xmlName: "content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "cache-control",
|
|
xmlName: "cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
acceptRanges: {
|
|
serializedName: "accept-ranges",
|
|
xmlName: "accept-ranges",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
xmlName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-server-encrypted",
|
|
xmlName: "x-ms-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTier: {
|
|
serializedName: "x-ms-access-tier",
|
|
xmlName: "x-ms-access-tier",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierInferred: {
|
|
serializedName: "x-ms-access-tier-inferred",
|
|
xmlName: "x-ms-access-tier-inferred",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
archiveStatus: {
|
|
serializedName: "x-ms-archive-status",
|
|
xmlName: "x-ms-archive-status",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
accessTierChangedOn: {
|
|
serializedName: "x-ms-access-tier-change-time",
|
|
xmlName: "x-ms-access-tier-change-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
isCurrentVersion: {
|
|
serializedName: "x-ms-is-current-version",
|
|
xmlName: "x-ms-is-current-version",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
tagCount: {
|
|
serializedName: "x-ms-tag-count",
|
|
xmlName: "x-ms-tag-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
expiresOn: {
|
|
serializedName: "x-ms-expiry-time",
|
|
xmlName: "x-ms-expiry-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isSealed: {
|
|
serializedName: "x-ms-blob-sealed",
|
|
xmlName: "x-ms-blob-sealed",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
rehydratePriority: {
|
|
serializedName: "x-ms-rehydrate-priority",
|
|
xmlName: "x-ms-rehydrate-priority",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["High", "Standard"]
|
|
}
|
|
},
|
|
lastAccessed: {
|
|
serializedName: "x-ms-last-access-time",
|
|
xmlName: "x-ms-last-access-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyExpiresOn: {
|
|
serializedName: "x-ms-immutability-policy-until-date",
|
|
xmlName: "x-ms-immutability-policy-until-date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyMode: {
|
|
serializedName: "x-ms-immutability-policy-mode",
|
|
xmlName: "x-ms-immutability-policy-mode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["Mutable", "Unlocked", "Locked"]
|
|
}
|
|
},
|
|
legalHold: {
|
|
serializedName: "x-ms-legal-hold",
|
|
xmlName: "x-ms-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetPropertiesExceptionHeaders = {
|
|
serializedName: "Blob_getPropertiesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetPropertiesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDeleteHeaders = {
|
|
serializedName: "Blob_deleteHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDeleteExceptionHeaders = {
|
|
serializedName: "Blob_deleteExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDeleteExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobUndeleteHeaders = {
|
|
serializedName: "Blob_undeleteHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobUndeleteHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobUndeleteExceptionHeaders = {
|
|
serializedName: "Blob_undeleteExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobUndeleteExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetExpiryHeaders = {
|
|
serializedName: "Blob_setExpiryHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetExpiryHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetExpiryExceptionHeaders = {
|
|
serializedName: "Blob_setExpiryExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetExpiryExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetHttpHeadersHeaders = {
|
|
serializedName: "Blob_setHttpHeadersHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetHttpHeadersHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetHttpHeadersExceptionHeaders = {
|
|
serializedName: "Blob_setHttpHeadersExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetHttpHeadersExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetImmutabilityPolicyHeaders = {
|
|
serializedName: "Blob_setImmutabilityPolicyHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetImmutabilityPolicyHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyExpiry: {
|
|
serializedName: "x-ms-immutability-policy-until-date",
|
|
xmlName: "x-ms-immutability-policy-until-date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
immutabilityPolicyMode: {
|
|
serializedName: "x-ms-immutability-policy-mode",
|
|
xmlName: "x-ms-immutability-policy-mode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["Mutable", "Unlocked", "Locked"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetImmutabilityPolicyExceptionHeaders = {
|
|
serializedName: "Blob_setImmutabilityPolicyExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetImmutabilityPolicyExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDeleteImmutabilityPolicyHeaders = {
|
|
serializedName: "Blob_deleteImmutabilityPolicyHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDeleteImmutabilityPolicyHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobDeleteImmutabilityPolicyExceptionHeaders = {
|
|
serializedName: "Blob_deleteImmutabilityPolicyExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobDeleteImmutabilityPolicyExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetLegalHoldHeaders = {
|
|
serializedName: "Blob_setLegalHoldHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetLegalHoldHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
legalHold: {
|
|
serializedName: "x-ms-legal-hold",
|
|
xmlName: "x-ms-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetLegalHoldExceptionHeaders = {
|
|
serializedName: "Blob_setLegalHoldExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetLegalHoldExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetMetadataHeaders = {
|
|
serializedName: "Blob_setMetadataHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetMetadataHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetMetadataExceptionHeaders = {
|
|
serializedName: "Blob_setMetadataExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetMetadataExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobAcquireLeaseHeaders = {
|
|
serializedName: "Blob_acquireLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAcquireLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobAcquireLeaseExceptionHeaders = {
|
|
serializedName: "Blob_acquireLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAcquireLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobReleaseLeaseHeaders = {
|
|
serializedName: "Blob_releaseLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobReleaseLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobReleaseLeaseExceptionHeaders = {
|
|
serializedName: "Blob_releaseLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobReleaseLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobRenewLeaseHeaders = {
|
|
serializedName: "Blob_renewLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobRenewLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobRenewLeaseExceptionHeaders = {
|
|
serializedName: "Blob_renewLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobRenewLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobChangeLeaseHeaders = {
|
|
serializedName: "Blob_changeLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobChangeLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
leaseId: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobChangeLeaseExceptionHeaders = {
|
|
serializedName: "Blob_changeLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobChangeLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobBreakLeaseHeaders = {
|
|
serializedName: "Blob_breakLeaseHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobBreakLeaseHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
leaseTime: {
|
|
serializedName: "x-ms-lease-time",
|
|
xmlName: "x-ms-lease-time",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobBreakLeaseExceptionHeaders = {
|
|
serializedName: "Blob_breakLeaseExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobBreakLeaseExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobCreateSnapshotHeaders = {
|
|
serializedName: "Blob_createSnapshotHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCreateSnapshotHeaders",
|
|
modelProperties: {
|
|
snapshot: {
|
|
serializedName: "x-ms-snapshot",
|
|
xmlName: "x-ms-snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobCreateSnapshotExceptionHeaders = {
|
|
serializedName: "Blob_createSnapshotExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCreateSnapshotExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobStartCopyFromURLHeaders = {
|
|
serializedName: "Blob_startCopyFromURLHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobStartCopyFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
xmlName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobStartCopyFromURLExceptionHeaders = {
|
|
serializedName: "Blob_startCopyFromURLExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobStartCopyFromURLExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobCopyFromURLHeaders = {
|
|
serializedName: "Blob_copyFromURLHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCopyFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
defaultValue: "success",
|
|
isConstant: true,
|
|
serializedName: "x-ms-copy-status",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobCopyFromURLExceptionHeaders = {
|
|
serializedName: "Blob_copyFromURLExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobCopyFromURLExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobAbortCopyFromURLHeaders = {
|
|
serializedName: "Blob_abortCopyFromURLHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAbortCopyFromURLHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobAbortCopyFromURLExceptionHeaders = {
|
|
serializedName: "Blob_abortCopyFromURLExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobAbortCopyFromURLExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetTierHeaders = {
|
|
serializedName: "Blob_setTierHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetTierHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetTierExceptionHeaders = {
|
|
serializedName: "Blob_setTierExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetTierExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetAccountInfoHeaders = {
|
|
serializedName: "Blob_getAccountInfoHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetAccountInfoHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
skuName: {
|
|
serializedName: "x-ms-sku-name",
|
|
xmlName: "x-ms-sku-name",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Standard_LRS",
|
|
"Standard_GRS",
|
|
"Standard_RAGRS",
|
|
"Standard_ZRS",
|
|
"Premium_LRS"
|
|
]
|
|
}
|
|
},
|
|
accountKind: {
|
|
serializedName: "x-ms-account-kind",
|
|
xmlName: "x-ms-account-kind",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"Storage",
|
|
"BlobStorage",
|
|
"StorageV2",
|
|
"FileStorage",
|
|
"BlockBlobStorage"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetAccountInfoExceptionHeaders = {
|
|
serializedName: "Blob_getAccountInfoExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetAccountInfoExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobQueryHeaders = {
|
|
serializedName: "Blob_queryHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobQueryHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
metadata: {
|
|
serializedName: "x-ms-meta",
|
|
xmlName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
}
|
|
},
|
|
contentLength: {
|
|
serializedName: "content-length",
|
|
xmlName: "content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentRange: {
|
|
serializedName: "content-range",
|
|
xmlName: "content-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
contentEncoding: {
|
|
serializedName: "content-encoding",
|
|
xmlName: "content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
cacheControl: {
|
|
serializedName: "cache-control",
|
|
xmlName: "cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentDisposition: {
|
|
serializedName: "content-disposition",
|
|
xmlName: "content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentLanguage: {
|
|
serializedName: "content-language",
|
|
xmlName: "content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
blobType: {
|
|
serializedName: "x-ms-blob-type",
|
|
xmlName: "x-ms-blob-type",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"]
|
|
}
|
|
},
|
|
copyCompletionTime: {
|
|
serializedName: "x-ms-copy-completion-time",
|
|
xmlName: "x-ms-copy-completion-time",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyStatusDescription: {
|
|
serializedName: "x-ms-copy-status-description",
|
|
xmlName: "x-ms-copy-status-description",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyProgress: {
|
|
serializedName: "x-ms-copy-progress",
|
|
xmlName: "x-ms-copy-progress",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copySource: {
|
|
serializedName: "x-ms-copy-source",
|
|
xmlName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
xmlName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
leaseDuration: {
|
|
serializedName: "x-ms-lease-duration",
|
|
xmlName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["infinite", "fixed"]
|
|
}
|
|
},
|
|
leaseState: {
|
|
serializedName: "x-ms-lease-state",
|
|
xmlName: "x-ms-lease-state",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"available",
|
|
"leased",
|
|
"expired",
|
|
"breaking",
|
|
"broken"
|
|
]
|
|
}
|
|
},
|
|
leaseStatus: {
|
|
serializedName: "x-ms-lease-status",
|
|
xmlName: "x-ms-lease-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["locked", "unlocked"]
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
acceptRanges: {
|
|
serializedName: "accept-ranges",
|
|
xmlName: "accept-ranges",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
xmlName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-server-encrypted",
|
|
xmlName: "x-ms-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentMD5: {
|
|
serializedName: "x-ms-blob-content-md5",
|
|
xmlName: "x-ms-blob-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobQueryExceptionHeaders = {
|
|
serializedName: "Blob_queryExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobQueryExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetTagsHeaders = {
|
|
serializedName: "Blob_getTagsHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetTagsHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobGetTagsExceptionHeaders = {
|
|
serializedName: "Blob_getTagsExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobGetTagsExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetTagsHeaders = {
|
|
serializedName: "Blob_setTagsHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetTagsHeaders",
|
|
modelProperties: {
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlobSetTagsExceptionHeaders = {
|
|
serializedName: "Blob_setTagsExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlobSetTagsExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobCreateHeaders = {
|
|
serializedName: "PageBlob_createHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobCreateExceptionHeaders = {
|
|
serializedName: "PageBlob_createExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCreateExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUploadPagesHeaders = {
|
|
serializedName: "PageBlob_uploadPagesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUploadPagesExceptionHeaders = {
|
|
serializedName: "PageBlob_uploadPagesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobClearPagesHeaders = {
|
|
serializedName: "PageBlob_clearPagesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobClearPagesHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobClearPagesExceptionHeaders = {
|
|
serializedName: "PageBlob_clearPagesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobClearPagesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUploadPagesFromURLHeaders = {
|
|
serializedName: "PageBlob_uploadPagesFromURLHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesFromURLHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUploadPagesFromURLExceptionHeaders = {
|
|
serializedName: "PageBlob_uploadPagesFromURLExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUploadPagesFromURLExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobGetPageRangesHeaders = {
|
|
serializedName: "PageBlob_getPageRangesHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
xmlName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobGetPageRangesExceptionHeaders = {
|
|
serializedName: "PageBlob_getPageRangesExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobGetPageRangesDiffHeaders = {
|
|
serializedName: "PageBlob_getPageRangesDiffHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesDiffHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
xmlName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobGetPageRangesDiffExceptionHeaders = {
|
|
serializedName: "PageBlob_getPageRangesDiffExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobGetPageRangesDiffExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobResizeHeaders = {
|
|
serializedName: "PageBlob_resizeHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobResizeHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobResizeExceptionHeaders = {
|
|
serializedName: "PageBlob_resizeExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobResizeExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUpdateSequenceNumberHeaders = {
|
|
serializedName: "PageBlob_updateSequenceNumberHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUpdateSequenceNumberHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobSequenceNumber: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobUpdateSequenceNumberExceptionHeaders = {
|
|
serializedName: "PageBlob_updateSequenceNumberExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobUpdateSequenceNumberExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobCopyIncrementalHeaders = {
|
|
serializedName: "PageBlob_copyIncrementalHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCopyIncrementalHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
copyId: {
|
|
serializedName: "x-ms-copy-id",
|
|
xmlName: "x-ms-copy-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
copyStatus: {
|
|
serializedName: "x-ms-copy-status",
|
|
xmlName: "x-ms-copy-status",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["pending", "success", "aborted", "failed"]
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const PageBlobCopyIncrementalExceptionHeaders = {
|
|
serializedName: "PageBlob_copyIncrementalExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "PageBlobCopyIncrementalExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobCreateHeaders = {
|
|
serializedName: "AppendBlob_createHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobCreateHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobCreateExceptionHeaders = {
|
|
serializedName: "AppendBlob_createExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobCreateExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobAppendBlockHeaders = {
|
|
serializedName: "AppendBlob_appendBlockHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobAppendOffset: {
|
|
serializedName: "x-ms-blob-append-offset",
|
|
xmlName: "x-ms-blob-append-offset",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
xmlName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobAppendBlockExceptionHeaders = {
|
|
serializedName: "AppendBlob_appendBlockExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobAppendBlockFromUrlHeaders = {
|
|
serializedName: "AppendBlob_appendBlockFromUrlHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockFromUrlHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
blobAppendOffset: {
|
|
serializedName: "x-ms-blob-append-offset",
|
|
xmlName: "x-ms-blob-append-offset",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobCommittedBlockCount: {
|
|
serializedName: "x-ms-blob-committed-block-count",
|
|
xmlName: "x-ms-blob-committed-block-count",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobAppendBlockFromUrlExceptionHeaders = {
|
|
serializedName: "AppendBlob_appendBlockFromUrlExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobAppendBlockFromUrlExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobSealHeaders = {
|
|
serializedName: "AppendBlob_sealHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobSealHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isSealed: {
|
|
serializedName: "x-ms-blob-sealed",
|
|
xmlName: "x-ms-blob-sealed",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const AppendBlobSealExceptionHeaders = {
|
|
serializedName: "AppendBlob_sealExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "AppendBlobSealExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobUploadHeaders = {
|
|
serializedName: "BlockBlob_uploadHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobUploadHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobUploadExceptionHeaders = {
|
|
serializedName: "BlockBlob_uploadExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobUploadExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobPutBlobFromUrlHeaders = {
|
|
serializedName: "BlockBlob_putBlobFromUrlHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobPutBlobFromUrlHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobPutBlobFromUrlExceptionHeaders = {
|
|
serializedName: "BlockBlob_putBlobFromUrlExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobPutBlobFromUrlExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobStageBlockHeaders = {
|
|
serializedName: "BlockBlob_stageBlockHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockHeaders",
|
|
modelProperties: {
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobStageBlockExceptionHeaders = {
|
|
serializedName: "BlockBlob_stageBlockExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobStageBlockFromURLHeaders = {
|
|
serializedName: "BlockBlob_stageBlockFromURLHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockFromURLHeaders",
|
|
modelProperties: {
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobStageBlockFromURLExceptionHeaders = {
|
|
serializedName: "BlockBlob_stageBlockFromURLExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobStageBlockFromURLExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobCommitBlockListHeaders = {
|
|
serializedName: "BlockBlob_commitBlockListHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobCommitBlockListHeaders",
|
|
modelProperties: {
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
contentMD5: {
|
|
serializedName: "content-md5",
|
|
xmlName: "content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
xMsContentCrc64: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
versionId: {
|
|
serializedName: "x-ms-version-id",
|
|
xmlName: "x-ms-version-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
isServerEncrypted: {
|
|
serializedName: "x-ms-request-server-encrypted",
|
|
xmlName: "x-ms-request-server-encrypted",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
},
|
|
encryptionKeySha256: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
encryptionScope: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobCommitBlockListExceptionHeaders = {
|
|
serializedName: "BlockBlob_commitBlockListExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobCommitBlockListExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobGetBlockListHeaders = {
|
|
serializedName: "BlockBlob_getBlockListHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobGetBlockListHeaders",
|
|
modelProperties: {
|
|
lastModified: {
|
|
serializedName: "last-modified",
|
|
xmlName: "last-modified",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
etag: {
|
|
serializedName: "etag",
|
|
xmlName: "etag",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
contentType: {
|
|
serializedName: "content-type",
|
|
xmlName: "content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
blobContentLength: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
xmlName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
},
|
|
clientRequestId: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
requestId: {
|
|
serializedName: "x-ms-request-id",
|
|
xmlName: "x-ms-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
version: {
|
|
serializedName: "x-ms-version",
|
|
xmlName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
date: {
|
|
serializedName: "date",
|
|
xmlName: "date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
},
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const BlockBlobGetBlockListExceptionHeaders = {
|
|
serializedName: "BlockBlob_getBlockListExceptionHeaders",
|
|
type: {
|
|
name: "Composite",
|
|
className: "BlockBlobGetBlockListExceptionHeaders",
|
|
modelProperties: {
|
|
errorCode: {
|
|
serializedName: "x-ms-error-code",
|
|
xmlName: "x-ms-error-code",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var Mappers = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
BlobServiceProperties: BlobServiceProperties,
|
|
Logging: Logging,
|
|
RetentionPolicy: RetentionPolicy,
|
|
Metrics: Metrics,
|
|
CorsRule: CorsRule,
|
|
StaticWebsite: StaticWebsite,
|
|
StorageError: StorageError,
|
|
BlobServiceStatistics: BlobServiceStatistics,
|
|
GeoReplication: GeoReplication,
|
|
ListContainersSegmentResponse: ListContainersSegmentResponse,
|
|
ContainerItem: ContainerItem,
|
|
ContainerProperties: ContainerProperties,
|
|
KeyInfo: KeyInfo,
|
|
UserDelegationKey: UserDelegationKey,
|
|
FilterBlobSegment: FilterBlobSegment,
|
|
FilterBlobItem: FilterBlobItem,
|
|
BlobTags: BlobTags,
|
|
BlobTag: BlobTag,
|
|
SignedIdentifier: SignedIdentifier,
|
|
AccessPolicy: AccessPolicy,
|
|
ListBlobsFlatSegmentResponse: ListBlobsFlatSegmentResponse,
|
|
BlobFlatListSegment: BlobFlatListSegment,
|
|
BlobItemInternal: BlobItemInternal,
|
|
BlobPropertiesInternal: BlobPropertiesInternal,
|
|
ListBlobsHierarchySegmentResponse: ListBlobsHierarchySegmentResponse,
|
|
BlobHierarchyListSegment: BlobHierarchyListSegment,
|
|
BlobPrefix: BlobPrefix,
|
|
BlockLookupList: BlockLookupList,
|
|
BlockList: BlockList,
|
|
Block: Block,
|
|
PageList: PageList,
|
|
PageRange: PageRange,
|
|
ClearRange: ClearRange,
|
|
QueryRequest: QueryRequest,
|
|
QuerySerialization: QuerySerialization,
|
|
QueryFormat: QueryFormat,
|
|
DelimitedTextConfiguration: DelimitedTextConfiguration,
|
|
JsonTextConfiguration: JsonTextConfiguration,
|
|
ArrowConfiguration: ArrowConfiguration,
|
|
ArrowField: ArrowField,
|
|
ServiceSetPropertiesHeaders: ServiceSetPropertiesHeaders,
|
|
ServiceSetPropertiesExceptionHeaders: ServiceSetPropertiesExceptionHeaders,
|
|
ServiceGetPropertiesHeaders: ServiceGetPropertiesHeaders,
|
|
ServiceGetPropertiesExceptionHeaders: ServiceGetPropertiesExceptionHeaders,
|
|
ServiceGetStatisticsHeaders: ServiceGetStatisticsHeaders,
|
|
ServiceGetStatisticsExceptionHeaders: ServiceGetStatisticsExceptionHeaders,
|
|
ServiceListContainersSegmentHeaders: ServiceListContainersSegmentHeaders,
|
|
ServiceListContainersSegmentExceptionHeaders: ServiceListContainersSegmentExceptionHeaders,
|
|
ServiceGetUserDelegationKeyHeaders: ServiceGetUserDelegationKeyHeaders,
|
|
ServiceGetUserDelegationKeyExceptionHeaders: ServiceGetUserDelegationKeyExceptionHeaders,
|
|
ServiceGetAccountInfoHeaders: ServiceGetAccountInfoHeaders,
|
|
ServiceGetAccountInfoExceptionHeaders: ServiceGetAccountInfoExceptionHeaders,
|
|
ServiceSubmitBatchHeaders: ServiceSubmitBatchHeaders,
|
|
ServiceSubmitBatchExceptionHeaders: ServiceSubmitBatchExceptionHeaders,
|
|
ServiceFilterBlobsHeaders: ServiceFilterBlobsHeaders,
|
|
ServiceFilterBlobsExceptionHeaders: ServiceFilterBlobsExceptionHeaders,
|
|
ContainerCreateHeaders: ContainerCreateHeaders,
|
|
ContainerCreateExceptionHeaders: ContainerCreateExceptionHeaders,
|
|
ContainerGetPropertiesHeaders: ContainerGetPropertiesHeaders,
|
|
ContainerGetPropertiesExceptionHeaders: ContainerGetPropertiesExceptionHeaders,
|
|
ContainerDeleteHeaders: ContainerDeleteHeaders,
|
|
ContainerDeleteExceptionHeaders: ContainerDeleteExceptionHeaders,
|
|
ContainerSetMetadataHeaders: ContainerSetMetadataHeaders,
|
|
ContainerSetMetadataExceptionHeaders: ContainerSetMetadataExceptionHeaders,
|
|
ContainerGetAccessPolicyHeaders: ContainerGetAccessPolicyHeaders,
|
|
ContainerGetAccessPolicyExceptionHeaders: ContainerGetAccessPolicyExceptionHeaders,
|
|
ContainerSetAccessPolicyHeaders: ContainerSetAccessPolicyHeaders,
|
|
ContainerSetAccessPolicyExceptionHeaders: ContainerSetAccessPolicyExceptionHeaders,
|
|
ContainerRestoreHeaders: ContainerRestoreHeaders,
|
|
ContainerRestoreExceptionHeaders: ContainerRestoreExceptionHeaders,
|
|
ContainerRenameHeaders: ContainerRenameHeaders,
|
|
ContainerRenameExceptionHeaders: ContainerRenameExceptionHeaders,
|
|
ContainerSubmitBatchHeaders: ContainerSubmitBatchHeaders,
|
|
ContainerSubmitBatchExceptionHeaders: ContainerSubmitBatchExceptionHeaders,
|
|
ContainerAcquireLeaseHeaders: ContainerAcquireLeaseHeaders,
|
|
ContainerAcquireLeaseExceptionHeaders: ContainerAcquireLeaseExceptionHeaders,
|
|
ContainerReleaseLeaseHeaders: ContainerReleaseLeaseHeaders,
|
|
ContainerReleaseLeaseExceptionHeaders: ContainerReleaseLeaseExceptionHeaders,
|
|
ContainerRenewLeaseHeaders: ContainerRenewLeaseHeaders,
|
|
ContainerRenewLeaseExceptionHeaders: ContainerRenewLeaseExceptionHeaders,
|
|
ContainerBreakLeaseHeaders: ContainerBreakLeaseHeaders,
|
|
ContainerBreakLeaseExceptionHeaders: ContainerBreakLeaseExceptionHeaders,
|
|
ContainerChangeLeaseHeaders: ContainerChangeLeaseHeaders,
|
|
ContainerChangeLeaseExceptionHeaders: ContainerChangeLeaseExceptionHeaders,
|
|
ContainerListBlobFlatSegmentHeaders: ContainerListBlobFlatSegmentHeaders,
|
|
ContainerListBlobFlatSegmentExceptionHeaders: ContainerListBlobFlatSegmentExceptionHeaders,
|
|
ContainerListBlobHierarchySegmentHeaders: ContainerListBlobHierarchySegmentHeaders,
|
|
ContainerListBlobHierarchySegmentExceptionHeaders: ContainerListBlobHierarchySegmentExceptionHeaders,
|
|
ContainerGetAccountInfoHeaders: ContainerGetAccountInfoHeaders,
|
|
ContainerGetAccountInfoExceptionHeaders: ContainerGetAccountInfoExceptionHeaders,
|
|
BlobDownloadHeaders: BlobDownloadHeaders,
|
|
BlobDownloadExceptionHeaders: BlobDownloadExceptionHeaders,
|
|
BlobGetPropertiesHeaders: BlobGetPropertiesHeaders,
|
|
BlobGetPropertiesExceptionHeaders: BlobGetPropertiesExceptionHeaders,
|
|
BlobDeleteHeaders: BlobDeleteHeaders,
|
|
BlobDeleteExceptionHeaders: BlobDeleteExceptionHeaders,
|
|
BlobUndeleteHeaders: BlobUndeleteHeaders,
|
|
BlobUndeleteExceptionHeaders: BlobUndeleteExceptionHeaders,
|
|
BlobSetExpiryHeaders: BlobSetExpiryHeaders,
|
|
BlobSetExpiryExceptionHeaders: BlobSetExpiryExceptionHeaders,
|
|
BlobSetHttpHeadersHeaders: BlobSetHttpHeadersHeaders,
|
|
BlobSetHttpHeadersExceptionHeaders: BlobSetHttpHeadersExceptionHeaders,
|
|
BlobSetImmutabilityPolicyHeaders: BlobSetImmutabilityPolicyHeaders,
|
|
BlobSetImmutabilityPolicyExceptionHeaders: BlobSetImmutabilityPolicyExceptionHeaders,
|
|
BlobDeleteImmutabilityPolicyHeaders: BlobDeleteImmutabilityPolicyHeaders,
|
|
BlobDeleteImmutabilityPolicyExceptionHeaders: BlobDeleteImmutabilityPolicyExceptionHeaders,
|
|
BlobSetLegalHoldHeaders: BlobSetLegalHoldHeaders,
|
|
BlobSetLegalHoldExceptionHeaders: BlobSetLegalHoldExceptionHeaders,
|
|
BlobSetMetadataHeaders: BlobSetMetadataHeaders,
|
|
BlobSetMetadataExceptionHeaders: BlobSetMetadataExceptionHeaders,
|
|
BlobAcquireLeaseHeaders: BlobAcquireLeaseHeaders,
|
|
BlobAcquireLeaseExceptionHeaders: BlobAcquireLeaseExceptionHeaders,
|
|
BlobReleaseLeaseHeaders: BlobReleaseLeaseHeaders,
|
|
BlobReleaseLeaseExceptionHeaders: BlobReleaseLeaseExceptionHeaders,
|
|
BlobRenewLeaseHeaders: BlobRenewLeaseHeaders,
|
|
BlobRenewLeaseExceptionHeaders: BlobRenewLeaseExceptionHeaders,
|
|
BlobChangeLeaseHeaders: BlobChangeLeaseHeaders,
|
|
BlobChangeLeaseExceptionHeaders: BlobChangeLeaseExceptionHeaders,
|
|
BlobBreakLeaseHeaders: BlobBreakLeaseHeaders,
|
|
BlobBreakLeaseExceptionHeaders: BlobBreakLeaseExceptionHeaders,
|
|
BlobCreateSnapshotHeaders: BlobCreateSnapshotHeaders,
|
|
BlobCreateSnapshotExceptionHeaders: BlobCreateSnapshotExceptionHeaders,
|
|
BlobStartCopyFromURLHeaders: BlobStartCopyFromURLHeaders,
|
|
BlobStartCopyFromURLExceptionHeaders: BlobStartCopyFromURLExceptionHeaders,
|
|
BlobCopyFromURLHeaders: BlobCopyFromURLHeaders,
|
|
BlobCopyFromURLExceptionHeaders: BlobCopyFromURLExceptionHeaders,
|
|
BlobAbortCopyFromURLHeaders: BlobAbortCopyFromURLHeaders,
|
|
BlobAbortCopyFromURLExceptionHeaders: BlobAbortCopyFromURLExceptionHeaders,
|
|
BlobSetTierHeaders: BlobSetTierHeaders,
|
|
BlobSetTierExceptionHeaders: BlobSetTierExceptionHeaders,
|
|
BlobGetAccountInfoHeaders: BlobGetAccountInfoHeaders,
|
|
BlobGetAccountInfoExceptionHeaders: BlobGetAccountInfoExceptionHeaders,
|
|
BlobQueryHeaders: BlobQueryHeaders,
|
|
BlobQueryExceptionHeaders: BlobQueryExceptionHeaders,
|
|
BlobGetTagsHeaders: BlobGetTagsHeaders,
|
|
BlobGetTagsExceptionHeaders: BlobGetTagsExceptionHeaders,
|
|
BlobSetTagsHeaders: BlobSetTagsHeaders,
|
|
BlobSetTagsExceptionHeaders: BlobSetTagsExceptionHeaders,
|
|
PageBlobCreateHeaders: PageBlobCreateHeaders,
|
|
PageBlobCreateExceptionHeaders: PageBlobCreateExceptionHeaders,
|
|
PageBlobUploadPagesHeaders: PageBlobUploadPagesHeaders,
|
|
PageBlobUploadPagesExceptionHeaders: PageBlobUploadPagesExceptionHeaders,
|
|
PageBlobClearPagesHeaders: PageBlobClearPagesHeaders,
|
|
PageBlobClearPagesExceptionHeaders: PageBlobClearPagesExceptionHeaders,
|
|
PageBlobUploadPagesFromURLHeaders: PageBlobUploadPagesFromURLHeaders,
|
|
PageBlobUploadPagesFromURLExceptionHeaders: PageBlobUploadPagesFromURLExceptionHeaders,
|
|
PageBlobGetPageRangesHeaders: PageBlobGetPageRangesHeaders,
|
|
PageBlobGetPageRangesExceptionHeaders: PageBlobGetPageRangesExceptionHeaders,
|
|
PageBlobGetPageRangesDiffHeaders: PageBlobGetPageRangesDiffHeaders,
|
|
PageBlobGetPageRangesDiffExceptionHeaders: PageBlobGetPageRangesDiffExceptionHeaders,
|
|
PageBlobResizeHeaders: PageBlobResizeHeaders,
|
|
PageBlobResizeExceptionHeaders: PageBlobResizeExceptionHeaders,
|
|
PageBlobUpdateSequenceNumberHeaders: PageBlobUpdateSequenceNumberHeaders,
|
|
PageBlobUpdateSequenceNumberExceptionHeaders: PageBlobUpdateSequenceNumberExceptionHeaders,
|
|
PageBlobCopyIncrementalHeaders: PageBlobCopyIncrementalHeaders,
|
|
PageBlobCopyIncrementalExceptionHeaders: PageBlobCopyIncrementalExceptionHeaders,
|
|
AppendBlobCreateHeaders: AppendBlobCreateHeaders,
|
|
AppendBlobCreateExceptionHeaders: AppendBlobCreateExceptionHeaders,
|
|
AppendBlobAppendBlockHeaders: AppendBlobAppendBlockHeaders,
|
|
AppendBlobAppendBlockExceptionHeaders: AppendBlobAppendBlockExceptionHeaders,
|
|
AppendBlobAppendBlockFromUrlHeaders: AppendBlobAppendBlockFromUrlHeaders,
|
|
AppendBlobAppendBlockFromUrlExceptionHeaders: AppendBlobAppendBlockFromUrlExceptionHeaders,
|
|
AppendBlobSealHeaders: AppendBlobSealHeaders,
|
|
AppendBlobSealExceptionHeaders: AppendBlobSealExceptionHeaders,
|
|
BlockBlobUploadHeaders: BlockBlobUploadHeaders,
|
|
BlockBlobUploadExceptionHeaders: BlockBlobUploadExceptionHeaders,
|
|
BlockBlobPutBlobFromUrlHeaders: BlockBlobPutBlobFromUrlHeaders,
|
|
BlockBlobPutBlobFromUrlExceptionHeaders: BlockBlobPutBlobFromUrlExceptionHeaders,
|
|
BlockBlobStageBlockHeaders: BlockBlobStageBlockHeaders,
|
|
BlockBlobStageBlockExceptionHeaders: BlockBlobStageBlockExceptionHeaders,
|
|
BlockBlobStageBlockFromURLHeaders: BlockBlobStageBlockFromURLHeaders,
|
|
BlockBlobStageBlockFromURLExceptionHeaders: BlockBlobStageBlockFromURLExceptionHeaders,
|
|
BlockBlobCommitBlockListHeaders: BlockBlobCommitBlockListHeaders,
|
|
BlockBlobCommitBlockListExceptionHeaders: BlockBlobCommitBlockListExceptionHeaders,
|
|
BlockBlobGetBlockListHeaders: BlockBlobGetBlockListHeaders,
|
|
BlockBlobGetBlockListExceptionHeaders: BlockBlobGetBlockListExceptionHeaders
|
|
});
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
const contentType = {
|
|
parameterPath: ["options", "contentType"],
|
|
mapper: {
|
|
defaultValue: "application/xml",
|
|
isConstant: true,
|
|
serializedName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobServiceProperties = {
|
|
parameterPath: "blobServiceProperties",
|
|
mapper: BlobServiceProperties
|
|
};
|
|
const accept = {
|
|
parameterPath: "accept",
|
|
mapper: {
|
|
defaultValue: "application/xml",
|
|
isConstant: true,
|
|
serializedName: "Accept",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const url = {
|
|
parameterPath: "url",
|
|
mapper: {
|
|
serializedName: "url",
|
|
required: true,
|
|
xmlName: "url",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
},
|
|
skipEncoding: true
|
|
};
|
|
const restype = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
defaultValue: "service",
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "properties",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const timeoutInSeconds = {
|
|
parameterPath: ["options", "timeoutInSeconds"],
|
|
mapper: {
|
|
constraints: {
|
|
InclusiveMinimum: 0
|
|
},
|
|
serializedName: "timeout",
|
|
xmlName: "timeout",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const version = {
|
|
parameterPath: "version",
|
|
mapper: {
|
|
defaultValue: "2020-10-02",
|
|
isConstant: true,
|
|
serializedName: "x-ms-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const requestId = {
|
|
parameterPath: ["options", "requestId"],
|
|
mapper: {
|
|
serializedName: "x-ms-client-request-id",
|
|
xmlName: "x-ms-client-request-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const accept1 = {
|
|
parameterPath: "accept",
|
|
mapper: {
|
|
defaultValue: "application/xml",
|
|
isConstant: true,
|
|
serializedName: "Accept",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp1 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "stats",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp2 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "list",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const prefix = {
|
|
parameterPath: ["options", "prefix"],
|
|
mapper: {
|
|
serializedName: "prefix",
|
|
xmlName: "prefix",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const marker = {
|
|
parameterPath: ["options", "marker"],
|
|
mapper: {
|
|
serializedName: "marker",
|
|
xmlName: "marker",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const maxPageSize = {
|
|
parameterPath: ["options", "maxPageSize"],
|
|
mapper: {
|
|
constraints: {
|
|
InclusiveMinimum: 1
|
|
},
|
|
serializedName: "maxresults",
|
|
xmlName: "maxresults",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const include = {
|
|
parameterPath: ["options", "include"],
|
|
mapper: {
|
|
serializedName: "include",
|
|
xmlName: "include",
|
|
xmlElementName: "ListContainersIncludeType",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["metadata", "deleted"]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
collectionFormat: coreHttp.QueryCollectionFormat.Csv
|
|
};
|
|
const keyInfo = {
|
|
parameterPath: "keyInfo",
|
|
mapper: KeyInfo
|
|
};
|
|
const comp3 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "userdelegationkey",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const restype1 = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
defaultValue: "account",
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const body = {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
serializedName: "body",
|
|
required: true,
|
|
xmlName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
};
|
|
const comp4 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "batch",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const contentLength = {
|
|
parameterPath: "contentLength",
|
|
mapper: {
|
|
serializedName: "Content-Length",
|
|
required: true,
|
|
xmlName: "Content-Length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const multipartContentType = {
|
|
parameterPath: "multipartContentType",
|
|
mapper: {
|
|
serializedName: "Content-Type",
|
|
required: true,
|
|
xmlName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp5 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "blobs",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const where = {
|
|
parameterPath: ["options", "where"],
|
|
mapper: {
|
|
serializedName: "where",
|
|
xmlName: "where",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const restype2 = {
|
|
parameterPath: "restype",
|
|
mapper: {
|
|
defaultValue: "container",
|
|
isConstant: true,
|
|
serializedName: "restype",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const metadata = {
|
|
parameterPath: ["options", "metadata"],
|
|
mapper: {
|
|
serializedName: "x-ms-meta",
|
|
xmlName: "x-ms-meta",
|
|
type: {
|
|
name: "Dictionary",
|
|
value: { type: { name: "String" } }
|
|
},
|
|
headerCollectionPrefix: "x-ms-meta-"
|
|
}
|
|
};
|
|
const access = {
|
|
parameterPath: ["options", "access"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-public-access",
|
|
xmlName: "x-ms-blob-public-access",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["container", "blob"]
|
|
}
|
|
}
|
|
};
|
|
const defaultEncryptionScope = {
|
|
parameterPath: [
|
|
"options",
|
|
"containerEncryptionScope",
|
|
"defaultEncryptionScope"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-default-encryption-scope",
|
|
xmlName: "x-ms-default-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const preventEncryptionScopeOverride = {
|
|
parameterPath: [
|
|
"options",
|
|
"containerEncryptionScope",
|
|
"preventEncryptionScopeOverride"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-deny-encryption-scope-override",
|
|
xmlName: "x-ms-deny-encryption-scope-override",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const leaseId = {
|
|
parameterPath: ["options", "leaseAccessConditions", "leaseId"],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-id",
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const ifModifiedSince = {
|
|
parameterPath: ["options", "modifiedAccessConditions", "ifModifiedSince"],
|
|
mapper: {
|
|
serializedName: "If-Modified-Since",
|
|
xmlName: "If-Modified-Since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
const ifUnmodifiedSince = {
|
|
parameterPath: ["options", "modifiedAccessConditions", "ifUnmodifiedSince"],
|
|
mapper: {
|
|
serializedName: "If-Unmodified-Since",
|
|
xmlName: "If-Unmodified-Since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
const comp6 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "metadata",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp7 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "acl",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const containerAcl = {
|
|
parameterPath: ["options", "containerAcl"],
|
|
mapper: {
|
|
serializedName: "containerAcl",
|
|
xmlName: "SignedIdentifiers",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "SignedIdentifier",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Composite",
|
|
className: "SignedIdentifier"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
const comp8 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "undelete",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const deletedContainerName = {
|
|
parameterPath: ["options", "deletedContainerName"],
|
|
mapper: {
|
|
serializedName: "x-ms-deleted-container-name",
|
|
xmlName: "x-ms-deleted-container-name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const deletedContainerVersion = {
|
|
parameterPath: ["options", "deletedContainerVersion"],
|
|
mapper: {
|
|
serializedName: "x-ms-deleted-container-version",
|
|
xmlName: "x-ms-deleted-container-version",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp9 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "rename",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceContainerName = {
|
|
parameterPath: "sourceContainerName",
|
|
mapper: {
|
|
serializedName: "x-ms-source-container-name",
|
|
required: true,
|
|
xmlName: "x-ms-source-container-name",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceLeaseId = {
|
|
parameterPath: ["options", "sourceLeaseId"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-lease-id",
|
|
xmlName: "x-ms-source-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp10 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "lease",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const action = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
defaultValue: "acquire",
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const duration = {
|
|
parameterPath: ["options", "duration"],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-duration",
|
|
xmlName: "x-ms-lease-duration",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const proposedLeaseId = {
|
|
parameterPath: ["options", "proposedLeaseId"],
|
|
mapper: {
|
|
serializedName: "x-ms-proposed-lease-id",
|
|
xmlName: "x-ms-proposed-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const action1 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
defaultValue: "release",
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const leaseId1 = {
|
|
parameterPath: "leaseId",
|
|
mapper: {
|
|
serializedName: "x-ms-lease-id",
|
|
required: true,
|
|
xmlName: "x-ms-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const action2 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
defaultValue: "renew",
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const action3 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
defaultValue: "break",
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const breakPeriod = {
|
|
parameterPath: ["options", "breakPeriod"],
|
|
mapper: {
|
|
serializedName: "x-ms-lease-break-period",
|
|
xmlName: "x-ms-lease-break-period",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const action4 = {
|
|
parameterPath: "action",
|
|
mapper: {
|
|
defaultValue: "change",
|
|
isConstant: true,
|
|
serializedName: "x-ms-lease-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const proposedLeaseId1 = {
|
|
parameterPath: "proposedLeaseId",
|
|
mapper: {
|
|
serializedName: "x-ms-proposed-lease-id",
|
|
required: true,
|
|
xmlName: "x-ms-proposed-lease-id",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const include1 = {
|
|
parameterPath: ["options", "include"],
|
|
mapper: {
|
|
serializedName: "include",
|
|
xmlName: "include",
|
|
xmlElementName: "ListBlobsIncludeItem",
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"copy",
|
|
"deleted",
|
|
"metadata",
|
|
"snapshots",
|
|
"uncommittedblobs",
|
|
"versions",
|
|
"tags",
|
|
"immutabilitypolicy",
|
|
"legalhold",
|
|
"deletedwithversions"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
collectionFormat: coreHttp.QueryCollectionFormat.Csv
|
|
};
|
|
const delimiter = {
|
|
parameterPath: "delimiter",
|
|
mapper: {
|
|
serializedName: "delimiter",
|
|
required: true,
|
|
xmlName: "delimiter",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const snapshot = {
|
|
parameterPath: ["options", "snapshot"],
|
|
mapper: {
|
|
serializedName: "snapshot",
|
|
xmlName: "snapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const versionId = {
|
|
parameterPath: ["options", "versionId"],
|
|
mapper: {
|
|
serializedName: "versionid",
|
|
xmlName: "versionid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const range = {
|
|
parameterPath: ["options", "range"],
|
|
mapper: {
|
|
serializedName: "x-ms-range",
|
|
xmlName: "x-ms-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const rangeGetContentMD5 = {
|
|
parameterPath: ["options", "rangeGetContentMD5"],
|
|
mapper: {
|
|
serializedName: "x-ms-range-get-content-md5",
|
|
xmlName: "x-ms-range-get-content-md5",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const rangeGetContentCRC64 = {
|
|
parameterPath: ["options", "rangeGetContentCRC64"],
|
|
mapper: {
|
|
serializedName: "x-ms-range-get-content-crc64",
|
|
xmlName: "x-ms-range-get-content-crc64",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const encryptionKey = {
|
|
parameterPath: ["options", "cpkInfo", "encryptionKey"],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-key",
|
|
xmlName: "x-ms-encryption-key",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const encryptionKeySha256 = {
|
|
parameterPath: ["options", "cpkInfo", "encryptionKeySha256"],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-key-sha256",
|
|
xmlName: "x-ms-encryption-key-sha256",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const encryptionAlgorithm = {
|
|
parameterPath: ["options", "encryptionAlgorithm"],
|
|
mapper: {
|
|
defaultValue: "AES256",
|
|
isConstant: true,
|
|
serializedName: "x-ms-encryption-algorithm",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const ifMatch = {
|
|
parameterPath: ["options", "modifiedAccessConditions", "ifMatch"],
|
|
mapper: {
|
|
serializedName: "If-Match",
|
|
xmlName: "If-Match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const ifNoneMatch = {
|
|
parameterPath: ["options", "modifiedAccessConditions", "ifNoneMatch"],
|
|
mapper: {
|
|
serializedName: "If-None-Match",
|
|
xmlName: "If-None-Match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const ifTags = {
|
|
parameterPath: ["options", "modifiedAccessConditions", "ifTags"],
|
|
mapper: {
|
|
serializedName: "x-ms-if-tags",
|
|
xmlName: "x-ms-if-tags",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const deleteSnapshots = {
|
|
parameterPath: ["options", "deleteSnapshots"],
|
|
mapper: {
|
|
serializedName: "x-ms-delete-snapshots",
|
|
xmlName: "x-ms-delete-snapshots",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["include", "only"]
|
|
}
|
|
}
|
|
};
|
|
const blobDeleteType = {
|
|
parameterPath: ["options", "blobDeleteType"],
|
|
mapper: {
|
|
serializedName: "deletetype",
|
|
xmlName: "deletetype",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp11 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "expiry",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const expiryOptions = {
|
|
parameterPath: "expiryOptions",
|
|
mapper: {
|
|
serializedName: "x-ms-expiry-option",
|
|
required: true,
|
|
xmlName: "x-ms-expiry-option",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const expiresOn = {
|
|
parameterPath: ["options", "expiresOn"],
|
|
mapper: {
|
|
serializedName: "x-ms-expiry-time",
|
|
xmlName: "x-ms-expiry-time",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobCacheControl = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobCacheControl"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-cache-control",
|
|
xmlName: "x-ms-blob-cache-control",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobContentType = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobContentType"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-type",
|
|
xmlName: "x-ms-blob-content-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobContentMD5 = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobContentMD5"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-md5",
|
|
xmlName: "x-ms-blob-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
const blobContentEncoding = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobContentEncoding"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-encoding",
|
|
xmlName: "x-ms-blob-content-encoding",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobContentLanguage = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobContentLanguage"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-language",
|
|
xmlName: "x-ms-blob-content-language",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobContentDisposition = {
|
|
parameterPath: ["options", "blobHttpHeaders", "blobContentDisposition"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-disposition",
|
|
xmlName: "x-ms-blob-content-disposition",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp12 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "immutabilityPolicies",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const immutabilityPolicyExpiry = {
|
|
parameterPath: ["options", "immutabilityPolicyExpiry"],
|
|
mapper: {
|
|
serializedName: "x-ms-immutability-policy-until-date",
|
|
xmlName: "x-ms-immutability-policy-until-date",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
const immutabilityPolicyMode = {
|
|
parameterPath: ["options", "immutabilityPolicyMode"],
|
|
mapper: {
|
|
serializedName: "x-ms-immutability-policy-mode",
|
|
xmlName: "x-ms-immutability-policy-mode",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["Mutable", "Unlocked", "Locked"]
|
|
}
|
|
}
|
|
};
|
|
const comp13 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "legalhold",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const legalHold = {
|
|
parameterPath: "legalHold",
|
|
mapper: {
|
|
serializedName: "x-ms-legal-hold",
|
|
required: true,
|
|
xmlName: "x-ms-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const encryptionScope = {
|
|
parameterPath: ["options", "encryptionScope"],
|
|
mapper: {
|
|
serializedName: "x-ms-encryption-scope",
|
|
xmlName: "x-ms-encryption-scope",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp14 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "snapshot",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const tier = {
|
|
parameterPath: ["options", "tier"],
|
|
mapper: {
|
|
serializedName: "x-ms-access-tier",
|
|
xmlName: "x-ms-access-tier",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"P4",
|
|
"P6",
|
|
"P10",
|
|
"P15",
|
|
"P20",
|
|
"P30",
|
|
"P40",
|
|
"P50",
|
|
"P60",
|
|
"P70",
|
|
"P80",
|
|
"Hot",
|
|
"Cool",
|
|
"Archive"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
const rehydratePriority = {
|
|
parameterPath: ["options", "rehydratePriority"],
|
|
mapper: {
|
|
serializedName: "x-ms-rehydrate-priority",
|
|
xmlName: "x-ms-rehydrate-priority",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["High", "Standard"]
|
|
}
|
|
}
|
|
};
|
|
const sourceIfModifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfModifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-modified-since",
|
|
xmlName: "x-ms-source-if-modified-since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
const sourceIfUnmodifiedSince = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfUnmodifiedSince"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-unmodified-since",
|
|
xmlName: "x-ms-source-if-unmodified-since",
|
|
type: {
|
|
name: "DateTimeRfc1123"
|
|
}
|
|
}
|
|
};
|
|
const sourceIfMatch = {
|
|
parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfMatch"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-match",
|
|
xmlName: "x-ms-source-if-match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceIfNoneMatch = {
|
|
parameterPath: [
|
|
"options",
|
|
"sourceModifiedAccessConditions",
|
|
"sourceIfNoneMatch"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-none-match",
|
|
xmlName: "x-ms-source-if-none-match",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceIfTags = {
|
|
parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfTags"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-if-tags",
|
|
xmlName: "x-ms-source-if-tags",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const copySource = {
|
|
parameterPath: "copySource",
|
|
mapper: {
|
|
serializedName: "x-ms-copy-source",
|
|
required: true,
|
|
xmlName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobTagsString = {
|
|
parameterPath: ["options", "blobTagsString"],
|
|
mapper: {
|
|
serializedName: "x-ms-tags",
|
|
xmlName: "x-ms-tags",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sealBlob = {
|
|
parameterPath: ["options", "sealBlob"],
|
|
mapper: {
|
|
serializedName: "x-ms-seal-blob",
|
|
xmlName: "x-ms-seal-blob",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const legalHold1 = {
|
|
parameterPath: ["options", "legalHold"],
|
|
mapper: {
|
|
serializedName: "x-ms-legal-hold",
|
|
xmlName: "x-ms-legal-hold",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const xMsRequiresSync = {
|
|
parameterPath: "xMsRequiresSync",
|
|
mapper: {
|
|
defaultValue: "true",
|
|
isConstant: true,
|
|
serializedName: "x-ms-requires-sync",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceContentMD5 = {
|
|
parameterPath: ["options", "sourceContentMD5"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-content-md5",
|
|
xmlName: "x-ms-source-content-md5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
const copySourceAuthorization = {
|
|
parameterPath: ["options", "copySourceAuthorization"],
|
|
mapper: {
|
|
serializedName: "x-ms-copy-source-authorization",
|
|
xmlName: "x-ms-copy-source-authorization",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp15 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "copy",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const copyActionAbortConstant = {
|
|
parameterPath: "copyActionAbortConstant",
|
|
mapper: {
|
|
defaultValue: "abort",
|
|
isConstant: true,
|
|
serializedName: "x-ms-copy-action",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const copyId = {
|
|
parameterPath: "copyId",
|
|
mapper: {
|
|
serializedName: "copyid",
|
|
required: true,
|
|
xmlName: "copyid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp16 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "tier",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const tier1 = {
|
|
parameterPath: "tier",
|
|
mapper: {
|
|
serializedName: "x-ms-access-tier",
|
|
required: true,
|
|
xmlName: "x-ms-access-tier",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: [
|
|
"P4",
|
|
"P6",
|
|
"P10",
|
|
"P15",
|
|
"P20",
|
|
"P30",
|
|
"P40",
|
|
"P50",
|
|
"P60",
|
|
"P70",
|
|
"P80",
|
|
"Hot",
|
|
"Cool",
|
|
"Archive"
|
|
]
|
|
}
|
|
}
|
|
};
|
|
const queryRequest = {
|
|
parameterPath: ["options", "queryRequest"],
|
|
mapper: QueryRequest
|
|
};
|
|
const comp17 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "query",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp18 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "tags",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const tags = {
|
|
parameterPath: ["options", "tags"],
|
|
mapper: BlobTags
|
|
};
|
|
const transactionalContentMD5 = {
|
|
parameterPath: ["options", "transactionalContentMD5"],
|
|
mapper: {
|
|
serializedName: "Content-MD5",
|
|
xmlName: "Content-MD5",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
const transactionalContentCrc64 = {
|
|
parameterPath: ["options", "transactionalContentCrc64"],
|
|
mapper: {
|
|
serializedName: "x-ms-content-crc64",
|
|
xmlName: "x-ms-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
const blobType = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
defaultValue: "PageBlob",
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobContentLength = {
|
|
parameterPath: "blobContentLength",
|
|
mapper: {
|
|
serializedName: "x-ms-blob-content-length",
|
|
required: true,
|
|
xmlName: "x-ms-blob-content-length",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const blobSequenceNumber = {
|
|
parameterPath: ["options", "blobSequenceNumber"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-sequence-number",
|
|
xmlName: "x-ms-blob-sequence-number",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const contentType1 = {
|
|
parameterPath: ["options", "contentType"],
|
|
mapper: {
|
|
defaultValue: "application/octet-stream",
|
|
isConstant: true,
|
|
serializedName: "Content-Type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const body1 = {
|
|
parameterPath: "body",
|
|
mapper: {
|
|
serializedName: "body",
|
|
required: true,
|
|
xmlName: "body",
|
|
type: {
|
|
name: "Stream"
|
|
}
|
|
}
|
|
};
|
|
const accept2 = {
|
|
parameterPath: "accept",
|
|
mapper: {
|
|
defaultValue: "application/xml",
|
|
isConstant: true,
|
|
serializedName: "Accept",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp19 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "page",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const pageWrite = {
|
|
parameterPath: "pageWrite",
|
|
mapper: {
|
|
defaultValue: "update",
|
|
isConstant: true,
|
|
serializedName: "x-ms-page-write",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const ifSequenceNumberLessThanOrEqualTo = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberLessThanOrEqualTo"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-le",
|
|
xmlName: "x-ms-if-sequence-number-le",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const ifSequenceNumberLessThan = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberLessThan"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-lt",
|
|
xmlName: "x-ms-if-sequence-number-lt",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const ifSequenceNumberEqualTo = {
|
|
parameterPath: [
|
|
"options",
|
|
"sequenceNumberAccessConditions",
|
|
"ifSequenceNumberEqualTo"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-if-sequence-number-eq",
|
|
xmlName: "x-ms-if-sequence-number-eq",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const pageWrite1 = {
|
|
parameterPath: "pageWrite",
|
|
mapper: {
|
|
defaultValue: "clear",
|
|
isConstant: true,
|
|
serializedName: "x-ms-page-write",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceUrl = {
|
|
parameterPath: "sourceUrl",
|
|
mapper: {
|
|
serializedName: "x-ms-copy-source",
|
|
required: true,
|
|
xmlName: "x-ms-copy-source",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceRange = {
|
|
parameterPath: "sourceRange",
|
|
mapper: {
|
|
serializedName: "x-ms-source-range",
|
|
required: true,
|
|
xmlName: "x-ms-source-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sourceContentCrc64 = {
|
|
parameterPath: ["options", "sourceContentCrc64"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-content-crc64",
|
|
xmlName: "x-ms-source-content-crc64",
|
|
type: {
|
|
name: "ByteArray"
|
|
}
|
|
}
|
|
};
|
|
const range1 = {
|
|
parameterPath: "range",
|
|
mapper: {
|
|
serializedName: "x-ms-range",
|
|
required: true,
|
|
xmlName: "x-ms-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp20 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "pagelist",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const prevsnapshot = {
|
|
parameterPath: ["options", "prevsnapshot"],
|
|
mapper: {
|
|
serializedName: "prevsnapshot",
|
|
xmlName: "prevsnapshot",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const prevSnapshotUrl = {
|
|
parameterPath: ["options", "prevSnapshotUrl"],
|
|
mapper: {
|
|
serializedName: "x-ms-previous-snapshot-url",
|
|
xmlName: "x-ms-previous-snapshot-url",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const sequenceNumberAction = {
|
|
parameterPath: "sequenceNumberAction",
|
|
mapper: {
|
|
serializedName: "x-ms-sequence-number-action",
|
|
required: true,
|
|
xmlName: "x-ms-sequence-number-action",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["max", "update", "increment"]
|
|
}
|
|
}
|
|
};
|
|
const comp21 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "incrementalcopy",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobType1 = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
defaultValue: "AppendBlob",
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp22 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "appendblock",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const maxSize = {
|
|
parameterPath: ["options", "appendPositionAccessConditions", "maxSize"],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-condition-maxsize",
|
|
xmlName: "x-ms-blob-condition-maxsize",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const appendPosition = {
|
|
parameterPath: [
|
|
"options",
|
|
"appendPositionAccessConditions",
|
|
"appendPosition"
|
|
],
|
|
mapper: {
|
|
serializedName: "x-ms-blob-condition-appendpos",
|
|
xmlName: "x-ms-blob-condition-appendpos",
|
|
type: {
|
|
name: "Number"
|
|
}
|
|
}
|
|
};
|
|
const sourceRange1 = {
|
|
parameterPath: ["options", "sourceRange"],
|
|
mapper: {
|
|
serializedName: "x-ms-source-range",
|
|
xmlName: "x-ms-source-range",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const comp23 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "seal",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blobType2 = {
|
|
parameterPath: "blobType",
|
|
mapper: {
|
|
defaultValue: "BlockBlob",
|
|
isConstant: true,
|
|
serializedName: "x-ms-blob-type",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const copySourceBlobProperties = {
|
|
parameterPath: ["options", "copySourceBlobProperties"],
|
|
mapper: {
|
|
serializedName: "x-ms-copy-source-blob-properties",
|
|
xmlName: "x-ms-copy-source-blob-properties",
|
|
type: {
|
|
name: "Boolean"
|
|
}
|
|
}
|
|
};
|
|
const comp24 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "block",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blockId = {
|
|
parameterPath: "blockId",
|
|
mapper: {
|
|
serializedName: "blockid",
|
|
required: true,
|
|
xmlName: "blockid",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const blocks = {
|
|
parameterPath: "blocks",
|
|
mapper: BlockLookupList
|
|
};
|
|
const comp25 = {
|
|
parameterPath: "comp",
|
|
mapper: {
|
|
defaultValue: "blocklist",
|
|
isConstant: true,
|
|
serializedName: "comp",
|
|
type: {
|
|
name: "String"
|
|
}
|
|
}
|
|
};
|
|
const listType = {
|
|
parameterPath: "listType",
|
|
mapper: {
|
|
defaultValue: "committed",
|
|
serializedName: "blocklisttype",
|
|
required: true,
|
|
xmlName: "blocklisttype",
|
|
type: {
|
|
name: "Enum",
|
|
allowedValues: ["committed", "uncommitted", "all"]
|
|
}
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a Service. */
|
|
class Service {
|
|
/**
|
|
* Initialize a new instance of the class Service class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* Sets properties for a storage account's Blob service endpoint, including properties for Storage
|
|
* Analytics and CORS (Cross-Origin Resource Sharing) rules
|
|
* @param blobServiceProperties The StorageService properties.
|
|
* @param options The options parameters.
|
|
*/
|
|
setProperties(blobServiceProperties, options) {
|
|
const operationArguments = {
|
|
blobServiceProperties,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setPropertiesOperationSpec);
|
|
}
|
|
/**
|
|
* gets the properties of a storage account's Blob service, including properties for Storage Analytics
|
|
* and CORS (Cross-Origin Resource Sharing) rules.
|
|
* @param options The options parameters.
|
|
*/
|
|
getProperties(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec);
|
|
}
|
|
/**
|
|
* Retrieves statistics related to replication for the Blob service. It is only available on the
|
|
* secondary location endpoint when read-access geo-redundant replication is enabled for the storage
|
|
* account.
|
|
* @param options The options parameters.
|
|
*/
|
|
getStatistics(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getStatisticsOperationSpec);
|
|
}
|
|
/**
|
|
* The List Containers Segment operation returns a list of the containers under the specified account
|
|
* @param options The options parameters.
|
|
*/
|
|
listContainersSegment(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, listContainersSegmentOperationSpec);
|
|
}
|
|
/**
|
|
* Retrieves a user delegation key for the Blob service. This is only a valid operation when using
|
|
* bearer token authentication.
|
|
* @param keyInfo Key information
|
|
* @param options The options parameters.
|
|
*/
|
|
getUserDelegationKey(keyInfo, options) {
|
|
const operationArguments = {
|
|
keyInfo,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getUserDelegationKeyOperationSpec);
|
|
}
|
|
/**
|
|
* Returns the sku name and account kind
|
|
* @param options The options parameters.
|
|
*/
|
|
getAccountInfo(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec);
|
|
}
|
|
/**
|
|
* The Batch operation allows multiple API calls to be embedded into a single HTTP request.
|
|
* @param contentLength The length of the request.
|
|
* @param multipartContentType Required. The value of this header must be multipart/mixed with a batch
|
|
* boundary. Example header value: multipart/mixed; boundary=batch_<GUID>
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
submitBatch(contentLength, multipartContentType, body, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
multipartContentType,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec);
|
|
}
|
|
/**
|
|
* The Filter Blobs operation enables callers to list blobs across all containers whose tags match a
|
|
* given search expression. Filter blobs searches across all containers within a storage account but
|
|
* can be scoped within the expression to a single container.
|
|
* @param options The options parameters.
|
|
*/
|
|
filterBlobs(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, filterBlobsOperationSpec);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const setPropertiesOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: ServiceSetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceSetPropertiesExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: blobServiceProperties,
|
|
queryParameters: [
|
|
restype,
|
|
comp,
|
|
timeoutInSeconds
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer
|
|
};
|
|
const getPropertiesOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlobServiceProperties,
|
|
headersMapper: ServiceGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetPropertiesExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
restype,
|
|
comp,
|
|
timeoutInSeconds
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer
|
|
};
|
|
const getStatisticsOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlobServiceStatistics,
|
|
headersMapper: ServiceGetStatisticsHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetStatisticsExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
restype,
|
|
timeoutInSeconds,
|
|
comp1
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer
|
|
};
|
|
const listContainersSegmentOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListContainersSegmentResponse,
|
|
headersMapper: ServiceListContainersSegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceListContainersSegmentExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp2,
|
|
prefix,
|
|
marker,
|
|
maxPageSize,
|
|
include
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer
|
|
};
|
|
const getUserDelegationKeyOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "POST",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: UserDelegationKey,
|
|
headersMapper: ServiceGetUserDelegationKeyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetUserDelegationKeyExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: keyInfo,
|
|
queryParameters: [
|
|
restype,
|
|
timeoutInSeconds,
|
|
comp3
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer
|
|
};
|
|
const getAccountInfoOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ServiceGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceGetAccountInfoExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, restype1],
|
|
urlParameters: [url],
|
|
headerParameters: [version, accept1],
|
|
isXML: true,
|
|
serializer: xmlSerializer
|
|
};
|
|
const submitBatchOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "POST",
|
|
responses: {
|
|
202: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: ServiceSubmitBatchHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceSubmitBatchExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body,
|
|
queryParameters: [timeoutInSeconds, comp4],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
multipartContentType
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer
|
|
};
|
|
const filterBlobsOperationSpec = {
|
|
path: "/",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: FilterBlobSegment,
|
|
headersMapper: ServiceFilterBlobsHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ServiceFilterBlobsExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
marker,
|
|
maxPageSize,
|
|
comp5,
|
|
where
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a Container. */
|
|
class Container {
|
|
/**
|
|
* Initialize a new instance of the class Container class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* creates a new container under the specified account. If the container with the same name already
|
|
* exists, the operation fails
|
|
* @param options The options parameters.
|
|
*/
|
|
create(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, createOperationSpec);
|
|
}
|
|
/**
|
|
* returns all user-defined metadata and system properties for the specified container. The data
|
|
* returned does not include the container's list of blobs
|
|
* @param options The options parameters.
|
|
*/
|
|
getProperties(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec$1);
|
|
}
|
|
/**
|
|
* operation marks the specified container for deletion. The container and any blobs contained within
|
|
* it are later deleted during garbage collection
|
|
* @param options The options parameters.
|
|
*/
|
|
delete(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, deleteOperationSpec);
|
|
}
|
|
/**
|
|
* operation sets one or more user-defined name-value pairs for the specified container.
|
|
* @param options The options parameters.
|
|
*/
|
|
setMetadata(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec);
|
|
}
|
|
/**
|
|
* gets the permissions for the specified container. The permissions indicate whether container data
|
|
* may be accessed publicly.
|
|
* @param options The options parameters.
|
|
*/
|
|
getAccessPolicy(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getAccessPolicyOperationSpec);
|
|
}
|
|
/**
|
|
* sets the permissions for the specified container. The permissions indicate whether blobs in a
|
|
* container may be accessed publicly.
|
|
* @param options The options parameters.
|
|
*/
|
|
setAccessPolicy(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setAccessPolicyOperationSpec);
|
|
}
|
|
/**
|
|
* Restores a previously-deleted container.
|
|
* @param options The options parameters.
|
|
*/
|
|
restore(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, restoreOperationSpec);
|
|
}
|
|
/**
|
|
* Renames an existing container.
|
|
* @param sourceContainerName Required. Specifies the name of the container to rename.
|
|
* @param options The options parameters.
|
|
*/
|
|
rename(sourceContainerName, options) {
|
|
const operationArguments = {
|
|
sourceContainerName,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, renameOperationSpec);
|
|
}
|
|
/**
|
|
* The Batch operation allows multiple API calls to be embedded into a single HTTP request.
|
|
* @param contentLength The length of the request.
|
|
* @param multipartContentType Required. The value of this header must be multipart/mixed with a batch
|
|
* boundary. Example header value: multipart/mixed; boundary=batch_<GUID>
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
submitBatch(contentLength, multipartContentType, body, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
multipartContentType,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
|
|
* be 15 to 60 seconds, or can be infinite
|
|
* @param options The options parameters.
|
|
*/
|
|
acquireLease(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
|
|
* be 15 to 60 seconds, or can be infinite
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param options The options parameters.
|
|
*/
|
|
releaseLease(leaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
|
|
* be 15 to 60 seconds, or can be infinite
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param options The options parameters.
|
|
*/
|
|
renewLease(leaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
|
|
* be 15 to 60 seconds, or can be infinite
|
|
* @param options The options parameters.
|
|
*/
|
|
breakLease(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] establishes and manages a lock on a container for delete operations. The lock duration can
|
|
* be 15 to 60 seconds, or can be infinite
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400
|
|
* (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor
|
|
* (String) for a list of valid GUID string formats.
|
|
* @param options The options parameters.
|
|
*/
|
|
changeLease(leaseId, proposedLeaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
proposedLeaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] The List Blobs operation returns a list of the blobs under the specified container
|
|
* @param options The options parameters.
|
|
*/
|
|
listBlobFlatSegment(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, listBlobFlatSegmentOperationSpec);
|
|
}
|
|
/**
|
|
* [Update] The List Blobs operation returns a list of the blobs under the specified container
|
|
* @param delimiter When the request includes this parameter, the operation returns a BlobPrefix
|
|
* element in the response body that acts as a placeholder for all blobs whose names begin with the
|
|
* same substring up to the appearance of the delimiter character. The delimiter may be a single
|
|
* character or a string.
|
|
* @param options The options parameters.
|
|
*/
|
|
listBlobHierarchySegment(delimiter, options) {
|
|
const operationArguments = {
|
|
delimiter,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, listBlobHierarchySegmentOperationSpec);
|
|
}
|
|
/**
|
|
* Returns the sku name and account kind
|
|
* @param options The options parameters.
|
|
*/
|
|
getAccountInfo(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec$1);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer$1 = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const createOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: ContainerCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerCreateExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, restype2],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
access,
|
|
defaultEncryptionScope,
|
|
preventEncryptionScopeOverride
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const getPropertiesOperationSpec$1 = {
|
|
path: "/{containerName}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetPropertiesExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, restype2],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const deleteOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "DELETE",
|
|
responses: {
|
|
202: {
|
|
headersMapper: ContainerDeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerDeleteExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, restype2],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const setMetadataOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerSetMetadataHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerSetMetadataExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp6
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const getAccessPolicyOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: {
|
|
type: {
|
|
name: "Sequence",
|
|
element: {
|
|
type: { name: "Composite", className: "SignedIdentifier" }
|
|
}
|
|
},
|
|
serializedName: "SignedIdentifiers",
|
|
xmlName: "SignedIdentifiers",
|
|
xmlIsWrapped: true,
|
|
xmlElementName: "SignedIdentifier"
|
|
},
|
|
headersMapper: ContainerGetAccessPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetAccessPolicyExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp7
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const setAccessPolicyOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerSetAccessPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerSetAccessPolicyExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: containerAcl,
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp7
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
access,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const restoreOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: ContainerRestoreHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerRestoreExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp8
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
deletedContainerName,
|
|
deletedContainerVersion
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const renameOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerRenameHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerRenameExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp9
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
sourceContainerName,
|
|
sourceLeaseId
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const submitBatchOperationSpec$1 = {
|
|
path: "/{containerName}",
|
|
httpMethod: "POST",
|
|
responses: {
|
|
202: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: ContainerSubmitBatchHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerSubmitBatchExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body,
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp4,
|
|
restype2
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
multipartContentType
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const acquireLeaseOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: ContainerAcquireLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerAcquireLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp10
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action,
|
|
duration,
|
|
proposedLeaseId
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const releaseLeaseOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerReleaseLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerReleaseLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp10
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action1,
|
|
leaseId1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const renewLeaseOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerRenewLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerRenewLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp10
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
leaseId1,
|
|
action2
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const breakLeaseOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: ContainerBreakLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerBreakLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp10
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action3,
|
|
breakPeriod
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const changeLeaseOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerChangeLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerChangeLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
restype2,
|
|
comp10
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
leaseId1,
|
|
action4,
|
|
proposedLeaseId1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const listBlobFlatSegmentOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListBlobsFlatSegmentResponse,
|
|
headersMapper: ContainerListBlobFlatSegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerListBlobFlatSegmentExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp2,
|
|
prefix,
|
|
marker,
|
|
maxPageSize,
|
|
restype2,
|
|
include1
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const listBlobHierarchySegmentOperationSpec = {
|
|
path: "/{containerName}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: ListBlobsHierarchySegmentResponse,
|
|
headersMapper: ContainerListBlobHierarchySegmentHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerListBlobHierarchySegmentExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp2,
|
|
prefix,
|
|
marker,
|
|
maxPageSize,
|
|
restype2,
|
|
include1,
|
|
delimiter
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
const getAccountInfoOperationSpec$1 = {
|
|
path: "/{containerName}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
headersMapper: ContainerGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: ContainerGetAccountInfoExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, restype1],
|
|
urlParameters: [url],
|
|
headerParameters: [version, accept1],
|
|
isXML: true,
|
|
serializer: xmlSerializer$1
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a Blob. */
|
|
class Blob$1 {
|
|
/**
|
|
* Initialize a new instance of the class Blob class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* The Download operation reads or downloads a blob from the system, including its metadata and
|
|
* properties. You can also call Download to read a snapshot.
|
|
* @param options The options parameters.
|
|
*/
|
|
download(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, downloadOperationSpec);
|
|
}
|
|
/**
|
|
* The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system
|
|
* properties for the blob. It does not return the content of the blob.
|
|
* @param options The options parameters.
|
|
*/
|
|
getProperties(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec$2);
|
|
}
|
|
/**
|
|
* If the storage account's soft delete feature is disabled then, when a blob is deleted, it is
|
|
* permanently removed from the storage account. If the storage account's soft delete feature is
|
|
* enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible
|
|
* immediately. However, the blob service retains the blob or snapshot for the number of days specified
|
|
* by the DeleteRetentionPolicy section of [Storage service properties]
|
|
* (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is
|
|
* permanently removed from the storage account. Note that you continue to be charged for the
|
|
* soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the
|
|
* "include=deleted" query parameter to discover which blobs and snapshots have been soft deleted. You
|
|
* can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a
|
|
* soft-deleted blob or snapshot causes the service to return an HTTP status code of 404
|
|
* (ResourceNotFound).
|
|
* @param options The options parameters.
|
|
*/
|
|
delete(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, deleteOperationSpec$1);
|
|
}
|
|
/**
|
|
* Undelete a blob that was previously soft deleted
|
|
* @param options The options parameters.
|
|
*/
|
|
undelete(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, undeleteOperationSpec);
|
|
}
|
|
/**
|
|
* Sets the time a blob will expire and be deleted.
|
|
* @param expiryOptions Required. Indicates mode of the expiry time
|
|
* @param options The options parameters.
|
|
*/
|
|
setExpiry(expiryOptions, options) {
|
|
const operationArguments = {
|
|
expiryOptions,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setExpiryOperationSpec);
|
|
}
|
|
/**
|
|
* The Set HTTP Headers operation sets system properties on the blob
|
|
* @param options The options parameters.
|
|
*/
|
|
setHttpHeaders(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setHttpHeadersOperationSpec);
|
|
}
|
|
/**
|
|
* The Set Immutability Policy operation sets the immutability policy on the blob
|
|
* @param options The options parameters.
|
|
*/
|
|
setImmutabilityPolicy(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setImmutabilityPolicyOperationSpec);
|
|
}
|
|
/**
|
|
* The Delete Immutability Policy operation deletes the immutability policy on the blob
|
|
* @param options The options parameters.
|
|
*/
|
|
deleteImmutabilityPolicy(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, deleteImmutabilityPolicyOperationSpec);
|
|
}
|
|
/**
|
|
* The Set Legal Hold operation sets a legal hold on the blob.
|
|
* @param legalHold Specified if a legal hold should be set on the blob.
|
|
* @param options The options parameters.
|
|
*/
|
|
setLegalHold(legalHold, options) {
|
|
const operationArguments = {
|
|
legalHold,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setLegalHoldOperationSpec);
|
|
}
|
|
/**
|
|
* The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more
|
|
* name-value pairs
|
|
* @param options The options parameters.
|
|
*/
|
|
setMetadata(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
|
|
* operations
|
|
* @param options The options parameters.
|
|
*/
|
|
acquireLease(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
|
|
* operations
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param options The options parameters.
|
|
*/
|
|
releaseLease(leaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
|
|
* operations
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param options The options parameters.
|
|
*/
|
|
renewLease(leaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
|
|
* operations
|
|
* @param leaseId Specifies the current lease ID on the resource.
|
|
* @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400
|
|
* (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor
|
|
* (String) for a list of valid GUID string formats.
|
|
* @param options The options parameters.
|
|
*/
|
|
changeLease(leaseId, proposedLeaseId, options) {
|
|
const operationArguments = {
|
|
leaseId,
|
|
proposedLeaseId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec$1);
|
|
}
|
|
/**
|
|
* [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
|
|
* operations
|
|
* @param options The options parameters.
|
|
*/
|
|
breakLease(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec$1);
|
|
}
|
|
/**
|
|
* The Create Snapshot operation creates a read-only snapshot of a blob
|
|
* @param options The options parameters.
|
|
*/
|
|
createSnapshot(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, createSnapshotOperationSpec);
|
|
}
|
|
/**
|
|
* The Start Copy From URL operation copies a blob or an internet resource to a new blob.
|
|
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
|
|
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
|
|
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
|
|
* access signature.
|
|
* @param options The options parameters.
|
|
*/
|
|
startCopyFromURL(copySource, options) {
|
|
const operationArguments = {
|
|
copySource,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, startCopyFromURLOperationSpec);
|
|
}
|
|
/**
|
|
* The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return
|
|
* a response until the copy is complete.
|
|
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
|
|
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
|
|
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
|
|
* access signature.
|
|
* @param options The options parameters.
|
|
*/
|
|
copyFromURL(copySource, options) {
|
|
const operationArguments = {
|
|
copySource,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, copyFromURLOperationSpec);
|
|
}
|
|
/**
|
|
* The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination
|
|
* blob with zero length and full metadata.
|
|
* @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob
|
|
* operation.
|
|
* @param options The options parameters.
|
|
*/
|
|
abortCopyFromURL(copyId, options) {
|
|
const operationArguments = {
|
|
copyId,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, abortCopyFromURLOperationSpec);
|
|
}
|
|
/**
|
|
* The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium
|
|
* storage account and on a block blob in a blob storage account (locally redundant storage only). A
|
|
* premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block
|
|
* blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's
|
|
* ETag.
|
|
* @param tier Indicates the tier to be set on the blob.
|
|
* @param options The options parameters.
|
|
*/
|
|
setTier(tier, options) {
|
|
const operationArguments = {
|
|
tier,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setTierOperationSpec);
|
|
}
|
|
/**
|
|
* Returns the sku name and account kind
|
|
* @param options The options parameters.
|
|
*/
|
|
getAccountInfo(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec$2);
|
|
}
|
|
/**
|
|
* The Query operation enables users to select/project on blob data by providing simple query
|
|
* expressions.
|
|
* @param options The options parameters.
|
|
*/
|
|
query(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, queryOperationSpec);
|
|
}
|
|
/**
|
|
* The Get Tags operation enables users to get the tags associated with a blob.
|
|
* @param options The options parameters.
|
|
*/
|
|
getTags(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getTagsOperationSpec);
|
|
}
|
|
/**
|
|
* The Set Tags operation enables users to set tags on a blob.
|
|
* @param options The options parameters.
|
|
*/
|
|
setTags(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, setTagsOperationSpec);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer$2 = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const downloadOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: BlobDownloadHeaders
|
|
},
|
|
206: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: BlobDownloadHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobDownloadExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
versionId
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
range,
|
|
rangeGetContentMD5,
|
|
rangeGetContentCRC64,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const getPropertiesOperationSpec$2 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "HEAD",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobGetPropertiesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobGetPropertiesExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
versionId
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const deleteOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "DELETE",
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobDeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobDeleteExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
versionId,
|
|
blobDeleteType
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
deleteSnapshots
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const undeleteOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobUndeleteHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobUndeleteExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp8],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setExpiryOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetExpiryHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetExpiryExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp11],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
expiryOptions,
|
|
expiresOn
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setHttpHeadersOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetHttpHeadersHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetHttpHeadersExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setImmutabilityPolicyOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetImmutabilityPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetImmutabilityPolicyExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp12],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifUnmodifiedSince,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const deleteImmutabilityPolicyOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "DELETE",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobDeleteImmutabilityPolicyHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobDeleteImmutabilityPolicyExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp12],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setLegalHoldOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetLegalHoldHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetLegalHoldExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp13],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
legalHold
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setMetadataOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetMetadataHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetMetadataExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp6],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const acquireLeaseOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlobAcquireLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobAcquireLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp10],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action,
|
|
duration,
|
|
proposedLeaseId,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const releaseLeaseOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobReleaseLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobReleaseLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp10],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action1,
|
|
leaseId1,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const renewLeaseOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobRenewLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobRenewLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp10],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
leaseId1,
|
|
action2,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const changeLeaseOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobChangeLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobChangeLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp10],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
leaseId1,
|
|
action4,
|
|
proposedLeaseId1,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const breakLeaseOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobBreakLeaseHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobBreakLeaseExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp10],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
action3,
|
|
breakPeriod,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const createSnapshotOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlobCreateSnapshotHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobCreateSnapshotExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp14],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const startCopyFromURLOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobStartCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobStartCopyFromURLExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
tier,
|
|
rehydratePriority,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
sourceIfTags,
|
|
copySource,
|
|
blobTagsString,
|
|
sealBlob,
|
|
legalHold1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const copyFromURLOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: BlobCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobCopyFromURLExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
tier,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
copySource,
|
|
blobTagsString,
|
|
legalHold1,
|
|
xMsRequiresSync,
|
|
sourceContentMD5,
|
|
copySourceAuthorization
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const abortCopyFromURLOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
204: {
|
|
headersMapper: BlobAbortCopyFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobAbortCopyFromURLExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp15,
|
|
copyId
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
copyActionAbortConstant
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setTierOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobSetTierHeaders
|
|
},
|
|
202: {
|
|
headersMapper: BlobSetTierHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetTierExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
versionId,
|
|
comp16
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifTags,
|
|
rehydratePriority,
|
|
tier1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const getAccountInfoOperationSpec$2 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
headersMapper: BlobGetAccountInfoHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobGetAccountInfoExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, restype1],
|
|
urlParameters: [url],
|
|
headerParameters: [version, accept1],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const queryOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "POST",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: BlobQueryHeaders
|
|
},
|
|
206: {
|
|
bodyMapper: {
|
|
type: { name: "Stream" },
|
|
serializedName: "parsedResponse"
|
|
},
|
|
headersMapper: BlobQueryHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobQueryExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: queryRequest,
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
comp17
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const getTagsOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlobTags,
|
|
headersMapper: BlobGetTagsHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobGetTagsExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
versionId,
|
|
comp18
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$2
|
|
};
|
|
const setTagsOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
204: {
|
|
headersMapper: BlobSetTagsHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlobSetTagsExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: tags,
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
versionId,
|
|
comp18
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
leaseId,
|
|
ifTags,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer$2
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a PageBlob. */
|
|
class PageBlob {
|
|
/**
|
|
* Initialize a new instance of the class PageBlob class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* The Create operation creates a new page blob.
|
|
* @param contentLength The length of the request.
|
|
* @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The
|
|
* page blob size must be aligned to a 512-byte boundary.
|
|
* @param options The options parameters.
|
|
*/
|
|
create(contentLength, blobContentLength, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
blobContentLength,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, createOperationSpec$1);
|
|
}
|
|
/**
|
|
* The Upload Pages operation writes a range of pages to a page blob
|
|
* @param contentLength The length of the request.
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
uploadPages(contentLength, body, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, uploadPagesOperationSpec);
|
|
}
|
|
/**
|
|
* The Clear Pages operation clears a set of pages from a page blob
|
|
* @param contentLength The length of the request.
|
|
* @param options The options parameters.
|
|
*/
|
|
clearPages(contentLength, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, clearPagesOperationSpec);
|
|
}
|
|
/**
|
|
* The Upload Pages operation writes a range of pages to a page blob where the contents are read from a
|
|
* URL
|
|
* @param sourceUrl Specify a URL to the copy source.
|
|
* @param sourceRange Bytes of source data in the specified range. The length of this range should
|
|
* match the ContentLength header and x-ms-range/Range destination range header.
|
|
* @param contentLength The length of the request.
|
|
* @param range The range of bytes to which the source range would be written. The range should be 512
|
|
* aligned and range-end is required.
|
|
* @param options The options parameters.
|
|
*/
|
|
uploadPagesFromURL(sourceUrl, sourceRange, contentLength, range, options) {
|
|
const operationArguments = {
|
|
sourceUrl,
|
|
sourceRange,
|
|
contentLength,
|
|
range,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, uploadPagesFromURLOperationSpec);
|
|
}
|
|
/**
|
|
* The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a
|
|
* page blob
|
|
* @param options The options parameters.
|
|
*/
|
|
getPageRanges(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getPageRangesOperationSpec);
|
|
}
|
|
/**
|
|
* The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were
|
|
* changed between target blob and previous snapshot.
|
|
* @param options The options parameters.
|
|
*/
|
|
getPageRangesDiff(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getPageRangesDiffOperationSpec);
|
|
}
|
|
/**
|
|
* Resize the Blob
|
|
* @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The
|
|
* page blob size must be aligned to a 512-byte boundary.
|
|
* @param options The options parameters.
|
|
*/
|
|
resize(blobContentLength, options) {
|
|
const operationArguments = {
|
|
blobContentLength,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, resizeOperationSpec);
|
|
}
|
|
/**
|
|
* Update the sequence number of the blob
|
|
* @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the request.
|
|
* This property applies to page blobs only. This property indicates how the service should modify the
|
|
* blob's sequence number
|
|
* @param options The options parameters.
|
|
*/
|
|
updateSequenceNumber(sequenceNumberAction, options) {
|
|
const operationArguments = {
|
|
sequenceNumberAction,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, updateSequenceNumberOperationSpec);
|
|
}
|
|
/**
|
|
* The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob.
|
|
* The snapshot is copied such that only the differential changes between the previously copied
|
|
* snapshot are transferred to the destination. The copied snapshots are complete copies of the
|
|
* original snapshot and can be read or copied from as usual. This API is supported since REST version
|
|
* 2016-05-31.
|
|
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
|
|
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
|
|
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
|
|
* access signature.
|
|
* @param options The options parameters.
|
|
*/
|
|
copyIncremental(copySource, options) {
|
|
const operationArguments = {
|
|
copySource,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, copyIncrementalOperationSpec);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer$3 = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const serializer = new coreHttp.Serializer(Mappers, /* isXml */ false);
|
|
const createOperationSpec$1 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobCreateExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
encryptionScope,
|
|
tier,
|
|
blobTagsString,
|
|
legalHold1,
|
|
blobType,
|
|
blobContentLength,
|
|
blobSequenceNumber
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const uploadPagesOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobUploadPagesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUploadPagesExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body1,
|
|
queryParameters: [timeoutInSeconds, comp19],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
range,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
contentType1,
|
|
accept2,
|
|
pageWrite,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo
|
|
],
|
|
mediaType: "binary",
|
|
serializer
|
|
};
|
|
const clearPagesOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobClearPagesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobClearPagesExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp19],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
range,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo,
|
|
pageWrite1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const uploadPagesFromURLOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: PageBlobUploadPagesFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUploadPagesFromURLExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp19],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
sourceContentMD5,
|
|
copySourceAuthorization,
|
|
pageWrite,
|
|
ifSequenceNumberLessThanOrEqualTo,
|
|
ifSequenceNumberLessThan,
|
|
ifSequenceNumberEqualTo,
|
|
sourceUrl,
|
|
sourceRange,
|
|
sourceContentCrc64,
|
|
range1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const getPageRangesOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: PageList,
|
|
headersMapper: PageBlobGetPageRangesHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobGetPageRangesExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
comp20
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
range,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const getPageRangesDiffOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: PageList,
|
|
headersMapper: PageBlobGetPageRangesDiffHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobGetPageRangesDiffExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
comp20,
|
|
prevsnapshot
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
range,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
prevSnapshotUrl
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const resizeOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: PageBlobResizeHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobResizeExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
blobContentLength
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const updateSequenceNumberOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: PageBlobUpdateSequenceNumberHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobUpdateSequenceNumberExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [comp, timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobSequenceNumber,
|
|
sequenceNumberAction
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
const copyIncrementalOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
202: {
|
|
headersMapper: PageBlobCopyIncrementalHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: PageBlobCopyIncrementalExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp21],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
copySource
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$3
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a AppendBlob. */
|
|
class AppendBlob {
|
|
/**
|
|
* Initialize a new instance of the class AppendBlob class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* The Create Append Blob operation creates a new append blob.
|
|
* @param contentLength The length of the request.
|
|
* @param options The options parameters.
|
|
*/
|
|
create(contentLength, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, createOperationSpec$2);
|
|
}
|
|
/**
|
|
* The Append Block operation commits a new block of data to the end of an existing append blob. The
|
|
* Append Block operation is permitted only if the blob was created with x-ms-blob-type set to
|
|
* AppendBlob. Append Block is supported only on version 2015-02-21 version or later.
|
|
* @param contentLength The length of the request.
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
appendBlock(contentLength, body, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, appendBlockOperationSpec);
|
|
}
|
|
/**
|
|
* The Append Block operation commits a new block of data to the end of an existing append blob where
|
|
* the contents are read from a source url. The Append Block operation is permitted only if the blob
|
|
* was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version
|
|
* 2015-02-21 version or later.
|
|
* @param sourceUrl Specify a URL to the copy source.
|
|
* @param contentLength The length of the request.
|
|
* @param options The options parameters.
|
|
*/
|
|
appendBlockFromUrl(sourceUrl, contentLength, options) {
|
|
const operationArguments = {
|
|
sourceUrl,
|
|
contentLength,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, appendBlockFromUrlOperationSpec);
|
|
}
|
|
/**
|
|
* The Seal operation seals the Append Blob to make it read-only. Seal is supported only on version
|
|
* 2019-12-12 version or later.
|
|
* @param options The options parameters.
|
|
*/
|
|
seal(options) {
|
|
const operationArguments = {
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, sealOperationSpec);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer$4 = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const serializer$1 = new coreHttp.Serializer(Mappers, /* isXml */ false);
|
|
const createOperationSpec$2 = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobCreateHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobCreateExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
encryptionScope,
|
|
blobTagsString,
|
|
legalHold1,
|
|
blobType1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$4
|
|
};
|
|
const appendBlockOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobAppendBlockHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobAppendBlockExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body1,
|
|
queryParameters: [timeoutInSeconds, comp22],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
contentType1,
|
|
accept2,
|
|
maxSize,
|
|
appendPosition
|
|
],
|
|
mediaType: "binary",
|
|
serializer: serializer$1
|
|
};
|
|
const appendBlockFromUrlOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: AppendBlobAppendBlockFromUrlHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobAppendBlockFromUrlExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp22],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
encryptionScope,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
sourceContentMD5,
|
|
copySourceAuthorization,
|
|
transactionalContentMD5,
|
|
sourceUrl,
|
|
sourceContentCrc64,
|
|
maxSize,
|
|
appendPosition,
|
|
sourceRange1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$4
|
|
};
|
|
const sealOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
200: {
|
|
headersMapper: AppendBlobSealHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: AppendBlobSealExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds, comp23],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
appendPosition
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$4
|
|
};
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
/** Class representing a BlockBlob. */
|
|
class BlockBlob {
|
|
/**
|
|
* Initialize a new instance of the class BlockBlob class.
|
|
* @param client Reference to the service client
|
|
*/
|
|
constructor(client) {
|
|
this.client = client;
|
|
}
|
|
/**
|
|
* The Upload Block Blob operation updates the content of an existing block blob. Updating an existing
|
|
* block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put
|
|
* Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a
|
|
* partial update of the content of a block blob, use the Put Block List operation.
|
|
* @param contentLength The length of the request.
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
upload(contentLength, body, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, uploadOperationSpec);
|
|
}
|
|
/**
|
|
* The Put Blob from URL operation creates a new Block Blob where the contents of the blob are read
|
|
* from a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are
|
|
* not supported with Put Blob from URL; the content of an existing blob is overwritten with the
|
|
* content of the new blob. To perform partial updates to a block blob’s contents using a source URL,
|
|
* use the Put Block from URL API in conjunction with Put Block List.
|
|
* @param contentLength The length of the request.
|
|
* @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to
|
|
* 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would
|
|
* appear in a request URI. The source blob must either be public or must be authenticated via a shared
|
|
* access signature.
|
|
* @param options The options parameters.
|
|
*/
|
|
putBlobFromUrl(contentLength, copySource, options) {
|
|
const operationArguments = {
|
|
contentLength,
|
|
copySource,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, putBlobFromUrlOperationSpec);
|
|
}
|
|
/**
|
|
* The Stage Block operation creates a new block to be committed as part of a blob
|
|
* @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string
|
|
* must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified
|
|
* for the blockid parameter must be the same size for each block.
|
|
* @param contentLength The length of the request.
|
|
* @param body Initial data
|
|
* @param options The options parameters.
|
|
*/
|
|
stageBlock(blockId, contentLength, body, options) {
|
|
const operationArguments = {
|
|
blockId,
|
|
contentLength,
|
|
body,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, stageBlockOperationSpec);
|
|
}
|
|
/**
|
|
* The Stage Block operation creates a new block to be committed as part of a blob where the contents
|
|
* are read from a URL.
|
|
* @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string
|
|
* must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified
|
|
* for the blockid parameter must be the same size for each block.
|
|
* @param contentLength The length of the request.
|
|
* @param sourceUrl Specify a URL to the copy source.
|
|
* @param options The options parameters.
|
|
*/
|
|
stageBlockFromURL(blockId, contentLength, sourceUrl, options) {
|
|
const operationArguments = {
|
|
blockId,
|
|
contentLength,
|
|
sourceUrl,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, stageBlockFromURLOperationSpec);
|
|
}
|
|
/**
|
|
* The Commit Block List operation writes a blob by specifying the list of block IDs that make up the
|
|
* blob. In order to be written as part of a blob, a block must have been successfully written to the
|
|
* server in a prior Put Block operation. You can call Put Block List to update a blob by uploading
|
|
* only those blocks that have changed, then committing the new and existing blocks together. You can
|
|
* do this by specifying whether to commit a block from the committed block list or from the
|
|
* uncommitted block list, or to commit the most recently uploaded version of the block, whichever list
|
|
* it may belong to.
|
|
* @param blocks Blob Blocks.
|
|
* @param options The options parameters.
|
|
*/
|
|
commitBlockList(blocks, options) {
|
|
const operationArguments = {
|
|
blocks,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, commitBlockListOperationSpec);
|
|
}
|
|
/**
|
|
* The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block
|
|
* blob
|
|
* @param listType Specifies whether to return the list of committed blocks, the list of uncommitted
|
|
* blocks, or both lists together.
|
|
* @param options The options parameters.
|
|
*/
|
|
getBlockList(listType, options) {
|
|
const operationArguments = {
|
|
listType,
|
|
options: coreHttp.operationOptionsToRequestOptionsBase(options || {})
|
|
};
|
|
return this.client.sendOperationRequest(operationArguments, getBlockListOperationSpec);
|
|
}
|
|
}
|
|
// Operation Specifications
|
|
const xmlSerializer$5 = new coreHttp.Serializer(Mappers, /* isXml */ true);
|
|
const serializer$2 = new coreHttp.Serializer(Mappers, /* isXml */ false);
|
|
const uploadOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobUploadHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobUploadExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body1,
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
encryptionScope,
|
|
tier,
|
|
blobTagsString,
|
|
legalHold1,
|
|
transactionalContentMD5,
|
|
contentType1,
|
|
accept2,
|
|
blobType2
|
|
],
|
|
mediaType: "binary",
|
|
serializer: serializer$2
|
|
};
|
|
const putBlobFromUrlOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobPutBlobFromUrlHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobPutBlobFromUrlExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [timeoutInSeconds],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
encryptionScope,
|
|
tier,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
sourceIfTags,
|
|
copySource,
|
|
blobTagsString,
|
|
sourceContentMD5,
|
|
copySourceAuthorization,
|
|
transactionalContentMD5,
|
|
blobType2,
|
|
copySourceBlobProperties
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$5
|
|
};
|
|
const stageBlockOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobStageBlockHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobStageBlockExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: body1,
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp24,
|
|
blockId
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
contentLength,
|
|
leaseId,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
encryptionScope,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64,
|
|
contentType1,
|
|
accept2
|
|
],
|
|
mediaType: "binary",
|
|
serializer: serializer$2
|
|
};
|
|
const stageBlockFromURLOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobStageBlockFromURLHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobStageBlockFromURLExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
comp24,
|
|
blockId
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
contentLength,
|
|
leaseId,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
encryptionScope,
|
|
sourceIfModifiedSince,
|
|
sourceIfUnmodifiedSince,
|
|
sourceIfMatch,
|
|
sourceIfNoneMatch,
|
|
sourceContentMD5,
|
|
copySourceAuthorization,
|
|
sourceUrl,
|
|
sourceContentCrc64,
|
|
sourceRange1
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$5
|
|
};
|
|
const commitBlockListOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "PUT",
|
|
responses: {
|
|
201: {
|
|
headersMapper: BlockBlobCommitBlockListHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobCommitBlockListExceptionHeaders
|
|
}
|
|
},
|
|
requestBody: blocks,
|
|
queryParameters: [timeoutInSeconds, comp25],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
contentType,
|
|
accept,
|
|
version,
|
|
requestId,
|
|
metadata,
|
|
leaseId,
|
|
ifModifiedSince,
|
|
ifUnmodifiedSince,
|
|
encryptionKey,
|
|
encryptionKeySha256,
|
|
encryptionAlgorithm,
|
|
ifMatch,
|
|
ifNoneMatch,
|
|
ifTags,
|
|
blobCacheControl,
|
|
blobContentType,
|
|
blobContentMD5,
|
|
blobContentEncoding,
|
|
blobContentLanguage,
|
|
blobContentDisposition,
|
|
immutabilityPolicyExpiry,
|
|
immutabilityPolicyMode,
|
|
encryptionScope,
|
|
tier,
|
|
blobTagsString,
|
|
legalHold1,
|
|
transactionalContentMD5,
|
|
transactionalContentCrc64
|
|
],
|
|
isXML: true,
|
|
contentType: "application/xml; charset=utf-8",
|
|
mediaType: "xml",
|
|
serializer: xmlSerializer$5
|
|
};
|
|
const getBlockListOperationSpec = {
|
|
path: "/{containerName}/{blob}",
|
|
httpMethod: "GET",
|
|
responses: {
|
|
200: {
|
|
bodyMapper: BlockList,
|
|
headersMapper: BlockBlobGetBlockListHeaders
|
|
},
|
|
default: {
|
|
bodyMapper: StorageError,
|
|
headersMapper: BlockBlobGetBlockListExceptionHeaders
|
|
}
|
|
},
|
|
queryParameters: [
|
|
timeoutInSeconds,
|
|
snapshot,
|
|
comp25,
|
|
listType
|
|
],
|
|
urlParameters: [url],
|
|
headerParameters: [
|
|
version,
|
|
requestId,
|
|
accept1,
|
|
leaseId,
|
|
ifTags
|
|
],
|
|
isXML: true,
|
|
serializer: xmlSerializer$5
|
|
};
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* The `@azure/logger` configuration for this package.
|
|
*/
|
|
const logger = logger$1.createClientLogger("storage-blob");
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
const SDK_VERSION = "12.8.0";
|
|
const SERVICE_VERSION = "2020-10-02";
|
|
const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB
|
|
const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB
|
|
const BLOCK_BLOB_MAX_BLOCKS = 50000;
|
|
const DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB
|
|
const DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB
|
|
const DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;
|
|
/**
|
|
* The OAuth scope to use with Azure Storage.
|
|
*/
|
|
const StorageOAuthScopes = "https://storage.azure.com/.default";
|
|
const URLConstants = {
|
|
Parameters: {
|
|
FORCE_BROWSER_NO_CACHE: "_",
|
|
SIGNATURE: "sig",
|
|
SNAPSHOT: "snapshot",
|
|
VERSIONID: "versionid",
|
|
TIMEOUT: "timeout"
|
|
}
|
|
};
|
|
const HTTPURLConnection = {
|
|
HTTP_ACCEPTED: 202,
|
|
HTTP_CONFLICT: 409,
|
|
HTTP_NOT_FOUND: 404,
|
|
HTTP_PRECON_FAILED: 412,
|
|
HTTP_RANGE_NOT_SATISFIABLE: 416
|
|
};
|
|
const 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"
|
|
};
|
|
const ETagNone = "";
|
|
const ETagAny = "*";
|
|
const SIZE_1_MB = 1 * 1024 * 1024;
|
|
const BATCH_MAX_REQUEST = 256;
|
|
const BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;
|
|
const HTTP_LINE_ENDING = "\r\n";
|
|
const HTTP_VERSION_1_1 = "HTTP/1.1";
|
|
const EncryptionAlgorithmAES25 = "AES256";
|
|
const DevelopmentConnectionString = `DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;`;
|
|
const StorageBlobLoggingAllowedHeaderNames = [
|
|
"Access-Control-Allow-Origin",
|
|
"Cache-Control",
|
|
"Content-Length",
|
|
"Content-Type",
|
|
"Date",
|
|
"Request-Id",
|
|
"traceparent",
|
|
"Transfer-Encoding",
|
|
"User-Agent",
|
|
"x-ms-client-request-id",
|
|
"x-ms-date",
|
|
"x-ms-error-code",
|
|
"x-ms-request-id",
|
|
"x-ms-return-client-request-id",
|
|
"x-ms-version",
|
|
"Accept-Ranges",
|
|
"Content-Disposition",
|
|
"Content-Encoding",
|
|
"Content-Language",
|
|
"Content-MD5",
|
|
"Content-Range",
|
|
"ETag",
|
|
"Last-Modified",
|
|
"Server",
|
|
"Vary",
|
|
"x-ms-content-crc64",
|
|
"x-ms-copy-action",
|
|
"x-ms-copy-completion-time",
|
|
"x-ms-copy-id",
|
|
"x-ms-copy-progress",
|
|
"x-ms-copy-status",
|
|
"x-ms-has-immutability-policy",
|
|
"x-ms-has-legal-hold",
|
|
"x-ms-lease-state",
|
|
"x-ms-lease-status",
|
|
"x-ms-range",
|
|
"x-ms-request-server-encrypted",
|
|
"x-ms-server-encrypted",
|
|
"x-ms-snapshot",
|
|
"x-ms-source-range",
|
|
"If-Match",
|
|
"If-Modified-Since",
|
|
"If-None-Match",
|
|
"If-Unmodified-Since",
|
|
"x-ms-access-tier",
|
|
"x-ms-access-tier-change-time",
|
|
"x-ms-access-tier-inferred",
|
|
"x-ms-account-kind",
|
|
"x-ms-archive-status",
|
|
"x-ms-blob-append-offset",
|
|
"x-ms-blob-cache-control",
|
|
"x-ms-blob-committed-block-count",
|
|
"x-ms-blob-condition-appendpos",
|
|
"x-ms-blob-condition-maxsize",
|
|
"x-ms-blob-content-disposition",
|
|
"x-ms-blob-content-encoding",
|
|
"x-ms-blob-content-language",
|
|
"x-ms-blob-content-length",
|
|
"x-ms-blob-content-md5",
|
|
"x-ms-blob-content-type",
|
|
"x-ms-blob-public-access",
|
|
"x-ms-blob-sequence-number",
|
|
"x-ms-blob-type",
|
|
"x-ms-copy-destination-snapshot",
|
|
"x-ms-creation-time",
|
|
"x-ms-default-encryption-scope",
|
|
"x-ms-delete-snapshots",
|
|
"x-ms-delete-type-permanent",
|
|
"x-ms-deny-encryption-scope-override",
|
|
"x-ms-encryption-algorithm",
|
|
"x-ms-if-sequence-number-eq",
|
|
"x-ms-if-sequence-number-le",
|
|
"x-ms-if-sequence-number-lt",
|
|
"x-ms-incremental-copy",
|
|
"x-ms-lease-action",
|
|
"x-ms-lease-break-period",
|
|
"x-ms-lease-duration",
|
|
"x-ms-lease-id",
|
|
"x-ms-lease-time",
|
|
"x-ms-page-write",
|
|
"x-ms-proposed-lease-id",
|
|
"x-ms-range-get-content-md5",
|
|
"x-ms-rehydrate-priority",
|
|
"x-ms-sequence-number-action",
|
|
"x-ms-sku-name",
|
|
"x-ms-source-content-md5",
|
|
"x-ms-source-if-match",
|
|
"x-ms-source-if-modified-since",
|
|
"x-ms-source-if-none-match",
|
|
"x-ms-source-if-unmodified-since",
|
|
"x-ms-tag-count",
|
|
"x-ms-encryption-key-sha256",
|
|
"x-ms-if-tags",
|
|
"x-ms-source-if-tags"
|
|
];
|
|
const StorageBlobLoggingAllowedQueryParameters = [
|
|
"comp",
|
|
"maxresults",
|
|
"rscc",
|
|
"rscd",
|
|
"rsce",
|
|
"rscl",
|
|
"rsct",
|
|
"se",
|
|
"si",
|
|
"sip",
|
|
"sp",
|
|
"spr",
|
|
"sr",
|
|
"srt",
|
|
"ss",
|
|
"st",
|
|
"sv",
|
|
"include",
|
|
"marker",
|
|
"prefix",
|
|
"copyid",
|
|
"restype",
|
|
"blockid",
|
|
"blocklisttype",
|
|
"delimiter",
|
|
"prevsnapshot",
|
|
"ske",
|
|
"skoid",
|
|
"sks",
|
|
"skt",
|
|
"sktid",
|
|
"skv",
|
|
"snapshot"
|
|
];
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Reserved URL characters must be properly escaped for Storage services like Blob or File.
|
|
*
|
|
* ## URL encode and escape strategy for JS SDKs
|
|
*
|
|
* When customers pass a URL string into XxxClient classes constructor, the URL string may already be URL encoded or not.
|
|
* But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL
|
|
* string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XxxClient constructors.
|
|
*
|
|
* ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK.
|
|
*
|
|
* This is what legacy V2 SDK does, simple and works for most of the cases.
|
|
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
|
|
* SDK will encode it to "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
|
|
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
|
|
* SDK will encode it to "http://account.blob.core.windows.net/con/b%253A" and send to server. A blob named "b%3A" will be created.
|
|
*
|
|
* But this strategy will make it not possible to create a blob with "?" in it's name. Because when customer URL string is
|
|
* "http://account.blob.core.windows.net/con/blob?name", the "?name" will be treated as URL paramter instead of blob name.
|
|
* If customer URL string is "http://account.blob.core.windows.net/con/blob%3Fname", a blob named "blob%3Fname" will be created.
|
|
* V2 SDK doesn't have this issue because it doesn't allow customer pass in a full URL, it accepts a separate blob name and encodeURIComponent for it.
|
|
* We cannot accept a SDK cannot create a blob name with "?". So we implement strategy two:
|
|
*
|
|
* ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters.
|
|
*
|
|
* This is what V10 Blob Go SDK does. It accepts a URL type in Go, and call url.EscapedPath() to escape the special chars unescaped.
|
|
* - When customer URL string is "http://account.blob.core.windows.net/con/b:",
|
|
* SDK will escape ":" like "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created.
|
|
* - When customer URL string is "http://account.blob.core.windows.net/con/b%3A",
|
|
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%3A" to server. A blob named "b:" will be created.
|
|
* - When customer URL string is "http://account.blob.core.windows.net/con/b%253A",
|
|
* There is no special characters, so send "http://account.blob.core.windows.net/con/b%253A" to server. A blob named "b%3A" will be created.
|
|
*
|
|
* This strategy gives us flexibility to create with any special characters. But "%" will be treated as a special characters, if the URL string
|
|
* is not encoded, there shouldn't a "%" in the URL string, otherwise the URL is not a valid URL.
|
|
* If customer needs to create a blob with "%" in it's blob name, use "%25" instead of "%". Just like above 3rd sample.
|
|
* And following URL strings are invalid:
|
|
* - "http://account.blob.core.windows.net/con/b%"
|
|
* - "http://account.blob.core.windows.net/con/b%2"
|
|
* - "http://account.blob.core.windows.net/con/b%G"
|
|
*
|
|
* Another special character is "?", use "%2F" to represent a blob name with "?" in a URL string.
|
|
*
|
|
* ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `containerClient.getBlobClient(blobName)`
|
|
*
|
|
* We will apply strategy one, and call encodeURIComponent for these parameters like blobName. Because what customers passes in is a plain name instead of a URL.
|
|
*
|
|
* @see https://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
|
|
*
|
|
* @param url -
|
|
*/
|
|
function escapeURLPath(url) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
let 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
|
|
let proxyUri = "";
|
|
if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) {
|
|
// CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri
|
|
const matchCredentials = connectionString.split(";");
|
|
for (const element of matchCredentials) {
|
|
if (element.trim().startsWith("DevelopmentStorageProxyUri=")) {
|
|
proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1];
|
|
}
|
|
}
|
|
}
|
|
return proxyUri;
|
|
}
|
|
function getValueInConnString(connectionString, argument) {
|
|
const elements = connectionString.split(";");
|
|
for (const element of elements) {
|
|
if (element.trim().startsWith(argument)) {
|
|
return element.trim().match(argument + "=(.*)")[1];
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
/**
|
|
* Extracts the parts of an Azure Storage account connection string.
|
|
*
|
|
* @param connectionString - Connection string.
|
|
* @returns String key value pairs of the storage account's url and credentials.
|
|
*/
|
|
function extractConnectionStringParts(connectionString) {
|
|
let proxyUri = "";
|
|
if (connectionString.startsWith("UseDevelopmentStorage=true")) {
|
|
// Development connection string
|
|
proxyUri = getProxyUriFromDevConnString(connectionString);
|
|
connectionString = DevelopmentConnectionString;
|
|
}
|
|
// Matching BlobEndpoint in the Account connection string
|
|
let blobEndpoint = getValueInConnString(connectionString, "BlobEndpoint");
|
|
// Slicing off '/' at the end if exists
|
|
// (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end)
|
|
blobEndpoint = blobEndpoint.endsWith("/") ? blobEndpoint.slice(0, -1) : blobEndpoint;
|
|
if (connectionString.search("DefaultEndpointsProtocol=") !== -1 &&
|
|
connectionString.search("AccountKey=") !== -1) {
|
|
// Account connection string
|
|
let defaultEndpointsProtocol = "";
|
|
let accountName = "";
|
|
let accountKey = Buffer.from("accountKey", "base64");
|
|
let 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");
|
|
const protocol = defaultEndpointsProtocol.toLowerCase();
|
|
if (protocol !== "https" && protocol !== "http") {
|
|
throw new Error("Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'");
|
|
}
|
|
endpointSuffix = getValueInConnString(connectionString, "EndpointSuffix");
|
|
if (!endpointSuffix) {
|
|
throw new Error("Invalid EndpointSuffix in the provided Connection String");
|
|
}
|
|
blobEndpoint = `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
|
|
}
|
|
if (!accountName) {
|
|
throw new Error("Invalid AccountName in the provided Connection String");
|
|
}
|
|
else if (accountKey.length === 0) {
|
|
throw new Error("Invalid AccountKey in the provided Connection String");
|
|
}
|
|
return {
|
|
kind: "AccountConnString",
|
|
url: blobEndpoint,
|
|
accountName,
|
|
accountKey,
|
|
proxyUri
|
|
};
|
|
}
|
|
else {
|
|
// SAS connection string
|
|
const accountSas = getValueInConnString(connectionString, "SharedAccessSignature");
|
|
const 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");
|
|
}
|
|
return { kind: "SASConnString", url: blobEndpoint, accountName, accountSas };
|
|
}
|
|
}
|
|
/**
|
|
* Internal escape method implemented Strategy Two mentioned in escapeURL() description.
|
|
*
|
|
* @param text -
|
|
*/
|
|
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 "/".
|
|
*
|
|
* @param url - Source URL string
|
|
* @param name - String to be appended to URL
|
|
* @returns An updated URL string
|
|
*/
|
|
function appendToURLPath(url, name) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
let 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.
|
|
*
|
|
* @param url - Source URL string
|
|
* @param name - Parameter name
|
|
* @param value - Parameter value
|
|
* @returns An updated URL string
|
|
*/
|
|
function setURLParameter(url, name, value) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
urlParsed.setQueryParameter(name, value);
|
|
return urlParsed.toString();
|
|
}
|
|
/**
|
|
* Get URL parameter by name.
|
|
*
|
|
* @param url -
|
|
* @param name -
|
|
*/
|
|
function getURLParameter(url, name) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
return urlParsed.getQueryParameterValue(name);
|
|
}
|
|
/**
|
|
* Set URL host.
|
|
*
|
|
* @param url - Source URL string
|
|
* @param host - New host string
|
|
* @returns An updated URL string
|
|
*/
|
|
function setURLHost(url, host) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
urlParsed.setHost(host);
|
|
return urlParsed.toString();
|
|
}
|
|
/**
|
|
* Get URL path from an URL string.
|
|
*
|
|
* @param url - Source URL string
|
|
*/
|
|
function getURLPath(url) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
return urlParsed.getPath();
|
|
}
|
|
/**
|
|
* Get URL scheme from an URL string.
|
|
*
|
|
* @param url - Source URL string
|
|
*/
|
|
function getURLScheme(url) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
return urlParsed.getScheme();
|
|
}
|
|
/**
|
|
* Get URL path and query from an URL string.
|
|
*
|
|
* @param url - Source URL string
|
|
*/
|
|
function getURLPathAndQuery(url) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
const pathString = urlParsed.getPath();
|
|
if (!pathString) {
|
|
throw new RangeError("Invalid url without valid path.");
|
|
}
|
|
let 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.
|
|
*
|
|
* @param url -
|
|
*/
|
|
function getURLQueries(url) {
|
|
let queryString = coreHttp.URLBuilder.parse(url).getQuery();
|
|
if (!queryString) {
|
|
return {};
|
|
}
|
|
queryString = queryString.trim();
|
|
queryString = queryString.startsWith("?") ? queryString.substr(1) : queryString;
|
|
let querySubStrings = queryString.split("&");
|
|
querySubStrings = querySubStrings.filter((value) => {
|
|
const indexOfEqual = value.indexOf("=");
|
|
const lastIndexOfEqual = value.lastIndexOf("=");
|
|
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
|
|
});
|
|
const queries = {};
|
|
for (const querySubString of querySubStrings) {
|
|
const splitResults = querySubString.split("=");
|
|
const key = splitResults[0];
|
|
const value = splitResults[1];
|
|
queries[key] = value;
|
|
}
|
|
return queries;
|
|
}
|
|
/**
|
|
* Append a string to URL query.
|
|
*
|
|
* @param url - Source URL string.
|
|
* @param queryParts - String to be appended to the URL query.
|
|
* @returns An updated URL string.
|
|
*/
|
|
function appendToURLQuery(url, queryParts) {
|
|
const urlParsed = coreHttp.URLBuilder.parse(url);
|
|
let query = urlParsed.getQuery();
|
|
if (query) {
|
|
query += "&" + queryParts;
|
|
}
|
|
else {
|
|
query = queryParts;
|
|
}
|
|
urlParsed.setQuery(query);
|
|
return urlParsed.toString();
|
|
}
|
|
/**
|
|
* Rounds a date off to seconds.
|
|
*
|
|
* @param date -
|
|
* @param withMilliseconds - If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;
|
|
* If false, YYYY-MM-DDThh:mm:ssZ will be returned.
|
|
* @returns Date string in ISO8061 format, with or without 7 milliseconds component
|
|
*/
|
|
function truncatedISO8061Date(date, withMilliseconds = true) {
|
|
// Date.toISOString() will return like "2018-10-29T06:34:36.139Z"
|
|
const dateString = date.toISOString();
|
|
return withMilliseconds
|
|
? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
|
|
: dateString.substring(0, dateString.length - 5) + "Z";
|
|
}
|
|
/**
|
|
* Base64 encode.
|
|
*
|
|
* @param content -
|
|
*/
|
|
function base64encode(content) {
|
|
return !coreHttp.isNode ? btoa(content) : Buffer.from(content).toString("base64");
|
|
}
|
|
/**
|
|
* Generate a 64 bytes base64 block ID string.
|
|
*
|
|
* @param blockIndex -
|
|
*/
|
|
function generateBlockID(blockIDPrefix, blockIndex) {
|
|
// To generate a 64 bytes base64 string, source string should be 48
|
|
const maxSourceStringLength = 48;
|
|
// A blob can have a maximum of 100,000 uncommitted blocks at any given time
|
|
const maxBlockIndexLength = 6;
|
|
const maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;
|
|
if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {
|
|
blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);
|
|
}
|
|
const res = blockIDPrefix +
|
|
padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0");
|
|
return base64encode(res);
|
|
}
|
|
/**
|
|
* Delay specified time interval.
|
|
*
|
|
* @param timeInMs -
|
|
* @param aborter -
|
|
* @param abortError -
|
|
*/
|
|
async function delay(timeInMs, aborter, abortError) {
|
|
return new Promise((resolve, reject) => {
|
|
/* eslint-disable-next-line prefer-const */
|
|
let timeout;
|
|
const abortHandler = () => {
|
|
if (timeout !== undefined) {
|
|
clearTimeout(timeout);
|
|
}
|
|
reject(abortError);
|
|
};
|
|
const resolveHandler = () => {
|
|
if (aborter !== undefined) {
|
|
aborter.removeEventListener("abort", abortHandler);
|
|
}
|
|
resolve();
|
|
};
|
|
timeout = setTimeout(resolveHandler, timeInMs);
|
|
if (aborter !== undefined) {
|
|
aborter.addEventListener("abort", abortHandler);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* String.prototype.padStart()
|
|
*
|
|
* @param currentString -
|
|
* @param targetLength -
|
|
* @param padString -
|
|
*/
|
|
function padStart(currentString, targetLength, padString = " ") {
|
|
// @ts-expect-error: TS doesn't know this code needs to run downlevel sometimes
|
|
if (String.prototype.padStart) {
|
|
return currentString.padStart(targetLength, padString);
|
|
}
|
|
padString = padString || " ";
|
|
if (currentString.length > targetLength) {
|
|
return currentString;
|
|
}
|
|
else {
|
|
targetLength = targetLength - currentString.length;
|
|
if (targetLength > padString.length) {
|
|
padString += padString.repeat(targetLength / padString.length);
|
|
}
|
|
return padString.slice(0, targetLength) + currentString;
|
|
}
|
|
}
|
|
/**
|
|
* If two strings are equal when compared case insensitive.
|
|
*
|
|
* @param str1 -
|
|
* @param str2 -
|
|
*/
|
|
function iEqual(str1, str2) {
|
|
return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();
|
|
}
|
|
/**
|
|
* Extracts account name from the url
|
|
* @param url - url to extract the account name from
|
|
* @returns with the account name
|
|
*/
|
|
function getAccountNameFromUrl(url) {
|
|
const parsedUrl = coreHttp.URLBuilder.parse(url);
|
|
let accountName;
|
|
try {
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
|
|
accountName = parsedUrl.getHost().split(".")[0];
|
|
}
|
|
else if (isIpEndpointStyle(parsedUrl)) {
|
|
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/
|
|
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/
|
|
// .getPath() -> /devstoreaccount1/
|
|
accountName = parsedUrl.getPath().split("/")[1];
|
|
}
|
|
else {
|
|
// Custom domain case: "https://customdomain.com/containername/blob".
|
|
accountName = "";
|
|
}
|
|
return accountName;
|
|
}
|
|
catch (error) {
|
|
throw new Error("Unable to extract accountName with provided information.");
|
|
}
|
|
}
|
|
function isIpEndpointStyle(parsedUrl) {
|
|
if (parsedUrl.getHost() === undefined) {
|
|
return false;
|
|
}
|
|
const host = parsedUrl.getHost() + (parsedUrl.getPort() === undefined ? "" : ":" + parsedUrl.getPort());
|
|
// Case 1: Ipv6, use a broad regex to find out candidates whose host contains two ':'.
|
|
// Case 2: localhost(:port), use broad regex to match port part.
|
|
// Case 3: Ipv4, use broad regex which just check if host contains Ipv4.
|
|
// For valid host please refer to https://man7.org/linux/man-pages/man7/hostname.7.html.
|
|
return /^.*:.*:.*$|^localhost(:[0-9]+)?$|^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}(:[0-9]+)?$/.test(host);
|
|
}
|
|
/**
|
|
* Convert Tags to encoded string.
|
|
*
|
|
* @param tags -
|
|
*/
|
|
function toBlobTagsString(tags) {
|
|
if (tags === undefined) {
|
|
return undefined;
|
|
}
|
|
const tagPairs = [];
|
|
for (const key in tags) {
|
|
if (Object.prototype.hasOwnProperty.call(tags, key)) {
|
|
const value = tags[key];
|
|
tagPairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
|
|
}
|
|
}
|
|
return tagPairs.join("&");
|
|
}
|
|
/**
|
|
* Convert Tags type to BlobTags.
|
|
*
|
|
* @param tags -
|
|
*/
|
|
function toBlobTags(tags) {
|
|
if (tags === undefined) {
|
|
return undefined;
|
|
}
|
|
const res = {
|
|
blobTagSet: []
|
|
};
|
|
for (const key in tags) {
|
|
if (Object.prototype.hasOwnProperty.call(tags, key)) {
|
|
const value = tags[key];
|
|
res.blobTagSet.push({
|
|
key,
|
|
value
|
|
});
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
/**
|
|
* Covert BlobTags to Tags type.
|
|
*
|
|
* @param tags -
|
|
*/
|
|
function toTags(tags) {
|
|
if (tags === undefined) {
|
|
return undefined;
|
|
}
|
|
const res = {};
|
|
for (const blobTag of tags.blobTagSet) {
|
|
res[blobTag.key] = blobTag.value;
|
|
}
|
|
return res;
|
|
}
|
|
/**
|
|
* Convert BlobQueryTextConfiguration to QuerySerialization type.
|
|
*
|
|
* @param textConfiguration -
|
|
*/
|
|
function toQuerySerialization(textConfiguration) {
|
|
if (textConfiguration === undefined) {
|
|
return undefined;
|
|
}
|
|
switch (textConfiguration.kind) {
|
|
case "csv":
|
|
return {
|
|
format: {
|
|
type: "delimited",
|
|
delimitedTextConfiguration: {
|
|
columnSeparator: textConfiguration.columnSeparator || ",",
|
|
fieldQuote: textConfiguration.fieldQuote || "",
|
|
recordSeparator: textConfiguration.recordSeparator,
|
|
escapeChar: textConfiguration.escapeCharacter || "",
|
|
headersPresent: textConfiguration.hasHeaders || false
|
|
}
|
|
}
|
|
};
|
|
case "json":
|
|
return {
|
|
format: {
|
|
type: "json",
|
|
jsonTextConfiguration: {
|
|
recordSeparator: textConfiguration.recordSeparator
|
|
}
|
|
}
|
|
};
|
|
case "arrow":
|
|
return {
|
|
format: {
|
|
type: "arrow",
|
|
arrowConfiguration: {
|
|
schema: textConfiguration.schema
|
|
}
|
|
}
|
|
};
|
|
case "parquet":
|
|
return {
|
|
format: {
|
|
type: "parquet"
|
|
}
|
|
};
|
|
default:
|
|
throw Error("Invalid BlobQueryTextConfiguration.");
|
|
}
|
|
}
|
|
function parseObjectReplicationRecord(objectReplicationRecord) {
|
|
if (!objectReplicationRecord) {
|
|
return undefined;
|
|
}
|
|
if ("policy-id" in objectReplicationRecord) {
|
|
// If the dictionary contains a key with policy id, we are not required to do any parsing since
|
|
// the policy id should already be stored in the ObjectReplicationDestinationPolicyId.
|
|
return undefined;
|
|
}
|
|
const orProperties = [];
|
|
for (const key in objectReplicationRecord) {
|
|
const ids = key.split("_");
|
|
const policyPrefix = "or-";
|
|
if (ids[0].startsWith(policyPrefix)) {
|
|
ids[0] = ids[0].substring(policyPrefix.length);
|
|
}
|
|
const rule = {
|
|
ruleId: ids[1],
|
|
replicationStatus: objectReplicationRecord[key]
|
|
};
|
|
const policyIndex = orProperties.findIndex((policy) => policy.policyId === ids[0]);
|
|
if (policyIndex > -1) {
|
|
orProperties[policyIndex].rules.push(rule);
|
|
}
|
|
else {
|
|
orProperties.push({
|
|
policyId: ids[0],
|
|
rules: [rule]
|
|
});
|
|
}
|
|
}
|
|
return orProperties;
|
|
}
|
|
/**
|
|
* Attach a TokenCredential to an object.
|
|
*
|
|
* @param thing -
|
|
* @param credential -
|
|
*/
|
|
function attachCredential(thing, credential) {
|
|
thing.credential = credential;
|
|
return thing;
|
|
}
|
|
function httpAuthorizationToString(httpAuthorization) {
|
|
return httpAuthorization ? httpAuthorization.scheme + " " + httpAuthorization.value : undefined;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* 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 coreHttp.BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of StorageBrowserPolicy.
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
// The base class has a protected constructor. Adding a public one to enable constructing of this class.
|
|
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param request -
|
|
*/
|
|
async sendRequest(request) {
|
|
{
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects.
|
|
*/
|
|
class StorageBrowserPolicyFactory {
|
|
/**
|
|
* Creates a StorageBrowserPolicyFactory object.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
create(nextPolicy, options) {
|
|
return new StorageBrowserPolicy(nextPolicy, options);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(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
|
|
const DEFAULT_RETRY_OPTIONS = {
|
|
maxRetryDelayInMs: 120 * 1000,
|
|
maxTries: 4,
|
|
retryDelayInMs: 4 * 1000,
|
|
retryPolicyType: exports.StorageRetryPolicyType.EXPONENTIAL,
|
|
secondaryHost: "",
|
|
tryTimeoutInMs: undefined // Use server side default timeout strategy
|
|
};
|
|
const RETRY_ABORT_ERROR = new abortController.AbortError("The operation was aborted.");
|
|
/**
|
|
* Retry policy with exponential retry and linear retry implemented.
|
|
*/
|
|
class StorageRetryPolicy extends coreHttp.BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of RetryPolicy.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
* @param retryOptions -
|
|
*/
|
|
constructor(nextPolicy, options, retryOptions = DEFAULT_RETRY_OPTIONS) {
|
|
super(nextPolicy, options);
|
|
// Initialize retry options
|
|
this.retryOptions = {
|
|
retryPolicyType: retryOptions.retryPolicyType
|
|
? retryOptions.retryPolicyType
|
|
: DEFAULT_RETRY_OPTIONS.retryPolicyType,
|
|
maxTries: retryOptions.maxTries && retryOptions.maxTries >= 1
|
|
? Math.floor(retryOptions.maxTries)
|
|
: DEFAULT_RETRY_OPTIONS.maxTries,
|
|
tryTimeoutInMs: retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0
|
|
? retryOptions.tryTimeoutInMs
|
|
: DEFAULT_RETRY_OPTIONS.tryTimeoutInMs,
|
|
retryDelayInMs: retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0
|
|
? Math.min(retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs
|
|
? retryOptions.maxRetryDelayInMs
|
|
: DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs)
|
|
: DEFAULT_RETRY_OPTIONS.retryDelayInMs,
|
|
maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0
|
|
? retryOptions.maxRetryDelayInMs
|
|
: DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs,
|
|
secondaryHost: retryOptions.secondaryHost
|
|
? retryOptions.secondaryHost
|
|
: DEFAULT_RETRY_OPTIONS.secondaryHost
|
|
};
|
|
}
|
|
/**
|
|
* Sends request.
|
|
*
|
|
* @param request -
|
|
*/
|
|
async sendRequest(request) {
|
|
return this.attemptSendRequest(request, false, 1);
|
|
}
|
|
/**
|
|
* Decide and perform next retry. Won't mutate request parameter.
|
|
*
|
|
* @param request -
|
|
* @param secondaryHas404 - If attempt was against the secondary & it returned a StatusNotFound (404), then
|
|
* the resource was not found. This may be due to replication delay. So, in this
|
|
* case, we'll never try the secondary again for this operation.
|
|
* @param attempt - How many retries has been attempted to performed, starting from 1, which includes
|
|
* the attempt will be performed by this method call.
|
|
*/
|
|
async attemptSendRequest(request, secondaryHas404, attempt) {
|
|
const newRequest = request.clone();
|
|
const isPrimaryRetry = secondaryHas404 ||
|
|
!this.retryOptions.secondaryHost ||
|
|
!(request.method === "GET" || request.method === "HEAD" || request.method === "OPTIONS") ||
|
|
attempt % 2 === 1;
|
|
if (!isPrimaryRetry) {
|
|
newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost);
|
|
}
|
|
// Set the server-side timeout query parameter "timeout=[seconds]"
|
|
if (this.retryOptions.tryTimeoutInMs) {
|
|
newRequest.url = setURLParameter(newRequest.url, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
|
|
}
|
|
let response;
|
|
try {
|
|
logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
|
|
response = await this._nextPolicy.sendRequest(newRequest);
|
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {
|
|
return response;
|
|
}
|
|
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
|
|
}
|
|
catch (err) {
|
|
logger.error(`RetryPolicy: Caught error, message: ${err.message}, code: ${err.code}`);
|
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response, err)) {
|
|
throw err;
|
|
}
|
|
}
|
|
await this.delay(isPrimaryRetry, attempt, request.abortSignal);
|
|
return this.attemptSendRequest(request, secondaryHas404, ++attempt);
|
|
}
|
|
/**
|
|
* Decide whether to retry according to last HTTP response and retry counters.
|
|
*
|
|
* @param isPrimaryRetry -
|
|
* @param attempt -
|
|
* @param response -
|
|
* @param err -
|
|
*/
|
|
shouldRetry(isPrimaryRetry, attempt, response, err) {
|
|
if (attempt >= this.retryOptions.maxTries) {
|
|
logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions
|
|
.maxTries}, no further try.`);
|
|
return false;
|
|
}
|
|
// Handle network failures, you may need to customize the list when you implement
|
|
// your own http client
|
|
const retriableErrors = [
|
|
"ETIMEDOUT",
|
|
"ESOCKETTIMEDOUT",
|
|
"ECONNREFUSED",
|
|
"ECONNRESET",
|
|
"ENOENT",
|
|
"ENOTFOUND",
|
|
"TIMEOUT",
|
|
"EPIPE",
|
|
"REQUEST_SEND_ERROR" // For default xhr based http client provided in ms-rest-js
|
|
];
|
|
if (err) {
|
|
for (const retriableError of retriableErrors) {
|
|
if (err.name.toUpperCase().includes(retriableError) ||
|
|
err.message.toUpperCase().includes(retriableError) ||
|
|
(err.code && err.code.toString().toUpperCase() === retriableError)) {
|
|
logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
// If attempt was against the secondary & it returned a StatusNotFound (404), then
|
|
// the resource was not found. This may be due to replication delay. So, in this
|
|
// case, we'll never try the secondary again for this operation.
|
|
if (response || err) {
|
|
const statusCode = response ? response.status : err ? err.statusCode : 0;
|
|
if (!isPrimaryRetry && statusCode === 404) {
|
|
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;
|
|
}
|
|
}
|
|
if ((err === null || err === void 0 ? void 0 : err.code) === "PARSE_ERROR" && (err === null || err === void 0 ? void 0 : err.message.startsWith(`Error "Error: Unclosed root tag`))) {
|
|
logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* Delay a calculated time between retries.
|
|
*
|
|
* @param isPrimaryRetry -
|
|
* @param attempt -
|
|
* @param abortSignal -
|
|
*/
|
|
async delay(isPrimaryRetry, attempt, abortSignal) {
|
|
let delayTimeInMs = 0;
|
|
if (isPrimaryRetry) {
|
|
switch (this.retryOptions.retryPolicyType) {
|
|
case 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 delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects.
|
|
*/
|
|
class StorageRetryPolicyFactory {
|
|
/**
|
|
* Creates an instance of StorageRetryPolicyFactory.
|
|
* @param retryOptions -
|
|
*/
|
|
constructor(retryOptions) {
|
|
this.retryOptions = retryOptions;
|
|
}
|
|
/**
|
|
* Creates a StorageRetryPolicy object.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
create(nextPolicy, options) {
|
|
return new StorageRetryPolicy(nextPolicy, options, this.retryOptions);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Credential policy used to sign HTTP(S) requests before sending. This is an
|
|
* abstract class.
|
|
*/
|
|
class CredentialPolicy extends coreHttp.BaseRequestPolicy {
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param request -
|
|
*/
|
|
sendRequest(request) {
|
|
return this._nextPolicy.sendRequest(this.signRequest(request));
|
|
}
|
|
/**
|
|
* Child classes must implement this method with request signing. This method
|
|
* will be executed in {@link sendRequest}.
|
|
*
|
|
* @param request -
|
|
*/
|
|
signRequest(request) {
|
|
// Child classes must override this method with request signing. This method
|
|
// will be executed in sendRequest().
|
|
return request;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources
|
|
* or for use with Shared Access Signatures (SAS).
|
|
*/
|
|
class AnonymousCredentialPolicy extends CredentialPolicy {
|
|
/**
|
|
* Creates an instance of AnonymousCredentialPolicy.
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
// The base class has a protected constructor. Adding a public one to enable constructing of this class.
|
|
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Credential is an abstract class for Azure Storage HTTP requests signing. This
|
|
* class will host an credentialPolicyCreator factory which generates CredentialPolicy.
|
|
*/
|
|
class Credential {
|
|
/**
|
|
* Creates a RequestPolicy object.
|
|
*
|
|
* @param _nextPolicy -
|
|
* @param _options -
|
|
*/
|
|
create(_nextPolicy, _options) {
|
|
throw new Error("Method should be implemented in children classes.");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* AnonymousCredential provides a credentialPolicyCreator member used to create
|
|
* AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with
|
|
* HTTP(S) requests that read public resources or for use with Shared Access
|
|
* Signatures (SAS).
|
|
*/
|
|
class AnonymousCredential extends Credential {
|
|
/**
|
|
* Creates an {@link AnonymousCredentialPolicy} object.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
create(nextPolicy, options) {
|
|
return new AnonymousCredentialPolicy(nextPolicy, options);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* TelemetryPolicy is a policy used to tag user-agent header for every requests.
|
|
*/
|
|
class TelemetryPolicy extends coreHttp.BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of TelemetryPolicy.
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
* @param telemetry -
|
|
*/
|
|
constructor(nextPolicy, options, telemetry) {
|
|
super(nextPolicy, options);
|
|
this.telemetry = telemetry;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param request -
|
|
*/
|
|
async sendRequest(request) {
|
|
{
|
|
if (!request.headers) {
|
|
request.headers = new coreHttp.HttpHeaders();
|
|
}
|
|
if (!request.headers.get(HeaderConstants.USER_AGENT)) {
|
|
request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);
|
|
}
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* TelemetryPolicyFactory is a factory class helping generating {@link TelemetryPolicy} objects.
|
|
*/
|
|
class TelemetryPolicyFactory {
|
|
/**
|
|
* Creates an instance of TelemetryPolicyFactory.
|
|
* @param telemetry -
|
|
*/
|
|
constructor(telemetry) {
|
|
const userAgentInfo = [];
|
|
{
|
|
if (telemetry) {
|
|
const telemetryString = telemetry.userAgentPrefix || "";
|
|
if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) {
|
|
userAgentInfo.push(telemetryString);
|
|
}
|
|
}
|
|
// e.g. azsdk-js-storageblob/10.0.0
|
|
const 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)
|
|
const 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 nextPolicy -
|
|
* @param options -
|
|
*/
|
|
create(nextPolicy, options) {
|
|
return new TelemetryPolicy(nextPolicy, options, this.telemetryString);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const _defaultHttpClient = new coreHttp.DefaultHttpClient();
|
|
function getCachedDefaultHttpClient() {
|
|
return _defaultHttpClient;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A helper to decide if a given argument satisfies the Pipeline contract
|
|
* @param pipeline - An argument that may be a Pipeline
|
|
* @returns true when the argument satisfies the Pipeline contract
|
|
*/
|
|
function isPipelineLike(pipeline) {
|
|
if (!pipeline || typeof pipeline !== "object") {
|
|
return false;
|
|
}
|
|
const castPipeline = pipeline;
|
|
return (Array.isArray(castPipeline.factories) &&
|
|
typeof castPipeline.options === "object" &&
|
|
typeof castPipeline.toServiceClientOptions === "function");
|
|
}
|
|
/**
|
|
* A Pipeline class containing HTTP request policies.
|
|
* You can create a default Pipeline by calling {@link newPipeline}.
|
|
* Or you can create a Pipeline with your own policies by the constructor of Pipeline.
|
|
*
|
|
* Refer to {@link newPipeline} and provided policies before implementing your
|
|
* customized Pipeline.
|
|
*/
|
|
class Pipeline {
|
|
/**
|
|
* Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.
|
|
*
|
|
* @param factories -
|
|
* @param options -
|
|
*/
|
|
constructor(factories, 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 = Object.assign(Object.assign({}, options), { httpClient: options.httpClient || getCachedDefaultHttpClient() });
|
|
}
|
|
/**
|
|
* Transfer Pipeline object to ServiceClientOptions object which is required by
|
|
* ServiceClient constructor.
|
|
*
|
|
* @returns The ServiceClientOptions object from this Pipeline.
|
|
*/
|
|
toServiceClientOptions() {
|
|
return {
|
|
httpClient: this.options.httpClient,
|
|
requestPolicyFactories: this.factories
|
|
};
|
|
}
|
|
}
|
|
/**
|
|
* Creates a new Pipeline object with Credential provided.
|
|
*
|
|
* @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
|
|
* @param pipelineOptions - Optional. Options.
|
|
* @returns A new Pipeline object.
|
|
*/
|
|
function newPipeline(credential, pipelineOptions = {}) {
|
|
if (credential === undefined) {
|
|
credential = new AnonymousCredential();
|
|
}
|
|
// 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)
|
|
const telemetryPolicy = new TelemetryPolicyFactory(pipelineOptions.userAgentOptions);
|
|
const factories = [
|
|
coreHttp.tracingPolicy({ userAgent: telemetryPolicy.telemetryString }),
|
|
coreHttp.keepAlivePolicy(pipelineOptions.keepAliveOptions),
|
|
telemetryPolicy,
|
|
coreHttp.generateClientRequestIdPolicy(),
|
|
new StorageBrowserPolicyFactory(),
|
|
new StorageRetryPolicyFactory(pipelineOptions.retryOptions),
|
|
// Default deserializationPolicy is provided by protocol layer
|
|
// Use customized XML char key of "#" so we could deserialize metadata
|
|
// with "_" key
|
|
coreHttp.deserializationPolicy(undefined, { xmlCharKey: "#" }),
|
|
coreHttp.logPolicy({
|
|
logger: logger.info,
|
|
allowedHeaderNames: StorageBlobLoggingAllowedHeaderNames,
|
|
allowedQueryParameters: StorageBlobLoggingAllowedQueryParameters
|
|
})
|
|
];
|
|
{
|
|
// policies only available in Node.js runtime, not in browsers
|
|
factories.push(coreHttp.proxyPolicy(pipelineOptions.proxyOptions));
|
|
factories.push(coreHttp.disableResponseDecompressionPolicy());
|
|
}
|
|
factories.push(coreHttp.isTokenCredential(credential)
|
|
? attachCredential(coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes), credential)
|
|
: credential);
|
|
return new Pipeline(factories, pipelineOptions);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key.
|
|
*/
|
|
class StorageSharedKeyCredentialPolicy extends CredentialPolicy {
|
|
/**
|
|
* Creates an instance of StorageSharedKeyCredentialPolicy.
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
* @param factory -
|
|
*/
|
|
constructor(nextPolicy, options, factory) {
|
|
super(nextPolicy, options);
|
|
this.factory = factory;
|
|
}
|
|
/**
|
|
* Signs request.
|
|
*
|
|
* @param request -
|
|
*/
|
|
signRequest(request) {
|
|
request.headers.set(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));
|
|
}
|
|
const 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);
|
|
const signature = this.factory.computeHMACSHA256(stringToSign);
|
|
request.headers.set(HeaderConstants.AUTHORIZATION, `SharedKey ${this.factory.accountName}:${signature}`);
|
|
// console.log(`[URL]:${request.url}`);
|
|
// console.log(`[HEADERS]:${request.headers.toString()}`);
|
|
// console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);
|
|
// console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);
|
|
return request;
|
|
}
|
|
/**
|
|
* Retrieve header value according to shared key sign rules.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
|
|
*
|
|
* @param request -
|
|
* @param headerName -
|
|
*/
|
|
getHeaderValueToSign(request, headerName) {
|
|
const value = request.headers.get(headerName);
|
|
if (!value) {
|
|
return "";
|
|
}
|
|
// When using version 2015-02-21 or later, if Content-Length is zero, then
|
|
// set the Content-Length part of the StringToSign to an empty string.
|
|
// https://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.
|
|
*
|
|
* @param request -
|
|
*/
|
|
getCanonicalizedHeadersString(request) {
|
|
let headersArray = request.headers.headersArray().filter((value) => {
|
|
return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE);
|
|
});
|
|
headersArray.sort((a, b) => {
|
|
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
|
|
});
|
|
// Remove duplicate headers
|
|
headersArray = headersArray.filter((value, index, array) => {
|
|
if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
let canonicalizedHeadersStringToSign = "";
|
|
headersArray.forEach((header) => {
|
|
canonicalizedHeadersStringToSign += `${header.name
|
|
.toLowerCase()
|
|
.trimRight()}:${header.value.trimLeft()}\n`;
|
|
});
|
|
return canonicalizedHeadersStringToSign;
|
|
}
|
|
/**
|
|
* Retrieves the webResource canonicalized resource string.
|
|
*
|
|
* @param request -
|
|
*/
|
|
getCanonicalizedResourceString(request) {
|
|
const path = getURLPath(request.url) || "/";
|
|
let canonicalizedResourceString = "";
|
|
canonicalizedResourceString += `/${this.factory.accountName}${path}`;
|
|
const queries = getURLQueries(request.url);
|
|
const lowercaseQueries = {};
|
|
if (queries) {
|
|
const queryKeys = [];
|
|
for (const key in queries) {
|
|
if (Object.prototype.hasOwnProperty.call(queries, key)) {
|
|
const lowercaseKey = key.toLowerCase();
|
|
lowercaseQueries[lowercaseKey] = queries[key];
|
|
queryKeys.push(lowercaseKey);
|
|
}
|
|
}
|
|
queryKeys.sort();
|
|
for (const key of queryKeys) {
|
|
canonicalizedResourceString += `\n${key}:${decodeURIComponent(lowercaseQueries[key])}`;
|
|
}
|
|
}
|
|
return canonicalizedResourceString;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* StorageSharedKeyCredential for account key authorization of Azure Storage service.
|
|
*/
|
|
class StorageSharedKeyCredential extends Credential {
|
|
/**
|
|
* Creates an instance of StorageSharedKeyCredential.
|
|
* @param accountName -
|
|
* @param accountKey -
|
|
*/
|
|
constructor(accountName, accountKey) {
|
|
super();
|
|
this.accountName = accountName;
|
|
this.accountKey = Buffer.from(accountKey, "base64");
|
|
}
|
|
/**
|
|
* Creates a StorageSharedKeyCredentialPolicy object.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
create(nextPolicy, options) {
|
|
return new StorageSharedKeyCredentialPolicy(nextPolicy, options, this);
|
|
}
|
|
/**
|
|
* Generates a hash signature for an HTTP request or for a SAS.
|
|
*
|
|
* @param stringToSign -
|
|
*/
|
|
computeHMACSHA256(stringToSign) {
|
|
return crypto.createHmac("sha256", this.accountKey)
|
|
.update(stringToSign, "utf8")
|
|
.digest("base64");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
* Licensed under the MIT License.
|
|
*
|
|
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
*/
|
|
const packageName = "azure-storage-blob";
|
|
const packageVersion = "12.8.0";
|
|
class StorageClientContext extends coreHttp.ServiceClient {
|
|
/**
|
|
* Initializes a new instance of the StorageClientContext class.
|
|
* @param url The URL of the service account, container, or blob that is the target of the desired
|
|
* operation.
|
|
* @param options The parameter options
|
|
*/
|
|
constructor(url, options) {
|
|
if (url === undefined) {
|
|
throw new Error("'url' cannot be null");
|
|
}
|
|
// Initializing default values for options
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
if (!options.userAgent) {
|
|
const defaultUserAgent = coreHttp.getDefaultUserAgentValue();
|
|
options.userAgent = `${packageName}/${packageVersion} ${defaultUserAgent}`;
|
|
}
|
|
super(undefined, options);
|
|
this.requestContentType = "application/json; charset=utf-8";
|
|
this.baseUri = options.endpoint || "{url}";
|
|
// Parameter assignments
|
|
this.url = url;
|
|
// Assigning values to Constant parameters
|
|
this.version = options.version || "2020-10-02";
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient}
|
|
* and etc.
|
|
*/
|
|
class StorageClient {
|
|
/**
|
|
* Creates an instance of StorageClient.
|
|
* @param url - url to resource
|
|
* @param pipeline - request policy pipeline.
|
|
*/
|
|
constructor(url, pipeline) {
|
|
// URL should be encoded and only once, protocol layer shouldn't encode URL again
|
|
this.url = 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 (const factory of this.pipeline.factories) {
|
|
if ((coreHttp.isNode && factory instanceof StorageSharedKeyCredential) ||
|
|
factory instanceof AnonymousCredential) {
|
|
this.credential = factory;
|
|
}
|
|
else if (coreHttp.isTokenCredential(factory.credential)) {
|
|
// Only works if the factory has been attached a "credential" property.
|
|
// We do that in newPipeline() when using TokenCredential.
|
|
this.credential = factory.credential;
|
|
}
|
|
}
|
|
// Override protocol layer's default content-type
|
|
const storageClientContext = this.storageClientContext;
|
|
storageClientContext.requestContentType = undefined;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Creates a span using the global tracer.
|
|
* @internal
|
|
*/
|
|
const createSpan = coreTracing.createSpanFunction({
|
|
packagePrefix: "Azure.Storage.Blob",
|
|
namespace: "Microsoft.Storage"
|
|
});
|
|
/**
|
|
* @internal
|
|
*
|
|
* Adapt the tracing options from OperationOptions to what they need to be for
|
|
* RequestOptionsBase (when we update to later OpenTelemetry versions this is now
|
|
* two separate fields, not just one).
|
|
*/
|
|
function convertTracingToRequestOptionsBase(options) {
|
|
var _a, _b;
|
|
return {
|
|
// By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.
|
|
spanOptions: (_a = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _a === void 0 ? void 0 : _a.spanOptions,
|
|
tracingContext: (_b = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _b === void 0 ? void 0 : _b.tracingContext
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a blob. Setting
|
|
* a value to true means that any SAS which uses these permissions will grant permissions for that operation. Once all
|
|
* the values are set, this should be serialized with toString and set as the permissions field on a
|
|
* {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
|
|
* the order of the permissions is particular and this class guarantees correctness.
|
|
*/
|
|
class BlobSASPermissions {
|
|
constructor() {
|
|
/**
|
|
* Specifies Read access granted.
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Specifies Add access granted.
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Specifies Create access granted.
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Specifies Write access granted.
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Specifies Delete access granted.
|
|
*/
|
|
this.delete = false;
|
|
/**
|
|
* Specifies Delete version access granted.
|
|
*/
|
|
this.deleteVersion = false;
|
|
/**
|
|
* Specfies Tag access granted.
|
|
*/
|
|
this.tag = false;
|
|
/**
|
|
* Specifies Move access granted.
|
|
*/
|
|
this.move = false;
|
|
/**
|
|
* Specifies Execute access granted.
|
|
*/
|
|
this.execute = false;
|
|
/**
|
|
* Specifies SetImmutabilityPolicy access granted.
|
|
*/
|
|
this.setImmutabilityPolicy = 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.
|
|
*
|
|
* @param permissions -
|
|
*/
|
|
static parse(permissions) {
|
|
const blobSASPermissions = new BlobSASPermissions();
|
|
for (const char of permissions) {
|
|
switch (char) {
|
|
case "r":
|
|
blobSASPermissions.read = true;
|
|
break;
|
|
case "a":
|
|
blobSASPermissions.add = true;
|
|
break;
|
|
case "c":
|
|
blobSASPermissions.create = true;
|
|
break;
|
|
case "w":
|
|
blobSASPermissions.write = true;
|
|
break;
|
|
case "d":
|
|
blobSASPermissions.delete = true;
|
|
break;
|
|
case "x":
|
|
blobSASPermissions.deleteVersion = true;
|
|
break;
|
|
case "t":
|
|
blobSASPermissions.tag = true;
|
|
break;
|
|
case "m":
|
|
blobSASPermissions.move = true;
|
|
break;
|
|
case "e":
|
|
blobSASPermissions.execute = true;
|
|
break;
|
|
case "i":
|
|
blobSASPermissions.setImmutabilityPolicy = true;
|
|
break;
|
|
default:
|
|
throw new RangeError(`Invalid permission: ${char}`);
|
|
}
|
|
}
|
|
return blobSASPermissions;
|
|
}
|
|
/**
|
|
* Creates a {@link BlobSASPermissions} from a raw object which contains same keys as it
|
|
* and boolean values for them.
|
|
*
|
|
* @param permissionLike -
|
|
*/
|
|
static from(permissionLike) {
|
|
const blobSASPermissions = new BlobSASPermissions();
|
|
if (permissionLike.read) {
|
|
blobSASPermissions.read = true;
|
|
}
|
|
if (permissionLike.add) {
|
|
blobSASPermissions.add = true;
|
|
}
|
|
if (permissionLike.create) {
|
|
blobSASPermissions.create = true;
|
|
}
|
|
if (permissionLike.write) {
|
|
blobSASPermissions.write = true;
|
|
}
|
|
if (permissionLike.delete) {
|
|
blobSASPermissions.delete = true;
|
|
}
|
|
if (permissionLike.deleteVersion) {
|
|
blobSASPermissions.deleteVersion = true;
|
|
}
|
|
if (permissionLike.tag) {
|
|
blobSASPermissions.tag = true;
|
|
}
|
|
if (permissionLike.move) {
|
|
blobSASPermissions.move = true;
|
|
}
|
|
if (permissionLike.execute) {
|
|
blobSASPermissions.execute = true;
|
|
}
|
|
if (permissionLike.setImmutabilityPolicy) {
|
|
blobSASPermissions.setImmutabilityPolicy = true;
|
|
}
|
|
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 A string which represents the BlobSASPermissions
|
|
*/
|
|
toString() {
|
|
const permissions = [];
|
|
if (this.read) {
|
|
permissions.push("r");
|
|
}
|
|
if (this.add) {
|
|
permissions.push("a");
|
|
}
|
|
if (this.create) {
|
|
permissions.push("c");
|
|
}
|
|
if (this.write) {
|
|
permissions.push("w");
|
|
}
|
|
if (this.delete) {
|
|
permissions.push("d");
|
|
}
|
|
if (this.deleteVersion) {
|
|
permissions.push("x");
|
|
}
|
|
if (this.tag) {
|
|
permissions.push("t");
|
|
}
|
|
if (this.move) {
|
|
permissions.push("m");
|
|
}
|
|
if (this.execute) {
|
|
permissions.push("e");
|
|
}
|
|
if (this.setImmutabilityPolicy) {
|
|
permissions.push("i");
|
|
}
|
|
return permissions.join("");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container.
|
|
* Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation.
|
|
* Once all the values are set, this should be serialized with toString and set as the permissions field on a
|
|
* {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
|
|
* the order of the permissions is particular and this class guarantees correctness.
|
|
*/
|
|
class ContainerSASPermissions {
|
|
constructor() {
|
|
/**
|
|
* Specifies Read access granted.
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Specifies Add access granted.
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Specifies Create access granted.
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Specifies Write access granted.
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Specifies Delete access granted.
|
|
*/
|
|
this.delete = false;
|
|
/**
|
|
* Specifies Delete version access granted.
|
|
*/
|
|
this.deleteVersion = false;
|
|
/**
|
|
* Specifies List access granted.
|
|
*/
|
|
this.list = false;
|
|
/**
|
|
* Specfies Tag access granted.
|
|
*/
|
|
this.tag = false;
|
|
/**
|
|
* Specifies Move access granted.
|
|
*/
|
|
this.move = false;
|
|
/**
|
|
* Specifies Execute access granted.
|
|
*/
|
|
this.execute = false;
|
|
/**
|
|
* Specifies SetImmutabilityPolicy access granted.
|
|
*/
|
|
this.setImmutabilityPolicy = 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.
|
|
*
|
|
* @param permissions -
|
|
*/
|
|
static parse(permissions) {
|
|
const containerSASPermissions = new ContainerSASPermissions();
|
|
for (const char of permissions) {
|
|
switch (char) {
|
|
case "r":
|
|
containerSASPermissions.read = true;
|
|
break;
|
|
case "a":
|
|
containerSASPermissions.add = true;
|
|
break;
|
|
case "c":
|
|
containerSASPermissions.create = true;
|
|
break;
|
|
case "w":
|
|
containerSASPermissions.write = true;
|
|
break;
|
|
case "d":
|
|
containerSASPermissions.delete = true;
|
|
break;
|
|
case "l":
|
|
containerSASPermissions.list = true;
|
|
break;
|
|
case "t":
|
|
containerSASPermissions.tag = true;
|
|
break;
|
|
case "x":
|
|
containerSASPermissions.deleteVersion = true;
|
|
break;
|
|
case "m":
|
|
containerSASPermissions.move = true;
|
|
break;
|
|
case "e":
|
|
containerSASPermissions.execute = true;
|
|
break;
|
|
case "i":
|
|
containerSASPermissions.setImmutabilityPolicy = true;
|
|
break;
|
|
default:
|
|
throw new RangeError(`Invalid permission ${char}`);
|
|
}
|
|
}
|
|
return containerSASPermissions;
|
|
}
|
|
/**
|
|
* Creates a {@link ContainerSASPermissions} from a raw object which contains same keys as it
|
|
* and boolean values for them.
|
|
*
|
|
* @param permissionLike -
|
|
*/
|
|
static from(permissionLike) {
|
|
const containerSASPermissions = new ContainerSASPermissions();
|
|
if (permissionLike.read) {
|
|
containerSASPermissions.read = true;
|
|
}
|
|
if (permissionLike.add) {
|
|
containerSASPermissions.add = true;
|
|
}
|
|
if (permissionLike.create) {
|
|
containerSASPermissions.create = true;
|
|
}
|
|
if (permissionLike.write) {
|
|
containerSASPermissions.write = true;
|
|
}
|
|
if (permissionLike.delete) {
|
|
containerSASPermissions.delete = true;
|
|
}
|
|
if (permissionLike.list) {
|
|
containerSASPermissions.list = true;
|
|
}
|
|
if (permissionLike.deleteVersion) {
|
|
containerSASPermissions.deleteVersion = true;
|
|
}
|
|
if (permissionLike.tag) {
|
|
containerSASPermissions.tag = true;
|
|
}
|
|
if (permissionLike.move) {
|
|
containerSASPermissions.move = true;
|
|
}
|
|
if (permissionLike.execute) {
|
|
containerSASPermissions.execute = true;
|
|
}
|
|
if (permissionLike.setImmutabilityPolicy) {
|
|
containerSASPermissions.setImmutabilityPolicy = true;
|
|
}
|
|
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
|
|
*
|
|
*/
|
|
toString() {
|
|
const permissions = [];
|
|
if (this.read) {
|
|
permissions.push("r");
|
|
}
|
|
if (this.add) {
|
|
permissions.push("a");
|
|
}
|
|
if (this.create) {
|
|
permissions.push("c");
|
|
}
|
|
if (this.write) {
|
|
permissions.push("w");
|
|
}
|
|
if (this.delete) {
|
|
permissions.push("d");
|
|
}
|
|
if (this.deleteVersion) {
|
|
permissions.push("x");
|
|
}
|
|
if (this.list) {
|
|
permissions.push("l");
|
|
}
|
|
if (this.tag) {
|
|
permissions.push("t");
|
|
}
|
|
if (this.move) {
|
|
permissions.push("m");
|
|
}
|
|
if (this.execute) {
|
|
permissions.push("e");
|
|
}
|
|
if (this.setImmutabilityPolicy) {
|
|
permissions.push("i");
|
|
}
|
|
return permissions.join("");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* 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
|
|
*/
|
|
class UserDelegationKeyCredential {
|
|
/**
|
|
* Creates an instance of UserDelegationKeyCredential.
|
|
* @param accountName -
|
|
* @param userDelegationKey -
|
|
*/
|
|
constructor(accountName, userDelegationKey) {
|
|
this.accountName = accountName;
|
|
this.userDelegationKey = userDelegationKey;
|
|
this.key = Buffer.from(userDelegationKey.value, "base64");
|
|
}
|
|
/**
|
|
* Generates a hash signature for an HTTP request or for a SAS.
|
|
*
|
|
* @param stringToSign -
|
|
*/
|
|
computeHMACSHA256(stringToSign) {
|
|
// console.log(`stringToSign: ${JSON.stringify(stringToSign)}`);
|
|
return crypto.createHmac("sha256", this.key)
|
|
.update(stringToSign, "utf8")
|
|
.digest("base64");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Generate SasIPRange format string. For example:
|
|
*
|
|
* "8.8.8.8" or "1.1.1.1-255.255.255.255"
|
|
*
|
|
* @param ipRange -
|
|
*/
|
|
function ipRangeToString(ipRange) {
|
|
return ipRange.end ? `${ipRange.start}-${ipRange.end}` : ipRange.start;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(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 {@link String} and appended to a URL directly (though caution should
|
|
* be taken here in case there are existing query parameters, which might affect the appropriate means of appending
|
|
* these query parameters).
|
|
*
|
|
* NOTE: Instances of this class are immutable.
|
|
*/
|
|
class SASQueryParameters {
|
|
constructor(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId) {
|
|
this.version = version;
|
|
this.signature = signature;
|
|
if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== "string") {
|
|
// SASQueryParametersOptions
|
|
this.permissions = permissionsOrOptions.permissions;
|
|
this.services = permissionsOrOptions.services;
|
|
this.resourceTypes = permissionsOrOptions.resourceTypes;
|
|
this.protocol = permissionsOrOptions.protocol;
|
|
this.startsOn = permissionsOrOptions.startsOn;
|
|
this.expiresOn = permissionsOrOptions.expiresOn;
|
|
this.ipRangeInner = permissionsOrOptions.ipRange;
|
|
this.identifier = permissionsOrOptions.identifier;
|
|
this.resource = permissionsOrOptions.resource;
|
|
this.cacheControl = permissionsOrOptions.cacheControl;
|
|
this.contentDisposition = permissionsOrOptions.contentDisposition;
|
|
this.contentEncoding = permissionsOrOptions.contentEncoding;
|
|
this.contentLanguage = permissionsOrOptions.contentLanguage;
|
|
this.contentType = permissionsOrOptions.contentType;
|
|
if (permissionsOrOptions.userDelegationKey) {
|
|
this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId;
|
|
this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId;
|
|
this.signedStartsOn = permissionsOrOptions.userDelegationKey.signedStartsOn;
|
|
this.signedExpiresOn = permissionsOrOptions.userDelegationKey.signedExpiresOn;
|
|
this.signedService = permissionsOrOptions.userDelegationKey.signedService;
|
|
this.signedVersion = permissionsOrOptions.userDelegationKey.signedVersion;
|
|
this.preauthorizedAgentObjectId = permissionsOrOptions.preauthorizedAgentObjectId;
|
|
this.correlationId = permissionsOrOptions.correlationId;
|
|
}
|
|
}
|
|
else {
|
|
this.services = services;
|
|
this.resourceTypes = resourceTypes;
|
|
this.expiresOn = expiresOn;
|
|
this.permissions = permissionsOrOptions;
|
|
this.protocol = protocol;
|
|
this.startsOn = startsOn;
|
|
this.ipRangeInner = ipRange;
|
|
this.identifier = identifier;
|
|
this.resource = resource;
|
|
this.cacheControl = cacheControl;
|
|
this.contentDisposition = contentDisposition;
|
|
this.contentEncoding = contentEncoding;
|
|
this.contentLanguage = contentLanguage;
|
|
this.contentType = contentType;
|
|
if (userDelegationKey) {
|
|
this.signedOid = userDelegationKey.signedObjectId;
|
|
this.signedTenantId = userDelegationKey.signedTenantId;
|
|
this.signedStartsOn = userDelegationKey.signedStartsOn;
|
|
this.signedExpiresOn = userDelegationKey.signedExpiresOn;
|
|
this.signedService = userDelegationKey.signedService;
|
|
this.signedVersion = userDelegationKey.signedVersion;
|
|
this.preauthorizedAgentObjectId = preauthorizedAgentObjectId;
|
|
this.correlationId = correlationId;
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Optional. IP range allowed for this SAS.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get ipRange() {
|
|
if (this.ipRangeInner) {
|
|
return {
|
|
end: this.ipRangeInner.end,
|
|
start: this.ipRangeInner.start
|
|
};
|
|
}
|
|
return undefined;
|
|
}
|
|
/**
|
|
* Encodes all SAS query parameters into a string that can be appended to a URL.
|
|
*
|
|
*/
|
|
toString() {
|
|
const params = [
|
|
"sv",
|
|
"ss",
|
|
"srt",
|
|
"spr",
|
|
"st",
|
|
"se",
|
|
"sip",
|
|
"si",
|
|
"skoid",
|
|
"sktid",
|
|
"skt",
|
|
"ske",
|
|
"sks",
|
|
"skv",
|
|
"sr",
|
|
"sp",
|
|
"sig",
|
|
"rscc",
|
|
"rscd",
|
|
"rsce",
|
|
"rscl",
|
|
"rsct",
|
|
"saoid",
|
|
"scid"
|
|
];
|
|
const queries = [];
|
|
for (const param of params) {
|
|
switch (param) {
|
|
case "sv":
|
|
this.tryAppendQueryParameter(queries, param, this.version);
|
|
break;
|
|
case "ss":
|
|
this.tryAppendQueryParameter(queries, param, this.services);
|
|
break;
|
|
case "srt":
|
|
this.tryAppendQueryParameter(queries, param, this.resourceTypes);
|
|
break;
|
|
case "spr":
|
|
this.tryAppendQueryParameter(queries, param, this.protocol);
|
|
break;
|
|
case "st":
|
|
this.tryAppendQueryParameter(queries, param, this.startsOn ? 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.signedTenantId);
|
|
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;
|
|
case "saoid":
|
|
this.tryAppendQueryParameter(queries, param, this.preauthorizedAgentObjectId);
|
|
break;
|
|
case "scid":
|
|
this.tryAppendQueryParameter(queries, param, this.correlationId);
|
|
break;
|
|
}
|
|
}
|
|
return queries.join("&");
|
|
}
|
|
/**
|
|
* A private helper method used to filter and append query key/value pairs into an array.
|
|
*
|
|
* @param queries -
|
|
* @param key -
|
|
* @param value -
|
|
*/
|
|
tryAppendQueryParameter(queries, key, value) {
|
|
if (!value) {
|
|
return;
|
|
}
|
|
key = encodeURIComponent(key);
|
|
value = encodeURIComponent(value);
|
|
if (key.length > 0 && value.length > 0) {
|
|
queries.push(`${key}=${value}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {
|
|
const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
const sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential
|
|
? sharedKeyCredentialOrUserDelegationKey
|
|
: undefined;
|
|
let userDelegationKeyCredential;
|
|
if (sharedKeyCredential === undefined && accountName !== undefined) {
|
|
userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey);
|
|
}
|
|
if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) {
|
|
throw TypeError("Invalid sharedKeyCredential, userDelegationKey or accountName.");
|
|
}
|
|
// Version 2019-12-12 adds support for the blob tags permission.
|
|
// Version 2018-11-09 adds support for the signed resource and signed blob snapshot time fields.
|
|
// https://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 {
|
|
// Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId.
|
|
if (version >= "2020-02-10") {
|
|
return generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential);
|
|
}
|
|
else {
|
|
return generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential);
|
|
}
|
|
}
|
|
}
|
|
if (version >= "2015-04-05") {
|
|
if (sharedKeyCredential !== undefined) {
|
|
return generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential);
|
|
}
|
|
else {
|
|
throw new RangeError("'version' must be >= '2018-11-09' when generating user delegation SAS using user delegation key.");
|
|
}
|
|
}
|
|
throw new RangeError("'version' must be >= '2015-04-05'.");
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
* IMPLEMENTATION FOR API VERSION FROM 2015-04-05 AND BEFORE 2018-11-09.
|
|
*
|
|
* Creates an instance of SASQueryParameters.
|
|
*
|
|
* Only accepts required settings needed to create a SAS. For optional settings please
|
|
* set corresponding properties directly, such as permissions, startsOn and identifier.
|
|
*
|
|
* WARNING: When identifier is not provided, permissions and expiresOn are required.
|
|
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
|
|
* this constructor.
|
|
*
|
|
* @param blobSASSignatureValues -
|
|
* @param sharedKeyCredential -
|
|
*/
|
|
function generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) {
|
|
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
|
|
if (!blobSASSignatureValues.identifier &&
|
|
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
|
|
}
|
|
let resource = "c";
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
let verifiedPermissions;
|
|
if (blobSASSignatureValues.permissions) {
|
|
if (blobSASSignatureValues.blobName) {
|
|
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
else {
|
|
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
}
|
|
// Signature is generated on the un-url-encoded values.
|
|
const stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? 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 : "",
|
|
blobSASSignatureValues.version,
|
|
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
|
|
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
|
|
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
|
|
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
|
|
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
|
|
].join("\n");
|
|
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
* IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
|
|
*
|
|
* Creates an instance of SASQueryParameters.
|
|
*
|
|
* Only accepts required settings needed to create a SAS. For optional settings please
|
|
* set corresponding properties directly, such as permissions, startsOn and identifier.
|
|
*
|
|
* WARNING: When identifier is not provided, permissions and expiresOn are required.
|
|
* You MUST assign value to identifier or expiresOn & permissions manually if you initial with
|
|
* this constructor.
|
|
*
|
|
* @param blobSASSignatureValues -
|
|
* @param sharedKeyCredential -
|
|
*/
|
|
function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) {
|
|
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
|
|
if (!blobSASSignatureValues.identifier &&
|
|
!(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
|
|
}
|
|
let resource = "c";
|
|
let timestamp = blobSASSignatureValues.snapshotTime;
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
resource = "bs";
|
|
}
|
|
else if (blobSASSignatureValues.versionId) {
|
|
resource = "bv";
|
|
timestamp = blobSASSignatureValues.versionId;
|
|
}
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
let verifiedPermissions;
|
|
if (blobSASSignatureValues.permissions) {
|
|
if (blobSASSignatureValues.blobName) {
|
|
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
else {
|
|
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
}
|
|
// Signature is generated on the un-url-encoded values.
|
|
const stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? 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 : "",
|
|
blobSASSignatureValues.version,
|
|
resource,
|
|
timestamp,
|
|
blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
|
|
blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
|
|
blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
|
|
blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
|
|
blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
|
|
].join("\n");
|
|
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
* IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
|
|
*
|
|
* Creates an instance of SASQueryParameters.
|
|
*
|
|
* Only accepts required settings needed to create a SAS. For optional settings please
|
|
* set corresponding properties directly, such as permissions, startsOn.
|
|
*
|
|
* WARNING: identifier will be ignored, permissions and expiresOn are required.
|
|
*
|
|
* @param blobSASSignatureValues -
|
|
* @param userDelegationKeyCredential -
|
|
*/
|
|
function generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) {
|
|
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
|
|
// Stored access policies are not supported for a user delegation SAS.
|
|
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
|
|
}
|
|
let resource = "c";
|
|
let timestamp = blobSASSignatureValues.snapshotTime;
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
resource = "bs";
|
|
}
|
|
else if (blobSASSignatureValues.versionId) {
|
|
resource = "bv";
|
|
timestamp = blobSASSignatureValues.versionId;
|
|
}
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
let verifiedPermissions;
|
|
if (blobSASSignatureValues.permissions) {
|
|
if (blobSASSignatureValues.blobName) {
|
|
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
else {
|
|
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
}
|
|
// Signature is generated on the un-url-encoded values.
|
|
const stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? 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 : "",
|
|
blobSASSignatureValues.version,
|
|
resource,
|
|
timestamp,
|
|
blobSASSignatureValues.cacheControl,
|
|
blobSASSignatureValues.contentDisposition,
|
|
blobSASSignatureValues.contentEncoding,
|
|
blobSASSignatureValues.contentLanguage,
|
|
blobSASSignatureValues.contentType
|
|
].join("\n");
|
|
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey);
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
* IMPLEMENTATION FOR API VERSION FROM 2020-02-10.
|
|
*
|
|
* Creates an instance of SASQueryParameters.
|
|
*
|
|
* Only accepts required settings needed to create a SAS. For optional settings please
|
|
* set corresponding properties directly, such as permissions, startsOn.
|
|
*
|
|
* WARNING: identifier will be ignored, permissions and expiresOn are required.
|
|
*
|
|
* @param blobSASSignatureValues -
|
|
* @param userDelegationKeyCredential -
|
|
*/
|
|
function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential) {
|
|
blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues);
|
|
// Stored access policies are not supported for a user delegation SAS.
|
|
if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
|
|
throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
|
|
}
|
|
let resource = "c";
|
|
let timestamp = blobSASSignatureValues.snapshotTime;
|
|
if (blobSASSignatureValues.blobName) {
|
|
resource = "b";
|
|
if (blobSASSignatureValues.snapshotTime) {
|
|
resource = "bs";
|
|
}
|
|
else if (blobSASSignatureValues.versionId) {
|
|
resource = "bv";
|
|
timestamp = blobSASSignatureValues.versionId;
|
|
}
|
|
}
|
|
// Calling parse and toString guarantees the proper ordering and throws on invalid characters.
|
|
let verifiedPermissions;
|
|
if (blobSASSignatureValues.permissions) {
|
|
if (blobSASSignatureValues.blobName) {
|
|
verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
else {
|
|
verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
|
|
}
|
|
}
|
|
// Signature is generated on the un-url-encoded values.
|
|
const stringToSign = [
|
|
verifiedPermissions ? verifiedPermissions : "",
|
|
blobSASSignatureValues.startsOn
|
|
? 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.preauthorizedAgentObjectId,
|
|
undefined,
|
|
blobSASSignatureValues.correlationId,
|
|
blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
|
|
blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
|
|
blobSASSignatureValues.version,
|
|
resource,
|
|
timestamp,
|
|
blobSASSignatureValues.cacheControl,
|
|
blobSASSignatureValues.contentDisposition,
|
|
blobSASSignatureValues.contentEncoding,
|
|
blobSASSignatureValues.contentLanguage,
|
|
blobSASSignatureValues.contentType
|
|
].join("\n");
|
|
const signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId);
|
|
}
|
|
function getCanonicalName(accountName, containerName, blobName) {
|
|
// Container: "/blob/account/containerName"
|
|
// Blob: "/blob/account/containerName/blobName"
|
|
const elements = [`/blob/${accountName}/${containerName}`];
|
|
if (blobName) {
|
|
elements.push(`/${blobName}`);
|
|
}
|
|
return elements.join("");
|
|
}
|
|
function SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) {
|
|
const version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
|
|
if (blobSASSignatureValues.snapshotTime && version < "2018-11-09") {
|
|
throw RangeError("'version' must be >= '2018-11-09' when providing 'snapshotTime'.");
|
|
}
|
|
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
|
|
throw RangeError("Must provide 'blobName' when providing 'snapshotTime'.");
|
|
}
|
|
if (blobSASSignatureValues.versionId && version < "2019-10-10") {
|
|
throw RangeError("'version' must be >= '2019-10-10' when providing 'versionId'.");
|
|
}
|
|
if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) {
|
|
throw RangeError("Must provide 'blobName' when providing 'versionId'.");
|
|
}
|
|
if (blobSASSignatureValues.permissions &&
|
|
blobSASSignatureValues.permissions.setImmutabilityPolicy &&
|
|
version < "2020-08-04") {
|
|
throw RangeError("'version' must be >= '2020-08-04' when provided 'i' permission.");
|
|
}
|
|
if (blobSASSignatureValues.permissions &&
|
|
blobSASSignatureValues.permissions.deleteVersion &&
|
|
version < "2019-10-10") {
|
|
throw RangeError("'version' must be >= '2019-10-10' when providing 'x' permission.");
|
|
}
|
|
if (blobSASSignatureValues.permissions &&
|
|
blobSASSignatureValues.permissions.tag &&
|
|
version < "2019-12-12") {
|
|
throw RangeError("'version' must be >= '2019-12-12' when providing 't' permission.");
|
|
}
|
|
if (version < "2020-02-10" &&
|
|
blobSASSignatureValues.permissions &&
|
|
(blobSASSignatureValues.permissions.move || blobSASSignatureValues.permissions.execute)) {
|
|
throw RangeError("'version' must be >= '2020-02-10' when providing the 'm' or 'e' permission.");
|
|
}
|
|
if (version < "2020-02-10" &&
|
|
(blobSASSignatureValues.preauthorizedAgentObjectId || blobSASSignatureValues.correlationId)) {
|
|
throw RangeError("'version' must be >= '2020-02-10' when providing 'preauthorizedAgentObjectId' or 'correlationId'.");
|
|
}
|
|
blobSASSignatureValues.version = version;
|
|
return blobSASSignatureValues;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}.
|
|
*/
|
|
class BlobLeaseClient {
|
|
/**
|
|
* Creates an instance of BlobLeaseClient.
|
|
* @param client - The client to make the lease operation requests.
|
|
* @param leaseId - Initial proposed lease id.
|
|
*/
|
|
constructor(client, leaseId) {
|
|
const clientContext = new StorageClientContext(client.url, client.pipeline.toServiceClientOptions());
|
|
this._url = client.url;
|
|
if (client.name === undefined) {
|
|
this._isContainer = true;
|
|
this._containerOrBlobOperation = new Container(clientContext);
|
|
}
|
|
else {
|
|
this._isContainer = false;
|
|
this._containerOrBlobOperation = new Blob$1(clientContext);
|
|
}
|
|
if (!leaseId) {
|
|
leaseId = coreHttp.generateUuid();
|
|
}
|
|
this._leaseId = leaseId;
|
|
}
|
|
/**
|
|
* Gets the lease Id.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseId() {
|
|
return this._leaseId;
|
|
}
|
|
/**
|
|
* Gets the url.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get url() {
|
|
return this._url;
|
|
}
|
|
/**
|
|
* 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 duration - Must be between 15 to 60 seconds, or infinite (-1)
|
|
* @param options - option to configure lease management operations.
|
|
* @returns Response data for acquire lease operation.
|
|
*/
|
|
async acquireLease(duration, options = {}) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const { span, updatedOptions } = createSpan("BlobLeaseClient-acquireLease", options);
|
|
if (this._isContainer &&
|
|
((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) ||
|
|
(((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) ||
|
|
((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {
|
|
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
|
|
}
|
|
try {
|
|
return await this._containerOrBlobOperation.acquireLease(Object.assign({ abortSignal: options.abortSignal, duration, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }), proposedLeaseId: this._leaseId }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 proposedLeaseId - the proposed new lease Id.
|
|
* @param options - option to configure lease management operations.
|
|
* @returns Response data for change lease operation.
|
|
*/
|
|
async changeLease(proposedLeaseId, options = {}) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const { span, updatedOptions } = createSpan("BlobLeaseClient-changeLease", options);
|
|
if (this._isContainer &&
|
|
((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) ||
|
|
(((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) ||
|
|
((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {
|
|
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
|
|
}
|
|
try {
|
|
const response = await this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, Object.assign({ abortSignal: options.abortSignal, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
this._leaseId = proposedLeaseId;
|
|
return response;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - option to configure lease management operations.
|
|
* @returns Response data for release lease operation.
|
|
*/
|
|
async releaseLease(options = {}) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const { span, updatedOptions } = createSpan("BlobLeaseClient-releaseLease", options);
|
|
if (this._isContainer &&
|
|
((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) ||
|
|
(((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) ||
|
|
((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {
|
|
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
|
|
}
|
|
try {
|
|
return await this._containerOrBlobOperation.releaseLease(this._leaseId, Object.assign({ abortSignal: options.abortSignal, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Optional option to configure lease management operations.
|
|
* @returns Response data for renew lease operation.
|
|
*/
|
|
async renewLease(options = {}) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const { span, updatedOptions } = createSpan("BlobLeaseClient-renewLease", options);
|
|
if (this._isContainer &&
|
|
((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) ||
|
|
(((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) ||
|
|
((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {
|
|
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
|
|
}
|
|
try {
|
|
return await this._containerOrBlobOperation.renewLease(this._leaseId, Object.assign({ abortSignal: options.abortSignal, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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
|
|
*
|
|
* @param breakPeriod - Break period
|
|
* @param options - Optional options to configure lease management operations.
|
|
* @returns Response data for break lease operation.
|
|
*/
|
|
async breakLease(breakPeriod, options = {}) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const { span, updatedOptions } = createSpan("BlobLeaseClient-breakLease", options);
|
|
if (this._isContainer &&
|
|
((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) ||
|
|
(((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) ||
|
|
((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) {
|
|
throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable.");
|
|
}
|
|
try {
|
|
const operationOptions = Object.assign({ abortSignal: options.abortSignal, breakPeriod, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions));
|
|
return await this._containerOrBlobOperation.breakLease(operationOptions);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* A Node.js ReadableStream will internally retry when internal ReadableStream unexpected ends.
|
|
*/
|
|
class RetriableReadableStream extends stream.Readable {
|
|
/**
|
|
* Creates an instance of RetriableReadableStream.
|
|
*
|
|
* @param source - The current ReadableStream returned from getter
|
|
* @param getter - A method calling downloading request returning
|
|
* a new ReadableStream from specified offset
|
|
* @param offset - Offset position in original data source to read
|
|
* @param count - How much data in original data source to read
|
|
* @param options -
|
|
*/
|
|
constructor(source, getter, offset, count, options = {}) {
|
|
super({ highWaterMark: options.highWaterMark });
|
|
this.retries = 0;
|
|
this.sourceDataHandler = (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();
|
|
}
|
|
};
|
|
this.sourceErrorOrEndHandler = (err) => {
|
|
if (err && err.name === "AbortError") {
|
|
this.destroy(err);
|
|
return;
|
|
}
|
|
// console.log(
|
|
// `Source stream emits end or error, offset: ${
|
|
// this.offset
|
|
// }, dest end : ${this.end}`
|
|
// );
|
|
this.removeSourceEventHandlers();
|
|
if (this.offset - 1 === this.end) {
|
|
this.push(null);
|
|
}
|
|
else if (this.offset <= this.end) {
|
|
// console.log(
|
|
// `retries: ${this.retries}, max retries: ${this.maxRetries}`
|
|
// );
|
|
if (this.retries < this.maxRetryRequests) {
|
|
this.retries += 1;
|
|
this.getter(this.offset)
|
|
.then((newSource) => {
|
|
this.source = newSource;
|
|
this.setSourceEventHandlers();
|
|
return;
|
|
})
|
|
.catch((error) => {
|
|
this.destroy(error);
|
|
});
|
|
}
|
|
else {
|
|
this.destroy(new Error(`Data corruption failure: received less data than required and reached maxRetires limitation. Received data offset: ${this
|
|
.offset - 1}, data needed offset: ${this.end}, retries: ${this.retries}, max retries: ${this.maxRetryRequests}`));
|
|
}
|
|
}
|
|
else {
|
|
this.destroy(new Error(`Data corruption failure: Received more data than original request, data needed offset is ${this.end}, received offset: ${this.offset - 1}`));
|
|
}
|
|
};
|
|
this.getter = getter;
|
|
this.source = source;
|
|
this.start = offset;
|
|
this.offset = offset;
|
|
this.end = offset + count - 1;
|
|
this.maxRetryRequests =
|
|
options.maxRetryRequests && options.maxRetryRequests >= 0 ? options.maxRetryRequests : 0;
|
|
this.onProgress = options.onProgress;
|
|
this.options = options;
|
|
this.setSourceEventHandlers();
|
|
}
|
|
_read() {
|
|
this.source.resume();
|
|
}
|
|
setSourceEventHandlers() {
|
|
this.source.on("data", this.sourceDataHandler);
|
|
this.source.on("end", this.sourceErrorOrEndHandler);
|
|
this.source.on("error", this.sourceErrorOrEndHandler);
|
|
}
|
|
removeSourceEventHandlers() {
|
|
this.source.removeListener("data", this.sourceDataHandler);
|
|
this.source.removeListener("end", this.sourceErrorOrEndHandler);
|
|
this.source.removeListener("error", this.sourceErrorOrEndHandler);
|
|
}
|
|
_destroy(error, callback) {
|
|
// remove listener from source and release source
|
|
this.removeSourceEventHandlers();
|
|
this.source.destroy();
|
|
callback(error === null ? undefined : error);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* BlobDownloadResponse implements BlobDownloadResponseParsed interface, and in Node.js runtime it will
|
|
* automatically retry when internal read stream unexpected ends. (This kind of unexpected ends cannot
|
|
* trigger retries defined in pipeline retry policy.)
|
|
*
|
|
* The {@link readableStreamBody} stream will retry underlayer, you can just use it as a normal Node.js
|
|
* Readable stream.
|
|
*/
|
|
class BlobDownloadResponse {
|
|
/**
|
|
* Creates an instance of BlobDownloadResponse.
|
|
*
|
|
* @param originalResponse -
|
|
* @param getter -
|
|
* @param offset -
|
|
* @param count -
|
|
* @param options -
|
|
*/
|
|
constructor(originalResponse, getter, offset, count, options = {}) {
|
|
this.originalResponse = originalResponse;
|
|
this.blobDownloadStream = new RetriableReadableStream(this.originalResponse.readableStreamBody, getter, offset, count, options);
|
|
}
|
|
/**
|
|
* Indicates that the service supports
|
|
* requests for partial file content.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get acceptRanges() {
|
|
return this.originalResponse.acceptRanges;
|
|
}
|
|
/**
|
|
* Returns if it was previously specified
|
|
* for the file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get cacheControl() {
|
|
return this.originalResponse.cacheControl;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the 'x-ms-content-disposition' header and specifies how to process the
|
|
* response.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentDisposition() {
|
|
return this.originalResponse.contentDisposition;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Encoding request header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentEncoding() {
|
|
return this.originalResponse.contentEncoding;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Language request header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentLanguage() {
|
|
return this.originalResponse.contentLanguage;
|
|
}
|
|
/**
|
|
* The current sequence number for a
|
|
* page blob. This header is not returned for block blobs or append blobs.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobSequenceNumber() {
|
|
return this.originalResponse.blobSequenceNumber;
|
|
}
|
|
/**
|
|
* The blob's type. Possible values include:
|
|
* 'BlockBlob', 'PageBlob', 'AppendBlob'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobType() {
|
|
return this.originalResponse.blobType;
|
|
}
|
|
/**
|
|
* The number of bytes present in the
|
|
* response body.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentLength() {
|
|
return this.originalResponse.contentLength;
|
|
}
|
|
/**
|
|
* If the file has an MD5 hash and the
|
|
* request is to read the full file, this response header is returned so that
|
|
* the client can check for message content integrity. If the request is to
|
|
* read a specified range and the 'x-ms-range-get-content-md5' is set to
|
|
* true, then the request returns an MD5 hash for the range, as long as the
|
|
* range size is less than or equal to 4 MB. If neither of these sets of
|
|
* conditions is true, then no value is returned for the 'Content-MD5'
|
|
* header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentMD5() {
|
|
return this.originalResponse.contentMD5;
|
|
}
|
|
/**
|
|
* Indicates the range of bytes returned if
|
|
* the client requested a subset of the file by setting the Range request
|
|
* header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentRange() {
|
|
return this.originalResponse.contentRange;
|
|
}
|
|
/**
|
|
* The content type specified for the file.
|
|
* The default content type is 'application/octet-stream'
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentType() {
|
|
return this.originalResponse.contentType;
|
|
}
|
|
/**
|
|
* Conclusion time of the last attempted
|
|
* Copy File operation where this file was the destination file. This value
|
|
* can specify the time of a completed, aborted, or failed copy attempt.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyCompletedOn() {
|
|
return this.originalResponse.copyCompletedOn;
|
|
}
|
|
/**
|
|
* String identifier for the last attempted Copy
|
|
* File operation where this file was the destination file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyId() {
|
|
return this.originalResponse.copyId;
|
|
}
|
|
/**
|
|
* Contains the number of bytes copied and
|
|
* the total bytes in the source in the last attempted Copy File operation
|
|
* where this file was the destination file. Can show between 0 and
|
|
* Content-Length bytes copied.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyProgress() {
|
|
return this.originalResponse.copyProgress;
|
|
}
|
|
/**
|
|
* URL up to 2KB in length that specifies the
|
|
* source file used in the last attempted Copy File operation where this file
|
|
* was the destination file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copySource() {
|
|
return this.originalResponse.copySource;
|
|
}
|
|
/**
|
|
* State of the copy operation
|
|
* identified by 'x-ms-copy-id'. Possible values include: 'pending',
|
|
* 'success', 'aborted', 'failed'
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyStatus() {
|
|
return this.originalResponse.copyStatus;
|
|
}
|
|
/**
|
|
* Only appears when
|
|
* x-ms-copy-status is failed or pending. Describes cause of fatal or
|
|
* non-fatal copy operation failure.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyStatusDescription() {
|
|
return this.originalResponse.copyStatusDescription;
|
|
}
|
|
/**
|
|
* When a blob is leased,
|
|
* specifies whether the lease is of infinite or fixed duration. Possible
|
|
* values include: 'infinite', 'fixed'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseDuration() {
|
|
return this.originalResponse.leaseDuration;
|
|
}
|
|
/**
|
|
* Lease state of the blob. Possible
|
|
* values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseState() {
|
|
return this.originalResponse.leaseState;
|
|
}
|
|
/**
|
|
* The current lease status of the
|
|
* blob. Possible values include: 'locked', 'unlocked'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseStatus() {
|
|
return this.originalResponse.leaseStatus;
|
|
}
|
|
/**
|
|
* A UTC date/time value generated by the service that
|
|
* indicates the time at which the response was initiated.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get date() {
|
|
return this.originalResponse.date;
|
|
}
|
|
/**
|
|
* The number of committed blocks
|
|
* present in the blob. This header is returned only for append blobs.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobCommittedBlockCount() {
|
|
return this.originalResponse.blobCommittedBlockCount;
|
|
}
|
|
/**
|
|
* The ETag contains a value that you can use to
|
|
* perform operations conditionally, in quotes.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get etag() {
|
|
return this.originalResponse.etag;
|
|
}
|
|
/**
|
|
* The number of tags associated with the blob
|
|
*
|
|
* @readonly
|
|
*/
|
|
get tagCount() {
|
|
return this.originalResponse.tagCount;
|
|
}
|
|
/**
|
|
* The error code.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get errorCode() {
|
|
return this.originalResponse.errorCode;
|
|
}
|
|
/**
|
|
* The value of this header is set to
|
|
* true if the file data and application metadata are completely encrypted
|
|
* using the specified algorithm. Otherwise, the value is set to false (when
|
|
* the file is unencrypted, or if only parts of the file/application metadata
|
|
* are encrypted).
|
|
*
|
|
* @readonly
|
|
*/
|
|
get isServerEncrypted() {
|
|
return this.originalResponse.isServerEncrypted;
|
|
}
|
|
/**
|
|
* If the blob has a MD5 hash, and if
|
|
* request contains range header (Range or x-ms-range), this response header
|
|
* is returned with the value of the whole blob's MD5 value. This value may
|
|
* or may not be equal to the value returned in Content-MD5 header, with the
|
|
* latter calculated from the requested range.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobContentMD5() {
|
|
return this.originalResponse.blobContentMD5;
|
|
}
|
|
/**
|
|
* Returns the date and time the file was last
|
|
* modified. Any operation that modifies the file or its properties updates
|
|
* the last modified time.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get lastModified() {
|
|
return this.originalResponse.lastModified;
|
|
}
|
|
/**
|
|
* Returns the UTC date and time generated by the service that indicates the time at which the blob was
|
|
* last read or written to.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get lastAccessed() {
|
|
return this.originalResponse.lastAccessed;
|
|
}
|
|
/**
|
|
* A name-value pair
|
|
* to associate with a file storage object.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get metadata() {
|
|
return this.originalResponse.metadata;
|
|
}
|
|
/**
|
|
* This header uniquely identifies the request
|
|
* that was made and can be used for troubleshooting the request.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get requestId() {
|
|
return this.originalResponse.requestId;
|
|
}
|
|
/**
|
|
* If a client request id header is sent in the request, this header will be present in the
|
|
* response with the same value.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get clientRequestId() {
|
|
return this.originalResponse.clientRequestId;
|
|
}
|
|
/**
|
|
* Indicates the version of the Blob service used
|
|
* to execute the request.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get version() {
|
|
return this.originalResponse.version;
|
|
}
|
|
/**
|
|
* Indicates the versionId of the downloaded blob version.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get versionId() {
|
|
return this.originalResponse.versionId;
|
|
}
|
|
/**
|
|
* Indicates whether version of this blob is a current version.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get isCurrentVersion() {
|
|
return this.originalResponse.isCurrentVersion;
|
|
}
|
|
/**
|
|
* The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
|
|
* when the blob was encrypted with a customer-provided key.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get encryptionKeySha256() {
|
|
return this.originalResponse.encryptionKeySha256;
|
|
}
|
|
/**
|
|
* If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
|
|
* true, then the request returns a crc64 for the range, as long as the range size is less than
|
|
* or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
|
|
* specified in the same request, it will fail with 400(Bad Request)
|
|
*/
|
|
get contentCrc64() {
|
|
return this.originalResponse.contentCrc64;
|
|
}
|
|
/**
|
|
* Object Replication Policy Id of the destination blob.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get objectReplicationDestinationPolicyId() {
|
|
return this.originalResponse.objectReplicationDestinationPolicyId;
|
|
}
|
|
/**
|
|
* Parsed Object Replication Policy Id, Rule Id(s) and status of the source blob.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get objectReplicationSourceProperties() {
|
|
return this.originalResponse.objectReplicationSourceProperties;
|
|
}
|
|
/**
|
|
* If this blob has been sealed.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get isSealed() {
|
|
return this.originalResponse.isSealed;
|
|
}
|
|
/**
|
|
* UTC date/time value generated by the service that indicates the time at which the blob immutability policy will expire.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get immutabilityPolicyExpiresOn() {
|
|
return this.originalResponse.immutabilityPolicyExpiresOn;
|
|
}
|
|
/**
|
|
* Indicates immutability policy mode.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get immutabilityPolicyMode() {
|
|
return this.originalResponse.immutabilityPolicyMode;
|
|
}
|
|
/**
|
|
* Indicates if a legal hold is present on the blob.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get legalHold() {
|
|
return this.originalResponse.legalHold;
|
|
}
|
|
/**
|
|
* The response body as a browser Blob.
|
|
* Always undefined in node.js.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentAsBlob() {
|
|
return this.originalResponse.blobBody;
|
|
}
|
|
/**
|
|
* The response body as a node.js Readable stream.
|
|
* Always undefined in the browser.
|
|
*
|
|
* It will automatically retry when internal read stream unexpected ends.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get readableStreamBody() {
|
|
return coreHttp.isNode ? this.blobDownloadStream : undefined;
|
|
}
|
|
/**
|
|
* The HTTP response.
|
|
*/
|
|
get _response() {
|
|
return this.originalResponse._response;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
const AVRO_SYNC_MARKER_SIZE = 16;
|
|
const AVRO_INIT_BYTES = new Uint8Array([79, 98, 106, 1]);
|
|
const AVRO_CODEC_KEY = "avro.codec";
|
|
const AVRO_SCHEMA_KEY = "avro.schema";
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
function arraysEqual(a, b) {
|
|
if (a === b)
|
|
return true;
|
|
if (a == null || b == null)
|
|
return false;
|
|
if (a.length != b.length)
|
|
return false;
|
|
for (let i = 0; i < a.length; ++i) {
|
|
if (a[i] !== b[i])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
class AvroParser {
|
|
/**
|
|
* Reads a fixed number of bytes from the stream.
|
|
*
|
|
* @param stream -
|
|
* @param length -
|
|
* @param options -
|
|
*/
|
|
static async readFixedBytes(stream, length, options = {}) {
|
|
const bytes = await stream.read(length, { abortSignal: options.abortSignal });
|
|
if (bytes.length != length) {
|
|
throw new Error("Hit stream end.");
|
|
}
|
|
return bytes;
|
|
}
|
|
/**
|
|
* Reads a single byte from the stream.
|
|
*
|
|
* @param stream -
|
|
* @param options -
|
|
*/
|
|
static async readByte(stream, options = {}) {
|
|
const buf = await AvroParser.readFixedBytes(stream, 1, options);
|
|
return buf[0];
|
|
}
|
|
// int and long are stored in variable-length zig-zag coding.
|
|
// variable-length: https://lucene.apache.org/core/3_5_0/fileformats.html#VInt
|
|
// zig-zag: https://developers.google.com/protocol-buffers/docs/encoding?csw=1#types
|
|
static async readZigZagLong(stream, options = {}) {
|
|
let zigZagEncoded = 0;
|
|
let significanceInBit = 0;
|
|
let byte, haveMoreByte, significanceInFloat;
|
|
do {
|
|
byte = await AvroParser.readByte(stream, options);
|
|
haveMoreByte = byte & 0x80;
|
|
zigZagEncoded |= (byte & 0x7f) << significanceInBit;
|
|
significanceInBit += 7;
|
|
} while (haveMoreByte && significanceInBit < 28); // bitwise operation only works for 32-bit integers
|
|
if (haveMoreByte) {
|
|
// Switch to float arithmetic
|
|
zigZagEncoded = zigZagEncoded;
|
|
significanceInFloat = 268435456; // 2 ** 28.
|
|
do {
|
|
byte = await AvroParser.readByte(stream, options);
|
|
zigZagEncoded += (byte & 0x7f) * significanceInFloat;
|
|
significanceInFloat *= 128; // 2 ** 7
|
|
} while (byte & 0x80);
|
|
const res = (zigZagEncoded % 2 ? -(zigZagEncoded + 1) : zigZagEncoded) / 2;
|
|
if (res < Number.MIN_SAFE_INTEGER || res > Number.MAX_SAFE_INTEGER) {
|
|
throw new Error("Integer overflow.");
|
|
}
|
|
return res;
|
|
}
|
|
return (zigZagEncoded >> 1) ^ -(zigZagEncoded & 1);
|
|
}
|
|
static async readLong(stream, options = {}) {
|
|
return AvroParser.readZigZagLong(stream, options);
|
|
}
|
|
static async readInt(stream, options = {}) {
|
|
return AvroParser.readZigZagLong(stream, options);
|
|
}
|
|
static async readNull() {
|
|
return null;
|
|
}
|
|
static async readBoolean(stream, options = {}) {
|
|
const b = await AvroParser.readByte(stream, options);
|
|
if (b == 1) {
|
|
return true;
|
|
}
|
|
else if (b == 0) {
|
|
return false;
|
|
}
|
|
else {
|
|
throw new Error("Byte was not a boolean.");
|
|
}
|
|
}
|
|
static async readFloat(stream, options = {}) {
|
|
const u8arr = await AvroParser.readFixedBytes(stream, 4, options);
|
|
const view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
|
|
return view.getFloat32(0, true); // littleEndian = true
|
|
}
|
|
static async readDouble(stream, options = {}) {
|
|
const u8arr = await AvroParser.readFixedBytes(stream, 8, options);
|
|
const view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
|
|
return view.getFloat64(0, true); // littleEndian = true
|
|
}
|
|
static async readBytes(stream, options = {}) {
|
|
const size = await AvroParser.readLong(stream, options);
|
|
if (size < 0) {
|
|
throw new Error("Bytes size was negative.");
|
|
}
|
|
return await stream.read(size, { abortSignal: options.abortSignal });
|
|
}
|
|
static async readString(stream, options = {}) {
|
|
const u8arr = await AvroParser.readBytes(stream, options);
|
|
// polyfill TextDecoder to be backward compatible with older
|
|
// nodejs that doesn't expose TextDecoder as a global variable
|
|
if (typeof TextDecoder === "undefined" && "function" !== "undefined") {
|
|
global.TextDecoder = __webpack_require__(669).TextDecoder;
|
|
}
|
|
// FUTURE: need TextDecoder polyfill for IE
|
|
const utf8decoder = new TextDecoder();
|
|
return utf8decoder.decode(u8arr);
|
|
}
|
|
static async readMapPair(stream, readItemMethod, options = {}) {
|
|
const key = await AvroParser.readString(stream, options);
|
|
// FUTURE: this won't work with readFixed (currently not supported) which needs a length as the parameter.
|
|
const value = await readItemMethod(stream, options);
|
|
return { key, value };
|
|
}
|
|
static async readMap(stream, readItemMethod, options = {}) {
|
|
const readPairMethod = async (stream, options = {}) => {
|
|
return await AvroParser.readMapPair(stream, readItemMethod, options);
|
|
};
|
|
const pairs = await AvroParser.readArray(stream, readPairMethod, options);
|
|
const dict = {};
|
|
for (const pair of pairs) {
|
|
dict[pair.key] = pair.value;
|
|
}
|
|
return dict;
|
|
}
|
|
static async readArray(stream, readItemMethod, options = {}) {
|
|
const items = [];
|
|
for (let count = await AvroParser.readLong(stream, options); count != 0; count = await AvroParser.readLong(stream, options)) {
|
|
if (count < 0) {
|
|
// Ignore block sizes
|
|
await AvroParser.readLong(stream, options);
|
|
count = -count;
|
|
}
|
|
while (count--) {
|
|
const item = await readItemMethod(stream, options);
|
|
items.push(item);
|
|
}
|
|
}
|
|
return items;
|
|
}
|
|
}
|
|
var AvroComplex;
|
|
(function (AvroComplex) {
|
|
AvroComplex["RECORD"] = "record";
|
|
AvroComplex["ENUM"] = "enum";
|
|
AvroComplex["ARRAY"] = "array";
|
|
AvroComplex["MAP"] = "map";
|
|
AvroComplex["UNION"] = "union";
|
|
AvroComplex["FIXED"] = "fixed";
|
|
})(AvroComplex || (AvroComplex = {}));
|
|
class AvroType {
|
|
/**
|
|
* Determines the AvroType from the Avro Schema.
|
|
*/
|
|
static fromSchema(schema) {
|
|
if (typeof schema === "string") {
|
|
return AvroType.fromStringSchema(schema);
|
|
}
|
|
else if (Array.isArray(schema)) {
|
|
return AvroType.fromArraySchema(schema);
|
|
}
|
|
else {
|
|
return AvroType.fromObjectSchema(schema);
|
|
}
|
|
}
|
|
static fromStringSchema(schema) {
|
|
switch (schema) {
|
|
case AvroPrimitive.NULL:
|
|
case AvroPrimitive.BOOLEAN:
|
|
case AvroPrimitive.INT:
|
|
case AvroPrimitive.LONG:
|
|
case AvroPrimitive.FLOAT:
|
|
case AvroPrimitive.DOUBLE:
|
|
case AvroPrimitive.BYTES:
|
|
case AvroPrimitive.STRING:
|
|
return new AvroPrimitiveType(schema);
|
|
default:
|
|
throw new Error(`Unexpected Avro type ${schema}`);
|
|
}
|
|
}
|
|
static fromArraySchema(schema) {
|
|
return new AvroUnionType(schema.map(AvroType.fromSchema));
|
|
}
|
|
static fromObjectSchema(schema) {
|
|
const type = schema.type;
|
|
// Primitives can be defined as strings or objects
|
|
try {
|
|
return AvroType.fromStringSchema(type);
|
|
}
|
|
catch (err) { }
|
|
switch (type) {
|
|
case AvroComplex.RECORD:
|
|
if (schema.aliases) {
|
|
throw new Error(`aliases currently is not supported, schema: ${schema}`);
|
|
}
|
|
if (!schema.name) {
|
|
throw new Error(`Required attribute 'name' doesn't exist on schema: ${schema}`);
|
|
}
|
|
const fields = {};
|
|
if (!schema.fields) {
|
|
throw new Error(`Required attribute 'fields' doesn't exist on schema: ${schema}`);
|
|
}
|
|
for (const field of schema.fields) {
|
|
fields[field.name] = AvroType.fromSchema(field.type);
|
|
}
|
|
return new AvroRecordType(fields, schema.name);
|
|
case AvroComplex.ENUM:
|
|
if (schema.aliases) {
|
|
throw new Error(`aliases currently is not supported, schema: ${schema}`);
|
|
}
|
|
if (!schema.symbols) {
|
|
throw new Error(`Required attribute 'symbols' doesn't exist on schema: ${schema}`);
|
|
}
|
|
return new AvroEnumType(schema.symbols);
|
|
case AvroComplex.MAP:
|
|
if (!schema.values) {
|
|
throw new Error(`Required attribute 'values' doesn't exist on schema: ${schema}`);
|
|
}
|
|
return new AvroMapType(AvroType.fromSchema(schema.values));
|
|
case AvroComplex.ARRAY: // Unused today
|
|
case AvroComplex.FIXED: // Unused today
|
|
default:
|
|
throw new Error(`Unexpected Avro type ${type} in ${schema}`);
|
|
}
|
|
}
|
|
}
|
|
var AvroPrimitive;
|
|
(function (AvroPrimitive) {
|
|
AvroPrimitive["NULL"] = "null";
|
|
AvroPrimitive["BOOLEAN"] = "boolean";
|
|
AvroPrimitive["INT"] = "int";
|
|
AvroPrimitive["LONG"] = "long";
|
|
AvroPrimitive["FLOAT"] = "float";
|
|
AvroPrimitive["DOUBLE"] = "double";
|
|
AvroPrimitive["BYTES"] = "bytes";
|
|
AvroPrimitive["STRING"] = "string";
|
|
})(AvroPrimitive || (AvroPrimitive = {}));
|
|
class AvroPrimitiveType extends AvroType {
|
|
constructor(primitive) {
|
|
super();
|
|
this._primitive = primitive;
|
|
}
|
|
async read(stream, options = {}) {
|
|
switch (this._primitive) {
|
|
case AvroPrimitive.NULL:
|
|
return await AvroParser.readNull();
|
|
case AvroPrimitive.BOOLEAN:
|
|
return await AvroParser.readBoolean(stream, options);
|
|
case AvroPrimitive.INT:
|
|
return await AvroParser.readInt(stream, options);
|
|
case AvroPrimitive.LONG:
|
|
return await AvroParser.readLong(stream, options);
|
|
case AvroPrimitive.FLOAT:
|
|
return await AvroParser.readFloat(stream, options);
|
|
case AvroPrimitive.DOUBLE:
|
|
return await AvroParser.readDouble(stream, options);
|
|
case AvroPrimitive.BYTES:
|
|
return await AvroParser.readBytes(stream, options);
|
|
case AvroPrimitive.STRING:
|
|
return await AvroParser.readString(stream, options);
|
|
default:
|
|
throw new Error("Unknown Avro Primitive");
|
|
}
|
|
}
|
|
}
|
|
class AvroEnumType extends AvroType {
|
|
constructor(symbols) {
|
|
super();
|
|
this._symbols = symbols;
|
|
}
|
|
async read(stream, options = {}) {
|
|
const value = await AvroParser.readInt(stream, options);
|
|
return this._symbols[value];
|
|
}
|
|
}
|
|
class AvroUnionType extends AvroType {
|
|
constructor(types) {
|
|
super();
|
|
this._types = types;
|
|
}
|
|
async read(stream, options = {}) {
|
|
const typeIndex = await AvroParser.readInt(stream, options);
|
|
return await this._types[typeIndex].read(stream, options);
|
|
}
|
|
}
|
|
class AvroMapType extends AvroType {
|
|
constructor(itemType) {
|
|
super();
|
|
this._itemType = itemType;
|
|
}
|
|
async read(stream, options = {}) {
|
|
const readItemMethod = async (s, options) => {
|
|
return await this._itemType.read(s, options);
|
|
};
|
|
return await AvroParser.readMap(stream, readItemMethod, options);
|
|
}
|
|
}
|
|
class AvroRecordType extends AvroType {
|
|
constructor(fields, name) {
|
|
super();
|
|
this._fields = fields;
|
|
this._name = name;
|
|
}
|
|
async read(stream, options = {}) {
|
|
const record = {};
|
|
record["$schema"] = this._name;
|
|
for (const key in this._fields) {
|
|
if (this._fields.hasOwnProperty(key)) {
|
|
record[key] = await this._fields[key].read(stream, options);
|
|
}
|
|
}
|
|
return record;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class AvroReader {
|
|
constructor(dataStream, headerStream, currentBlockOffset, indexWithinCurrentBlock) {
|
|
this._dataStream = dataStream;
|
|
this._headerStream = headerStream || dataStream;
|
|
this._initialized = false;
|
|
this._blockOffset = currentBlockOffset || 0;
|
|
this._objectIndex = indexWithinCurrentBlock || 0;
|
|
this._initialBlockOffset = currentBlockOffset || 0;
|
|
}
|
|
get blockOffset() {
|
|
return this._blockOffset;
|
|
}
|
|
get objectIndex() {
|
|
return this._objectIndex;
|
|
}
|
|
async initialize(options = {}) {
|
|
const header = await AvroParser.readFixedBytes(this._headerStream, AVRO_INIT_BYTES.length, {
|
|
abortSignal: options.abortSignal
|
|
});
|
|
if (!arraysEqual(header, AVRO_INIT_BYTES)) {
|
|
throw new Error("Stream is not an Avro file.");
|
|
}
|
|
// File metadata is written as if defined by the following map schema:
|
|
// { "type": "map", "values": "bytes"}
|
|
this._metadata = await AvroParser.readMap(this._headerStream, AvroParser.readString, {
|
|
abortSignal: options.abortSignal
|
|
});
|
|
// Validate codec
|
|
const codec = this._metadata[AVRO_CODEC_KEY];
|
|
if (!(codec == undefined || codec == "null")) {
|
|
throw new Error("Codecs are not supported");
|
|
}
|
|
// The 16-byte, randomly-generated sync marker for this file.
|
|
this._syncMarker = await AvroParser.readFixedBytes(this._headerStream, AVRO_SYNC_MARKER_SIZE, {
|
|
abortSignal: options.abortSignal
|
|
});
|
|
// Parse the schema
|
|
const schema = JSON.parse(this._metadata[AVRO_SCHEMA_KEY]);
|
|
this._itemType = AvroType.fromSchema(schema);
|
|
if (this._blockOffset == 0) {
|
|
this._blockOffset = this._initialBlockOffset + this._dataStream.position;
|
|
}
|
|
this._itemsRemainingInBlock = await AvroParser.readLong(this._dataStream, {
|
|
abortSignal: options.abortSignal
|
|
});
|
|
// skip block length
|
|
await AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal });
|
|
this._initialized = true;
|
|
if (this._objectIndex && this._objectIndex > 0) {
|
|
for (let i = 0; i < this._objectIndex; i++) {
|
|
await this._itemType.read(this._dataStream, { abortSignal: options.abortSignal });
|
|
this._itemsRemainingInBlock--;
|
|
}
|
|
}
|
|
}
|
|
hasNext() {
|
|
return !this._initialized || this._itemsRemainingInBlock > 0;
|
|
}
|
|
parseObjects(options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* parseObjects_1() {
|
|
if (!this._initialized) {
|
|
yield tslib.__await(this.initialize(options));
|
|
}
|
|
while (this.hasNext()) {
|
|
const result = yield tslib.__await(this._itemType.read(this._dataStream, {
|
|
abortSignal: options.abortSignal
|
|
}));
|
|
this._itemsRemainingInBlock--;
|
|
this._objectIndex++;
|
|
if (this._itemsRemainingInBlock == 0) {
|
|
const marker = yield tslib.__await(AvroParser.readFixedBytes(this._dataStream, AVRO_SYNC_MARKER_SIZE, {
|
|
abortSignal: options.abortSignal
|
|
}));
|
|
this._blockOffset = this._initialBlockOffset + this._dataStream.position;
|
|
this._objectIndex = 0;
|
|
if (!arraysEqual(this._syncMarker, marker)) {
|
|
throw new Error("Stream is not a valid Avro file.");
|
|
}
|
|
try {
|
|
this._itemsRemainingInBlock = yield tslib.__await(AvroParser.readLong(this._dataStream, {
|
|
abortSignal: options.abortSignal
|
|
}));
|
|
}
|
|
catch (err) {
|
|
// We hit the end of the stream.
|
|
this._itemsRemainingInBlock = 0;
|
|
}
|
|
if (this._itemsRemainingInBlock > 0) {
|
|
// Ignore block size
|
|
yield tslib.__await(AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal }));
|
|
}
|
|
}
|
|
yield yield tslib.__await(result);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
class AvroReadable {
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const ABORT_ERROR = new abortController.AbortError("Reading from the avro stream was aborted.");
|
|
class AvroReadableFromStream extends AvroReadable {
|
|
constructor(readable) {
|
|
super();
|
|
this._readable = readable;
|
|
this._position = 0;
|
|
}
|
|
toUint8Array(data) {
|
|
if (typeof data === "string") {
|
|
return Buffer.from(data);
|
|
}
|
|
return data;
|
|
}
|
|
get position() {
|
|
return this._position;
|
|
}
|
|
async read(size, options = {}) {
|
|
var _a;
|
|
if ((_a = options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
throw ABORT_ERROR;
|
|
}
|
|
if (size < 0) {
|
|
throw new Error(`size parameter should be positive: ${size}`);
|
|
}
|
|
if (size === 0) {
|
|
return new Uint8Array();
|
|
}
|
|
if (!this._readable.readable) {
|
|
throw new Error("Stream no longer readable.");
|
|
}
|
|
// See if there is already enough data.
|
|
const chunk = this._readable.read(size);
|
|
if (chunk) {
|
|
this._position += chunk.length;
|
|
// chunk.length maybe less than desired size if the stream ends.
|
|
return this.toUint8Array(chunk);
|
|
}
|
|
else {
|
|
// register callback to wait for enough data to read
|
|
return new Promise((resolve, reject) => {
|
|
const cleanUp = () => {
|
|
this._readable.removeListener("readable", readableCallback);
|
|
this._readable.removeListener("error", rejectCallback);
|
|
this._readable.removeListener("end", rejectCallback);
|
|
this._readable.removeListener("close", rejectCallback);
|
|
if (options.abortSignal) {
|
|
options.abortSignal.removeEventListener("abort", abortHandler);
|
|
}
|
|
};
|
|
const readableCallback = () => {
|
|
const chunk = this._readable.read(size);
|
|
if (chunk) {
|
|
this._position += chunk.length;
|
|
cleanUp();
|
|
// chunk.length maybe less than desired size if the stream ends.
|
|
resolve(this.toUint8Array(chunk));
|
|
}
|
|
};
|
|
const rejectCallback = () => {
|
|
cleanUp();
|
|
reject();
|
|
};
|
|
const abortHandler = () => {
|
|
cleanUp();
|
|
reject(ABORT_ERROR);
|
|
};
|
|
this._readable.on("readable", readableCallback);
|
|
this._readable.once("error", rejectCallback);
|
|
this._readable.once("end", rejectCallback);
|
|
this._readable.once("close", rejectCallback);
|
|
if (options.abortSignal) {
|
|
options.abortSignal.addEventListener("abort", abortHandler);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* A Node.js BlobQuickQueryStream will internally parse avro data stream for blob query.
|
|
*/
|
|
class BlobQuickQueryStream extends stream.Readable {
|
|
/**
|
|
* Creates an instance of BlobQuickQueryStream.
|
|
*
|
|
* @param source - The current ReadableStream returned from getter
|
|
* @param options -
|
|
*/
|
|
constructor(source, options = {}) {
|
|
super();
|
|
this.avroPaused = true;
|
|
this.source = source;
|
|
this.onProgress = options.onProgress;
|
|
this.onError = options.onError;
|
|
this.avroReader = new AvroReader(new AvroReadableFromStream(this.source));
|
|
this.avroIter = this.avroReader.parseObjects({ abortSignal: options.abortSignal });
|
|
}
|
|
_read() {
|
|
if (this.avroPaused) {
|
|
this.readInternal().catch((err) => {
|
|
this.emit("error", err);
|
|
});
|
|
}
|
|
}
|
|
async readInternal() {
|
|
this.avroPaused = false;
|
|
let avroNext;
|
|
do {
|
|
avroNext = await this.avroIter.next();
|
|
if (avroNext.done) {
|
|
break;
|
|
}
|
|
const obj = avroNext.value;
|
|
const schema = obj.$schema;
|
|
if (typeof schema !== "string") {
|
|
throw Error("Missing schema in avro record.");
|
|
}
|
|
switch (schema) {
|
|
case "com.microsoft.azure.storage.queryBlobContents.resultData":
|
|
{
|
|
const data = obj.data;
|
|
if (data instanceof Uint8Array === false) {
|
|
throw Error("Invalid data in avro result record.");
|
|
}
|
|
if (!this.push(Buffer.from(data))) {
|
|
this.avroPaused = true;
|
|
}
|
|
}
|
|
break;
|
|
case "com.microsoft.azure.storage.queryBlobContents.progress":
|
|
{
|
|
const bytesScanned = obj.bytesScanned;
|
|
if (typeof bytesScanned !== "number") {
|
|
throw Error("Invalid bytesScanned in avro progress record.");
|
|
}
|
|
if (this.onProgress) {
|
|
this.onProgress({ loadedBytes: bytesScanned });
|
|
}
|
|
}
|
|
break;
|
|
case "com.microsoft.azure.storage.queryBlobContents.end":
|
|
if (this.onProgress) {
|
|
const totalBytes = obj.totalBytes;
|
|
if (typeof totalBytes !== "number") {
|
|
throw Error("Invalid totalBytes in avro end record.");
|
|
}
|
|
this.onProgress({ loadedBytes: totalBytes });
|
|
}
|
|
this.push(null);
|
|
break;
|
|
case "com.microsoft.azure.storage.queryBlobContents.error":
|
|
if (this.onError) {
|
|
const fatal = obj.fatal;
|
|
if (typeof fatal !== "boolean") {
|
|
throw Error("Invalid fatal in avro error record.");
|
|
}
|
|
const name = obj.name;
|
|
if (typeof name !== "string") {
|
|
throw Error("Invalid name in avro error record.");
|
|
}
|
|
const description = obj.description;
|
|
if (typeof description !== "string") {
|
|
throw Error("Invalid description in avro error record.");
|
|
}
|
|
const position = obj.position;
|
|
if (typeof position !== "number") {
|
|
throw Error("Invalid position in avro error record.");
|
|
}
|
|
this.onError({
|
|
position,
|
|
name,
|
|
isFatal: fatal,
|
|
description
|
|
});
|
|
}
|
|
break;
|
|
default:
|
|
throw Error(`Unknown schema ${schema} in avro progress record.`);
|
|
}
|
|
} while (!avroNext.done && !this.avroPaused);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* BlobQueryResponse implements BlobDownloadResponseModel interface, and in Node.js runtime it will
|
|
* parse avor data returned by blob query.
|
|
*/
|
|
class BlobQueryResponse {
|
|
/**
|
|
* Creates an instance of BlobQueryResponse.
|
|
*
|
|
* @param originalResponse -
|
|
* @param options -
|
|
*/
|
|
constructor(originalResponse, options = {}) {
|
|
this.originalResponse = originalResponse;
|
|
this.blobDownloadStream = new BlobQuickQueryStream(this.originalResponse.readableStreamBody, options);
|
|
}
|
|
/**
|
|
* Indicates that the service supports
|
|
* requests for partial file content.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get acceptRanges() {
|
|
return this.originalResponse.acceptRanges;
|
|
}
|
|
/**
|
|
* Returns if it was previously specified
|
|
* for the file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get cacheControl() {
|
|
return this.originalResponse.cacheControl;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the 'x-ms-content-disposition' header and specifies how to process the
|
|
* response.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentDisposition() {
|
|
return this.originalResponse.contentDisposition;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Encoding request header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentEncoding() {
|
|
return this.originalResponse.contentEncoding;
|
|
}
|
|
/**
|
|
* Returns the value that was specified
|
|
* for the Content-Language request header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentLanguage() {
|
|
return this.originalResponse.contentLanguage;
|
|
}
|
|
/**
|
|
* The current sequence number for a
|
|
* page blob. This header is not returned for block blobs or append blobs.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobSequenceNumber() {
|
|
return this.originalResponse.blobSequenceNumber;
|
|
}
|
|
/**
|
|
* The blob's type. Possible values include:
|
|
* 'BlockBlob', 'PageBlob', 'AppendBlob'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobType() {
|
|
return this.originalResponse.blobType;
|
|
}
|
|
/**
|
|
* The number of bytes present in the
|
|
* response body.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentLength() {
|
|
return this.originalResponse.contentLength;
|
|
}
|
|
/**
|
|
* If the file has an MD5 hash and the
|
|
* request is to read the full file, this response header is returned so that
|
|
* the client can check for message content integrity. If the request is to
|
|
* read a specified range and the 'x-ms-range-get-content-md5' is set to
|
|
* true, then the request returns an MD5 hash for the range, as long as the
|
|
* range size is less than or equal to 4 MB. If neither of these sets of
|
|
* conditions is true, then no value is returned for the 'Content-MD5'
|
|
* header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentMD5() {
|
|
return this.originalResponse.contentMD5;
|
|
}
|
|
/**
|
|
* Indicates the range of bytes returned if
|
|
* the client requested a subset of the file by setting the Range request
|
|
* header.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentRange() {
|
|
return this.originalResponse.contentRange;
|
|
}
|
|
/**
|
|
* The content type specified for the file.
|
|
* The default content type is 'application/octet-stream'
|
|
*
|
|
* @readonly
|
|
*/
|
|
get contentType() {
|
|
return this.originalResponse.contentType;
|
|
}
|
|
/**
|
|
* Conclusion time of the last attempted
|
|
* Copy File operation where this file was the destination file. This value
|
|
* can specify the time of a completed, aborted, or failed copy attempt.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyCompletedOn() {
|
|
return undefined;
|
|
}
|
|
/**
|
|
* String identifier for the last attempted Copy
|
|
* File operation where this file was the destination file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyId() {
|
|
return this.originalResponse.copyId;
|
|
}
|
|
/**
|
|
* Contains the number of bytes copied and
|
|
* the total bytes in the source in the last attempted Copy File operation
|
|
* where this file was the destination file. Can show between 0 and
|
|
* Content-Length bytes copied.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyProgress() {
|
|
return this.originalResponse.copyProgress;
|
|
}
|
|
/**
|
|
* URL up to 2KB in length that specifies the
|
|
* source file used in the last attempted Copy File operation where this file
|
|
* was the destination file.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copySource() {
|
|
return this.originalResponse.copySource;
|
|
}
|
|
/**
|
|
* State of the copy operation
|
|
* identified by 'x-ms-copy-id'. Possible values include: 'pending',
|
|
* 'success', 'aborted', 'failed'
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyStatus() {
|
|
return this.originalResponse.copyStatus;
|
|
}
|
|
/**
|
|
* Only appears when
|
|
* x-ms-copy-status is failed or pending. Describes cause of fatal or
|
|
* non-fatal copy operation failure.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get copyStatusDescription() {
|
|
return this.originalResponse.copyStatusDescription;
|
|
}
|
|
/**
|
|
* When a blob is leased,
|
|
* specifies whether the lease is of infinite or fixed duration. Possible
|
|
* values include: 'infinite', 'fixed'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseDuration() {
|
|
return this.originalResponse.leaseDuration;
|
|
}
|
|
/**
|
|
* Lease state of the blob. Possible
|
|
* values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseState() {
|
|
return this.originalResponse.leaseState;
|
|
}
|
|
/**
|
|
* The current lease status of the
|
|
* blob. Possible values include: 'locked', 'unlocked'.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get leaseStatus() {
|
|
return this.originalResponse.leaseStatus;
|
|
}
|
|
/**
|
|
* A UTC date/time value generated by the service that
|
|
* indicates the time at which the response was initiated.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get date() {
|
|
return this.originalResponse.date;
|
|
}
|
|
/**
|
|
* The number of committed blocks
|
|
* present in the blob. This header is returned only for append blobs.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobCommittedBlockCount() {
|
|
return this.originalResponse.blobCommittedBlockCount;
|
|
}
|
|
/**
|
|
* The ETag contains a value that you can use to
|
|
* perform operations conditionally, in quotes.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get etag() {
|
|
return this.originalResponse.etag;
|
|
}
|
|
/**
|
|
* The error code.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get errorCode() {
|
|
return this.originalResponse.errorCode;
|
|
}
|
|
/**
|
|
* The value of this header is set to
|
|
* true if the file data and application metadata are completely encrypted
|
|
* using the specified algorithm. Otherwise, the value is set to false (when
|
|
* the file is unencrypted, or if only parts of the file/application metadata
|
|
* are encrypted).
|
|
*
|
|
* @readonly
|
|
*/
|
|
get isServerEncrypted() {
|
|
return this.originalResponse.isServerEncrypted;
|
|
}
|
|
/**
|
|
* If the blob has a MD5 hash, and if
|
|
* request contains range header (Range or x-ms-range), this response header
|
|
* is returned with the value of the whole blob's MD5 value. This value may
|
|
* or may not be equal to the value returned in Content-MD5 header, with the
|
|
* latter calculated from the requested range.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobContentMD5() {
|
|
return this.originalResponse.blobContentMD5;
|
|
}
|
|
/**
|
|
* Returns the date and time the file was last
|
|
* modified. Any operation that modifies the file or its properties updates
|
|
* the last modified time.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get lastModified() {
|
|
return this.originalResponse.lastModified;
|
|
}
|
|
/**
|
|
* A name-value pair
|
|
* to associate with a file storage object.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get metadata() {
|
|
return this.originalResponse.metadata;
|
|
}
|
|
/**
|
|
* This header uniquely identifies the request
|
|
* that was made and can be used for troubleshooting the request.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get requestId() {
|
|
return this.originalResponse.requestId;
|
|
}
|
|
/**
|
|
* If a client request id header is sent in the request, this header will be present in the
|
|
* response with the same value.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get clientRequestId() {
|
|
return this.originalResponse.clientRequestId;
|
|
}
|
|
/**
|
|
* Indicates the version of the File service used
|
|
* to execute the request.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get version() {
|
|
return this.originalResponse.version;
|
|
}
|
|
/**
|
|
* The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
|
|
* when the blob was encrypted with a customer-provided key.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get encryptionKeySha256() {
|
|
return this.originalResponse.encryptionKeySha256;
|
|
}
|
|
/**
|
|
* If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
|
|
* true, then the request returns a crc64 for the range, as long as the range size is less than
|
|
* or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
|
|
* specified in the same request, it will fail with 400(Bad Request)
|
|
*/
|
|
get contentCrc64() {
|
|
return this.originalResponse.contentCrc64;
|
|
}
|
|
/**
|
|
* The response body as a browser Blob.
|
|
* Always undefined in node.js.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get blobBody() {
|
|
return undefined;
|
|
}
|
|
/**
|
|
* The response body as a node.js Readable stream.
|
|
* Always undefined in the browser.
|
|
*
|
|
* It will parse avor data returned by blob query.
|
|
*
|
|
* @readonly
|
|
*/
|
|
get readableStreamBody() {
|
|
return coreHttp.isNode ? this.blobDownloadStream : undefined;
|
|
}
|
|
/**
|
|
* The HTTP response.
|
|
*/
|
|
get _response() {
|
|
return this.originalResponse._response;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
(function (BlockBlobTier) {
|
|
/**
|
|
* Optimized for storing data that is accessed frequently.
|
|
*/
|
|
BlockBlobTier["Hot"] = "Hot";
|
|
/**
|
|
* Optimized for storing data that is infrequently accessed and stored for at least 30 days.
|
|
*/
|
|
BlockBlobTier["Cool"] = "Cool";
|
|
/**
|
|
* Optimized for storing data that is rarely accessed 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.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Function that converts PageRange and ClearRange to a common Range object.
|
|
* PageRange and ClearRange have start and end while Range offset and count
|
|
* this function normalizes to Range.
|
|
* @param response - Model PageBlob Range response
|
|
*/
|
|
function rangeResponseFromModel(response) {
|
|
const pageRange = (response._response.parsedBody.pageRange || []).map((x) => ({
|
|
offset: x.start,
|
|
count: x.end - x.start
|
|
}));
|
|
const clearRange = (response._response.parsedBody.clearRange || []).map((x) => ({
|
|
offset: x.start,
|
|
count: x.end - x.start
|
|
}));
|
|
return Object.assign(Object.assign({}, response), { pageRange,
|
|
clearRange, _response: Object.assign(Object.assign({}, response._response), { parsedBody: {
|
|
pageRange,
|
|
clearRange
|
|
} }) });
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* This is the poller returned by {@link BlobClient.beginCopyFromURL}.
|
|
* This can not be instantiated directly outside of this package.
|
|
*
|
|
* @hidden
|
|
*/
|
|
class BlobBeginCopyFromUrlPoller extends coreLro.Poller {
|
|
constructor(options) {
|
|
const { blobClient, copySource, intervalInMs = 15000, onProgress, resumeFrom, startCopyFromURLOptions } = options;
|
|
let state;
|
|
if (resumeFrom) {
|
|
state = JSON.parse(resumeFrom).state;
|
|
}
|
|
const operation = makeBlobBeginCopyFromURLPollOperation(Object.assign(Object.assign({}, state), { blobClient,
|
|
copySource,
|
|
startCopyFromURLOptions }));
|
|
super(operation);
|
|
if (typeof onProgress === "function") {
|
|
this.onProgress(onProgress);
|
|
}
|
|
this.intervalInMs = intervalInMs;
|
|
}
|
|
delay() {
|
|
return coreHttp.delay(this.intervalInMs);
|
|
}
|
|
}
|
|
/**
|
|
* Note: Intentionally using function expression over arrow function expression
|
|
* so that the function can be invoked with a different context.
|
|
* This affects what `this` refers to.
|
|
* @hidden
|
|
*/
|
|
const cancel = async function cancel(options = {}) {
|
|
const state = this.state;
|
|
const { copyId } = state;
|
|
if (state.isCompleted) {
|
|
return makeBlobBeginCopyFromURLPollOperation(state);
|
|
}
|
|
if (!copyId) {
|
|
state.isCancelled = true;
|
|
return makeBlobBeginCopyFromURLPollOperation(state);
|
|
}
|
|
// if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
|
|
await state.blobClient.abortCopyFromURL(copyId, {
|
|
abortSignal: options.abortSignal
|
|
});
|
|
state.isCancelled = true;
|
|
return makeBlobBeginCopyFromURLPollOperation(state);
|
|
};
|
|
/**
|
|
* Note: Intentionally using function expression over arrow function expression
|
|
* so that the function can be invoked with a different context.
|
|
* This affects what `this` refers to.
|
|
* @hidden
|
|
*/
|
|
const update = async function update(options = {}) {
|
|
const state = this.state;
|
|
const { blobClient, copySource, startCopyFromURLOptions } = state;
|
|
if (!state.isStarted) {
|
|
state.isStarted = true;
|
|
const result = await blobClient.startCopyFromURL(copySource, startCopyFromURLOptions);
|
|
// copyId is needed to abort
|
|
state.copyId = result.copyId;
|
|
if (result.copyStatus === "success") {
|
|
state.result = result;
|
|
state.isCompleted = true;
|
|
}
|
|
}
|
|
else if (!state.isCompleted) {
|
|
try {
|
|
const result = await state.blobClient.getProperties({ abortSignal: options.abortSignal });
|
|
const { copyStatus, copyProgress } = result;
|
|
const prevCopyProgress = state.copyProgress;
|
|
if (copyProgress) {
|
|
state.copyProgress = copyProgress;
|
|
}
|
|
if (copyStatus === "pending" &&
|
|
copyProgress !== prevCopyProgress &&
|
|
typeof options.fireProgress === "function") {
|
|
// trigger in setTimeout, or swallow error?
|
|
options.fireProgress(state);
|
|
}
|
|
else if (copyStatus === "success") {
|
|
state.result = result;
|
|
state.isCompleted = true;
|
|
}
|
|
else if (copyStatus === "failed") {
|
|
state.error = new Error(`Blob copy failed with reason: "${result.copyStatusDescription || "unknown"}"`);
|
|
state.isCompleted = true;
|
|
}
|
|
}
|
|
catch (err) {
|
|
state.error = err;
|
|
state.isCompleted = true;
|
|
}
|
|
}
|
|
return makeBlobBeginCopyFromURLPollOperation(state);
|
|
};
|
|
/**
|
|
* Note: Intentionally using function expression over arrow function expression
|
|
* so that the function can be invoked with a different context.
|
|
* This affects what `this` refers to.
|
|
* @hidden
|
|
*/
|
|
const toString = function toString() {
|
|
return JSON.stringify({ state: this.state }, (key, value) => {
|
|
// remove blobClient from serialized state since a client can't be hydrated from this info.
|
|
if (key === "blobClient") {
|
|
return undefined;
|
|
}
|
|
return value;
|
|
});
|
|
};
|
|
/**
|
|
* Creates a poll operation given the provided state.
|
|
* @hidden
|
|
*/
|
|
function makeBlobBeginCopyFromURLPollOperation(state) {
|
|
return {
|
|
state: Object.assign({}, state),
|
|
cancel,
|
|
toString,
|
|
update
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Generate a range string. For example:
|
|
*
|
|
* "bytes=255-" or "bytes=0-511"
|
|
*
|
|
* @param iRange -
|
|
*/
|
|
function rangeToString(iRange) {
|
|
if (iRange.offset < 0) {
|
|
throw new RangeError(`Range.offset cannot be smaller than 0.`);
|
|
}
|
|
if (iRange.count && iRange.count <= 0) {
|
|
throw new RangeError(`Range.count must be larger than 0. Leave it undefined if you want a range from offset to the end.`);
|
|
}
|
|
return iRange.count
|
|
? `bytes=${iRange.offset}-${iRange.offset + iRange.count - 1}`
|
|
: `bytes=${iRange.offset}-`;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* States for Batch.
|
|
*/
|
|
var BatchStates;
|
|
(function (BatchStates) {
|
|
BatchStates[BatchStates["Good"] = 0] = "Good";
|
|
BatchStates[BatchStates["Error"] = 1] = "Error";
|
|
})(BatchStates || (BatchStates = {}));
|
|
/**
|
|
* Batch provides basic parallel execution with concurrency limits.
|
|
* Will stop execute left operations when one of the executed operation throws an error.
|
|
* But Batch cannot cancel ongoing operations, you need to cancel them by yourself.
|
|
*/
|
|
class Batch {
|
|
/**
|
|
* Creates an instance of Batch.
|
|
* @param concurrency -
|
|
*/
|
|
constructor(concurrency = 5) {
|
|
/**
|
|
* Number of active operations under execution.
|
|
*/
|
|
this.actives = 0;
|
|
/**
|
|
* Number of completed operations under execution.
|
|
*/
|
|
this.completed = 0;
|
|
/**
|
|
* Offset of next operation to be executed.
|
|
*/
|
|
this.offset = 0;
|
|
/**
|
|
* Operation array to be executed.
|
|
*/
|
|
this.operations = [];
|
|
/**
|
|
* States of Batch. When an error happens, state will turn into error.
|
|
* Batch will stop execute left operations.
|
|
*/
|
|
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 -
|
|
*/
|
|
addOperation(operation) {
|
|
this.operations.push(async () => {
|
|
try {
|
|
this.actives++;
|
|
await operation();
|
|
this.actives--;
|
|
this.completed++;
|
|
this.parallelExecute();
|
|
}
|
|
catch (error) {
|
|
this.emitter.emit("error", error);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Start execute operations in the queue.
|
|
*
|
|
*/
|
|
async do() {
|
|
if (this.operations.length === 0) {
|
|
return Promise.resolve();
|
|
}
|
|
this.parallelExecute();
|
|
return new Promise((resolve, reject) => {
|
|
this.emitter.on("finish", resolve);
|
|
this.emitter.on("error", (error) => {
|
|
this.state = BatchStates.Error;
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* Get next operation to be executed. Return null when reaching ends.
|
|
*
|
|
*/
|
|
nextOperation() {
|
|
if (this.offset < this.operations.length) {
|
|
return this.operations[this.offset++];
|
|
}
|
|
return null;
|
|
}
|
|
/**
|
|
* Start execute operations. One one the most important difference between
|
|
* this method with do() is that do() wraps as an sync method.
|
|
*
|
|
*/
|
|
parallelExecute() {
|
|
if (this.state === BatchStates.Error) {
|
|
return;
|
|
}
|
|
if (this.completed >= this.operations.length) {
|
|
this.emitter.emit("finish");
|
|
return;
|
|
}
|
|
while (this.actives < this.concurrency) {
|
|
const operation = this.nextOperation();
|
|
if (operation) {
|
|
operation();
|
|
}
|
|
else {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* This class generates a readable stream from the data in an array of buffers.
|
|
*/
|
|
class BuffersStream extends stream.Readable {
|
|
/**
|
|
* Creates an instance of BuffersStream that will emit the data
|
|
* contained in the array of buffers.
|
|
*
|
|
* @param buffers - Array of buffers containing the data
|
|
* @param byteLength - The total length of data contained in the buffers
|
|
*/
|
|
constructor(buffers, byteLength, options) {
|
|
super(options);
|
|
this.buffers = buffers;
|
|
this.byteLength = byteLength;
|
|
this.byteOffsetInCurrentBuffer = 0;
|
|
this.bufferIndex = 0;
|
|
this.pushedBytesLength = 0;
|
|
// check byteLength is no larger than buffers[] total length
|
|
let buffersLength = 0;
|
|
for (const buf of this.buffers) {
|
|
buffersLength += buf.byteLength;
|
|
}
|
|
if (buffersLength < this.byteLength) {
|
|
throw new Error("Data size shouldn't be larger than the total length of buffers.");
|
|
}
|
|
}
|
|
/**
|
|
* Internal _read() that will be called when the stream wants to pull more data in.
|
|
*
|
|
* @param size - Optional. The size of data to be read
|
|
*/
|
|
_read(size) {
|
|
if (this.pushedBytesLength >= this.byteLength) {
|
|
this.push(null);
|
|
}
|
|
if (!size) {
|
|
size = this.readableHighWaterMark;
|
|
}
|
|
const outBuffers = [];
|
|
let i = 0;
|
|
while (i < size && this.pushedBytesLength < this.byteLength) {
|
|
// The last buffer may be longer than the data it contains.
|
|
const remainingDataInAllBuffers = this.byteLength - this.pushedBytesLength;
|
|
const remainingCapacityInThisBuffer = this.buffers[this.bufferIndex].byteLength - this.byteOffsetInCurrentBuffer;
|
|
const remaining = Math.min(remainingCapacityInThisBuffer, remainingDataInAllBuffers);
|
|
if (remaining > size - i) {
|
|
// chunkSize = size - i
|
|
const end = this.byteOffsetInCurrentBuffer + size - i;
|
|
outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end));
|
|
this.pushedBytesLength += size - i;
|
|
this.byteOffsetInCurrentBuffer = end;
|
|
i = size;
|
|
break;
|
|
}
|
|
else {
|
|
// chunkSize = remaining
|
|
const end = this.byteOffsetInCurrentBuffer + remaining;
|
|
outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end));
|
|
if (remaining === remainingCapacityInThisBuffer) {
|
|
// this.buffers[this.bufferIndex] used up, shift to next one
|
|
this.byteOffsetInCurrentBuffer = 0;
|
|
this.bufferIndex++;
|
|
}
|
|
else {
|
|
this.byteOffsetInCurrentBuffer = end;
|
|
}
|
|
this.pushedBytesLength += remaining;
|
|
i += remaining;
|
|
}
|
|
}
|
|
if (outBuffers.length > 1) {
|
|
this.push(Buffer.concat(outBuffers));
|
|
}
|
|
else if (outBuffers.length === 1) {
|
|
this.push(outBuffers[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* maxBufferLength is max size of each buffer in the pooled buffers.
|
|
*/
|
|
// Can't use import as Typescript doesn't recognize "buffer".
|
|
const maxBufferLength = __webpack_require__(293).constants.MAX_LENGTH;
|
|
/**
|
|
* This class provides a buffer container which conceptually has no hard size limit.
|
|
* It accepts a capacity, an array of input buffers and the total length of input data.
|
|
* It will allocate an internal "buffer" of the capacity and fill the data in the input buffers
|
|
* into the internal "buffer" serially with respect to the total length.
|
|
* Then by calling PooledBuffer.getReadableStream(), you can get a readable stream
|
|
* assembled from all the data in the internal "buffer".
|
|
*/
|
|
class PooledBuffer {
|
|
constructor(capacity, buffers, totalLength) {
|
|
/**
|
|
* Internal buffers used to keep the data.
|
|
* Each buffer has a length of the maxBufferLength except last one.
|
|
*/
|
|
this.buffers = [];
|
|
this.capacity = capacity;
|
|
this._size = 0;
|
|
// allocate
|
|
const bufferNum = Math.ceil(capacity / maxBufferLength);
|
|
for (let i = 0; i < bufferNum; i++) {
|
|
let len = i === bufferNum - 1 ? capacity % maxBufferLength : maxBufferLength;
|
|
if (len === 0) {
|
|
len = maxBufferLength;
|
|
}
|
|
this.buffers.push(Buffer.allocUnsafe(len));
|
|
}
|
|
if (buffers) {
|
|
this.fill(buffers, totalLength);
|
|
}
|
|
}
|
|
/**
|
|
* The size of the data contained in the pooled buffers.
|
|
*/
|
|
get size() {
|
|
return this._size;
|
|
}
|
|
/**
|
|
* Fill the internal buffers with data in the input buffers serially
|
|
* with respect to the total length and the total capacity of the internal buffers.
|
|
* Data copied will be shift out of the input buffers.
|
|
*
|
|
* @param buffers - Input buffers containing the data to be filled in the pooled buffer
|
|
* @param totalLength - Total length of the data to be filled in.
|
|
*
|
|
*/
|
|
fill(buffers, totalLength) {
|
|
this._size = Math.min(this.capacity, totalLength);
|
|
let i = 0, j = 0, targetOffset = 0, sourceOffset = 0, totalCopiedNum = 0;
|
|
while (totalCopiedNum < this._size) {
|
|
const source = buffers[i];
|
|
const target = this.buffers[j];
|
|
const copiedNum = source.copy(target, targetOffset, sourceOffset);
|
|
totalCopiedNum += copiedNum;
|
|
sourceOffset += copiedNum;
|
|
targetOffset += copiedNum;
|
|
if (sourceOffset === source.length) {
|
|
i++;
|
|
sourceOffset = 0;
|
|
}
|
|
if (targetOffset === target.length) {
|
|
j++;
|
|
targetOffset = 0;
|
|
}
|
|
}
|
|
// clear copied from source buffers
|
|
buffers.splice(0, i);
|
|
if (buffers.length > 0) {
|
|
buffers[0] = buffers[0].slice(sourceOffset);
|
|
}
|
|
}
|
|
/**
|
|
* Get the readable stream assembled from all the data in the internal buffers.
|
|
*
|
|
*/
|
|
getReadableStream() {
|
|
return new BuffersStream(this.buffers, this.size);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* This class accepts a Node.js Readable stream as input, and keeps reading data
|
|
* from the stream into the internal buffer structure, until it reaches maxBuffers.
|
|
* Every available buffer will try to trigger outgoingHandler.
|
|
*
|
|
* The internal buffer structure includes an incoming buffer array, and a outgoing
|
|
* buffer array. The incoming buffer array includes the "empty" buffers can be filled
|
|
* with new incoming data. The outgoing array includes the filled buffers to be
|
|
* handled by outgoingHandler. Every above buffer size is defined by parameter bufferSize.
|
|
*
|
|
* NUM_OF_ALL_BUFFERS = BUFFERS_IN_INCOMING + BUFFERS_IN_OUTGOING + BUFFERS_UNDER_HANDLING
|
|
*
|
|
* NUM_OF_ALL_BUFFERS lesser than or equal to maxBuffers
|
|
*
|
|
* PERFORMANCE IMPROVEMENT TIPS:
|
|
* 1. Input stream highWaterMark is better to set a same value with bufferSize
|
|
* parameter, which will avoid Buffer.concat() operations.
|
|
* 2. concurrency should set a smaller value than maxBuffers, which is helpful to
|
|
* reduce the possibility when a outgoing handler waits for the stream data.
|
|
* in this situation, outgoing handlers are blocked.
|
|
* Outgoing queue shouldn't be empty.
|
|
*/
|
|
class BufferScheduler {
|
|
/**
|
|
* Creates an instance of BufferScheduler.
|
|
*
|
|
* @param readable - A Node.js Readable stream
|
|
* @param bufferSize - Buffer size of every maintained buffer
|
|
* @param maxBuffers - How many buffers can be allocated
|
|
* @param outgoingHandler - An async function scheduled to be
|
|
* triggered when a buffer fully filled
|
|
* with stream data
|
|
* @param concurrency - Concurrency of executing outgoingHandlers (>0)
|
|
* @param encoding - [Optional] Encoding of Readable stream when it's a string stream
|
|
*/
|
|
constructor(readable, bufferSize, maxBuffers, outgoingHandler, concurrency, encoding) {
|
|
/**
|
|
* An internal event emitter.
|
|
*/
|
|
this.emitter = new events.EventEmitter();
|
|
/**
|
|
* An internal offset marker to track data offset in bytes of next outgoingHandler.
|
|
*/
|
|
this.offset = 0;
|
|
/**
|
|
* An internal marker to track whether stream is end.
|
|
*/
|
|
this.isStreamEnd = false;
|
|
/**
|
|
* An internal marker to track whether stream or outgoingHandler returns error.
|
|
*/
|
|
this.isError = false;
|
|
/**
|
|
* How many handlers are executing.
|
|
*/
|
|
this.executingOutgoingHandlers = 0;
|
|
/**
|
|
* How many buffers have been allocated.
|
|
*/
|
|
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.
|
|
*/
|
|
this.unresolvedDataArray = [];
|
|
/**
|
|
* How much data consisted in unresolvedDataArray.
|
|
*/
|
|
this.unresolvedLength = 0;
|
|
/**
|
|
* The array includes all the available buffers can be used to fill data from stream.
|
|
*/
|
|
this.incoming = [];
|
|
/**
|
|
* The array (queue) includes all the buffers filled from stream data.
|
|
*/
|
|
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.
|
|
*
|
|
*/
|
|
async do() {
|
|
return new Promise((resolve, reject) => {
|
|
this.readable.on("data", (data) => {
|
|
data = typeof data === "string" ? Buffer.from(data, this.encoding) : data;
|
|
this.appendUnresolvedData(data);
|
|
if (!this.resolveData()) {
|
|
this.readable.pause();
|
|
}
|
|
});
|
|
this.readable.on("error", (err) => {
|
|
this.emitter.emit("error", err);
|
|
});
|
|
this.readable.on("end", () => {
|
|
this.isStreamEnd = true;
|
|
this.emitter.emit("checkEnd");
|
|
});
|
|
this.emitter.on("error", (err) => {
|
|
this.isError = true;
|
|
this.readable.pause();
|
|
reject(err);
|
|
});
|
|
this.emitter.on("checkEnd", () => {
|
|
if (this.outgoing.length > 0) {
|
|
this.triggerOutgoingHandlers();
|
|
return;
|
|
}
|
|
if (this.isStreamEnd && this.executingOutgoingHandlers === 0) {
|
|
if (this.unresolvedLength > 0 && this.unresolvedLength < this.bufferSize) {
|
|
const buffer = this.shiftBufferFromUnresolvedDataArray();
|
|
this.outgoingHandler(() => buffer.getReadableStream(), buffer.size, this.offset)
|
|
.then(resolve)
|
|
.catch(reject);
|
|
}
|
|
else if (this.unresolvedLength >= this.bufferSize) {
|
|
return;
|
|
}
|
|
else {
|
|
resolve();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
/**
|
|
* Insert a new data into unresolved array.
|
|
*
|
|
* @param data -
|
|
*/
|
|
appendUnresolvedData(data) {
|
|
this.unresolvedDataArray.push(data);
|
|
this.unresolvedLength += data.length;
|
|
}
|
|
/**
|
|
* Try to shift a buffer with size in blockSize. The buffer returned may be less
|
|
* than blockSize when data in unresolvedDataArray is less than bufferSize.
|
|
*
|
|
*/
|
|
shiftBufferFromUnresolvedDataArray(buffer) {
|
|
if (!buffer) {
|
|
buffer = new PooledBuffer(this.bufferSize, this.unresolvedDataArray, this.unresolvedLength);
|
|
}
|
|
else {
|
|
buffer.fill(this.unresolvedDataArray, this.unresolvedLength);
|
|
}
|
|
this.unresolvedLength -= buffer.size;
|
|
return buffer;
|
|
}
|
|
/**
|
|
* Resolve data in unresolvedDataArray. For every buffer with size in blockSize
|
|
* shifted, it will try to get (or allocate a buffer) from incoming, and fill it,
|
|
* then push it into outgoing to be handled by outgoing handler.
|
|
*
|
|
* Return false when available buffers in incoming are not enough, else true.
|
|
*
|
|
* @returns Return false when buffers in incoming are not enough, else true.
|
|
*/
|
|
resolveData() {
|
|
while (this.unresolvedLength >= this.bufferSize) {
|
|
let buffer;
|
|
if (this.incoming.length > 0) {
|
|
buffer = this.incoming.shift();
|
|
this.shiftBufferFromUnresolvedDataArray(buffer);
|
|
}
|
|
else {
|
|
if (this.numBuffers < this.maxBuffers) {
|
|
buffer = this.shiftBufferFromUnresolvedDataArray();
|
|
this.numBuffers++;
|
|
}
|
|
else {
|
|
// No available buffer, wait for buffer returned
|
|
return false;
|
|
}
|
|
}
|
|
this.outgoing.push(buffer);
|
|
this.triggerOutgoingHandlers();
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* Try to trigger a outgoing handler for every buffer in outgoing. Stop when
|
|
* concurrency reaches.
|
|
*/
|
|
async triggerOutgoingHandlers() {
|
|
let buffer;
|
|
do {
|
|
if (this.executingOutgoingHandlers >= this.concurrency) {
|
|
return;
|
|
}
|
|
buffer = this.outgoing.shift();
|
|
if (buffer) {
|
|
this.triggerOutgoingHandler(buffer);
|
|
}
|
|
} while (buffer);
|
|
}
|
|
/**
|
|
* Trigger a outgoing handler for a buffer shifted from outgoing.
|
|
*
|
|
* @param buffer -
|
|
*/
|
|
async triggerOutgoingHandler(buffer) {
|
|
const bufferLength = buffer.size;
|
|
this.executingOutgoingHandlers++;
|
|
this.offset += bufferLength;
|
|
try {
|
|
await this.outgoingHandler(() => buffer.getReadableStream(), bufferLength, this.offset - bufferLength);
|
|
}
|
|
catch (err) {
|
|
this.emitter.emit("error", err);
|
|
return;
|
|
}
|
|
this.executingOutgoingHandlers--;
|
|
this.reuseBuffer(buffer);
|
|
this.emitter.emit("checkEnd");
|
|
}
|
|
/**
|
|
* Return buffer used by outgoing handler into incoming.
|
|
*
|
|
* @param buffer -
|
|
*/
|
|
reuseBuffer(buffer) {
|
|
this.incoming.push(buffer);
|
|
if (!this.isError && this.resolveData() && !this.isStreamEnd) {
|
|
this.readable.resume();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Reads a readable stream into buffer. Fill the buffer from offset to end.
|
|
*
|
|
* @param stream - A Node.js Readable stream
|
|
* @param buffer - Buffer to be filled, length must greater than or equal to offset
|
|
* @param offset - From which position in the buffer to be filled, inclusive
|
|
* @param end - To which position in the buffer to be filled, exclusive
|
|
* @param encoding - Encoding of the Readable stream
|
|
*/
|
|
async function streamToBuffer(stream, buffer, offset, end, encoding) {
|
|
let pos = 0; // Position in stream
|
|
const count = end - offset; // Total amount of data needed in stream
|
|
return new Promise((resolve, reject) => {
|
|
stream.on("readable", () => {
|
|
if (pos >= count) {
|
|
resolve();
|
|
return;
|
|
}
|
|
let chunk = stream.read();
|
|
if (!chunk) {
|
|
return;
|
|
}
|
|
if (typeof chunk === "string") {
|
|
chunk = Buffer.from(chunk, encoding);
|
|
}
|
|
// How much data needed in this chunk
|
|
const chunkLength = pos + chunk.length > count ? count - pos : chunk.length;
|
|
buffer.fill(chunk.slice(0, chunkLength), offset + pos, offset + pos + chunkLength);
|
|
pos += chunkLength;
|
|
});
|
|
stream.on("end", () => {
|
|
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.
|
|
*
|
|
* @param stream - A Node.js Readable stream
|
|
* @param buffer - Buffer to be filled, length must greater than or equal to offset
|
|
* @param encoding - Encoding of the Readable stream
|
|
* @returns with the count of bytes read.
|
|
* @throws `RangeError` If buffer size is not big enough.
|
|
*/
|
|
async function streamToBuffer2(stream, buffer, encoding) {
|
|
let pos = 0; // Position in stream
|
|
const bufferSize = buffer.length;
|
|
return new Promise((resolve, reject) => {
|
|
stream.on("readable", () => {
|
|
let 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", () => {
|
|
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.
|
|
*
|
|
* @param rs - The read stream.
|
|
* @param file - Destination file path.
|
|
*/
|
|
async function readStreamToLocalFile(rs, file) {
|
|
return new Promise((resolve, reject) => {
|
|
const ws = fs.createWriteStream(file);
|
|
rs.on("error", (err) => {
|
|
reject(err);
|
|
});
|
|
ws.on("error", (err) => {
|
|
reject(err);
|
|
});
|
|
ws.on("close", resolve);
|
|
rs.pipe(ws);
|
|
});
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Promisified version of fs.stat().
|
|
*/
|
|
const fsStat = util.promisify(fs.stat);
|
|
const fsCreateReadStream = fs.createReadStream;
|
|
|
|
/**
|
|
* A BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob,
|
|
* append blob, or page blob.
|
|
*/
|
|
class BlobClient extends StorageClient {
|
|
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
options = options || {};
|
|
let pipeline;
|
|
let url;
|
|
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
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)
|
|
const containerName = credentialOrPipelineOrContainerName;
|
|
const blobName = blobNameOrOptions;
|
|
const extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const 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");
|
|
}
|
|
super(url, pipeline);
|
|
({
|
|
blobName: this._name,
|
|
containerName: this._containerName
|
|
} = this.getBlobAndContainerNamesFromUrl());
|
|
this.blobContext = new Blob$1(this.storageClientContext);
|
|
this._snapshot = getURLParameter(this.url, URLConstants.Parameters.SNAPSHOT);
|
|
this._versionId = getURLParameter(this.url, URLConstants.Parameters.VERSIONID);
|
|
}
|
|
/**
|
|
* The name of the blob.
|
|
*/
|
|
get name() {
|
|
return this._name;
|
|
}
|
|
/**
|
|
* The name of the storage container the blob is associated with.
|
|
*/
|
|
get containerName() {
|
|
return this._containerName;
|
|
}
|
|
/**
|
|
* Creates a new BlobClient object identical to the source but with the specified snapshot timestamp.
|
|
* Provide "" will remove the snapshot and return a Client to the base blob.
|
|
*
|
|
* @param snapshot - The snapshot timestamp.
|
|
* @returns A new BlobClient object identical to the source but with the specified snapshot timestamp
|
|
*/
|
|
withSnapshot(snapshot) {
|
|
return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a new BlobClient object pointing to a version of this blob.
|
|
* Provide "" will remove the versionId and return a Client to the base blob.
|
|
*
|
|
* @param versionId - The versionId.
|
|
* @returns A new BlobClient object pointing to the version of this blob.
|
|
*/
|
|
withVersion(versionId) {
|
|
return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.VERSIONID, versionId.length === 0 ? undefined : versionId), this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a AppendBlobClient object.
|
|
*
|
|
*/
|
|
getAppendBlobClient() {
|
|
return new AppendBlobClient(this.url, this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a BlockBlobClient object.
|
|
*
|
|
*/
|
|
getBlockBlobClient() {
|
|
return new BlockBlobClient(this.url, this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a PageBlobClient object.
|
|
*
|
|
*/
|
|
getPageBlobClient() {
|
|
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 offset - From which position of the blob to download, greater than or equal to 0
|
|
* @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined
|
|
* @param options - Optional options to Blob Download operation.
|
|
*
|
|
*
|
|
* Example usage (Node.js):
|
|
*
|
|
* ```js
|
|
* // Download and convert a blob to a string
|
|
* const downloadBlockBlobResponse = await blobClient.download();
|
|
* const downloaded = await streamToBuffer(downloadBlockBlobResponse.readableStreamBody);
|
|
* console.log("Downloaded blob content:", downloaded.toString());
|
|
*
|
|
* async function streamToBuffer(readableStream) {
|
|
* return new Promise((resolve, reject) => {
|
|
* const chunks = [];
|
|
* readableStream.on("data", (data) => {
|
|
* chunks.push(data instanceof Buffer ? data : Buffer.from(data));
|
|
* });
|
|
* readableStream.on("end", () => {
|
|
* resolve(Buffer.concat(chunks));
|
|
* });
|
|
* 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);
|
|
* });
|
|
* }
|
|
* ```
|
|
*/
|
|
async download(offset = 0, count, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
options.conditions = options.conditions || {};
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
const { span, updatedOptions } = createSpan("BlobClient-download", options);
|
|
try {
|
|
const res = await this.blobContext.download(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: {
|
|
onDownloadProgress: coreHttp.isNode ? undefined : options.onProgress // for Node.js, progress is reported by RetriableReadableStream
|
|
}, range: offset === 0 && !count ? undefined : rangeToString({ offset, count }), rangeGetContentMD5: options.rangeGetContentMD5, rangeGetContentCRC64: options.rangeGetContentCrc64, snapshot: options.snapshot, cpkInfo: options.customerProvidedKey }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const wrappedRes = Object.assign(Object.assign({}, res), { _response: res._response, objectReplicationDestinationPolicyId: res.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules) });
|
|
// Return browser response immediately
|
|
if (false) {}
|
|
// We support retrying when download stream unexpected ends in Node.js runtime
|
|
// Following code shouldn't be bundled into browser build, however some
|
|
// bundlers may try to bundle following code and "FileReadResponse.ts".
|
|
// In this case, "FileDownloadResponse.browser.ts" will be used as a shim of "FileDownloadResponse.ts"
|
|
// The config is in package.json "browser" field
|
|
if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) {
|
|
// TODO: Default value or make it a required parameter?
|
|
options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS;
|
|
}
|
|
if (res.contentLength === undefined) {
|
|
throw new RangeError(`File download response doesn't contain valid content length header`);
|
|
}
|
|
if (!res.etag) {
|
|
throw new RangeError(`File download response doesn't contain valid etag header`);
|
|
}
|
|
return new BlobDownloadResponse(wrappedRes, async (start) => {
|
|
var _a;
|
|
const updatedDownloadOptions = {
|
|
leaseAccessConditions: options.conditions,
|
|
modifiedAccessConditions: {
|
|
ifMatch: options.conditions.ifMatch || res.etag,
|
|
ifModifiedSince: options.conditions.ifModifiedSince,
|
|
ifNoneMatch: options.conditions.ifNoneMatch,
|
|
ifUnmodifiedSince: options.conditions.ifUnmodifiedSince,
|
|
ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions
|
|
},
|
|
range: rangeToString({
|
|
count: offset + res.contentLength - start,
|
|
offset: start
|
|
}),
|
|
rangeGetContentMD5: options.rangeGetContentMD5,
|
|
rangeGetContentCRC64: options.rangeGetContentCrc64,
|
|
snapshot: options.snapshot,
|
|
cpkInfo: options.customerProvidedKey
|
|
};
|
|
// Debug purpose only
|
|
// console.log(
|
|
// `Read from internal stream, range: ${
|
|
// updatedOptions.range
|
|
// }, options: ${JSON.stringify(updatedOptions)}`
|
|
// );
|
|
return (await this.blobContext.download(Object.assign({ abortSignal: options.abortSignal }, updatedDownloadOptions))).readableStreamBody;
|
|
}, offset, res.contentLength, {
|
|
maxRetryRequests: options.maxRetryRequests,
|
|
onProgress: options.onProgress
|
|
});
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Returns true if the Azure blob resource represented by this client exists; false otherwise.
|
|
*
|
|
* NOTE: use this function with care since an existing blob might be deleted by other clients or
|
|
* applications. Vice versa new blobs might be added by other clients or applications after this
|
|
* function completes.
|
|
*
|
|
* @param options - options to Exists operation.
|
|
*/
|
|
async exists(options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-exists", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
await this.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
customerProvidedKey: options.customerProvidedKey,
|
|
conditions: options.conditions,
|
|
tracingOptions: updatedOptions.tracingOptions
|
|
});
|
|
return true;
|
|
}
|
|
catch (e) {
|
|
if (e.statusCode === 404) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when checking blob existence"
|
|
});
|
|
return false;
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Optional options to Get Properties operation.
|
|
*/
|
|
async getProperties(options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-getProperties", options);
|
|
try {
|
|
options.conditions = options.conditions || {};
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
const res = await this.blobContext.getProperties(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
return Object.assign(Object.assign({}, res), { _response: res._response, objectReplicationDestinationPolicyId: res.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules) });
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Optional options to Blob Delete operation.
|
|
*/
|
|
async delete(options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-delete", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
return await this.blobContext.delete(Object.assign({ abortSignal: options.abortSignal, deleteSnapshots: options.deleteSnapshots, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Marks the specified blob or snapshot for deletion if it exists. The blob is later deleted
|
|
* during garbage collection. Note that in order to delete a blob, you must delete
|
|
* all of its snapshots. You can delete both at the same time with the Delete
|
|
* Blob operation.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob
|
|
*
|
|
* @param options - Optional options to Blob Delete operation.
|
|
*/
|
|
async deleteIfExists(options = {}) {
|
|
var _a, _b;
|
|
const { span, updatedOptions } = createSpan("BlobClient-deleteIfExists", options);
|
|
try {
|
|
const res = await this.delete(updatedOptions);
|
|
return Object.assign(Object.assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobNotFound") {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when deleting a blob or snapshot only if it exists."
|
|
});
|
|
return Object.assign(Object.assign({ succeeded: false }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e.response });
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Optional options to Blob Undelete operation.
|
|
*/
|
|
async undelete(options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-undelete", options);
|
|
try {
|
|
return await this.blobContext.undelete(Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Sets system properties on the blob.
|
|
*
|
|
* If no value provided, or no value provided for the specified blob HTTP headers,
|
|
* these blob HTTP headers without a value will be cleared.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties
|
|
*
|
|
* @param blobHTTPHeaders - If no value provided, or no value provided for
|
|
* the specified blob HTTP headers, these blob HTTP
|
|
* headers without a value will be cleared.
|
|
* A common header to set is `blobContentType`
|
|
* enabling the browser to provide functionality
|
|
* based on file type.
|
|
* @param options - Optional options to Blob Set HTTP Headers operation.
|
|
*/
|
|
async setHTTPHeaders(blobHTTPHeaders, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-setHTTPHeaders", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blobContext.setHttpHeaders(Object.assign({ abortSignal: options.abortSignal, blobHttpHeaders: blobHTTPHeaders, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 - Replace existing metadata with this value.
|
|
* If no value provided the existing metadata will be removed.
|
|
* @param options - Optional options to Set Metadata operation.
|
|
*/
|
|
async setMetadata(metadata, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-setMetadata", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blobContext.setMetadata(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Sets tags on the underlying blob.
|
|
* A blob can have up to 10 tags. Tag keys must be between 1 and 128 characters. Tag values must be between 0 and 256 characters.
|
|
* Valid tag key and value characters include lower and upper case letters, digits (0-9),
|
|
* space (' '), plus ('+'), minus ('-'), period ('.'), foward slash ('/'), colon (':'), equals ('='), and underscore ('_').
|
|
*
|
|
* @param tags -
|
|
* @param options -
|
|
*/
|
|
async setTags(tags, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-setTags", options);
|
|
try {
|
|
return await this.blobContext.setTags(Object.assign(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)), { tags: toBlobTags(tags) }));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Gets the tags associated with the underlying blob.
|
|
*
|
|
* @param options -
|
|
*/
|
|
async getTags(options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-getTags", options);
|
|
try {
|
|
const response = await this.blobContext.getTags(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const wrappedResponse = Object.assign(Object.assign({}, response), { _response: response._response, tags: toTags({ blobTagSet: response.blobTagSet }) || {} });
|
|
return wrappedResponse;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Get a {@link BlobLeaseClient} that manages leases on the blob.
|
|
*
|
|
* @param proposeLeaseId - Initial proposed lease Id.
|
|
* @returns A new BlobLeaseClient object for managing leases on the blob.
|
|
*/
|
|
getBlobLeaseClient(proposeLeaseId) {
|
|
return new BlobLeaseClient(this, proposeLeaseId);
|
|
}
|
|
/**
|
|
* Creates a read-only snapshot of a blob.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob
|
|
*
|
|
* @param options - Optional options to the Blob Create Snapshot operation.
|
|
*/
|
|
async createSnapshot(options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-createSnapshot", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blobContext.createSnapshot(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 copySource - url to the source Azure Blob/File.
|
|
* @param options - Optional options to the Blob Start Copy From URL operation.
|
|
*/
|
|
async beginCopyFromURL(copySource, options = {}) {
|
|
const client = {
|
|
abortCopyFromURL: (...args) => this.abortCopyFromURL(...args),
|
|
getProperties: (...args) => this.getProperties(...args),
|
|
startCopyFromURL: (...args) => this.startCopyFromURL(...args)
|
|
};
|
|
const poller = new BlobBeginCopyFromUrlPoller({
|
|
blobClient: client,
|
|
copySource,
|
|
intervalInMs: options.intervalInMs,
|
|
onProgress: options.onProgress,
|
|
resumeFrom: options.resumeFrom,
|
|
startCopyFromURLOptions: options
|
|
});
|
|
// Trigger the startCopyFromURL call by calling poll.
|
|
// Any errors from this method should be surfaced to the user.
|
|
await poller.poll();
|
|
return poller;
|
|
}
|
|
/**
|
|
* Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero
|
|
* length and full metadata. Version 2012-02-12 and newer.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob
|
|
*
|
|
* @param copyId - Id of the Copy From URL operation.
|
|
* @param options - Optional options to the Blob Abort Copy From URL operation.
|
|
*/
|
|
async abortCopyFromURL(copyId, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-abortCopyFromURL", options);
|
|
try {
|
|
return await this.blobContext.abortCopyFromURL(copyId, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 copySource - The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication
|
|
* @param options -
|
|
*/
|
|
async syncCopyFromURL(copySource, options = {}) {
|
|
var _a, _b, _c;
|
|
const { span, updatedOptions } = createSpan("BlobClient-syncCopyFromURL", options);
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
try {
|
|
return await this.blobContext.copyFromURL(copySource, Object.assign({ abortSignal: options.abortSignal, metadata: options.metadata, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
}, sourceContentMD5: options.sourceContentMD5, copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization), blobTagsString: toBlobTagsString(options.tags), immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 tier - The tier to be set on the blob. Valid values are Hot, Cool, or Archive.
|
|
* @param options - Optional options to the Blob Set Tier operation.
|
|
*/
|
|
async setAccessTier(tier, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobClient-setAccessTier", options);
|
|
try {
|
|
return await this.blobContext.setTier(toAccessTier(tier), Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), rehydratePriority: options.rehydratePriority }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
async downloadToBuffer(param1, param2, param3, param4 = {}) {
|
|
let buffer;
|
|
let offset = 0;
|
|
let count = 0;
|
|
let options = param4;
|
|
if (param1 instanceof Buffer) {
|
|
buffer = param1;
|
|
offset = param2 || 0;
|
|
count = typeof param3 === "number" ? param3 : 0;
|
|
}
|
|
else {
|
|
offset = typeof param1 === "number" ? param1 : 0;
|
|
count = typeof param2 === "number" ? param2 : 0;
|
|
options = param3 || {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("BlobClient-downloadToBuffer", options);
|
|
try {
|
|
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 greater than 0");
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
// Customer doesn't specify length, get it
|
|
if (!count) {
|
|
const response = await this.getProperties(Object.assign(Object.assign({}, options), { tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }));
|
|
count = response.contentLength - offset;
|
|
if (count < 0) {
|
|
throw new RangeError(`offset ${offset} shouldn't be larger than blob size ${response.contentLength}`);
|
|
}
|
|
}
|
|
// Allocate the buffer of size = count if the buffer is not provided
|
|
if (!buffer) {
|
|
try {
|
|
buffer = Buffer.alloc(count);
|
|
}
|
|
catch (error) {
|
|
throw new Error(`Unable to allocate the buffer of size: ${count}(in bytes). Please try passing your own buffer to the "downloadToBuffer" method or try using other methods like "download" or "downloadToFile".\t ${error.message}`);
|
|
}
|
|
}
|
|
if (buffer.length < count) {
|
|
throw new RangeError(`The buffer's size should be equal to or larger than the request count of bytes: ${count}`);
|
|
}
|
|
let transferProgress = 0;
|
|
const batch = new Batch(options.concurrency);
|
|
for (let off = offset; off < offset + count; off = off + options.blockSize) {
|
|
batch.addOperation(async () => {
|
|
// Exclusive chunk end position
|
|
let chunkEnd = offset + count;
|
|
if (off + options.blockSize < chunkEnd) {
|
|
chunkEnd = off + options.blockSize;
|
|
}
|
|
const response = await this.download(off, chunkEnd - off, {
|
|
abortSignal: options.abortSignal,
|
|
conditions: options.conditions,
|
|
maxRetryRequests: options.maxRetryRequestsPerBlock,
|
|
customerProvidedKey: options.customerProvidedKey,
|
|
tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions))
|
|
});
|
|
const stream = response.readableStreamBody;
|
|
await streamToBuffer(stream, buffer, off - offset, chunkEnd - offset);
|
|
// Update progress after block is downloaded, in case of block trying
|
|
// Could provide finer grained progress updating inside HTTP requests,
|
|
// only if convenience layer download try is enabled
|
|
transferProgress += chunkEnd - off;
|
|
if (options.onProgress) {
|
|
options.onProgress({ loadedBytes: transferProgress });
|
|
}
|
|
});
|
|
}
|
|
await batch.do();
|
|
return buffer;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Downloads an Azure Blob to a local file.
|
|
* Fails if the the given file path already exits.
|
|
* Offset and count are optional, pass 0 and undefined respectively to download the entire blob.
|
|
*
|
|
* @param filePath -
|
|
* @param offset - From which position of the block blob to download.
|
|
* @param count - How much data to be downloaded. Will download to the end when passing undefined.
|
|
* @param options - Options to Blob download options.
|
|
* @returns The response data for blob download operation,
|
|
* but with readableStreamBody set to undefined since its
|
|
* content is already read and written into a local file
|
|
* at the specified path.
|
|
*/
|
|
async downloadToFile(filePath, offset = 0, count, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-downloadToFile", options);
|
|
try {
|
|
const response = await this.download(offset, count, Object.assign(Object.assign({}, options), { tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }));
|
|
if (response.readableStreamBody) {
|
|
await readStreamToLocalFile(response.readableStreamBody, filePath);
|
|
}
|
|
// The stream is no longer accessible so setting it to undefined.
|
|
response.blobDownloadStream = undefined;
|
|
return response;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
getBlobAndContainerNamesFromUrl() {
|
|
let containerName;
|
|
let blobName;
|
|
try {
|
|
// URL may look like the following
|
|
// "https://myaccount.blob.core.windows.net/mycontainer/blob?sasString";
|
|
// "https://myaccount.blob.core.windows.net/mycontainer/blob";
|
|
// "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt?sasString";
|
|
// "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt";
|
|
// IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername/blob`
|
|
// http://localhost:10001/devstoreaccount1/containername/blob
|
|
const parsedUrl = coreHttp.URLBuilder.parse(this.url);
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// "https://myaccount.blob.core.windows.net/containername/blob".
|
|
// .getPath() -> /containername/blob
|
|
const pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?");
|
|
containerName = pathComponents[1];
|
|
blobName = pathComponents[3];
|
|
}
|
|
else if (isIpEndpointStyle(parsedUrl)) {
|
|
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername/blob
|
|
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername/blob
|
|
// .getPath() -> /devstoreaccount1/containername/blob
|
|
const pathComponents = parsedUrl.getPath().match("/([^/]*)/([^/]*)(/(.*))?");
|
|
containerName = pathComponents[2];
|
|
blobName = pathComponents[4];
|
|
}
|
|
else {
|
|
// "https://customdomain.com/containername/blob".
|
|
// .getPath() -> /containername/blob
|
|
const pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?");
|
|
containerName = pathComponents[1];
|
|
blobName = pathComponents[3];
|
|
}
|
|
// decode the encoded blobName, containerName - to get all the special characters that might be present in them
|
|
containerName = decodeURIComponent(containerName);
|
|
blobName = decodeURIComponent(blobName);
|
|
// Azure Storage Server will replace "\" with "/" in the blob names
|
|
// doing the same in the SDK side so that the user doesn't have to replace "\" instances in the blobName
|
|
blobName = blobName.replace(/\\/g, "/");
|
|
if (!containerName) {
|
|
throw new Error("Provided containerName is invalid.");
|
|
}
|
|
return { blobName, containerName };
|
|
}
|
|
catch (error) {
|
|
throw new Error("Unable to extract blobName and containerName with provided information.");
|
|
}
|
|
}
|
|
/**
|
|
* Asynchronously copies a blob to a destination within the storage account.
|
|
* In version 2012-02-12 and later, the source for a Copy Blob operation can be
|
|
* a committed blob in any Azure storage account.
|
|
* Beginning with version 2015-02-21, the source for a Copy Blob operation can be
|
|
* an Azure file in any Azure storage account.
|
|
* Only storage accounts created on or after June 7th, 2012 allow the Copy Blob
|
|
* operation to copy from another storage account.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob
|
|
*
|
|
* @param copySource - url to the source Azure Blob/File.
|
|
* @param options - Optional options to the Blob Start Copy From URL operation.
|
|
*/
|
|
async startCopyFromURL(copySource, options = {}) {
|
|
var _a, _b, _c;
|
|
const { span, updatedOptions } = createSpan("BlobClient-startCopyFromURL", options);
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
try {
|
|
return await this.blobContext.startCopyFromURL(copySource, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince,
|
|
sourceIfTags: options.sourceConditions.tagConditions
|
|
}, immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold, rehydratePriority: options.rehydratePriority, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags), sealBlob: options.sealBlob }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Only available for BlobClient constructed with a shared key credential.
|
|
*
|
|
* Generates a Blob Service Shared Access Signature (SAS) URI based on the client properties
|
|
* and parameters passed in. The SAS is signed by the shared key credential of the client.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas
|
|
*
|
|
* @param options - Optional parameters.
|
|
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
|
|
*/
|
|
generateSasUrl(options) {
|
|
return new Promise((resolve) => {
|
|
if (!(this.credential instanceof StorageSharedKeyCredential)) {
|
|
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
|
|
}
|
|
const sas = generateBlobSASQueryParameters(Object.assign({ containerName: this._containerName, blobName: this._name, snapshotTime: this._snapshot, versionId: this._versionId }, options), this.credential).toString();
|
|
resolve(appendToURLQuery(this.url, sas));
|
|
});
|
|
}
|
|
/**
|
|
* Delete the immutablility policy on the blob.
|
|
*
|
|
* @param options - Optional options to delete immutability policy on the blob.
|
|
*/
|
|
async deleteImmutabilityPolicy(options) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-deleteImmutabilityPolicy", options);
|
|
try {
|
|
return await this.blobContext.deleteImmutabilityPolicy(Object.assign({ abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Set immutablility policy on the blob.
|
|
*
|
|
* @param options - Optional options to set immutability policy on the blob.
|
|
*/
|
|
async setImmutabilityPolicy(immutabilityPolicy, options) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-setImmutabilityPolicy", options);
|
|
try {
|
|
return await this.blobContext.setImmutabilityPolicy(Object.assign({ abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal, immutabilityPolicyExpiry: immutabilityPolicy.expiriesOn, immutabilityPolicyMode: immutabilityPolicy.policyMode, modifiedAccessConditions: options === null || options === void 0 ? void 0 : options.modifiedAccessCondition }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Set legal hold on the blob.
|
|
*
|
|
* @param options - Optional options to set legal hold on the blob.
|
|
*/
|
|
async setLegalHold(legalHoldEnabled, options) {
|
|
const { span, updatedOptions } = createSpan("BlobClient-setLegalHold", options);
|
|
try {
|
|
return await this.blobContext.setLegalHold(legalHoldEnabled, Object.assign({ abortSignal: options === null || options === void 0 ? void 0 : options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* AppendBlobClient defines a set of operations applicable to append blobs.
|
|
*/
|
|
class AppendBlobClient extends BlobClient {
|
|
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
let pipeline;
|
|
let url;
|
|
options = options || {};
|
|
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
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)
|
|
const containerName = credentialOrPipelineOrContainerName;
|
|
const blobName = blobNameOrOptions;
|
|
const extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const 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");
|
|
}
|
|
super(url, pipeline);
|
|
this.appendBlobContext = new AppendBlob(this.storageClientContext);
|
|
}
|
|
/**
|
|
* Creates a new AppendBlobClient object identical to the source but with the
|
|
* specified snapshot timestamp.
|
|
* Provide "" will remove the snapshot and return a Client to the base blob.
|
|
*
|
|
* @param snapshot - The snapshot timestamp.
|
|
* @returns A new AppendBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
*/
|
|
withSnapshot(snapshot) {
|
|
return new AppendBlobClient(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 options - Options to the Append Block Create operation.
|
|
*
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const appendBlobClient = containerClient.getAppendBlobClient("<blob name>");
|
|
* await appendBlobClient.create();
|
|
* ```
|
|
*/
|
|
async create(options = {}) {
|
|
var _a, _b, _c;
|
|
const { span, updatedOptions } = createSpan("AppendBlobClient-create", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.appendBlobContext.create(0, Object.assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold, blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a 0-length append blob. Call AppendBlock to append data to an append blob.
|
|
* If the blob with the same name already exists, the content of the existing blob will remain unchanged.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param options -
|
|
*/
|
|
async createIfNotExists(options = {}) {
|
|
var _a, _b;
|
|
const { span, updatedOptions } = createSpan("AppendBlobClient-createIfNotExists", options);
|
|
const conditions = { ifNoneMatch: ETagAny };
|
|
try {
|
|
const res = await this.create(Object.assign(Object.assign({}, updatedOptions), { conditions }));
|
|
return Object.assign(Object.assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when creating a blob only if it does not already exist."
|
|
});
|
|
return Object.assign(Object.assign({ succeeded: false }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e.response });
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Seals the append blob, making it read only.
|
|
*
|
|
* @param options -
|
|
*/
|
|
async seal(options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("AppendBlobClient-seal", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
return await this.appendBlobContext.seal(Object.assign({ abortSignal: options.abortSignal, appendPositionAccessConditions: options.conditions, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 body - Data to be appended.
|
|
* @param contentLength - Length of the body in bytes.
|
|
* @param options - Options to the Append Block operation.
|
|
*
|
|
*
|
|
* 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);
|
|
* ```
|
|
*/
|
|
async appendBlock(body, contentLength, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("AppendBlobClient-appendBlock", options);
|
|
options.conditions = options.conditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.appendBlobContext.appendBlock(contentLength, body, Object.assign({ abortSignal: options.abortSignal, appendPositionAccessConditions: options.conditions, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: {
|
|
onUploadProgress: options.onProgress
|
|
}, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 sourceURL -
|
|
* The url to the blob that will be the source of the copy. A source blob in the same storage account can
|
|
* be authenticated via Shared Key. However, if the source is a blob in another account, the source blob
|
|
* must either be public or must be authenticated via a shared access signature. If the source blob is
|
|
* public, no authentication is required to perform the operation.
|
|
* @param sourceOffset - Offset in source to be appended
|
|
* @param count - Number of bytes to be appended as a block
|
|
* @param options -
|
|
*/
|
|
async appendBlockFromURL(sourceURL, sourceOffset, count, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("AppendBlobClient-appendBlockFromURL", options);
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, Object.assign({ abortSignal: options.abortSignal, sourceRange: rangeToString({ offset: sourceOffset, count }), sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, leaseAccessConditions: options.conditions, appendPositionAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
}, copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* BlockBlobClient defines a set of operations applicable to block blobs.
|
|
*/
|
|
class BlockBlobClient extends BlobClient {
|
|
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
let pipeline;
|
|
let url;
|
|
options = options || {};
|
|
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
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)
|
|
const containerName = credentialOrPipelineOrContainerName;
|
|
const blobName = blobNameOrOptions;
|
|
const extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const 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");
|
|
}
|
|
super(url, pipeline);
|
|
this.blockBlobContext = new BlockBlob(this.storageClientContext);
|
|
this._blobContext = new Blob$1(this.storageClientContext);
|
|
}
|
|
/**
|
|
* Creates a new BlockBlobClient object identical to the source but with the
|
|
* specified snapshot timestamp.
|
|
* Provide "" will remove the snapshot and return a URL to the base blob.
|
|
*
|
|
* @param snapshot - The snapshot timestamp.
|
|
* @returns A new BlockBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
*/
|
|
withSnapshot(snapshot) {
|
|
return new BlockBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Quick query for a JSON or CSV formatted blob.
|
|
*
|
|
* Example usage (Node.js):
|
|
*
|
|
* ```js
|
|
* // Query and convert a blob to a string
|
|
* const queryBlockBlobResponse = await blockBlobClient.query("select * from BlobStorage");
|
|
* const downloaded = (await streamToBuffer(queryBlockBlobResponse.readableStreamBody)).toString();
|
|
* console.log("Query blob content:", downloaded);
|
|
*
|
|
* async function streamToBuffer(readableStream) {
|
|
* return new Promise((resolve, reject) => {
|
|
* const chunks = [];
|
|
* readableStream.on("data", (data) => {
|
|
* chunks.push(data instanceof Buffer ? data : Buffer.from(data));
|
|
* });
|
|
* readableStream.on("end", () => {
|
|
* resolve(Buffer.concat(chunks));
|
|
* });
|
|
* readableStream.on("error", reject);
|
|
* });
|
|
* }
|
|
* ```
|
|
*
|
|
* @param query -
|
|
* @param options -
|
|
*/
|
|
async query(query, options = {}) {
|
|
var _a;
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-query", options);
|
|
try {
|
|
if (false) {}
|
|
const response = await this._blobContext.query(Object.assign({ abortSignal: options.abortSignal, queryRequest: {
|
|
queryType: "SQL",
|
|
expression: query,
|
|
inputSerialization: toQuerySerialization(options.inputTextConfiguration),
|
|
outputSerialization: toQuerySerialization(options.outputTextConfiguration)
|
|
}, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
return new BlobQueryResponse(response, {
|
|
abortSignal: options.abortSignal,
|
|
onProgress: options.onProgress,
|
|
onError: options.onError
|
|
});
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 body - Blob, string, ArrayBuffer, ArrayBufferView or a function
|
|
* which returns a new Readable stream whose offset is from data source beginning.
|
|
* @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
|
|
* string including non non-Base64/Hex-encoded characters.
|
|
* @param options - Options to the Block Blob Upload operation.
|
|
* @returns Response data for the Block Blob Upload operation.
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const content = "Hello world!";
|
|
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
|
|
* ```
|
|
*/
|
|
async upload(body, contentLength, options = {}) {
|
|
var _a, _b, _c;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-upload", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blockBlobContext.upload(contentLength, body, Object.assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: {
|
|
onUploadProgress: options.onProgress
|
|
}, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a new Block Blob where the contents of the blob are read from a given URL.
|
|
* This API is supported beginning with the 2020-04-08 version. Partial updates
|
|
* are not supported with Put Blob from URL; the content of an existing blob is overwritten with
|
|
* the content of the new blob. To perform partial updates to a block blob’s contents using a
|
|
* source URL, use {@link stageBlockFromURL} and {@link commitBlockList}.
|
|
*
|
|
* @param sourceURL - Specifies the URL of the blob. The value
|
|
* may be a URL of up to 2 KB in length that specifies a blob.
|
|
* The value should be URL-encoded as it would appear
|
|
* in a request URI. The source blob must either be public
|
|
* or must be authenticated via a shared access signature.
|
|
* If the source blob is public, no authentication is required
|
|
* to perform the operation. Here are some examples of source object URLs:
|
|
* - https://myaccount.blob.core.windows.net/mycontainer/myblob
|
|
* - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
|
|
* @param options - Optional parameters.
|
|
*/
|
|
async syncUploadFromURL(sourceURL, options = {}) {
|
|
var _a, _b, _c, _d, _e;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-syncUploadFromURL", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blockBlobContext.putBlobFromUrl(0, sourceURL, Object.assign(Object.assign(Object.assign({}, options), { blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: options.conditions.tagConditions }), sourceModifiedAccessConditions: {
|
|
sourceIfMatch: (_a = options.sourceConditions) === null || _a === void 0 ? void 0 : _a.ifMatch,
|
|
sourceIfModifiedSince: (_b = options.sourceConditions) === null || _b === void 0 ? void 0 : _b.ifModifiedSince,
|
|
sourceIfNoneMatch: (_c = options.sourceConditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: (_d = options.sourceConditions) === null || _d === void 0 ? void 0 : _d.ifUnmodifiedSince,
|
|
sourceIfTags: (_e = options.sourceConditions) === null || _e === void 0 ? void 0 : _e.tagConditions
|
|
}, cpkInfo: options.customerProvidedKey, copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization), tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 blockId - A 64-byte value that is base64-encoded
|
|
* @param body - Data to upload to the staging area.
|
|
* @param contentLength - Number of bytes to upload.
|
|
* @param options - Options to the Block Blob Stage Block operation.
|
|
* @returns Response data for the Block Blob Stage Block operation.
|
|
*/
|
|
async stageBlock(blockId, body, contentLength, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-stageBlock", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blockBlobContext.stageBlock(blockId, contentLength, body, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, requestOptions: {
|
|
onUploadProgress: options.onProgress
|
|
}, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 blockId - A 64-byte value that is base64-encoded
|
|
* @param sourceURL - Specifies the URL of the blob. The value
|
|
* may be a URL of up to 2 KB in length that specifies a blob.
|
|
* The value should be URL-encoded as it would appear
|
|
* in a request URI. The source blob must either be public
|
|
* or must be authenticated via a shared access signature.
|
|
* If the source blob is public, no authentication is required
|
|
* to perform the operation. Here are some examples of source object URLs:
|
|
* - https://myaccount.blob.core.windows.net/mycontainer/myblob
|
|
* - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
|
|
* @param offset - From which position of the blob to download, greater than or equal to 0
|
|
* @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined
|
|
* @param options - Options to the Block Blob Stage Block From URL operation.
|
|
* @returns Response data for the Block Blob Stage Block From URL operation.
|
|
*/
|
|
async stageBlockFromURL(blockId, sourceURL, offset = 0, count, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-stageBlockFromURL", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, sourceRange: offset === 0 && !count ? undefined : rangeToString({ offset, count }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 blocks - Array of 64-byte value that is base64-encoded
|
|
* @param options - Options to the Block Blob Commit Block List operation.
|
|
* @returns Response data for the Block Blob Commit Block List operation.
|
|
*/
|
|
async commitBlockList(blocks, options = {}) {
|
|
var _a, _b, _c;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-commitBlockList", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.blockBlobContext.commitBlockList({ latest: blocks }, Object.assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 listType - Specifies whether to return the list of committed blocks,
|
|
* the list of uncommitted blocks, or both lists together.
|
|
* @param options - Options to the Block Blob Get Block List operation.
|
|
* @returns Response data for the Block Blob Get Block List operation.
|
|
*/
|
|
async getBlockList(listType, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-getBlockList", options);
|
|
try {
|
|
const res = await this.blockBlobContext.getBlockList(listType, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
if (!res.committedBlocks) {
|
|
res.committedBlocks = [];
|
|
}
|
|
if (!res.uncommittedBlocks) {
|
|
res.uncommittedBlocks = [];
|
|
}
|
|
return res;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
// High level functions
|
|
/**
|
|
* Uploads a Buffer(Node.js)/Blob(browsers)/ArrayBuffer/ArrayBufferView object to a BlockBlob.
|
|
*
|
|
* When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is
|
|
* {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.
|
|
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}
|
|
* to commit the block list.
|
|
*
|
|
* A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is
|
|
* `blobContentType`, enabling the browser to provide
|
|
* functionality based on file type.
|
|
*
|
|
* @param data - Buffer(Node.js), Blob, ArrayBuffer or ArrayBufferView
|
|
* @param options -
|
|
*/
|
|
async uploadData(data, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-uploadData", options);
|
|
try {
|
|
if (true) {
|
|
let buffer;
|
|
if (data instanceof Buffer) {
|
|
buffer = data;
|
|
}
|
|
else if (data instanceof ArrayBuffer) {
|
|
buffer = Buffer.from(data);
|
|
}
|
|
else {
|
|
data = data;
|
|
buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
}
|
|
return this.uploadSeekableInternal((offset, size) => buffer.slice(offset, offset + size), buffer.byteLength, updatedOptions);
|
|
}
|
|
else {}
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN BROWSERS.
|
|
*
|
|
* Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.
|
|
*
|
|
* When buffer length lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.
|
|
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call
|
|
* {@link commitBlockList} to commit the block list.
|
|
*
|
|
* A common {@link BlockBlobParallelUploadOptions.blobHTTPHeaders} option to set is
|
|
* `blobContentType`, enabling the browser to provide
|
|
* functionality based on file type.
|
|
*
|
|
* @deprecated Use {@link uploadData} instead.
|
|
*
|
|
* @param browserData - Blob, File, ArrayBuffer or ArrayBufferView
|
|
* @param options - Options to upload browser data.
|
|
* @returns Response data for the Blob Upload operation.
|
|
*/
|
|
async uploadBrowserData(browserData, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-uploadBrowserData", options);
|
|
try {
|
|
const browserBlob = new Blob([browserData]);
|
|
return await this.uploadSeekableInternal((offset, size) => browserBlob.slice(offset, offset + size), browserBlob.size, updatedOptions);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
* Uploads data to block blob. Requires a bodyFactory as the data source,
|
|
* which need to return a {@link HttpRequestBody} object with the offset and size provided.
|
|
*
|
|
* When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is
|
|
* {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload.
|
|
* Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}
|
|
* to commit the block list.
|
|
*
|
|
* @param bodyFactory -
|
|
* @param size - size of the data to upload.
|
|
* @param options - Options to Upload to Block Blob operation.
|
|
* @returns Response data for the Blob Upload operation.
|
|
*/
|
|
async uploadSeekableInternal(bodyFactory, size, options = {}) {
|
|
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 = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-uploadSeekableInternal", options);
|
|
try {
|
|
if (size <= options.maxSingleShotSize) {
|
|
return await this.upload(bodyFactory(0, size), size, updatedOptions);
|
|
}
|
|
const numBlocks = Math.floor((size - 1) / options.blockSize) + 1;
|
|
if (numBlocks > BLOCK_BLOB_MAX_BLOCKS) {
|
|
throw new RangeError(`The buffer's size is too big or the BlockSize is too small;` +
|
|
`the number of blocks must be <= ${BLOCK_BLOB_MAX_BLOCKS}`);
|
|
}
|
|
const blockList = [];
|
|
const blockIDPrefix = coreHttp.generateUuid();
|
|
let transferProgress = 0;
|
|
const batch = new Batch(options.concurrency);
|
|
for (let i = 0; i < numBlocks; i++) {
|
|
batch.addOperation(async () => {
|
|
const blockID = generateBlockID(blockIDPrefix, i);
|
|
const start = options.blockSize * i;
|
|
const end = i === numBlocks - 1 ? size : start + options.blockSize;
|
|
const contentLength = end - start;
|
|
blockList.push(blockID);
|
|
await this.stageBlock(blockID, bodyFactory(start, contentLength), contentLength, {
|
|
abortSignal: options.abortSignal,
|
|
conditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
tracingOptions: updatedOptions.tracingOptions
|
|
});
|
|
// Update progress after block is successfully uploaded to server, in case of block trying
|
|
// TODO: Hook with convenience layer progress event in finer level
|
|
transferProgress += contentLength;
|
|
if (options.onProgress) {
|
|
options.onProgress({
|
|
loadedBytes: transferProgress
|
|
});
|
|
}
|
|
});
|
|
}
|
|
await batch.do();
|
|
return this.commitBlockList(blockList, updatedOptions);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Uploads a local file in blocks to a block blob.
|
|
*
|
|
* When file size lesser than or equal to 256MB, this method will use 1 upload call to finish the upload.
|
|
* Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList
|
|
* to commit the block list.
|
|
*
|
|
* @param filePath - Full path of local file
|
|
* @param options - Options to Upload to Block Blob operation.
|
|
* @returns Response data for the Blob Upload operation.
|
|
*/
|
|
async uploadFile(filePath, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-uploadFile", options);
|
|
try {
|
|
const size = (await fsStat(filePath)).size;
|
|
return await this.uploadSeekableInternal((offset, count) => {
|
|
return () => fsCreateReadStream(filePath, {
|
|
autoClose: true,
|
|
end: count ? offset + count - 1 : Infinity,
|
|
start: offset
|
|
});
|
|
}, size, Object.assign(Object.assign({}, options), { tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* Uploads a Node.js Readable stream into block blob.
|
|
*
|
|
* PERFORMANCE IMPROVEMENT TIPS:
|
|
* * Input stream highWaterMark is better to set a same value with bufferSize
|
|
* parameter, which will avoid Buffer.concat() operations.
|
|
*
|
|
* @param stream - Node.js Readable stream
|
|
* @param bufferSize - Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB
|
|
* @param maxConcurrency - Max concurrency indicates the max number of buffers that can be allocated,
|
|
* positive correlation with max uploading concurrency. Default value is 5
|
|
* @param options - Options to Upload Stream to Block Blob operation.
|
|
* @returns Response data for the Blob Upload operation.
|
|
*/
|
|
async uploadStream(stream, bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES, maxConcurrency = 5, options = {}) {
|
|
if (!options.blobHTTPHeaders) {
|
|
options.blobHTTPHeaders = {};
|
|
}
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("BlockBlobClient-uploadStream", options);
|
|
try {
|
|
let blockNum = 0;
|
|
const blockIDPrefix = coreHttp.generateUuid();
|
|
let transferProgress = 0;
|
|
const blockList = [];
|
|
const scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, async (body, length) => {
|
|
const blockID = generateBlockID(blockIDPrefix, blockNum);
|
|
blockList.push(blockID);
|
|
blockNum++;
|
|
await this.stageBlock(blockID, body, length, {
|
|
conditions: options.conditions,
|
|
encryptionScope: options.encryptionScope,
|
|
tracingOptions: updatedOptions.tracingOptions
|
|
});
|
|
// Update progress after block is successfully uploaded to server, in case of block trying
|
|
transferProgress += length;
|
|
if (options.onProgress) {
|
|
options.onProgress({ loadedBytes: transferProgress });
|
|
}
|
|
},
|
|
// concurrency should set a smaller value than maxConcurrency, which is helpful to
|
|
// reduce the possibility when a outgoing handler waits for stream data, in
|
|
// this situation, outgoing handlers are blocked.
|
|
// Outgoing queue shouldn't be empty.
|
|
Math.ceil((maxConcurrency / 4) * 3));
|
|
await scheduler.do();
|
|
return await this.commitBlockList(blockList, Object.assign(Object.assign({}, options), { tracingOptions: Object.assign(Object.assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* PageBlobClient defines a set of operations applicable to page blobs.
|
|
*/
|
|
class PageBlobClient extends BlobClient {
|
|
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
// In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
|
|
// super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
|
|
let pipeline;
|
|
let url;
|
|
options = options || {};
|
|
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
|
|
// (url: string, pipeline: Pipeline)
|
|
url = urlOrConnectionString;
|
|
pipeline = credentialOrPipelineOrContainerName;
|
|
}
|
|
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)
|
|
const containerName = credentialOrPipelineOrContainerName;
|
|
const blobName = blobNameOrOptions;
|
|
const extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const 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");
|
|
}
|
|
super(url, pipeline);
|
|
this.pageBlobContext = new PageBlob(this.storageClientContext);
|
|
}
|
|
/**
|
|
* Creates a new PageBlobClient object identical to the source but with the
|
|
* specified snapshot timestamp.
|
|
* Provide "" will remove the snapshot and return a Client to the base blob.
|
|
*
|
|
* @param snapshot - The snapshot timestamp.
|
|
* @returns A new PageBlobClient object identical to the source but with the specified snapshot timestamp.
|
|
*/
|
|
withSnapshot(snapshot) {
|
|
return new PageBlobClient(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 size - size of the page blob.
|
|
* @param options - Options to the Page Blob Create operation.
|
|
* @returns Response data for the Page Blob Create operation.
|
|
*/
|
|
async create(size, options = {}) {
|
|
var _a, _b, _c;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-create", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.pageBlobContext.create(0, size, Object.assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, blobSequenceNumber: options.blobSequenceNumber, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, immutabilityPolicyExpiry: (_b = options.immutabilityPolicy) === null || _b === void 0 ? void 0 : _b.expiriesOn, immutabilityPolicyMode: (_c = options.immutabilityPolicy) === null || _c === void 0 ? void 0 : _c.policyMode, legalHold: options.legalHold, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a page blob of the specified length. Call uploadPages to upload data
|
|
* data to a page blob. If the blob with the same name already exists, the content
|
|
* of the existing blob will remain unchanged.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param size - size of the page blob.
|
|
* @param options -
|
|
*/
|
|
async createIfNotExists(size, options = {}) {
|
|
var _a, _b;
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-createIfNotExists", options);
|
|
try {
|
|
const conditions = { ifNoneMatch: ETagAny };
|
|
const res = await this.create(size, Object.assign(Object.assign({}, options), { conditions, tracingOptions: updatedOptions.tracingOptions }));
|
|
return Object.assign(Object.assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when creating a blob only if it does not already exist."
|
|
});
|
|
return Object.assign(Object.assign({ succeeded: false }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e.response });
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 body - Data to upload
|
|
* @param offset - Offset of destination page blob
|
|
* @param count - Content length of the body, also number of bytes to be uploaded
|
|
* @param options - Options to the Page Blob Upload Pages operation.
|
|
* @returns Response data for the Page Blob Upload Pages operation.
|
|
*/
|
|
async uploadPages(body, offset, count, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-uploadPages", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.pageBlobContext.uploadPages(count, body, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: {
|
|
onUploadProgress: options.onProgress
|
|
}, range: rangeToString({ offset, count }), sequenceNumberAccessConditions: options.conditions, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 sourceURL - Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication
|
|
* @param sourceOffset - The source offset to copy from. Pass 0 to copy from the beginning of source page blob
|
|
* @param destOffset - Offset of destination page blob
|
|
* @param count - Number of bytes to be uploaded from source page blob
|
|
* @param options -
|
|
*/
|
|
async uploadPagesFromURL(sourceURL, sourceOffset, destOffset, count, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
options.sourceConditions = options.sourceConditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-uploadPagesFromURL", options);
|
|
try {
|
|
ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
|
|
return await this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({ offset: sourceOffset, count }), 0, rangeToString({ offset: destOffset, count }), Object.assign({ abortSignal: options.abortSignal, sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, leaseAccessConditions: options.conditions, sequenceNumberAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: {
|
|
sourceIfMatch: options.sourceConditions.ifMatch,
|
|
sourceIfModifiedSince: options.sourceConditions.ifModifiedSince,
|
|
sourceIfNoneMatch: options.sourceConditions.ifNoneMatch,
|
|
sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince
|
|
}, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, copySourceAuthorization: httpAuthorizationToString(options.sourceAuthorization) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Frees the specified pages from the page blob.
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-page
|
|
*
|
|
* @param offset - Starting byte position of the pages to clear.
|
|
* @param count - Number of bytes to clear.
|
|
* @param options - Options to the Page Blob Clear Pages operation.
|
|
* @returns Response data for the Page Blob Clear Pages operation.
|
|
*/
|
|
async clearPages(offset = 0, count, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-clearPages", options);
|
|
try {
|
|
return await this.pageBlobContext.clearPages(0, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), range: rangeToString({ offset, count }), sequenceNumberAccessConditions: options.conditions, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 offset - Starting byte position of the page ranges.
|
|
* @param count - Number of bytes to get.
|
|
* @param options - Options to the Page Blob Get Ranges operation.
|
|
* @returns Response data for the Page Blob Get Ranges operation.
|
|
*/
|
|
async getPageRanges(offset = 0, count, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-getPageRanges", options);
|
|
try {
|
|
return await this.pageBlobContext
|
|
.getPageRanges(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), range: rangeToString({ offset, count }) }, convertTracingToRequestOptionsBase(updatedOptions)))
|
|
.then(rangeResponseFromModel);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 offset - Starting byte position of the page blob
|
|
* @param count - Number of bytes to get ranges diff.
|
|
* @param prevSnapshot - Timestamp of snapshot to retrieve the difference.
|
|
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
|
|
* @returns Response data for the Page Blob Get Page Range Diff operation.
|
|
*/
|
|
async getPageRangesDiff(offset, count, prevSnapshot, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-getPageRangesDiff", options);
|
|
try {
|
|
return await this.pageBlobContext
|
|
.getPageRangesDiff(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), prevsnapshot: prevSnapshot, range: rangeToString({ offset, count }) }, convertTracingToRequestOptionsBase(updatedOptions)))
|
|
.then(rangeResponseFromModel);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 offset - Starting byte position of the page blob
|
|
* @param count - Number of bytes to get ranges diff.
|
|
* @param prevSnapshotUrl - URL of snapshot to retrieve the difference.
|
|
* @param options - Options to the Page Blob Get Page Ranges Diff operation.
|
|
* @returns Response data for the Page Blob Get Page Range Diff operation.
|
|
*/
|
|
async getPageRangesDiffForManagedDisks(offset, count, prevSnapshotUrl, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-GetPageRangesDiffForManagedDisks", options);
|
|
try {
|
|
return await this.pageBlobContext
|
|
.getPageRangesDiff(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), prevSnapshotUrl, range: rangeToString({ offset, count }) }, convertTracingToRequestOptionsBase(updatedOptions)))
|
|
.then(rangeResponseFromModel);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 size - Target size
|
|
* @param options - Options to the Page Blob Resize operation.
|
|
* @returns Response data for the Page Blob Resize operation.
|
|
*/
|
|
async resize(size, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-resize", options);
|
|
try {
|
|
return await this.pageBlobContext.resize(size, Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Sets a page blob's sequence number.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties
|
|
*
|
|
* @param sequenceNumberAction - Indicates how the service should modify the blob's sequence number.
|
|
* @param sequenceNumber - Required if sequenceNumberAction is max or update
|
|
* @param options - Options to the Page Blob Update Sequence Number operation.
|
|
* @returns Response data for the Page Blob Update Sequence Number operation.
|
|
*/
|
|
async updateSequenceNumber(sequenceNumberAction, sequenceNumber, options = {}) {
|
|
var _a;
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-updateSequenceNumber", options);
|
|
try {
|
|
return await this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, Object.assign({ abortSignal: options.abortSignal, blobSequenceNumber: sequenceNumber, leaseAccessConditions: options.conditions, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 copySource - Specifies the name of the source page blob snapshot. For example,
|
|
* https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
|
|
* @param options - Options to the Page Blob Copy Incremental operation.
|
|
* @returns Response data for the Page Blob Copy Incremental operation.
|
|
*/
|
|
async startCopyIncremental(copySource, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("PageBlobClient-startCopyIncremental", options);
|
|
try {
|
|
return await this.pageBlobContext.copyIncremental(copySource, Object.assign({ abortSignal: options.abortSignal, modifiedAccessConditions: Object.assign(Object.assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
async function getBodyAsText(batchResponse) {
|
|
let buffer = Buffer.alloc(BATCH_MAX_PAYLOAD_IN_BYTES);
|
|
const responseLength = await streamToBuffer2(batchResponse.readableStreamBody, buffer);
|
|
// Slice the buffer to trim the empty ending.
|
|
buffer = buffer.slice(0, responseLength);
|
|
return buffer.toString();
|
|
}
|
|
function utf8ByteLength(str) {
|
|
return Buffer.byteLength(str);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const HTTP_HEADER_DELIMITER = ": ";
|
|
const SPACE_DELIMITER = " ";
|
|
const NOT_FOUND = -1;
|
|
/**
|
|
* Util class for parsing batch response.
|
|
*/
|
|
class BatchResponseParser {
|
|
constructor(batchResponse, subRequests) {
|
|
if (!batchResponse || !batchResponse.contentType) {
|
|
// In special case(reported), server may return invalid content-type which could not be parsed.
|
|
throw new RangeError("batchResponse is malformed or doesn't contain valid content-type.");
|
|
}
|
|
if (!subRequests || subRequests.size === 0) {
|
|
// This should be prevent during coding.
|
|
throw new RangeError("Invalid state: subRequests is not provided or size is 0.");
|
|
}
|
|
this.batchResponse = batchResponse;
|
|
this.subRequests = subRequests;
|
|
this.responseBatchBoundary = this.batchResponse.contentType.split("=")[1];
|
|
this.perResponsePrefix = `--${this.responseBatchBoundary}${HTTP_LINE_ENDING}`;
|
|
this.batchResponseEnding = `--${this.responseBatchBoundary}--`;
|
|
}
|
|
// For example of response, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response
|
|
async parseBatchResponse() {
|
|
// When logic reach here, suppose batch request has already succeeded with 202, so we can further parse
|
|
// sub request's response.
|
|
if (this.batchResponse._response.status !== HTTPURLConnection.HTTP_ACCEPTED) {
|
|
throw new Error(`Invalid state: batch request failed with status: '${this.batchResponse._response.status}'.`);
|
|
}
|
|
const responseBodyAsText = await getBodyAsText(this.batchResponse);
|
|
const subResponses = responseBodyAsText
|
|
.split(this.batchResponseEnding)[0] // string after ending is useless
|
|
.split(this.perResponsePrefix)
|
|
.slice(1); // string before first response boundary is useless
|
|
const subResponseCount = subResponses.length;
|
|
// Defensive coding in case of potential error parsing.
|
|
// Note: subResponseCount == 1 is special case where sub request is invalid.
|
|
// We try to prevent such cases through early validation, e.g. validate sub request count >= 1.
|
|
// While in unexpected sub request invalid case, we allow sub response to be parsed and return to user.
|
|
if (subResponseCount !== this.subRequests.size && subResponseCount !== 1) {
|
|
throw new Error("Invalid state: sub responses' count is not equal to sub requests' count.");
|
|
}
|
|
const deserializedSubResponses = new Array(subResponseCount);
|
|
let subResponsesSucceededCount = 0;
|
|
let subResponsesFailedCount = 0;
|
|
// Parse sub subResponses.
|
|
for (let index = 0; index < subResponseCount; index++) {
|
|
const subResponse = subResponses[index];
|
|
const deserializedSubResponse = {};
|
|
deserializedSubResponse.headers = new coreHttp.HttpHeaders();
|
|
const responseLines = subResponse.split(`${HTTP_LINE_ENDING}`);
|
|
let subRespHeaderStartFound = false;
|
|
let subRespHeaderEndFound = false;
|
|
let subRespFailed = false;
|
|
let contentId = NOT_FOUND;
|
|
for (const responseLine of responseLines) {
|
|
if (!subRespHeaderStartFound) {
|
|
// Convention line to indicate content ID
|
|
if (responseLine.startsWith(HeaderConstants.CONTENT_ID)) {
|
|
contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]);
|
|
}
|
|
// Http version line with status code indicates the start of sub request's response.
|
|
// Example: HTTP/1.1 202 Accepted
|
|
if (responseLine.startsWith(HTTP_VERSION_1_1)) {
|
|
subRespHeaderStartFound = true;
|
|
const tokens = responseLine.split(SPACE_DELIMITER);
|
|
deserializedSubResponse.status = parseInt(tokens[1]);
|
|
deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER);
|
|
}
|
|
continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: *
|
|
}
|
|
if (responseLine.trim() === "") {
|
|
// Sub response's header start line already found, and the first empty line indicates header end line found.
|
|
if (!subRespHeaderEndFound) {
|
|
subRespHeaderEndFound = true;
|
|
}
|
|
continue; // Skip empty line
|
|
}
|
|
// Note: when code reach here, it indicates subRespHeaderStartFound == true
|
|
if (!subRespHeaderEndFound) {
|
|
if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) {
|
|
// Defensive coding to prevent from missing valuable lines.
|
|
throw new Error(`Invalid state: find non-empty line '${responseLine}' without HTTP header delimiter '${HTTP_HEADER_DELIMITER}'.`);
|
|
}
|
|
// Parse headers of sub response.
|
|
const tokens = responseLine.split(HTTP_HEADER_DELIMITER);
|
|
deserializedSubResponse.headers.set(tokens[0], tokens[1]);
|
|
if (tokens[0] === HeaderConstants.X_MS_ERROR_CODE) {
|
|
deserializedSubResponse.errorCode = tokens[1];
|
|
subRespFailed = true;
|
|
}
|
|
}
|
|
else {
|
|
// Assemble body of sub response.
|
|
if (!deserializedSubResponse.bodyAsText) {
|
|
deserializedSubResponse.bodyAsText = "";
|
|
}
|
|
deserializedSubResponse.bodyAsText += responseLine;
|
|
}
|
|
} // Inner for end
|
|
// The response will contain the Content-ID header for each corresponding subrequest response to use for tracking.
|
|
// The Content-IDs are set to a valid index in the subrequests we sent. In the status code 202 path, we could expect it
|
|
// to be 1-1 mapping from the [0, subRequests.size) to the Content-IDs returned. If not, we simply don't return that
|
|
// unexpected subResponse in the parsed reponse and we can always look it up in the raw response for debugging purpose.
|
|
if (contentId !== NOT_FOUND &&
|
|
Number.isInteger(contentId) &&
|
|
contentId >= 0 &&
|
|
contentId < this.subRequests.size &&
|
|
deserializedSubResponses[contentId] === undefined) {
|
|
deserializedSubResponse._request = this.subRequests.get(contentId);
|
|
deserializedSubResponses[contentId] = deserializedSubResponse;
|
|
}
|
|
else {
|
|
logger.error(`subResponses[${index}] is dropped as the Content-ID is not found or invalid, Content-ID: ${contentId}`);
|
|
}
|
|
if (subRespFailed) {
|
|
subResponsesFailedCount++;
|
|
}
|
|
else {
|
|
subResponsesSucceededCount++;
|
|
}
|
|
}
|
|
return {
|
|
subResponses: deserializedSubResponses,
|
|
subResponsesSucceededCount: subResponsesSucceededCount,
|
|
subResponsesFailedCount: subResponsesFailedCount
|
|
};
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
var MutexLockStatus;
|
|
(function (MutexLockStatus) {
|
|
MutexLockStatus[MutexLockStatus["LOCKED"] = 0] = "LOCKED";
|
|
MutexLockStatus[MutexLockStatus["UNLOCKED"] = 1] = "UNLOCKED";
|
|
})(MutexLockStatus || (MutexLockStatus = {}));
|
|
/**
|
|
* An async mutex lock.
|
|
*/
|
|
class Mutex {
|
|
/**
|
|
* Lock for a specific key. If the lock has been acquired by another customer, then
|
|
* will wait until getting the lock.
|
|
*
|
|
* @param key - lock key
|
|
*/
|
|
static async lock(key) {
|
|
return new Promise((resolve) => {
|
|
if (this.keys[key] === undefined || this.keys[key] === MutexLockStatus.UNLOCKED) {
|
|
this.keys[key] = MutexLockStatus.LOCKED;
|
|
resolve();
|
|
}
|
|
else {
|
|
this.onUnlockEvent(key, () => {
|
|
this.keys[key] = MutexLockStatus.LOCKED;
|
|
resolve();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Unlock a key.
|
|
*
|
|
* @param key -
|
|
*/
|
|
static async unlock(key) {
|
|
return new Promise((resolve) => {
|
|
if (this.keys[key] === MutexLockStatus.LOCKED) {
|
|
this.emitUnlockEvent(key);
|
|
}
|
|
delete this.keys[key];
|
|
resolve();
|
|
});
|
|
}
|
|
static onUnlockEvent(key, handler) {
|
|
if (this.listeners[key] === undefined) {
|
|
this.listeners[key] = [handler];
|
|
}
|
|
else {
|
|
this.listeners[key].push(handler);
|
|
}
|
|
}
|
|
static emitUnlockEvent(key) {
|
|
if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {
|
|
const handler = this.listeners[key].shift();
|
|
setImmediate(() => {
|
|
handler.call(this);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
Mutex.keys = {};
|
|
Mutex.listeners = {};
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A BlobBatch represents an aggregated set of operations on blobs.
|
|
* Currently, only `delete` and `setAccessTier` are supported.
|
|
*/
|
|
class BlobBatch {
|
|
constructor() {
|
|
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
|
|
*/
|
|
getMultiPartContentType() {
|
|
return this.batchRequest.getMultipartContentType();
|
|
}
|
|
/**
|
|
* Get assembled HTTP request body for sub requests.
|
|
*/
|
|
getHttpRequestBody() {
|
|
return this.batchRequest.getHttpRequestBody();
|
|
}
|
|
/**
|
|
* Get sub requests that are added into the batch request.
|
|
*/
|
|
getSubRequests() {
|
|
return this.batchRequest.getSubRequests();
|
|
}
|
|
async addSubRequestInternal(subRequest, assembleSubRequestFunc) {
|
|
await Mutex.lock(this.batch);
|
|
try {
|
|
this.batchRequest.preAddSubRequest(subRequest);
|
|
await assembleSubRequestFunc();
|
|
this.batchRequest.postAddSubRequest(subRequest);
|
|
}
|
|
finally {
|
|
await Mutex.unlock(this.batch);
|
|
}
|
|
}
|
|
setBatchType(batchType) {
|
|
if (!this.batchType) {
|
|
this.batchType = batchType;
|
|
}
|
|
if (this.batchType !== batchType) {
|
|
throw new RangeError(`BlobBatch only supports one operation type per batch and it already is being used for ${this.batchType} operations.`);
|
|
}
|
|
}
|
|
async deleteBlob(urlOrBlobClient, credentialOrOptions, options) {
|
|
let url;
|
|
let credential;
|
|
if (typeof urlOrBlobClient === "string" &&
|
|
((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 = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("BatchDeleteRequest-addSubRequest", options);
|
|
try {
|
|
this.setBatchType("delete");
|
|
await this.addSubRequestInternal({
|
|
url: url,
|
|
credential: credential
|
|
}, async () => {
|
|
await new BlobClient(url, this.batchRequest.createPipeline(credential)).delete(updatedOptions);
|
|
});
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
async setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options) {
|
|
let url;
|
|
let credential;
|
|
let tier;
|
|
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 = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("BatchSetTierRequest-addSubRequest", options);
|
|
try {
|
|
this.setBatchType("setAccessTier");
|
|
await this.addSubRequestInternal({
|
|
url: url,
|
|
credential: credential
|
|
}, async () => {
|
|
await new BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, updatedOptions);
|
|
});
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* 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.
|
|
*/
|
|
class InnerBatchRequest {
|
|
constructor() {
|
|
this.operationCount = 0;
|
|
this.body = "";
|
|
const 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 existing
|
|
* credential and serialization/deserialization components, with additional policies to
|
|
* filter unnecessary headers, assemble sub requests into request's body
|
|
* and intercept request from going to wire.
|
|
* @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
|
|
*/
|
|
createPipeline(credential) {
|
|
const isAnonymousCreds = credential instanceof AnonymousCredential;
|
|
const policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserializationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory]
|
|
const 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)
|
|
? attachCredential(coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes), credential)
|
|
: 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, {});
|
|
}
|
|
appendSubRequestToBody(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 (const header of request.headers.headersArray()) {
|
|
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
|
|
}
|
|
preAddSubRequest(subRequest) {
|
|
if (this.operationCount >= BATCH_MAX_REQUEST) {
|
|
throw new RangeError(`Cannot exceed ${BATCH_MAX_REQUEST} sub requests in a single batch`);
|
|
}
|
|
// Fast fail if url for sub request is invalid
|
|
const path = getURLPath(subRequest.url);
|
|
if (!path || path === "") {
|
|
throw new RangeError(`Invalid url for sub request: '${subRequest.url}'`);
|
|
}
|
|
}
|
|
postAddSubRequest(subRequest) {
|
|
this.subRequests.set(this.operationCount, subRequest);
|
|
this.operationCount++;
|
|
}
|
|
// Return the http request body with assembling the ending line to the sub request body.
|
|
getHttpRequestBody() {
|
|
return `${this.body}${this.batchRequestEnding}${HTTP_LINE_ENDING}`;
|
|
}
|
|
getMultipartContentType() {
|
|
return this.multipartContentType;
|
|
}
|
|
getSubRequests() {
|
|
return this.subRequests;
|
|
}
|
|
}
|
|
class BatchRequestAssemblePolicy extends coreHttp.BaseRequestPolicy {
|
|
constructor(batchRequest, nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
this.dummyResponse = {
|
|
request: new coreHttp.WebResource(),
|
|
status: 200,
|
|
headers: new coreHttp.HttpHeaders()
|
|
};
|
|
this.batchRequest = batchRequest;
|
|
}
|
|
async sendRequest(request) {
|
|
await this.batchRequest.appendSubRequestToBody(request);
|
|
return this.dummyResponse; // Intercept request from going to wire
|
|
}
|
|
}
|
|
class BatchRequestAssemblePolicyFactory {
|
|
constructor(batchRequest) {
|
|
this.batchRequest = batchRequest;
|
|
}
|
|
create(nextPolicy, options) {
|
|
return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options);
|
|
}
|
|
}
|
|
class BatchHeaderFilterPolicy extends coreHttp.BaseRequestPolicy {
|
|
// The base class has a protected constructor. Adding a public one to enable constructing of this class.
|
|
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor*/
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
async sendRequest(request) {
|
|
let xMsHeaderName = "";
|
|
for (const header of request.headers.headersArray()) {
|
|
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 this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
class BatchHeaderFilterPolicyFactory {
|
|
create(nextPolicy, options) {
|
|
return new BatchHeaderFilterPolicy(nextPolicy, options);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* 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
|
|
*/
|
|
class BlobBatchClient {
|
|
constructor(url, credentialOrPipeline,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
let pipeline;
|
|
if (isPipelineLike(credentialOrPipeline)) {
|
|
pipeline = credentialOrPipeline;
|
|
}
|
|
else if (!credentialOrPipeline) {
|
|
// no credential provided
|
|
pipeline = newPipeline(new AnonymousCredential(), options);
|
|
}
|
|
else {
|
|
pipeline = newPipeline(credentialOrPipeline, options);
|
|
}
|
|
const storageClientContext = new StorageClientContext(url, pipeline.toServiceClientOptions());
|
|
const path = getURLPath(url);
|
|
if (path && path !== "/") {
|
|
// Container scoped.
|
|
this.serviceOrContainerContext = new Container(storageClientContext);
|
|
}
|
|
else {
|
|
this.serviceOrContainerContext = new Service(storageClientContext);
|
|
}
|
|
}
|
|
/**
|
|
* Creates a {@link BlobBatch}.
|
|
* A BlobBatch represents an aggregated set of operations on blobs.
|
|
*/
|
|
createBatch() {
|
|
return new BlobBatch();
|
|
}
|
|
async deleteBlobs(urlsOrBlobClients, credentialOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
const batch = new BlobBatch();
|
|
for (const urlOrBlobClient of urlsOrBlobClients) {
|
|
if (typeof urlOrBlobClient === "string") {
|
|
await batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options);
|
|
}
|
|
else {
|
|
await batch.deleteBlob(urlOrBlobClient, credentialOrOptions);
|
|
}
|
|
}
|
|
return this.submitBatch(batch);
|
|
}
|
|
async setBlobsAccessTier(urlsOrBlobClients, credentialOrTier, tierOrOptions,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
const batch = new BlobBatch();
|
|
for (const urlOrBlobClient of urlsOrBlobClients) {
|
|
if (typeof urlOrBlobClient === "string") {
|
|
await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options);
|
|
}
|
|
else {
|
|
await batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions);
|
|
}
|
|
}
|
|
return this.submitBatch(batch);
|
|
}
|
|
/**
|
|
* Submit batch request which consists of multiple subrequests.
|
|
*
|
|
* Get `blobBatchClient` and other details before running the snippets.
|
|
* `blobServiceClient.getBlobBatchClient()` gives the `blobBatchClient`
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```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 batchRequest - A set of Delete or SetTier operations.
|
|
* @param options -
|
|
*/
|
|
async submitBatch(batchRequest, options = {}) {
|
|
if (!batchRequest || batchRequest.getSubRequests().size === 0) {
|
|
throw new RangeError("Batch request should contain one or more sub requests.");
|
|
}
|
|
const { span, updatedOptions } = createSpan("BlobBatchClient-submitBatch", options);
|
|
try {
|
|
const batchRequestBody = batchRequest.getHttpRequestBody();
|
|
// ServiceSubmitBatchResponseModel and ContainerSubmitBatchResponse are compatible for now.
|
|
const rawBatchResponse = await this.serviceOrContainerContext.submitBatch(utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), batchRequestBody, Object.assign(Object.assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
// Parse the sub responses result, if logic reaches here(i.e. the batch request succeeded with status code 202).
|
|
const batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests());
|
|
const responseSummary = await batchResponseParser.parseBatchResponse();
|
|
const res = {
|
|
_response: rawBatchResponse._response,
|
|
contentType: rawBatchResponse.contentType,
|
|
errorCode: rawBatchResponse.errorCode,
|
|
requestId: rawBatchResponse.requestId,
|
|
clientRequestId: rawBatchResponse.clientRequestId,
|
|
version: rawBatchResponse.version,
|
|
subResponses: responseSummary.subResponses,
|
|
subResponsesSucceededCount: responseSummary.subResponsesSucceededCount,
|
|
subResponsesFailedCount: responseSummary.subResponsesFailedCount
|
|
};
|
|
return res;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs.
|
|
*/
|
|
class ContainerClient extends StorageClient {
|
|
constructor(urlOrConnectionString, credentialOrPipelineOrContainerName,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
let pipeline;
|
|
let url;
|
|
options = options || {};
|
|
if (isPipelineLike(credentialOrPipelineOrContainerName)) {
|
|
// (url: string, pipeline: Pipeline)
|
|
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)
|
|
const containerName = credentialOrPipelineOrContainerName;
|
|
const extractedCreds = extractConnectionStringParts(urlOrConnectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const 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");
|
|
}
|
|
super(url, pipeline);
|
|
this._containerName = this.getContainerNameFromUrl();
|
|
this.containerContext = new Container(this.storageClientContext);
|
|
}
|
|
/**
|
|
* The name of the container.
|
|
*/
|
|
get containerName() {
|
|
return this._containerName;
|
|
}
|
|
/**
|
|
* 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 options - Options to Container Create operation.
|
|
*
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const containerClient = blobServiceClient.getContainerClient("<container name>");
|
|
* const createContainerResponse = await containerClient.create();
|
|
* console.log("Container was created successfully", createContainerResponse.requestId);
|
|
* ```
|
|
*/
|
|
async create(options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-create", options);
|
|
try {
|
|
// Spread operator in destructuring assignments,
|
|
// this will filter out unwanted properties from the response object into result object
|
|
return await this.containerContext.create(Object.assign(Object.assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a new container under the specified account. If the container with
|
|
* the same name already exists, it is not changed.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container
|
|
*
|
|
* @param options -
|
|
*/
|
|
async createIfNotExists(options = {}) {
|
|
var _a, _b;
|
|
const { span, updatedOptions } = createSpan("ContainerClient-createIfNotExists", options);
|
|
try {
|
|
const res = await this.create(updatedOptions);
|
|
return Object.assign(Object.assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerAlreadyExists") {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when creating a container only if it does not already exist."
|
|
});
|
|
return Object.assign(Object.assign({ succeeded: false }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e.response });
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Returns true if the Azure container resource represented by this client exists; false otherwise.
|
|
*
|
|
* NOTE: use this function with care since an existing container might be deleted by other clients or
|
|
* applications. Vice versa new containers with the same name might be added by other clients or
|
|
* applications after this function completes.
|
|
*
|
|
* @param options -
|
|
*/
|
|
async exists(options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-exists", options);
|
|
try {
|
|
await this.getProperties({
|
|
abortSignal: options.abortSignal,
|
|
tracingOptions: updatedOptions.tracingOptions
|
|
});
|
|
return true;
|
|
}
|
|
catch (e) {
|
|
if (e.statusCode === 404) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when checking container existence"
|
|
});
|
|
return false;
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a {@link BlobClient}
|
|
*
|
|
* @param blobName - A blob name
|
|
* @returns A new BlobClient object for the given blob name.
|
|
*/
|
|
getBlobClient(blobName) {
|
|
return new BlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
}
|
|
/**
|
|
* Creates an {@link AppendBlobClient}
|
|
*
|
|
* @param blobName - An append blob name
|
|
*/
|
|
getAppendBlobClient(blobName) {
|
|
return new AppendBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a {@link BlockBlobClient}
|
|
*
|
|
* @param blobName - A block blob name
|
|
*
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const content = "Hello world!";
|
|
*
|
|
* const blockBlobClient = containerClient.getBlockBlobClient("<blob name>");
|
|
* const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
|
|
* ```
|
|
*/
|
|
getBlockBlobClient(blobName) {
|
|
return new BlockBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
|
|
}
|
|
/**
|
|
* Creates a {@link PageBlobClient}
|
|
*
|
|
* @param blobName - A page blob name
|
|
*/
|
|
getPageBlobClient(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 options - Options to Container Get Properties operation.
|
|
*/
|
|
async getProperties(options = {}) {
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("ContainerClient-getProperties", options);
|
|
try {
|
|
return await this.containerContext.getProperties(Object.assign(Object.assign({ abortSignal: options.abortSignal }, options.conditions), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Options to Container Delete operation.
|
|
*/
|
|
async delete(options = {}) {
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("ContainerClient-delete", options);
|
|
try {
|
|
return await this.containerContext.delete(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Marks the specified container for deletion if it exists. The container and any blobs
|
|
* contained within it are later deleted during garbage collection.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container
|
|
*
|
|
* @param options - Options to Container Delete operation.
|
|
*/
|
|
async deleteIfExists(options = {}) {
|
|
var _a, _b;
|
|
const { span, updatedOptions } = createSpan("ContainerClient-deleteIfExists", options);
|
|
try {
|
|
const res = await this.delete(updatedOptions);
|
|
return Object.assign(Object.assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (((_a = e.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerNotFound") {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: "Expected exception when deleting a container only if it exists."
|
|
});
|
|
return Object.assign(Object.assign({ succeeded: false }, (_b = e.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e.response });
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 - Replace existing metadata with this value.
|
|
* If no value provided the existing metadata will be removed.
|
|
* @param options - Options to Container Set Metadata operation.
|
|
*/
|
|
async setMetadata(metadata, options = {}) {
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
if (options.conditions.ifUnmodifiedSince) {
|
|
throw new RangeError("the IfUnmodifiedSince must have their default values because they are ignored by the blob service");
|
|
}
|
|
const { span, updatedOptions } = createSpan("ContainerClient-setMetadata", options);
|
|
try {
|
|
return await this.containerContext.setMetadata(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Options to Container Get Access Policy operation.
|
|
*/
|
|
async getAccessPolicy(options = {}) {
|
|
if (!options.conditions) {
|
|
options.conditions = {};
|
|
}
|
|
const { span, updatedOptions } = createSpan("ContainerClient-getAccessPolicy", options);
|
|
try {
|
|
const response = await this.containerContext.getAccessPolicy(Object.assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const res = {
|
|
_response: response._response,
|
|
blobPublicAccess: response.blobPublicAccess,
|
|
date: response.date,
|
|
etag: response.etag,
|
|
errorCode: response.errorCode,
|
|
lastModified: response.lastModified,
|
|
requestId: response.requestId,
|
|
clientRequestId: response.clientRequestId,
|
|
signedIdentifiers: [],
|
|
version: response.version
|
|
};
|
|
for (const identifier of response) {
|
|
let accessPolicy = undefined;
|
|
if (identifier.accessPolicy) {
|
|
accessPolicy = {
|
|
permissions: identifier.accessPolicy.permissions
|
|
};
|
|
if (identifier.accessPolicy.expiresOn) {
|
|
accessPolicy.expiresOn = new Date(identifier.accessPolicy.expiresOn);
|
|
}
|
|
if (identifier.accessPolicy.startsOn) {
|
|
accessPolicy.startsOn = new Date(identifier.accessPolicy.startsOn);
|
|
}
|
|
}
|
|
res.signedIdentifiers.push({
|
|
accessPolicy,
|
|
id: identifier.id
|
|
});
|
|
}
|
|
return res;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 access - The level of public access to data in the container.
|
|
* @param containerAcl - Array of elements each having a unique Id and details of the access policy.
|
|
* @param options - Options to Container Set Access Policy operation.
|
|
*/
|
|
async setAccessPolicy(access, containerAcl, options = {}) {
|
|
options.conditions = options.conditions || {};
|
|
const { span, updatedOptions } = createSpan("ContainerClient-setAccessPolicy", options);
|
|
try {
|
|
const acl = [];
|
|
for (const identifier of containerAcl || []) {
|
|
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 await this.containerContext.setAccessPolicy(Object.assign({ abortSignal: options.abortSignal, access, containerAcl: acl, leaseAccessConditions: options.conditions, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Get a {@link BlobLeaseClient} that manages leases on the container.
|
|
*
|
|
* @param proposeLeaseId - Initial proposed lease Id.
|
|
* @returns A new BlobLeaseClient object for managing leases on the container.
|
|
*/
|
|
getBlobLeaseClient(proposeLeaseId) {
|
|
return new BlobLeaseClient(this, proposeLeaseId);
|
|
}
|
|
/**
|
|
* Creates a new block blob, or updates the content of an existing block blob.
|
|
*
|
|
* Updating an existing block blob overwrites any existing metadata on the blob.
|
|
* Partial updates are not supported; the content of the existing blob is
|
|
* overwritten with the new content. To perform a partial update of a block blob's,
|
|
* use {@link BlockBlobClient.stageBlock} and {@link BlockBlobClient.commitBlockList}.
|
|
*
|
|
* This is a non-parallel uploading method, please use {@link BlockBlobClient.uploadFile},
|
|
* {@link BlockBlobClient.uploadStream} or {@link BlockBlobClient.uploadBrowserData} for better
|
|
* performance with concurrency uploading.
|
|
*
|
|
* @see https://docs.microsoft.com/rest/api/storageservices/put-blob
|
|
*
|
|
* @param blobName - Name of the block blob to create or update.
|
|
* @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function
|
|
* which returns a new Readable stream whose offset is from data source beginning.
|
|
* @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
|
|
* string including non non-Base64/Hex-encoded characters.
|
|
* @param options - Options to configure the Block Blob Upload operation.
|
|
* @returns Block Blob upload response data and the corresponding BlockBlobClient instance.
|
|
*/
|
|
async uploadBlockBlob(blobName, body, contentLength, options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-uploadBlockBlob", options);
|
|
try {
|
|
const blockBlobClient = this.getBlockBlobClient(blobName);
|
|
const response = await blockBlobClient.upload(body, contentLength, updatedOptions);
|
|
return {
|
|
blockBlobClient,
|
|
response
|
|
};
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 blobName -
|
|
* @param options - Options to Blob Delete operation.
|
|
* @returns Block blob deletion response data.
|
|
*/
|
|
async deleteBlob(blobName, options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-deleteBlob", options);
|
|
try {
|
|
let blobClient = this.getBlobClient(blobName);
|
|
if (options.versionId) {
|
|
blobClient = blobClient.withVersion(options.versionId);
|
|
}
|
|
return await blobClient.delete(updatedOptions);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 marker - A string value that identifies the portion of the list to be returned with the next list operation.
|
|
* @param options - Options to Container List Blob Flat Segment operation.
|
|
*/
|
|
async listBlobFlatSegment(marker, options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-listBlobFlatSegment", options);
|
|
try {
|
|
const response = await this.containerContext.listBlobFlatSegment(Object.assign(Object.assign({ marker }, options), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const wrappedResponse = Object.assign(Object.assign({}, response), { _response: response._response, segment: Object.assign(Object.assign({}, response.segment), { blobItems: response.segment.blobItems.map((blobItemInteral) => {
|
|
const blobItem = Object.assign(Object.assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) });
|
|
return blobItem;
|
|
}) }) });
|
|
return wrappedResponse;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 delimiter - The character or string used to define the virtual hierarchy
|
|
* @param marker - A string value that identifies the portion of the list to be returned with the next list operation.
|
|
* @param options - Options to Container List Blob Hierarchy Segment operation.
|
|
*/
|
|
async listBlobHierarchySegment(delimiter, marker, options = {}) {
|
|
const { span, updatedOptions } = createSpan("ContainerClient-listBlobHierarchySegment", options);
|
|
try {
|
|
const response = await this.containerContext.listBlobHierarchySegment(delimiter, Object.assign(Object.assign({ marker }, options), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const wrappedResponse = Object.assign(Object.assign({}, response), { _response: response._response, segment: Object.assign(Object.assign({}, response.segment), { blobItems: response.segment.blobItems.map((blobItemInteral) => {
|
|
const blobItem = Object.assign(Object.assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) });
|
|
return blobItem;
|
|
}) }) });
|
|
return wrappedResponse;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse
|
|
*
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of blobs to be returned with the next listing operation. The
|
|
* operation returns the ContinuationToken value within the response body if the
|
|
* listing operation did not return all blobs remaining to be listed
|
|
* with the current page. The ContinuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to list blobs operation.
|
|
*/
|
|
listSegments(marker, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listSegments_1() {
|
|
let listBlobsFlatSegmentResponse;
|
|
if (!!marker || marker === undefined) {
|
|
do {
|
|
listBlobsFlatSegmentResponse = yield tslib.__await(this.listBlobFlatSegment(marker, options));
|
|
marker = listBlobsFlatSegmentResponse.continuationToken;
|
|
yield yield tslib.__await(yield tslib.__await(listBlobsFlatSegmentResponse));
|
|
} while (marker);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator of {@link BlobItem} objects
|
|
*
|
|
* @param options - Options to list blobs operation.
|
|
*/
|
|
listItems(options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listItems_1() {
|
|
var e_1, _a;
|
|
let marker;
|
|
try {
|
|
for (var _b = tslib.__asyncValues(this.listSegments(marker, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) {
|
|
const listBlobsFlatSegmentResponse = _c.value;
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(listBlobsFlatSegmentResponse.segment.blobItems)));
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b));
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* 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 options - Options to list blobs.
|
|
* @returns An asyncIterableIterator that supports paging.
|
|
*/
|
|
listBlobsFlat(options = {}) {
|
|
const include = [];
|
|
if (options.includeCopy) {
|
|
include.push("copy");
|
|
}
|
|
if (options.includeDeleted) {
|
|
include.push("deleted");
|
|
}
|
|
if (options.includeMetadata) {
|
|
include.push("metadata");
|
|
}
|
|
if (options.includeSnapshots) {
|
|
include.push("snapshots");
|
|
}
|
|
if (options.includeVersions) {
|
|
include.push("versions");
|
|
}
|
|
if (options.includeUncommitedBlobs) {
|
|
include.push("uncommittedblobs");
|
|
}
|
|
if (options.includeTags) {
|
|
include.push("tags");
|
|
}
|
|
if (options.includeDeletedWithVersions) {
|
|
include.push("deletedwithversions");
|
|
}
|
|
if (options.includeImmutabilityPolicy) {
|
|
include.push("immutabilitypolicy");
|
|
}
|
|
if (options.includeLegalHold) {
|
|
include.push("legalhold");
|
|
}
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
const updatedOptions = Object.assign(Object.assign({}, options), (include.length > 0 ? { include: include } : {}));
|
|
// AsyncIterableIterator to iterate over blobs
|
|
const iter = this.listItems(updatedOptions);
|
|
return {
|
|
/**
|
|
* The next method, part of the iteration protocol
|
|
*/
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
/**
|
|
* The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
/**
|
|
* Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
byPage: (settings = {}) => {
|
|
return this.listSegments(settings.continuationToken, Object.assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse
|
|
*
|
|
* @param delimiter - The character or string used to define the virtual hierarchy
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of blobs to be returned with the next listing operation. The
|
|
* operation returns the ContinuationToken value within the response body if the
|
|
* listing operation did not return all blobs remaining to be listed
|
|
* with the current page. The ContinuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to list blobs operation.
|
|
*/
|
|
listHierarchySegments(delimiter, marker, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listHierarchySegments_1() {
|
|
let listBlobsHierarchySegmentResponse;
|
|
if (!!marker || marker === undefined) {
|
|
do {
|
|
listBlobsHierarchySegmentResponse = yield tslib.__await(this.listBlobHierarchySegment(delimiter, marker, options));
|
|
marker = listBlobsHierarchySegmentResponse.continuationToken;
|
|
yield yield tslib.__await(yield tslib.__await(listBlobsHierarchySegmentResponse));
|
|
} while (marker);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects.
|
|
*
|
|
* @param delimiter - The character or string used to define the virtual hierarchy
|
|
* @param options - Options to list blobs operation.
|
|
*/
|
|
listItemsByHierarchy(delimiter, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listItemsByHierarchy_1() {
|
|
var e_2, _a;
|
|
let marker;
|
|
try {
|
|
for (var _b = tslib.__asyncValues(this.listHierarchySegments(delimiter, marker, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) {
|
|
const listBlobsHierarchySegmentResponse = _c.value;
|
|
const segment = listBlobsHierarchySegmentResponse.segment;
|
|
if (segment.blobPrefixes) {
|
|
for (const prefix of segment.blobPrefixes) {
|
|
yield yield tslib.__await(Object.assign({ kind: "prefix" }, prefix));
|
|
}
|
|
}
|
|
for (const blob of segment.blobItems) {
|
|
yield yield tslib.__await(Object.assign({ kind: "blob" }, blob));
|
|
}
|
|
}
|
|
}
|
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b));
|
|
}
|
|
finally { if (e_2) throw e_2.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* 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 = 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();
|
|
* }
|
|
* ```
|
|
*
|
|
* 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 delimiter - The character or string used to define the virtual hierarchy
|
|
* @param options - Options to list blobs operation.
|
|
*/
|
|
listBlobsByHierarchy(delimiter, options = {}) {
|
|
if (delimiter === "") {
|
|
throw new RangeError("delimiter should contain one or more characters");
|
|
}
|
|
const include = [];
|
|
if (options.includeCopy) {
|
|
include.push("copy");
|
|
}
|
|
if (options.includeDeleted) {
|
|
include.push("deleted");
|
|
}
|
|
if (options.includeMetadata) {
|
|
include.push("metadata");
|
|
}
|
|
if (options.includeSnapshots) {
|
|
include.push("snapshots");
|
|
}
|
|
if (options.includeVersions) {
|
|
include.push("versions");
|
|
}
|
|
if (options.includeUncommitedBlobs) {
|
|
include.push("uncommittedblobs");
|
|
}
|
|
if (options.includeTags) {
|
|
include.push("tags");
|
|
}
|
|
if (options.includeDeletedWithVersions) {
|
|
include.push("deletedwithversions");
|
|
}
|
|
if (options.includeImmutabilityPolicy) {
|
|
include.push("immutabilitypolicy");
|
|
}
|
|
if (options.includeLegalHold) {
|
|
include.push("legalhold");
|
|
}
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
const updatedOptions = Object.assign(Object.assign({}, options), (include.length > 0 ? { include: include } : {}));
|
|
// AsyncIterableIterator to iterate over blob prefixes and blobs
|
|
const iter = this.listItemsByHierarchy(delimiter, updatedOptions);
|
|
return {
|
|
/**
|
|
* The next method, part of the iteration protocol
|
|
*/
|
|
async next() {
|
|
return iter.next();
|
|
},
|
|
/**
|
|
* The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
/**
|
|
* Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
byPage: (settings = {}) => {
|
|
return this.listHierarchySegments(delimiter, settings.continuationToken, Object.assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
|
|
}
|
|
};
|
|
}
|
|
getContainerNameFromUrl() {
|
|
let containerName;
|
|
try {
|
|
// URL may look like the following
|
|
// "https://myaccount.blob.core.windows.net/mycontainer?sasString";
|
|
// "https://myaccount.blob.core.windows.net/mycontainer";
|
|
// IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername`
|
|
// http://localhost:10001/devstoreaccount1/containername
|
|
const parsedUrl = coreHttp.URLBuilder.parse(this.url);
|
|
if (parsedUrl.getHost().split(".")[1] === "blob") {
|
|
// "https://myaccount.blob.core.windows.net/containername".
|
|
// "https://customdomain.com/containername".
|
|
// .getPath() -> /containername
|
|
containerName = parsedUrl.getPath().split("/")[1];
|
|
}
|
|
else if (isIpEndpointStyle(parsedUrl)) {
|
|
// IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername
|
|
// Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername
|
|
// .getPath() -> /devstoreaccount1/containername
|
|
containerName = parsedUrl.getPath().split("/")[2];
|
|
}
|
|
else {
|
|
// "https://customdomain.com/containername".
|
|
// .getPath() -> /containername
|
|
containerName = parsedUrl.getPath().split("/")[1];
|
|
}
|
|
// decode the encoded containerName - to get all the special characters that might be present in it
|
|
containerName = decodeURIComponent(containerName);
|
|
if (!containerName) {
|
|
throw new Error("Provided containerName is invalid.");
|
|
}
|
|
return containerName;
|
|
}
|
|
catch (error) {
|
|
throw new Error("Unable to extract containerName with provided information.");
|
|
}
|
|
}
|
|
/**
|
|
* Only available for ContainerClient constructed with a shared key credential.
|
|
*
|
|
* Generates a Blob Container Service Shared Access Signature (SAS) URI based on the client properties
|
|
* and parameters passed in. The SAS is signed by the shared key credential of the client.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas
|
|
*
|
|
* @param options - Optional parameters.
|
|
* @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
|
|
*/
|
|
generateSasUrl(options) {
|
|
return new Promise((resolve) => {
|
|
if (!(this.credential instanceof StorageSharedKeyCredential)) {
|
|
throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential");
|
|
}
|
|
const sas = generateBlobSASQueryParameters(Object.assign({ containerName: this._containerName }, options), this.credential).toString();
|
|
resolve(appendToURLQuery(this.url, sas));
|
|
});
|
|
}
|
|
/**
|
|
* Creates a BlobBatchClient object to conduct batch operations.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
|
|
*
|
|
* @returns A new BlobBatchClient object for this container.
|
|
*/
|
|
getBlobBatchClient() {
|
|
return new BlobBatchClient(this.url, this.pipeline);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* This is a helper class to construct a string representing the permissions granted by an AccountSAS. Setting a value
|
|
* to true means that any SAS which uses these permissions will grant permissions for that operation. Once all the
|
|
* values are set, this should be serialized with toString and set as the permissions field on an
|
|
* {@link AccountSASSignatureValues} object. It is possible to construct the permissions string without this class, but
|
|
* the order of the permissions is particular and this class guarantees correctness.
|
|
*/
|
|
class AccountSASPermissions {
|
|
constructor() {
|
|
/**
|
|
* Permission to read resources and list queues and tables granted.
|
|
*/
|
|
this.read = false;
|
|
/**
|
|
* Permission to write resources granted.
|
|
*/
|
|
this.write = false;
|
|
/**
|
|
* Permission to create blobs and files granted.
|
|
*/
|
|
this.delete = false;
|
|
/**
|
|
* Permission to delete versions granted.
|
|
*/
|
|
this.deleteVersion = false;
|
|
/**
|
|
* Permission to list blob containers, blobs, shares, directories, and files granted.
|
|
*/
|
|
this.list = false;
|
|
/**
|
|
* Permission to add messages, table entities, and append to blobs granted.
|
|
*/
|
|
this.add = false;
|
|
/**
|
|
* Permission to create blobs and files granted.
|
|
*/
|
|
this.create = false;
|
|
/**
|
|
* Permissions to update messages and table entities granted.
|
|
*/
|
|
this.update = false;
|
|
/**
|
|
* Permission to get and delete messages granted.
|
|
*/
|
|
this.process = false;
|
|
/**
|
|
* Specfies Tag access granted.
|
|
*/
|
|
this.tag = false;
|
|
/**
|
|
* Permission to filter blobs.
|
|
*/
|
|
this.filter = false;
|
|
/**
|
|
* Permission to set immutability policy.
|
|
*/
|
|
this.setImmutabilityPolicy = false;
|
|
}
|
|
/**
|
|
* Parse initializes the AccountSASPermissions fields from a string.
|
|
*
|
|
* @param permissions -
|
|
*/
|
|
static parse(permissions) {
|
|
const accountSASPermissions = new AccountSASPermissions();
|
|
for (const c of permissions) {
|
|
switch (c) {
|
|
case "r":
|
|
accountSASPermissions.read = true;
|
|
break;
|
|
case "w":
|
|
accountSASPermissions.write = true;
|
|
break;
|
|
case "d":
|
|
accountSASPermissions.delete = true;
|
|
break;
|
|
case "x":
|
|
accountSASPermissions.deleteVersion = true;
|
|
break;
|
|
case "l":
|
|
accountSASPermissions.list = true;
|
|
break;
|
|
case "a":
|
|
accountSASPermissions.add = true;
|
|
break;
|
|
case "c":
|
|
accountSASPermissions.create = true;
|
|
break;
|
|
case "u":
|
|
accountSASPermissions.update = true;
|
|
break;
|
|
case "p":
|
|
accountSASPermissions.process = true;
|
|
break;
|
|
case "t":
|
|
accountSASPermissions.tag = true;
|
|
break;
|
|
case "f":
|
|
accountSASPermissions.filter = true;
|
|
break;
|
|
case "i":
|
|
accountSASPermissions.setImmutabilityPolicy = true;
|
|
break;
|
|
default:
|
|
throw new RangeError(`Invalid permission character: ${c}`);
|
|
}
|
|
}
|
|
return accountSASPermissions;
|
|
}
|
|
/**
|
|
* Creates a {@link AccountSASPermissions} from a raw object which contains same keys as it
|
|
* and boolean values for them.
|
|
*
|
|
* @param permissionLike -
|
|
*/
|
|
static from(permissionLike) {
|
|
const accountSASPermissions = new AccountSASPermissions();
|
|
if (permissionLike.read) {
|
|
accountSASPermissions.read = true;
|
|
}
|
|
if (permissionLike.write) {
|
|
accountSASPermissions.write = true;
|
|
}
|
|
if (permissionLike.delete) {
|
|
accountSASPermissions.delete = true;
|
|
}
|
|
if (permissionLike.deleteVersion) {
|
|
accountSASPermissions.deleteVersion = true;
|
|
}
|
|
if (permissionLike.filter) {
|
|
accountSASPermissions.filter = true;
|
|
}
|
|
if (permissionLike.tag) {
|
|
accountSASPermissions.tag = true;
|
|
}
|
|
if (permissionLike.list) {
|
|
accountSASPermissions.list = true;
|
|
}
|
|
if (permissionLike.add) {
|
|
accountSASPermissions.add = true;
|
|
}
|
|
if (permissionLike.create) {
|
|
accountSASPermissions.create = true;
|
|
}
|
|
if (permissionLike.update) {
|
|
accountSASPermissions.update = true;
|
|
}
|
|
if (permissionLike.process) {
|
|
accountSASPermissions.process = true;
|
|
}
|
|
if (permissionLike.setImmutabilityPolicy) {
|
|
accountSASPermissions.setImmutabilityPolicy = true;
|
|
}
|
|
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
|
|
*
|
|
*/
|
|
toString() {
|
|
// 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
|
|
const permissions = [];
|
|
if (this.read) {
|
|
permissions.push("r");
|
|
}
|
|
if (this.write) {
|
|
permissions.push("w");
|
|
}
|
|
if (this.delete) {
|
|
permissions.push("d");
|
|
}
|
|
if (this.deleteVersion) {
|
|
permissions.push("x");
|
|
}
|
|
if (this.filter) {
|
|
permissions.push("f");
|
|
}
|
|
if (this.tag) {
|
|
permissions.push("t");
|
|
}
|
|
if (this.list) {
|
|
permissions.push("l");
|
|
}
|
|
if (this.add) {
|
|
permissions.push("a");
|
|
}
|
|
if (this.create) {
|
|
permissions.push("c");
|
|
}
|
|
if (this.update) {
|
|
permissions.push("u");
|
|
}
|
|
if (this.process) {
|
|
permissions.push("p");
|
|
}
|
|
if (this.setImmutabilityPolicy) {
|
|
permissions.push("i");
|
|
}
|
|
return permissions.join("");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* This is a helper class to construct a string representing the resources accessible by an AccountSAS. Setting a value
|
|
* to true means that any SAS which uses these permissions will grant access to that resource type. Once all the
|
|
* values are set, this should be serialized with toString and set as the resources field on an
|
|
* {@link AccountSASSignatureValues} object. It is possible to construct the resources string without this class, but
|
|
* the order of the resources is particular and this class guarantees correctness.
|
|
*/
|
|
class AccountSASResourceTypes {
|
|
constructor() {
|
|
/**
|
|
* Permission to access service level APIs granted.
|
|
*/
|
|
this.service = false;
|
|
/**
|
|
* Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted.
|
|
*/
|
|
this.container = false;
|
|
/**
|
|
* Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted.
|
|
*/
|
|
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.
|
|
*
|
|
* @param resourceTypes -
|
|
*/
|
|
static parse(resourceTypes) {
|
|
const accountSASResourceTypes = new AccountSASResourceTypes();
|
|
for (const c of resourceTypes) {
|
|
switch (c) {
|
|
case "s":
|
|
accountSASResourceTypes.service = true;
|
|
break;
|
|
case "c":
|
|
accountSASResourceTypes.container = true;
|
|
break;
|
|
case "o":
|
|
accountSASResourceTypes.object = true;
|
|
break;
|
|
default:
|
|
throw new RangeError(`Invalid resource type: ${c}`);
|
|
}
|
|
}
|
|
return accountSASResourceTypes;
|
|
}
|
|
/**
|
|
* Converts the given resource types to a string.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
|
|
*
|
|
*/
|
|
toString() {
|
|
const resourceTypes = [];
|
|
if (this.service) {
|
|
resourceTypes.push("s");
|
|
}
|
|
if (this.container) {
|
|
resourceTypes.push("c");
|
|
}
|
|
if (this.object) {
|
|
resourceTypes.push("o");
|
|
}
|
|
return resourceTypes.join("");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* ONLY AVAILABLE IN NODE.JS RUNTIME.
|
|
*
|
|
* This is a helper class to construct a string representing the services accessible by an AccountSAS. Setting a value
|
|
* to true means that any SAS which uses these permissions will grant access to that service. Once all the
|
|
* values are set, this should be serialized with toString and set as the services field on an
|
|
* {@link AccountSASSignatureValues} object. It is possible to construct the services string without this class, but
|
|
* the order of the services is particular and this class guarantees correctness.
|
|
*/
|
|
class AccountSASServices {
|
|
constructor() {
|
|
/**
|
|
* Permission to access blob resources granted.
|
|
*/
|
|
this.blob = false;
|
|
/**
|
|
* Permission to access file resources granted.
|
|
*/
|
|
this.file = false;
|
|
/**
|
|
* Permission to access queue resources granted.
|
|
*/
|
|
this.queue = false;
|
|
/**
|
|
* Permission to access table resources granted.
|
|
*/
|
|
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.
|
|
*
|
|
* @param services -
|
|
*/
|
|
static parse(services) {
|
|
const accountSASServices = new AccountSASServices();
|
|
for (const c of services) {
|
|
switch (c) {
|
|
case "b":
|
|
accountSASServices.blob = true;
|
|
break;
|
|
case "f":
|
|
accountSASServices.file = true;
|
|
break;
|
|
case "q":
|
|
accountSASServices.queue = true;
|
|
break;
|
|
case "t":
|
|
accountSASServices.table = true;
|
|
break;
|
|
default:
|
|
throw new RangeError(`Invalid service character: ${c}`);
|
|
}
|
|
}
|
|
return accountSASServices;
|
|
}
|
|
/**
|
|
* Converts the given services to a string.
|
|
*
|
|
*/
|
|
toString() {
|
|
const services = [];
|
|
if (this.blob) {
|
|
services.push("b");
|
|
}
|
|
if (this.table) {
|
|
services.push("t");
|
|
}
|
|
if (this.queue) {
|
|
services.push("q");
|
|
}
|
|
if (this.file) {
|
|
services.push("f");
|
|
}
|
|
return services.join("");
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* 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 -
|
|
* @param sharedKeyCredential -
|
|
*/
|
|
function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) {
|
|
const version = accountSASSignatureValues.version
|
|
? accountSASSignatureValues.version
|
|
: SERVICE_VERSION;
|
|
if (accountSASSignatureValues.permissions &&
|
|
accountSASSignatureValues.permissions.setImmutabilityPolicy &&
|
|
version < "2020-08-04") {
|
|
throw RangeError("'version' must be >= '2020-08-04' when provided 'i' permission.");
|
|
}
|
|
if (accountSASSignatureValues.permissions &&
|
|
accountSASSignatureValues.permissions.deleteVersion &&
|
|
version < "2019-10-10") {
|
|
throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission.");
|
|
}
|
|
if (accountSASSignatureValues.permissions &&
|
|
accountSASSignatureValues.permissions.tag &&
|
|
version < "2019-12-12") {
|
|
throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission.");
|
|
}
|
|
if (accountSASSignatureValues.permissions &&
|
|
accountSASSignatureValues.permissions.filter &&
|
|
version < "2019-12-12") {
|
|
throw RangeError("'version' must be >= '2019-12-12' when provided 'f' permission.");
|
|
}
|
|
const parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString());
|
|
const parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString();
|
|
const parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString();
|
|
const 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");
|
|
const signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
|
|
return new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange);
|
|
}
|
|
|
|
/**
|
|
* A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you
|
|
* to manipulate blob containers.
|
|
*/
|
|
class BlobServiceClient extends StorageClient {
|
|
constructor(url, credentialOrPipeline,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
let pipeline;
|
|
if (isPipelineLike(credentialOrPipeline)) {
|
|
pipeline = credentialOrPipeline;
|
|
}
|
|
else if ((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);
|
|
}
|
|
super(url, pipeline);
|
|
this.serviceContext = new Service(this.storageClientContext);
|
|
}
|
|
/**
|
|
*
|
|
* Creates an instance of BlobServiceClient from connection string.
|
|
*
|
|
* @param connectionString - Account connection string or a SAS connection string of an Azure storage account.
|
|
* [ Note - Account connection string can only be used in NODE.JS runtime. ]
|
|
* Account connection string example -
|
|
* `DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=accountKey;EndpointSuffix=core.windows.net`
|
|
* SAS connection string example -
|
|
* `BlobEndpoint=https://myaccount.blob.core.windows.net/;QueueEndpoint=https://myaccount.queue.core.windows.net/;FileEndpoint=https://myaccount.file.core.windows.net/;TableEndpoint=https://myaccount.table.core.windows.net/;SharedAccessSignature=sasString`
|
|
* @param options - Optional. Options to configure the HTTP pipeline.
|
|
*/
|
|
static fromConnectionString(connectionString,
|
|
// Legacy, no fix for eslint error without breaking. Disable it for this interface.
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options*/
|
|
options) {
|
|
options = options || {};
|
|
const extractedCreds = extractConnectionStringParts(connectionString);
|
|
if (extractedCreds.kind === "AccountConnString") {
|
|
{
|
|
const sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
|
|
options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
|
|
const pipeline = newPipeline(sharedKeyCredential, options);
|
|
return new BlobServiceClient(extractedCreds.url, pipeline);
|
|
}
|
|
}
|
|
else if (extractedCreds.kind === "SASConnString") {
|
|
const 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 containerName - A container name
|
|
* @returns A new ContainerClient object for the given container name.
|
|
*
|
|
* Example usage:
|
|
*
|
|
* ```js
|
|
* const containerClient = blobServiceClient.getContainerClient("<container name>");
|
|
* ```
|
|
*/
|
|
getContainerClient(containerName) {
|
|
return new ContainerClient(appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline);
|
|
}
|
|
/**
|
|
* Create a Blob container.
|
|
*
|
|
* @param containerName - Name of the container to create.
|
|
* @param options - Options to configure Container Create operation.
|
|
* @returns Container creation response and the corresponding container client.
|
|
*/
|
|
async createContainer(containerName, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-createContainer", options);
|
|
try {
|
|
const containerClient = this.getContainerClient(containerName);
|
|
const containerCreateResponse = await containerClient.create(updatedOptions);
|
|
return {
|
|
containerClient,
|
|
containerCreateResponse
|
|
};
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Deletes a Blob container.
|
|
*
|
|
* @param containerName - Name of the container to delete.
|
|
* @param options - Options to configure Container Delete operation.
|
|
* @returns Container deletion response.
|
|
*/
|
|
async deleteContainer(containerName, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-deleteContainer", options);
|
|
try {
|
|
const containerClient = this.getContainerClient(containerName);
|
|
return await containerClient.delete(updatedOptions);
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Restore a previously deleted Blob container.
|
|
* This API is only functional if Container Soft Delete is enabled for the storage account associated with the container.
|
|
*
|
|
* @param deletedContainerName - Name of the previously deleted container.
|
|
* @param deletedContainerVersion - Version of the previously deleted container, used to uniquely identify the deleted container.
|
|
* @param options - Options to configure Container Restore operation.
|
|
* @returns Container deletion response.
|
|
*/
|
|
async undeleteContainer(deletedContainerName, deletedContainerVersion, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-undeleteContainer", options);
|
|
try {
|
|
const containerClient = this.getContainerClient(options.destinationContainerName || deletedContainerName);
|
|
// Hack to access a protected member.
|
|
const containerContext = new Container(containerClient["storageClientContext"]);
|
|
const containerUndeleteResponse = await containerContext.restore(Object.assign({ deletedContainerName,
|
|
deletedContainerVersion }, updatedOptions));
|
|
return { containerClient, containerUndeleteResponse };
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Rename an existing Blob Container.
|
|
*
|
|
* @param sourceContainerName - The name of the source container.
|
|
* @param destinationContainerName - The new name of the container.
|
|
* @param options - Options to configure Container Rename operation.
|
|
*/
|
|
/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */
|
|
// @ts-ignore Need to hide this interface for now. Make it public and turn on the live tests for it when the service is ready.
|
|
async renameContainer(sourceContainerName, destinationContainerName, options = {}) {
|
|
var _a;
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-renameContainer", options);
|
|
try {
|
|
const containerClient = this.getContainerClient(destinationContainerName);
|
|
// Hack to access a protected member.
|
|
const containerContext = new Container(containerClient["storageClientContext"]);
|
|
const containerRenameResponse = await containerContext.rename(sourceContainerName, Object.assign(Object.assign({}, updatedOptions), { sourceLeaseId: (_a = options.sourceCondition) === null || _a === void 0 ? void 0 : _a.leaseId }));
|
|
return { containerClient, containerRenameResponse };
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Options to the Service Get Properties operation.
|
|
* @returns Response data for the Service Get Properties operation.
|
|
*/
|
|
async getProperties(options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-getProperties", options);
|
|
try {
|
|
return await this.serviceContext.getProperties(Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 properties -
|
|
* @param options - Options to the Service Set Properties operation.
|
|
* @returns Response data for the Service Set Properties operation.
|
|
*/
|
|
async setProperties(properties, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-setProperties", options);
|
|
try {
|
|
return await this.serviceContext.setProperties(properties, Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Options to the Service Get Statistics operation.
|
|
* @returns Response data for the Service Get Statistics operation.
|
|
*/
|
|
async getStatistics(options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-getStatistics", options);
|
|
try {
|
|
return await this.serviceContext.getStatistics(Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* 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 options - Options to the Service Get Account Info operation.
|
|
* @returns Response data for the Service Get Account Info operation.
|
|
*/
|
|
async getAccountInfo(options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-getAccountInfo", options);
|
|
try {
|
|
return await this.serviceContext.getAccountInfo(Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Returns a list of the containers under the specified account.
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2
|
|
*
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of containers to be returned with the next listing operation. The
|
|
* operation returns the continuationToken value within the response body if the
|
|
* listing operation did not return all containers remaining to be listed
|
|
* with the current page. The continuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to the Service List Container Segment operation.
|
|
* @returns Response data for the Service List Container Segment operation.
|
|
*/
|
|
async listContainersSegment(marker, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-listContainersSegment", options);
|
|
try {
|
|
return await this.serviceContext.listContainersSegment(Object.assign(Object.assign(Object.assign({ abortSignal: options.abortSignal, marker }, options), { include: typeof options.include === "string" ? [options.include] : options.include }), convertTracingToRequestOptionsBase(updatedOptions)));
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* The Filter Blobs operation enables callers to list blobs across all containers whose tags
|
|
* match a given search expression. Filter blobs searches across all containers within a
|
|
* storage account but can be scoped within the expression to a single container.
|
|
*
|
|
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
|
|
* The given expression must evaluate to true for a blob to be returned in the results.
|
|
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
|
|
* however, only a subset of the OData filter syntax is supported in the Blob service.
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of blobs to be returned with the next listing operation. The
|
|
* operation returns the continuationToken value within the response body if the
|
|
* listing operation did not return all blobs remaining to be listed
|
|
* with the current page. The continuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to find blobs by tags.
|
|
*/
|
|
async findBlobsByTagsSegment(tagFilterSqlExpression, marker, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-findBlobsByTagsSegment", options);
|
|
try {
|
|
const response = await this.serviceContext.filterBlobs(Object.assign({ abortSignal: options.abortSignal, where: tagFilterSqlExpression, marker, maxPageSize: options.maxPageSize }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const wrappedResponse = Object.assign(Object.assign({}, response), { _response: response._response, blobs: response.blobs.map((blob) => {
|
|
var _a;
|
|
let tagValue = "";
|
|
if (((_a = blob.tags) === null || _a === void 0 ? void 0 : _a.blobTagSet.length) === 1) {
|
|
tagValue = blob.tags.blobTagSet[0].value;
|
|
}
|
|
return Object.assign(Object.assign({}, blob), { tags: toTags(blob.tags), tagValue });
|
|
}) });
|
|
return wrappedResponse;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for ServiceFindBlobsByTagsSegmentResponse.
|
|
*
|
|
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
|
|
* The given expression must evaluate to true for a blob to be returned in the results.
|
|
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
|
|
* however, only a subset of the OData filter syntax is supported in the Blob service.
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of blobs to be returned with the next listing operation. The
|
|
* operation returns the continuationToken value within the response body if the
|
|
* listing operation did not return all blobs remaining to be listed
|
|
* with the current page. The continuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to find blobs by tags.
|
|
*/
|
|
findBlobsByTagsSegments(tagFilterSqlExpression, marker, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* findBlobsByTagsSegments_1() {
|
|
let response;
|
|
if (!!marker || marker === undefined) {
|
|
do {
|
|
response = yield tslib.__await(this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options));
|
|
response.blobs = response.blobs || [];
|
|
marker = response.continuationToken;
|
|
yield yield tslib.__await(response);
|
|
} while (marker);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for blobs.
|
|
*
|
|
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
|
|
* The given expression must evaluate to true for a blob to be returned in the results.
|
|
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
|
|
* however, only a subset of the OData filter syntax is supported in the Blob service.
|
|
* @param options - Options to findBlobsByTagsItems.
|
|
*/
|
|
findBlobsByTagsItems(tagFilterSqlExpression, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* findBlobsByTagsItems_1() {
|
|
var e_1, _a;
|
|
let marker;
|
|
try {
|
|
for (var _b = tslib.__asyncValues(this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) {
|
|
const segment = _c.value;
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(segment.blobs)));
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b));
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Returns an async iterable iterator to find all blobs with specified tag
|
|
* under the specified account.
|
|
*
|
|
* .byPage() returns an async iterable iterator to list the blobs in pages.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties
|
|
*
|
|
* Example using `for await` syntax:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* for await (const blob of blobServiceClient.findBlobsByTags("tagkey='tagvalue'")) {
|
|
* console.log(`Blob ${i++}: ${container.name}`);
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using `iter.next()`:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* const iter = blobServiceClient.findBlobsByTags("tagkey='tagvalue'");
|
|
* 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 blobServiceClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 20 })) {
|
|
* if (response.blobs) {
|
|
* for (const blob of response.blobs) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Example using paging with a marker:
|
|
*
|
|
* ```js
|
|
* let i = 1;
|
|
* let iterator = blobServiceClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 2 });
|
|
* let response = (await iterator.next()).value;
|
|
*
|
|
* // Prints 2 blob names
|
|
* if (response.blobs) {
|
|
* for (const blob of response.blobs) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* }
|
|
*
|
|
* // Gets next marker
|
|
* let marker = response.continuationToken;
|
|
* // Passing next marker as continuationToken
|
|
* iterator = blobServiceClient
|
|
* .findBlobsByTags("tagkey='tagvalue'")
|
|
* .byPage({ continuationToken: marker, maxPageSize: 10 });
|
|
* response = (await iterator.next()).value;
|
|
*
|
|
* // Prints blob names
|
|
* if (response.blobs) {
|
|
* for (const blob of response.blobs) {
|
|
* console.log(`Blob ${i++}: ${blob.name}`);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression.
|
|
* The given expression must evaluate to true for a blob to be returned in the results.
|
|
* The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter;
|
|
* however, only a subset of the OData filter syntax is supported in the Blob service.
|
|
* @param options - Options to find blobs by tags.
|
|
*/
|
|
findBlobsByTags(tagFilterSqlExpression, options = {}) {
|
|
// AsyncIterableIterator to iterate over blobs
|
|
const listSegmentOptions = Object.assign({}, options);
|
|
const iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);
|
|
return {
|
|
/**
|
|
* The next method, part of the iteration protocol
|
|
*/
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
/**
|
|
* The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
/**
|
|
* Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
byPage: (settings = {}) => {
|
|
return this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, Object.assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions));
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses
|
|
*
|
|
* @param marker - A string value that identifies the portion of
|
|
* the list of containers to be returned with the next listing operation. The
|
|
* operation returns the continuationToken value within the response body if the
|
|
* listing operation did not return all containers remaining to be listed
|
|
* with the current page. The continuationToken value can be used as the value for
|
|
* the marker parameter in a subsequent call to request the next page of list
|
|
* items. The marker value is opaque to the client.
|
|
* @param options - Options to list containers operation.
|
|
*/
|
|
listSegments(marker, options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listSegments_1() {
|
|
let listContainersSegmentResponse;
|
|
if (!!marker || marker === undefined) {
|
|
do {
|
|
listContainersSegmentResponse = yield tslib.__await(this.listContainersSegment(marker, options));
|
|
listContainersSegmentResponse.containerItems =
|
|
listContainersSegmentResponse.containerItems || [];
|
|
marker = listContainersSegmentResponse.continuationToken;
|
|
yield yield tslib.__await(yield tslib.__await(listContainersSegmentResponse));
|
|
} while (marker);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Returns an AsyncIterableIterator for Container Items
|
|
*
|
|
* @param options - Options to list containers operation.
|
|
*/
|
|
listItems(options = {}) {
|
|
return tslib.__asyncGenerator(this, arguments, function* listItems_1() {
|
|
var e_2, _a;
|
|
let marker;
|
|
try {
|
|
for (var _b = tslib.__asyncValues(this.listSegments(marker, options)), _c; _c = yield tslib.__await(_b.next()), !_c.done;) {
|
|
const segment = _c.value;
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(segment.containerItems)));
|
|
}
|
|
}
|
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
finally {
|
|
try {
|
|
if (_c && !_c.done && (_a = _b.return)) yield tslib.__await(_a.call(_b));
|
|
}
|
|
finally { if (e_2) throw e_2.error; }
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* 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 options - Options to list containers.
|
|
* @returns An asyncIterableIterator that supports paging.
|
|
*/
|
|
listContainers(options = {}) {
|
|
if (options.prefix === "") {
|
|
options.prefix = undefined;
|
|
}
|
|
const include = [];
|
|
if (options.includeDeleted) {
|
|
include.push("deleted");
|
|
}
|
|
if (options.includeMetadata) {
|
|
include.push("metadata");
|
|
}
|
|
// AsyncIterableIterator to iterate over containers
|
|
const listSegmentOptions = Object.assign(Object.assign({}, options), (include.length > 0 ? { include } : {}));
|
|
const iter = this.listItems(listSegmentOptions);
|
|
return {
|
|
/**
|
|
* The next method, part of the iteration protocol
|
|
*/
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
/**
|
|
* The connection to the async iterator, part of the iteration protocol
|
|
*/
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
/**
|
|
* Return an AsyncIterableIterator that works a page at a time
|
|
*/
|
|
byPage: (settings = {}) => {
|
|
return this.listSegments(settings.continuationToken, Object.assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions));
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* 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 startsOn - The start time for the user delegation SAS. Must be within 7 days of the current time
|
|
* @param expiresOn - The end time for the user delegation SAS. Must be within 7 days of the current time
|
|
*/
|
|
async getUserDelegationKey(startsOn, expiresOn, options = {}) {
|
|
const { span, updatedOptions } = createSpan("BlobServiceClient-getUserDelegationKey", options);
|
|
try {
|
|
const response = await this.serviceContext.getUserDelegationKey({
|
|
startsOn: truncatedISO8061Date(startsOn, false),
|
|
expiresOn: truncatedISO8061Date(expiresOn, false)
|
|
}, Object.assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)));
|
|
const 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
|
|
};
|
|
const res = Object.assign({ _response: response._response, requestId: response.requestId, clientRequestId: response.clientRequestId, version: response.version, date: response.date, errorCode: response.errorCode }, userDelegationKey);
|
|
return res;
|
|
}
|
|
catch (e) {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: e.message
|
|
});
|
|
throw e;
|
|
}
|
|
finally {
|
|
span.end();
|
|
}
|
|
}
|
|
/**
|
|
* Creates a BlobBatchClient object to conduct batch operations.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
|
|
*
|
|
* @returns A new BlobBatchClient object for this service.
|
|
*/
|
|
getBlobBatchClient() {
|
|
return new BlobBatchClient(this.url, this.pipeline);
|
|
}
|
|
/**
|
|
* Only available for BlobServiceClient constructed with a shared key credential.
|
|
*
|
|
* Generates a Blob account Shared Access Signature (SAS) URI based on the client properties
|
|
* and parameters passed in. The SAS is signed by the shared key credential of the client.
|
|
*
|
|
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas
|
|
*
|
|
* @param expiresOn - Optional. The time at which the shared access signature becomes invalid. Default to an hour later if not provided.
|
|
* @param permissions - Specifies the list of permissions to be associated with the SAS.
|
|
* @param resourceTypes - Specifies the resource types associated with the shared access signature.
|
|
* @param options - Optional parameters.
|
|
* @returns An account SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token.
|
|
*/
|
|
generateAccountSasUrl(expiresOn, permissions = AccountSASPermissions.parse("r"), resourceTypes = "sco", options = {}) {
|
|
if (!(this.credential instanceof StorageSharedKeyCredential)) {
|
|
throw RangeError("Can only generate the account SAS when the client is initialized with a shared key credential");
|
|
}
|
|
if (expiresOn === undefined) {
|
|
const now = new Date();
|
|
expiresOn = new Date(now.getTime() + 3600 * 1000);
|
|
}
|
|
const sas = generateAccountSASQueryParameters(Object.assign({ permissions,
|
|
expiresOn,
|
|
resourceTypes, services: AccountSASServices.parse("b").toString() }, options), this.credential).toString();
|
|
return appendToURLQuery(this.url, sas);
|
|
}
|
|
}
|
|
|
|
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.isPipelineLike = isPipelineLike;
|
|
exports.logger = logger;
|
|
exports.newPipeline = newPipeline;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
/* 374 */,
|
|
/* 375 */,
|
|
/* 376 */,
|
|
/* 377 */,
|
|
/* 378 */,
|
|
/* 379 */,
|
|
/* 380 */,
|
|
/* 381 */,
|
|
/* 382 */,
|
|
/* 383 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Path = void 0;
|
|
const path = __importStar(__webpack_require__(622));
|
|
const pathHelper = __importStar(__webpack_require__(972));
|
|
const assert_1 = __importDefault(__webpack_require__(357));
|
|
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_1.default(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_1.default(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_1.default(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_1.default(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_1.default(!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
|
|
|
|
/***/ }),
|
|
/* 384 */,
|
|
/* 385 */,
|
|
/* 386 */,
|
|
/* 387 */,
|
|
/* 388 */,
|
|
/* 389 */,
|
|
/* 390 */,
|
|
/* 391 */,
|
|
/* 392 */,
|
|
/* 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__(815);
|
|
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__(147);
|
|
|
|
// 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 394 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.ProxyTracerProvider = void 0;
|
|
var ProxyTracer_1 = __webpack_require__(398);
|
|
var NoopTracerProvider_1 = __webpack_require__(162);
|
|
var NOOP_TRACER_PROVIDER = new NoopTracerProvider_1.NoopTracerProvider();
|
|
/**
|
|
* Tracer provider which provides {@link ProxyTracer}s.
|
|
*
|
|
* Before a delegate is set, tracers provided are NoOp.
|
|
* When a delegate is set, traces are provided from the delegate.
|
|
* When a delegate is set after tracers have already been provided,
|
|
* all tracers already provided will use the provided delegate implementation.
|
|
*/
|
|
var ProxyTracerProvider = /** @class */ (function () {
|
|
function ProxyTracerProvider() {
|
|
}
|
|
/**
|
|
* Get a {@link ProxyTracer}
|
|
*/
|
|
ProxyTracerProvider.prototype.getTracer = function (name, version) {
|
|
var _a;
|
|
return ((_a = this.getDelegateTracer(name, version)) !== null && _a !== void 0 ? _a : new ProxyTracer_1.ProxyTracer(this, name, version));
|
|
};
|
|
ProxyTracerProvider.prototype.getDelegate = function () {
|
|
var _a;
|
|
return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;
|
|
};
|
|
/**
|
|
* Set the delegate tracer provider
|
|
*/
|
|
ProxyTracerProvider.prototype.setDelegate = function (delegate) {
|
|
this._delegate = delegate;
|
|
};
|
|
ProxyTracerProvider.prototype.getDelegateTracer = function (name, version) {
|
|
var _a;
|
|
return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version);
|
|
};
|
|
return ProxyTracerProvider;
|
|
}());
|
|
exports.ProxyTracerProvider = ProxyTracerProvider;
|
|
//# sourceMappingURL=ProxyTracerProvider.js.map
|
|
|
|
/***/ }),
|
|
/* 395 */,
|
|
/* 396 */,
|
|
/* 397 */,
|
|
/* 398 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.ProxyTracer = void 0;
|
|
var NoopTracer_1 = __webpack_require__(151);
|
|
var NOOP_TRACER = new NoopTracer_1.NoopTracer();
|
|
/**
|
|
* Proxy tracer provided by the proxy tracer provider
|
|
*/
|
|
var ProxyTracer = /** @class */ (function () {
|
|
function ProxyTracer(_provider, name, version) {
|
|
this._provider = _provider;
|
|
this.name = name;
|
|
this.version = version;
|
|
}
|
|
ProxyTracer.prototype.startSpan = function (name, options, context) {
|
|
return this._getTracer().startSpan(name, options, context);
|
|
};
|
|
ProxyTracer.prototype.startActiveSpan = function (_name, _options, _context, _fn) {
|
|
var tracer = this._getTracer();
|
|
return Reflect.apply(tracer.startActiveSpan, tracer, arguments);
|
|
};
|
|
/**
|
|
* Try to get a tracer from the proxy tracer provider.
|
|
* If the proxy tracer provider has no delegate, return a noop tracer.
|
|
*/
|
|
ProxyTracer.prototype._getTracer = function () {
|
|
if (this._delegate) {
|
|
return this._delegate;
|
|
}
|
|
var tracer = this._provider.getDelegateTracer(this.name, this.version);
|
|
if (!tracer) {
|
|
return NOOP_TRACER;
|
|
}
|
|
this._delegate = tracer;
|
|
return this._delegate;
|
|
};
|
|
return ProxyTracer;
|
|
}());
|
|
exports.ProxyTracer = ProxyTracer;
|
|
//# sourceMappingURL=ProxyTracer.js.map
|
|
|
|
/***/ }),
|
|
/* 399 */,
|
|
/* 400 */,
|
|
/* 401 */,
|
|
/* 402 */,
|
|
/* 403 */,
|
|
/* 404 */,
|
|
/* 405 */,
|
|
/* 406 */,
|
|
/* 407 */,
|
|
/* 408 */,
|
|
/* 409 */,
|
|
/* 410 */,
|
|
/* 411 */,
|
|
/* 412 */,
|
|
/* 413 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
module.exports = __webpack_require__(141);
|
|
|
|
|
|
/***/ }),
|
|
/* 414 */,
|
|
/* 415 */,
|
|
/* 416 */,
|
|
/* 417 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("crypto");
|
|
|
|
/***/ }),
|
|
/* 418 */,
|
|
/* 419 */,
|
|
/* 420 */,
|
|
/* 421 */,
|
|
/* 422 */,
|
|
/* 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__(903)
|
|
, 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);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 425 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
to[j] = from[i];
|
|
return to;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.NoopContextManager = void 0;
|
|
var context_1 = __webpack_require__(132);
|
|
var NoopContextManager = /** @class */ (function () {
|
|
function NoopContextManager() {
|
|
}
|
|
NoopContextManager.prototype.active = function () {
|
|
return context_1.ROOT_CONTEXT;
|
|
};
|
|
NoopContextManager.prototype.with = function (_context, fn, thisArg) {
|
|
var args = [];
|
|
for (var _i = 3; _i < arguments.length; _i++) {
|
|
args[_i - 3] = arguments[_i];
|
|
}
|
|
return fn.call.apply(fn, __spreadArray([thisArg], args));
|
|
};
|
|
NoopContextManager.prototype.bind = function (_context, target) {
|
|
return target;
|
|
};
|
|
NoopContextManager.prototype.enable = function () {
|
|
return this;
|
|
};
|
|
NoopContextManager.prototype.disable = function () {
|
|
return this;
|
|
};
|
|
return NoopContextManager;
|
|
}());
|
|
exports.NoopContextManager = NoopContextManager;
|
|
//# sourceMappingURL=NoopContextManager.js.map
|
|
|
|
/***/ }),
|
|
/* 426 */,
|
|
/* 427 */,
|
|
/* 428 */,
|
|
/* 429 */,
|
|
/* 430 */,
|
|
/* 431 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.issue = exports.issueCommand = void 0;
|
|
const os = __importStar(__webpack_require__(87));
|
|
const utils_1 = __webpack_require__(82);
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|
|
function escapeData(s) {
|
|
return utils_1.toCommandValue(s)
|
|
.replace(/%/g, '%25')
|
|
.replace(/\r/g, '%0D')
|
|
.replace(/\n/g, '%0A');
|
|
}
|
|
function escapeProperty(s) {
|
|
return utils_1.toCommandValue(s)
|
|
.replace(/%/g, '%25')
|
|
.replace(/\r/g, '%0D')
|
|
.replace(/\n/g, '%0A')
|
|
.replace(/:/g, '%3A')
|
|
.replace(/,/g, '%2C');
|
|
}
|
|
//# sourceMappingURL=command.js.map
|
|
|
|
/***/ }),
|
|
/* 432 */,
|
|
/* 433 */,
|
|
/* 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* () {
|
|
switch (process.platform) {
|
|
case 'win32': {
|
|
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');
|
|
}
|
|
break;
|
|
}
|
|
case 'darwin': {
|
|
const gnuTar = yield io.which('gtar', false);
|
|
if (gnuTar) {
|
|
// fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527
|
|
args.push('--delay-directory-restore');
|
|
return gnuTar;
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
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 = [
|
|
'--posix',
|
|
...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;
|
|
function listTar(archivePath, compressionMethod) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// --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(),
|
|
'-tf',
|
|
archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
|
|
'-P'
|
|
];
|
|
yield execTar(args, compressionMethod);
|
|
});
|
|
}
|
|
exports.listTar = listTar;
|
|
//# sourceMappingURL=tar.js.map
|
|
|
|
/***/ }),
|
|
/* 435 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = void 0;
|
|
var trace_flags_1 = __webpack_require__(975);
|
|
exports.INVALID_SPANID = '0000000000000000';
|
|
exports.INVALID_TRACEID = '00000000000000000000000000000000';
|
|
exports.INVALID_SPAN_CONTEXT = {
|
|
traceId: exports.INVALID_TRACEID,
|
|
spanId: exports.INVALID_SPANID,
|
|
traceFlags: trace_flags_1.TraceFlags.NONE,
|
|
};
|
|
//# sourceMappingURL=invalid-span-constants.js.map
|
|
|
|
/***/ }),
|
|
/* 436 */,
|
|
/* 437 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.NonRecordingSpan = void 0;
|
|
var invalid_span_constants_1 = __webpack_require__(435);
|
|
/**
|
|
* The NonRecordingSpan is the default {@link Span} that is used when no Span
|
|
* implementation is available. All operations are no-op including context
|
|
* propagation.
|
|
*/
|
|
var NonRecordingSpan = /** @class */ (function () {
|
|
function NonRecordingSpan(_spanContext) {
|
|
if (_spanContext === void 0) { _spanContext = invalid_span_constants_1.INVALID_SPAN_CONTEXT; }
|
|
this._spanContext = _spanContext;
|
|
}
|
|
// Returns a SpanContext.
|
|
NonRecordingSpan.prototype.spanContext = function () {
|
|
return this._spanContext;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.setAttribute = function (_key, _value) {
|
|
return this;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.setAttributes = function (_attributes) {
|
|
return this;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.addEvent = function (_name, _attributes) {
|
|
return this;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.setStatus = function (_status) {
|
|
return this;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.updateName = function (_name) {
|
|
return this;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.end = function (_endTime) { };
|
|
// isRecording always returns false for NonRecordingSpan.
|
|
NonRecordingSpan.prototype.isRecording = function () {
|
|
return false;
|
|
};
|
|
// By default does nothing
|
|
NonRecordingSpan.prototype.recordException = function (_exception, _time) { };
|
|
return NonRecordingSpan;
|
|
}());
|
|
exports.NonRecordingSpan = NonRecordingSpan;
|
|
//# sourceMappingURL=NonRecordingSpan.js.map
|
|
|
|
/***/ }),
|
|
/* 438 */,
|
|
/* 439 */,
|
|
/* 440 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.diag = exports.propagation = exports.trace = exports.context = exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = exports.isValidSpanId = exports.isValidTraceId = exports.isSpanContextValid = exports.baggageEntryMetadataFromString = void 0;
|
|
__exportStar(__webpack_require__(880), exports);
|
|
var utils_1 = __webpack_require__(112);
|
|
Object.defineProperty(exports, "baggageEntryMetadataFromString", { enumerable: true, get: function () { return utils_1.baggageEntryMetadataFromString; } });
|
|
__exportStar(__webpack_require__(452), exports);
|
|
__exportStar(__webpack_require__(158), exports);
|
|
__exportStar(__webpack_require__(893), exports);
|
|
__exportStar(__webpack_require__(881), exports);
|
|
__exportStar(__webpack_require__(906), exports);
|
|
__exportStar(__webpack_require__(95), exports);
|
|
__exportStar(__webpack_require__(398), exports);
|
|
__exportStar(__webpack_require__(394), exports);
|
|
__exportStar(__webpack_require__(781), exports);
|
|
__exportStar(__webpack_require__(340), exports);
|
|
__exportStar(__webpack_require__(607), exports);
|
|
__exportStar(__webpack_require__(670), exports);
|
|
__exportStar(__webpack_require__(586), exports);
|
|
__exportStar(__webpack_require__(220), exports);
|
|
__exportStar(__webpack_require__(932), exports);
|
|
__exportStar(__webpack_require__(975), exports);
|
|
__exportStar(__webpack_require__(207), exports);
|
|
__exportStar(__webpack_require__(694), exports);
|
|
__exportStar(__webpack_require__(695), exports);
|
|
var spancontext_utils_1 = __webpack_require__(629);
|
|
Object.defineProperty(exports, "isSpanContextValid", { enumerable: true, get: function () { return spancontext_utils_1.isSpanContextValid; } });
|
|
Object.defineProperty(exports, "isValidTraceId", { enumerable: true, get: function () { return spancontext_utils_1.isValidTraceId; } });
|
|
Object.defineProperty(exports, "isValidSpanId", { enumerable: true, get: function () { return spancontext_utils_1.isValidSpanId; } });
|
|
var invalid_span_constants_1 = __webpack_require__(435);
|
|
Object.defineProperty(exports, "INVALID_SPANID", { enumerable: true, get: function () { return invalid_span_constants_1.INVALID_SPANID; } });
|
|
Object.defineProperty(exports, "INVALID_TRACEID", { enumerable: true, get: function () { return invalid_span_constants_1.INVALID_TRACEID; } });
|
|
Object.defineProperty(exports, "INVALID_SPAN_CONTEXT", { enumerable: true, get: function () { return invalid_span_constants_1.INVALID_SPAN_CONTEXT; } });
|
|
__exportStar(__webpack_require__(132), exports);
|
|
__exportStar(__webpack_require__(845), exports);
|
|
var context_1 = __webpack_require__(492);
|
|
/** Entrypoint for context API */
|
|
exports.context = context_1.ContextAPI.getInstance();
|
|
var trace_1 = __webpack_require__(875);
|
|
/** Entrypoint for trace API */
|
|
exports.trace = trace_1.TraceAPI.getInstance();
|
|
var propagation_1 = __webpack_require__(22);
|
|
/** Entrypoint for propagation API */
|
|
exports.propagation = propagation_1.PropagationAPI.getInstance();
|
|
var diag_1 = __webpack_require__(118);
|
|
/**
|
|
* Entrypoint for Diag API.
|
|
* Defines Diagnostic handler used for internal diagnostic logging operations.
|
|
* The default provides a Noop DiagLogger implementation which may be changed via the
|
|
* diag.setLogger(logger: DiagLogger) function.
|
|
*/
|
|
exports.diag = diag_1.DiagAPI.instance();
|
|
exports.default = {
|
|
trace: exports.trace,
|
|
context: exports.context,
|
|
propagation: exports.propagation,
|
|
diag: exports.diag,
|
|
};
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
/* 441 */,
|
|
/* 442 */,
|
|
/* 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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getInputAsInt = exports.getInputAsArray = exports.isValidEvent = exports.logWarning = exports.getCacheState = exports.setOutputAndState = exports.setCacheHitOutput = exports.setCacheState = exports.isExactKeyMatch = exports.isGhes = void 0;
|
|
const core = __importStar(__webpack_require__(470));
|
|
const constants_1 = __webpack_require__(196);
|
|
function isGhes() {
|
|
const ghUrl = new URL(process.env["GITHUB_SERVER_URL"] || "https://github.com");
|
|
return ghUrl.hostname.toUpperCase() !== "GITHUB.COM";
|
|
}
|
|
exports.isGhes = isGhes;
|
|
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;
|
|
function getInputAsInt(name, options) {
|
|
const value = parseInt(core.getInput(name, options));
|
|
if (isNaN(value) || value < 0) {
|
|
return undefined;
|
|
}
|
|
return value;
|
|
}
|
|
exports.getInputAsInt = getInputAsInt;
|
|
|
|
|
|
/***/ }),
|
|
/* 444 */,
|
|
/* 445 */,
|
|
/* 446 */,
|
|
/* 447 */,
|
|
/* 448 */,
|
|
/* 449 */,
|
|
/* 450 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 452 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=Exception.js.map
|
|
|
|
/***/ }),
|
|
/* 453 */,
|
|
/* 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 whatwgUrl = _interopDefault(__webpack_require__(70));
|
|
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 = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
|
|
if (res) {
|
|
res.pop(); // drop last quote
|
|
}
|
|
}
|
|
|
|
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');
|
|
const URL = Url.URL || whatwgUrl.URL;
|
|
|
|
// fix an issue where "format", "parse" aren't a named export for node <10
|
|
const parse_url = Url.parse;
|
|
const format_url = Url.format;
|
|
|
|
/**
|
|
* Wrapper around `new URL` to handle arbitrary URLs
|
|
*
|
|
* @param {string} urlStr
|
|
* @return {void}
|
|
*/
|
|
function parseURL(urlStr) {
|
|
/*
|
|
Check whether the URL is absolute or not
|
|
Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
|
|
Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
|
|
*/
|
|
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) {
|
|
urlStr = new URL(urlStr).toString();
|
|
}
|
|
|
|
// Fallback to old implementation for arbitrary URLs
|
|
return parse_url(urlStr);
|
|
}
|
|
|
|
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 = parseURL(input.href);
|
|
} else {
|
|
// coerce input to a string before attempting to parse
|
|
parsedURL = parseURL(`${input}`);
|
|
}
|
|
input = {};
|
|
} else {
|
|
parsedURL = parseURL(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(`uri requested responds with a redirect, 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,
|
|
size: request.size
|
|
};
|
|
|
|
// 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 455 */,
|
|
/* 456 */,
|
|
/* 457 */,
|
|
/* 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 */,
|
|
/* 460 */
|
|
/***/ (function(module) {
|
|
|
|
// generated by genversion
|
|
module.exports = '4.0.0'
|
|
|
|
|
|
/***/ }),
|
|
/* 461 */,
|
|
/* 462 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 464 */,
|
|
/* 465 */,
|
|
/* 466 */,
|
|
/* 467 */,
|
|
/* 468 */,
|
|
/* 469 */,
|
|
/* 470 */
|
|
/***/ (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 (k !== "default" && 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 });
|
|
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
|
|
const command_1 = __webpack_require__(431);
|
|
const file_command_1 = __webpack_require__(102);
|
|
const utils_1 = __webpack_require__(82);
|
|
const os = __importStar(__webpack_require__(87));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const oidc_utils_1 = __webpack_require__(742);
|
|
/**
|
|
* 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 = utils_1.toCommandValue(val);
|
|
process.env[name] = convertedVal;
|
|
const filePath = process.env['GITHUB_ENV'] || '';
|
|
if (filePath) {
|
|
const delimiter = '_GitHubActionsFileCommandDelimeter_';
|
|
const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
|
|
file_command_1.issueCommand('ENV', commandValue);
|
|
}
|
|
else {
|
|
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) {
|
|
const filePath = process.env['GITHUB_PATH'] || '';
|
|
if (filePath) {
|
|
file_command_1.issueCommand('PATH', inputPath);
|
|
}
|
|
else {
|
|
command_1.issueCommand('add-path', {}, inputPath);
|
|
}
|
|
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
|
}
|
|
exports.addPath = addPath;
|
|
/**
|
|
* Gets the value of an input.
|
|
* Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
|
|
* Returns an empty string if the value is not defined.
|
|
*
|
|
* @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}`);
|
|
}
|
|
if (options && options.trimWhitespace === false) {
|
|
return val;
|
|
}
|
|
return val.trim();
|
|
}
|
|
exports.getInput = getInput;
|
|
/**
|
|
* Gets the values of an multiline input. Each value is also trimmed.
|
|
*
|
|
* @param name name of the input to get
|
|
* @param options optional. See InputOptions.
|
|
* @returns string[]
|
|
*
|
|
*/
|
|
function getMultilineInput(name, options) {
|
|
const inputs = getInput(name, options)
|
|
.split('\n')
|
|
.filter(x => x !== '');
|
|
return inputs;
|
|
}
|
|
exports.getMultilineInput = getMultilineInput;
|
|
/**
|
|
* Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
|
|
* Support boolean input list: `true | True | TRUE | false | False | FALSE` .
|
|
* The return value is also in boolean type.
|
|
* ref: https://yaml.org/spec/1.2/spec.html#id2804923
|
|
*
|
|
* @param name name of the input to get
|
|
* @param options optional. See InputOptions.
|
|
* @returns boolean
|
|
*/
|
|
function getBooleanInput(name, options) {
|
|
const trueValue = ['true', 'True', 'TRUE'];
|
|
const falseValue = ['false', 'False', 'FALSE'];
|
|
const val = getInput(name, options);
|
|
if (trueValue.includes(val))
|
|
return true;
|
|
if (falseValue.includes(val))
|
|
return false;
|
|
throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
|
|
`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
}
|
|
exports.getBooleanInput = getBooleanInput;
|
|
/**
|
|
* 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) {
|
|
process.stdout.write(os.EOL);
|
|
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()
|
|
* @param properties optional properties to add to the annotation.
|
|
*/
|
|
function error(message, properties = {}) {
|
|
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.error = error;
|
|
/**
|
|
* Adds a warning issue
|
|
* @param message warning issue message. Errors will be converted to string via toString()
|
|
* @param properties optional properties to add to the annotation.
|
|
*/
|
|
function warning(message, properties = {}) {
|
|
command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.warning = warning;
|
|
/**
|
|
* Adds a notice issue
|
|
* @param message notice issue message. Errors will be converted to string via toString()
|
|
* @param properties optional properties to add to the annotation.
|
|
*/
|
|
function notice(message, properties = {}) {
|
|
command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
}
|
|
exports.notice = notice;
|
|
/**
|
|
* 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;
|
|
function getIDToken(aud) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield oidc_utils_1.OidcClient.getIDToken(aud);
|
|
});
|
|
}
|
|
exports.getIDToken = getIDToken;
|
|
//# sourceMappingURL=core.js.map
|
|
|
|
/***/ }),
|
|
/* 471 */,
|
|
/* 472 */,
|
|
/* 473 */,
|
|
/* 474 */,
|
|
/* 475 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 477 */,
|
|
/* 478 */,
|
|
/* 479 */,
|
|
/* 480 */,
|
|
/* 481 */,
|
|
/* 482 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = [[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]];
|
|
|
|
/***/ }),
|
|
/* 483 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.deleteBaggage = exports.setBaggage = exports.getBaggage = void 0;
|
|
var context_1 = __webpack_require__(132);
|
|
/**
|
|
* Baggage key
|
|
*/
|
|
var BAGGAGE_KEY = context_1.createContextKey('OpenTelemetry Baggage Key');
|
|
/**
|
|
* Retrieve the current baggage from the given context
|
|
*
|
|
* @param {Context} Context that manage all context values
|
|
* @returns {Baggage} Extracted baggage from the context
|
|
*/
|
|
function getBaggage(context) {
|
|
return context.getValue(BAGGAGE_KEY) || undefined;
|
|
}
|
|
exports.getBaggage = getBaggage;
|
|
/**
|
|
* Store a baggage in the given context
|
|
*
|
|
* @param {Context} Context that manage all context values
|
|
* @param {Baggage} baggage that will be set in the actual context
|
|
*/
|
|
function setBaggage(context, baggage) {
|
|
return context.setValue(BAGGAGE_KEY, baggage);
|
|
}
|
|
exports.setBaggage = setBaggage;
|
|
/**
|
|
* Delete the baggage stored in the given context
|
|
*
|
|
* @param {Context} Context that manage all context values
|
|
*/
|
|
function deleteBaggage(context) {
|
|
return context.deleteValue(BAGGAGE_KEY);
|
|
}
|
|
exports.deleteBaggage = deleteBaggage;
|
|
//# sourceMappingURL=context-helpers.js.map
|
|
|
|
/***/ }),
|
|
/* 484 */,
|
|
/* 485 */,
|
|
/* 486 */,
|
|
/* 487 */,
|
|
/* 488 */,
|
|
/* 489 */,
|
|
/* 490 */,
|
|
/* 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 The 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.
|
|
*/
|
|
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
to[j] = from[i];
|
|
return to;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.ContextAPI = void 0;
|
|
var NoopContextManager_1 = __webpack_require__(425);
|
|
var global_utils_1 = __webpack_require__(525);
|
|
var diag_1 = __webpack_require__(118);
|
|
var API_NAME = 'context';
|
|
var NOOP_CONTEXT_MANAGER = new NoopContextManager_1.NoopContextManager();
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Context API
|
|
*/
|
|
var ContextAPI = /** @class */ (function () {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
function ContextAPI() {
|
|
}
|
|
/** Get the singleton instance of the Context API */
|
|
ContextAPI.getInstance = function () {
|
|
if (!this._instance) {
|
|
this._instance = new ContextAPI();
|
|
}
|
|
return this._instance;
|
|
};
|
|
/**
|
|
* Set the current context manager.
|
|
*
|
|
* @returns true if the context manager was successfully registered, else false
|
|
*/
|
|
ContextAPI.prototype.setGlobalContextManager = function (contextManager) {
|
|
return global_utils_1.registerGlobal(API_NAME, contextManager, diag_1.DiagAPI.instance());
|
|
};
|
|
/**
|
|
* Get the currently active context
|
|
*/
|
|
ContextAPI.prototype.active = function () {
|
|
return this._getContextManager().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
|
|
* @param thisArg optional receiver to be used for calling fn
|
|
* @param args optional arguments forwarded to fn
|
|
*/
|
|
ContextAPI.prototype.with = function (context, fn, thisArg) {
|
|
var _a;
|
|
var args = [];
|
|
for (var _i = 3; _i < arguments.length; _i++) {
|
|
args[_i - 3] = arguments[_i];
|
|
}
|
|
return (_a = this._getContextManager()).with.apply(_a, __spreadArray([context, fn, thisArg], args));
|
|
};
|
|
/**
|
|
* Bind a context to a target function or event emitter
|
|
*
|
|
* @param context context to bind to the event emitter or function. Defaults to the currently active context
|
|
* @param target function or event emitter to bind
|
|
*/
|
|
ContextAPI.prototype.bind = function (context, target) {
|
|
return this._getContextManager().bind(context, target);
|
|
};
|
|
ContextAPI.prototype._getContextManager = function () {
|
|
return global_utils_1.getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;
|
|
};
|
|
/** Disable and remove the global context manager */
|
|
ContextAPI.prototype.disable = function () {
|
|
this._getContextManager().disable();
|
|
global_utils_1.unregisterGlobal(API_NAME, diag_1.DiagAPI.instance());
|
|
};
|
|
return ContextAPI;
|
|
}());
|
|
exports.ContextAPI = ContextAPI;
|
|
//# sourceMappingURL=context.js.map
|
|
|
|
/***/ }),
|
|
/* 493 */,
|
|
/* 494 */,
|
|
/* 495 */,
|
|
/* 496 */,
|
|
/* 497 */,
|
|
/* 498 */,
|
|
/* 499 */,
|
|
/* 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);
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 501 */,
|
|
/* 502 */,
|
|
/* 503 */,
|
|
/* 504 */,
|
|
/* 505 */,
|
|
/* 506 */,
|
|
/* 507 */,
|
|
/* 508 */,
|
|
/* 509 */,
|
|
/* 510 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
__webpack_require__(71);
|
|
var tslib = __webpack_require__(671);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* returns an async iterator that iterates over results. It also has a `byPage`
|
|
* method that returns pages of items at once.
|
|
*
|
|
* @param pagedResult - an object that specifies how to get pages.
|
|
* @returns a paged async iterator that iterates over results.
|
|
*/
|
|
function getPagedAsyncIterator(pagedResult) {
|
|
var _a;
|
|
const iter = getItemAsyncIterator(pagedResult);
|
|
return {
|
|
next() {
|
|
return iter.next();
|
|
},
|
|
[Symbol.asyncIterator]() {
|
|
return this;
|
|
},
|
|
byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => {
|
|
return getPageAsyncIterator(pagedResult, settings === null || settings === void 0 ? void 0 : settings.maxPageSize);
|
|
})
|
|
};
|
|
}
|
|
function getItemAsyncIterator(pagedResult, maxPageSize) {
|
|
return tslib.__asyncGenerator(this, arguments, function* getItemAsyncIterator_1() {
|
|
var e_1, _a;
|
|
const pages = getPageAsyncIterator(pagedResult, maxPageSize);
|
|
const firstVal = yield tslib.__await(pages.next());
|
|
// if the result does not have an array shape, i.e. TPage = TElement, then we return it as is
|
|
if (!Array.isArray(firstVal.value)) {
|
|
yield yield tslib.__await(firstVal.value);
|
|
// `pages` is of type `AsyncIterableIterator<TPage>` but TPage = TElement in this case
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(pages)));
|
|
}
|
|
else {
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(firstVal.value)));
|
|
try {
|
|
for (var pages_1 = tslib.__asyncValues(pages), pages_1_1; pages_1_1 = yield tslib.__await(pages_1.next()), !pages_1_1.done;) {
|
|
const page = pages_1_1.value;
|
|
// pages is of type `AsyncIterableIterator<TPage>` so `page` is of type `TPage`. In this branch,
|
|
// it must be the case that `TPage = TElement[]`
|
|
yield tslib.__await(yield* tslib.__asyncDelegator(tslib.__asyncValues(page)));
|
|
}
|
|
}
|
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
finally {
|
|
try {
|
|
if (pages_1_1 && !pages_1_1.done && (_a = pages_1.return)) yield tslib.__await(_a.call(pages_1));
|
|
}
|
|
finally { if (e_1) throw e_1.error; }
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function getPageAsyncIterator(pagedResult, maxPageSize) {
|
|
return tslib.__asyncGenerator(this, arguments, function* getPageAsyncIterator_1() {
|
|
let response = yield tslib.__await(pagedResult.getPage(pagedResult.firstPageLink, maxPageSize));
|
|
yield yield tslib.__await(response.page);
|
|
while (response.nextPageLink) {
|
|
response = yield tslib.__await(pagedResult.getPage(response.nextPageLink, maxPageSize));
|
|
yield yield tslib.__await(response.page);
|
|
}
|
|
});
|
|
}
|
|
|
|
exports.getPagedAsyncIterator = getPagedAsyncIterator;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
/* 511 */,
|
|
/* 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/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"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/at+jwt":{"source":"iana"},"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/captive+json":{"source":"iana","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/clr":{"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":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"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/express":{"source":"iana","extensions":["exp"]},"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/jscalendar+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":{"source":"iana","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/missing-blocks+cbor-seq":{"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},"application/mrb-publish+xml":{"source":"iana","compressible":true},"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/oauth-authz-req+jwt":{"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/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"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.cyn":{"source":"iana","charset":"7-BIT"},"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/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"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/spdx+json":{"source":"iana","compressible":true},"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/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"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,"extensions":["td"]},"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.5gnas":{"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.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"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.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"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.s1ap":{"source":"iana"},"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.cmoca-cmresource":{"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-cmtable":{"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.age":{"source":"iana","extensions":["age"]},"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.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"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":["key"]},"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.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"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.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"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","extensions":["dbf"]},"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.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"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.slides":{"source":"iana"},"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","extensions":["mvt"]},"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.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"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+cbor":{"source":"iana"},"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.opentimestamps.ots":{"source":"iana"},"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","extensions":["rar"]},"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.resilient.logic":{"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.seis+json":{"source":"iana","compressible":true},"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.sycle+xml":{"source":"iana","compressible":true},"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.veritone.aion+json":{"source":"iana","compressible":true},"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.dpp":{"source":"iana"},"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":{"source":"iana","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-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"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},"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":["xsl","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","extensions":["amr"]},"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","opus"]},"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/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"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/tsvcis":{"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/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"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/ktx2":{"source":"iana","extensions":["ktx2"]},"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","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"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.pco.b16":{"source":"iana","extensions":["b16"]},"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/e57":{"source":"iana"},"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/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"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.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"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/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"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/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"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/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"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.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"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.hans":{"source":"iana"},"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":{"compressible":true,"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/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"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","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"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/scip":{"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/vp9":{"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}};
|
|
|
|
/***/ }),
|
|
/* 513 */,
|
|
/* 514 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 516 */,
|
|
/* 517 */,
|
|
/* 518 */,
|
|
/* 519 */,
|
|
/* 520 */,
|
|
/* 521 */,
|
|
/* 522 */,
|
|
/* 523 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 525 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.unregisterGlobal = exports.getGlobal = exports.registerGlobal = void 0;
|
|
var platform_1 = __webpack_require__(910);
|
|
var version_1 = __webpack_require__(830);
|
|
var semver_1 = __webpack_require__(987);
|
|
var major = version_1.VERSION.split('.')[0];
|
|
var GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for("opentelemetry.js.api." + major);
|
|
var _global = platform_1._globalThis;
|
|
function registerGlobal(type, instance, diag, allowOverride) {
|
|
var _a;
|
|
if (allowOverride === void 0) { allowOverride = false; }
|
|
var api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {
|
|
version: version_1.VERSION,
|
|
});
|
|
if (!allowOverride && api[type]) {
|
|
// already registered an API of this type
|
|
var err = new Error("@opentelemetry/api: Attempted duplicate registration of API: " + type);
|
|
diag.error(err.stack || err.message);
|
|
return false;
|
|
}
|
|
if (api.version !== version_1.VERSION) {
|
|
// All registered APIs must be of the same version exactly
|
|
var err = new Error('@opentelemetry/api: All API registration versions must match');
|
|
diag.error(err.stack || err.message);
|
|
return false;
|
|
}
|
|
api[type] = instance;
|
|
diag.debug("@opentelemetry/api: Registered a global for " + type + " v" + version_1.VERSION + ".");
|
|
return true;
|
|
}
|
|
exports.registerGlobal = registerGlobal;
|
|
function getGlobal(type) {
|
|
var _a, _b;
|
|
var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;
|
|
if (!globalVersion || !semver_1.isCompatible(globalVersion)) {
|
|
return;
|
|
}
|
|
return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type];
|
|
}
|
|
exports.getGlobal = getGlobal;
|
|
function unregisterGlobal(type, diag) {
|
|
diag.debug("@opentelemetry/api: Unregistering a global for " + type + " v" + version_1.VERSION + ".");
|
|
var api = _global[GLOBAL_OPENTELEMETRY_API_KEY];
|
|
if (api) {
|
|
delete api[type];
|
|
}
|
|
}
|
|
exports.unregisterGlobal = unregisterGlobal;
|
|
//# sourceMappingURL=global-utils.js.map
|
|
|
|
/***/ }),
|
|
/* 526 */,
|
|
/* 527 */,
|
|
/* 528 */,
|
|
/* 529 */,
|
|
/* 530 */,
|
|
/* 531 */,
|
|
/* 532 */,
|
|
/* 533 */,
|
|
/* 534 */,
|
|
/* 535 */,
|
|
/* 536 */,
|
|
/* 537 */,
|
|
/* 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 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(new URL(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 HttpClientError extends Error {
|
|
constructor(message, statusCode) {
|
|
super(message);
|
|
this.name = 'HttpClientError';
|
|
this.statusCode = statusCode;
|
|
Object.setPrototypeOf(this, HttpClientError.prototype);
|
|
}
|
|
}
|
|
exports.HttpClientError = HttpClientError;
|
|
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 = new URL(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 = new URL(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 = new URL(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 = new URL(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: {
|
|
...((proxyUrl.username || proxyUrl.password) && {
|
|
proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
|
|
}),
|
|
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 HttpClientError(msg, statusCode);
|
|
err.result = response.result;
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(response);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
exports.HttpClient = HttpClient;
|
|
|
|
|
|
/***/ }),
|
|
/* 540 */,
|
|
/* 541 */
|
|
/***/ (function(module) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
module.exports = {
|
|
None: 0,
|
|
OpenTag: 1,
|
|
InsideTag: 2,
|
|
CloseTag: 3
|
|
};
|
|
|
|
}).call(this);
|
|
|
|
|
|
/***/ }),
|
|
/* 542 */,
|
|
/* 543 */,
|
|
/* 544 */,
|
|
/* 545 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.DiagLogLevel = void 0;
|
|
/**
|
|
* Defines the available internal logging levels for the diagnostic logger, the numeric values
|
|
* of the levels are defined to match the original values from the initial LogLevel to avoid
|
|
* compatibility/migration issues for any implementation that assume the numeric ordering.
|
|
*/
|
|
var DiagLogLevel;
|
|
(function (DiagLogLevel) {
|
|
/** Diagnostic Logging level setting to disable all logging (except and forced logs) */
|
|
DiagLogLevel[DiagLogLevel["NONE"] = 0] = "NONE";
|
|
/** Identifies an error scenario */
|
|
DiagLogLevel[DiagLogLevel["ERROR"] = 30] = "ERROR";
|
|
/** Identifies a warning scenario */
|
|
DiagLogLevel[DiagLogLevel["WARN"] = 50] = "WARN";
|
|
/** General informational log message */
|
|
DiagLogLevel[DiagLogLevel["INFO"] = 60] = "INFO";
|
|
/** General debug log message */
|
|
DiagLogLevel[DiagLogLevel["DEBUG"] = 70] = "DEBUG";
|
|
/**
|
|
* Detailed trace level logging should only be used for development, should only be set
|
|
* in a development environment.
|
|
*/
|
|
DiagLogLevel[DiagLogLevel["VERBOSE"] = 80] = "VERBOSE";
|
|
/** Used to set the logging level to include all logging */
|
|
DiagLogLevel[DiagLogLevel["ALL"] = 9999] = "ALL";
|
|
})(DiagLogLevel = exports.DiagLogLevel || (exports.DiagLogLevel = {}));
|
|
//# sourceMappingURL=types.js.map
|
|
|
|
/***/ }),
|
|
/* 546 */,
|
|
/* 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);
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 548 */,
|
|
/* 549 */,
|
|
/* 550 */,
|
|
/* 551 */,
|
|
/* 552 */,
|
|
/* 553 */,
|
|
/* 554 */,
|
|
/* 555 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 557 */,
|
|
/* 558 */,
|
|
/* 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__(257);
|
|
|
|
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 */,
|
|
/* 561 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.baggageEntryMetadataSymbol = void 0;
|
|
/**
|
|
* Symbol used to make BaggageEntryMetadata an opaque type
|
|
*/
|
|
exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');
|
|
//# sourceMappingURL=symbol.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;
|
|
|
|
|
|
/***/ }),
|
|
/* 563 */,
|
|
/* 564 */,
|
|
/* 565 */,
|
|
/* 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]();
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 567 */,
|
|
/* 568 */,
|
|
/* 569 */,
|
|
/* 570 */,
|
|
/* 571 */,
|
|
/* 572 */,
|
|
/* 573 */,
|
|
/* 574 */,
|
|
/* 575 */,
|
|
/* 576 */,
|
|
/* 577 */,
|
|
/* 578 */,
|
|
/* 579 */,
|
|
/* 580 */,
|
|
/* 581 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 583 */,
|
|
/* 584 */,
|
|
/* 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;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "NIL", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _nil.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "version", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _version.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "validate", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _validate.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "stringify", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _stringify.default;
|
|
}
|
|
});
|
|
Object.defineProperty(exports, "parse", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _parse.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));
|
|
|
|
var _nil = _interopRequireDefault(__webpack_require__(24));
|
|
|
|
var _version = _interopRequireDefault(__webpack_require__(104));
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(676));
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(855));
|
|
|
|
var _parse = _interopRequireDefault(__webpack_require__(197));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/***/ }),
|
|
/* 586 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=span.js.map
|
|
|
|
/***/ }),
|
|
/* 587 */,
|
|
/* 588 */,
|
|
/* 589 */,
|
|
/* 590 */,
|
|
/* 591 */,
|
|
/* 592 */,
|
|
/* 593 */,
|
|
/* 594 */,
|
|
/* 595 */,
|
|
/* 596 */,
|
|
/* 597 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.partialMatch = exports.match = exports.getSearchPaths = void 0;
|
|
const pathHelper = __importStar(__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
|
|
|
|
/***/ }),
|
|
/* 598 */,
|
|
/* 599 */,
|
|
/* 600 */,
|
|
/* 601 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getOptions = void 0;
|
|
const core = __importStar(__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);
|
|
|
|
|
|
/***/ }),
|
|
/* 603 */,
|
|
/* 604 */,
|
|
/* 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 _stringify = _interopRequireDefault(__webpack_require__(855));
|
|
|
|
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, _stringify.default)(rnds);
|
|
}
|
|
|
|
var _default = v4;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 607 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=span_context.js.map
|
|
|
|
/***/ }),
|
|
/* 608 */
|
|
/***/ (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 __spreadArray;
|
|
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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
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, o) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__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;
|
|
};
|
|
|
|
__spreadArray = function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
|
|
__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 (k !== "default" && Object.prototype.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, state, kind, f) {
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, state, value, kind, f) {
|
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), 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("__spreadArray", __spreadArray);
|
|
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);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
/* 609 */,
|
|
/* 610 */,
|
|
/* 611 */,
|
|
/* 612 */,
|
|
/* 613 */,
|
|
/* 614 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("events");
|
|
|
|
/***/ }),
|
|
/* 615 */,
|
|
/* 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;
|
|
|
|
/***/ }),
|
|
/* 617 */,
|
|
/* 618 */,
|
|
/* 619 */,
|
|
/* 620 */,
|
|
/* 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) {
|
|
if(a===b) {
|
|
return [ai, bi];
|
|
}
|
|
begs = [];
|
|
left = str.length;
|
|
|
|
while (i >= 0 && !result) {
|
|
if (i == ai) {
|
|
begs.push(i);
|
|
ai = str.indexOf(a, i + 1);
|
|
} else if (begs.length == 1) {
|
|
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");
|
|
|
|
/***/ }),
|
|
/* 623 */,
|
|
/* 624 */,
|
|
/* 625 */,
|
|
/* 626 */,
|
|
/* 627 */,
|
|
/* 628 */,
|
|
/* 629 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.wrapSpanContext = exports.isSpanContextValid = exports.isValidSpanId = exports.isValidTraceId = void 0;
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
var invalid_span_constants_1 = __webpack_require__(435);
|
|
var NonRecordingSpan_1 = __webpack_require__(437);
|
|
var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;
|
|
var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;
|
|
function isValidTraceId(traceId) {
|
|
return VALID_TRACEID_REGEX.test(traceId) && traceId !== invalid_span_constants_1.INVALID_TRACEID;
|
|
}
|
|
exports.isValidTraceId = isValidTraceId;
|
|
function isValidSpanId(spanId) {
|
|
return VALID_SPANID_REGEX.test(spanId) && spanId !== invalid_span_constants_1.INVALID_SPANID;
|
|
}
|
|
exports.isValidSpanId = isValidSpanId;
|
|
/**
|
|
* Returns true if this {@link SpanContext} is valid.
|
|
* @return true if this {@link SpanContext} is valid.
|
|
*/
|
|
function isSpanContextValid(spanContext) {
|
|
return (isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId));
|
|
}
|
|
exports.isSpanContextValid = isSpanContextValid;
|
|
/**
|
|
* Wrap the given {@link SpanContext} in a new non-recording {@link Span}
|
|
*
|
|
* @param spanContext span context to be wrapped
|
|
* @returns a new non-recording {@link Span} with the provided context
|
|
*/
|
|
function wrapSpanContext(spanContext) {
|
|
return new NonRecordingSpan_1.NonRecordingSpan(spanContext);
|
|
}
|
|
exports.wrapSpanContext = wrapSpanContext;
|
|
//# sourceMappingURL=spancontext-utils.js.map
|
|
|
|
/***/ }),
|
|
/* 630 */,
|
|
/* 631 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("net");
|
|
|
|
/***/ }),
|
|
/* 632 */,
|
|
/* 633 */,
|
|
/* 634 */,
|
|
/* 635 */,
|
|
/* 636 */,
|
|
/* 637 */,
|
|
/* 638 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 640 */
|
|
/***/ (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 __spreadArray;
|
|
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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
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, o) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__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;
|
|
};
|
|
|
|
__spreadArray = function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
|
|
__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 (k !== "default" && Object.prototype.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, state, kind, f) {
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, state, value, kind, f) {
|
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), 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("__spreadArray", __spreadArray);
|
|
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);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
/* 641 */,
|
|
/* 642 */,
|
|
/* 643 */,
|
|
/* 644 */,
|
|
/* 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)
|
|
|
|
|
|
/***/ }),
|
|
/* 646 */,
|
|
/* 647 */,
|
|
/* 648 */,
|
|
/* 649 */
|
|
/***/ (function(module) {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports.mixin = function mixin(target, source) {
|
|
const keys = Object.getOwnPropertyNames(source);
|
|
for (let i = 0; i < keys.length; ++i) {
|
|
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
|
|
}
|
|
};
|
|
|
|
module.exports.wrapperSymbol = Symbol("wrapper");
|
|
module.exports.implSymbol = Symbol("impl");
|
|
|
|
module.exports.wrapperForImpl = function (impl) {
|
|
return impl[module.exports.wrapperSymbol];
|
|
};
|
|
|
|
module.exports.implForWrapper = function (wrapper) {
|
|
return wrapper[module.exports.implSymbol];
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 650 */,
|
|
/* 651 */,
|
|
/* 652 */,
|
|
/* 653 */,
|
|
/* 654 */,
|
|
/* 655 */,
|
|
/* 656 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 658 */,
|
|
/* 659 */,
|
|
/* 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__(257);
|
|
|
|
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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 662 */,
|
|
/* 663 */,
|
|
/* 664 */,
|
|
/* 665 */,
|
|
/* 666 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.BaggageImpl = void 0;
|
|
var BaggageImpl = /** @class */ (function () {
|
|
function BaggageImpl(entries) {
|
|
this._entries = entries ? new Map(entries) : new Map();
|
|
}
|
|
BaggageImpl.prototype.getEntry = function (key) {
|
|
var entry = this._entries.get(key);
|
|
if (!entry) {
|
|
return undefined;
|
|
}
|
|
return Object.assign({}, entry);
|
|
};
|
|
BaggageImpl.prototype.getAllEntries = function () {
|
|
return Array.from(this._entries.entries()).map(function (_a) {
|
|
var k = _a[0], v = _a[1];
|
|
return [k, v];
|
|
});
|
|
};
|
|
BaggageImpl.prototype.setEntry = function (key, entry) {
|
|
var newBaggage = new BaggageImpl(this._entries);
|
|
newBaggage._entries.set(key, entry);
|
|
return newBaggage;
|
|
};
|
|
BaggageImpl.prototype.removeEntry = function (key) {
|
|
var newBaggage = new BaggageImpl(this._entries);
|
|
newBaggage._entries.delete(key);
|
|
return newBaggage;
|
|
};
|
|
BaggageImpl.prototype.removeEntries = function () {
|
|
var keys = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
keys[_i] = arguments[_i];
|
|
}
|
|
var newBaggage = new BaggageImpl(this._entries);
|
|
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
|
|
var key = keys_1[_a];
|
|
newBaggage._entries.delete(key);
|
|
}
|
|
return newBaggage;
|
|
};
|
|
BaggageImpl.prototype.clear = function () {
|
|
return new BaggageImpl();
|
|
};
|
|
return BaggageImpl;
|
|
}());
|
|
exports.BaggageImpl = BaggageImpl;
|
|
//# sourceMappingURL=baggage-impl.js.map
|
|
|
|
/***/ }),
|
|
/* 667 */,
|
|
/* 668 */,
|
|
/* 669 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("util");
|
|
|
|
/***/ }),
|
|
/* 670 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.SpanKind = void 0;
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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
|
|
|
|
/***/ }),
|
|
/* 671 */
|
|
/***/ (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 __spreadArray;
|
|
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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
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, o) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__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;
|
|
};
|
|
|
|
__spreadArray = function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
|
|
__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 (k !== "default" && Object.prototype.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, state, kind, f) {
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, state, value, kind, f) {
|
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), 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("__spreadArray", __spreadArray);
|
|
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);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
/* 672 */
|
|
/***/ (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 (k !== "default" && 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());
|
|
});
|
|
};
|
|
var _a;
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0;
|
|
const fs = __importStar(__webpack_require__(747));
|
|
const path = __importStar(__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;
|
|
/**
|
|
* 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()));
|
|
}
|
|
// Get the path of cmd.exe in windows
|
|
function getCmdPath() {
|
|
var _a;
|
|
return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`;
|
|
}
|
|
exports.getCmdPath = getCmdPath;
|
|
//# sourceMappingURL=io-util.js.map
|
|
|
|
/***/ }),
|
|
/* 673 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.createLogLevelDiagLogger = void 0;
|
|
var types_1 = __webpack_require__(545);
|
|
function createLogLevelDiagLogger(maxLevel, logger) {
|
|
if (maxLevel < types_1.DiagLogLevel.NONE) {
|
|
maxLevel = types_1.DiagLogLevel.NONE;
|
|
}
|
|
else if (maxLevel > types_1.DiagLogLevel.ALL) {
|
|
maxLevel = types_1.DiagLogLevel.ALL;
|
|
}
|
|
// In case the logger is null or undefined
|
|
logger = logger || {};
|
|
function _filterFunc(funcName, theLevel) {
|
|
var theFunc = logger[funcName];
|
|
if (typeof theFunc === 'function' && maxLevel >= theLevel) {
|
|
return theFunc.bind(logger);
|
|
}
|
|
return function () { };
|
|
}
|
|
return {
|
|
error: _filterFunc('error', types_1.DiagLogLevel.ERROR),
|
|
warn: _filterFunc('warn', types_1.DiagLogLevel.WARN),
|
|
info: _filterFunc('info', types_1.DiagLogLevel.INFO),
|
|
debug: _filterFunc('debug', types_1.DiagLogLevel.DEBUG),
|
|
verbose: _filterFunc('verbose', types_1.DiagLogLevel.VERBOSE),
|
|
};
|
|
}
|
|
exports.createLogLevelDiagLogger = createLogLevelDiagLogger;
|
|
//# sourceMappingURL=logLevelLogger.js.map
|
|
|
|
/***/ }),
|
|
/* 674 */,
|
|
/* 675 */,
|
|
/* 676 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _regex = _interopRequireDefault(__webpack_require__(238));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function validate(uuid) {
|
|
return typeof uuid === 'string' && _regex.default.test(uuid);
|
|
}
|
|
|
|
var _default = validate;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 677 */,
|
|
/* 678 */,
|
|
/* 679 */,
|
|
/* 680 */,
|
|
/* 681 */,
|
|
/* 682 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 684 */,
|
|
/* 685 */,
|
|
/* 686 */,
|
|
/* 687 */,
|
|
/* 688 */,
|
|
/* 689 */,
|
|
/* 690 */,
|
|
/* 691 */,
|
|
/* 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);
|
|
if (core.isDebug()) {
|
|
yield tar_1.listTar(archivePath, compressionMethod);
|
|
}
|
|
const archiveFileSize = utils.getArchiveFileSizeInBytes(archivePath);
|
|
core.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`);
|
|
yield tar_1.extractTar(archivePath, compressionMethod);
|
|
core.info('Cache restored successfully');
|
|
}
|
|
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}`);
|
|
try {
|
|
yield tar_1.createTar(archiveFolder, cachePaths, compressionMethod);
|
|
if (core.isDebug()) {
|
|
yield tar_1.listTar(archivePath, compressionMethod);
|
|
}
|
|
const fileSizeLimit = 10 * 1024 * 1024 * 1024; // 10GB per repo limit
|
|
const archiveFileSize = utils.getArchiveFileSizeInBytes(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 10GB limit, not saving cache.`);
|
|
}
|
|
core.debug(`Saving Cache (ID: ${cacheId})`);
|
|
yield cacheHttpClient.saveCache(cacheId, archivePath, options);
|
|
}
|
|
finally {
|
|
// Try to delete the archive to save space
|
|
try {
|
|
yield utils.unlinkFile(archivePath);
|
|
}
|
|
catch (error) {
|
|
core.debug(`Failed to delete archive: ${error}`);
|
|
}
|
|
}
|
|
return cacheId;
|
|
});
|
|
}
|
|
exports.saveCache = saveCache;
|
|
//# sourceMappingURL=cache.js.map
|
|
|
|
/***/ }),
|
|
/* 693 */,
|
|
/* 694 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=tracer_provider.js.map
|
|
|
|
/***/ }),
|
|
/* 695 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=tracer.js.map
|
|
|
|
/***/ }),
|
|
/* 696 */,
|
|
/* 697 */,
|
|
/* 698 */,
|
|
/* 699 */,
|
|
/* 700 */,
|
|
/* 701 */,
|
|
/* 702 */,
|
|
/* 703 */,
|
|
/* 704 */,
|
|
/* 705 */,
|
|
/* 706 */,
|
|
/* 707 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 709 */,
|
|
/* 710 */,
|
|
/* 711 */,
|
|
/* 712 */,
|
|
/* 713 */,
|
|
/* 714 */,
|
|
/* 715 */,
|
|
/* 716 */,
|
|
/* 717 */,
|
|
/* 718 */,
|
|
/* 719 */,
|
|
/* 720 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.getSpanContext = exports.setSpanContext = exports.deleteSpan = exports.setSpan = exports.getSpan = void 0;
|
|
var context_1 = __webpack_require__(132);
|
|
var NonRecordingSpan_1 = __webpack_require__(437);
|
|
/**
|
|
* span key
|
|
*/
|
|
var SPAN_KEY = context_1.createContextKey('OpenTelemetry Context Key SPAN');
|
|
/**
|
|
* Return the span if one exists
|
|
*
|
|
* @param context context to get span from
|
|
*/
|
|
function getSpan(context) {
|
|
return context.getValue(SPAN_KEY) || undefined;
|
|
}
|
|
exports.getSpan = getSpan;
|
|
/**
|
|
* Set the span on a context
|
|
*
|
|
* @param context context to use as parent
|
|
* @param span span to set active
|
|
*/
|
|
function setSpan(context, span) {
|
|
return context.setValue(SPAN_KEY, span);
|
|
}
|
|
exports.setSpan = setSpan;
|
|
/**
|
|
* Remove current span stored in the context
|
|
*
|
|
* @param context context to delete span from
|
|
*/
|
|
function deleteSpan(context) {
|
|
return context.deleteValue(SPAN_KEY);
|
|
}
|
|
exports.deleteSpan = deleteSpan;
|
|
/**
|
|
* Wrap span context in a NoopSpan and set as span in a new
|
|
* context
|
|
*
|
|
* @param context context to set active span on
|
|
* @param spanContext span context to be wrapped
|
|
*/
|
|
function setSpanContext(context, spanContext) {
|
|
return setSpan(context, new NonRecordingSpan_1.NonRecordingSpan(spanContext));
|
|
}
|
|
exports.setSpanContext = setSpanContext;
|
|
/**
|
|
* Get the span context of the span if it exists.
|
|
*
|
|
* @param context context to get values from
|
|
*/
|
|
function getSpanContext(context) {
|
|
var _a;
|
|
return (_a = getSpan(context)) === null || _a === void 0 ? void 0 : _a.spanContext();
|
|
}
|
|
exports.getSpanContext = getSpanContext;
|
|
//# sourceMappingURL=context-utils.js.map
|
|
|
|
/***/ }),
|
|
/* 721 */,
|
|
/* 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 723 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 725 */,
|
|
/* 726 */,
|
|
/* 727 */,
|
|
/* 728 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.SearchState = void 0;
|
|
class SearchState {
|
|
constructor(path, level) {
|
|
this.path = path;
|
|
this.level = level;
|
|
}
|
|
}
|
|
exports.SearchState = SearchState;
|
|
//# sourceMappingURL=internal-search-state.js.map
|
|
|
|
/***/ }),
|
|
/* 729 */,
|
|
/* 730 */,
|
|
/* 731 */,
|
|
/* 732 */,
|
|
/* 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 rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
|
|
|
|
let poolPtr = rnds8Pool.length;
|
|
|
|
function rng() {
|
|
if (poolPtr > rnds8Pool.length - 16) {
|
|
_crypto.default.randomFillSync(rnds8Pool);
|
|
|
|
poolPtr = 0;
|
|
}
|
|
|
|
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
}
|
|
|
|
/***/ }),
|
|
/* 734 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 736 */,
|
|
/* 737 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 739 */,
|
|
/* 740 */,
|
|
/* 741 */,
|
|
/* 742 */
|
|
/***/ (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 });
|
|
exports.OidcClient = void 0;
|
|
const http_client_1 = __webpack_require__(539);
|
|
const auth_1 = __webpack_require__(226);
|
|
const core_1 = __webpack_require__(470);
|
|
class OidcClient {
|
|
static createHttpClient(allowRetry = true, maxRetry = 10) {
|
|
const requestOptions = {
|
|
allowRetries: allowRetry,
|
|
maxRetries: maxRetry
|
|
};
|
|
return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
|
|
}
|
|
static getRequestToken() {
|
|
const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
|
|
if (!token) {
|
|
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
|
|
}
|
|
return token;
|
|
}
|
|
static getIDTokenUrl() {
|
|
const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
|
|
if (!runtimeUrl) {
|
|
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
|
|
}
|
|
return runtimeUrl;
|
|
}
|
|
static getCall(id_token_url) {
|
|
var _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const httpclient = OidcClient.createHttpClient();
|
|
const res = yield httpclient
|
|
.getJson(id_token_url)
|
|
.catch(error => {
|
|
throw new Error(`Failed to get ID Token. \n
|
|
Error Code : ${error.statusCode}\n
|
|
Error Message: ${error.result.message}`);
|
|
});
|
|
const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
|
|
if (!id_token) {
|
|
throw new Error('Response json body do not have ID Token field');
|
|
}
|
|
return id_token;
|
|
});
|
|
}
|
|
static getIDToken(audience) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
// New ID Token is requested from action service
|
|
let id_token_url = OidcClient.getIDTokenUrl();
|
|
if (audience) {
|
|
const encodedAudience = encodeURIComponent(audience);
|
|
id_token_url = `${id_token_url}&audience=${encodedAudience}`;
|
|
}
|
|
core_1.debug(`ID token url is ${id_token_url}`);
|
|
const id_token = yield OidcClient.getCall(id_token_url);
|
|
core_1.setSecret(id_token);
|
|
return id_token;
|
|
}
|
|
catch (error) {
|
|
throw new Error(`Error message: ${error.message}`);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
exports.OidcClient = OidcClient;
|
|
//# sourceMappingURL=oidc-utils.js.map
|
|
|
|
/***/ }),
|
|
/* 743 */,
|
|
/* 744 */,
|
|
/* 745 */,
|
|
/* 746 */,
|
|
/* 747 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("fs");
|
|
|
|
/***/ }),
|
|
/* 748 */,
|
|
/* 749 */,
|
|
/* 750 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
|
|
|
|
|
|
|
|
var Punycode = __webpack_require__(815);
|
|
|
|
|
|
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);
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 752 */,
|
|
/* 753 */,
|
|
/* 754 */,
|
|
/* 755 */,
|
|
/* 756 */,
|
|
/* 757 */,
|
|
/* 758 */,
|
|
/* 759 */,
|
|
/* 760 */,
|
|
/* 761 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("zlib");
|
|
|
|
/***/ }),
|
|
/* 762 */,
|
|
/* 763 */,
|
|
/* 764 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__exportStar(__webpack_require__(145), exports);
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
/* 765 */,
|
|
/* 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 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 769 */,
|
|
/* 770 */,
|
|
/* 771 */,
|
|
/* 772 */,
|
|
/* 773 */,
|
|
/* 774 */,
|
|
/* 775 */,
|
|
/* 776 */,
|
|
/* 777 */,
|
|
/* 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 (k !== "default" && 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__(196);
|
|
const utils = __importStar(__webpack_require__(443));
|
|
function run() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
if (utils.isGhes()) {
|
|
utils.logWarning("Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details");
|
|
utils.setCacheHitOutput(false);
|
|
return;
|
|
}
|
|
// 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
|
|
}
|
|
})
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 780 */,
|
|
/* 781 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=Sampler.js.map
|
|
|
|
/***/ }),
|
|
/* 782 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
const conversions = __webpack_require__(149);
|
|
const utils = __webpack_require__(649);
|
|
const Impl = __webpack_require__(256);
|
|
|
|
const impl = utils.implSymbol;
|
|
|
|
function URL(url) {
|
|
if (!this || this[impl] || !(this instanceof URL)) {
|
|
throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
|
|
}
|
|
if (arguments.length < 1) {
|
|
throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present.");
|
|
}
|
|
const args = [];
|
|
for (let i = 0; i < arguments.length && i < 2; ++i) {
|
|
args[i] = arguments[i];
|
|
}
|
|
args[0] = conversions["USVString"](args[0]);
|
|
if (args[1] !== undefined) {
|
|
args[1] = conversions["USVString"](args[1]);
|
|
}
|
|
|
|
module.exports.setup(this, args);
|
|
}
|
|
|
|
URL.prototype.toJSON = function toJSON() {
|
|
if (!this || !module.exports.is(this)) {
|
|
throw new TypeError("Illegal invocation");
|
|
}
|
|
const args = [];
|
|
for (let i = 0; i < arguments.length && i < 0; ++i) {
|
|
args[i] = arguments[i];
|
|
}
|
|
return this[impl].toJSON.apply(this[impl], args);
|
|
};
|
|
Object.defineProperty(URL.prototype, "href", {
|
|
get() {
|
|
return this[impl].href;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].href = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
URL.prototype.toString = function () {
|
|
if (!this || !module.exports.is(this)) {
|
|
throw new TypeError("Illegal invocation");
|
|
}
|
|
return this.href;
|
|
};
|
|
|
|
Object.defineProperty(URL.prototype, "origin", {
|
|
get() {
|
|
return this[impl].origin;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "protocol", {
|
|
get() {
|
|
return this[impl].protocol;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].protocol = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "username", {
|
|
get() {
|
|
return this[impl].username;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].username = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "password", {
|
|
get() {
|
|
return this[impl].password;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].password = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "host", {
|
|
get() {
|
|
return this[impl].host;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].host = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "hostname", {
|
|
get() {
|
|
return this[impl].hostname;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].hostname = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "port", {
|
|
get() {
|
|
return this[impl].port;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].port = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "pathname", {
|
|
get() {
|
|
return this[impl].pathname;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].pathname = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "search", {
|
|
get() {
|
|
return this[impl].search;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].search = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(URL.prototype, "hash", {
|
|
get() {
|
|
return this[impl].hash;
|
|
},
|
|
set(V) {
|
|
V = conversions["USVString"](V);
|
|
this[impl].hash = V;
|
|
},
|
|
enumerable: true,
|
|
configurable: true
|
|
});
|
|
|
|
|
|
module.exports = {
|
|
is(obj) {
|
|
return !!obj && obj[impl] instanceof Impl.implementation;
|
|
},
|
|
create(constructorArgs, privateData) {
|
|
let obj = Object.create(URL.prototype);
|
|
this.setup(obj, constructorArgs, privateData);
|
|
return obj;
|
|
},
|
|
setup(obj, constructorArgs, privateData) {
|
|
if (!privateData) privateData = {};
|
|
privateData.wrapper = obj;
|
|
|
|
obj[impl] = new Impl.implementation(constructorArgs, privateData);
|
|
obj[impl][utils.wrapperSymbol] = obj;
|
|
},
|
|
interface: URL,
|
|
expose: {
|
|
Window: { URL: URL },
|
|
Worker: { URL: URL }
|
|
}
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 783 */,
|
|
/* 784 */,
|
|
/* 785 */,
|
|
/* 786 */,
|
|
/* 787 */,
|
|
/* 788 */,
|
|
/* 789 */,
|
|
/* 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 Stream = __webpack_require__(794).Stream;
|
|
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 or not a stream
|
|
if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {
|
|
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.setBoundary = function(boundary) {
|
|
this._boundary = boundary;
|
|
};
|
|
|
|
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 && err !== 'Unknown stream') {
|
|
this._error(err);
|
|
return;
|
|
}
|
|
|
|
// add content length
|
|
if (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);
|
|
|
|
|
|
/***/ }),
|
|
/* 792 */,
|
|
/* 793 */,
|
|
/* 794 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("stream");
|
|
|
|
/***/ }),
|
|
/* 795 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 797 */,
|
|
/* 798 */,
|
|
/* 799 */,
|
|
/* 800 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 802 */,
|
|
/* 803 */,
|
|
/* 804 */,
|
|
/* 805 */,
|
|
/* 806 */,
|
|
/* 807 */,
|
|
/* 808 */,
|
|
/* 809 */,
|
|
/* 810 */,
|
|
/* 811 */,
|
|
/* 812 */,
|
|
/* 813 */,
|
|
/* 814 */,
|
|
/* 815 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("punycode");
|
|
|
|
/***/ }),
|
|
/* 816 */,
|
|
/* 817 */,
|
|
/* 818 */,
|
|
/* 819 */,
|
|
/* 820 */,
|
|
/* 821 */,
|
|
/* 822 */,
|
|
/* 823 */,
|
|
/* 824 */,
|
|
/* 825 */,
|
|
/* 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;
|
|
|
|
|
|
/***/ }),
|
|
/* 827 */,
|
|
/* 828 */,
|
|
/* 829 */,
|
|
/* 830 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.VERSION = void 0;
|
|
// this is autogenerated file, see scripts/version-update.js
|
|
exports.VERSION = '1.0.3';
|
|
//# sourceMappingURL=version.js.map
|
|
|
|
/***/ }),
|
|
/* 831 */,
|
|
/* 832 */,
|
|
/* 833 */,
|
|
/* 834 */,
|
|
/* 835 */
|
|
/***/ (function(module) {
|
|
|
|
module.exports = require("url");
|
|
|
|
/***/ }),
|
|
/* 836 */,
|
|
/* 837 */,
|
|
/* 838 */,
|
|
/* 839 */,
|
|
/* 840 */,
|
|
/* 841 */,
|
|
/* 842 */,
|
|
/* 843 */,
|
|
/* 844 */,
|
|
/* 845 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=types.js.map
|
|
|
|
/***/ }),
|
|
/* 846 */,
|
|
/* 847 */,
|
|
/* 848 */,
|
|
/* 849 */,
|
|
/* 850 */,
|
|
/* 851 */,
|
|
/* 852 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
/*!
|
|
* mime-db
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* Module exports.
|
|
*/
|
|
|
|
module.exports = __webpack_require__(512)
|
|
|
|
|
|
/***/ }),
|
|
/* 853 */,
|
|
/* 854 */,
|
|
/* 855 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(676));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/**
|
|
* 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 stringify(arr, 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
|
|
const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
|
|
// of the following:
|
|
// - One or more input array values don't map to a hex octet (leading to
|
|
// "undefined" in the uuid)
|
|
// - Invalid input values for the RFC `version` or `variant` fields
|
|
|
|
if (!(0, _validate.default)(uuid)) {
|
|
throw TypeError('Stringified UUID is invalid');
|
|
}
|
|
|
|
return uuid;
|
|
}
|
|
|
|
var _default = stringify;
|
|
exports.default = _default;
|
|
|
|
/***/ }),
|
|
/* 856 */,
|
|
/* 857 */,
|
|
/* 858 */,
|
|
/* 859 */,
|
|
/* 860 */,
|
|
/* 861 */,
|
|
/* 862 */,
|
|
/* 863 */,
|
|
/* 864 */,
|
|
/* 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 __spreadArray;
|
|
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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
|
|
__extends = function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
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, o) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, 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;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__spread = function () {
|
|
for (var ar = [], i = 0; i < arguments.length; i++)
|
|
ar = ar.concat(__read(arguments[i]));
|
|
return ar;
|
|
};
|
|
|
|
/** @deprecated */
|
|
__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;
|
|
};
|
|
|
|
__spreadArray = function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
|
|
__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 (k !== "default" && Object.prototype.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, state, kind, f) {
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
};
|
|
|
|
__classPrivateFieldSet = function (receiver, state, value, kind, f) {
|
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), 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("__spreadArray", __spreadArray);
|
|
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);
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
/* 866 */,
|
|
/* 867 */,
|
|
/* 868 */,
|
|
/* 869 */,
|
|
/* 870 */,
|
|
/* 871 */,
|
|
/* 872 */,
|
|
/* 873 */,
|
|
/* 874 */,
|
|
/* 875 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.TraceAPI = void 0;
|
|
var global_utils_1 = __webpack_require__(525);
|
|
var ProxyTracerProvider_1 = __webpack_require__(394);
|
|
var spancontext_utils_1 = __webpack_require__(629);
|
|
var context_utils_1 = __webpack_require__(720);
|
|
var diag_1 = __webpack_require__(118);
|
|
var API_NAME = 'trace';
|
|
/**
|
|
* Singleton object which represents the entry point to the OpenTelemetry Tracing API
|
|
*/
|
|
var TraceAPI = /** @class */ (function () {
|
|
/** Empty private constructor prevents end users from constructing a new instance of the API */
|
|
function TraceAPI() {
|
|
this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider();
|
|
this.wrapSpanContext = spancontext_utils_1.wrapSpanContext;
|
|
this.isSpanContextValid = spancontext_utils_1.isSpanContextValid;
|
|
this.deleteSpan = context_utils_1.deleteSpan;
|
|
this.getSpan = context_utils_1.getSpan;
|
|
this.getSpanContext = context_utils_1.getSpanContext;
|
|
this.setSpan = context_utils_1.setSpan;
|
|
this.setSpanContext = context_utils_1.setSpanContext;
|
|
}
|
|
/** Get the singleton instance of the Trace API */
|
|
TraceAPI.getInstance = function () {
|
|
if (!this._instance) {
|
|
this._instance = new TraceAPI();
|
|
}
|
|
return this._instance;
|
|
};
|
|
/**
|
|
* Set the current global tracer.
|
|
*
|
|
* @returns true if the tracer provider was successfully registered, else false
|
|
*/
|
|
TraceAPI.prototype.setGlobalTracerProvider = function (provider) {
|
|
var success = global_utils_1.registerGlobal(API_NAME, this._proxyTracerProvider, diag_1.DiagAPI.instance());
|
|
if (success) {
|
|
this._proxyTracerProvider.setDelegate(provider);
|
|
}
|
|
return success;
|
|
};
|
|
/**
|
|
* Returns the global tracer provider.
|
|
*/
|
|
TraceAPI.prototype.getTracerProvider = function () {
|
|
return global_utils_1.getGlobal(API_NAME) || this._proxyTracerProvider;
|
|
};
|
|
/**
|
|
* Returns a tracer from the global tracer provider.
|
|
*/
|
|
TraceAPI.prototype.getTracer = function (name, version) {
|
|
return this.getTracerProvider().getTracer(name, version);
|
|
};
|
|
/** Remove the global tracer provider */
|
|
TraceAPI.prototype.disable = function () {
|
|
global_utils_1.unregisterGlobal(API_NAME, diag_1.DiagAPI.instance());
|
|
this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider();
|
|
};
|
|
return TraceAPI;
|
|
}());
|
|
exports.TraceAPI = TraceAPI;
|
|
//# sourceMappingURL=trace.js.map
|
|
|
|
/***/ }),
|
|
/* 876 */,
|
|
/* 877 */,
|
|
/* 878 */,
|
|
/* 879 */,
|
|
/* 880 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=types.js.map
|
|
|
|
/***/ }),
|
|
/* 881 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.defaultTextMapSetter = exports.defaultTextMapGetter = void 0;
|
|
exports.defaultTextMapGetter = {
|
|
get: function (carrier, key) {
|
|
if (carrier == null) {
|
|
return undefined;
|
|
}
|
|
return carrier[key];
|
|
},
|
|
keys: function (carrier) {
|
|
if (carrier == null) {
|
|
return [];
|
|
}
|
|
return Object.keys(carrier);
|
|
},
|
|
};
|
|
exports.defaultTextMapSetter = {
|
|
set: function (carrier, key, value) {
|
|
if (carrier == null) {
|
|
return;
|
|
}
|
|
carrier[key] = value;
|
|
},
|
|
};
|
|
//# sourceMappingURL=TextMapPropagator.js.map
|
|
|
|
/***/ }),
|
|
/* 882 */,
|
|
/* 883 */,
|
|
/* 884 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
// Generated by CoffeeScript 1.12.7
|
|
(function() {
|
|
var NodeType, XMLAttribute, XMLNode;
|
|
|
|
NodeType = __webpack_require__(683);
|
|
|
|
XMLNode = __webpack_require__(257);
|
|
|
|
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__(213).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);
|
|
|
|
|
|
/***/ }),
|
|
/* 886 */,
|
|
/* 887 */,
|
|
/* 888 */,
|
|
/* 889 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
var logger$1 = __webpack_require__(928);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* When a poller is manually stopped through the `stopPolling` method,
|
|
* the poller will be rejected with an instance of the PollerStoppedError.
|
|
*/
|
|
class PollerStoppedError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = "PollerStoppedError";
|
|
Object.setPrototypeOf(this, PollerStoppedError.prototype);
|
|
}
|
|
}
|
|
/**
|
|
* When a poller is cancelled through the `cancelOperation` method,
|
|
* the poller will be rejected with an instance of the PollerCancelledError.
|
|
*/
|
|
class PollerCancelledError extends Error {
|
|
constructor(message) {
|
|
super(message);
|
|
this.name = "PollerCancelledError";
|
|
Object.setPrototypeOf(this, PollerCancelledError.prototype);
|
|
}
|
|
}
|
|
/**
|
|
* A class that represents the definition of a program that polls through consecutive requests
|
|
* until it reaches a state of completion.
|
|
*
|
|
* A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed.
|
|
* It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes.
|
|
* Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation.
|
|
*
|
|
* ```ts
|
|
* const poller = new MyPoller();
|
|
*
|
|
* // Polling just once:
|
|
* await poller.poll();
|
|
*
|
|
* // We can try to cancel the request here, by calling:
|
|
* //
|
|
* // await poller.cancelOperation();
|
|
* //
|
|
*
|
|
* // Getting the final result:
|
|
* const result = await poller.pollUntilDone();
|
|
* ```
|
|
*
|
|
* The Poller is defined by two types, a type representing the state of the poller, which
|
|
* must include a basic set of properties from `PollOperationState<TResult>`,
|
|
* and a return type defined by `TResult`, which can be anything.
|
|
*
|
|
* The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having
|
|
* to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type.
|
|
*
|
|
* ```ts
|
|
* class Client {
|
|
* public async makePoller: PollerLike<MyOperationState, MyResult> {
|
|
* const poller = new MyPoller({});
|
|
* // It might be preferred to return the poller after the first request is made,
|
|
* // so that some information can be obtained right away.
|
|
* await poller.poll();
|
|
* return poller;
|
|
* }
|
|
* }
|
|
*
|
|
* const poller: PollerLike<MyOperationState, MyResult> = myClient.makePoller();
|
|
* ```
|
|
*
|
|
* A poller can be created through its constructor, then it can be polled until it's completed.
|
|
* At any point in time, the state of the poller can be obtained without delay through the getOperationState method.
|
|
* At any point in time, the intermediate forms of the result type can be requested without delay.
|
|
* Once the underlying operation is marked as completed, the poller will stop and the final value will be returned.
|
|
*
|
|
* ```ts
|
|
* const poller = myClient.makePoller();
|
|
* const state: MyOperationState = poller.getOperationState();
|
|
*
|
|
* // The intermediate result can be obtained at any time.
|
|
* const result: MyResult | undefined = poller.getResult();
|
|
*
|
|
* // The final result can only be obtained after the poller finishes.
|
|
* const result: MyResult = await poller.pollUntilDone();
|
|
* ```
|
|
*
|
|
*/
|
|
// eslint-disable-next-line no-use-before-define
|
|
class Poller {
|
|
/**
|
|
* A poller needs to be initialized by passing in at least the basic properties of the `PollOperation<TState, TResult>`.
|
|
*
|
|
* When writing an implementation of a Poller, this implementation needs to deal with the initialization
|
|
* of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's
|
|
* operation has already been defined, at least its basic properties. The code below shows how to approach
|
|
* the definition of the constructor of a new custom poller.
|
|
*
|
|
* ```ts
|
|
* export class MyPoller extends Poller<MyOperationState, string> {
|
|
* constructor({
|
|
* // Anything you might need outside of the basics
|
|
* }) {
|
|
* let state: MyOperationState = {
|
|
* privateProperty: private,
|
|
* publicProperty: public,
|
|
* };
|
|
*
|
|
* const operation = {
|
|
* state,
|
|
* update,
|
|
* cancel,
|
|
* toString
|
|
* }
|
|
*
|
|
* // Sending the operation to the parent's constructor.
|
|
* super(operation);
|
|
*
|
|
* // You can assign more local properties here.
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* Inside of this constructor, a new promise is created. This will be used to
|
|
* tell the user when the poller finishes (see `pollUntilDone()`). The promise's
|
|
* resolve and reject methods are also used internally to control when to resolve
|
|
* or reject anyone waiting for the poller to finish.
|
|
*
|
|
* The constructor of a custom implementation of a poller is where any serialized version of
|
|
* a previous poller's operation should be deserialized into the operation sent to the
|
|
* base constructor. For example:
|
|
*
|
|
* ```ts
|
|
* export class MyPoller extends Poller<MyOperationState, string> {
|
|
* constructor(
|
|
* baseOperation: string | undefined
|
|
* ) {
|
|
* let state: MyOperationState = {};
|
|
* if (baseOperation) {
|
|
* state = {
|
|
* ...JSON.parse(baseOperation).state,
|
|
* ...state
|
|
* };
|
|
* }
|
|
* const operation = {
|
|
* state,
|
|
* // ...
|
|
* }
|
|
* super(operation);
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* @param operation - Must contain the basic properties of `PollOperation<State, TResult>`.
|
|
*/
|
|
constructor(operation) {
|
|
this.stopped = true;
|
|
this.pollProgressCallbacks = [];
|
|
this.operation = operation;
|
|
this.promise = new Promise((resolve, reject) => {
|
|
this.resolve = resolve;
|
|
this.reject = reject;
|
|
});
|
|
// This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown.
|
|
// The above warning would get thrown if `poller.poll` is called, it returns an error,
|
|
// and pullUntilDone did not have a .catch or await try/catch on it's return value.
|
|
this.promise.catch(() => {
|
|
/* intentionally blank */
|
|
});
|
|
}
|
|
/**
|
|
* @internal
|
|
* Starts a loop that will break only if the poller is done
|
|
* or if the poller is stopped.
|
|
*/
|
|
async startPolling() {
|
|
if (this.stopped) {
|
|
this.stopped = false;
|
|
}
|
|
while (!this.isStopped() && !this.isDone()) {
|
|
await this.poll();
|
|
await this.delay();
|
|
}
|
|
}
|
|
/**
|
|
* @internal
|
|
* pollOnce does one polling, by calling to the update method of the underlying
|
|
* poll operation to make any relevant change effective.
|
|
*
|
|
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
|
|
*
|
|
* @param options - Optional properties passed to the operation's update method.
|
|
*/
|
|
async pollOnce(options = {}) {
|
|
try {
|
|
if (!this.isDone()) {
|
|
this.operation = await this.operation.update({
|
|
abortSignal: options.abortSignal,
|
|
fireProgress: this.fireProgress.bind(this)
|
|
});
|
|
if (this.isDone() && this.resolve) {
|
|
// If the poller has finished polling, this means we now have a result.
|
|
// However, it can be the case that TResult is instantiated to void, so
|
|
// we are not expecting a result anyway. To assert that we might not
|
|
// have a result eventually after finishing polling, we cast the result
|
|
// to TResult.
|
|
this.resolve(this.operation.state.result);
|
|
}
|
|
}
|
|
}
|
|
catch (e) {
|
|
this.operation.state.error = e;
|
|
if (this.reject) {
|
|
this.reject(e);
|
|
}
|
|
throw e;
|
|
}
|
|
}
|
|
/**
|
|
* @internal
|
|
* fireProgress calls the functions passed in via onProgress the method of the poller.
|
|
*
|
|
* It loops over all of the callbacks received from onProgress, and executes them, sending them
|
|
* the current operation state.
|
|
*
|
|
* @param state - The current operation state.
|
|
*/
|
|
fireProgress(state) {
|
|
for (const callback of this.pollProgressCallbacks) {
|
|
callback(state);
|
|
}
|
|
}
|
|
/**
|
|
* @internal
|
|
* Invokes the underlying operation's cancel method, and rejects the
|
|
* pollUntilDone promise.
|
|
*/
|
|
async cancelOnce(options = {}) {
|
|
this.operation = await this.operation.cancel(options);
|
|
if (this.reject) {
|
|
this.reject(new PollerCancelledError("Poller cancelled"));
|
|
}
|
|
}
|
|
/**
|
|
* Returns a promise that will resolve once a single polling request finishes.
|
|
* It does this by calling the update method of the Poller's operation.
|
|
*
|
|
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
|
|
*
|
|
* @param options - Optional properties passed to the operation's update method.
|
|
*/
|
|
poll(options = {}) {
|
|
if (!this.pollOncePromise) {
|
|
this.pollOncePromise = this.pollOnce(options);
|
|
const clearPollOncePromise = () => {
|
|
this.pollOncePromise = undefined;
|
|
};
|
|
this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject);
|
|
}
|
|
return this.pollOncePromise;
|
|
}
|
|
/**
|
|
* Returns a promise that will resolve once the underlying operation is completed.
|
|
*/
|
|
async pollUntilDone() {
|
|
if (this.stopped) {
|
|
this.startPolling().catch(this.reject);
|
|
}
|
|
return this.promise;
|
|
}
|
|
/**
|
|
* Invokes the provided callback after each polling is completed,
|
|
* sending the current state of the poller's operation.
|
|
*
|
|
* It returns a method that can be used to stop receiving updates on the given callback function.
|
|
*/
|
|
onProgress(callback) {
|
|
this.pollProgressCallbacks.push(callback);
|
|
return () => {
|
|
this.pollProgressCallbacks = this.pollProgressCallbacks.filter((c) => c !== callback);
|
|
};
|
|
}
|
|
/**
|
|
* Returns true if the poller has finished polling.
|
|
*/
|
|
isDone() {
|
|
const state = this.operation.state;
|
|
return Boolean(state.isCompleted || state.isCancelled || state.error);
|
|
}
|
|
/**
|
|
* Stops the poller from continuing to poll.
|
|
*/
|
|
stopPolling() {
|
|
if (!this.stopped) {
|
|
this.stopped = true;
|
|
if (this.reject) {
|
|
this.reject(new PollerStoppedError("This poller is already stopped"));
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Returns true if the poller is stopped.
|
|
*/
|
|
isStopped() {
|
|
return this.stopped;
|
|
}
|
|
/**
|
|
* Attempts to cancel the underlying operation.
|
|
*
|
|
* It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike.
|
|
*
|
|
* If it's called again before it finishes, it will throw an error.
|
|
*
|
|
* @param options - Optional properties passed to the operation's update method.
|
|
*/
|
|
cancelOperation(options = {}) {
|
|
if (!this.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.
|
|
*/
|
|
getOperationState() {
|
|
return this.operation.state;
|
|
}
|
|
/**
|
|
* Returns the result value of the operation,
|
|
* regardless of the state of the poller.
|
|
* It can return undefined or an incomplete form of the final TResult value
|
|
* depending on the implementation.
|
|
*/
|
|
getResult() {
|
|
const state = this.operation.state;
|
|
return state.result;
|
|
}
|
|
/**
|
|
* Returns a serialized version of the poller's operation
|
|
* by invoking the operation's toString method.
|
|
*/
|
|
toString() {
|
|
return this.operation.toString();
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* The `@azure/logger` configuration for this package.
|
|
* @internal
|
|
*/
|
|
const logger = logger$1.createClientLogger("core-lro");
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Detects where the continuation token is and returns it. Notice that azure-asyncoperation
|
|
* must be checked first before the other location headers because there are scenarios
|
|
* where both azure-asyncoperation and location could be present in the same response but
|
|
* azure-asyncoperation should be the one to use for polling.
|
|
*/
|
|
function getPollingUrl(rawResponse, defaultPath) {
|
|
var _a, _b, _c;
|
|
return ((_c = (_b = (_a = getAzureAsyncOperation(rawResponse)) !== null && _a !== void 0 ? _a : getLocation(rawResponse)) !== null && _b !== void 0 ? _b : getOperationLocation(rawResponse)) !== null && _c !== void 0 ? _c : defaultPath);
|
|
}
|
|
function getLocation(rawResponse) {
|
|
return rawResponse.headers["location"];
|
|
}
|
|
function getOperationLocation(rawResponse) {
|
|
return rawResponse.headers["operation-location"];
|
|
}
|
|
function getAzureAsyncOperation(rawResponse) {
|
|
return rawResponse.headers["azure-asyncoperation"];
|
|
}
|
|
function inferLroMode(requestPath, requestMethod, rawResponse) {
|
|
if (getAzureAsyncOperation(rawResponse) !== undefined) {
|
|
return {
|
|
mode: "AzureAsync",
|
|
resourceLocation: requestMethod === "PUT"
|
|
? requestPath
|
|
: requestMethod === "POST"
|
|
? getLocation(rawResponse)
|
|
: undefined
|
|
};
|
|
}
|
|
else if (getLocation(rawResponse) !== undefined ||
|
|
getOperationLocation(rawResponse) !== undefined) {
|
|
return {
|
|
mode: "Location"
|
|
};
|
|
}
|
|
else if (["PUT", "PATCH"].includes(requestMethod)) {
|
|
return {
|
|
mode: "Body"
|
|
};
|
|
}
|
|
return {};
|
|
}
|
|
class SimpleRestError extends Error {
|
|
constructor(message, statusCode) {
|
|
super(message);
|
|
this.name = "RestError";
|
|
this.statusCode = statusCode;
|
|
Object.setPrototypeOf(this, SimpleRestError.prototype);
|
|
}
|
|
}
|
|
function isUnexpectedInitialResponse(rawResponse) {
|
|
const code = rawResponse.statusCode;
|
|
if (![203, 204, 202, 201, 200, 500].includes(code)) {
|
|
throw new SimpleRestError(`Received unexpected HTTP status code ${code} in the initial response. This may indicate a server issue.`, code);
|
|
}
|
|
return false;
|
|
}
|
|
function isUnexpectedPollingResponse(rawResponse) {
|
|
const code = rawResponse.statusCode;
|
|
if (![202, 201, 200, 500].includes(code)) {
|
|
throw new SimpleRestError(`Received unexpected HTTP status code ${code} while polling. This may indicate a server issue.`, code);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
const successStates = ["succeeded"];
|
|
const failureStates = ["failed", "canceled", "cancelled"];
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getResponseStatus(rawResponse) {
|
|
var _a;
|
|
const { status } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
|
return typeof status === "string" ? status.toLowerCase() : "succeeded";
|
|
}
|
|
function isAzureAsyncPollingDone(rawResponse) {
|
|
const state = getResponseStatus(rawResponse);
|
|
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
|
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
|
}
|
|
return successStates.includes(state);
|
|
}
|
|
/**
|
|
* Sends a request to the URI of the provisioned resource if needed.
|
|
*/
|
|
async function sendFinalRequest(lro, resourceLocation, lroResourceLocationConfig) {
|
|
switch (lroResourceLocationConfig) {
|
|
case "original-uri":
|
|
return lro.sendPollRequest(lro.requestPath);
|
|
case "azure-async-operation":
|
|
return undefined;
|
|
case "location":
|
|
default:
|
|
return lro.sendPollRequest(resourceLocation !== null && resourceLocation !== void 0 ? resourceLocation : lro.requestPath);
|
|
}
|
|
}
|
|
function processAzureAsyncOperationResult(lro, resourceLocation, lroResourceLocationConfig) {
|
|
return (response) => {
|
|
if (isAzureAsyncPollingDone(response.rawResponse)) {
|
|
if (resourceLocation === undefined) {
|
|
return Object.assign(Object.assign({}, response), { done: true });
|
|
}
|
|
else {
|
|
return Object.assign(Object.assign({}, response), { done: false, next: async () => {
|
|
const finalResponse = await sendFinalRequest(lro, resourceLocation, lroResourceLocationConfig);
|
|
return Object.assign(Object.assign({}, (finalResponse !== null && finalResponse !== void 0 ? finalResponse : response)), { done: true });
|
|
} });
|
|
}
|
|
}
|
|
return Object.assign(Object.assign({}, response), { done: false });
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getProvisioningState(rawResponse) {
|
|
var _a, _b;
|
|
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
|
|
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
|
|
return typeof state === "string" ? state.toLowerCase() : "succeeded";
|
|
}
|
|
function isBodyPollingDone(rawResponse) {
|
|
const state = getProvisioningState(rawResponse);
|
|
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
|
|
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
|
|
}
|
|
return successStates.includes(state);
|
|
}
|
|
/**
|
|
* Creates a polling strategy based on BodyPolling which uses the provisioning state
|
|
* from the result to determine the current operation state
|
|
*/
|
|
function processBodyPollingOperationResult(response) {
|
|
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function isLocationPollingDone(rawResponse) {
|
|
return !isUnexpectedPollingResponse(rawResponse) && rawResponse.statusCode !== 202;
|
|
}
|
|
function processLocationPollingOperationResult(response) {
|
|
return Object.assign(Object.assign({}, response), { done: isLocationPollingDone(response.rawResponse) });
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
function processPassthroughOperationResult(response) {
|
|
return Object.assign(Object.assign({}, response), { done: true });
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* creates a stepping function that maps an LRO state to another.
|
|
*/
|
|
function createGetLroStatusFromResponse(lroPrimitives, config, lroResourceLocationConfig) {
|
|
switch (config.mode) {
|
|
case "AzureAsync": {
|
|
return processAzureAsyncOperationResult(lroPrimitives, config.resourceLocation, lroResourceLocationConfig);
|
|
}
|
|
case "Location": {
|
|
return processLocationPollingOperationResult;
|
|
}
|
|
case "Body": {
|
|
return processBodyPollingOperationResult;
|
|
}
|
|
default: {
|
|
return processPassthroughOperationResult;
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Creates a polling operation.
|
|
*/
|
|
function createPoll(lroPrimitives) {
|
|
return async (path, pollerConfig, getLroStatusFromResponse) => {
|
|
const response = await lroPrimitives.sendPollRequest(path);
|
|
const retryAfter = response.rawResponse.headers["retry-after"];
|
|
if (retryAfter !== undefined) {
|
|
const retryAfterInMs = parseInt(retryAfter);
|
|
pollerConfig.intervalInMs = isNaN(retryAfterInMs)
|
|
? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)
|
|
: retryAfterInMs;
|
|
}
|
|
return getLroStatusFromResponse(response);
|
|
};
|
|
}
|
|
function calculatePollingIntervalFromDate(retryAfterDate, defaultIntervalInMs) {
|
|
const timeNow = Math.floor(new Date().getTime());
|
|
const retryAfterTime = retryAfterDate.getTime();
|
|
if (timeNow < retryAfterTime) {
|
|
return retryAfterTime - timeNow;
|
|
}
|
|
return defaultIntervalInMs;
|
|
}
|
|
/**
|
|
* Creates a callback to be used to initialize the polling operation state.
|
|
* @param state - of the polling operation
|
|
* @param operationSpec - of the LRO
|
|
* @param callback - callback to be called when the operation is done
|
|
* @returns callback that initializes the state of the polling operation
|
|
*/
|
|
function createInitializeState(state, requestPath, requestMethod) {
|
|
return (response) => {
|
|
if (isUnexpectedInitialResponse(response.rawResponse))
|
|
;
|
|
state.initialRawResponse = response.rawResponse;
|
|
state.isStarted = true;
|
|
state.pollingURL = getPollingUrl(state.initialRawResponse, requestPath);
|
|
state.config = inferLroMode(requestPath, requestMethod, state.initialRawResponse);
|
|
/** short circuit polling if body polling is done in the initial request */
|
|
if (state.config.mode === undefined ||
|
|
(state.config.mode === "Body" && isBodyPollingDone(state.initialRawResponse))) {
|
|
state.result = response.flatResponse;
|
|
state.isCompleted = true;
|
|
}
|
|
logger.verbose(`LRO: initial state: ${JSON.stringify(state)}`);
|
|
return Boolean(state.isCompleted);
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class GenericPollOperation {
|
|
constructor(state, lro, lroResourceLocationConfig, processResult, updateState, isDone) {
|
|
this.state = state;
|
|
this.lro = lro;
|
|
this.lroResourceLocationConfig = lroResourceLocationConfig;
|
|
this.processResult = processResult;
|
|
this.updateState = updateState;
|
|
this.isDone = isDone;
|
|
}
|
|
setPollerConfig(pollerConfig) {
|
|
this.pollerConfig = pollerConfig;
|
|
}
|
|
/**
|
|
* General update function for LROPoller, the general process is as follows
|
|
* 1. Check initial operation result to determine the strategy to use
|
|
* - Strategies: Location, Azure-AsyncOperation, Original Uri
|
|
* 2. Check if the operation result has a terminal state
|
|
* - Terminal state will be determined by each strategy
|
|
* 2.1 If it is terminal state Check if a final GET request is required, if so
|
|
* send final GET request and return result from operation. If no final GET
|
|
* is required, just return the result from operation.
|
|
* - Determining what to call for final request is responsibility of each strategy
|
|
* 2.2 If it is not terminal state, call the polling operation and go to step 1
|
|
* - Determining what to call for polling is responsibility of each strategy
|
|
* - Strategies will always use the latest URI for polling if provided otherwise
|
|
* the last known one
|
|
*/
|
|
async update(options) {
|
|
var _a, _b, _c;
|
|
const state = this.state;
|
|
let lastResponse = undefined;
|
|
if (!state.isStarted) {
|
|
const initializeState = createInitializeState(state, this.lro.requestPath, this.lro.requestMethod);
|
|
lastResponse = await this.lro.sendInitialRequest();
|
|
initializeState(lastResponse);
|
|
}
|
|
if (!state.isCompleted) {
|
|
if (!this.poll || !this.getLroStatusFromResponse) {
|
|
if (!state.config) {
|
|
throw new Error("Bad state: LRO mode is undefined. Please check if the serialized state is well-formed.");
|
|
}
|
|
const isDone = this.isDone;
|
|
this.getLroStatusFromResponse = isDone
|
|
? (response) => (Object.assign(Object.assign({}, response), { done: isDone(response.flatResponse, this.state) }))
|
|
: createGetLroStatusFromResponse(this.lro, state.config, this.lroResourceLocationConfig);
|
|
this.poll = createPoll(this.lro);
|
|
}
|
|
if (!state.pollingURL) {
|
|
throw new Error("Bad state: polling URL is undefined. Please check if the serialized state is well-formed.");
|
|
}
|
|
const currentState = await this.poll(state.pollingURL, this.pollerConfig, this.getLroStatusFromResponse);
|
|
logger.verbose(`LRO: polling response: ${JSON.stringify(currentState.rawResponse)}`);
|
|
if (currentState.done) {
|
|
state.result = this.processResult
|
|
? this.processResult(currentState.flatResponse, state)
|
|
: currentState.flatResponse;
|
|
state.isCompleted = true;
|
|
}
|
|
else {
|
|
this.poll = (_a = currentState.next) !== null && _a !== void 0 ? _a : this.poll;
|
|
state.pollingURL = getPollingUrl(currentState.rawResponse, state.pollingURL);
|
|
}
|
|
lastResponse = currentState;
|
|
}
|
|
logger.verbose(`LRO: current state: ${JSON.stringify(state)}`);
|
|
if (lastResponse) {
|
|
(_b = this.updateState) === null || _b === void 0 ? void 0 : _b.call(this, state, lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.rawResponse);
|
|
}
|
|
else {
|
|
logger.error(`LRO: no response was received`);
|
|
}
|
|
(_c = options === null || options === void 0 ? void 0 : options.fireProgress) === null || _c === void 0 ? void 0 : _c.call(options, state);
|
|
return this;
|
|
}
|
|
async cancel() {
|
|
this.state.isCancelled = true;
|
|
return this;
|
|
}
|
|
/**
|
|
* Serializes the Poller operation.
|
|
*/
|
|
toString() {
|
|
return JSON.stringify({
|
|
state: this.state
|
|
});
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function deserializeState(serializedState) {
|
|
try {
|
|
return JSON.parse(serializedState).state;
|
|
}
|
|
catch (e) {
|
|
throw new Error(`LroEngine: Unable to deserialize state: ${serializedState}`);
|
|
}
|
|
}
|
|
/**
|
|
* The LRO Engine, a class that performs polling.
|
|
*/
|
|
class LroEngine extends Poller {
|
|
constructor(lro, options) {
|
|
const { intervalInMs = 2000, resumeFrom } = options || {};
|
|
const state = resumeFrom
|
|
? deserializeState(resumeFrom)
|
|
: {};
|
|
const operation = new GenericPollOperation(state, lro, options === null || options === void 0 ? void 0 : options.lroResourceLocationConfig, options === null || options === void 0 ? void 0 : options.processResult, options === null || options === void 0 ? void 0 : options.updateState, options === null || options === void 0 ? void 0 : options.isDone);
|
|
super(operation);
|
|
this.config = { intervalInMs: intervalInMs };
|
|
operation.setPollerConfig(this.config);
|
|
}
|
|
/**
|
|
* The method used by the poller to wait before attempting to update its operation.
|
|
*/
|
|
delay() {
|
|
return new Promise((resolve) => setTimeout(() => resolve(), this.config.intervalInMs));
|
|
}
|
|
}
|
|
|
|
exports.LroEngine = LroEngine;
|
|
exports.Poller = Poller;
|
|
exports.PollerCancelledError = PollerCancelledError;
|
|
exports.PollerStoppedError = PollerStoppedError;
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
/***/ }),
|
|
/* 890 */,
|
|
/* 891 */,
|
|
/* 892 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
var iterate = __webpack_require__(157)
|
|
, initState = __webpack_require__(903)
|
|
, 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);
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 893 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__exportStar(__webpack_require__(237), exports);
|
|
__exportStar(__webpack_require__(545), exports);
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
/* 894 */,
|
|
/* 895 */,
|
|
/* 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]';
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 897 */,
|
|
/* 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);
|
|
const constants_1 = __webpack_require__(931);
|
|
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 sleep(milliseconds) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return new Promise(resolve => setTimeout(resolve, milliseconds));
|
|
});
|
|
}
|
|
function retry(name, method, getStatusCode, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay, onError = undefined) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let errorMessage = '';
|
|
let attempt = 1;
|
|
while (attempt <= maxAttempts) {
|
|
let response = undefined;
|
|
let statusCode = undefined;
|
|
let isRetryable = false;
|
|
try {
|
|
response = yield method();
|
|
}
|
|
catch (error) {
|
|
if (onError) {
|
|
response = onError(error);
|
|
}
|
|
isRetryable = true;
|
|
errorMessage = error.message;
|
|
}
|
|
if (response) {
|
|
statusCode = getStatusCode(response);
|
|
if (!isServerErrorStatusCode(statusCode)) {
|
|
return response;
|
|
}
|
|
}
|
|
if (statusCode) {
|
|
isRetryable = isRetryableStatusCode(statusCode);
|
|
errorMessage = `Cache service responded with ${statusCode}`;
|
|
}
|
|
core.debug(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`);
|
|
if (!isRetryable) {
|
|
core.debug(`${name} - Error is not retryable`);
|
|
break;
|
|
}
|
|
yield sleep(delay);
|
|
attempt++;
|
|
}
|
|
throw Error(`${name} failed: ${errorMessage}`);
|
|
});
|
|
}
|
|
exports.retry = retry;
|
|
function retryTypedResponse(name, method, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield retry(name, method, (response) => response.statusCode, maxAttempts, delay,
|
|
// If the error object contains the statusCode property, extract it and return
|
|
// an ITypedResponse<T> so it can be processed by the retry logic.
|
|
(error) => {
|
|
if (error instanceof http_client_1.HttpClientError) {
|
|
return {
|
|
statusCode: error.statusCode,
|
|
result: null,
|
|
headers: {}
|
|
};
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
exports.retryTypedResponse = retryTypedResponse;
|
|
function retryHttpClientResponse(name, method, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return yield retry(name, method, (response) => response.message.statusCode, maxAttempts, delay);
|
|
});
|
|
}
|
|
exports.retryHttpClientResponse = retryHttpClientResponse;
|
|
//# sourceMappingURL=requestUtils.js.map
|
|
|
|
/***/ }),
|
|
/* 900 */,
|
|
/* 901 */,
|
|
/* 902 */,
|
|
/* 903 */
|
|
/***/ (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;
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
/* 904 */,
|
|
/* 905 */,
|
|
/* 906 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
//# sourceMappingURL=attributes.js.map
|
|
|
|
/***/ }),
|
|
/* 907 */,
|
|
/* 908 */,
|
|
/* 909 */,
|
|
/* 910 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
__exportStar(__webpack_require__(764), exports);
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
/***/ }),
|
|
/* 911 */,
|
|
/* 912 */,
|
|
/* 913 */,
|
|
/* 914 */,
|
|
/* 915 */,
|
|
/* 916 */,
|
|
/* 917 */,
|
|
/* 918 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.NoopTextMapPropagator = void 0;
|
|
/**
|
|
* No-op implementations of {@link TextMapPropagator}.
|
|
*/
|
|
var NoopTextMapPropagator = /** @class */ (function () {
|
|
function NoopTextMapPropagator() {
|
|
}
|
|
/** Noop inject function does nothing */
|
|
NoopTextMapPropagator.prototype.inject = function (_context, _carrier) { };
|
|
/** Noop extract function does nothing and returns the input context */
|
|
NoopTextMapPropagator.prototype.extract = function (context, _carrier) {
|
|
return context;
|
|
};
|
|
NoopTextMapPropagator.prototype.fields = function () {
|
|
return [];
|
|
};
|
|
return NoopTextMapPropagator;
|
|
}());
|
|
exports.NoopTextMapPropagator = NoopTextMapPropagator;
|
|
//# sourceMappingURL=NoopTextMapPropagator.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);
|
|
|
|
|
|
/***/ }),
|
|
/* 920 */,
|
|
/* 921 */,
|
|
/* 922 */,
|
|
/* 923 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Pattern = void 0;
|
|
const os = __importStar(__webpack_require__(87));
|
|
const path = __importStar(__webpack_require__(622));
|
|
const pathHelper = __importStar(__webpack_require__(972));
|
|
const assert_1 = __importDefault(__webpack_require__(357));
|
|
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, isImplicitPattern = false, segments, homedir) {
|
|
/**
|
|
* Indicates whether matches should be excluded from the result set
|
|
*/
|
|
this.negate = false;
|
|
// Pattern overload
|
|
let pattern;
|
|
if (typeof patternOrNegate === 'string') {
|
|
pattern = patternOrNegate.trim();
|
|
}
|
|
// Segments overload
|
|
else {
|
|
// Convert to pattern
|
|
segments = segments || [];
|
|
assert_1.default(segments.length, `Parameter 'segments' must not empty`);
|
|
const root = Pattern.getLiteral(segments[0]);
|
|
assert_1.default(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, homedir);
|
|
// 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' : '');
|
|
this.isImplicitPattern = isImplicitPattern;
|
|
// 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
|
|
// preceding the globstar. For example, given the pattern `/foo/**`, Minimatch returns
|
|
// false for `/foo` but returns true for `/foo/`. Append a trailing slash to handle that quirk.
|
|
if (!itemPath.endsWith(path.sep) && this.isImplicitPattern === false) {
|
|
// Note, this is safe because the constructor ensures the pattern has an absolute root.
|
|
// For example, formats like C: and C:foo on Windows are resolved to an absolute root.
|
|
itemPath = `${itemPath}${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, homedir) {
|
|
// Empty
|
|
assert_1.default(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_1.default(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_1.default(!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}`)) {
|
|
homedir = homedir || os.homedir();
|
|
assert_1.default(homedir, 'Unable to determine HOME directory');
|
|
assert_1.default(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
|
|
|
|
/***/ }),
|
|
/* 924 */,
|
|
/* 925 */,
|
|
/* 926 */,
|
|
/* 927 */,
|
|
/* 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 util = _interopDefault(__webpack_require__(669));
|
|
var os = __webpack_require__(87);
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function log(message, ...args) {
|
|
process.stderr.write(`${util.format(message, ...args)}${os.EOL}`);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const debugEnvVariable = (typeof process !== "undefined" && process.env && process.env.DEBUG) || undefined;
|
|
let enabledString;
|
|
let enabledNamespaces = [];
|
|
let skippedNamespaces = [];
|
|
const debuggers = [];
|
|
if (debugEnvVariable) {
|
|
enable(debugEnvVariable);
|
|
}
|
|
const debugObj = Object.assign((namespace) => {
|
|
return createDebugger(namespace);
|
|
}, {
|
|
enable,
|
|
enabled,
|
|
disable,
|
|
log
|
|
});
|
|
function enable(namespaces) {
|
|
enabledString = namespaces;
|
|
enabledNamespaces = [];
|
|
skippedNamespaces = [];
|
|
const wildcard = /\*/g;
|
|
const namespaceList = namespaces.split(",").map((ns) => ns.trim().replace(wildcard, ".*?"));
|
|
for (const ns of namespaceList) {
|
|
if (ns.startsWith("-")) {
|
|
skippedNamespaces.push(new RegExp(`^${ns.substr(1)}$`));
|
|
}
|
|
else {
|
|
enabledNamespaces.push(new RegExp(`^${ns}$`));
|
|
}
|
|
}
|
|
for (const instance of debuggers) {
|
|
instance.enabled = enabled(instance.namespace);
|
|
}
|
|
}
|
|
function enabled(namespace) {
|
|
if (namespace.endsWith("*")) {
|
|
return true;
|
|
}
|
|
for (const skipped of skippedNamespaces) {
|
|
if (skipped.test(namespace)) {
|
|
return false;
|
|
}
|
|
}
|
|
for (const enabledNamespace of enabledNamespaces) {
|
|
if (enabledNamespace.test(namespace)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function disable() {
|
|
const result = enabledString || "";
|
|
enable("");
|
|
return result;
|
|
}
|
|
function createDebugger(namespace) {
|
|
const newDebugger = Object.assign(debug, {
|
|
enabled: enabled(namespace),
|
|
destroy,
|
|
log: debugObj.log,
|
|
namespace,
|
|
extend
|
|
});
|
|
function debug(...args) {
|
|
if (!newDebugger.enabled) {
|
|
return;
|
|
}
|
|
if (args.length > 0) {
|
|
args[0] = `${namespace} ${args[0]}`;
|
|
}
|
|
newDebugger.log(...args);
|
|
}
|
|
debuggers.push(newDebugger);
|
|
return newDebugger;
|
|
}
|
|
function destroy() {
|
|
const index = debuggers.indexOf(this);
|
|
if (index >= 0) {
|
|
debuggers.splice(index, 1);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function extend(namespace) {
|
|
const newDebugger = createDebugger(`${this.namespace}:${namespace}`);
|
|
newDebugger.log = this.log;
|
|
return newDebugger;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const registeredLoggers = new Set();
|
|
const logLevelFromEnv = (typeof process !== "undefined" && process.env && process.env.AZURE_LOG_LEVEL) || undefined;
|
|
let 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.
|
|
*/
|
|
const AzureLogger = debugObj("azure");
|
|
AzureLogger.log = (...args) => {
|
|
debugObj.log(...args);
|
|
};
|
|
const 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) {
|
|
if (level && !isAzureLogLevel(level)) {
|
|
throw new Error(`Unknown log level '${level}'. Acceptable values: ${AZURE_LOG_LEVELS.join(",")}`);
|
|
}
|
|
azureLogLevel = level;
|
|
const enabledNamespaces = [];
|
|
for (const logger of registeredLoggers) {
|
|
if (shouldEnable(logger)) {
|
|
enabledNamespaces.push(logger.namespace);
|
|
}
|
|
}
|
|
debugObj.enable(enabledNamespaces.join(","));
|
|
}
|
|
/**
|
|
* Retrieves the currently specified log level.
|
|
*/
|
|
function getLogLevel() {
|
|
return azureLogLevel;
|
|
}
|
|
const 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.
|
|
* @hidden
|
|
*/
|
|
function createClientLogger(namespace) {
|
|
const 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 = (...args) => {
|
|
parent.log(...args);
|
|
};
|
|
}
|
|
function createLogger(parent, level) {
|
|
const logger = Object.assign(parent.extend(level), {
|
|
level
|
|
});
|
|
patchLogMethod(parent, logger);
|
|
if (shouldEnable(logger)) {
|
|
const 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
|
|
|
|
|
|
/***/ }),
|
|
/* 929 */,
|
|
/* 930 */,
|
|
/* 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 = {}));
|
|
// The default number of retry attempts.
|
|
exports.DefaultRetryAttempts = 2;
|
|
// The default delay in milliseconds between retry attempts.
|
|
exports.DefaultRetryDelay = 5000;
|
|
// Socket timeout in milliseconds during download. If no traffic is received
|
|
// over the socket during this period, the socket is destroyed and the download
|
|
// is aborted.
|
|
exports.SocketTimeout = 5000;
|
|
//# sourceMappingURL=constants.js.map
|
|
|
|
/***/ }),
|
|
/* 932 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.SpanStatusCode = void 0;
|
|
/**
|
|
* An enumeration of status codes.
|
|
*/
|
|
var SpanStatusCode;
|
|
(function (SpanStatusCode) {
|
|
/**
|
|
* The default status.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["UNSET"] = 0] = "UNSET";
|
|
/**
|
|
* The operation has been validated by an Application developer or
|
|
* Operator to have completed successfully.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["OK"] = 1] = "OK";
|
|
/**
|
|
* The operation contains an error.
|
|
*/
|
|
SpanStatusCode[SpanStatusCode["ERROR"] = 2] = "ERROR";
|
|
})(SpanStatusCode = exports.SpanStatusCode || (exports.SpanStatusCode = {}));
|
|
//# sourceMappingURL=status.js.map
|
|
|
|
/***/ }),
|
|
/* 933 */,
|
|
/* 934 */,
|
|
/* 935 */,
|
|
/* 936 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
const punycode = __webpack_require__(815);
|
|
const tr46 = __webpack_require__(976);
|
|
|
|
const specialSchemes = {
|
|
ftp: 21,
|
|
file: null,
|
|
gopher: 70,
|
|
http: 80,
|
|
https: 443,
|
|
ws: 80,
|
|
wss: 443
|
|
};
|
|
|
|
const failure = Symbol("failure");
|
|
|
|
function countSymbols(str) {
|
|
return punycode.ucs2.decode(str).length;
|
|
}
|
|
|
|
function at(input, idx) {
|
|
const c = input[idx];
|
|
return isNaN(c) ? undefined : String.fromCodePoint(c);
|
|
}
|
|
|
|
function isASCIIDigit(c) {
|
|
return c >= 0x30 && c <= 0x39;
|
|
}
|
|
|
|
function isASCIIAlpha(c) {
|
|
return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A);
|
|
}
|
|
|
|
function isASCIIAlphanumeric(c) {
|
|
return isASCIIAlpha(c) || isASCIIDigit(c);
|
|
}
|
|
|
|
function isASCIIHex(c) {
|
|
return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66);
|
|
}
|
|
|
|
function isSingleDot(buffer) {
|
|
return buffer === "." || buffer.toLowerCase() === "%2e";
|
|
}
|
|
|
|
function isDoubleDot(buffer) {
|
|
buffer = buffer.toLowerCase();
|
|
return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e";
|
|
}
|
|
|
|
function isWindowsDriveLetterCodePoints(cp1, cp2) {
|
|
return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124);
|
|
}
|
|
|
|
function isWindowsDriveLetterString(string) {
|
|
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|");
|
|
}
|
|
|
|
function isNormalizedWindowsDriveLetterString(string) {
|
|
return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":";
|
|
}
|
|
|
|
function containsForbiddenHostCodePoint(string) {
|
|
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1;
|
|
}
|
|
|
|
function containsForbiddenHostCodePointExcludingPercent(string) {
|
|
return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1;
|
|
}
|
|
|
|
function isSpecialScheme(scheme) {
|
|
return specialSchemes[scheme] !== undefined;
|
|
}
|
|
|
|
function isSpecial(url) {
|
|
return isSpecialScheme(url.scheme);
|
|
}
|
|
|
|
function defaultPort(scheme) {
|
|
return specialSchemes[scheme];
|
|
}
|
|
|
|
function percentEncode(c) {
|
|
let hex = c.toString(16).toUpperCase();
|
|
if (hex.length === 1) {
|
|
hex = "0" + hex;
|
|
}
|
|
|
|
return "%" + hex;
|
|
}
|
|
|
|
function utf8PercentEncode(c) {
|
|
const buf = new Buffer(c);
|
|
|
|
let str = "";
|
|
|
|
for (let i = 0; i < buf.length; ++i) {
|
|
str += percentEncode(buf[i]);
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
function utf8PercentDecode(str) {
|
|
const input = new Buffer(str);
|
|
const output = [];
|
|
for (let i = 0; i < input.length; ++i) {
|
|
if (input[i] !== 37) {
|
|
output.push(input[i]);
|
|
} else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) {
|
|
output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16));
|
|
i += 2;
|
|
} else {
|
|
output.push(input[i]);
|
|
}
|
|
}
|
|
return new Buffer(output).toString();
|
|
}
|
|
|
|
function isC0ControlPercentEncode(c) {
|
|
return c <= 0x1F || c > 0x7E;
|
|
}
|
|
|
|
const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]);
|
|
function isPathPercentEncode(c) {
|
|
return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c);
|
|
}
|
|
|
|
const extraUserinfoPercentEncodeSet =
|
|
new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]);
|
|
function isUserinfoPercentEncode(c) {
|
|
return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c);
|
|
}
|
|
|
|
function percentEncodeChar(c, encodeSetPredicate) {
|
|
const cStr = String.fromCodePoint(c);
|
|
|
|
if (encodeSetPredicate(c)) {
|
|
return utf8PercentEncode(cStr);
|
|
}
|
|
|
|
return cStr;
|
|
}
|
|
|
|
function parseIPv4Number(input) {
|
|
let R = 10;
|
|
|
|
if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") {
|
|
input = input.substring(2);
|
|
R = 16;
|
|
} else if (input.length >= 2 && input.charAt(0) === "0") {
|
|
input = input.substring(1);
|
|
R = 8;
|
|
}
|
|
|
|
if (input === "") {
|
|
return 0;
|
|
}
|
|
|
|
const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/);
|
|
if (regex.test(input)) {
|
|
return failure;
|
|
}
|
|
|
|
return parseInt(input, R);
|
|
}
|
|
|
|
function parseIPv4(input) {
|
|
const parts = input.split(".");
|
|
if (parts[parts.length - 1] === "") {
|
|
if (parts.length > 1) {
|
|
parts.pop();
|
|
}
|
|
}
|
|
|
|
if (parts.length > 4) {
|
|
return input;
|
|
}
|
|
|
|
const numbers = [];
|
|
for (const part of parts) {
|
|
if (part === "") {
|
|
return input;
|
|
}
|
|
const n = parseIPv4Number(part);
|
|
if (n === failure) {
|
|
return input;
|
|
}
|
|
|
|
numbers.push(n);
|
|
}
|
|
|
|
for (let i = 0; i < numbers.length - 1; ++i) {
|
|
if (numbers[i] > 255) {
|
|
return failure;
|
|
}
|
|
}
|
|
if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) {
|
|
return failure;
|
|
}
|
|
|
|
let ipv4 = numbers.pop();
|
|
let counter = 0;
|
|
|
|
for (const n of numbers) {
|
|
ipv4 += n * Math.pow(256, 3 - counter);
|
|
++counter;
|
|
}
|
|
|
|
return ipv4;
|
|
}
|
|
|
|
function serializeIPv4(address) {
|
|
let output = "";
|
|
let n = address;
|
|
|
|
for (let i = 1; i <= 4; ++i) {
|
|
output = String(n % 256) + output;
|
|
if (i !== 4) {
|
|
output = "." + output;
|
|
}
|
|
n = Math.floor(n / 256);
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
function parseIPv6(input) {
|
|
const address = [0, 0, 0, 0, 0, 0, 0, 0];
|
|
let pieceIndex = 0;
|
|
let compress = null;
|
|
let pointer = 0;
|
|
|
|
input = punycode.ucs2.decode(input);
|
|
|
|
if (input[pointer] === 58) {
|
|
if (input[pointer + 1] !== 58) {
|
|
return failure;
|
|
}
|
|
|
|
pointer += 2;
|
|
++pieceIndex;
|
|
compress = pieceIndex;
|
|
}
|
|
|
|
while (pointer < input.length) {
|
|
if (pieceIndex === 8) {
|
|
return failure;
|
|
}
|
|
|
|
if (input[pointer] === 58) {
|
|
if (compress !== null) {
|
|
return failure;
|
|
}
|
|
++pointer;
|
|
++pieceIndex;
|
|
compress = pieceIndex;
|
|
continue;
|
|
}
|
|
|
|
let value = 0;
|
|
let length = 0;
|
|
|
|
while (length < 4 && isASCIIHex(input[pointer])) {
|
|
value = value * 0x10 + parseInt(at(input, pointer), 16);
|
|
++pointer;
|
|
++length;
|
|
}
|
|
|
|
if (input[pointer] === 46) {
|
|
if (length === 0) {
|
|
return failure;
|
|
}
|
|
|
|
pointer -= length;
|
|
|
|
if (pieceIndex > 6) {
|
|
return failure;
|
|
}
|
|
|
|
let numbersSeen = 0;
|
|
|
|
while (input[pointer] !== undefined) {
|
|
let ipv4Piece = null;
|
|
|
|
if (numbersSeen > 0) {
|
|
if (input[pointer] === 46 && numbersSeen < 4) {
|
|
++pointer;
|
|
} else {
|
|
return failure;
|
|
}
|
|
}
|
|
|
|
if (!isASCIIDigit(input[pointer])) {
|
|
return failure;
|
|
}
|
|
|
|
while (isASCIIDigit(input[pointer])) {
|
|
const number = parseInt(at(input, pointer));
|
|
if (ipv4Piece === null) {
|
|
ipv4Piece = number;
|
|
} else if (ipv4Piece === 0) {
|
|
return failure;
|
|
} else {
|
|
ipv4Piece = ipv4Piece * 10 + number;
|
|
}
|
|
if (ipv4Piece > 255) {
|
|
return failure;
|
|
}
|
|
++pointer;
|
|
}
|
|
|
|
address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece;
|
|
|
|
++numbersSeen;
|
|
|
|
if (numbersSeen === 2 || numbersSeen === 4) {
|
|
++pieceIndex;
|
|
}
|
|
}
|
|
|
|
if (numbersSeen !== 4) {
|
|
return failure;
|
|
}
|
|
|
|
break;
|
|
} else if (input[pointer] === 58) {
|
|
++pointer;
|
|
if (input[pointer] === undefined) {
|
|
return failure;
|
|
}
|
|
} else if (input[pointer] !== undefined) {
|
|
return failure;
|
|
}
|
|
|
|
address[pieceIndex] = value;
|
|
++pieceIndex;
|
|
}
|
|
|
|
if (compress !== null) {
|
|
let swaps = pieceIndex - compress;
|
|
pieceIndex = 7;
|
|
while (pieceIndex !== 0 && swaps > 0) {
|
|
const temp = address[compress + swaps - 1];
|
|
address[compress + swaps - 1] = address[pieceIndex];
|
|
address[pieceIndex] = temp;
|
|
--pieceIndex;
|
|
--swaps;
|
|
}
|
|
} else if (compress === null && pieceIndex !== 8) {
|
|
return failure;
|
|
}
|
|
|
|
return address;
|
|
}
|
|
|
|
function serializeIPv6(address) {
|
|
let output = "";
|
|
const seqResult = findLongestZeroSequence(address);
|
|
const compress = seqResult.idx;
|
|
let ignore0 = false;
|
|
|
|
for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) {
|
|
if (ignore0 && address[pieceIndex] === 0) {
|
|
continue;
|
|
} else if (ignore0) {
|
|
ignore0 = false;
|
|
}
|
|
|
|
if (compress === pieceIndex) {
|
|
const separator = pieceIndex === 0 ? "::" : ":";
|
|
output += separator;
|
|
ignore0 = true;
|
|
continue;
|
|
}
|
|
|
|
output += address[pieceIndex].toString(16);
|
|
|
|
if (pieceIndex !== 7) {
|
|
output += ":";
|
|
}
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
function parseHost(input, isSpecialArg) {
|
|
if (input[0] === "[") {
|
|
if (input[input.length - 1] !== "]") {
|
|
return failure;
|
|
}
|
|
|
|
return parseIPv6(input.substring(1, input.length - 1));
|
|
}
|
|
|
|
if (!isSpecialArg) {
|
|
return parseOpaqueHost(input);
|
|
}
|
|
|
|
const domain = utf8PercentDecode(input);
|
|
const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false);
|
|
if (asciiDomain === null) {
|
|
return failure;
|
|
}
|
|
|
|
if (containsForbiddenHostCodePoint(asciiDomain)) {
|
|
return failure;
|
|
}
|
|
|
|
const ipv4Host = parseIPv4(asciiDomain);
|
|
if (typeof ipv4Host === "number" || ipv4Host === failure) {
|
|
return ipv4Host;
|
|
}
|
|
|
|
return asciiDomain;
|
|
}
|
|
|
|
function parseOpaqueHost(input) {
|
|
if (containsForbiddenHostCodePointExcludingPercent(input)) {
|
|
return failure;
|
|
}
|
|
|
|
let output = "";
|
|
const decoded = punycode.ucs2.decode(input);
|
|
for (let i = 0; i < decoded.length; ++i) {
|
|
output += percentEncodeChar(decoded[i], isC0ControlPercentEncode);
|
|
}
|
|
return output;
|
|
}
|
|
|
|
function findLongestZeroSequence(arr) {
|
|
let maxIdx = null;
|
|
let maxLen = 1; // only find elements > 1
|
|
let currStart = null;
|
|
let currLen = 0;
|
|
|
|
for (let i = 0; i < arr.length; ++i) {
|
|
if (arr[i] !== 0) {
|
|
if (currLen > maxLen) {
|
|
maxIdx = currStart;
|
|
maxLen = currLen;
|
|
}
|
|
|
|
currStart = null;
|
|
currLen = 0;
|
|
} else {
|
|
if (currStart === null) {
|
|
currStart = i;
|
|
}
|
|
++currLen;
|
|
}
|
|
}
|
|
|
|
// if trailing zeros
|
|
if (currLen > maxLen) {
|
|
maxIdx = currStart;
|
|
maxLen = currLen;
|
|
}
|
|
|
|
return {
|
|
idx: maxIdx,
|
|
len: maxLen
|
|
};
|
|
}
|
|
|
|
function serializeHost(host) {
|
|
if (typeof host === "number") {
|
|
return serializeIPv4(host);
|
|
}
|
|
|
|
// IPv6 serializer
|
|
if (host instanceof Array) {
|
|
return "[" + serializeIPv6(host) + "]";
|
|
}
|
|
|
|
return host;
|
|
}
|
|
|
|
function trimControlChars(url) {
|
|
return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, "");
|
|
}
|
|
|
|
function trimTabAndNewline(url) {
|
|
return url.replace(/\u0009|\u000A|\u000D/g, "");
|
|
}
|
|
|
|
function shortenPath(url) {
|
|
const path = url.path;
|
|
if (path.length === 0) {
|
|
return;
|
|
}
|
|
if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) {
|
|
return;
|
|
}
|
|
|
|
path.pop();
|
|
}
|
|
|
|
function includesCredentials(url) {
|
|
return url.username !== "" || url.password !== "";
|
|
}
|
|
|
|
function cannotHaveAUsernamePasswordPort(url) {
|
|
return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file";
|
|
}
|
|
|
|
function isNormalizedWindowsDriveLetter(string) {
|
|
return /^[A-Za-z]:$/.test(string);
|
|
}
|
|
|
|
function URLStateMachine(input, base, encodingOverride, url, stateOverride) {
|
|
this.pointer = 0;
|
|
this.input = input;
|
|
this.base = base || null;
|
|
this.encodingOverride = encodingOverride || "utf-8";
|
|
this.stateOverride = stateOverride;
|
|
this.url = url;
|
|
this.failure = false;
|
|
this.parseError = false;
|
|
|
|
if (!this.url) {
|
|
this.url = {
|
|
scheme: "",
|
|
username: "",
|
|
password: "",
|
|
host: null,
|
|
port: null,
|
|
path: [],
|
|
query: null,
|
|
fragment: null,
|
|
|
|
cannotBeABaseURL: false
|
|
};
|
|
|
|
const res = trimControlChars(this.input);
|
|
if (res !== this.input) {
|
|
this.parseError = true;
|
|
}
|
|
this.input = res;
|
|
}
|
|
|
|
const res = trimTabAndNewline(this.input);
|
|
if (res !== this.input) {
|
|
this.parseError = true;
|
|
}
|
|
this.input = res;
|
|
|
|
this.state = stateOverride || "scheme start";
|
|
|
|
this.buffer = "";
|
|
this.atFlag = false;
|
|
this.arrFlag = false;
|
|
this.passwordTokenSeenFlag = false;
|
|
|
|
this.input = punycode.ucs2.decode(this.input);
|
|
|
|
for (; this.pointer <= this.input.length; ++this.pointer) {
|
|
const c = this.input[this.pointer];
|
|
const cStr = isNaN(c) ? undefined : String.fromCodePoint(c);
|
|
|
|
// exec state machine
|
|
const ret = this["parse " + this.state](c, cStr);
|
|
if (!ret) {
|
|
break; // terminate algorithm
|
|
} else if (ret === failure) {
|
|
this.failure = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) {
|
|
if (isASCIIAlpha(c)) {
|
|
this.buffer += cStr.toLowerCase();
|
|
this.state = "scheme";
|
|
} else if (!this.stateOverride) {
|
|
this.state = "no scheme";
|
|
--this.pointer;
|
|
} else {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) {
|
|
if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) {
|
|
this.buffer += cStr.toLowerCase();
|
|
} else if (c === 58) {
|
|
if (this.stateOverride) {
|
|
if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) {
|
|
return false;
|
|
}
|
|
|
|
if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) {
|
|
return false;
|
|
}
|
|
|
|
if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") {
|
|
return false;
|
|
}
|
|
|
|
if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) {
|
|
return false;
|
|
}
|
|
}
|
|
this.url.scheme = this.buffer;
|
|
this.buffer = "";
|
|
if (this.stateOverride) {
|
|
return false;
|
|
}
|
|
if (this.url.scheme === "file") {
|
|
if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) {
|
|
this.parseError = true;
|
|
}
|
|
this.state = "file";
|
|
} else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) {
|
|
this.state = "special relative or authority";
|
|
} else if (isSpecial(this.url)) {
|
|
this.state = "special authority slashes";
|
|
} else if (this.input[this.pointer + 1] === 47) {
|
|
this.state = "path or authority";
|
|
++this.pointer;
|
|
} else {
|
|
this.url.cannotBeABaseURL = true;
|
|
this.url.path.push("");
|
|
this.state = "cannot-be-a-base-URL path";
|
|
}
|
|
} else if (!this.stateOverride) {
|
|
this.buffer = "";
|
|
this.state = "no scheme";
|
|
this.pointer = -1;
|
|
} else {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) {
|
|
if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) {
|
|
return failure;
|
|
} else if (this.base.cannotBeABaseURL && c === 35) {
|
|
this.url.scheme = this.base.scheme;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = this.base.query;
|
|
this.url.fragment = "";
|
|
this.url.cannotBeABaseURL = true;
|
|
this.state = "fragment";
|
|
} else if (this.base.scheme === "file") {
|
|
this.state = "file";
|
|
--this.pointer;
|
|
} else {
|
|
this.state = "relative";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) {
|
|
if (c === 47 && this.input[this.pointer + 1] === 47) {
|
|
this.state = "special authority ignore slashes";
|
|
++this.pointer;
|
|
} else {
|
|
this.parseError = true;
|
|
this.state = "relative";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) {
|
|
if (c === 47) {
|
|
this.state = "authority";
|
|
} else {
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse relative"] = function parseRelative(c) {
|
|
this.url.scheme = this.base.scheme;
|
|
if (isNaN(c)) {
|
|
this.url.username = this.base.username;
|
|
this.url.password = this.base.password;
|
|
this.url.host = this.base.host;
|
|
this.url.port = this.base.port;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = this.base.query;
|
|
} else if (c === 47) {
|
|
this.state = "relative slash";
|
|
} else if (c === 63) {
|
|
this.url.username = this.base.username;
|
|
this.url.password = this.base.password;
|
|
this.url.host = this.base.host;
|
|
this.url.port = this.base.port;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = "";
|
|
this.state = "query";
|
|
} else if (c === 35) {
|
|
this.url.username = this.base.username;
|
|
this.url.password = this.base.password;
|
|
this.url.host = this.base.host;
|
|
this.url.port = this.base.port;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = this.base.query;
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
} else if (isSpecial(this.url) && c === 92) {
|
|
this.parseError = true;
|
|
this.state = "relative slash";
|
|
} else {
|
|
this.url.username = this.base.username;
|
|
this.url.password = this.base.password;
|
|
this.url.host = this.base.host;
|
|
this.url.port = this.base.port;
|
|
this.url.path = this.base.path.slice(0, this.base.path.length - 1);
|
|
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) {
|
|
if (isSpecial(this.url) && (c === 47 || c === 92)) {
|
|
if (c === 92) {
|
|
this.parseError = true;
|
|
}
|
|
this.state = "special authority ignore slashes";
|
|
} else if (c === 47) {
|
|
this.state = "authority";
|
|
} else {
|
|
this.url.username = this.base.username;
|
|
this.url.password = this.base.password;
|
|
this.url.host = this.base.host;
|
|
this.url.port = this.base.port;
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) {
|
|
if (c === 47 && this.input[this.pointer + 1] === 47) {
|
|
this.state = "special authority ignore slashes";
|
|
++this.pointer;
|
|
} else {
|
|
this.parseError = true;
|
|
this.state = "special authority ignore slashes";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) {
|
|
if (c !== 47 && c !== 92) {
|
|
this.state = "authority";
|
|
--this.pointer;
|
|
} else {
|
|
this.parseError = true;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) {
|
|
if (c === 64) {
|
|
this.parseError = true;
|
|
if (this.atFlag) {
|
|
this.buffer = "%40" + this.buffer;
|
|
}
|
|
this.atFlag = true;
|
|
|
|
// careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars
|
|
const len = countSymbols(this.buffer);
|
|
for (let pointer = 0; pointer < len; ++pointer) {
|
|
const codePoint = this.buffer.codePointAt(pointer);
|
|
|
|
if (codePoint === 58 && !this.passwordTokenSeenFlag) {
|
|
this.passwordTokenSeenFlag = true;
|
|
continue;
|
|
}
|
|
const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode);
|
|
if (this.passwordTokenSeenFlag) {
|
|
this.url.password += encodedCodePoints;
|
|
} else {
|
|
this.url.username += encodedCodePoints;
|
|
}
|
|
}
|
|
this.buffer = "";
|
|
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
|
|
(isSpecial(this.url) && c === 92)) {
|
|
if (this.atFlag && this.buffer === "") {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
this.pointer -= countSymbols(this.buffer) + 1;
|
|
this.buffer = "";
|
|
this.state = "host";
|
|
} else {
|
|
this.buffer += cStr;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse hostname"] =
|
|
URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) {
|
|
if (this.stateOverride && this.url.scheme === "file") {
|
|
--this.pointer;
|
|
this.state = "file host";
|
|
} else if (c === 58 && !this.arrFlag) {
|
|
if (this.buffer === "") {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
|
|
const host = parseHost(this.buffer, isSpecial(this.url));
|
|
if (host === failure) {
|
|
return failure;
|
|
}
|
|
|
|
this.url.host = host;
|
|
this.buffer = "";
|
|
this.state = "port";
|
|
if (this.stateOverride === "hostname") {
|
|
return false;
|
|
}
|
|
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
|
|
(isSpecial(this.url) && c === 92)) {
|
|
--this.pointer;
|
|
if (isSpecial(this.url) && this.buffer === "") {
|
|
this.parseError = true;
|
|
return failure;
|
|
} else if (this.stateOverride && this.buffer === "" &&
|
|
(includesCredentials(this.url) || this.url.port !== null)) {
|
|
this.parseError = true;
|
|
return false;
|
|
}
|
|
|
|
const host = parseHost(this.buffer, isSpecial(this.url));
|
|
if (host === failure) {
|
|
return failure;
|
|
}
|
|
|
|
this.url.host = host;
|
|
this.buffer = "";
|
|
this.state = "path start";
|
|
if (this.stateOverride) {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (c === 91) {
|
|
this.arrFlag = true;
|
|
} else if (c === 93) {
|
|
this.arrFlag = false;
|
|
}
|
|
this.buffer += cStr;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) {
|
|
if (isASCIIDigit(c)) {
|
|
this.buffer += cStr;
|
|
} else if (isNaN(c) || c === 47 || c === 63 || c === 35 ||
|
|
(isSpecial(this.url) && c === 92) ||
|
|
this.stateOverride) {
|
|
if (this.buffer !== "") {
|
|
const port = parseInt(this.buffer);
|
|
if (port > Math.pow(2, 16) - 1) {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
this.url.port = port === defaultPort(this.url.scheme) ? null : port;
|
|
this.buffer = "";
|
|
}
|
|
if (this.stateOverride) {
|
|
return false;
|
|
}
|
|
this.state = "path start";
|
|
--this.pointer;
|
|
} else {
|
|
this.parseError = true;
|
|
return failure;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]);
|
|
|
|
URLStateMachine.prototype["parse file"] = function parseFile(c) {
|
|
this.url.scheme = "file";
|
|
|
|
if (c === 47 || c === 92) {
|
|
if (c === 92) {
|
|
this.parseError = true;
|
|
}
|
|
this.state = "file slash";
|
|
} else if (this.base !== null && this.base.scheme === "file") {
|
|
if (isNaN(c)) {
|
|
this.url.host = this.base.host;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = this.base.query;
|
|
} else if (c === 63) {
|
|
this.url.host = this.base.host;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = "";
|
|
this.state = "query";
|
|
} else if (c === 35) {
|
|
this.url.host = this.base.host;
|
|
this.url.path = this.base.path.slice();
|
|
this.url.query = this.base.query;
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
} else {
|
|
if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points
|
|
!isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) ||
|
|
(this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points
|
|
!fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) {
|
|
this.url.host = this.base.host;
|
|
this.url.path = this.base.path.slice();
|
|
shortenPath(this.url);
|
|
} else {
|
|
this.parseError = true;
|
|
}
|
|
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
} else {
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) {
|
|
if (c === 47 || c === 92) {
|
|
if (c === 92) {
|
|
this.parseError = true;
|
|
}
|
|
this.state = "file host";
|
|
} else {
|
|
if (this.base !== null && this.base.scheme === "file") {
|
|
if (isNormalizedWindowsDriveLetterString(this.base.path[0])) {
|
|
this.url.path.push(this.base.path[0]);
|
|
} else {
|
|
this.url.host = this.base.host;
|
|
}
|
|
}
|
|
this.state = "path";
|
|
--this.pointer;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) {
|
|
if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) {
|
|
--this.pointer;
|
|
if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) {
|
|
this.parseError = true;
|
|
this.state = "path";
|
|
} else if (this.buffer === "") {
|
|
this.url.host = "";
|
|
if (this.stateOverride) {
|
|
return false;
|
|
}
|
|
this.state = "path start";
|
|
} else {
|
|
let host = parseHost(this.buffer, isSpecial(this.url));
|
|
if (host === failure) {
|
|
return failure;
|
|
}
|
|
if (host === "localhost") {
|
|
host = "";
|
|
}
|
|
this.url.host = host;
|
|
|
|
if (this.stateOverride) {
|
|
return false;
|
|
}
|
|
|
|
this.buffer = "";
|
|
this.state = "path start";
|
|
}
|
|
} else {
|
|
this.buffer += cStr;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse path start"] = function parsePathStart(c) {
|
|
if (isSpecial(this.url)) {
|
|
if (c === 92) {
|
|
this.parseError = true;
|
|
}
|
|
this.state = "path";
|
|
|
|
if (c !== 47 && c !== 92) {
|
|
--this.pointer;
|
|
}
|
|
} else if (!this.stateOverride && c === 63) {
|
|
this.url.query = "";
|
|
this.state = "query";
|
|
} else if (!this.stateOverride && c === 35) {
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
} else if (c !== undefined) {
|
|
this.state = "path";
|
|
if (c !== 47) {
|
|
--this.pointer;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse path"] = function parsePath(c) {
|
|
if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) ||
|
|
(!this.stateOverride && (c === 63 || c === 35))) {
|
|
if (isSpecial(this.url) && c === 92) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
if (isDoubleDot(this.buffer)) {
|
|
shortenPath(this.url);
|
|
if (c !== 47 && !(isSpecial(this.url) && c === 92)) {
|
|
this.url.path.push("");
|
|
}
|
|
} else if (isSingleDot(this.buffer) && c !== 47 &&
|
|
!(isSpecial(this.url) && c === 92)) {
|
|
this.url.path.push("");
|
|
} else if (!isSingleDot(this.buffer)) {
|
|
if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) {
|
|
if (this.url.host !== "" && this.url.host !== null) {
|
|
this.parseError = true;
|
|
this.url.host = "";
|
|
}
|
|
this.buffer = this.buffer[0] + ":";
|
|
}
|
|
this.url.path.push(this.buffer);
|
|
}
|
|
this.buffer = "";
|
|
if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) {
|
|
while (this.url.path.length > 1 && this.url.path[0] === "") {
|
|
this.parseError = true;
|
|
this.url.path.shift();
|
|
}
|
|
}
|
|
if (c === 63) {
|
|
this.url.query = "";
|
|
this.state = "query";
|
|
}
|
|
if (c === 35) {
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
}
|
|
} else {
|
|
// TODO: If c is not a URL code point and not "%", parse error.
|
|
|
|
if (c === 37 &&
|
|
(!isASCIIHex(this.input[this.pointer + 1]) ||
|
|
!isASCIIHex(this.input[this.pointer + 2]))) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
this.buffer += percentEncodeChar(c, isPathPercentEncode);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) {
|
|
if (c === 63) {
|
|
this.url.query = "";
|
|
this.state = "query";
|
|
} else if (c === 35) {
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
} else {
|
|
// TODO: Add: not a URL code point
|
|
if (!isNaN(c) && c !== 37) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
if (c === 37 &&
|
|
(!isASCIIHex(this.input[this.pointer + 1]) ||
|
|
!isASCIIHex(this.input[this.pointer + 2]))) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
if (!isNaN(c)) {
|
|
this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) {
|
|
if (isNaN(c) || (!this.stateOverride && c === 35)) {
|
|
if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") {
|
|
this.encodingOverride = "utf-8";
|
|
}
|
|
|
|
const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead
|
|
for (let i = 0; i < buffer.length; ++i) {
|
|
if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 ||
|
|
buffer[i] === 0x3C || buffer[i] === 0x3E) {
|
|
this.url.query += percentEncode(buffer[i]);
|
|
} else {
|
|
this.url.query += String.fromCodePoint(buffer[i]);
|
|
}
|
|
}
|
|
|
|
this.buffer = "";
|
|
if (c === 35) {
|
|
this.url.fragment = "";
|
|
this.state = "fragment";
|
|
}
|
|
} else {
|
|
// TODO: If c is not a URL code point and not "%", parse error.
|
|
if (c === 37 &&
|
|
(!isASCIIHex(this.input[this.pointer + 1]) ||
|
|
!isASCIIHex(this.input[this.pointer + 2]))) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
this.buffer += cStr;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
URLStateMachine.prototype["parse fragment"] = function parseFragment(c) {
|
|
if (isNaN(c)) { // do nothing
|
|
} else if (c === 0x0) {
|
|
this.parseError = true;
|
|
} else {
|
|
// TODO: If c is not a URL code point and not "%", parse error.
|
|
if (c === 37 &&
|
|
(!isASCIIHex(this.input[this.pointer + 1]) ||
|
|
!isASCIIHex(this.input[this.pointer + 2]))) {
|
|
this.parseError = true;
|
|
}
|
|
|
|
this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
function serializeURL(url, excludeFragment) {
|
|
let output = url.scheme + ":";
|
|
if (url.host !== null) {
|
|
output += "//";
|
|
|
|
if (url.username !== "" || url.password !== "") {
|
|
output += url.username;
|
|
if (url.password !== "") {
|
|
output += ":" + url.password;
|
|
}
|
|
output += "@";
|
|
}
|
|
|
|
output += serializeHost(url.host);
|
|
|
|
if (url.port !== null) {
|
|
output += ":" + url.port;
|
|
}
|
|
} else if (url.host === null && url.scheme === "file") {
|
|
output += "//";
|
|
}
|
|
|
|
if (url.cannotBeABaseURL) {
|
|
output += url.path[0];
|
|
} else {
|
|
for (const string of url.path) {
|
|
output += "/" + string;
|
|
}
|
|
}
|
|
|
|
if (url.query !== null) {
|
|
output += "?" + url.query;
|
|
}
|
|
|
|
if (!excludeFragment && url.fragment !== null) {
|
|
output += "#" + url.fragment;
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
function serializeOrigin(tuple) {
|
|
let result = tuple.scheme + "://";
|
|
result += serializeHost(tuple.host);
|
|
|
|
if (tuple.port !== null) {
|
|
result += ":" + tuple.port;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
module.exports.serializeURL = serializeURL;
|
|
|
|
module.exports.serializeURLOrigin = function (url) {
|
|
// https://url.spec.whatwg.org/#concept-url-origin
|
|
switch (url.scheme) {
|
|
case "blob":
|
|
try {
|
|
return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0]));
|
|
} catch (e) {
|
|
// serializing an opaque origin returns "null"
|
|
return "null";
|
|
}
|
|
case "ftp":
|
|
case "gopher":
|
|
case "http":
|
|
case "https":
|
|
case "ws":
|
|
case "wss":
|
|
return serializeOrigin({
|
|
scheme: url.scheme,
|
|
host: url.host,
|
|
port: url.port
|
|
});
|
|
case "file":
|
|
// spec says "exercise to the reader", chrome says "file://"
|
|
return "file://";
|
|
default:
|
|
// serializing an opaque origin returns "null"
|
|
return "null";
|
|
}
|
|
};
|
|
|
|
module.exports.basicURLParse = function (input, options) {
|
|
if (options === undefined) {
|
|
options = {};
|
|
}
|
|
|
|
const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride);
|
|
if (usm.failure) {
|
|
return "failure";
|
|
}
|
|
|
|
return usm.url;
|
|
};
|
|
|
|
module.exports.setTheUsername = function (url, username) {
|
|
url.username = "";
|
|
const decoded = punycode.ucs2.decode(username);
|
|
for (let i = 0; i < decoded.length; ++i) {
|
|
url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
|
|
}
|
|
};
|
|
|
|
module.exports.setThePassword = function (url, password) {
|
|
url.password = "";
|
|
const decoded = punycode.ucs2.decode(password);
|
|
for (let i = 0; i < decoded.length; ++i) {
|
|
url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode);
|
|
}
|
|
};
|
|
|
|
module.exports.serializeHost = serializeHost;
|
|
|
|
module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort;
|
|
|
|
module.exports.serializeInteger = function (integer) {
|
|
return String(integer);
|
|
};
|
|
|
|
module.exports.parseURL = function (input, options) {
|
|
if (options === undefined) {
|
|
options = {};
|
|
}
|
|
|
|
// We don't handle blobs, so this just delegates:
|
|
return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride });
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
/* 937 */,
|
|
/* 938 */,
|
|
/* 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 */,
|
|
/* 941 */,
|
|
/* 942 */,
|
|
/* 943 */,
|
|
/* 944 */,
|
|
/* 945 */,
|
|
/* 946 */,
|
|
/* 947 */,
|
|
/* 948 */,
|
|
/* 949 */,
|
|
/* 950 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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 = new URL(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;
|
|
|
|
|
|
/***/ }),
|
|
/* 951 */,
|
|
/* 952 */,
|
|
/* 953 */,
|
|
/* 954 */,
|
|
/* 955 */,
|
|
/* 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__(257);
|
|
|
|
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);
|
|
|
|
|
|
/***/ }),
|
|
/* 957 */,
|
|
/* 958 */,
|
|
/* 959 */,
|
|
/* 960 */,
|
|
/* 961 */,
|
|
/* 962 */,
|
|
/* 963 */,
|
|
/* 964 */,
|
|
/* 965 */,
|
|
/* 966 */,
|
|
/* 967 */,
|
|
/* 968 */,
|
|
/* 969 */,
|
|
/* 970 */,
|
|
/* 971 */,
|
|
/* 972 */
|
|
/***/ (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 (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.safeTrimTrailingSeparator = exports.normalizeSeparators = exports.hasRoot = exports.hasAbsoluteRoot = exports.ensureAbsoluteRoot = exports.dirname = void 0;
|
|
const path = __importStar(__webpack_require__(622));
|
|
const assert_1 = __importDefault(__webpack_require__(357));
|
|
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_1.default(root, `ensureAbsoluteRoot parameter 'root' must not be empty`);
|
|
assert_1.default(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_1.default(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_1.default(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`);
|
|
return `${cwd[0]}:\\${itemPath.substr(1)}`;
|
|
}
|
|
}
|
|
assert_1.default(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_1.default(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_1.default(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
|
|
|
|
/***/ }),
|
|
/* 973 */,
|
|
/* 974 */,
|
|
/* 975 */
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TraceFlags = void 0;
|
|
/*
|
|
* Copyright The 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.
|
|
*/
|
|
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
|
|
|
|
/***/ }),
|
|
/* 976 */
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var punycode = __webpack_require__(815);
|
|
var mappingTable = __webpack_require__(482);
|
|
|
|
var PROCESSING_OPTIONS = {
|
|
TRANSITIONAL: 0,
|
|
NONTRANSITIONAL: 1
|
|
};
|
|
|
|
function normalize(str) { // fix bug in v8
|
|
return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000');
|
|
}
|
|
|
|
function findStatus(val) {
|
|
var start = 0;
|
|
var end = mappingTable.length - 1;
|
|
|
|
while (start <= end) {
|
|
var mid = Math.floor((start + end) / 2);
|
|
|
|
var target = mappingTable[mid];
|
|
if (target[0][0] <= val && target[0][1] >= val) {
|
|
return target;
|
|
} else if (target[0][0] > val) {
|
|
end = mid - 1;
|
|
} else {
|
|
start = mid + 1;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
|
|
function countSymbols(string) {
|
|
return string
|
|
// replace every surrogate pair with a BMP symbol
|
|
.replace(regexAstralSymbols, '_')
|
|
// then get the length
|
|
.length;
|
|
}
|
|
|
|
function mapChars(domain_name, useSTD3, processing_option) {
|
|
var hasError = false;
|
|
var processed = "";
|
|
|
|
var len = countSymbols(domain_name);
|
|
for (var i = 0; i < len; ++i) {
|
|
var codePoint = domain_name.codePointAt(i);
|
|
var status = findStatus(codePoint);
|
|
|
|
switch (status[1]) {
|
|
case "disallowed":
|
|
hasError = true;
|
|
processed += String.fromCodePoint(codePoint);
|
|
break;
|
|
case "ignored":
|
|
break;
|
|
case "mapped":
|
|
processed += String.fromCodePoint.apply(String, status[2]);
|
|
break;
|
|
case "deviation":
|
|
if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) {
|
|
processed += String.fromCodePoint.apply(String, status[2]);
|
|
} else {
|
|
processed += String.fromCodePoint(codePoint);
|
|
}
|
|
break;
|
|
case "valid":
|
|
processed += String.fromCodePoint(codePoint);
|
|
break;
|
|
case "disallowed_STD3_mapped":
|
|
if (useSTD3) {
|
|
hasError = true;
|
|
processed += String.fromCodePoint(codePoint);
|
|
} else {
|
|
processed += String.fromCodePoint.apply(String, status[2]);
|
|
}
|
|
break;
|
|
case "disallowed_STD3_valid":
|
|
if (useSTD3) {
|
|
hasError = true;
|
|
}
|
|
|
|
processed += String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return {
|
|
string: processed,
|
|
error: hasError
|
|
};
|
|
}
|
|
|
|
var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/;
|
|
|
|
function validateLabel(label, processing_option) {
|
|
if (label.substr(0, 4) === "xn--") {
|
|
label = punycode.toUnicode(label);
|
|
processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL;
|
|
}
|
|
|
|
var error = false;
|
|
|
|
if (normalize(label) !== label ||
|
|
(label[3] === "-" && label[4] === "-") ||
|
|
label[0] === "-" || label[label.length - 1] === "-" ||
|
|
label.indexOf(".") !== -1 ||
|
|
label.search(combiningMarksRegex) === 0) {
|
|
error = true;
|
|
}
|
|
|
|
var len = countSymbols(label);
|
|
for (var i = 0; i < len; ++i) {
|
|
var status = findStatus(label.codePointAt(i));
|
|
if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") ||
|
|
(processing === PROCESSING_OPTIONS.NONTRANSITIONAL &&
|
|
status[1] !== "valid" && status[1] !== "deviation")) {
|
|
error = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return {
|
|
label: label,
|
|
error: error
|
|
};
|
|
}
|
|
|
|
function processing(domain_name, useSTD3, processing_option) {
|
|
var result = mapChars(domain_name, useSTD3, processing_option);
|
|
result.string = normalize(result.string);
|
|
|
|
var labels = result.string.split(".");
|
|
for (var i = 0; i < labels.length; ++i) {
|
|
try {
|
|
var validation = validateLabel(labels[i]);
|
|
labels[i] = validation.label;
|
|
result.error = result.error || validation.error;
|
|
} catch(e) {
|
|
result.error = true;
|
|
}
|
|
}
|
|
|
|
return {
|
|
string: labels.join("."),
|
|
error: result.error
|
|
};
|
|
}
|
|
|
|
module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) {
|
|
var result = processing(domain_name, useSTD3, processing_option);
|
|
var labels = result.string.split(".");
|
|
labels = labels.map(function(l) {
|
|
try {
|
|
return punycode.toASCII(l);
|
|
} catch(e) {
|
|
result.error = true;
|
|
return l;
|
|
}
|
|
});
|
|
|
|
if (verifyDnsLength) {
|
|
var total = labels.slice(0, labels.length - 1).join(".").length;
|
|
if (total.length > 253 || total.length === 0) {
|
|
result.error = true;
|
|
}
|
|
|
|
for (var i=0; i < labels.length; ++i) {
|
|
if (labels.length > 63 || labels.length === 0) {
|
|
result.error = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (result.error) return null;
|
|
return labels.join(".");
|
|
};
|
|
|
|
module.exports.toUnicode = function(domain_name, useSTD3) {
|
|
var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL);
|
|
|
|
return {
|
|
domain: result.string,
|
|
error: result.error
|
|
};
|
|
};
|
|
|
|
module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS;
|
|
|
|
|
|
/***/ }),
|
|
/* 977 */,
|
|
/* 978 */,
|
|
/* 979 */,
|
|
/* 980 */,
|
|
/* 981 */,
|
|
/* 982 */,
|
|
/* 983 */,
|
|
/* 984 */,
|
|
/* 985 */,
|
|
/* 986 */
|
|
/***/ (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 (k !== "default" && 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 });
|
|
exports.getExecOutput = exports.exec = void 0;
|
|
const string_decoder_1 = __webpack_require__(304);
|
|
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;
|
|
/**
|
|
* Exec a command and get the output.
|
|
* Output will be streamed to the live console.
|
|
* Returns promise with the exit code and collected stdout and stderr
|
|
*
|
|
* @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<ExecOutput> exit code, stdout, and stderr
|
|
*/
|
|
function getExecOutput(commandLine, args, options) {
|
|
var _a, _b;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
let stdout = '';
|
|
let stderr = '';
|
|
//Using string decoder covers the case where a mult-byte character is split
|
|
const stdoutDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
const stderrDecoder = new string_decoder_1.StringDecoder('utf8');
|
|
const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout;
|
|
const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr;
|
|
const stdErrListener = (data) => {
|
|
stderr += stderrDecoder.write(data);
|
|
if (originalStdErrListener) {
|
|
originalStdErrListener(data);
|
|
}
|
|
};
|
|
const stdOutListener = (data) => {
|
|
stdout += stdoutDecoder.write(data);
|
|
if (originalStdoutListener) {
|
|
originalStdoutListener(data);
|
|
}
|
|
};
|
|
const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener });
|
|
const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
|
|
//flush any remaining characters
|
|
stdout += stdoutDecoder.end();
|
|
stderr += stderrDecoder.end();
|
|
return {
|
|
exitCode,
|
|
stdout,
|
|
stderr
|
|
};
|
|
});
|
|
}
|
|
exports.getExecOutput = getExecOutput;
|
|
//# sourceMappingURL=exec.js.map
|
|
|
|
/***/ }),
|
|
/* 987 */
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
/*
|
|
* Copyright The 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 });
|
|
exports.isCompatible = exports._makeCompatibilityCheck = void 0;
|
|
var version_1 = __webpack_require__(830);
|
|
var re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
|
|
/**
|
|
* Create a function to test an API version to see if it is compatible with the provided ownVersion.
|
|
*
|
|
* The returned function has the following semantics:
|
|
* - Exact match is always compatible
|
|
* - Major versions must match exactly
|
|
* - 1.x package cannot use global 2.x package
|
|
* - 2.x package cannot use global 1.x package
|
|
* - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API
|
|
* - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects
|
|
* - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3
|
|
* - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor
|
|
* - Patch and build tag differences are not considered at this time
|
|
*
|
|
* @param ownVersion version which should be checked against
|
|
*/
|
|
function _makeCompatibilityCheck(ownVersion) {
|
|
var acceptedVersions = new Set([ownVersion]);
|
|
var rejectedVersions = new Set();
|
|
var myVersionMatch = ownVersion.match(re);
|
|
if (!myVersionMatch) {
|
|
// we cannot guarantee compatibility so we always return noop
|
|
return function () { return false; };
|
|
}
|
|
var ownVersionParsed = {
|
|
major: +myVersionMatch[1],
|
|
minor: +myVersionMatch[2],
|
|
patch: +myVersionMatch[3],
|
|
prerelease: myVersionMatch[4],
|
|
};
|
|
// if ownVersion has a prerelease tag, versions must match exactly
|
|
if (ownVersionParsed.prerelease != null) {
|
|
return function isExactmatch(globalVersion) {
|
|
return globalVersion === ownVersion;
|
|
};
|
|
}
|
|
function _reject(v) {
|
|
rejectedVersions.add(v);
|
|
return false;
|
|
}
|
|
function _accept(v) {
|
|
acceptedVersions.add(v);
|
|
return true;
|
|
}
|
|
return function isCompatible(globalVersion) {
|
|
if (acceptedVersions.has(globalVersion)) {
|
|
return true;
|
|
}
|
|
if (rejectedVersions.has(globalVersion)) {
|
|
return false;
|
|
}
|
|
var globalVersionMatch = globalVersion.match(re);
|
|
if (!globalVersionMatch) {
|
|
// cannot parse other version
|
|
// we cannot guarantee compatibility so we always noop
|
|
return _reject(globalVersion);
|
|
}
|
|
var globalVersionParsed = {
|
|
major: +globalVersionMatch[1],
|
|
minor: +globalVersionMatch[2],
|
|
patch: +globalVersionMatch[3],
|
|
prerelease: globalVersionMatch[4],
|
|
};
|
|
// if globalVersion has a prerelease tag, versions must match exactly
|
|
if (globalVersionParsed.prerelease != null) {
|
|
return _reject(globalVersion);
|
|
}
|
|
// major versions must match
|
|
if (ownVersionParsed.major !== globalVersionParsed.major) {
|
|
return _reject(globalVersion);
|
|
}
|
|
if (ownVersionParsed.major === 0) {
|
|
if (ownVersionParsed.minor === globalVersionParsed.minor &&
|
|
ownVersionParsed.patch <= globalVersionParsed.patch) {
|
|
return _accept(globalVersion);
|
|
}
|
|
return _reject(globalVersion);
|
|
}
|
|
if (ownVersionParsed.minor <= globalVersionParsed.minor) {
|
|
return _accept(globalVersion);
|
|
}
|
|
return _reject(globalVersion);
|
|
};
|
|
}
|
|
exports._makeCompatibilityCheck = _makeCompatibilityCheck;
|
|
/**
|
|
* Test an API version to see if it is compatible with this API.
|
|
*
|
|
* - Exact match is always compatible
|
|
* - Major versions must match exactly
|
|
* - 1.x package cannot use global 2.x package
|
|
* - 2.x package cannot use global 1.x package
|
|
* - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API
|
|
* - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects
|
|
* - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3
|
|
* - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor
|
|
* - Patch and build tag differences are not considered at this time
|
|
*
|
|
* @param version version of the API requesting an instance of the global API
|
|
*/
|
|
exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION);
|
|
//# sourceMappingURL=semver.js.map
|
|
|
|
/***/ }),
|
|
/* 988 */,
|
|
/* 989 */,
|
|
/* 990 */,
|
|
/* 991 */,
|
|
/* 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);
|
|
|
|
|
|
/***/ }),
|
|
/* 993 */,
|
|
/* 994 */,
|
|
/* 995 */,
|
|
/* 996 */,
|
|
/* 997 */,
|
|
/* 998 */,
|
|
/* 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 tough = __webpack_require__(393);
|
|
var http = __webpack_require__(605);
|
|
var https = __webpack_require__(211);
|
|
var node_fetch = _interopDefault(__webpack_require__(454));
|
|
var abortController = __webpack_require__(106);
|
|
var FormData = _interopDefault(__webpack_require__(790));
|
|
var util = __webpack_require__(669);
|
|
var url = __webpack_require__(835);
|
|
var stream = __webpack_require__(794);
|
|
var logger$1 = __webpack_require__(928);
|
|
var tunnel = __webpack_require__(413);
|
|
var tslib = __webpack_require__(865);
|
|
var coreAuth = __webpack_require__(229);
|
|
var xml2js = __webpack_require__(992);
|
|
var os = __webpack_require__(87);
|
|
var coreTracing = __webpack_require__(263);
|
|
__webpack_require__(71);
|
|
|
|
// 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") {
|
|
const castObject = object;
|
|
if (typeof castObject.rawHeaders === "function" &&
|
|
typeof castObject.clone === "function" &&
|
|
typeof castObject.get === "function" &&
|
|
typeof castObject.set === "function" &&
|
|
typeof castObject.contains === "function" &&
|
|
typeof castObject.remove === "function" &&
|
|
typeof castObject.headersArray === "function" &&
|
|
typeof castObject.headerValues === "function" &&
|
|
typeof castObject.headerNames === "function" &&
|
|
typeof castObject.toJson === "function") {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* A collection of HTTP header key/value pairs.
|
|
*/
|
|
class HttpHeaders {
|
|
constructor(rawHeaders) {
|
|
this._headersMap = {};
|
|
if (rawHeaders) {
|
|
for (const headerName in rawHeaders) {
|
|
this.set(headerName, rawHeaders[headerName]);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Set a header in this collection with the provided name and value. The name is
|
|
* case-insensitive.
|
|
* @param headerName - The name of the header to set. This value is case-insensitive.
|
|
* @param headerValue - The value of the header to set.
|
|
*/
|
|
set(headerName, headerValue) {
|
|
this._headersMap[getHeaderKey(headerName)] = {
|
|
name: headerName,
|
|
value: headerValue.toString()
|
|
};
|
|
}
|
|
/**
|
|
* Get the header value for the provided header name, or undefined if no header exists in this
|
|
* collection with the provided name.
|
|
* @param headerName - The name of the header.
|
|
*/
|
|
get(headerName) {
|
|
const header = this._headersMap[getHeaderKey(headerName)];
|
|
return !header ? undefined : header.value;
|
|
}
|
|
/**
|
|
* Get whether or not this header collection contains a header entry for the provided header name.
|
|
*/
|
|
contains(headerName) {
|
|
return !!this._headersMap[getHeaderKey(headerName)];
|
|
}
|
|
/**
|
|
* Remove the header with the provided headerName. Return whether or not the header existed and
|
|
* was removed.
|
|
* @param headerName - The name of the header to remove.
|
|
*/
|
|
remove(headerName) {
|
|
const result = this.contains(headerName);
|
|
delete this._headersMap[getHeaderKey(headerName)];
|
|
return result;
|
|
}
|
|
/**
|
|
* Get the headers that are contained this collection as an object.
|
|
*/
|
|
rawHeaders() {
|
|
const result = {};
|
|
for (const headerKey in this._headersMap) {
|
|
const header = this._headersMap[headerKey];
|
|
result[header.name.toLowerCase()] = header.value;
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Get the headers that are contained in this collection as an array.
|
|
*/
|
|
headersArray() {
|
|
const headers = [];
|
|
for (const headerKey in this._headersMap) {
|
|
headers.push(this._headersMap[headerKey]);
|
|
}
|
|
return headers;
|
|
}
|
|
/**
|
|
* Get the header names that are contained in this collection.
|
|
*/
|
|
headerNames() {
|
|
const headerNames = [];
|
|
const headers = this.headersArray();
|
|
for (let i = 0; i < headers.length; ++i) {
|
|
headerNames.push(headers[i].name);
|
|
}
|
|
return headerNames;
|
|
}
|
|
/**
|
|
* Get the header values that are contained in this collection.
|
|
*/
|
|
headerValues() {
|
|
const headerValues = [];
|
|
const headers = this.headersArray();
|
|
for (let i = 0; i < headers.length; ++i) {
|
|
headerValues.push(headers[i].value);
|
|
}
|
|
return headerValues;
|
|
}
|
|
/**
|
|
* Get the JSON object representation of this HTTP header collection.
|
|
*/
|
|
toJson() {
|
|
return this.rawHeaders();
|
|
}
|
|
/**
|
|
* Get the string representation of this HTTP header collection.
|
|
*/
|
|
toString() {
|
|
return JSON.stringify(this.toJson());
|
|
}
|
|
/**
|
|
* Create a deep clone/copy of this HttpHeaders collection.
|
|
*/
|
|
clone() {
|
|
const resultPreservingCasing = {};
|
|
for (const headerKey in this._headersMap) {
|
|
const header = this._headersMap[headerKey];
|
|
resultPreservingCasing[header.name] = header.value;
|
|
}
|
|
return new HttpHeaders(resultPreservingCasing);
|
|
}
|
|
}
|
|
|
|
// 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
|
|
const 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.
|
|
const Constants = {
|
|
/**
|
|
* The core-http version
|
|
*/
|
|
coreHttpVersion: "2.2.2",
|
|
/**
|
|
* Specifies HTTP.
|
|
*/
|
|
HTTP: "http:",
|
|
/**
|
|
* Specifies HTTPS.
|
|
*/
|
|
HTTPS: "https:",
|
|
/**
|
|
* Specifies HTTP Proxy.
|
|
*/
|
|
HTTP_PROXY: "HTTP_PROXY",
|
|
/**
|
|
* Specifies HTTPS Proxy.
|
|
*/
|
|
HTTPS_PROXY: "HTTPS_PROXY",
|
|
/**
|
|
* Specifies NO Proxy.
|
|
*/
|
|
NO_PROXY: "NO_PROXY",
|
|
/**
|
|
* Specifies ALL Proxy.
|
|
*/
|
|
ALL_PROXY: "ALL_PROXY",
|
|
HttpConstants: {
|
|
/**
|
|
* Http Verbs
|
|
*/
|
|
HttpVerbs: {
|
|
PUT: "PUT",
|
|
GET: "GET",
|
|
DELETE: "DELETE",
|
|
POST: "POST",
|
|
MERGE: "MERGE",
|
|
HEAD: "HEAD",
|
|
PATCH: "PATCH"
|
|
},
|
|
StatusCodes: {
|
|
TooManyRequests: 429,
|
|
ServiceUnavailable: 503
|
|
}
|
|
},
|
|
/**
|
|
* Defines constants for use with HTTP headers.
|
|
*/
|
|
HeaderConstants: {
|
|
/**
|
|
* The Authorization header.
|
|
*/
|
|
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.
|
|
*/
|
|
RETRY_AFTER: "Retry-After",
|
|
/**
|
|
* The UserAgent header.
|
|
*/
|
|
USER_AGENT: "User-Agent"
|
|
}
|
|
};
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Default key used to access the XML attributes.
|
|
*/
|
|
const XML_ATTRKEY = "$";
|
|
/**
|
|
* Default key used to access the XML value content.
|
|
*/
|
|
const XML_CHARKEY = "_";
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const validUuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i;
|
|
/**
|
|
* A constant that indicates whether the environment is node.js or browser based.
|
|
*/
|
|
const isNode = typeof process !== "undefined" &&
|
|
!!process.version &&
|
|
!!process.versions &&
|
|
!!process.versions.node;
|
|
/**
|
|
* Encodes an URI.
|
|
*
|
|
* @param uri - The URI to be encoded.
|
|
* @returns 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 response - The Http Response
|
|
* @returns The stripped version of Http Response.
|
|
*/
|
|
function stripResponse(response) {
|
|
const 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 request - The Http Request object
|
|
* @returns The stripped version of Http Request.
|
|
*/
|
|
function stripRequest(request) {
|
|
const strippedRequest = request.clone();
|
|
if (strippedRequest.headers) {
|
|
strippedRequest.headers.remove("authorization");
|
|
}
|
|
return strippedRequest;
|
|
}
|
|
/**
|
|
* Validates the given uuid as a string
|
|
*
|
|
* @param uuid - The uuid as a string that needs to be validated
|
|
* @returns True if the uuid is valid; false otherwise.
|
|
*/
|
|
function isValidUuid(uuid) {
|
|
return validUuidRegex.test(uuid);
|
|
}
|
|
/**
|
|
* Generated UUID
|
|
*
|
|
* @returns 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 promiseFactories - An array of promise factories(A function that return a promise)
|
|
* @param kickstart - Input to the first promise that is used to kickstart the promise chain.
|
|
* If not provided then the promise chain starts with undefined.
|
|
* @returns A chain of resolved or rejected promises
|
|
*/
|
|
function executePromisesSequentially(promiseFactories, kickstart) {
|
|
let result = Promise.resolve(kickstart);
|
|
promiseFactories.forEach((promiseFactory) => {
|
|
result = result.then(promiseFactory);
|
|
});
|
|
return result;
|
|
}
|
|
/**
|
|
* Converts a Promise to a callback.
|
|
* @param promise - The Promise to be converted to a callback
|
|
* @returns A function that takes the callback `(cb: Function) => void`
|
|
* @deprecated generated code should instead depend on responseToBody
|
|
*/
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
function promiseToCallback(promise) {
|
|
if (typeof promise.then !== "function") {
|
|
throw new Error("The provided input is not a Promise.");
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
return (cb) => {
|
|
promise
|
|
.then((data) => {
|
|
// eslint-disable-next-line promise/no-callback-in-promise
|
|
return cb(undefined, data);
|
|
})
|
|
.catch((err) => {
|
|
// eslint-disable-next-line promise/no-callback-in-promise
|
|
cb(err);
|
|
});
|
|
};
|
|
}
|
|
/**
|
|
* Converts a Promise to a service callback.
|
|
* @param promise - The Promise of HttpOperationResponse to be converted to a service callback
|
|
* @returns 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 (cb) => {
|
|
promise
|
|
.then((data) => {
|
|
return process.nextTick(cb, undefined, data.parsedBody, data.request, data);
|
|
})
|
|
.catch((err) => {
|
|
process.nextTick(cb, err);
|
|
});
|
|
};
|
|
}
|
|
function prepareXMLRootList(obj, elementName, xmlNamespaceKey, xmlNamespace) {
|
|
if (!Array.isArray(obj)) {
|
|
obj = [obj];
|
|
}
|
|
if (!xmlNamespaceKey || !xmlNamespace) {
|
|
return { [elementName]: obj };
|
|
}
|
|
const result = { [elementName]: obj };
|
|
result[XML_ATTRKEY] = { [xmlNamespaceKey]: xmlNamespace };
|
|
return result;
|
|
}
|
|
/**
|
|
* Applies the properties on the prototype of sourceCtors to the prototype of targetCtor
|
|
* @param targetCtor - The target object on which the properties need to be applied.
|
|
* @param sourceCtors - An array of source objects from which the properties need to be taken.
|
|
*/
|
|
function applyMixins(targetCtorParam, sourceCtors) {
|
|
const castTargetCtorParam = targetCtorParam;
|
|
sourceCtors.forEach((sourceCtor) => {
|
|
Object.getOwnPropertyNames(sourceCtor.prototype).forEach((name) => {
|
|
castTargetCtorParam.prototype[name] = sourceCtor.prototype[name];
|
|
});
|
|
});
|
|
}
|
|
const validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
|
|
/**
|
|
* Indicates whether the given string is in ISO 8601 format.
|
|
* @param value - The value to be validated for ISO 8601 duration format.
|
|
* @returns `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 value - The value to search and replace in.
|
|
* @param searchValue - The value to search for in the value argument.
|
|
* @param replaceValue - The value to replace searchValue with in the value argument.
|
|
* @returns 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 value - Any entity
|
|
* @returns true is it is primitive type, false otherwise.
|
|
*/
|
|
function isPrimitiveType(value) {
|
|
return (typeof value !== "object" && typeof value !== "function") || value === null;
|
|
}
|
|
function getEnvironmentValue(name) {
|
|
if (process.env[name]) {
|
|
return process.env[name];
|
|
}
|
|
else if (process.env[name.toLowerCase()]) {
|
|
return process.env[name.toLowerCase()];
|
|
}
|
|
return undefined;
|
|
}
|
|
/**
|
|
* @internal
|
|
* @returns true when input is an object type that is not null, Array, RegExp, or Date.
|
|
*/
|
|
function isObject(input) {
|
|
return (typeof input === "object" &&
|
|
input !== null &&
|
|
!Array.isArray(input) &&
|
|
!(input instanceof RegExp) &&
|
|
!(input instanceof Date));
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class Serializer {
|
|
constructor(modelMappers = {}, isXML) {
|
|
this.modelMappers = modelMappers;
|
|
this.isXML = isXML;
|
|
}
|
|
validateConstraints(mapper, value, objectName) {
|
|
const failValidation = (constraintName, constraintValue) => {
|
|
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
|
|
};
|
|
if (mapper.constraints && value != undefined) {
|
|
const valueAsNumber = value;
|
|
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems } = mapper.constraints;
|
|
if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {
|
|
failValidation("ExclusiveMaximum", ExclusiveMaximum);
|
|
}
|
|
if (ExclusiveMinimum != undefined && valueAsNumber <= ExclusiveMinimum) {
|
|
failValidation("ExclusiveMinimum", ExclusiveMinimum);
|
|
}
|
|
if (InclusiveMaximum != undefined && valueAsNumber > InclusiveMaximum) {
|
|
failValidation("InclusiveMaximum", InclusiveMaximum);
|
|
}
|
|
if (InclusiveMinimum != undefined && valueAsNumber < InclusiveMinimum) {
|
|
failValidation("InclusiveMinimum", InclusiveMinimum);
|
|
}
|
|
const valueAsArray = value;
|
|
if (MaxItems != undefined && valueAsArray.length > MaxItems) {
|
|
failValidation("MaxItems", MaxItems);
|
|
}
|
|
if (MaxLength != undefined && valueAsArray.length > MaxLength) {
|
|
failValidation("MaxLength", MaxLength);
|
|
}
|
|
if (MinItems != undefined && valueAsArray.length < MinItems) {
|
|
failValidation("MinItems", MinItems);
|
|
}
|
|
if (MinLength != undefined && valueAsArray.length < MinLength) {
|
|
failValidation("MinLength", MinLength);
|
|
}
|
|
if (MultipleOf != undefined && valueAsNumber % MultipleOf !== 0) {
|
|
failValidation("MultipleOf", MultipleOf);
|
|
}
|
|
if (Pattern) {
|
|
const pattern = typeof Pattern === "string" ? new RegExp(Pattern) : Pattern;
|
|
if (typeof value !== "string" || value.match(pattern) === null) {
|
|
failValidation("Pattern", Pattern);
|
|
}
|
|
}
|
|
if (UniqueItems &&
|
|
valueAsArray.some((item, i, ar) => ar.indexOf(item) !== i)) {
|
|
failValidation("UniqueItems", UniqueItems);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Serialize the given object based on its metadata defined in the mapper
|
|
*
|
|
* @param mapper - The mapper which defines the metadata of the serializable object
|
|
* @param object - A valid Javascript object to be serialized
|
|
* @param objectName - Name of the serialized object
|
|
* @param options - additional options to deserialization
|
|
* @returns A valid serialized Javascript object
|
|
*/
|
|
serialize(mapper, object, objectName, options = {}) {
|
|
var _a, _b, _c;
|
|
const updatedOptions = {
|
|
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
|
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
|
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
|
};
|
|
let payload = {};
|
|
const mapperType = mapper.type.name;
|
|
if (!objectName) {
|
|
objectName = mapper.serializedName;
|
|
}
|
|
if (mapperType.match(/^Sequence$/i) !== null) {
|
|
payload = [];
|
|
}
|
|
if (mapper.isConstant) {
|
|
object = mapper.defaultValue;
|
|
}
|
|
// This table of allowed values should help explain
|
|
// the mapper.required and mapper.nullable properties.
|
|
// X means "neither undefined or null are allowed".
|
|
// || required
|
|
// || true | false
|
|
// nullable || ==========================
|
|
// true || null | undefined/null
|
|
// false || X | undefined
|
|
// undefined || X | undefined/null
|
|
const { required, nullable } = mapper;
|
|
if (required && nullable && object === undefined) {
|
|
throw new Error(`${objectName} cannot be undefined.`);
|
|
}
|
|
if (required && !nullable && object == undefined) {
|
|
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) {
|
|
const enumMapper = mapper;
|
|
payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object);
|
|
}
|
|
else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/i) !== null) {
|
|
payload = serializeDateTypes(mapperType, object, objectName);
|
|
}
|
|
else if (mapperType.match(/^ByteArray$/i) !== null) {
|
|
payload = serializeByteArrayType(objectName, object);
|
|
}
|
|
else if (mapperType.match(/^Base64Url$/i) !== null) {
|
|
payload = serializeBase64UrlType(objectName, object);
|
|
}
|
|
else if (mapperType.match(/^Sequence$/i) !== null) {
|
|
payload = serializeSequenceType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
|
|
}
|
|
else if (mapperType.match(/^Dictionary$/i) !== null) {
|
|
payload = serializeDictionaryType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
|
|
}
|
|
else if (mapperType.match(/^Composite$/i) !== null) {
|
|
payload = serializeCompositeType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions);
|
|
}
|
|
}
|
|
return payload;
|
|
}
|
|
/**
|
|
* Deserialize the given object based on its metadata defined in the mapper
|
|
*
|
|
* @param mapper - The mapper which defines the metadata of the serializable object
|
|
* @param responseBody - A valid Javascript entity to be deserialized
|
|
* @param objectName - Name of the deserialized object
|
|
* @param options - Controls behavior of XML parser and builder.
|
|
* @returns A valid deserialized Javascript object
|
|
*/
|
|
deserialize(mapper, responseBody, objectName, options = {}) {
|
|
var _a, _b, _c;
|
|
const updatedOptions = {
|
|
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
|
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
|
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
|
};
|
|
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;
|
|
}
|
|
let payload;
|
|
const mapperType = mapper.type.name;
|
|
if (!objectName) {
|
|
objectName = mapper.serializedName;
|
|
}
|
|
if (mapperType.match(/^Composite$/i) !== null) {
|
|
payload = deserializeCompositeType(this, mapper, responseBody, objectName, updatedOptions);
|
|
}
|
|
else {
|
|
if (this.isXML) {
|
|
const xmlCharKey = updatedOptions.xmlCharKey;
|
|
const castResponseBody = responseBody;
|
|
/**
|
|
* If the mapper specifies this as a non-composite type value but the responseBody contains
|
|
* both header ("$" i.e., XML_ATTRKEY) and body ("#" i.e., XML_CHARKEY) properties,
|
|
* then just reduce the responseBody value to the body ("#" i.e., XML_CHARKEY) property.
|
|
*/
|
|
if (castResponseBody[XML_ATTRKEY] != undefined &&
|
|
castResponseBody[xmlCharKey] != undefined) {
|
|
responseBody = castResponseBody[xmlCharKey];
|
|
}
|
|
}
|
|
if (mapperType.match(/^Number$/i) !== null) {
|
|
payload = parseFloat(responseBody);
|
|
if (isNaN(payload)) {
|
|
payload = responseBody;
|
|
}
|
|
}
|
|
else if (mapperType.match(/^Boolean$/i) !== null) {
|
|
if (responseBody === "true") {
|
|
payload = true;
|
|
}
|
|
else if (responseBody === "false") {
|
|
payload = false;
|
|
}
|
|
else {
|
|
payload = responseBody;
|
|
}
|
|
}
|
|
else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/i) !== null) {
|
|
payload = responseBody;
|
|
}
|
|
else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/i) !== null) {
|
|
payload = new Date(responseBody);
|
|
}
|
|
else if (mapperType.match(/^UnixTime$/i) !== null) {
|
|
payload = unixTimeToDate(responseBody);
|
|
}
|
|
else if (mapperType.match(/^ByteArray$/i) !== null) {
|
|
payload = decodeString(responseBody);
|
|
}
|
|
else if (mapperType.match(/^Base64Url$/i) !== null) {
|
|
payload = base64UrlToByteArray(responseBody);
|
|
}
|
|
else if (mapperType.match(/^Sequence$/i) !== null) {
|
|
payload = deserializeSequenceType(this, mapper, responseBody, objectName, updatedOptions);
|
|
}
|
|
else if (mapperType.match(/^Dictionary$/i) !== null) {
|
|
payload = deserializeDictionaryType(this, mapper, responseBody, objectName, updatedOptions);
|
|
}
|
|
}
|
|
if (mapper.isConstant) {
|
|
payload = mapper.defaultValue;
|
|
}
|
|
return payload;
|
|
}
|
|
}
|
|
function trimEnd(str, ch) {
|
|
let len = str.length;
|
|
while (len - 1 >= 0 && str[len - 1] === ch) {
|
|
--len;
|
|
}
|
|
return str.substr(0, len);
|
|
}
|
|
function bufferToBase64Url(buffer) {
|
|
if (!buffer) {
|
|
return undefined;
|
|
}
|
|
if (!(buffer instanceof Uint8Array)) {
|
|
throw new Error(`Please provide an input of type Uint8Array for converting to Base64Url.`);
|
|
}
|
|
// Uint8Array to Base64.
|
|
const str = encodeByteArray(buffer);
|
|
// Base64 to Base64Url.
|
|
return trimEnd(str, "=")
|
|
.replace(/\+/g, "-")
|
|
.replace(/\//g, "_");
|
|
}
|
|
function base64UrlToByteArray(str) {
|
|
if (!str) {
|
|
return undefined;
|
|
}
|
|
if (str && typeof str.valueOf() !== "string") {
|
|
throw new Error("Please provide an input of type string for converting to Uint8Array");
|
|
}
|
|
// Base64Url to Base64.
|
|
str = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
// Base64 to Uint8Array.
|
|
return decodeString(str);
|
|
}
|
|
function splitSerializeName(prop) {
|
|
const classes = [];
|
|
let partialclass = "";
|
|
if (prop) {
|
|
const subwords = prop.split(".");
|
|
for (const item of subwords) {
|
|
if (item.charAt(item.length - 1) === "\\") {
|
|
partialclass += item.substr(0, item.length - 1) + ".";
|
|
}
|
|
else {
|
|
partialclass += item;
|
|
classes.push(partialclass);
|
|
partialclass = "";
|
|
}
|
|
}
|
|
}
|
|
return classes;
|
|
}
|
|
function dateToUnixTime(d) {
|
|
if (!d) {
|
|
return undefined;
|
|
}
|
|
if (typeof d.valueOf() === "string") {
|
|
d = new Date(d);
|
|
}
|
|
return Math.floor(d.getTime() / 1000);
|
|
}
|
|
function unixTimeToDate(n) {
|
|
if (!n) {
|
|
return undefined;
|
|
}
|
|
return new Date(n * 1000);
|
|
}
|
|
function serializeBasicTypes(typeName, objectName, value) {
|
|
if (value !== null && value !== undefined) {
|
|
if (typeName.match(/^Number$/i) !== null) {
|
|
if (typeof value !== "number") {
|
|
throw new Error(`${objectName} with value ${value} must be of type number.`);
|
|
}
|
|
}
|
|
else if (typeName.match(/^String$/i) !== null) {
|
|
if (typeof value.valueOf() !== "string") {
|
|
throw new Error(`${objectName} with value "${value}" must be of type string.`);
|
|
}
|
|
}
|
|
else if (typeName.match(/^Uuid$/i) !== null) {
|
|
if (!(typeof value.valueOf() === "string" && isValidUuid(value))) {
|
|
throw new Error(`${objectName} with value "${value}" must be of type string and a valid uuid.`);
|
|
}
|
|
}
|
|
else if (typeName.match(/^Boolean$/i) !== null) {
|
|
if (typeof value !== "boolean") {
|
|
throw new Error(`${objectName} with value ${value} must be of type boolean.`);
|
|
}
|
|
}
|
|
else if (typeName.match(/^Stream$/i) !== null) {
|
|
const objectType = typeof value;
|
|
if (objectType !== "string" &&
|
|
objectType !== "function" &&
|
|
!(value instanceof ArrayBuffer) &&
|
|
!ArrayBuffer.isView(value) &&
|
|
!((typeof Blob === "function" || typeof Blob === "object") && 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.`);
|
|
}
|
|
const isPresent = allowedValues.some((item) => {
|
|
if (typeof item.valueOf() === "string") {
|
|
return item.toLowerCase() === value.toLowerCase();
|
|
}
|
|
return item === value;
|
|
});
|
|
if (!isPresent) {
|
|
throw new Error(`${value} is not a valid value for ${objectName}. The valid values are: ${JSON.stringify(allowedValues)}.`);
|
|
}
|
|
return value;
|
|
}
|
|
function serializeByteArrayType(objectName, value) {
|
|
let 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) {
|
|
let 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, isXml, options) {
|
|
if (!Array.isArray(object)) {
|
|
throw new Error(`${objectName} must be of type Array.`);
|
|
}
|
|
const 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}.`);
|
|
}
|
|
const tempArray = [];
|
|
for (let i = 0; i < object.length; i++) {
|
|
const serializedValue = serializer.serialize(elementType, object[i], objectName, options);
|
|
if (isXml && elementType.xmlNamespace) {
|
|
const xmlnsKey = elementType.xmlNamespacePrefix
|
|
? `xmlns:${elementType.xmlNamespacePrefix}`
|
|
: "xmlns";
|
|
if (elementType.type.name === "Composite") {
|
|
tempArray[i] = Object.assign({}, serializedValue);
|
|
tempArray[i][XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace };
|
|
}
|
|
else {
|
|
tempArray[i] = {};
|
|
tempArray[i][options.xmlCharKey] = serializedValue;
|
|
tempArray[i][XML_ATTRKEY] = { [xmlnsKey]: elementType.xmlNamespace };
|
|
}
|
|
}
|
|
else {
|
|
tempArray[i] = serializedValue;
|
|
}
|
|
}
|
|
return tempArray;
|
|
}
|
|
function serializeDictionaryType(serializer, mapper, object, objectName, isXml, options) {
|
|
if (typeof object !== "object") {
|
|
throw new Error(`${objectName} must be of type object.`);
|
|
}
|
|
const valueType = mapper.type.value;
|
|
if (!valueType || typeof valueType !== "object") {
|
|
throw new Error(`"value" metadata for a Dictionary must be defined in the ` +
|
|
`mapper and it must of type "object" in ${objectName}.`);
|
|
}
|
|
const tempDictionary = {};
|
|
for (const key of Object.keys(object)) {
|
|
const serializedValue = serializer.serialize(valueType, object[key], objectName, options);
|
|
// If the element needs an XML namespace we need to add it within the $ property
|
|
tempDictionary[key] = getXmlObjectValue(valueType, serializedValue, isXml, options);
|
|
}
|
|
// Add the namespace to the root element if needed
|
|
if (isXml && mapper.xmlNamespace) {
|
|
const xmlnsKey = mapper.xmlNamespacePrefix ? `xmlns:${mapper.xmlNamespacePrefix}` : "xmlns";
|
|
const result = tempDictionary;
|
|
result[XML_ATTRKEY] = { [xmlnsKey]: mapper.xmlNamespace };
|
|
return result;
|
|
}
|
|
return tempDictionary;
|
|
}
|
|
/**
|
|
* Resolves the additionalProperties property from a referenced mapper
|
|
* @param serializer - The serializer containing the entire set of mappers
|
|
* @param mapper - The composite mapper to resolve
|
|
* @param objectName - Name of the object being serialized
|
|
*/
|
|
function resolveAdditionalProperties(serializer, mapper, objectName) {
|
|
const additionalProperties = mapper.type.additionalProperties;
|
|
if (!additionalProperties && mapper.type.className) {
|
|
const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);
|
|
return modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.additionalProperties;
|
|
}
|
|
return additionalProperties;
|
|
}
|
|
/**
|
|
* Finds the mapper referenced by className
|
|
* @param serializer - The serializer containing the entire set of mappers
|
|
* @param mapper - The composite mapper to resolve
|
|
* @param objectName - Name of the object being serialized
|
|
*/
|
|
function resolveReferencedMapper(serializer, mapper, objectName) {
|
|
const className = mapper.type.className;
|
|
if (!className) {
|
|
throw new Error(`Class name for model "${objectName}" is not provided in the mapper "${JSON.stringify(mapper, undefined, 2)}".`);
|
|
}
|
|
return serializer.modelMappers[className];
|
|
}
|
|
/**
|
|
* Resolves a composite mapper's modelProperties.
|
|
* @param serializer - The serializer containing the entire set of mappers
|
|
* @param mapper - The composite mapper to resolve
|
|
*/
|
|
function resolveModelProperties(serializer, mapper, objectName) {
|
|
let modelProps = mapper.type.modelProperties;
|
|
if (!modelProps) {
|
|
const modelMapper = resolveReferencedMapper(serializer, mapper, objectName);
|
|
if (!modelMapper) {
|
|
throw new Error(`mapper() cannot be null or undefined for model "${mapper.type.className}".`);
|
|
}
|
|
modelProps = modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.modelProperties;
|
|
if (!modelProps) {
|
|
throw new Error(`modelProperties cannot be null or undefined in the ` +
|
|
`mapper "${JSON.stringify(modelMapper)}" of type "${mapper.type.className}" for object "${objectName}".`);
|
|
}
|
|
}
|
|
return modelProps;
|
|
}
|
|
function serializeCompositeType(serializer, mapper, object, objectName, isXml, options) {
|
|
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
|
|
mapper = getPolymorphicMapper(serializer, mapper, object, "clientName");
|
|
}
|
|
if (object != undefined) {
|
|
const payload = {};
|
|
const modelProps = resolveModelProperties(serializer, mapper, objectName);
|
|
for (const key of Object.keys(modelProps)) {
|
|
const propertyMapper = modelProps[key];
|
|
if (propertyMapper.readOnly) {
|
|
continue;
|
|
}
|
|
let propName;
|
|
let parentObject = payload;
|
|
if (serializer.isXML) {
|
|
if (propertyMapper.xmlIsWrapped) {
|
|
propName = propertyMapper.xmlName;
|
|
}
|
|
else {
|
|
propName = propertyMapper.xmlElementName || propertyMapper.xmlName;
|
|
}
|
|
}
|
|
else {
|
|
const paths = splitSerializeName(propertyMapper.serializedName);
|
|
propName = paths.pop();
|
|
for (const pathName of paths) {
|
|
const childObject = parentObject[pathName];
|
|
if (childObject == undefined &&
|
|
(object[key] != undefined || propertyMapper.defaultValue !== undefined)) {
|
|
parentObject[pathName] = {};
|
|
}
|
|
parentObject = parentObject[pathName];
|
|
}
|
|
}
|
|
if (parentObject != undefined) {
|
|
if (isXml && mapper.xmlNamespace) {
|
|
const xmlnsKey = mapper.xmlNamespacePrefix
|
|
? `xmlns:${mapper.xmlNamespacePrefix}`
|
|
: "xmlns";
|
|
parentObject[XML_ATTRKEY] = Object.assign(Object.assign({}, parentObject[XML_ATTRKEY]), { [xmlnsKey]: mapper.xmlNamespace });
|
|
}
|
|
const propertyObjectName = propertyMapper.serializedName !== ""
|
|
? objectName + "." + propertyMapper.serializedName
|
|
: objectName;
|
|
let toSerialize = object[key];
|
|
const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
|
|
if (polymorphicDiscriminator &&
|
|
polymorphicDiscriminator.clientName === key &&
|
|
toSerialize == undefined) {
|
|
toSerialize = mapper.serializedName;
|
|
}
|
|
const serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName, options);
|
|
if (serializedValue !== undefined && propName != undefined) {
|
|
const value = getXmlObjectValue(propertyMapper, serializedValue, isXml, options);
|
|
if (isXml && propertyMapper.xmlIsAttribute) {
|
|
// XML_ATTRKEY, i.e., $ is the key attributes are kept under in xml2js.
|
|
// This keeps things simple while preventing name collision
|
|
// with names in user documents.
|
|
parentObject[XML_ATTRKEY] = parentObject[XML_ATTRKEY] || {};
|
|
parentObject[XML_ATTRKEY][propName] = serializedValue;
|
|
}
|
|
else if (isXml && propertyMapper.xmlIsWrapped) {
|
|
parentObject[propName] = { [propertyMapper.xmlElementName]: value };
|
|
}
|
|
else {
|
|
parentObject[propName] = value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const additionalPropertiesMapper = resolveAdditionalProperties(serializer, mapper, objectName);
|
|
if (additionalPropertiesMapper) {
|
|
const propNames = Object.keys(modelProps);
|
|
for (const clientPropName in object) {
|
|
const isAdditionalProperty = propNames.every((pn) => pn !== clientPropName);
|
|
if (isAdditionalProperty) {
|
|
payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]', options);
|
|
}
|
|
}
|
|
}
|
|
return payload;
|
|
}
|
|
return object;
|
|
}
|
|
function getXmlObjectValue(propertyMapper, serializedValue, isXml, options) {
|
|
if (!isXml || !propertyMapper.xmlNamespace) {
|
|
return serializedValue;
|
|
}
|
|
const xmlnsKey = propertyMapper.xmlNamespacePrefix
|
|
? `xmlns:${propertyMapper.xmlNamespacePrefix}`
|
|
: "xmlns";
|
|
const xmlNamespace = { [xmlnsKey]: propertyMapper.xmlNamespace };
|
|
if (["Composite"].includes(propertyMapper.type.name)) {
|
|
if (serializedValue[XML_ATTRKEY]) {
|
|
return serializedValue;
|
|
}
|
|
else {
|
|
const result = Object.assign({}, serializedValue);
|
|
result[XML_ATTRKEY] = xmlNamespace;
|
|
return result;
|
|
}
|
|
}
|
|
const result = {};
|
|
result[options.xmlCharKey] = serializedValue;
|
|
result[XML_ATTRKEY] = xmlNamespace;
|
|
return result;
|
|
}
|
|
function isSpecialXmlProperty(propertyName, options) {
|
|
return [XML_ATTRKEY, options.xmlCharKey].includes(propertyName);
|
|
}
|
|
function deserializeCompositeType(serializer, mapper, responseBody, objectName, options) {
|
|
var _a;
|
|
if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {
|
|
mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName");
|
|
}
|
|
const modelProps = resolveModelProperties(serializer, mapper, objectName);
|
|
let instance = {};
|
|
const handledPropertyNames = [];
|
|
for (const key of Object.keys(modelProps)) {
|
|
const propertyMapper = modelProps[key];
|
|
const paths = splitSerializeName(modelProps[key].serializedName);
|
|
handledPropertyNames.push(paths[0]);
|
|
const { serializedName, xmlName, xmlElementName } = propertyMapper;
|
|
let propertyObjectName = objectName;
|
|
if (serializedName !== "" && serializedName !== undefined) {
|
|
propertyObjectName = objectName + "." + serializedName;
|
|
}
|
|
const headerCollectionPrefix = propertyMapper.headerCollectionPrefix;
|
|
if (headerCollectionPrefix) {
|
|
const dictionary = {};
|
|
for (const headerKey of Object.keys(responseBody)) {
|
|
if (headerKey.startsWith(headerCollectionPrefix)) {
|
|
dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName, options);
|
|
}
|
|
handledPropertyNames.push(headerKey);
|
|
}
|
|
instance[key] = dictionary;
|
|
}
|
|
else if (serializer.isXML) {
|
|
if (propertyMapper.xmlIsAttribute && responseBody[XML_ATTRKEY]) {
|
|
instance[key] = serializer.deserialize(propertyMapper, responseBody[XML_ATTRKEY][xmlName], propertyObjectName, options);
|
|
}
|
|
else {
|
|
const propertyName = xmlElementName || xmlName || serializedName;
|
|
if (propertyMapper.xmlIsWrapped) {
|
|
/* a list of <xmlElementName> wrapped by <xmlName>
|
|
For the xml example below
|
|
<Cors>
|
|
<CorsRule>...</CorsRule>
|
|
<CorsRule>...</CorsRule>
|
|
</Cors>
|
|
the responseBody has
|
|
{
|
|
Cors: {
|
|
CorsRule: [{...}, {...}]
|
|
}
|
|
}
|
|
xmlName is "Cors" and xmlElementName is"CorsRule".
|
|
*/
|
|
const wrapped = responseBody[xmlName];
|
|
const elementList = (_a = wrapped === null || wrapped === void 0 ? void 0 : wrapped[xmlElementName]) !== null && _a !== void 0 ? _a : [];
|
|
instance[key] = serializer.deserialize(propertyMapper, elementList, propertyObjectName, options);
|
|
}
|
|
else {
|
|
const property = responseBody[propertyName];
|
|
instance[key] = serializer.deserialize(propertyMapper, property, propertyObjectName, options);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// deserialize the property if it is present in the provided responseBody instance
|
|
let propertyInstance;
|
|
let res = responseBody;
|
|
// traversing the object step by step.
|
|
for (const item of paths) {
|
|
if (!res)
|
|
break;
|
|
res = res[item];
|
|
}
|
|
propertyInstance = res;
|
|
const polymorphicDiscriminator = mapper.type.polymorphicDiscriminator;
|
|
// checking that the model property name (key)(ex: "fishtype") and the
|
|
// clientName of the polymorphicDiscriminator {metadata} (ex: "fishtype")
|
|
// instead of the serializedName of the polymorphicDiscriminator (ex: "fish.type")
|
|
// is a better approach. The generator is not consistent with escaping '\.' in the
|
|
// serializedName of the property (ex: "fish\.type") that is marked as polymorphic discriminator
|
|
// and the serializedName of the metadata polymorphicDiscriminator (ex: "fish.type"). However,
|
|
// the clientName transformation of the polymorphicDiscriminator (ex: "fishtype") and
|
|
// the transformation of model property name (ex: "fishtype") is done consistently.
|
|
// Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator.
|
|
if (polymorphicDiscriminator &&
|
|
key === polymorphicDiscriminator.clientName &&
|
|
propertyInstance == undefined) {
|
|
propertyInstance = mapper.serializedName;
|
|
}
|
|
let serializedValue;
|
|
// paging
|
|
if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") {
|
|
propertyInstance = responseBody[key];
|
|
const arrayInstance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);
|
|
// Copy over any properties that have already been added into the instance, where they do
|
|
// not exist on the newly de-serialized array
|
|
for (const [k, v] of Object.entries(instance)) {
|
|
if (!Object.prototype.hasOwnProperty.call(arrayInstance, k)) {
|
|
arrayInstance[k] = v;
|
|
}
|
|
}
|
|
instance = arrayInstance;
|
|
}
|
|
else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) {
|
|
serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options);
|
|
instance[key] = serializedValue;
|
|
}
|
|
}
|
|
}
|
|
const additionalPropertiesMapper = mapper.type.additionalProperties;
|
|
if (additionalPropertiesMapper) {
|
|
const isAdditionalProperty = (responsePropName) => {
|
|
for (const clientPropName in modelProps) {
|
|
const paths = splitSerializeName(modelProps[clientPropName].serializedName);
|
|
if (paths[0] === responsePropName) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
for (const responsePropName in responseBody) {
|
|
if (isAdditionalProperty(responsePropName)) {
|
|
instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]', options);
|
|
}
|
|
}
|
|
}
|
|
else if (responseBody) {
|
|
for (const key of Object.keys(responseBody)) {
|
|
if (instance[key] === undefined &&
|
|
!handledPropertyNames.includes(key) &&
|
|
!isSpecialXmlProperty(key, options)) {
|
|
instance[key] = responseBody[key];
|
|
}
|
|
}
|
|
}
|
|
return instance;
|
|
}
|
|
function deserializeDictionaryType(serializer, mapper, responseBody, objectName, options) {
|
|
const value = mapper.type.value;
|
|
if (!value || typeof value !== "object") {
|
|
throw new Error(`"value" metadata for a Dictionary must be defined in the ` +
|
|
`mapper and it must of type "object" in ${objectName}`);
|
|
}
|
|
if (responseBody) {
|
|
const tempDictionary = {};
|
|
for (const key of Object.keys(responseBody)) {
|
|
tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName, options);
|
|
}
|
|
return tempDictionary;
|
|
}
|
|
return responseBody;
|
|
}
|
|
function deserializeSequenceType(serializer, mapper, responseBody, objectName, options) {
|
|
const 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];
|
|
}
|
|
const tempArray = [];
|
|
for (let i = 0; i < responseBody.length; i++) {
|
|
tempArray[i] = serializer.deserialize(element, responseBody[i], `${objectName}[${i}]`, options);
|
|
}
|
|
return tempArray;
|
|
}
|
|
return responseBody;
|
|
}
|
|
function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) {
|
|
const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);
|
|
if (polymorphicDiscriminator) {
|
|
const discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];
|
|
if (discriminatorName != undefined) {
|
|
const discriminatorValue = object[discriminatorName];
|
|
if (discriminatorValue != undefined) {
|
|
const typeName = mapper.type.uberParent || mapper.type.className;
|
|
const indexDiscriminator = discriminatorValue === typeName
|
|
? discriminatorValue
|
|
: typeName + "." + discriminatorValue;
|
|
const 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) {
|
|
const castToSerialize = 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)) {
|
|
const array = [];
|
|
for (let i = 0; i < toSerialize.length; i++) {
|
|
array.push(serializeObject(toSerialize[i]));
|
|
}
|
|
return array;
|
|
}
|
|
else if (typeof toSerialize === "object") {
|
|
const dictionary = {};
|
|
for (const property in toSerialize) {
|
|
dictionary[property] = serializeObject(castToSerialize[property]);
|
|
}
|
|
return dictionary;
|
|
}
|
|
return toSerialize;
|
|
}
|
|
/**
|
|
* Utility function to create a K:V from a list of strings
|
|
*/
|
|
function strEnum(o) {
|
|
const result = {};
|
|
for (const key of o) {
|
|
result[key] = key;
|
|
}
|
|
return result;
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
const 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 (object && typeof object === "object") {
|
|
const castObject = object;
|
|
if (typeof castObject.url === "string" &&
|
|
typeof castObject.method === "string" &&
|
|
typeof castObject.headers === "object" &&
|
|
isHttpHeadersLike(castObject.headers) &&
|
|
typeof castObject.validateRequestProperties === "function" &&
|
|
typeof castObject.prepare === "function" &&
|
|
typeof castObject.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.
|
|
*/
|
|
class WebResource {
|
|
constructor(url, method, body, query, headers, streamResponseBody, withCredentials, abortSignal, timeout, onUploadProgress, onDownloadProgress, proxySettings, keepAlive, decompressResponse, streamResponseStatusCodes) {
|
|
this.streamResponseBody = streamResponseBody;
|
|
this.streamResponseStatusCodes = streamResponseStatusCodes;
|
|
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.
|
|
*/
|
|
validateRequestProperties() {
|
|
if (!this.method) {
|
|
throw new Error("WebResource.method is required.");
|
|
}
|
|
if (!this.url) {
|
|
throw new Error("WebResource.url is required.");
|
|
}
|
|
}
|
|
/**
|
|
* Prepares the request.
|
|
* @param options - Options to provide for preparing the request.
|
|
* @returns Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.
|
|
*/
|
|
prepare(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) {
|
|
const 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) {
|
|
const { pathTemplate, pathParameters } = options;
|
|
if (typeof pathTemplate !== "string") {
|
|
throw new Error('options.pathTemplate must be of type "string".');
|
|
}
|
|
if (!options.baseUrl) {
|
|
options.baseUrl = "https://management.azure.com";
|
|
}
|
|
const baseUrl = options.baseUrl;
|
|
let url = baseUrl +
|
|
(baseUrl.endsWith("/") ? "" : "/") +
|
|
(pathTemplate.startsWith("/") ? pathTemplate.slice(1) : pathTemplate);
|
|
const segments = url.match(/({[\w-]*\s*[\w-]*})/gi);
|
|
if (segments && segments.length) {
|
|
if (!pathParameters) {
|
|
throw new Error(`pathTemplate: ${pathTemplate} has been provided. Hence, options.pathParameters must also be provided.`);
|
|
}
|
|
segments.forEach(function (item) {
|
|
const pathParamName = item.slice(1, -1);
|
|
const pathParam = pathParameters[pathParamName];
|
|
if (pathParam === null ||
|
|
pathParam === undefined ||
|
|
!(typeof pathParam === "string" || typeof pathParam === "object")) {
|
|
const stringifiedPathParameters = JSON.stringify(pathParameters, undefined, 2);
|
|
throw new Error(`pathTemplate: ${pathTemplate} 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 = url.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 = url.replace(item, pathParam.value);
|
|
}
|
|
else {
|
|
url = url.replace(item, encodeURIComponent(pathParam.value));
|
|
}
|
|
}
|
|
});
|
|
}
|
|
this.url = url;
|
|
}
|
|
// append query parameters to the url if they are provided. They can be provided with pathTemplate or url option.
|
|
if (options.queryParameters) {
|
|
const 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
|
|
const queryParams = [];
|
|
// We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest().
|
|
this.query = {};
|
|
for (const queryParamName in queryParameters) {
|
|
const 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) {
|
|
const headers = options.headers;
|
|
for (const headerName of Object.keys(options.headers)) {
|
|
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 explicitly
|
|
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;
|
|
}
|
|
if (options.tracingContext) {
|
|
this.tracingContext = options.tracingContext;
|
|
}
|
|
this.abortSignal = options.abortSignal;
|
|
this.onDownloadProgress = options.onDownloadProgress;
|
|
this.onUploadProgress = options.onUploadProgress;
|
|
return this;
|
|
}
|
|
/**
|
|
* Clone this WebResource HTTP request object.
|
|
* @returns The clone of this WebResource HTTP request object.
|
|
*/
|
|
clone() {
|
|
const 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, this.streamResponseStatusCodes);
|
|
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;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const custom = util.inspect.custom;
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* A class that handles the query portion of a URLBuilder.
|
|
*/
|
|
class URLQuery {
|
|
constructor() {
|
|
this._rawQuery = {};
|
|
}
|
|
/**
|
|
* Get whether or not there any query parameters in this URLQuery.
|
|
*/
|
|
any() {
|
|
return Object.keys(this._rawQuery).length > 0;
|
|
}
|
|
/**
|
|
* Get the keys of the query string.
|
|
*/
|
|
keys() {
|
|
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.
|
|
*/
|
|
set(parameterName, parameterValue) {
|
|
const caseParameterValue = parameterValue;
|
|
if (parameterName) {
|
|
if (caseParameterValue !== undefined && caseParameterValue !== null) {
|
|
const newValue = Array.isArray(caseParameterValue)
|
|
? caseParameterValue
|
|
: caseParameterValue.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.
|
|
*/
|
|
get(parameterName) {
|
|
return parameterName ? this._rawQuery[parameterName] : undefined;
|
|
}
|
|
/**
|
|
* Get the string representation of this query. The return value will not start with a "?".
|
|
*/
|
|
toString() {
|
|
let result = "";
|
|
for (const parameterName in this._rawQuery) {
|
|
if (result) {
|
|
result += "&";
|
|
}
|
|
const parameterValue = this._rawQuery[parameterName];
|
|
if (Array.isArray(parameterValue)) {
|
|
const parameterStrings = [];
|
|
for (const parameterValueElement of parameterValue) {
|
|
parameterStrings.push(`${parameterName}=${parameterValueElement}`);
|
|
}
|
|
result += parameterStrings.join("&");
|
|
}
|
|
else {
|
|
result += `${parameterName}=${parameterValue}`;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
/**
|
|
* Parse a URLQuery from the provided text.
|
|
*/
|
|
static parse(text) {
|
|
const result = new URLQuery();
|
|
if (text) {
|
|
if (text.startsWith("?")) {
|
|
text = text.substring(1);
|
|
}
|
|
let currentState = "ParameterName";
|
|
let parameterName = "";
|
|
let parameterValue = "";
|
|
for (let i = 0; i < text.length; ++i) {
|
|
const 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 "&":
|
|
result.set(parameterName, parameterValue);
|
|
parameterName = "";
|
|
parameterValue = "";
|
|
currentState = "ParameterName";
|
|
break;
|
|
default:
|
|
parameterValue += currentCharacter;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
throw new Error("Unrecognized URLQuery parse state: " + currentState);
|
|
}
|
|
}
|
|
if (currentState === "ParameterValue") {
|
|
result.set(parameterName, parameterValue);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
/**
|
|
* A class that handles creating, modifying, and parsing URLs.
|
|
*/
|
|
class 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.
|
|
*/
|
|
setScheme(scheme) {
|
|
if (!scheme) {
|
|
this._scheme = undefined;
|
|
}
|
|
else {
|
|
this.set(scheme, "SCHEME");
|
|
}
|
|
}
|
|
/**
|
|
* Get the scheme that has been set in this URL.
|
|
*/
|
|
getScheme() {
|
|
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.
|
|
*/
|
|
setHost(host) {
|
|
if (!host) {
|
|
this._host = undefined;
|
|
}
|
|
else {
|
|
this.set(host, "SCHEME_OR_HOST");
|
|
}
|
|
}
|
|
/**
|
|
* Get the host that has been set in this URL.
|
|
*/
|
|
getHost() {
|
|
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.
|
|
*/
|
|
setPort(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.
|
|
*/
|
|
getPort() {
|
|
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.
|
|
*/
|
|
setPath(path) {
|
|
if (!path) {
|
|
this._path = undefined;
|
|
}
|
|
else {
|
|
const schemeIndex = path.indexOf("://");
|
|
if (schemeIndex !== -1) {
|
|
const 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.
|
|
*/
|
|
appendPath(path) {
|
|
if (path) {
|
|
let 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.
|
|
*/
|
|
getPath() {
|
|
return this._path;
|
|
}
|
|
/**
|
|
* Set the query in this URL.
|
|
*/
|
|
setQuery(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.
|
|
*/
|
|
setQueryParameter(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.
|
|
*/
|
|
getQueryParameterValue(queryParameterName) {
|
|
return this._query ? this._query.get(queryParameterName) : undefined;
|
|
}
|
|
/**
|
|
* Get the query in this URL.
|
|
*/
|
|
getQuery() {
|
|
return this._query ? this._query.toString() : undefined;
|
|
}
|
|
/**
|
|
* Set the parts of this URL by parsing the provided text using the provided startState.
|
|
*/
|
|
set(text, startState) {
|
|
const tokenizer = new URLTokenizer(text, startState);
|
|
while (tokenizer.next()) {
|
|
const token = tokenizer.current();
|
|
let tokenPath;
|
|
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}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
toString() {
|
|
let 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.
|
|
*/
|
|
replaceAll(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));
|
|
}
|
|
}
|
|
static parse(text) {
|
|
const result = new URLBuilder();
|
|
result.set(text, "SCHEME_OR_HOST");
|
|
return result;
|
|
}
|
|
}
|
|
class URLToken {
|
|
constructor(text, type) {
|
|
this.text = text;
|
|
this.type = type;
|
|
}
|
|
static scheme(text) {
|
|
return new URLToken(text, "SCHEME");
|
|
}
|
|
static host(text) {
|
|
return new URLToken(text, "HOST");
|
|
}
|
|
static port(text) {
|
|
return new URLToken(text, "PORT");
|
|
}
|
|
static path(text) {
|
|
return new URLToken(text, "PATH");
|
|
}
|
|
static query(text) {
|
|
return new URLToken(text, "QUERY");
|
|
}
|
|
}
|
|
/**
|
|
* Get whether or not the provided character (single character string) is an alphanumeric (letter or
|
|
* digit) character.
|
|
*/
|
|
function isAlphaNumericCharacter(character) {
|
|
const 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.
|
|
*/
|
|
class URLTokenizer {
|
|
constructor(_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.
|
|
*/
|
|
current() {
|
|
return this._currentToken;
|
|
}
|
|
/**
|
|
* Advance to the next URLToken and return whether or not a URLToken was found.
|
|
*/
|
|
next() {
|
|
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;
|
|
}
|
|
}
|
|
/**
|
|
* Read the remaining characters from this Tokenizer's character stream.
|
|
*/
|
|
function readRemaining(tokenizer) {
|
|
let 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) {
|
|
let 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) {
|
|
let result = "";
|
|
while (hasCurrentCharacter(tokenizer)) {
|
|
const 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, (character) => 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, ...terminatingCharacters) {
|
|
return readWhile(tokenizer, (character) => terminatingCharacters.indexOf(character) === -1);
|
|
}
|
|
function nextScheme(tokenizer) {
|
|
const scheme = readWhileLetterOrDigit(tokenizer);
|
|
tokenizer._currentToken = URLToken.scheme(scheme);
|
|
if (!hasCurrentCharacter(tokenizer)) {
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
else {
|
|
tokenizer._currentState = "HOST";
|
|
}
|
|
}
|
|
function nextSchemeOrHost(tokenizer) {
|
|
const 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);
|
|
}
|
|
const 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);
|
|
}
|
|
const 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) {
|
|
const 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);
|
|
}
|
|
const query = readRemaining(tokenizer);
|
|
tokenizer._currentToken = URLToken.query(query);
|
|
tokenizer._currentState = "DONE";
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const RedactedString = "REDACTED";
|
|
const defaultAllowedHeaderNames = [
|
|
"x-ms-client-request-id",
|
|
"x-ms-return-client-request-id",
|
|
"x-ms-useragent",
|
|
"x-ms-correlation-request-id",
|
|
"x-ms-request-id",
|
|
"client-request-id",
|
|
"ms-cv",
|
|
"return-client-request-id",
|
|
"traceparent",
|
|
"Access-Control-Allow-Credentials",
|
|
"Access-Control-Allow-Headers",
|
|
"Access-Control-Allow-Methods",
|
|
"Access-Control-Allow-Origin",
|
|
"Access-Control-Expose-Headers",
|
|
"Access-Control-Max-Age",
|
|
"Access-Control-Request-Headers",
|
|
"Access-Control-Request-Method",
|
|
"Origin",
|
|
"Accept",
|
|
"Accept-Encoding",
|
|
"Cache-Control",
|
|
"Connection",
|
|
"Content-Length",
|
|
"Content-Type",
|
|
"Date",
|
|
"ETag",
|
|
"Expires",
|
|
"If-Match",
|
|
"If-Modified-Since",
|
|
"If-None-Match",
|
|
"If-Unmodified-Since",
|
|
"Last-Modified",
|
|
"Pragma",
|
|
"Request-Id",
|
|
"Retry-After",
|
|
"Server",
|
|
"Transfer-Encoding",
|
|
"User-Agent"
|
|
];
|
|
const defaultAllowedQueryParameters = ["api-version"];
|
|
class Sanitizer {
|
|
constructor({ allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
|
|
allowedHeaderNames = Array.isArray(allowedHeaderNames)
|
|
? defaultAllowedHeaderNames.concat(allowedHeaderNames)
|
|
: defaultAllowedHeaderNames;
|
|
allowedQueryParameters = Array.isArray(allowedQueryParameters)
|
|
? defaultAllowedQueryParameters.concat(allowedQueryParameters)
|
|
: defaultAllowedQueryParameters;
|
|
this.allowedHeaderNames = new Set(allowedHeaderNames.map((n) => n.toLowerCase()));
|
|
this.allowedQueryParameters = new Set(allowedQueryParameters.map((p) => p.toLowerCase()));
|
|
}
|
|
sanitize(obj) {
|
|
const seen = new Set();
|
|
return JSON.stringify(obj, (key, value) => {
|
|
// Ensure Errors include their interesting non-enumerable members
|
|
if (value instanceof Error) {
|
|
return Object.assign(Object.assign({}, value), { name: value.name, message: value.message });
|
|
}
|
|
if (key === "_headersMap") {
|
|
return this.sanitizeHeaders(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;
|
|
}
|
|
else if (Array.isArray(value) || isObject(value)) {
|
|
if (seen.has(value)) {
|
|
return "[Circular]";
|
|
}
|
|
seen.add(value);
|
|
}
|
|
return value;
|
|
}, 2);
|
|
}
|
|
sanitizeHeaders(value) {
|
|
return this.sanitizeObject(value, this.allowedHeaderNames, (v, k) => v[k].value);
|
|
}
|
|
sanitizeQuery(value) {
|
|
return this.sanitizeObject(value, this.allowedQueryParameters, (v, k) => v[k]);
|
|
}
|
|
sanitizeObject(value, allowedKeys, accessor) {
|
|
if (typeof value !== "object" || value === null) {
|
|
return value;
|
|
}
|
|
const sanitized = {};
|
|
for (const k of Object.keys(value)) {
|
|
if (allowedKeys.has(k.toLowerCase())) {
|
|
sanitized[k] = accessor(value, k);
|
|
}
|
|
else {
|
|
sanitized[k] = RedactedString;
|
|
}
|
|
}
|
|
return sanitized;
|
|
}
|
|
sanitizeUrl(value) {
|
|
if (typeof value !== "string" || value === null) {
|
|
return value;
|
|
}
|
|
const urlBuilder = URLBuilder.parse(value);
|
|
const queryString = urlBuilder.getQuery();
|
|
if (!queryString) {
|
|
return value;
|
|
}
|
|
const query = URLQuery.parse(queryString);
|
|
for (const k of query.keys()) {
|
|
if (!this.allowedQueryParameters.has(k.toLowerCase())) {
|
|
query.set(k, RedactedString);
|
|
}
|
|
}
|
|
urlBuilder.setQuery(query.toString());
|
|
return urlBuilder.toString();
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const errorSanitizer = new Sanitizer();
|
|
class RestError extends Error {
|
|
constructor(message, code, statusCode, request, response) {
|
|
super(message);
|
|
this.name = "RestError";
|
|
this.code = code;
|
|
this.statusCode = statusCode;
|
|
this.request = request;
|
|
this.response = response;
|
|
Object.setPrototypeOf(this, RestError.prototype);
|
|
}
|
|
/**
|
|
* Logging method for util.inspect in Node
|
|
*/
|
|
[custom]() {
|
|
return `RestError: ${this.message} \n ${errorSanitizer.sanitize(this)}`;
|
|
}
|
|
}
|
|
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
|
|
RestError.PARSE_ERROR = "PARSE_ERROR";
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const logger = logger$1.createClientLogger("core-http");
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class ReportTransform extends stream.Transform {
|
|
constructor(progressCallback) {
|
|
super();
|
|
this.progressCallback = progressCallback;
|
|
this.loadedBytes = 0;
|
|
}
|
|
_transform(chunk, _encoding, callback) {
|
|
this.push(chunk);
|
|
this.loadedBytes += chunk.length;
|
|
this.progressCallback({ loadedBytes: this.loadedBytes });
|
|
callback(undefined);
|
|
}
|
|
}
|
|
class FetchHttpClient {
|
|
async sendRequest(httpRequest) {
|
|
var _a;
|
|
if (!httpRequest && typeof httpRequest !== "object") {
|
|
throw new Error("'httpRequest' (WebResourceLike) cannot be null or undefined and must be of type object.");
|
|
}
|
|
const abortController$1 = new abortController.AbortController();
|
|
let abortListener;
|
|
if (httpRequest.abortSignal) {
|
|
if (httpRequest.abortSignal.aborted) {
|
|
throw new abortController.AbortError("The operation was aborted.");
|
|
}
|
|
abortListener = (event) => {
|
|
if (event.type === "abort") {
|
|
abortController$1.abort();
|
|
}
|
|
};
|
|
httpRequest.abortSignal.addEventListener("abort", abortListener);
|
|
}
|
|
if (httpRequest.timeout) {
|
|
setTimeout(() => {
|
|
abortController$1.abort();
|
|
}, httpRequest.timeout);
|
|
}
|
|
if (httpRequest.formData) {
|
|
const formData = httpRequest.formData;
|
|
const requestForm = new FormData();
|
|
const appendFormValue = (key, value) => {
|
|
// value function probably returns a stream so we can provide a fresh stream on each retry
|
|
if (typeof value === "function") {
|
|
value = value();
|
|
}
|
|
if (value &&
|
|
Object.prototype.hasOwnProperty.call(value, "value") &&
|
|
Object.prototype.hasOwnProperty.call(value, "options")) {
|
|
requestForm.append(key, value.value, value.options);
|
|
}
|
|
else {
|
|
requestForm.append(key, value);
|
|
}
|
|
};
|
|
for (const formKey of Object.keys(formData)) {
|
|
const formValue = formData[formKey];
|
|
if (Array.isArray(formValue)) {
|
|
for (let j = 0; j < formValue.length; j++) {
|
|
appendFormValue(formKey, formValue[j]);
|
|
}
|
|
}
|
|
else {
|
|
appendFormValue(formKey, formValue);
|
|
}
|
|
}
|
|
httpRequest.body = requestForm;
|
|
httpRequest.formData = undefined;
|
|
const contentType = httpRequest.headers.get("Content-Type");
|
|
if (contentType && contentType.indexOf("multipart/form-data") !== -1) {
|
|
if (typeof requestForm.getBoundary === "function") {
|
|
httpRequest.headers.set("Content-Type", `multipart/form-data; boundary=${requestForm.getBoundary()}`);
|
|
}
|
|
else {
|
|
// browser will automatically apply a suitable content-type header
|
|
httpRequest.headers.remove("Content-Type");
|
|
}
|
|
}
|
|
}
|
|
let body = httpRequest.body
|
|
? typeof httpRequest.body === "function"
|
|
? httpRequest.body()
|
|
: httpRequest.body
|
|
: undefined;
|
|
if (httpRequest.onUploadProgress && httpRequest.body) {
|
|
const onUploadProgress = httpRequest.onUploadProgress;
|
|
const uploadReportStream = new ReportTransform(onUploadProgress);
|
|
if (isReadableStream(body)) {
|
|
body.pipe(uploadReportStream);
|
|
}
|
|
else {
|
|
uploadReportStream.end(body);
|
|
}
|
|
body = uploadReportStream;
|
|
}
|
|
const platformSpecificRequestInit = await this.prepareRequest(httpRequest);
|
|
const requestInit = Object.assign({ body: body, headers: httpRequest.headers.rawHeaders(), method: httpRequest.method, signal: abortController$1.signal, redirect: "manual" }, platformSpecificRequestInit);
|
|
let operationResponse;
|
|
try {
|
|
const response = await this.fetch(httpRequest.url, requestInit);
|
|
const headers = parseHeaders(response.headers);
|
|
const streaming = ((_a = httpRequest.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(response.status)) ||
|
|
httpRequest.streamResponseBody;
|
|
operationResponse = {
|
|
headers: headers,
|
|
request: httpRequest,
|
|
status: response.status,
|
|
readableStreamBody: streaming
|
|
? response.body
|
|
: undefined,
|
|
bodyAsText: !streaming ? await response.text() : undefined
|
|
};
|
|
const onDownloadProgress = httpRequest.onDownloadProgress;
|
|
if (onDownloadProgress) {
|
|
const responseBody = response.body || undefined;
|
|
if (isReadableStream(responseBody)) {
|
|
const downloadReportStream = new ReportTransform(onDownloadProgress);
|
|
responseBody.pipe(downloadReportStream);
|
|
operationResponse.readableStreamBody = downloadReportStream;
|
|
}
|
|
else {
|
|
const length = parseInt(headers.get("Content-Length")) || undefined;
|
|
if (length) {
|
|
// Calling callback for non-stream response for consistency with browser
|
|
onDownloadProgress({ loadedBytes: length });
|
|
}
|
|
}
|
|
}
|
|
await this.processRequest(operationResponse);
|
|
return operationResponse;
|
|
}
|
|
catch (error) {
|
|
const fetchError = error;
|
|
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;
|
|
}
|
|
finally {
|
|
// clean up event listener
|
|
if (httpRequest.abortSignal && abortListener) {
|
|
let uploadStreamDone = Promise.resolve();
|
|
if (isReadableStream(body)) {
|
|
uploadStreamDone = isStreamComplete(body);
|
|
}
|
|
let downloadStreamDone = Promise.resolve();
|
|
if (isReadableStream(operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse.readableStreamBody)) {
|
|
downloadStreamDone = isStreamComplete(operationResponse.readableStreamBody, abortController$1);
|
|
}
|
|
Promise.all([uploadStreamDone, downloadStreamDone])
|
|
.then(() => {
|
|
var _a;
|
|
(_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.removeEventListener("abort", abortListener);
|
|
return;
|
|
})
|
|
.catch((e) => {
|
|
logger.warning("Error when cleaning up abortListener on httpRequest", e);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function isReadableStream(body) {
|
|
return body && typeof body.pipe === "function";
|
|
}
|
|
function isStreamComplete(stream, aborter) {
|
|
return new Promise((resolve) => {
|
|
stream.once("close", () => {
|
|
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
|
|
resolve();
|
|
});
|
|
stream.once("end", resolve);
|
|
stream.once("error", resolve);
|
|
});
|
|
}
|
|
function parseHeaders(headers) {
|
|
const httpHeaders = new HttpHeaders();
|
|
headers.forEach((value, key) => {
|
|
httpHeaders.set(key, value);
|
|
});
|
|
return httpHeaders;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function createProxyAgent(requestUrl, proxySettings, headers) {
|
|
const 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.");
|
|
}
|
|
const tunnelOptions = {
|
|
proxy: {
|
|
host: host,
|
|
port: proxySettings.port,
|
|
headers: (headers && headers.rawHeaders()) || {}
|
|
}
|
|
};
|
|
if (proxySettings.username && proxySettings.password) {
|
|
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
|
|
}
|
|
else if (proxySettings.username) {
|
|
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
|
|
}
|
|
const isRequestHttps = isUrlHttps(requestUrl);
|
|
const isProxyHttps = isUrlHttps(proxySettings.host);
|
|
const proxyAgent = {
|
|
isHttps: isRequestHttps,
|
|
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
|
|
};
|
|
return proxyAgent;
|
|
}
|
|
function isUrlHttps(url) {
|
|
const 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.
|
|
function getCachedAgent(isHttps, agentCache) {
|
|
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
|
|
}
|
|
class NodeFetchHttpClient extends FetchHttpClient {
|
|
constructor() {
|
|
super(...arguments);
|
|
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
|
|
this.proxyAgentMap = new Map();
|
|
this.keepAliveAgents = {};
|
|
this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
|
|
}
|
|
getOrCreateAgent(httpRequest) {
|
|
var _a;
|
|
const 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) {
|
|
const { host, port, username, password } = httpRequest.proxySettings;
|
|
const key = `${host}:${port}:${username}:${password}`;
|
|
const proxyAgents = (_a = this.proxyAgentMap.get(key)) !== null && _a !== void 0 ? _a : {};
|
|
let agent = getCachedAgent(isHttps, proxyAgents);
|
|
if (agent) {
|
|
return agent;
|
|
}
|
|
const tunnel = createProxyAgent(httpRequest.url, httpRequest.proxySettings, httpRequest.headers);
|
|
agent = tunnel.agent;
|
|
if (tunnel.isHttps) {
|
|
proxyAgents.httpsAgent = tunnel.agent;
|
|
}
|
|
else {
|
|
proxyAgents.httpAgent = tunnel.agent;
|
|
}
|
|
this.proxyAgentMap.set(key, proxyAgents);
|
|
return agent;
|
|
}
|
|
else if (httpRequest.keepAlive) {
|
|
let agent = getCachedAgent(isHttps, this.keepAliveAgents);
|
|
if (agent) {
|
|
return agent;
|
|
}
|
|
const 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
|
|
async fetch(input, init) {
|
|
return node_fetch(input, init);
|
|
}
|
|
async prepareRequest(httpRequest) {
|
|
const requestInit = {};
|
|
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
|
|
const cookieString = await new Promise((resolve, reject) => {
|
|
this.cookieJar.getCookieString(httpRequest.url, (err, cookie) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(cookie);
|
|
}
|
|
});
|
|
});
|
|
httpRequest.headers.set("Cookie", cookieString);
|
|
}
|
|
// Set the http(s) agent
|
|
requestInit.agent = this.getOrCreateAgent(httpRequest);
|
|
requestInit.compress = httpRequest.decompressResponse;
|
|
return requestInit;
|
|
}
|
|
async processRequest(operationResponse) {
|
|
if (this.cookieJar) {
|
|
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
|
|
if (setCookieHeader !== undefined) {
|
|
await new Promise((resolve, reject) => {
|
|
this.cookieJar.setCookie(setCookieHeader, operationResponse.request.url, { ignoreError: true }, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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 _a;
|
|
const { requestOptions, tracingOptions } = opts, additionalOptions = tslib.__rest(opts, ["requestOptions", "tracingOptions"]);
|
|
let result = additionalOptions;
|
|
if (requestOptions) {
|
|
result = Object.assign(Object.assign({}, result), requestOptions);
|
|
}
|
|
if (tracingOptions) {
|
|
result.tracingContext = tracingOptions.tracingContext;
|
|
// By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.
|
|
result.spanOptions = (_a = tracingOptions) === null || _a === void 0 ? void 0 : _a.spanOptions;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class BaseRequestPolicy {
|
|
constructor(_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.
|
|
*/
|
|
shouldLog(logLevel) {
|
|
return this._options.shouldLog(logLevel);
|
|
}
|
|
/**
|
|
* Attempt to log the provided message to the provided logger. If no logger was provided or if
|
|
* the log level does not meat the logger's threshold, then nothing will be logged.
|
|
* @param logLevel - The log level of this log.
|
|
* @param message - The message of this log.
|
|
*/
|
|
log(logLevel, message) {
|
|
this._options.log(logLevel, message);
|
|
}
|
|
}
|
|
/**
|
|
* Optional properties that can be used when creating a RequestPolicy.
|
|
*/
|
|
class RequestPolicyOptions {
|
|
constructor(_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.
|
|
*/
|
|
shouldLog(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.
|
|
*/
|
|
log(logLevel, message) {
|
|
if (this._logger && this.shouldLog(logLevel)) {
|
|
this._logger.log(logLevel, message);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function logPolicy(loggingOptions = {}) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new LogPolicy(nextPolicy, options, loggingOptions);
|
|
}
|
|
};
|
|
}
|
|
class LogPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
|
|
super(nextPolicy, options);
|
|
this.logger = logger$1;
|
|
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
|
|
}
|
|
/**
|
|
* 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 allowedHeaderNames() {
|
|
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 allowedHeaderNames(allowedHeaderNames) {
|
|
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
|
|
}
|
|
/**
|
|
* 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 allowedQueryParameters() {
|
|
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 allowedQueryParameters(allowedQueryParameters) {
|
|
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
|
|
}
|
|
sendRequest(request) {
|
|
if (!this.logger.enabled)
|
|
return this._nextPolicy.sendRequest(request);
|
|
this.logRequest(request);
|
|
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
|
|
}
|
|
logRequest(request) {
|
|
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
|
|
}
|
|
logResponse(response) {
|
|
this.logger(`Response status code: ${response.status}`);
|
|
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
|
|
return response;
|
|
}
|
|
}
|
|
|
|
// 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) {
|
|
let 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.
|
|
/**
|
|
* Gets the list of status codes for streaming responses.
|
|
* @internal
|
|
*/
|
|
function getStreamResponseStatusCodes(operationSpec) {
|
|
const result = new Set();
|
|
for (const statusCode in operationSpec.responses) {
|
|
const operationResponse = operationSpec.responses[statusCode];
|
|
if (operationResponse.bodyMapper &&
|
|
operationResponse.bodyMapper.type.name === MapperType.Stream) {
|
|
result.add(Number(statusCode));
|
|
}
|
|
}
|
|
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.
|
|
const xml2jsDefaultOptionsV2 = {
|
|
explicitCharkey: false,
|
|
trim: false,
|
|
normalize: false,
|
|
normalizeTags: false,
|
|
attrkey: XML_ATTRKEY,
|
|
explicitArray: true,
|
|
ignoreAttrs: false,
|
|
mergeAttrs: false,
|
|
explicitRoot: true,
|
|
validator: undefined,
|
|
xmlns: false,
|
|
explicitChildren: false,
|
|
preserveChildrenOrder: false,
|
|
childkey: "$$",
|
|
charsAsChildren: false,
|
|
includeWhiteChars: false,
|
|
async: false,
|
|
strict: true,
|
|
attrNameProcessors: undefined,
|
|
attrValueProcessors: undefined,
|
|
tagNameProcessors: undefined,
|
|
valueProcessors: undefined,
|
|
rootName: "root",
|
|
xmldec: {
|
|
version: "1.0",
|
|
encoding: "UTF-8",
|
|
standalone: true
|
|
},
|
|
doctype: undefined,
|
|
renderOpts: {
|
|
pretty: true,
|
|
indent: " ",
|
|
newline: "\n"
|
|
},
|
|
headless: false,
|
|
chunkSize: 10000,
|
|
emptyTag: "",
|
|
cdata: false
|
|
};
|
|
// The xml2js settings for general XML parsing operations.
|
|
const xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
|
|
xml2jsParserSettings.explicitArray = false;
|
|
// The xml2js settings for general XML building operations.
|
|
const 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
|
|
*/
|
|
function stringifyXML(obj, opts = {}) {
|
|
var _a;
|
|
xml2jsBuilderSettings.rootName = opts.rootName;
|
|
xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
|
const 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
|
|
*/
|
|
function parseXML(str, opts = {}) {
|
|
var _a;
|
|
xml2jsParserSettings.explicitRoot = !!opts.includeRoot;
|
|
xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
|
const xmlParser = new xml2js.Parser(xml2jsParserSettings);
|
|
return new Promise((resolve, reject) => {
|
|
if (!str) {
|
|
reject(new Error("Document is empty"));
|
|
}
|
|
else {
|
|
xmlParser.parseString(str, (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, parsingOptions) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);
|
|
}
|
|
};
|
|
}
|
|
const defaultJsonContentTypes = ["application/json", "text/json"];
|
|
const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
|
|
const DefaultDeserializationOptions = {
|
|
expectedContentTypes: {
|
|
json: defaultJsonContentTypes,
|
|
xml: defaultXmlContentTypes
|
|
}
|
|
};
|
|
/**
|
|
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
|
|
* HTTP pipeline.
|
|
*/
|
|
class DeserializationPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, requestPolicyOptions, deserializationContentTypes, parsingOptions = {}) {
|
|
var _a;
|
|
super(nextPolicy, requestPolicyOptions);
|
|
this.jsonContentTypes =
|
|
(deserializationContentTypes && deserializationContentTypes.json) || defaultJsonContentTypes;
|
|
this.xmlContentTypes =
|
|
(deserializationContentTypes && deserializationContentTypes.xml) || defaultXmlContentTypes;
|
|
this.xmlCharKey = (_a = parsingOptions.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
|
|
}
|
|
async sendRequest(request) {
|
|
return this._nextPolicy.sendRequest(request).then((response) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {
|
|
xmlCharKey: this.xmlCharKey
|
|
}));
|
|
}
|
|
}
|
|
function getOperationResponse(parsedResponse) {
|
|
let result;
|
|
const request = parsedResponse.request;
|
|
const operationSpec = request.operationSpec;
|
|
if (operationSpec) {
|
|
const operationResponseGetter = request.operationResponseGetter;
|
|
if (!operationResponseGetter) {
|
|
result = operationSpec.responses[parsedResponse.status];
|
|
}
|
|
else {
|
|
result = operationResponseGetter(operationSpec, parsedResponse);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function shouldDeserializeResponse(parsedResponse) {
|
|
const shouldDeserialize = parsedResponse.request.shouldDeserialize;
|
|
let result;
|
|
if (shouldDeserialize === undefined) {
|
|
result = true;
|
|
}
|
|
else if (typeof shouldDeserialize === "boolean") {
|
|
result = shouldDeserialize;
|
|
}
|
|
else {
|
|
result = shouldDeserialize(parsedResponse);
|
|
}
|
|
return result;
|
|
}
|
|
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {
|
|
var _a, _b, _c;
|
|
const updatedOptions = {
|
|
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
|
|
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
|
|
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
|
|
};
|
|
return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then((parsedResponse) => {
|
|
if (!shouldDeserializeResponse(parsedResponse)) {
|
|
return parsedResponse;
|
|
}
|
|
const operationSpec = parsedResponse.request.operationSpec;
|
|
if (!operationSpec || !operationSpec.responses) {
|
|
return parsedResponse;
|
|
}
|
|
const responseSpec = getOperationResponse(parsedResponse);
|
|
const { error, shouldReturnResponse } = handleErrorResponse(parsedResponse, operationSpec, responseSpec);
|
|
if (error) {
|
|
throw error;
|
|
}
|
|
else if (shouldReturnResponse) {
|
|
return parsedResponse;
|
|
}
|
|
// An operation response spec does exist for current status code, so
|
|
// use it to deserialize the response.
|
|
if (responseSpec) {
|
|
if (responseSpec.bodyMapper) {
|
|
let valueToDeserialize = parsedResponse.parsedBody;
|
|
if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) {
|
|
valueToDeserialize =
|
|
typeof valueToDeserialize === "object"
|
|
? valueToDeserialize[responseSpec.bodyMapper.xmlElementName]
|
|
: [];
|
|
}
|
|
try {
|
|
parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options);
|
|
}
|
|
catch (innerError) {
|
|
const restError = new RestError(`Error ${innerError} 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", options);
|
|
}
|
|
}
|
|
return parsedResponse;
|
|
});
|
|
}
|
|
function isOperationSpecEmpty(operationSpec) {
|
|
const expectedStatusCodes = Object.keys(operationSpec.responses);
|
|
return (expectedStatusCodes.length === 0 ||
|
|
(expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default"));
|
|
}
|
|
function handleErrorResponse(parsedResponse, operationSpec, responseSpec) {
|
|
var _a;
|
|
const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;
|
|
const isExpectedStatusCode = isOperationSpecEmpty(operationSpec)
|
|
? isSuccessByStatus
|
|
: !!responseSpec;
|
|
if (isExpectedStatusCode) {
|
|
if (responseSpec) {
|
|
if (!responseSpec.isError) {
|
|
return { error: null, shouldReturnResponse: false };
|
|
}
|
|
}
|
|
else {
|
|
return { error: null, shouldReturnResponse: false };
|
|
}
|
|
}
|
|
const errorResponseSpec = responseSpec !== null && responseSpec !== void 0 ? responseSpec : operationSpec.responses.default;
|
|
const streaming = ((_a = parsedResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(parsedResponse.status)) ||
|
|
parsedResponse.request.streamResponseBody;
|
|
const initialErrorMessage = streaming
|
|
? `Unexpected status code: ${parsedResponse.status}`
|
|
: parsedResponse.bodyAsText;
|
|
const error = new RestError(initialErrorMessage, undefined, parsedResponse.status, parsedResponse.request, parsedResponse);
|
|
// If the item failed but there's no error spec or default spec to deserialize the error,
|
|
// we should fail so we just throw the parsed response
|
|
if (!errorResponseSpec) {
|
|
throw error;
|
|
}
|
|
const defaultBodyMapper = errorResponseSpec.bodyMapper;
|
|
const defaultHeadersMapper = errorResponseSpec.headersMapper;
|
|
try {
|
|
// If error response has a body, try to deserialize it using default body mapper.
|
|
// Then try to extract error code & message from it
|
|
if (parsedResponse.parsedBody) {
|
|
const parsedBody = parsedResponse.parsedBody;
|
|
let parsedError;
|
|
if (defaultBodyMapper) {
|
|
let valueToDeserialize = parsedBody;
|
|
if (operationSpec.isXML && defaultBodyMapper.type.name === MapperType.Sequence) {
|
|
valueToDeserialize =
|
|
typeof parsedBody === "object" ? parsedBody[defaultBodyMapper.xmlElementName] : [];
|
|
}
|
|
parsedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody");
|
|
}
|
|
const internalError = parsedBody.error || parsedError || parsedBody;
|
|
error.code = internalError.code;
|
|
if (internalError.message) {
|
|
error.message = internalError.message;
|
|
}
|
|
if (defaultBodyMapper) {
|
|
error.response.parsedBody = parsedError;
|
|
}
|
|
}
|
|
// 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.`;
|
|
}
|
|
return { error, shouldReturnResponse: false };
|
|
}
|
|
function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {
|
|
var _a;
|
|
const errorHandler = (err) => {
|
|
const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;
|
|
const errCode = err.code || RestError.PARSE_ERROR;
|
|
const e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse);
|
|
return Promise.reject(e);
|
|
};
|
|
const streaming = ((_a = operationResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(operationResponse.status)) ||
|
|
operationResponse.request.streamResponseBody;
|
|
if (!streaming && operationResponse.bodyAsText) {
|
|
const text = operationResponse.bodyAsText;
|
|
const contentType = operationResponse.headers.get("Content-Type") || "";
|
|
const contentComponents = !contentType
|
|
? []
|
|
: contentType.split(";").map((component) => component.toLowerCase());
|
|
if (contentComponents.length === 0 ||
|
|
contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) {
|
|
return new Promise((resolve) => {
|
|
operationResponse.parsedBody = JSON.parse(text);
|
|
resolve(operationResponse);
|
|
}).catch(errorHandler);
|
|
}
|
|
else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {
|
|
return parseXML(text, opts)
|
|
.then((body) => {
|
|
operationResponse.parsedBody = body;
|
|
return operationResponse;
|
|
})
|
|
.catch(errorHandler);
|
|
}
|
|
}
|
|
return Promise.resolve(operationResponse);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
const DEFAULT_CLIENT_RETRY_COUNT = 3;
|
|
// intervals are in ms
|
|
const DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;
|
|
const DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;
|
|
const DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;
|
|
function isNumber(n) {
|
|
return typeof n === "number";
|
|
}
|
|
/**
|
|
* @internal
|
|
* Determines if the operation should be retried.
|
|
*
|
|
* @param retryLimit - Specifies the max number of retries.
|
|
* @param predicate - Initial chekck on whether to retry based on given responses or errors
|
|
* @param retryData - The retry data.
|
|
* @returns 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 retryOptions - specifies retry interval, and its lower bound and upper bound.
|
|
* @param retryData - The retry data.
|
|
* @param err - The operation"s error, if any.
|
|
*/
|
|
function updateRetryData(retryOptions, retryData = { retryCount: 0, retryInterval: 0 }, err) {
|
|
if (err) {
|
|
if (retryData.error) {
|
|
err.innerError = retryData.error;
|
|
}
|
|
retryData.error = err;
|
|
}
|
|
// Adjust retry count
|
|
retryData.retryCount++;
|
|
// Adjust retry interval
|
|
let incrementDelta = Math.pow(2, retryData.retryCount - 1) - 1;
|
|
const 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.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Helper TypeGuard that checks if the value is not null or undefined.
|
|
* @param thing - Anything
|
|
* @internal
|
|
*/
|
|
function isDefined(thing) {
|
|
return typeof thing !== "undefined" && thing !== null;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const StandardAbortMessage = "The operation was aborted.";
|
|
/**
|
|
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
|
|
* @param delayInMs - The number of milliseconds to be delayed.
|
|
* @param value - The value to be resolved with after a timeout of t milliseconds.
|
|
* @param options - The options for delay - currently abort options
|
|
* @param abortSignal - The abortSignal associated with containing operation.
|
|
* @param abortErrorMsg - The abort error message associated with containing operation.
|
|
* @returns - Resolved promise
|
|
*/
|
|
function delay(delayInMs, value, options) {
|
|
return new Promise((resolve, reject) => {
|
|
let timer = undefined;
|
|
let onAborted = undefined;
|
|
const rejectOnAbort = () => {
|
|
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
|
|
};
|
|
const removeListeners = () => {
|
|
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
|
|
options.abortSignal.removeEventListener("abort", onAborted);
|
|
}
|
|
};
|
|
onAborted = () => {
|
|
if (isDefined(timer)) {
|
|
clearTimeout(timer);
|
|
}
|
|
removeListeners();
|
|
return rejectOnAbort();
|
|
};
|
|
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && options.abortSignal.aborted) {
|
|
return rejectOnAbort();
|
|
}
|
|
timer = setTimeout(() => {
|
|
removeListeners();
|
|
resolve(value);
|
|
}, delayInMs);
|
|
if (options === null || options === void 0 ? void 0 : options.abortSignal) {
|
|
options.abortSignal.addEventListener("abort", onAborted);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
|
|
}
|
|
};
|
|
}
|
|
(function (RetryMode) {
|
|
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
|
|
})(exports.RetryMode || (exports.RetryMode = {}));
|
|
const DefaultRetryOptions = {
|
|
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
|
|
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
|
|
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
|
|
};
|
|
/**
|
|
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
|
|
*/
|
|
class ExponentialRetryPolicy extends BaseRequestPolicy {
|
|
/**
|
|
* @param nextPolicy - The next RequestPolicy in the pipeline chain.
|
|
* @param options - The options for this RequestPolicy.
|
|
* @param retryCount - The client retry count.
|
|
* @param retryInterval - The client retry interval, in milliseconds.
|
|
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
|
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
|
|
*/
|
|
constructor(nextPolicy, options, retryCount, retryInterval, maxRetryInterval) {
|
|
super(nextPolicy, options);
|
|
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;
|
|
}
|
|
sendRequest(request) {
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.then((response) => retry(this, request, response))
|
|
.catch((error) => retry(this, request, error.response, undefined, error));
|
|
}
|
|
}
|
|
async function retry(policy, request, response, retryData, requestError) {
|
|
function shouldPolicyRetry(responseParam) {
|
|
const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;
|
|
if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {
|
|
return false;
|
|
}
|
|
if (statusCode === undefined ||
|
|
(statusCode < 500 && statusCode !== 408) ||
|
|
statusCode === 501 ||
|
|
statusCode === 505) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
retryData = updateRetryData({
|
|
retryInterval: policy.retryInterval,
|
|
minRetryInterval: 0,
|
|
maxRetryInterval: policy.maxRetryInterval
|
|
}, retryData, requestError);
|
|
const isAborted = request.abortSignal && request.abortSignal.aborted;
|
|
if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {
|
|
logger.info(`Retrying request in ${retryData.retryInterval}`);
|
|
try {
|
|
await delay(retryData.retryInterval);
|
|
const res = await policy._nextPolicy.sendRequest(request.clone());
|
|
return retry(policy, request, res, retryData);
|
|
}
|
|
catch (err) {
|
|
return retry(policy, request, response, retryData, err);
|
|
}
|
|
}
|
|
else if (isAborted || requestError || !response) {
|
|
// If the operation failed in the end, return all errors instead of just the last one
|
|
const 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 response;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function generateClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
|
|
}
|
|
};
|
|
}
|
|
class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, _requestIdHeaderName) {
|
|
super(nextPolicy, options);
|
|
this._requestIdHeaderName = _requestIdHeaderName;
|
|
}
|
|
sendRequest(request) {
|
|
if (!request.headers.contains(this._requestIdHeaderName)) {
|
|
request.headers.set(this._requestIdHeaderName, request.requestId);
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getDefaultUserAgentKey() {
|
|
return Constants.HeaderConstants.USER_AGENT;
|
|
}
|
|
function getPlatformSpecificData() {
|
|
const runtimeInfo = {
|
|
key: "Node",
|
|
value: process.version
|
|
};
|
|
const osInfo = {
|
|
key: "OS",
|
|
value: `(${os.arch()}-${os.type()}-${os.release()})`
|
|
};
|
|
return [runtimeInfo, osInfo];
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function getRuntimeInfo() {
|
|
const msRestRuntime = {
|
|
key: "core-http",
|
|
value: Constants.coreHttpVersion
|
|
};
|
|
return [msRestRuntime];
|
|
}
|
|
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
|
|
return telemetryInfo
|
|
.map((info) => {
|
|
const value = info.value ? `${valueSeparator}${info.value}` : "";
|
|
return `${info.key}${value}`;
|
|
})
|
|
.join(keySeparator);
|
|
}
|
|
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
|
|
function getDefaultUserAgentValue() {
|
|
const runtimeInfo = getRuntimeInfo();
|
|
const platformSpecificData = getPlatformSpecificData();
|
|
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
|
|
return userAgent;
|
|
}
|
|
function userAgentPolicy(userAgentData) {
|
|
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
|
|
? getDefaultUserAgentKey()
|
|
: userAgentData.key;
|
|
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
|
|
? getDefaultUserAgentValue()
|
|
: userAgentData.value;
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new UserAgentPolicy(nextPolicy, options, key, value);
|
|
}
|
|
};
|
|
}
|
|
class UserAgentPolicy extends BaseRequestPolicy {
|
|
constructor(_nextPolicy, _options, headerKey, headerValue) {
|
|
super(_nextPolicy, _options);
|
|
this._nextPolicy = _nextPolicy;
|
|
this._options = _options;
|
|
this.headerKey = headerKey;
|
|
this.headerValue = headerValue;
|
|
}
|
|
sendRequest(request) {
|
|
this.addUserAgentHeader(request);
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
addUserAgentHeader(request) {
|
|
if (!request.headers) {
|
|
request.headers = new HttpHeaders();
|
|
}
|
|
if (!request.headers.get(this.headerKey) && this.headerValue) {
|
|
request.headers.set(this.headerKey, this.headerValue);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Methods that are allowed to follow redirects 301 and 302
|
|
*/
|
|
const allowedRedirect = ["GET", "HEAD"];
|
|
const DefaultRedirectOptions = {
|
|
handleRedirects: true,
|
|
maxRetries: 20
|
|
};
|
|
function redirectPolicy(maximumRetries = 20) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new RedirectPolicy(nextPolicy, options, maximumRetries);
|
|
}
|
|
};
|
|
}
|
|
class RedirectPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, maxRetries = 20) {
|
|
super(nextPolicy, options);
|
|
this.maxRetries = maxRetries;
|
|
}
|
|
sendRequest(request) {
|
|
return this._nextPolicy
|
|
.sendRequest(request)
|
|
.then((response) => handleRedirect(this, response, 0));
|
|
}
|
|
}
|
|
function handleRedirect(policy, response, currentRetries) {
|
|
const { request, status } = response;
|
|
const locationHeader = response.headers.get("location");
|
|
if (locationHeader &&
|
|
(status === 300 ||
|
|
(status === 301 && allowedRedirect.includes(request.method)) ||
|
|
(status === 302 && allowedRedirect.includes(request.method)) ||
|
|
(status === 303 && request.method === "POST") ||
|
|
status === 307) &&
|
|
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
|
|
const 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";
|
|
delete request.body;
|
|
}
|
|
return policy._nextPolicy
|
|
.sendRequest(request)
|
|
.then((res) => handleRedirect(policy, res, currentRetries + 1));
|
|
}
|
|
return Promise.resolve(response);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function rpRegistrationPolicy(retryTimeout = 30) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
|
|
}
|
|
};
|
|
}
|
|
class RPRegistrationPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, _retryTimeout = 30) {
|
|
super(nextPolicy, options);
|
|
this._retryTimeout = _retryTimeout;
|
|
}
|
|
sendRequest(request) {
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.then((response) => registerIfNeeded(this, request, response));
|
|
}
|
|
}
|
|
function registerIfNeeded(policy, request, response) {
|
|
if (response.status === 409) {
|
|
const rpName = checkRPNotRegisteredError(response.bodyAsText);
|
|
if (rpName) {
|
|
const 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(() => false)
|
|
.then((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 originalRequest - The original request
|
|
* @param reuseUrlToo - Should the url from the original request be reused as well. Default false.
|
|
* @returns A new request object with desired headers.
|
|
*/
|
|
function getRequestEssentials(originalRequest, reuseUrlToo = false) {
|
|
const 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 body - The response body received after making the original request.
|
|
* @returns The name of the RP if condition is satisfied else undefined.
|
|
*/
|
|
function checkRPNotRegisteredError(body) {
|
|
let 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") {
|
|
const 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 url - The original request url
|
|
* @returns The url prefix as explained above.
|
|
*/
|
|
function extractSubscriptionUrl(url) {
|
|
let result;
|
|
const 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 policy - The RPRegistrationPolicy this function is being called against.
|
|
* @param urlPrefix - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/
|
|
* @param provider - The provider name to be registered.
|
|
* @param originalRequest - The original request sent by the user that returned a 409 response
|
|
* with a message that the provider is not registered.
|
|
*/
|
|
async function registerRP(policy, urlPrefix, provider, originalRequest) {
|
|
const postUrl = `${urlPrefix}providers/${provider}/register?api-version=2016-02-01`;
|
|
const getUrl = `${urlPrefix}providers/${provider}?api-version=2016-02-01`;
|
|
const reqOptions = getRequestEssentials(originalRequest);
|
|
reqOptions.method = "POST";
|
|
reqOptions.url = postUrl;
|
|
const response = await policy._nextPolicy.sendRequest(reqOptions);
|
|
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 policy - The RPRegistrationPolicy this function is being called against.
|
|
* @param url - The request url for polling
|
|
* @param originalRequest - The original request sent by the user that returned a 409 response
|
|
* with a message that the provider is not registered.
|
|
* @returns True if RP Registration is successful.
|
|
*/
|
|
async function getRegistrationStatus(policy, url, originalRequest) {
|
|
const reqOptions = getRequestEssentials(originalRequest);
|
|
reqOptions.url = url;
|
|
reqOptions.method = "GET";
|
|
const res = await policy._nextPolicy.sendRequest(reqOptions);
|
|
const obj = res.parsedBody;
|
|
if (res.parsedBody && obj.registrationState && obj.registrationState === "Registered") {
|
|
return true;
|
|
}
|
|
else {
|
|
await delay(policy._retryTimeout * 1000);
|
|
return getRegistrationStatus(policy, url, originalRequest);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Default options for the cycler if none are provided
|
|
const DEFAULT_CYCLER_OPTIONS = {
|
|
forcedRefreshWindowInMs: 1000,
|
|
retryIntervalInMs: 3000,
|
|
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
|
|
};
|
|
/**
|
|
* Converts an an unreliable access token getter (which may resolve with null)
|
|
* into an AccessTokenGetter by retrying the unreliable getter in a regular
|
|
* interval.
|
|
*
|
|
* @param getAccessToken - a function that produces a promise of an access
|
|
* token that may fail by returning null
|
|
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
|
|
* attempts
|
|
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
|
|
* throwing an exception
|
|
* @returns - a promise that, if it resolves, will resolve with an access token
|
|
*/
|
|
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
|
|
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
|
// the timeout.
|
|
async function tryGetAccessToken() {
|
|
if (Date.now() < timeoutInMs) {
|
|
try {
|
|
return await getAccessToken();
|
|
}
|
|
catch (_a) {
|
|
return null;
|
|
}
|
|
}
|
|
else {
|
|
const finalToken = await getAccessToken();
|
|
// Timeout is up, so throw if it's still null
|
|
if (finalToken === null) {
|
|
throw new Error("Failed to refresh access token.");
|
|
}
|
|
return finalToken;
|
|
}
|
|
}
|
|
let token = await tryGetAccessToken();
|
|
while (token === null) {
|
|
await delay(retryIntervalInMs);
|
|
token = await tryGetAccessToken();
|
|
}
|
|
return token;
|
|
}
|
|
/**
|
|
* Creates a token cycler from a credential, scopes, and optional settings.
|
|
*
|
|
* A token cycler represents a way to reliably retrieve a valid access token
|
|
* from a TokenCredential. It will handle initializing the token, refreshing it
|
|
* when it nears expiration, and synchronizes refresh attempts to avoid
|
|
* concurrency hazards.
|
|
*
|
|
* @param credential - the underlying TokenCredential that provides the access
|
|
* token
|
|
* @param scopes - the scopes to request authorization for
|
|
* @param tokenCyclerOptions - optionally override default settings for the cycler
|
|
*
|
|
* @returns - a function that reliably produces a valid access token
|
|
*/
|
|
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
|
|
let refreshWorker = null;
|
|
let token = null;
|
|
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
|
|
/**
|
|
* This little holder defines several predicates that we use to construct
|
|
* the rules of refreshing the token.
|
|
*/
|
|
const cycler = {
|
|
/**
|
|
* Produces true if a refresh job is currently in progress.
|
|
*/
|
|
get isRefreshing() {
|
|
return refreshWorker !== null;
|
|
},
|
|
/**
|
|
* Produces true if the cycler SHOULD refresh (we are within the refresh
|
|
* window and not already refreshing)
|
|
*/
|
|
get shouldRefresh() {
|
|
var _a;
|
|
return (!cycler.isRefreshing &&
|
|
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
|
|
},
|
|
/**
|
|
* Produces true if the cycler MUST refresh (null or nearly-expired
|
|
* token).
|
|
*/
|
|
get mustRefresh() {
|
|
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
|
}
|
|
};
|
|
/**
|
|
* Starts a refresh job or returns the existing job if one is already
|
|
* running.
|
|
*/
|
|
function refresh(getTokenOptions) {
|
|
var _a;
|
|
if (!cycler.isRefreshing) {
|
|
// We bind `scopes` here to avoid passing it around a lot
|
|
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
|
|
// Take advantage of promise chaining to insert an assignment to `token`
|
|
// before the refresh can be considered done.
|
|
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
|
|
// If we don't have a token, then we should timeout immediately
|
|
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
|
|
.then((_token) => {
|
|
refreshWorker = null;
|
|
token = _token;
|
|
return token;
|
|
})
|
|
.catch((reason) => {
|
|
// We also should reset the refresher if we enter a failed state. All
|
|
// existing awaiters will throw, but subsequent requests will start a
|
|
// new retry chain.
|
|
refreshWorker = null;
|
|
token = null;
|
|
throw reason;
|
|
});
|
|
}
|
|
return refreshWorker;
|
|
}
|
|
return async (tokenOptions) => {
|
|
//
|
|
// Simple rules:
|
|
// - If we MUST refresh, then return the refresh task, blocking
|
|
// the pipeline until a token is available.
|
|
// - If we SHOULD refresh, then run refresh but don't return it
|
|
// (we can still use the cached token).
|
|
// - Return the token, since it's fine if we didn't return in
|
|
// step 1.
|
|
//
|
|
if (cycler.mustRefresh)
|
|
return refresh(tokenOptions);
|
|
if (cycler.shouldRefresh) {
|
|
refresh(tokenOptions);
|
|
}
|
|
return token;
|
|
};
|
|
}
|
|
// #endregion
|
|
/**
|
|
* Creates a new factory for a RequestPolicy that applies a bearer token to
|
|
* the requests' `Authorization` headers.
|
|
*
|
|
* @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) {
|
|
// This simple function encapsulates the entire process of reliably retrieving the token
|
|
const getToken = createTokenCycler(credential, scopes /* , options */);
|
|
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
async sendRequest(webResource) {
|
|
if (!webResource.url.toLowerCase().startsWith("https://")) {
|
|
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
|
|
}
|
|
const { token } = await getToken({
|
|
abortSignal: webResource.abortSignal,
|
|
tracingOptions: {
|
|
tracingContext: webResource.tracingContext
|
|
}
|
|
});
|
|
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
|
|
return this._nextPolicy.sendRequest(webResource);
|
|
}
|
|
}
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
|
|
}
|
|
};
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* @param retryCount - The client retry count.
|
|
* @param retryInterval - The client retry interval, in milliseconds.
|
|
* @param minRetryInterval - The minimum retry interval, in milliseconds.
|
|
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
|
|
*/
|
|
class SystemErrorRetryPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
|
|
super(nextPolicy, options);
|
|
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;
|
|
}
|
|
sendRequest(request) {
|
|
return this._nextPolicy
|
|
.sendRequest(request.clone())
|
|
.catch((error) => retry$1(this, request, error.response, error));
|
|
}
|
|
}
|
|
async function retry$1(policy, request, operationResponse, err, retryData) {
|
|
retryData = updateRetryData(policy, retryData, err);
|
|
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;
|
|
}
|
|
if (shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, operationResponse, err)) {
|
|
// If previous operation ended with an error and the policy allows a retry, do that
|
|
try {
|
|
await delay(retryData.retryInterval);
|
|
return policy._nextPolicy.sendRequest(request.clone());
|
|
}
|
|
catch (nestedErr) {
|
|
return retry$1(policy, request, operationResponse, nestedErr, retryData);
|
|
}
|
|
}
|
|
else {
|
|
if (err) {
|
|
// If the operation failed in the end, return all errors instead of just the last one
|
|
return Promise.reject(retryData.error);
|
|
}
|
|
return operationResponse;
|
|
}
|
|
}
|
|
|
|
// 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.
|
|
/**
|
|
* Stores the patterns specified in NO_PROXY environment variable.
|
|
* @internal
|
|
*/
|
|
const globalNoProxyList = [];
|
|
let noProxyListLoaded = false;
|
|
/** A cache of whether a host should bypass the proxy. */
|
|
const globalBypassedMap = new Map();
|
|
function loadEnvironmentProxyValue() {
|
|
if (!process) {
|
|
return undefined;
|
|
}
|
|
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
|
|
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
|
|
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
|
|
return httpsProxy || allProxy || httpProxy;
|
|
}
|
|
/**
|
|
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
|
|
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
|
|
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
|
|
*/
|
|
function isBypassed(uri, noProxyList, bypassedMap) {
|
|
if (noProxyList.length === 0) {
|
|
return false;
|
|
}
|
|
const host = URLBuilder.parse(uri).getHost();
|
|
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
|
|
return bypassedMap.get(host);
|
|
}
|
|
let isBypassedFlag = false;
|
|
for (const pattern of noProxyList) {
|
|
if (pattern[0] === ".") {
|
|
// This should match either domain it self or any subdomain or host
|
|
// .foo.com will match foo.com it self or *.foo.com
|
|
if (host.endsWith(pattern)) {
|
|
isBypassedFlag = true;
|
|
}
|
|
else {
|
|
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
|
|
isBypassedFlag = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (host === pattern) {
|
|
isBypassedFlag = true;
|
|
}
|
|
}
|
|
}
|
|
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
|
|
return isBypassedFlag;
|
|
}
|
|
/**
|
|
* @internal
|
|
*/
|
|
function loadNoProxy() {
|
|
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
|
|
noProxyListLoaded = true;
|
|
if (noProxy) {
|
|
return noProxy
|
|
.split(",")
|
|
.map((item) => item.trim())
|
|
.filter((item) => item.length);
|
|
}
|
|
return [];
|
|
}
|
|
function getDefaultProxySettings(proxyUrl) {
|
|
if (!proxyUrl) {
|
|
proxyUrl = loadEnvironmentProxyValue();
|
|
if (!proxyUrl) {
|
|
return undefined;
|
|
}
|
|
}
|
|
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
|
|
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
|
|
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
|
|
return {
|
|
host: schema + parsedUrl.getHost(),
|
|
port: Number.parseInt(parsedUrl.getPort() || "80"),
|
|
username,
|
|
password
|
|
};
|
|
}
|
|
/**
|
|
* A policy that allows one to apply proxy settings to all requests.
|
|
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
|
|
* or HTTP_PROXY environment variables.
|
|
* @param proxySettings - ProxySettings to use on each request.
|
|
* @param options - additional settings, for example, custom NO_PROXY patterns
|
|
*/
|
|
function proxyPolicy(proxySettings, options) {
|
|
if (!proxySettings) {
|
|
proxySettings = getDefaultProxySettings();
|
|
}
|
|
if (!noProxyListLoaded) {
|
|
globalNoProxyList.push(...loadNoProxy());
|
|
}
|
|
return {
|
|
create: (nextPolicy, requestPolicyOptions) => {
|
|
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
|
|
}
|
|
};
|
|
}
|
|
function extractAuthFromUrl(url) {
|
|
const atIndex = url.indexOf("@");
|
|
if (atIndex === -1) {
|
|
return { urlWithoutAuth: url };
|
|
}
|
|
const schemeIndex = url.indexOf("://");
|
|
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
|
|
const auth = url.substring(authStart, atIndex);
|
|
const colonIndex = auth.indexOf(":");
|
|
const hasPassword = colonIndex !== -1;
|
|
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
|
|
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
|
|
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
|
|
return {
|
|
username,
|
|
password,
|
|
urlWithoutAuth
|
|
};
|
|
}
|
|
class ProxyPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
|
|
super(nextPolicy, options);
|
|
this.proxySettings = proxySettings;
|
|
this.customNoProxyList = customNoProxyList;
|
|
}
|
|
sendRequest(request) {
|
|
var _a;
|
|
if (!request.proxySettings &&
|
|
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
|
|
request.proxySettings = this.proxySettings;
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Maximum number of retries for the throttling retry policy
|
|
*/
|
|
const DEFAULT_CLIENT_MAX_RETRY_COUNT = 3;
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const StatusCodes = Constants.HttpConstants.StatusCodes;
|
|
function throttlingRetryPolicy() {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new ThrottlingRetryPolicy(nextPolicy, options);
|
|
}
|
|
};
|
|
}
|
|
const StandardAbortMessage$1 = "The operation was aborted.";
|
|
/**
|
|
* 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
|
|
*/
|
|
class ThrottlingRetryPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, _handleResponse) {
|
|
super(nextPolicy, options);
|
|
this.numberOfRetries = 0;
|
|
this._handleResponse = _handleResponse || this._defaultResponseHandler;
|
|
}
|
|
async sendRequest(httpRequest) {
|
|
const response = await this._nextPolicy.sendRequest(httpRequest.clone());
|
|
if (response.status !== StatusCodes.TooManyRequests &&
|
|
response.status !== StatusCodes.ServiceUnavailable) {
|
|
return response;
|
|
}
|
|
else {
|
|
return this._handleResponse(httpRequest, response);
|
|
}
|
|
}
|
|
async _defaultResponseHandler(httpRequest, httpResponse) {
|
|
var _a;
|
|
const retryAfterHeader = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER);
|
|
if (retryAfterHeader) {
|
|
const delayInMs = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader);
|
|
if (delayInMs) {
|
|
this.numberOfRetries += 1;
|
|
await delay(delayInMs, undefined, {
|
|
abortSignal: httpRequest.abortSignal,
|
|
abortErrorMsg: StandardAbortMessage$1
|
|
});
|
|
if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
throw new abortController.AbortError(StandardAbortMessage$1);
|
|
}
|
|
if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {
|
|
return this.sendRequest(httpRequest);
|
|
}
|
|
else {
|
|
return this._nextPolicy.sendRequest(httpRequest);
|
|
}
|
|
}
|
|
}
|
|
return httpResponse;
|
|
}
|
|
static parseRetryAfterHeader(headerValue) {
|
|
const retryAfterInSeconds = Number(headerValue);
|
|
if (Number.isNaN(retryAfterInSeconds)) {
|
|
return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue);
|
|
}
|
|
else {
|
|
return retryAfterInSeconds * 1000;
|
|
}
|
|
}
|
|
static parseDateRetryAfterHeader(headerValue) {
|
|
try {
|
|
const now = Date.now();
|
|
const date = Date.parse(headerValue);
|
|
const diff = date - now;
|
|
return Number.isNaN(diff) ? undefined : diff;
|
|
}
|
|
catch (error) {
|
|
return undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function signingPolicy(authenticationProvider) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new SigningPolicy(nextPolicy, options, authenticationProvider);
|
|
}
|
|
};
|
|
}
|
|
class SigningPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, authenticationProvider) {
|
|
super(nextPolicy, options);
|
|
this.authenticationProvider = authenticationProvider;
|
|
}
|
|
signRequest(request) {
|
|
return this.authenticationProvider.signRequest(request);
|
|
}
|
|
sendRequest(request) {
|
|
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const DefaultKeepAliveOptions = {
|
|
enable: true
|
|
};
|
|
function keepAlivePolicy(keepAliveOptions) {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
|
|
*/
|
|
class KeepAlivePolicy extends BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of KeepAlivePolicy.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
* @param keepAliveOptions -
|
|
*/
|
|
constructor(nextPolicy, options, keepAliveOptions) {
|
|
super(nextPolicy, options);
|
|
this.keepAliveOptions = keepAliveOptions;
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param request -
|
|
* @returns
|
|
*/
|
|
async sendRequest(request) {
|
|
request.keepAlive = this.keepAliveOptions.enable;
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const createSpan = coreTracing.createSpanFunction({
|
|
packagePrefix: "",
|
|
namespace: ""
|
|
});
|
|
function tracingPolicy(tracingOptions = {}) {
|
|
return {
|
|
create(nextPolicy, options) {
|
|
return new TracingPolicy(nextPolicy, options, tracingOptions);
|
|
}
|
|
};
|
|
}
|
|
class TracingPolicy extends BaseRequestPolicy {
|
|
constructor(nextPolicy, options, tracingOptions) {
|
|
super(nextPolicy, options);
|
|
this.userAgent = tracingOptions.userAgent;
|
|
}
|
|
async sendRequest(request) {
|
|
if (!request.tracingContext) {
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
const span = this.tryCreateSpan(request);
|
|
if (!span) {
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
try {
|
|
const response = await this._nextPolicy.sendRequest(request);
|
|
this.tryProcessResponse(span, response);
|
|
return response;
|
|
}
|
|
catch (err) {
|
|
this.tryProcessError(span, err);
|
|
throw err;
|
|
}
|
|
}
|
|
tryCreateSpan(request) {
|
|
var _a;
|
|
try {
|
|
const path = URLBuilder.parse(request.url).getPath() || "/";
|
|
// Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.
|
|
// We can pass this as a separate parameter once we upgrade to the latest core-tracing.
|
|
const { span } = createSpan(path, {
|
|
tracingOptions: {
|
|
spanOptions: Object.assign(Object.assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }),
|
|
tracingContext: request.tracingContext
|
|
}
|
|
});
|
|
// If the span is not recording, don't do any more work.
|
|
if (!span.isRecording()) {
|
|
span.end();
|
|
return undefined;
|
|
}
|
|
const namespaceFromContext = (_a = request.tracingContext) === null || _a === void 0 ? void 0 : _a.getValue(Symbol.for("az.namespace"));
|
|
if (typeof namespaceFromContext === "string") {
|
|
span.setAttribute("az.namespace", namespaceFromContext);
|
|
}
|
|
span.setAttributes({
|
|
"http.method": request.method,
|
|
"http.url": request.url,
|
|
requestId: request.requestId
|
|
});
|
|
if (this.userAgent) {
|
|
span.setAttribute("http.user_agent", this.userAgent);
|
|
}
|
|
// set headers
|
|
const spanContext = span.spanContext();
|
|
const traceParentHeader = coreTracing.getTraceParentHeader(spanContext);
|
|
if (traceParentHeader && coreTracing.isSpanContextValid(spanContext)) {
|
|
request.headers.set("traceparent", traceParentHeader);
|
|
const 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 span;
|
|
}
|
|
catch (error) {
|
|
logger.warning(`Skipping creating a tracing span due to an error: ${error.message}`);
|
|
return undefined;
|
|
}
|
|
}
|
|
tryProcessError(span, err) {
|
|
try {
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.ERROR,
|
|
message: err.message
|
|
});
|
|
if (err.statusCode) {
|
|
span.setAttribute("http.status_code", err.statusCode);
|
|
}
|
|
span.end();
|
|
}
|
|
catch (error) {
|
|
logger.warning(`Skipping tracing span processing due to an error: ${error.message}`);
|
|
}
|
|
}
|
|
tryProcessResponse(span, response) {
|
|
try {
|
|
span.setAttribute("http.status_code", response.status);
|
|
const serviceRequestId = response.headers.get("x-ms-request-id");
|
|
if (serviceRequestId) {
|
|
span.setAttribute("serviceRequestId", serviceRequestId);
|
|
}
|
|
span.setStatus({
|
|
code: coreTracing.SpanStatusCode.OK
|
|
});
|
|
span.end();
|
|
}
|
|
catch (error) {
|
|
logger.warning(`Skipping tracing span processing due to an error: ${error.message}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Returns a request policy factory that can be used to create an instance of
|
|
* {@link DisableResponseDecompressionPolicy}.
|
|
*/
|
|
function disableResponseDecompressionPolicy() {
|
|
return {
|
|
create: (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
|
|
*/
|
|
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of DisableResponseDecompressionPolicy.
|
|
*
|
|
* @param nextPolicy -
|
|
* @param options -
|
|
*/
|
|
// The parent constructor is protected.
|
|
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
/**
|
|
* Sends out request.
|
|
*
|
|
* @param request -
|
|
* @returns
|
|
*/
|
|
async sendRequest(request) {
|
|
request.decompressResponse = false;
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
function ndJsonPolicy() {
|
|
return {
|
|
create: (nextPolicy, options) => {
|
|
return new NdJsonPolicy(nextPolicy, options);
|
|
}
|
|
};
|
|
}
|
|
/**
|
|
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
|
|
*/
|
|
class NdJsonPolicy extends BaseRequestPolicy {
|
|
/**
|
|
* Creates an instance of KeepAlivePolicy.
|
|
*/
|
|
constructor(nextPolicy, options) {
|
|
super(nextPolicy, options);
|
|
}
|
|
/**
|
|
* Sends a request.
|
|
*/
|
|
async sendRequest(request) {
|
|
// There currently isn't a good way to bypass the serializer
|
|
if (typeof request.body === "string" && request.body.startsWith("[")) {
|
|
const body = JSON.parse(request.body);
|
|
if (Array.isArray(body)) {
|
|
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
|
|
}
|
|
}
|
|
return this._nextPolicy.sendRequest(request);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
let cachedHttpClient;
|
|
function getCachedDefaultHttpClient() {
|
|
if (!cachedHttpClient) {
|
|
cachedHttpClient = new NodeFetchHttpClient();
|
|
}
|
|
return cachedHttpClient;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* ServiceClient sends service requests and receives responses.
|
|
*/
|
|
class ServiceClient {
|
|
/**
|
|
* The ServiceClient constructor
|
|
* @param credentials - The credentials used for authentication with the service.
|
|
* @param options - The service client options that govern the behavior of the client.
|
|
*/
|
|
constructor(credentials,
|
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */
|
|
options) {
|
|
if (!options) {
|
|
options = {};
|
|
}
|
|
this._withCredentials = options.withCredentials || false;
|
|
this._httpClient = options.httpClient || getCachedDefaultHttpClient();
|
|
this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger);
|
|
let requestPolicyFactories;
|
|
if (Array.isArray(options.requestPolicyFactories)) {
|
|
logger.info("ServiceClient: using custom request policies");
|
|
requestPolicyFactories = options.requestPolicyFactories;
|
|
}
|
|
else {
|
|
let 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.
|
|
const wrappedPolicyFactory = () => {
|
|
let bearerTokenPolicyFactory = undefined;
|
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
const serviceClient = this;
|
|
const serviceClientOptions = options;
|
|
return {
|
|
create(nextPolicy, createOptions) {
|
|
const credentialScopes = getCredentialScopes(serviceClientOptions, serviceClient.baseUri);
|
|
if (!credentialScopes) {
|
|
throw new Error(`When using credential, the ServiceClient must contain a baseUri or a credentialScopes in ServiceClientOptions. Unable to create a bearerTokenAuthenticationPolicy`);
|
|
}
|
|
if (bearerTokenPolicyFactory === undefined || bearerTokenPolicyFactory === null) {
|
|
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);
|
|
}
|
|
return bearerTokenPolicyFactory.create(nextPolicy, createOptions);
|
|
}
|
|
};
|
|
};
|
|
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
|
|
const newRequestPolicyFactories = options.requestPolicyFactories(requestPolicyFactories);
|
|
if (newRequestPolicyFactories) {
|
|
requestPolicyFactories = newRequestPolicyFactories;
|
|
}
|
|
}
|
|
}
|
|
this._requestPolicyFactories = requestPolicyFactories;
|
|
}
|
|
/**
|
|
* Send the provided httpRequest.
|
|
*/
|
|
sendRequest(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.");
|
|
}
|
|
let httpRequest;
|
|
try {
|
|
if (isWebResourceLike(options)) {
|
|
options.validateRequestProperties();
|
|
httpRequest = options;
|
|
}
|
|
else {
|
|
httpRequest = new WebResource();
|
|
httpRequest = httpRequest.prepare(options);
|
|
}
|
|
}
|
|
catch (error) {
|
|
return Promise.reject(error);
|
|
}
|
|
let httpPipeline = this._httpClient;
|
|
if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) {
|
|
for (let 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 - The arguments that the HTTP request's templated values will be populated from.
|
|
* @param operationSpec - The OperationSpec to use to populate the httpRequest.
|
|
* @param callback - The callback to call when the response is received.
|
|
*/
|
|
async sendOperationRequest(operationArguments, operationSpec, callback) {
|
|
var _a;
|
|
if (typeof operationArguments.options === "function") {
|
|
callback = operationArguments.options;
|
|
operationArguments.options = undefined;
|
|
}
|
|
const serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions;
|
|
const httpRequest = new WebResource();
|
|
let result;
|
|
try {
|
|
const 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;
|
|
const requestUrl = URLBuilder.parse(baseUri);
|
|
if (operationSpec.path) {
|
|
requestUrl.appendPath(operationSpec.path);
|
|
}
|
|
if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) {
|
|
for (const urlParameter of operationSpec.urlParameters) {
|
|
let urlParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer);
|
|
urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter), serializerOptions);
|
|
if (!urlParameter.skipEncoding) {
|
|
urlParameterValue = encodeURIComponent(urlParameterValue);
|
|
}
|
|
requestUrl.replaceAll(`{${urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)}}`, urlParameterValue);
|
|
}
|
|
}
|
|
if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) {
|
|
for (const queryParameter of operationSpec.queryParameters) {
|
|
let queryParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer);
|
|
if (queryParameterValue !== undefined && queryParameterValue !== null) {
|
|
queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter), serializerOptions);
|
|
if (queryParameter.collectionFormat !== undefined &&
|
|
queryParameter.collectionFormat !== null) {
|
|
if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Multi) {
|
|
if (queryParameterValue.length === 0) {
|
|
// The collection is empty, no need to try serializing the current queryParam
|
|
continue;
|
|
}
|
|
else {
|
|
for (const index in queryParameterValue) {
|
|
const 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 (const 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();
|
|
const contentType = operationSpec.contentType || this.requestContentType;
|
|
if (contentType && operationSpec.requestBody) {
|
|
httpRequest.headers.set("Content-Type", contentType);
|
|
}
|
|
if (operationSpec.headerParameters) {
|
|
for (const headerParameter of operationSpec.headerParameters) {
|
|
let headerValue = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer);
|
|
if (headerValue !== undefined && headerValue !== null) {
|
|
headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter), serializerOptions);
|
|
const headerCollectionPrefix = headerParameter.mapper
|
|
.headerCollectionPrefix;
|
|
if (headerCollectionPrefix) {
|
|
for (const key of Object.keys(headerValue)) {
|
|
httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]);
|
|
}
|
|
}
|
|
else {
|
|
httpRequest.headers.set(headerParameter.mapper.serializedName ||
|
|
getPathStringFromParameter(headerParameter), headerValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const options = operationArguments.options;
|
|
if (options) {
|
|
if (options.customHeaders) {
|
|
for (const 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) {
|
|
// By passing spanOptions if they exist at runtime, we're backwards compatible with @azure/core-tracing@preview.13 and earlier.
|
|
httpRequest.spanOptions = options.spanOptions;
|
|
}
|
|
if (options.tracingContext) {
|
|
httpRequest.tracingContext = options.tracingContext;
|
|
}
|
|
if (options.shouldDeserialize !== undefined && options.shouldDeserialize !== null) {
|
|
httpRequest.shouldDeserialize = options.shouldDeserialize;
|
|
}
|
|
}
|
|
httpRequest.withCredentials = this._withCredentials;
|
|
serializeRequestBody(this, httpRequest, operationArguments, operationSpec);
|
|
if (httpRequest.streamResponseStatusCodes === undefined) {
|
|
httpRequest.streamResponseStatusCodes = getStreamResponseStatusCodes(operationSpec);
|
|
}
|
|
let rawResponse;
|
|
let sendRequestError;
|
|
try {
|
|
rawResponse = await this.sendRequest(httpRequest);
|
|
}
|
|
catch (error) {
|
|
sendRequestError = error;
|
|
}
|
|
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]));
|
|
}
|
|
}
|
|
catch (error) {
|
|
result = Promise.reject(error);
|
|
}
|
|
const cb = callback;
|
|
if (cb) {
|
|
result
|
|
.then((res) => cb(null, res._response.parsedBody, res._response.request, res._response))
|
|
.catch((err) => cb(err));
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
function serializeRequestBody(serviceClient, httpRequest, operationArguments, operationSpec) {
|
|
var _a, _b, _c, _d, _e, _f;
|
|
const serializerOptions = (_b = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions) !== null && _b !== void 0 ? _b : {};
|
|
const updatedOptions = {
|
|
rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "",
|
|
includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,
|
|
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY
|
|
};
|
|
const xmlCharKey = serializerOptions.xmlCharKey;
|
|
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
|
|
httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer);
|
|
const bodyMapper = operationSpec.requestBody.mapper;
|
|
const { required, xmlName, xmlElementName, serializedName, xmlNamespace, xmlNamespacePrefix } = bodyMapper;
|
|
const typeName = bodyMapper.type.name;
|
|
try {
|
|
if ((httpRequest.body !== undefined && httpRequest.body !== null) || required) {
|
|
const requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody);
|
|
httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString, updatedOptions);
|
|
const isStream = typeName === MapperType.Stream;
|
|
if (operationSpec.isXML) {
|
|
const xmlnsKey = xmlNamespacePrefix ? `xmlns:${xmlNamespacePrefix}` : "xmlns";
|
|
const value = getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, httpRequest.body, updatedOptions);
|
|
if (typeName === MapperType.Sequence) {
|
|
httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {
|
|
rootName: xmlName || serializedName,
|
|
xmlCharKey
|
|
});
|
|
}
|
|
else if (!isStream) {
|
|
httpRequest.body = stringifyXML(value, {
|
|
rootName: xmlName || serializedName,
|
|
xmlCharKey
|
|
});
|
|
}
|
|
}
|
|
else if (typeName === MapperType.String &&
|
|
(((_f = operationSpec.contentType) === null || _f === void 0 ? void 0 : _f.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 (const formDataParameter of operationSpec.formDataParameters) {
|
|
const formDataParameterValue = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer);
|
|
if (formDataParameterValue !== undefined && formDataParameterValue !== null) {
|
|
const formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);
|
|
httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter), updatedOptions);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* Adds an xml namespace to the xml serialized object if needed, otherwise it just returns the value itself
|
|
*/
|
|
function getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, serializedValue, options) {
|
|
// Composite and Sequence schemas already got their root namespace set during serialization
|
|
// We just need to add xmlns to the other schema types
|
|
if (xmlNamespace && !["Composite", "Sequence", "Dictionary"].includes(typeName)) {
|
|
const result = {};
|
|
result[options.xmlCharKey] = serializedValue;
|
|
result[XML_ATTRKEY] = { [xmlnsKey]: xmlNamespace };
|
|
return result;
|
|
}
|
|
return serializedValue;
|
|
}
|
|
function getValueOrFunctionResult(value, defaultValueCreator) {
|
|
let result;
|
|
if (typeof value === "string") {
|
|
result = value;
|
|
}
|
|
else {
|
|
result = defaultValueCreator();
|
|
if (typeof value === "function") {
|
|
result = value(result);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
|
|
const factories = [];
|
|
if (options.generateClientRequestIdHeader) {
|
|
factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName));
|
|
}
|
|
if (authPolicyFactory) {
|
|
factories.push(authPolicyFactory);
|
|
}
|
|
const userAgentHeaderName = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName);
|
|
const 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));
|
|
if (isNode) {
|
|
factories.push(proxyPolicy(options.proxySettings));
|
|
}
|
|
factories.push(logPolicy({ logger: logger.info }));
|
|
return factories;
|
|
}
|
|
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
|
|
const requestPolicyFactories = [];
|
|
if (pipelineOptions.sendStreamingJson) {
|
|
requestPolicyFactories.push(ndJsonPolicy());
|
|
}
|
|
let userAgentValue = undefined;
|
|
if (pipelineOptions.userAgentOptions && pipelineOptions.userAgentOptions.userAgentPrefix) {
|
|
const userAgentInfo = [];
|
|
userAgentInfo.push(pipelineOptions.userAgentOptions.userAgentPrefix);
|
|
// Add the default user agent value if it isn't already specified
|
|
// by the userAgentPrefix option.
|
|
const defaultUserAgentInfo = getDefaultUserAgentValue();
|
|
if (userAgentInfo.indexOf(defaultUserAgentInfo) === -1) {
|
|
userAgentInfo.push(defaultUserAgentInfo);
|
|
}
|
|
userAgentValue = userAgentInfo.join(" ");
|
|
}
|
|
const keepAliveOptions = Object.assign(Object.assign({}, DefaultKeepAliveOptions), pipelineOptions.keepAliveOptions);
|
|
const retryOptions = Object.assign(Object.assign({}, DefaultRetryOptions), pipelineOptions.retryOptions);
|
|
const redirectOptions = Object.assign(Object.assign({}, DefaultRedirectOptions), pipelineOptions.redirectOptions);
|
|
if (isNode) {
|
|
requestPolicyFactories.push(proxyPolicy(pipelineOptions.proxyOptions));
|
|
}
|
|
const deserializationOptions = Object.assign(Object.assign({}, DefaultDeserializationOptions), pipelineOptions.deserializationOptions);
|
|
const loggingOptions = Object.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
|
|
};
|
|
}
|
|
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
|
|
return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer);
|
|
}
|
|
function getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameterPath, parameterMapper, serializer) {
|
|
var _a;
|
|
let value;
|
|
if (typeof parameterPath === "string") {
|
|
parameterPath = [parameterPath];
|
|
}
|
|
const serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions;
|
|
if (Array.isArray(parameterPath)) {
|
|
if (parameterPath.length > 0) {
|
|
if (parameterMapper.isConstant) {
|
|
value = parameterMapper.defaultValue;
|
|
}
|
|
else {
|
|
let propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);
|
|
if (!propertySearchResult.propertyFound) {
|
|
propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath);
|
|
}
|
|
let 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.
|
|
const parameterPathString = getPathStringFromParameterPath(parameterPath, parameterMapper);
|
|
serializer.serialize(parameterMapper, value, parameterPathString, serializerOptions);
|
|
}
|
|
}
|
|
else {
|
|
if (parameterMapper.required) {
|
|
value = {};
|
|
}
|
|
for (const propertyName in parameterPath) {
|
|
const propertyMapper = parameterMapper.type.modelProperties[propertyName];
|
|
const propertyPath = parameterPath[propertyName];
|
|
const propertyValue = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer);
|
|
// Serialize just for validation purposes.
|
|
const propertyPathString = getPathStringFromParameterPath(propertyPath, propertyMapper);
|
|
serializer.serialize(propertyMapper, propertyValue, propertyPathString, serializerOptions);
|
|
if (propertyValue !== undefined && propertyValue !== null) {
|
|
if (!value) {
|
|
value = {};
|
|
}
|
|
value[propertyName] = propertyValue;
|
|
}
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
function getPropertyFromParameterPath(parent, parameterPath) {
|
|
const result = { propertyFound: false };
|
|
let i = 0;
|
|
for (; i < parameterPath.length; ++i) {
|
|
const parameterPathPart = parameterPath[i];
|
|
// Make sure to check inherited properties too, so don't use hasOwnProperty().
|
|
if (parent !== 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) {
|
|
const parsedHeaders = _response.parsedHeaders;
|
|
const bodyMapper = responseSpec && responseSpec.bodyMapper;
|
|
const addOperationResponse = (obj) => {
|
|
return Object.defineProperty(obj, "_response", {
|
|
value: _response
|
|
});
|
|
};
|
|
if (bodyMapper) {
|
|
const typeName = bodyMapper.type.name;
|
|
if (typeName === "Stream") {
|
|
return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), { blobBody: _response.blobBody, readableStreamBody: _response.readableStreamBody }));
|
|
}
|
|
const modelProperties = (typeName === "Composite" && bodyMapper.type.modelProperties) || {};
|
|
const isPageableResponse = Object.keys(modelProperties).some((k) => modelProperties[k].serializedName === "");
|
|
if (typeName === "Sequence" || isPageableResponse) {
|
|
const arrayResponse = [...(_response.parsedBody || [])];
|
|
for (const key of Object.keys(modelProperties)) {
|
|
if (modelProperties[key].serializedName) {
|
|
arrayResponse[key] = _response.parsedBody[key];
|
|
}
|
|
}
|
|
if (parsedHeaders) {
|
|
for (const key of Object.keys(parsedHeaders)) {
|
|
arrayResponse[key] = parsedHeaders[key];
|
|
}
|
|
}
|
|
addOperationResponse(arrayResponse);
|
|
return arrayResponse;
|
|
}
|
|
if (typeName === "Composite" || typeName === "Dictionary") {
|
|
return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), _response.parsedBody));
|
|
}
|
|
}
|
|
if (bodyMapper ||
|
|
_response.request.method === "HEAD" ||
|
|
isPrimitiveType(_response.parsedBody)) {
|
|
// primitive body types and HEAD booleans
|
|
return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), { body: _response.parsedBody }));
|
|
}
|
|
return addOperationResponse(Object.assign(Object.assign({}, parsedHeaders), _response.parsedBody));
|
|
}
|
|
function getCredentialScopes(options, baseUri) {
|
|
if (options === null || options === void 0 ? void 0 : options.credentialScopes) {
|
|
const scopes = options.credentialScopes;
|
|
return Array.isArray(scopes)
|
|
? scopes.map((scope) => new url.URL(scope).toString())
|
|
: new url.URL(scopes).toString();
|
|
}
|
|
if (baseUri) {
|
|
return `${baseUri}/.default`;
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* This function is only here for compatibility. Use createSpanFunction in core-tracing.
|
|
*
|
|
* @deprecated This function is only here for compatibility. Use createSpanFunction in core-tracing.
|
|
* @hidden
|
|
|
|
* @param spanConfig - The name of the operation being performed.
|
|
* @param tracingOptions - The options for the underlying http request.
|
|
*/
|
|
function createSpanFunction(args) {
|
|
return coreTracing.createSpanFunction(args);
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Defines the default token refresh buffer duration.
|
|
*/
|
|
const TokenRefreshBufferMs = 2 * 60 * 1000; // 2 Minutes
|
|
/**
|
|
* Provides an {@link AccessTokenCache} implementation which clears
|
|
* the cached {@link AccessToken}'s after the expiresOnTimestamp has
|
|
* passed.
|
|
*
|
|
* @deprecated No longer used in the bearer authorization policy.
|
|
*/
|
|
class ExpiringAccessTokenCache {
|
|
/**
|
|
* Constructs an instance of {@link ExpiringAccessTokenCache} with
|
|
* an optional expiration buffer time.
|
|
*/
|
|
constructor(tokenRefreshBufferMs = TokenRefreshBufferMs) {
|
|
this.cachedToken = undefined;
|
|
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
|
|
}
|
|
setCachedToken(accessToken) {
|
|
this.cachedToken = accessToken;
|
|
}
|
|
getCachedToken() {
|
|
if (this.cachedToken &&
|
|
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
|
|
this.cachedToken = undefined;
|
|
}
|
|
return this.cachedToken;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
/**
|
|
* Helps the core-http token authentication policies with requesting a new token if we're not currently waiting for a new token.
|
|
*
|
|
* @deprecated No longer used in the bearer authorization policy.
|
|
*/
|
|
class AccessTokenRefresher {
|
|
constructor(credential, scopes, requiredMillisecondsBeforeNewRefresh = 30000) {
|
|
this.credential = credential;
|
|
this.scopes = scopes;
|
|
this.requiredMillisecondsBeforeNewRefresh = requiredMillisecondsBeforeNewRefresh;
|
|
this.lastCalled = 0;
|
|
}
|
|
/**
|
|
* Returns true if the required milliseconds(defaulted to 30000) have been passed signifying
|
|
* that we are ready for a new refresh.
|
|
*/
|
|
isReady() {
|
|
// We're only ready for a new refresh if the required milliseconds have passed.
|
|
return (!this.lastCalled || Date.now() - this.lastCalled > this.requiredMillisecondsBeforeNewRefresh);
|
|
}
|
|
/**
|
|
* Stores the time in which it is called,
|
|
* then requests a new token,
|
|
* then sets this.promise to undefined,
|
|
* then returns the token.
|
|
*/
|
|
async getToken(options) {
|
|
this.lastCalled = Date.now();
|
|
const token = await this.credential.getToken(this.scopes, options);
|
|
this.promise = undefined;
|
|
return token || undefined;
|
|
}
|
|
/**
|
|
* Requests a new token if we're not currently waiting for a new token.
|
|
* Returns null if the required time between each call hasn't been reached.
|
|
*/
|
|
refresh(options) {
|
|
if (!this.promise) {
|
|
this.promise = this.getToken(options);
|
|
}
|
|
return this.promise;
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
const HeaderConstants = Constants.HeaderConstants;
|
|
const DEFAULT_AUTHORIZATION_SCHEME = "Basic";
|
|
class BasicAuthenticationCredentials {
|
|
/**
|
|
* Creates a new BasicAuthenticationCredentials object.
|
|
*
|
|
* @param userName - User name.
|
|
* @param password - Password.
|
|
* @param authorizationScheme - The authorization scheme.
|
|
*/
|
|
constructor(userName, password, 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 webResource - The WebResourceLike to be signed.
|
|
* @returns The signed request object.
|
|
*/
|
|
signRequest(webResource) {
|
|
const credentials = `${this.userName}:${this.password}`;
|
|
const encodedCredentials = `${this.authorizationScheme} ${encodeString(credentials)}`;
|
|
if (!webResource.headers)
|
|
webResource.headers = new HttpHeaders();
|
|
webResource.headers.set(HeaderConstants.AUTHORIZATION, encodedCredentials);
|
|
return Promise.resolve(webResource);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
/**
|
|
* Authenticates to a service using an API key.
|
|
*/
|
|
class ApiKeyCredentials {
|
|
/**
|
|
* @param options - Specifies the options to be provided for auth. Either header or query needs to be provided.
|
|
*/
|
|
constructor(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 webResource - The WebResourceLike to be signed.
|
|
* @returns The signed request object.
|
|
*/
|
|
signRequest(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 (const 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 (const key in this.inQuery) {
|
|
if (!webResource.url.endsWith("?")) {
|
|
webResource.url += "&";
|
|
}
|
|
webResource.url += `${key}=${this.inQuery[key]}`;
|
|
}
|
|
}
|
|
return Promise.resolve(webResource);
|
|
}
|
|
}
|
|
|
|
// Copyright (c) Microsoft Corporation.
|
|
class TopicCredentials extends ApiKeyCredentials {
|
|
/**
|
|
* Creates a new EventGrid TopicCredentials object.
|
|
*
|
|
* @param topicKey - The EventGrid topic key
|
|
*/
|
|
constructor(topicKey) {
|
|
if (!topicKey || (topicKey && typeof topicKey !== "string")) {
|
|
throw new Error("topicKey cannot be null or undefined and must be of type string.");
|
|
}
|
|
const options = {
|
|
inHeader: {
|
|
"aeg-sas-key": topicKey
|
|
}
|
|
};
|
|
super(options);
|
|
}
|
|
}
|
|
|
|
Object.defineProperty(exports, 'isTokenCredential', {
|
|
enumerable: true,
|
|
get: function () {
|
|
return coreAuth.isTokenCredential;
|
|
}
|
|
});
|
|
exports.AccessTokenRefresher = AccessTokenRefresher;
|
|
exports.ApiKeyCredentials = ApiKeyCredentials;
|
|
exports.BaseRequestPolicy = BaseRequestPolicy;
|
|
exports.BasicAuthenticationCredentials = BasicAuthenticationCredentials;
|
|
exports.Constants = Constants;
|
|
exports.DefaultHttpClient = NodeFetchHttpClient;
|
|
exports.ExpiringAccessTokenCache = ExpiringAccessTokenCache;
|
|
exports.HttpHeaders = HttpHeaders;
|
|
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.XML_ATTRKEY = XML_ATTRKEY;
|
|
exports.XML_CHARKEY = XML_CHARKEY;
|
|
exports.applyMixins = applyMixins;
|
|
exports.bearerTokenAuthenticationPolicy = bearerTokenAuthenticationPolicy;
|
|
exports.createPipelineFromOptions = createPipelineFromOptions;
|
|
exports.createSpanFunction = createSpanFunction;
|
|
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
|
|
|
|
|
|
/***/ })
|
|
/******/ ]); |