diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..ed2085f
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,27 @@
+{
+ "env": {
+ "node": true,
+ "es6": true,
+ "jest/globals": true
+ },
+ "extends": [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/eslint-recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:jest/recommended"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "project": "./tsconfig.eslint.json",
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "plugins": ["@typescript-eslint", "jest"],
+ "ignorePatterns": ["node_modules/"],
+ "rules": {
+ "indent": ["error", 4],
+ "linebreak-style": ["error", "unix"],
+ "quotes": ["error", "double"],
+ "semi": ["error", "always"]
+ }
+}
\ No newline at end of file
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..6602d95
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,64 @@
+name: Validate 'setup-android-tools'
+on:
+ pull_request:
+ workflow_dispatch:
+ schedule:
+ - cron: 0 0 * * *
+
+jobs:
+ task:
+ name: install
+ strategy:
+ matrix:
+ operating-system: [ubuntu-latest, windows-latest, macos-latest]
+ cache: [true, false]
+ fail-fast: false
+ runs-on: ${{ matrix.operating-system }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: setup ndk
+ uses: ./
+ with:
+ packages: ndk;19.2.5345600
+ cache: ${{ matrix.cache }}
+
+ - name: setup system-images
+ uses: ./
+ with:
+ packages: |
+ ndk-bundle
+ system-images;android-30;google_apis;x86
+ system-images;android-30;google_apis;x86_64
+ cache: ${{ matrix.cache }}
+
+ - name: setup components
+ uses: ./
+ with:
+ packages: |
+ add-ons;addon-google_apis-google-19
+ extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-alpha8
+ extras;google;webdriver
+ cache: ${{ matrix.cache }}
+
+ already-installed:
+ name: pre-installed
+ strategy:
+ matrix:
+ operating-system: [ubuntu-latest, windows-latest, macos-latest]
+ fail-fast: false
+ runs-on: ${{ matrix.operating-system }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: setup platforms
+ uses: ./
+ with:
+ packages: |
+ platforms;android-29
+ platforms;android-30
+ - name: setup ndk-bundle
+ uses: ./
+ with:
+ packages: ndk-bundle
\ No newline at end of file
diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml
new file mode 100644
index 0000000..be938a0
--- /dev/null
+++ b/.github/workflows/workflow.yml
@@ -0,0 +1,31 @@
+name: Build task
+on: [pull_request]
+
+jobs:
+ Build:
+ name: Build task
+ strategy:
+ matrix:
+ operating-system: [ubuntu-latest, macos-latest]
+ fail-fast: false
+ runs-on: ${{ matrix.operating-system }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@master
+
+ - name: Set Node.JS
+ uses: actions/setup-node@master
+ with:
+ node-version: 12.x
+
+ - name: npm install
+ run: npm install
+
+ - name: Build
+ run: npm run build
+
+ - name: Run tests
+ run: npm run test
+
+ - name: Lint
+ run: npm run lint
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..140d803
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+lib
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2e02d83
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2020 Maxim Lobanov and contributors
+
+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.
\ No newline at end of file
diff --git a/README.md b/README.md
index 65d487f..efeb852 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,69 @@
-# setup-android
-Set up Android tools in GitHub Actions workflow with cache
+# setup-android-tools
+This action is intended to install Android tools on Hosted images in GitHub Actions.
+It wraps `sdkmanager` and automates caching of installed packages.
+
+### Usage
+Install single package without cache:
+```
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: setup-android-tools
+ uses: maxim-lobanov/setup-android-tools@1.0
+ with:
+ packages: ndk;19.2.5345600
+```
+
+Install multiple packages without cache:
+```
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: maxim-lobanov/setup-android-tools@1.0
+ with:
+ packages: |
+ platforms;android-29
+ platforms;android-30
+ system-images;android-30;google_apis;x86
+```
+
+Install package with cache:
+```
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: maxim-lobanov/setup-android-tools@1.0
+ with:
+ packages: ndk;19.2.5345600
+ cache: true
+```
+
+### Cache packages
+With `cache: true`, action will automatically cache all downloaded packages via [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache). In some cases, it could significantly speed up your builds (especially on MacOS images).
+
+> **Note:** GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 5 GB. If you exceed this limit, GitHub will save your cache but will begin evicting caches until the total size is less than 5 GB.
+See "[Caching dependencies to speed up workflows](https://help.github.com/github/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows)" for how caching works.
+
+More details about speed advantage of using cache
+
+(Table contains average results since installation time may vary depending on VM connection speed)
+
+| Packages | OS | With cache (sec) | Without cache (sec) |
+|-|-|-|-|
+|ndk;19.2.5345600| Ubuntu | 62 | 85 |
+| | Windows | 149 | 180 |
+| | MacOS | 25 | 71 |
+| ndk-bundle
system-images;android-30;google_apis;x86
system-images;android-30;google_apis;x86_64 | Ubuntu | 130 | 167 |
+| | Windows | 157 | 182 |
+| | MacOS | 43 | 205 |
+| platforms;android-20
add-ons;addon-google_apis-google-20
constraint-layout-solver;1.0.0-alpha8
extras;google;webdriver | Ubuntu | 10 | 20 |
+| | Windows | 28 | 42 |
+| | MacOS | 8 | 59 |
+
+
+
+### License
+The scripts and documentation in this project are released under the [MIT License](LICENSE)
\ No newline at end of file
diff --git a/__tests__/fixture/complex-output.txt b/__tests__/fixture/complex-output.txt
new file mode 100644
index 0000000..602c8ef
--- /dev/null
+++ b/__tests__/fixture/complex-output.txt
@@ -0,0 +1,92 @@
+Loading package information...
+Loading local repository...
+[========= ] 25% Loading local repository...
+[========= ] 25% Fetch remote repository...
+[========= ] 25% Fetch remote repository...
+[============= ] 34% Fetch remote repository...
+[================ ] 42% Fetch remote repository...
+
+[================ ] 42% Fetch remote repository...
+Warning: File C:\Users\runneradmin\.android\repositories.cfg could not be loaded.
+[================= ] 43% Fetch remote repository...
+[================== ] 46% Fetch remote repository...
+[================== ] 47% Fetch remote repository...
+[================== ] 47% Fetch remote repository...
+[=================== ] 48% Fetch remote repository...
+[=================== ] 49% Fetch remote repository...
+[=================== ] 50% Fetch remote repository...
+[==================== ] 50% Fetch remote repository...
+[==================== ] 51% Fetch remote repository...
+[==================== ] 52% Fetch remote repository...
+[==================== ] 53% Fetch remote repository...
+[===================== ] 53% Fetch remote repository...
+[===================== ] 54% Fetch remote repository...
+[===================== ] 55% Fetch remote repository...
+[====================== ] 56% Fetch remote repository...
+[====================== ] 56% Fetch remote repository...
+[====================== ] 57% Fetch remote repository...
+[======================= ] 58% Fetch remote repository...
+[======================= ] 59% Fetch remote repository...
+[======================= ] 59% Fetch remote repository...
+[======================== ] 60% Fetch remote repository...
+[======================== ] 60% Computing updates...
+[============================= ] 75% Computing updates...
+[============================= ] 75% Computing updates...
+[=======================================] 100% Computing updates...
+Installed packages:
+ Path | Version | Description | Location
+ ------- | ------- | ------- | -------
+ add-ons;addon-google_apis-google-23 | 1 | Google APIs | add-ons\addon-google_apis-google-23\
+ add-ons;addon-google_apis-google-24 | 1 | Google APIs | add-ons\addon-google_apis-google-24\
+ build-tools;29.0.3 | 29.0.3 | Android SDK Build-Tools 29.0.3 | build-tools\29.0.3\
+ build-tools;30.0.0 | 30.0.0 | Android SDK Build-Tools 30 | build-tools\30.0.0\
+ cmake;3.10.2.4988404 | 3.10.2 | CMake 3.10.2.4988404 | cmake\3.10.2.4988404\
+ cmake;3.6.4111459 | 3.6.4111459 | CMake 3.6.4111459 | cmake\3.6.4111459\
+ extras;google;m2repository | 58 | Google Repository | extras\google\m2repository\
+ extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2 | 1 | Solver for ConstraintLayout 1.0.2 | extras\m2repository\com\android\support\constraint\constraint-layout-solver\1.0.2\
+ extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2 | 1 | ConstraintLayout for Android 1.0.2 | extras\m2repository\com\android\support\constraint\constraint-layout\1.0.2\
+ ndk-bundle | 21.3.6528147 | NDK | ndk-bundle\
+ patcher;v4 | 1 | SDK Patch Applier v4 | patcher\v4\
+ platform-tools | 30.0.4 | Android SDK Platform-Tools | platform-tools\
+ platforms;android-29 | 4 | Android SDK Platform 29 | platforms\android-29\
+ platforms;android-30 | 2 | Android SDK Platform 30 | platforms\android-30\
+ tools | 26.1.1 | Android SDK Tools 26.1.1 | tools\
+
+Available Packages:
+ Path | Version | Description
+ ------- | ------- | -------
+ add-ons;addon-google_apis-google-22 | 1 | Google APIs
+ add-ons;addon-google_apis-google-23 | 1 | Google APIs
+ add-ons;addon-google_apis-google-24 | 1 | Google APIs
+ build-tools;19.1.0 | 19.1.0 | Android SDK Build-Tools 19.1
+ build-tools;29.0.2 | 29.0.2 | Android SDK Build-Tools 29.0.2
+ build-tools;29.0.3 | 29.0.3 | Android SDK Build-Tools 29.0.3
+ build-tools;30.0.0 | 30.0.0 | Android SDK Build-Tools 30
+ build-tools;30.0.1 | 30.0.1 | Android SDK Build-Tools 30.0.1
+ cmake;3.10.2.4988404 | 3.10.2 | CMake 3.10.2.4988404
+ cmake;3.6.4111459 | 3.6.4111459 | CMake 3.6.4111459
+ cmdline-tools;latest | 2.1 | Android SDK Command-line Tools (latest)
+ emulator | 30.0.12 | Android Emulator
+ extras;google;m2repository | 58 | Google Repository
+ extras;intel;Hardware_Accelerated_Execution_Manager | 7.5.6 | Intel x86 Emulator Accelerator (HAXM installer)
+ extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1 | 1 | Solver for ConstraintLayout 1.0.1
+ extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2 | 1 | Solver for ConstraintLayout 1.0.2
+ extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1 | 1 | ConstraintLayout for Android 1.0.1
+ extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2 | 1 | ConstraintLayout for Android 1.0.2
+ ndk-bundle | 21.4.6528148 | NDK
+ ndk;19.2.5345600 | 19.2.5345600 | NDK (Side by side) 19.2.5345600
+ ndk;21.2.6472646 | 21.2.6472646 | NDK (Side by side) 21.2.6472646
+ ndk;21.3.6528147 | 21.3.6528147 | NDK (Side by side) 21.3.6528147
+ patcher;v4 | 1 | SDK Patch Applier v4
+ platform-tools | 30.0.4 | Android SDK Platform-Tools
+ platforms;android-28 | 6 | Android SDK Platform 28
+ platforms;android-29 | 5 | Android SDK Platform 29
+ platforms;android-30 | 2 | Android SDK Platform 30
+ system-images;android-30;google_apis;x86 | 7 | Google APIs Intel x86 Atom System Image
+ system-images;android-30;google_apis;x86_64 | 7 | Google APIs Intel x86 Atom_64 System Image
+
+Available Updates:
+ ID | Installed | Available
+ ------- | ------- | -------
+ platforms;android-29 | 4 | 5
+ ndk-bundle | 21.3.6528147 | 21.4.6528148
\ No newline at end of file
diff --git a/__tests__/fixture/package-update.txt b/__tests__/fixture/package-update.txt
new file mode 100644
index 0000000..d5c5a7e
--- /dev/null
+++ b/__tests__/fixture/package-update.txt
@@ -0,0 +1,18 @@
+Loading package information...
+
+Installed packages:
+ Path | Version | Description | Location
+ ------- | ------- | ------- | -------
+ platforms;android-29 | 4 | Android Platform Tools 29 | platforms\\android-29\\
+ build-tools;28.0.2 | 28.0.2 | Android SDK Build-Tools 28.0.2 | build-tools\\28.0.2\\
+Available Packages:
+ Path | Version | Description
+ ------- | ------- | -------
+ ndk-bundle | 21.3.6528147 | NDK
+ platforms;android-29 | 5 | Android Platform Tools 29
+ build-tools;28.0.2 | 28.0.2 | Android SDK Build-Tools 28.0.2
+
+Available Updates:
+ ID | Installed | Available
+ ------- | ------- | -------
+ platforms;android-29 | 4 | 5
\ No newline at end of file
diff --git a/__tests__/fixture/simple-output.txt b/__tests__/fixture/simple-output.txt
new file mode 100644
index 0000000..ac317ac
--- /dev/null
+++ b/__tests__/fixture/simple-output.txt
@@ -0,0 +1,16 @@
+Loading package information...
+[========= ] 25% Loading local repository...
+[==============] 100% Computing updates...
+Installed packages:
+Path | Version | Description | Location
+------- | ------- | ------- | -------
+add-ons;addon-google_apis-google-21 | 1 | Google APIs | add-ons\\addon-google_apis-google-21\\
+platforms;android-29 | 4 | Android Platform Tools 29 | platforms\\android-29\\
+build-tools;28.0.2 | 28.0.2 | Android SDK Build-Tools 28.0.2 | build-tools\\28.0.2\\
+Available Packages:
+Path | Version | Description
+------- | ------- | -------
+add-ons;addon-google_apis-google-21 | 1 | Google APIs
+ndk-bundle | 21.3.6528147 | NDK
+platforms;android-29 | 4 | Android Platform Tools 29
+build-tools;28.0.2 | 28.0.2 | Android SDK Build-Tools 28.0.2
\ No newline at end of file
diff --git a/__tests__/fixture/unknown-section.txt b/__tests__/fixture/unknown-section.txt
new file mode 100644
index 0000000..25b91c6
--- /dev/null
+++ b/__tests__/fixture/unknown-section.txt
@@ -0,0 +1,21 @@
+Loading package information...
+[========= ] 25% Loading local repository...
+[==============] 100% Computing updates...
+Installed packages:
+ Path | Version | Description | Location
+ ------- | ------- | ------- | -------
+ build-tools;28.0.2 | 28.0.2 | Android SDK Build-Tools 28.0.2 | build-tools\\28.0.2\\
+Available Packages:
+ Path | Version | Description
+ ------- | ------- | -------
+ ndk-bundle | 21.3.6528147 | NDK
+
+Secret unknown section:
+ Path | Version | Description
+ ------- | ------- | -------
+ ndk-preview | 21.3.6528147 | NDK
+
+Available Updates:
+ ID | Installed | Available
+ ------- | ------- | -------
+ ndk-bundle | 21.3.6528147 | 21.4.6528147
\ No newline at end of file
diff --git a/__tests__/sdk-manager-parser.test.ts b/__tests__/sdk-manager-parser.test.ts
new file mode 100644
index 0000000..80965d3
--- /dev/null
+++ b/__tests__/sdk-manager-parser.test.ts
@@ -0,0 +1,107 @@
+import * as fs from "fs";
+import * as path from "path";
+import { getNewState, parseSDKManagerOutput, AndroidPackageInfo } from "../src/sdk-manager-parser";
+import { splitByEOL } from "../src/utils";
+
+describe("getNewState", () => {
+ it.each([
+ ["Installed packages:", "InstalledPackages"],
+ ["Available Packages:", "AvailablePackages"],
+ ["Available Updates:", "AvailableUpdates"],
+ ["Obsoleted packages:", "None"],
+ ["Loading local repository...", null],
+ ["[========= ] 25% Loading local repository..", null],
+ ["Path | Version | Description", null],
+ ["build-tools;22.0.1 | 22.0.1 | Android SDK Build-Tools 22.0.1 | build-tools\\22.0.1", null]
+ ] as [string, string | null][])("'%s' -> '%s'", (input: string, expected: string | null) => {
+ const actual = getNewState(input);
+ expect(actual).toBe(expected);
+ });
+});
+
+describe("splitByEOL", () => {
+ it("split by \\r \\n", () => {
+ const input = "Hello\rworld\nGood morning";
+ const expected = ["Hello", "world", "Good morning"];
+ const actual = splitByEOL(input);
+ expect(actual).toEqual(expected);
+ });
+});
+
+describe("parseSDKManagerOutput", () => {
+ const getInputFromFile = (filename: string): string => {
+ const testInputPath = path.join(__dirname, "fixture", filename);
+ return fs.readFileSync(testInputPath).toString();
+ };
+
+ it("simple case", () => {
+ const input = getInputFromFile("simple-output.txt");
+ const expected: AndroidPackageInfo[] = [
+ { name: "add-ons;addon-google_apis-google-21", localVersion: "1", remoteVersion: "1", description: "Google APIs", installed: true, update: false },
+ { name: "build-tools;28.0.2", localVersion: "28.0.2", remoteVersion: "28.0.2", description: "Android SDK Build-Tools 28.0.2", installed: true, update: false },
+ { name: "ndk-bundle", localVersion: "", remoteVersion: "21.3.6528147", description: "NDK", installed: false, update: false },
+ { name: "platforms;android-29", localVersion: "4", remoteVersion: "4", description: "Android Platform Tools 29", installed: true, update: false },
+ ];
+ const actual = parseSDKManagerOutput(input);
+ expect(actual).toEqual(expected);
+ });
+
+ it("duplicate package in available and installed", () => {
+ const input = getInputFromFile("package-update.txt");
+ const expected: AndroidPackageInfo[] = [
+ { name: "build-tools;28.0.2", localVersion: "28.0.2", remoteVersion: "28.0.2", description: "Android SDK Build-Tools 28.0.2", installed: true, update: false },
+ { name: "ndk-bundle", localVersion: "", remoteVersion: "21.3.6528147", description: "NDK", installed: false, update: false },
+ { name: "platforms;android-29", localVersion: "4", remoteVersion: "5", description: "Android Platform Tools 29", installed: true, update: true },
+ ];
+ const actual = parseSDKManagerOutput(input);
+ expect(actual).toEqual(expected);
+ });
+
+ it("unknown section", () => {
+ const input = getInputFromFile("unknown-section.txt");
+ const expected: AndroidPackageInfo[] = [
+ { name: "build-tools;28.0.2", localVersion: "28.0.2", remoteVersion: "", description: "Android SDK Build-Tools 28.0.2", installed: true, update: false },
+ { name: "ndk-bundle", localVersion: "21.3.6528147", remoteVersion: "21.4.6528147", description: "NDK", installed: true, update: true },
+ ];
+ const actual = parseSDKManagerOutput(input);
+ expect(actual).toEqual(expected);
+ });
+
+ it("real windows case", () => {
+ const input = getInputFromFile("complex-output.txt");
+ const expected = [
+ { name: "add-ons;addon-google_apis-google-22", localVersion: "", remoteVersion: "1", description: "Google APIs", installed: false, update: false },
+ { name: "add-ons;addon-google_apis-google-23", localVersion: "1", remoteVersion: "1", description: "Google APIs", installed: true, update: false },
+ { name: "add-ons;addon-google_apis-google-24", localVersion: "1", remoteVersion: "1", description: "Google APIs", installed: true, update: false },
+ { name: "build-tools;19.1.0", localVersion: "", remoteVersion: "19.1.0", description: "Android SDK Build-Tools 19.1", installed: false, update: false },
+ { name: "build-tools;29.0.2", localVersion: "", remoteVersion: "29.0.2", description: "Android SDK Build-Tools 29.0.2", installed: false, update: false },
+ { name: "build-tools;29.0.3", localVersion: "29.0.3", remoteVersion: "29.0.3", description: "Android SDK Build-Tools 29.0.3", installed: true, update: false },
+ { name: "build-tools;30.0.0", localVersion: "30.0.0", remoteVersion: "30.0.0", description: "Android SDK Build-Tools 30", installed: true, update: false },
+ { name: "build-tools;30.0.1", localVersion: "", remoteVersion: "30.0.1", description: "Android SDK Build-Tools 30.0.1", installed: false, update: false },
+ { name: "cmake;3.10.2.4988404", localVersion: "3.10.2", remoteVersion: "3.10.2", description: "CMake 3.10.2.4988404", installed: true, update: false },
+ { name: "cmake;3.6.4111459", localVersion: "3.6.4111459", remoteVersion: "3.6.4111459", description: "CMake 3.6.4111459", installed: true, update: false },
+ { name: "cmdline-tools;latest", localVersion: "", remoteVersion: "2.1", description: "Android SDK Command-line Tools (latest)", installed: false, update: false },
+ { name: "emulator", localVersion: "", remoteVersion: "30.0.12", description: "Android Emulator", installed: false, update: false },
+ { name: "extras;google;m2repository", localVersion: "58", remoteVersion: "58", description: "Google Repository", installed: true, update: false },
+ { name: "extras;intel;Hardware_Accelerated_Execution_Manager", localVersion: "", remoteVersion: "7.5.6", description: "Intel x86 Emulator Accelerator (HAXM installer)", installed: false, update: false },
+ { name: "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1", localVersion: "", remoteVersion: "1", description: "Solver for ConstraintLayout 1.0.1", installed: false, update: false },
+ { name: "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2", localVersion: "1", remoteVersion: "1", description: "Solver for ConstraintLayout 1.0.2", installed: true, update: false },
+ { name: "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1", localVersion: "", remoteVersion: "1", description: "ConstraintLayout for Android 1.0.1", installed: false, update: false },
+ { name: "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2", localVersion: "1", remoteVersion: "1", description: "ConstraintLayout for Android 1.0.2", installed: true, update: false },
+ { name: "ndk-bundle", localVersion: "21.3.6528147", remoteVersion: "21.4.6528148", description: "NDK", installed: true, update: true },
+ { name: "ndk;19.2.5345600", localVersion: "", remoteVersion: "19.2.5345600", description: "NDK (Side by side) 19.2.5345600", installed: false, update: false },
+ { name: "ndk;21.2.6472646", localVersion: "", remoteVersion: "21.2.6472646", description: "NDK (Side by side) 21.2.6472646", installed: false, update: false },
+ { name: "ndk;21.3.6528147", localVersion: "", remoteVersion: "21.3.6528147", description: "NDK (Side by side) 21.3.6528147", installed: false, update: false },
+ { name: "patcher;v4", localVersion: "1", remoteVersion: "1", description: "SDK Patch Applier v4", installed: true, update: false },
+ { name: "platform-tools", localVersion: "30.0.4", remoteVersion: "30.0.4", description: "Android SDK Platform-Tools", installed: true, update: false },
+ { name: "platforms;android-28", localVersion: "", remoteVersion: "6", description: "Android SDK Platform 28", installed: false, update: false },
+ { name: "platforms;android-29", localVersion: "4", remoteVersion: "5", description: "Android SDK Platform 29", installed: true, update: true },
+ { name: "platforms;android-30", localVersion: "2", remoteVersion: "2", description: "Android SDK Platform 30", installed: true, update: false },
+ { name: "system-images;android-30;google_apis;x86", localVersion: "", remoteVersion: "7", description: "Google APIs Intel x86 Atom System Image", installed: false, update: false },
+ { name: "system-images;android-30;google_apis;x86_64", localVersion: "", remoteVersion: "7", description: "Google APIs Intel x86 Atom_64 System Image", installed: false, update: false },
+ { name: "tools", localVersion: "26.1.1", remoteVersion: "", description: "Android SDK Tools 26.1.1", installed: true, update: false },
+ ] as AndroidPackageInfo[];
+ const actual = parseSDKManagerOutput(input);
+ expect(actual).toEqual(expected);
+ });
+});
\ No newline at end of file
diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..89e9d57
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,16 @@
+name: 'Setup Android tools'
+author: 'Maxim Lobanov'
+description: 'Set up Android tools in GitHub Actions workflow with caching'
+inputs:
+ packages:
+ description: 'Packages to install'
+ required: true
+ cache:
+ description: 'Enable caching'
+ required: false
+runs:
+ using: 'node12'
+ main: 'dist/index.js'
+branding:
+ icon: 'package'
+ color: 'yellow'
\ No newline at end of file
diff --git a/dist/index.js b/dist/index.js
new file mode 100644
index 0000000..8dd0bae
--- /dev/null
+++ b/dist/index.js
@@ -0,0 +1,55903 @@
+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
+/******/ var threw = true;
+/******/ try {
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ threw = false;
+/******/ } finally {
+/******/ if(threw) delete installedModules[moduleId];
+/******/ }
+/******/
+/******/ // 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__(994);
+/******/ };
+/******/
+/******/ // run startup
+/******/ return startup();
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */,
+/* 1 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const childProcess = __webpack_require__(129);
+const path = __webpack_require__(622);
+const util_1 = __webpack_require__(669);
+const ioUtil = __webpack_require__(672);
+const exec = util_1.promisify(childProcess.exec);
+/**
+ * Copies a file or folder.
+ * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
+ *
+ * @param source source path
+ * @param dest destination path
+ * @param options optional. See CopyOptions.
+ */
+function cp(source, dest, options = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const { force, recursive } = readCopyOptions(options);
+ const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
+ // Dest is an existing file, but not forcing
+ if (destStat && destStat.isFile() && !force) {
+ return;
+ }
+ // If dest is an existing directory, should copy inside.
+ const newDest = destStat && destStat.isDirectory()
+ ? path.join(dest, path.basename(source))
+ : dest;
+ if (!(yield ioUtil.exists(source))) {
+ throw new Error(`no such file or directory: ${source}`);
+ }
+ const sourceStat = yield ioUtil.stat(source);
+ if (sourceStat.isDirectory()) {
+ if (!recursive) {
+ throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`);
+ }
+ else {
+ yield cpDirRecursive(source, newDest, 0, force);
+ }
+ }
+ else {
+ if (path.relative(source, newDest) === '') {
+ // a file cannot be copied to itself
+ throw new Error(`'${newDest}' and '${source}' are the same file`);
+ }
+ yield copyFile(source, newDest, force);
+ }
+ });
+}
+exports.cp = cp;
+/**
+ * Moves a path.
+ *
+ * @param source source path
+ * @param dest destination path
+ * @param options optional. See MoveOptions.
+ */
+function mv(source, dest, options = {}) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (yield ioUtil.exists(dest)) {
+ let destExists = true;
+ if (yield ioUtil.isDirectory(dest)) {
+ // If dest is directory copy src into dest
+ dest = path.join(dest, path.basename(source));
+ destExists = yield ioUtil.exists(dest);
+ }
+ if (destExists) {
+ if (options.force == null || options.force) {
+ yield rmRF(dest);
+ }
+ else {
+ throw new Error('Destination already exists');
+ }
+ }
+ }
+ yield mkdirP(path.dirname(dest));
+ yield ioUtil.rename(source, dest);
+ });
+}
+exports.mv = mv;
+/**
+ * Remove a path recursively with force
+ *
+ * @param inputPath path to remove
+ */
+function rmRF(inputPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (ioUtil.IS_WINDOWS) {
+ // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
+ // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
+ try {
+ if (yield ioUtil.isDirectory(inputPath, true)) {
+ yield exec(`rd /s /q "${inputPath}"`);
+ }
+ else {
+ yield exec(`del /f /a "${inputPath}"`);
+ }
+ }
+ catch (err) {
+ // if you try to delete a file that doesn't exist, desired result is achieved
+ // other errors are valid
+ if (err.code !== 'ENOENT')
+ throw err;
+ }
+ // Shelling out fails to remove a symlink folder with missing source, this unlink catches that
+ try {
+ yield ioUtil.unlink(inputPath);
+ }
+ catch (err) {
+ // if you try to delete a file that doesn't exist, desired result is achieved
+ // other errors are valid
+ if (err.code !== 'ENOENT')
+ throw err;
+ }
+ }
+ else {
+ let isDir = false;
+ try {
+ isDir = yield ioUtil.isDirectory(inputPath);
+ }
+ catch (err) {
+ // if you try to delete a file that doesn't exist, desired result is achieved
+ // other errors are valid
+ if (err.code !== 'ENOENT')
+ throw err;
+ return;
+ }
+ if (isDir) {
+ yield exec(`rm -rf "${inputPath}"`);
+ }
+ else {
+ yield ioUtil.unlink(inputPath);
+ }
+ }
+ });
+}
+exports.rmRF = rmRF;
+/**
+ * Make a directory. Creates the full path with folders in between
+ * Will throw if it fails
+ *
+ * @param fsPath path to create
+ * @returns Promise
+ */
+function mkdirP(fsPath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield ioUtil.mkdirP(fsPath);
+ });
+}
+exports.mkdirP = mkdirP;
+/**
+ * Returns path of a tool had the tool actually been invoked. Resolves via paths.
+ * If you check and the tool does not exist, it will throw.
+ *
+ * @param tool name of the tool
+ * @param check whether to check if tool exists
+ * @returns Promise path to tool
+ */
+function which(tool, check) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!tool) {
+ throw new Error("parameter 'tool' is required");
+ }
+ // recursive when check=true
+ if (check) {
+ const result = yield which(tool, false);
+ if (!result) {
+ if (ioUtil.IS_WINDOWS) {
+ throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`);
+ }
+ else {
+ throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
+ }
+ }
+ }
+ try {
+ // build the list of extensions to try
+ const extensions = [];
+ if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
+ for (const extension of process.env.PATHEXT.split(path.delimiter)) {
+ if (extension) {
+ extensions.push(extension);
+ }
+ }
+ }
+ // if it's rooted, return it if exists. otherwise return empty.
+ if (ioUtil.isRooted(tool)) {
+ const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
+ if (filePath) {
+ return filePath;
+ }
+ return '';
+ }
+ // if any path separators, return empty
+ if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
+ return '';
+ }
+ // build the list of directories
+ //
+ // Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
+ // it feels like we should not do this. Checking the current directory seems like more of a use
+ // case of a shell, and the which() function exposed by the toolkit should strive for consistency
+ // across platforms.
+ const directories = [];
+ if (process.env.PATH) {
+ for (const p of process.env.PATH.split(path.delimiter)) {
+ if (p) {
+ directories.push(p);
+ }
+ }
+ }
+ // return the first match
+ for (const directory of directories) {
+ const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
+ if (filePath) {
+ return filePath;
+ }
+ }
+ return '';
+ }
+ catch (err) {
+ throw new Error(`which failed with message ${err.message}`);
+ }
+ });
+}
+exports.which = which;
+function readCopyOptions(options) {
+ const force = options.force == null ? true : options.force;
+ const recursive = Boolean(options.recursive);
+ return { force, recursive };
+}
+function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Ensure there is not a run away recursive copy
+ if (currentDepth >= 255)
+ return;
+ currentDepth++;
+ yield mkdirP(destDir);
+ const files = yield ioUtil.readdir(sourceDir);
+ for (const fileName of files) {
+ const srcFile = `${sourceDir}/${fileName}`;
+ const destFile = `${destDir}/${fileName}`;
+ const srcFileStat = yield ioUtil.lstat(srcFile);
+ if (srcFileStat.isDirectory()) {
+ // Recurse
+ yield cpDirRecursive(srcFile, destFile, currentDepth, force);
+ }
+ else {
+ yield copyFile(srcFile, destFile, force);
+ }
+ }
+ // Change the mode for the newly created directory
+ yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode);
+ });
+}
+// Buffered file copy
+function copyFile(srcFile, destFile, force) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) {
+ // unlink/re-link it
+ try {
+ yield ioUtil.lstat(destFile);
+ yield ioUtil.unlink(destFile);
+ }
+ catch (e) {
+ // Try to override file permission
+ if (e.code === 'EPERM') {
+ yield ioUtil.chmod(destFile, '0666');
+ yield ioUtil.unlink(destFile);
+ }
+ // other errors = it doesn't exist, no work to do
+ }
+ // Copy over symlink
+ const symlinkFull = yield ioUtil.readlink(srcFile);
+ yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null);
+ }
+ else if (!(yield ioUtil.exists(destFile)) || force) {
+ yield ioUtil.copyFile(srcFile, destFile);
+ }
+ });
+}
+//# sourceMappingURL=io.js.map
+
+/***/ }),
+/* 2 */
+/***/ (function(__unusedmodule, exports) {
+
+"use strict";
+
+/*
+ * Copyright 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.defaultGetter = void 0;
+/**
+ * Default getter which just does a simple property access. Returns
+ * undefined if the key is not set.
+ *
+ * @param carrier
+ * @param key
+ */
+function defaultGetter(carrier, key) {
+ return carrier[key];
+}
+exports.defaultGetter = defaultGetter;
+//# sourceMappingURL=getter.js.map
+
+/***/ }),
+/* 3 */,
+/* 4 */,
+/* 5 */,
+/* 6 */,
+/* 7 */,
+/* 8 */,
+/* 9 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = __importStar(__webpack_require__(87));
+const events = __importStar(__webpack_require__(614));
+const child = __importStar(__webpack_require__(129));
+const path = __importStar(__webpack_require__(622));
+const io = __importStar(__webpack_require__(1));
+const ioUtil = __importStar(__webpack_require__(672));
+/* eslint-disable @typescript-eslint/unbound-method */
+const IS_WINDOWS = process.platform === 'win32';
+/*
+ * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
+ */
+class ToolRunner extends events.EventEmitter {
+ constructor(toolPath, args, options) {
+ super();
+ if (!toolPath) {
+ throw new Error("Parameter 'toolPath' cannot be null or empty.");
+ }
+ this.toolPath = toolPath;
+ this.args = args || [];
+ this.options = options || {};
+ }
+ _debug(message) {
+ if (this.options.listeners && this.options.listeners.debug) {
+ this.options.listeners.debug(message);
+ }
+ }
+ _getCommandString(options, noPrefix) {
+ const toolPath = this._getSpawnFileName();
+ const args = this._getSpawnArgs(options);
+ let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
+ if (IS_WINDOWS) {
+ // Windows + cmd file
+ if (this._isCmdFile()) {
+ cmd += toolPath;
+ for (const a of args) {
+ cmd += ` ${a}`;
+ }
+ }
+ // Windows + verbatim
+ else if (options.windowsVerbatimArguments) {
+ cmd += `"${toolPath}"`;
+ for (const a of args) {
+ cmd += ` ${a}`;
+ }
+ }
+ // Windows (regular)
+ else {
+ cmd += this._windowsQuoteCmdArg(toolPath);
+ for (const a of args) {
+ cmd += ` ${this._windowsQuoteCmdArg(a)}`;
+ }
+ }
+ }
+ else {
+ // OSX/Linux - this can likely be improved with some form of quoting.
+ // creating processes on Unix is fundamentally different than Windows.
+ // on Unix, execvp() takes an arg array.
+ cmd += toolPath;
+ for (const a of args) {
+ cmd += ` ${a}`;
+ }
+ }
+ return cmd;
+ }
+ _processLineBuffer(data, strBuffer, onLine) {
+ try {
+ let s = strBuffer + data.toString();
+ let n = s.indexOf(os.EOL);
+ while (n > -1) {
+ const line = s.substring(0, n);
+ onLine(line);
+ // the rest of the string ...
+ s = s.substring(n + os.EOL.length);
+ n = s.indexOf(os.EOL);
+ }
+ strBuffer = s;
+ }
+ catch (err) {
+ // streaming lines to console is best effort. Don't fail a build.
+ this._debug(`error processing line. Failed with error ${err}`);
+ }
+ }
+ _getSpawnFileName() {
+ if (IS_WINDOWS) {
+ if (this._isCmdFile()) {
+ return process.env['COMSPEC'] || 'cmd.exe';
+ }
+ }
+ return this.toolPath;
+ }
+ _getSpawnArgs(options) {
+ if (IS_WINDOWS) {
+ if (this._isCmdFile()) {
+ let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;
+ for (const a of this.args) {
+ argline += ' ';
+ argline += options.windowsVerbatimArguments
+ ? a
+ : this._windowsQuoteCmdArg(a);
+ }
+ argline += '"';
+ return [argline];
+ }
+ }
+ return this.args;
+ }
+ _endsWith(str, end) {
+ return str.endsWith(end);
+ }
+ _isCmdFile() {
+ const upperToolPath = this.toolPath.toUpperCase();
+ return (this._endsWith(upperToolPath, '.CMD') ||
+ this._endsWith(upperToolPath, '.BAT'));
+ }
+ _windowsQuoteCmdArg(arg) {
+ // for .exe, apply the normal quoting rules that libuv applies
+ if (!this._isCmdFile()) {
+ return this._uvQuoteCmdArg(arg);
+ }
+ // otherwise apply quoting rules specific to the cmd.exe command line parser.
+ // the libuv rules are generic and are not designed specifically for cmd.exe
+ // command line parser.
+ //
+ // for a detailed description of the cmd.exe command line parser, refer to
+ // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912
+ // need quotes for empty arg
+ if (!arg) {
+ return '""';
+ }
+ // determine whether the arg needs to be quoted
+ const cmdSpecialChars = [
+ ' ',
+ '\t',
+ '&',
+ '(',
+ ')',
+ '[',
+ ']',
+ '{',
+ '}',
+ '^',
+ '=',
+ ';',
+ '!',
+ "'",
+ '+',
+ ',',
+ '`',
+ '~',
+ '|',
+ '<',
+ '>',
+ '"'
+ ];
+ let needsQuotes = false;
+ for (const char of arg) {
+ if (cmdSpecialChars.some(x => x === char)) {
+ needsQuotes = true;
+ break;
+ }
+ }
+ // short-circuit if quotes not needed
+ if (!needsQuotes) {
+ return arg;
+ }
+ // the following quoting rules are very similar to the rules that by libuv applies.
+ //
+ // 1) wrap the string in quotes
+ //
+ // 2) double-up quotes - i.e. " => ""
+ //
+ // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately
+ // doesn't work well with a cmd.exe command line.
+ //
+ // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app.
+ // for example, the command line:
+ // foo.exe "myarg:""my val"""
+ // is parsed by a .NET console app into an arg array:
+ // [ "myarg:\"my val\"" ]
+ // which is the same end result when applying libuv quoting rules. although the actual
+ // command line from libuv quoting rules would look like:
+ // foo.exe "myarg:\"my val\""
+ //
+ // 3) double-up slashes that precede a quote,
+ // e.g. hello \world => "hello \world"
+ // hello\"world => "hello\\""world"
+ // hello\\"world => "hello\\\\""world"
+ // hello world\ => "hello world\\"
+ //
+ // technically this is not required for a cmd.exe command line, or the batch argument parser.
+ // the reasons for including this as a .cmd quoting rule are:
+ //
+ // a) this is optimized for the scenario where the argument is passed from the .cmd file to an
+ // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule.
+ //
+ // b) it's what we've been doing previously (by deferring to node default behavior) and we
+ // haven't heard any complaints about that aspect.
+ //
+ // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be
+ // escaped when used on the command line directly - even though within a .cmd file % can be escaped
+ // by using %%.
+ //
+ // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts
+ // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing.
+ //
+ // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would
+ // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the
+ // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args
+ // to an external program.
+ //
+ // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file.
+ // % can be escaped within a .cmd file.
+ let reverse = '"';
+ let quoteHit = true;
+ for (let i = arg.length; i > 0; i--) {
+ // walk the string in reverse
+ reverse += arg[i - 1];
+ if (quoteHit && arg[i - 1] === '\\') {
+ reverse += '\\'; // double the slash
+ }
+ else if (arg[i - 1] === '"') {
+ quoteHit = true;
+ reverse += '"'; // double the quote
+ }
+ else {
+ quoteHit = false;
+ }
+ }
+ reverse += '"';
+ return reverse
+ .split('')
+ .reverse()
+ .join('');
+ }
+ _uvQuoteCmdArg(arg) {
+ // Tool runner wraps child_process.spawn() and needs to apply the same quoting as
+ // Node in certain cases where the undocumented spawn option windowsVerbatimArguments
+ // is used.
+ //
+ // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV,
+ // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details),
+ // pasting copyright notice from Node within this function:
+ //
+ // Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to
+ // deal in the Software without restriction, including without limitation the
+ // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ // sell copies of the Software, and to permit persons to whom the Software is
+ // furnished to do so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in
+ // all copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ // IN THE SOFTWARE.
+ if (!arg) {
+ // Need double quotation for empty argument
+ return '""';
+ }
+ if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) {
+ // No quotation needed
+ return arg;
+ }
+ if (!arg.includes('"') && !arg.includes('\\')) {
+ // No embedded double quotes or backslashes, so I can just wrap
+ // quote marks around the whole thing.
+ return `"${arg}"`;
+ }
+ // Expected input/output:
+ // input : hello"world
+ // output: "hello\"world"
+ // input : hello""world
+ // output: "hello\"\"world"
+ // input : hello\world
+ // output: hello\world
+ // input : hello\\world
+ // output: hello\\world
+ // input : hello\"world
+ // output: "hello\\\"world"
+ // input : hello\\"world
+ // output: "hello\\\\\"world"
+ // input : hello world\
+ // output: "hello world\\" - note the comment in libuv actually reads "hello world\"
+ // but it appears the comment is wrong, it should be "hello world\\"
+ let reverse = '"';
+ let quoteHit = true;
+ for (let i = arg.length; i > 0; i--) {
+ // walk the string in reverse
+ reverse += arg[i - 1];
+ if (quoteHit && arg[i - 1] === '\\') {
+ reverse += '\\';
+ }
+ else if (arg[i - 1] === '"') {
+ quoteHit = true;
+ reverse += '\\';
+ }
+ else {
+ quoteHit = false;
+ }
+ }
+ reverse += '"';
+ return reverse
+ .split('')
+ .reverse()
+ .join('');
+ }
+ _cloneExecOptions(options) {
+ options = options || {};
+ const result = {
+ cwd: options.cwd || process.cwd(),
+ env: options.env || process.env,
+ silent: options.silent || false,
+ windowsVerbatimArguments: options.windowsVerbatimArguments || false,
+ failOnStdErr: options.failOnStdErr || false,
+ ignoreReturnCode: options.ignoreReturnCode || false,
+ delay: options.delay || 10000
+ };
+ result.outStream = options.outStream || process.stdout;
+ result.errStream = options.errStream || process.stderr;
+ return result;
+ }
+ _getSpawnOptions(options, toolPath) {
+ options = options || {};
+ const result = {};
+ result.cwd = options.cwd;
+ result.env = options.env;
+ result['windowsVerbatimArguments'] =
+ options.windowsVerbatimArguments || this._isCmdFile();
+ if (options.windowsVerbatimArguments) {
+ result.argv0 = `"${toolPath}"`;
+ }
+ return result;
+ }
+ /**
+ * Exec a tool.
+ * Output will be streamed to the live console.
+ * Returns promise with return code
+ *
+ * @param tool path to tool to exec
+ * @param options optional exec options. See ExecOptions
+ * @returns number
+ */
+ exec() {
+ return __awaiter(this, void 0, void 0, function* () {
+ // root the tool path if it is unrooted and contains relative pathing
+ if (!ioUtil.isRooted(this.toolPath) &&
+ (this.toolPath.includes('/') ||
+ (IS_WINDOWS && this.toolPath.includes('\\')))) {
+ // prefer options.cwd if it is specified, however options.cwd may also need to be rooted
+ this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath);
+ }
+ // if the tool is only a file name, then resolve it from the PATH
+ // otherwise verify it exists (add extension on Windows if necessary)
+ this.toolPath = yield io.which(this.toolPath, true);
+ return new Promise((resolve, reject) => {
+ this._debug(`exec tool: ${this.toolPath}`);
+ this._debug('arguments:');
+ for (const arg of this.args) {
+ this._debug(` ${arg}`);
+ }
+ const optionsNonNull = this._cloneExecOptions(this.options);
+ if (!optionsNonNull.silent && optionsNonNull.outStream) {
+ optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL);
+ }
+ const state = new ExecState(optionsNonNull, this.toolPath);
+ state.on('debug', (message) => {
+ this._debug(message);
+ });
+ const fileName = this._getSpawnFileName();
+ const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName));
+ const stdbuffer = '';
+ if (cp.stdout) {
+ cp.stdout.on('data', (data) => {
+ if (this.options.listeners && this.options.listeners.stdout) {
+ this.options.listeners.stdout(data);
+ }
+ if (!optionsNonNull.silent && optionsNonNull.outStream) {
+ optionsNonNull.outStream.write(data);
+ }
+ this._processLineBuffer(data, stdbuffer, (line) => {
+ if (this.options.listeners && this.options.listeners.stdline) {
+ this.options.listeners.stdline(line);
+ }
+ });
+ });
+ }
+ const errbuffer = '';
+ if (cp.stderr) {
+ cp.stderr.on('data', (data) => {
+ state.processStderr = true;
+ if (this.options.listeners && this.options.listeners.stderr) {
+ this.options.listeners.stderr(data);
+ }
+ if (!optionsNonNull.silent &&
+ optionsNonNull.errStream &&
+ optionsNonNull.outStream) {
+ const s = optionsNonNull.failOnStdErr
+ ? optionsNonNull.errStream
+ : optionsNonNull.outStream;
+ s.write(data);
+ }
+ this._processLineBuffer(data, errbuffer, (line) => {
+ if (this.options.listeners && this.options.listeners.errline) {
+ this.options.listeners.errline(line);
+ }
+ });
+ });
+ }
+ cp.on('error', (err) => {
+ state.processError = err.message;
+ state.processExited = true;
+ state.processClosed = true;
+ state.CheckComplete();
+ });
+ cp.on('exit', (code) => {
+ state.processExitCode = code;
+ state.processExited = true;
+ this._debug(`Exit code ${code} received from tool '${this.toolPath}'`);
+ state.CheckComplete();
+ });
+ cp.on('close', (code) => {
+ state.processExitCode = code;
+ state.processExited = true;
+ state.processClosed = true;
+ this._debug(`STDIO streams have closed for tool '${this.toolPath}'`);
+ state.CheckComplete();
+ });
+ state.on('done', (error, exitCode) => {
+ if (stdbuffer.length > 0) {
+ this.emit('stdline', stdbuffer);
+ }
+ if (errbuffer.length > 0) {
+ this.emit('errline', errbuffer);
+ }
+ cp.removeAllListeners();
+ if (error) {
+ reject(error);
+ }
+ else {
+ resolve(exitCode);
+ }
+ });
+ if (this.options.input) {
+ if (!cp.stdin) {
+ throw new Error('child process missing stdin');
+ }
+ cp.stdin.end(this.options.input);
+ }
+ });
+ });
+ }
+}
+exports.ToolRunner = ToolRunner;
+/**
+ * Convert an arg string to an array of args. Handles escaping
+ *
+ * @param argString string of arguments
+ * @returns string[] array of arguments
+ */
+function argStringToArray(argString) {
+ const args = [];
+ let inQuotes = false;
+ let escaped = false;
+ let arg = '';
+ function append(c) {
+ // we only escape double quotes.
+ if (escaped && c !== '"') {
+ arg += '\\';
+ }
+ arg += c;
+ escaped = false;
+ }
+ for (let i = 0; i < argString.length; i++) {
+ const c = argString.charAt(i);
+ if (c === '"') {
+ if (!escaped) {
+ inQuotes = !inQuotes;
+ }
+ else {
+ append(c);
+ }
+ continue;
+ }
+ if (c === '\\' && escaped) {
+ append(c);
+ continue;
+ }
+ if (c === '\\' && inQuotes) {
+ escaped = true;
+ continue;
+ }
+ if (c === ' ' && !inQuotes) {
+ if (arg.length > 0) {
+ args.push(arg);
+ arg = '';
+ }
+ continue;
+ }
+ append(c);
+ }
+ if (arg.length > 0) {
+ args.push(arg.trim());
+ }
+ return args;
+}
+exports.argStringToArray = argStringToArray;
+class ExecState extends events.EventEmitter {
+ constructor(options, toolPath) {
+ super();
+ this.processClosed = false; // tracks whether the process has exited and stdio is closed
+ this.processError = '';
+ this.processExitCode = 0;
+ this.processExited = false; // tracks whether the process has exited
+ this.processStderr = false; // tracks whether stderr was written to
+ this.delay = 10000; // 10 seconds
+ this.done = false;
+ this.timeout = null;
+ if (!toolPath) {
+ throw new Error('toolPath must not be empty');
+ }
+ this.options = options;
+ this.toolPath = toolPath;
+ if (options.delay) {
+ this.delay = options.delay;
+ }
+ }
+ CheckComplete() {
+ if (this.done) {
+ return;
+ }
+ if (this.processClosed) {
+ this._setResult();
+ }
+ else if (this.processExited) {
+ this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this);
+ }
+ }
+ _debug(message) {
+ this.emit('debug', message);
+ }
+ _setResult() {
+ // determine whether there is an error
+ let error;
+ if (this.processExited) {
+ if (this.processError) {
+ error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`);
+ }
+ else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) {
+ error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`);
+ }
+ else if (this.processStderr && this.options.failOnStdErr) {
+ error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`);
+ }
+ }
+ // clear the timeout
+ if (this.timeout) {
+ clearTimeout(this.timeout);
+ this.timeout = null;
+ }
+ this.done = true;
+ this.emit('done', error, this.processExitCode);
+ }
+ static HandleTimeout(state) {
+ if (state.done) {
+ return;
+ }
+ if (!state.processClosed && state.processExited) {
+ const message = `The STDIO streams did not close within ${state.delay /
+ 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;
+ state._debug(message);
+ }
+ state._setResult();
+ }
+}
+//# sourceMappingURL=toolrunner.js.map
+
+/***/ }),
+/* 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 getArchiveFileSizeIsBytes(filePath) {
+ return fs.statSync(filePath).size;
+}
+exports.getArchiveFileSizeIsBytes = getArchiveFileSizeIsBytes;
+function resolvePaths(patterns) {
+ var e_1, _a;
+ var _b;
+ return __awaiter(this, void 0, void 0, function* () {
+ const paths = [];
+ const workspace = (_b = process.env['GITHUB_WORKSPACE']) !== null && _b !== void 0 ? _b : process.cwd();
+ const globber = yield glob.create(patterns.join('\n'), {
+ implicitDescendants: false
+ });
+ try {
+ for (var _c = __asyncValues(globber.globGenerator()), _d; _d = yield _c.next(), !_d.done;) {
+ const file = _d.value;
+ const relativeFile = path.relative(workspace, file);
+ core.debug(`Matched: ${relativeFile}`);
+ // Paths are made relative so the tar entries are all relative to the root of the workspace.
+ paths.push(`${relativeFile}`);
+ }
+ }
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
+ finally {
+ try {
+ if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c);
+ }
+ finally { if (e_1) throw e_1.error; }
+ }
+ return paths;
+ });
+}
+exports.resolvePaths = resolvePaths;
+function unlinkFile(filePath) {
+ return __awaiter(this, void 0, void 0, function* () {
+ return util.promisify(fs.unlink)(filePath);
+ });
+}
+exports.unlinkFile = unlinkFile;
+function getVersion(app) {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.debug(`Checking ${app} --version`);
+ let versionOutput = '';
+ try {
+ yield exec.exec(`${app} --version`, [], {
+ ignoreReturnCode: true,
+ silent: true,
+ listeners: {
+ stdout: (data) => (versionOutput += data.toString()),
+ stderr: (data) => (versionOutput += data.toString())
+ }
+ });
+ }
+ catch (err) {
+ core.debug(err.message);
+ }
+ versionOutput = versionOutput.trim();
+ core.debug(versionOutput);
+ return versionOutput;
+ });
+}
+// Use zstandard if possible to maximize cache performance
+function getCompressionMethod() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (process.platform === 'win32' && !(yield isGnuTarInstalled())) {
+ // Disable zstd due to bug https://github.com/actions/cache/issues/301
+ return constants_1.CompressionMethod.Gzip;
+ }
+ const versionOutput = yield getVersion('zstd');
+ const version = semver.clean(versionOutput);
+ if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
+ // zstd is not installed
+ return constants_1.CompressionMethod.Gzip;
+ }
+ else if (!version || semver.lt(version, 'v1.3.2')) {
+ // zstd is installed but using a version earlier than v1.3.2
+ // v1.3.2 is required to use the `--long` options in zstd
+ return constants_1.CompressionMethod.ZstdWithoutLong;
+ }
+ else {
+ return constants_1.CompressionMethod.Zstd;
+ }
+ });
+}
+exports.getCompressionMethod = getCompressionMethod;
+function getCacheFileName(compressionMethod) {
+ return compressionMethod === constants_1.CompressionMethod.Gzip
+ ? constants_1.CacheFilename.Gzip
+ : constants_1.CacheFilename.Zstd;
+}
+exports.getCacheFileName = getCacheFileName;
+function isGnuTarInstalled() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const versionOutput = yield getVersion('tar');
+ return versionOutput.toLowerCase().includes('gnu tar');
+ });
+}
+exports.isGnuTarInstalled = isGnuTarInstalled;
+function assertDefined(name, value) {
+ if (value === undefined) {
+ throw Error(`Expected ${name} but value was undefiend`);
+ }
+ return value;
+}
+exports.assertDefined = assertDefined;
+//# sourceMappingURL=cacheUtils.js.map
+
+/***/ }),
+/* 16 */
+/***/ (function(module) {
+
+module.exports = require("tls");
+
+/***/ }),
+/* 17 */,
+/* 18 */
+/***/ (function(module) {
+
+module.exports = 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 getter_1 = __webpack_require__(2);
+var NoopHttpTextPropagator_1 = __webpack_require__(744);
+var setter_1 = __webpack_require__(753);
+var context_1 = __webpack_require__(492);
+var global_utils_1 = __webpack_require__(976);
+var contextApi = context_1.ContextAPI.getInstance();
+/**
+ * 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() {
+ }
+ /** 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 the initialized propagator
+ */
+ PropagationAPI.prototype.setGlobalPropagator = function (propagator) {
+ if (global_utils_1._global[global_utils_1.GLOBAL_PROPAGATION_API_KEY]) {
+ // global propagator has already been set
+ return this._getGlobalPropagator();
+ }
+ global_utils_1._global[global_utils_1.GLOBAL_PROPAGATION_API_KEY] = global_utils_1.makeGetter(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION, propagator, NoopHttpTextPropagator_1.NOOP_HTTP_TEXT_PROPAGATOR);
+ return propagator;
+ };
+ /**
+ * Inject context into a carrier to be propagated inter-process
+ *
+ * @param carrier carrier to inject context into
+ * @param setter Function used to set values on the carrier
+ * @param context Context carrying tracing data to inject. Defaults to the currently active context.
+ */
+ PropagationAPI.prototype.inject = function (carrier, setter, context) {
+ if (setter === void 0) { setter = setter_1.defaultSetter; }
+ if (context === void 0) { context = contextApi.active(); }
+ return this._getGlobalPropagator().inject(context, carrier, setter);
+ };
+ /**
+ * Extract context from a carrier
+ *
+ * @param carrier Carrier to extract context from
+ * @param getter Function used to extract keys from a carrier
+ * @param context Context which the newly created context will inherit from. Defaults to the currently active context.
+ */
+ PropagationAPI.prototype.extract = function (carrier, getter, context) {
+ if (getter === void 0) { getter = getter_1.defaultGetter; }
+ if (context === void 0) { context = contextApi.active(); }
+ return this._getGlobalPropagator().extract(context, carrier, getter);
+ };
+ /** Remove the global propagator */
+ PropagationAPI.prototype.disable = function () {
+ delete global_utils_1._global[global_utils_1.GLOBAL_PROPAGATION_API_KEY];
+ };
+ PropagationAPI.prototype._getGlobalPropagator = function () {
+ var _a, _b;
+ return ((_b = (_a = global_utils_1._global[global_utils_1.GLOBAL_PROPAGATION_API_KEY]) === null || _a === void 0 ? void 0 : _a.call(global_utils_1._global, global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== void 0 ? _b : NoopHttpTextPropagator_1.NOOP_HTTP_TEXT_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 */
+/***/ (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=HttpTextPropagator.js.map
+
+/***/ }),
+/* 34 */,
+/* 35 */,
+/* 36 */,
+/* 37 */,
+/* 38 */,
+/* 39 */,
+/* 40 */
+/***/ (function(__unusedmodule, exports) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.EntryTtl = void 0;
+/**
+ * EntryTtl is an integer that represents number of hops an entry can propagate.
+ *
+ * For now, ONLY special values (0 and -1) are supported.
+ */
+var EntryTtl;
+(function (EntryTtl) {
+ /**
+ * NO_PROPAGATION is considered to have local context and is used within the
+ * process it created.
+ */
+ EntryTtl[EntryTtl["NO_PROPAGATION"] = 0] = "NO_PROPAGATION";
+ /** UNLIMITED_PROPAGATION can propagate unlimited hops. */
+ EntryTtl[EntryTtl["UNLIMITED_PROPAGATION"] = -1] = "UNLIMITED_PROPAGATION";
+})(EntryTtl = exports.EntryTtl || (exports.EntryTtl = {}));
+//# sourceMappingURL=EntryValue.js.map
+
+/***/ }),
+/* 41 */,
+/* 42 */,
+/* 43 */
+/***/ (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.ValueType = void 0;
+/** The Type of value. It describes how the data is reported. */
+var ValueType;
+(function (ValueType) {
+ ValueType[ValueType["INT"] = 0] = "INT";
+ ValueType[ValueType["DOUBLE"] = 1] = "DOUBLE";
+})(ValueType = exports.ValueType || (exports.ValueType = {}));
+//# sourceMappingURL=Metric.js.map
+
+/***/ }),
+/* 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) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=trace_state.js.map
+
+/***/ }),
+/* 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 */,
+/* 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 (?:)
+ 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) {
+
+"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
+
+/***/ }),
+/* 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__(422);
+
+var listenersMap = new WeakMap();
+var abortedMap = new WeakMap();
+/**
+ * An aborter instance implements AbortSignal interface, can abort HTTP requests.
+ *
+ * - Call AbortSignal.none to create a new AbortSignal instance that cannot be cancelled.
+ * Use `AbortSignal.none` when you are required to pass a cancellation token but the operation
+ * cannot or will not ever be cancelled.
+ *
+ * @example
+ * // Abort without timeout
+ * await doAsyncWork(AbortSignal.none);
+ *
+ * @export
+ * @class AbortSignal
+ * @implements {AbortSignalLike}
+ */
+var AbortSignal = /** @class */ (function () {
+ function AbortSignal() {
+ /**
+ * onabort event listener.
+ *
+ * @memberof AbortSignal
+ */
+ this.onabort = null;
+ listenersMap.set(this, []);
+ abortedMap.set(this, false);
+ }
+ Object.defineProperty(AbortSignal.prototype, "aborted", {
+ /**
+ * Status of whether aborted or not.
+ *
+ * @readonly
+ * @type {boolean}
+ * @memberof AbortSignal
+ */
+ get: function () {
+ if (!abortedMap.has(this)) {
+ throw new TypeError("Expected `this` to be an instance of AbortSignal.");
+ }
+ return abortedMap.get(this);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(AbortSignal, "none", {
+ /**
+ * Creates a new AbortSignal instance that will never be aborted.
+ *
+ * @readonly
+ * @static
+ * @type {AbortSignal}
+ * @memberof AbortSignal
+ */
+ get: function () {
+ return new AbortSignal();
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * Added new "abort" event listener, only support "abort" event.
+ *
+ * @param {"abort"} _type Only support "abort" event
+ * @param {(this: AbortSignalLike, ev: any) => any} listener
+ * @memberof AbortSignal
+ */
+ AbortSignal.prototype.addEventListener = function (
+ // tslint:disable-next-line:variable-name
+ _type, listener) {
+ if (!listenersMap.has(this)) {
+ throw new TypeError("Expected `this` to be an instance of AbortSignal.");
+ }
+ var listeners = listenersMap.get(this);
+ listeners.push(listener);
+ };
+ /**
+ * Remove "abort" event listener, only support "abort" event.
+ *
+ * @param {"abort"} _type Only support "abort" event
+ * @param {(this: AbortSignalLike, ev: any) => any} listener
+ * @memberof AbortSignal
+ */
+ AbortSignal.prototype.removeEventListener = function (
+ // tslint:disable-next-line:variable-name
+ _type, listener) {
+ if (!listenersMap.has(this)) {
+ throw new TypeError("Expected `this` to be an instance of AbortSignal.");
+ }
+ var listeners = listenersMap.get(this);
+ var index = listeners.indexOf(listener);
+ if (index > -1) {
+ listeners.splice(index, 1);
+ }
+ };
+ /**
+ * Dispatches a synthetic event to the AbortSignal.
+ */
+ AbortSignal.prototype.dispatchEvent = function (_event) {
+ throw new Error("This is a stub dispatchEvent implementation that should not be used. It only exists for type-checking purposes.");
+ };
+ return AbortSignal;
+}());
+/**
+ * Helper to trigger an abort event immediately, the onabort and all abort event listeners will be triggered.
+ * Will try to trigger abort event for all linked AbortSignal nodes.
+ *
+ * - If there is a timeout, the timer will be cancelled.
+ * - If aborted is true, nothing will happen.
+ *
+ * @returns
+ * @internal
+ */
+function abortSignal(signal) {
+ if (signal.aborted) {
+ return;
+ }
+ if (signal.onabort) {
+ signal.onabort.call(signal);
+ }
+ var listeners = listenersMap.get(signal);
+ if (listeners) {
+ listeners.forEach(function (listener) {
+ listener.call(signal, { type: "abort" });
+ });
+ }
+ abortedMap.set(signal, true);
+}
+
+/**
+ * This error is thrown when an asynchronous operation has been aborted.
+ * Check for this error by testing the `name` that the name property of the
+ * error matches `"AbortError"`.
+ *
+ * @example
+ * const controller = new AbortController();
+ * controller.abort();
+ * try {
+ * doAsyncWork(controller.signal)
+ * } catch (e) {
+ * if (e.name === 'AbortError') {
+ * // handle abort error here.
+ * }
+ * }
+ */
+var AbortError = /** @class */ (function (_super) {
+ tslib.__extends(AbortError, _super);
+ function AbortError(message) {
+ var _this = _super.call(this, message) || this;
+ _this.name = "AbortError";
+ return _this;
+ }
+ return AbortError;
+}(Error));
+/**
+ * An AbortController provides an AbortSignal and the associated controls to signal
+ * that an asynchronous operation should be aborted.
+ *
+ * @example
+ * // Abort an operation when another event fires
+ * const controller = new AbortController();
+ * const signal = controller.signal;
+ * doAsyncWork(signal);
+ * button.addEventListener('click', () => controller.abort());
+ *
+ * @example
+ * // Share aborter cross multiple operations in 30s
+ * // Upload the same data to 2 different data centers at the same time,
+ * // abort another when any of them is finished
+ * const controller = AbortController.withTimeout(30 * 1000);
+ * doAsyncWork(controller.signal).then(controller.abort);
+ * doAsyncWork(controller.signal).then(controller.abort);
+ *
+ * @example
+ * // Cascaded aborting
+ * // All operations can't take more than 30 seconds
+ * const aborter = Aborter.timeout(30 * 1000);
+ *
+ * // Following 2 operations can't take more than 25 seconds
+ * await doAsyncWork(aborter.withTimeout(25 * 1000));
+ * await doAsyncWork(aborter.withTimeout(25 * 1000));
+ *
+ * @export
+ * @class AbortController
+ * @implements {AbortSignalLike}
+ */
+var AbortController = /** @class */ (function () {
+ function AbortController(parentSignals) {
+ var _this = this;
+ this._signal = new AbortSignal();
+ if (!parentSignals) {
+ return;
+ }
+ // coerce parentSignals into an array
+ if (!Array.isArray(parentSignals)) {
+ parentSignals = arguments;
+ }
+ for (var _i = 0, parentSignals_1 = parentSignals; _i < parentSignals_1.length; _i++) {
+ var parentSignal = parentSignals_1[_i];
+ // if the parent signal has already had abort() called,
+ // then call abort on this signal as well.
+ if (parentSignal.aborted) {
+ this.abort();
+ }
+ else {
+ // when the parent signal aborts, this signal should as well.
+ parentSignal.addEventListener("abort", function () {
+ _this.abort();
+ });
+ }
+ }
+ }
+ Object.defineProperty(AbortController.prototype, "signal", {
+ /**
+ * The AbortSignal associated with this controller that will signal aborted
+ * when the abort method is called on this controller.
+ *
+ * @readonly
+ * @type {AbortSignal}
+ * @memberof AbortController
+ */
+ get: function () {
+ return this._signal;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * Signal that any operations passed this controller's associated abort signal
+ * to cancel any remaining work and throw an `AbortError`.
+ *
+ * @memberof AbortController
+ */
+ AbortController.prototype.abort = function () {
+ abortSignal(this._signal);
+ };
+ /**
+ * Creates a new AbortSignal instance that will abort after the provided ms.
+ *
+ * @static
+ * @params {number} ms Elapsed time in milliseconds to trigger an abort.
+ * @returns {AbortSignal}
+ */
+ AbortController.timeout = function (ms) {
+ var signal = new AbortSignal();
+ var timer = setTimeout(abortSignal, ms, signal);
+ // Prevent the active Timer from keeping the Node.js event loop active.
+ if (typeof timer.unref === "function") {
+ timer.unref();
+ }
+ return signal;
+ };
+ return AbortController;
+}());
+
+exports.AbortController = AbortController;
+exports.AbortError = AbortError;
+exports.AbortSignal = AbortSignal;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+/* 107 */
+/***/ (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=Observation.js.map
+
+/***/ }),
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 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)
+ };
+ yield requestUtils_1.retryHttpClientResponse(`uploadChunk (start: ${start}, end: ${end})`, () => __awaiter(this, void 0, void 0, function* () {
+ return httpClient.sendStream('PATCH', resourceUrl, openStream(), additionalHeaders);
+ }));
+ });
+}
+function uploadFile(httpClient, cacheId, archivePath, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Upload Chunks
+ const fileSize = fs.statSync(archivePath).size;
+ const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`);
+ const fd = fs.openSync(archivePath, 'r');
+ const uploadOptions = options_1.getUploadOptions(options);
+ const concurrency = utils.assertDefined('uploadConcurrency', uploadOptions.uploadConcurrency);
+ const maxChunkSize = utils.assertDefined('uploadChunkSize', uploadOptions.uploadChunkSize);
+ const parallelUploads = [...new Array(concurrency).keys()];
+ core.debug('Awaiting all uploads');
+ let offset = 0;
+ try {
+ yield Promise.all(parallelUploads.map(() => __awaiter(this, void 0, void 0, function* () {
+ while (offset < fileSize) {
+ const chunkSize = Math.min(fileSize - offset, maxChunkSize);
+ const start = offset;
+ const end = offset + chunkSize - 1;
+ offset += maxChunkSize;
+ yield uploadChunk(httpClient, resourceUrl, () => fs
+ .createReadStream(archivePath, {
+ fd,
+ start,
+ end,
+ autoClose: false
+ })
+ .on('error', error => {
+ throw new Error(`Cache upload failed because file read failed with ${error.message}`);
+ }), start, end);
+ }
+ })));
+ }
+ finally {
+ fs.closeSync(fd);
+ }
+ return;
+ });
+}
+function commitCache(httpClient, cacheId, filesize) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const commitCacheRequest = { size: filesize };
+ return yield requestUtils_1.retryTypedResponse('commitCache', () => __awaiter(this, void 0, void 0, function* () {
+ return httpClient.postJson(getCacheApiUrl(`caches/${cacheId.toString()}`), commitCacheRequest);
+ }));
+ });
+}
+function saveCache(cacheId, archivePath, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const httpClient = createHttpClient();
+ core.debug('Upload cache');
+ yield uploadFile(httpClient, cacheId, archivePath, options);
+ // Commit Cache
+ core.debug('Commiting cache');
+ const cacheSize = utils.getArchiveFileSizeIsBytes(archivePath);
+ const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize);
+ if (!requestUtils_1.isSuccessStatusCode(commitCacheResponse.statusCode)) {
+ throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`);
+ }
+ core.info('Cache saved successfully');
+ });
+}
+exports.saveCache = saveCache;
+//# sourceMappingURL=cacheHttpClient.js.map
+
+/***/ }),
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */
+/***/ (function(module) {
+
+module.exports = require("child_process");
+
+/***/ }),
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */
+/***/ (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.MetricsAPI = void 0;
+var NoopMeterProvider_1 = __webpack_require__(450);
+var global_utils_1 = __webpack_require__(976);
+/**
+ * Singleton object which represents the entry point to the OpenTelemetry Metrics API
+ */
+var MetricsAPI = /** @class */ (function () {
+ /** Empty private constructor prevents end users from constructing a new instance of the API */
+ function MetricsAPI() {
+ }
+ /** Get the singleton instance of the Metrics API */
+ MetricsAPI.getInstance = function () {
+ if (!this._instance) {
+ this._instance = new MetricsAPI();
+ }
+ return this._instance;
+ };
+ /**
+ * Set the current global meter. Returns the initialized global meter provider.
+ */
+ MetricsAPI.prototype.setGlobalMeterProvider = function (provider) {
+ if (global_utils_1._global[global_utils_1.GLOBAL_METRICS_API_KEY]) {
+ // global meter provider has already been set
+ return this.getMeterProvider();
+ }
+ global_utils_1._global[global_utils_1.GLOBAL_METRICS_API_KEY] = global_utils_1.makeGetter(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION, provider, NoopMeterProvider_1.NOOP_METER_PROVIDER);
+ return provider;
+ };
+ /**
+ * Returns the global meter provider.
+ */
+ MetricsAPI.prototype.getMeterProvider = function () {
+ var _a, _b;
+ return ((_b = (_a = global_utils_1._global[global_utils_1.GLOBAL_METRICS_API_KEY]) === null || _a === void 0 ? void 0 : _a.call(global_utils_1._global, global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== void 0 ? _b : NoopMeterProvider_1.NOOP_METER_PROVIDER);
+ };
+ /**
+ * Returns a meter from the global meter provider.
+ */
+ MetricsAPI.prototype.getMeter = function (name, version) {
+ return this.getMeterProvider().getMeter(name, version);
+ };
+ /** Remove the global meter provider */
+ MetricsAPI.prototype.disable = function () {
+ delete global_utils_1._global[global_utils_1.GLOBAL_METRICS_API_KEY];
+ };
+ return MetricsAPI;
+}());
+exports.MetricsAPI = MetricsAPI;
+//# sourceMappingURL=metrics.js.map
+
+/***/ }),
+/* 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 */
+/***/ (function(module) {
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global global, define, System, Reflect, Promise */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __createBinding;
+(function (factory) {
+ var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+ if (typeof define === "function" && define.amd) {
+ define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+ }
+ else if ( true && typeof module.exports === "object") {
+ factory(createExporter(root, createExporter(module.exports)));
+ }
+ else {
+ factory(createExporter(root));
+ }
+ function createExporter(exports, previous) {
+ if (exports !== root) {
+ if (typeof Object.create === "function") {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ }
+ else {
+ exports.__esModule = true;
+ }
+ }
+ return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+ }
+})
+(function (exporter) {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+
+ __extends = function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+
+ __assign = Object.assign || function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+
+ __rest = function (s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ };
+
+ __decorate = function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+ };
+
+ __param = function (paramIndex, decorator) {
+ return function (target, key) { decorator(target, key, paramIndex); }
+ };
+
+ __metadata = function (metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+ };
+
+ __awaiter = function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ };
+
+ __generator = function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ };
+
+ __exportStar = function(m, 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;
+ };
+
+ __spread = function () {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read(arguments[i]));
+ return ar;
+ };
+
+ __spreadArrays = function () {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+
+ __await = function (v) {
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
+ };
+
+ __asyncGenerator = function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+ };
+
+ __asyncDelegator = function (o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+ };
+
+ __asyncValues = function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+ };
+
+ __makeTemplateObject = function (cooked, raw) {
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+ return cooked;
+ };
+
+ var __setModuleDefault = Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+ }) : function(o, v) {
+ o["default"] = v;
+ };
+
+ __importStar = function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (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, privateMap) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to get private field on non-instance");
+ }
+ return privateMap.get(receiver);
+ };
+
+ __classPrivateFieldSet = function (receiver, privateMap, value) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to set private field on non-instance");
+ }
+ privateMap.set(receiver, value);
+ return value;
+ };
+
+ exporter("__extends", __extends);
+ exporter("__assign", __assign);
+ exporter("__rest", __rest);
+ exporter("__decorate", __decorate);
+ exporter("__param", __param);
+ exporter("__metadata", __metadata);
+ exporter("__awaiter", __awaiter);
+ exporter("__generator", __generator);
+ exporter("__exportStar", __exportStar);
+ exporter("__createBinding", __createBinding);
+ exporter("__values", __values);
+ exporter("__read", __read);
+ exporter("__spread", __spread);
+ exporter("__spreadArrays", __spreadArrays);
+ exporter("__await", __await);
+ exporter("__asyncGenerator", __asyncGenerator);
+ exporter("__asyncDelegator", __asyncDelegator);
+ exporter("__asyncValues", __asyncValues);
+ exporter("__makeTemplateObject", __makeTemplateObject);
+ exporter("__importStar", __importStar);
+ exporter("__importDefault", __importDefault);
+ exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+ exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+});
+
+
+/***/ }),
+/* 145 */,
+/* 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 */,
+/* 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.NOOP_TRACER = exports.NoopTracer = void 0;
+var NoopSpan_1 = __webpack_require__(767);
+/**
+ * No-op implementations of {@link Tracer}.
+ */
+var NoopTracer = /** @class */ (function () {
+ function NoopTracer() {
+ }
+ NoopTracer.prototype.getCurrentSpan = function () {
+ return NoopSpan_1.NOOP_SPAN;
+ };
+ // startSpan starts a noop span.
+ NoopTracer.prototype.startSpan = function (name, options) {
+ return NoopSpan_1.NOOP_SPAN;
+ };
+ NoopTracer.prototype.withSpan = function (span, fn) {
+ return fn();
+ };
+ NoopTracer.prototype.bind = function (target, span) {
+ return target;
+ };
+ return NoopTracer;
+}());
+exports.NoopTracer = NoopTracer;
+exports.NOOP_TRACER = new NoopTracer();
+//# sourceMappingURL=NoopTracer.js.map
+
+/***/ }),
+/* 152 */
+/***/ (function(module, __unusedexports, __webpack_require__) {
+
+var Stream = __webpack_require__(794).Stream;
+var util = __webpack_require__(669);
+
+module.exports = DelayedStream;
+function DelayedStream() {
+ this.source = null;
+ this.dataSize = 0;
+ this.maxDataSize = 1024 * 1024;
+ this.pauseStream = true;
+
+ this._maxDataSizeExceeded = false;
+ this._released = false;
+ this._bufferedEvents = [];
+}
+util.inherits(DelayedStream, Stream);
+
+DelayedStream.create = function(source, options) {
+ var delayedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ delayedStream[option] = options[option];
+ }
+
+ delayedStream.source = source;
+
+ var realEmit = source.emit;
+ source.emit = function() {
+ delayedStream._handleEmit(arguments);
+ return realEmit.apply(source, arguments);
+ };
+
+ source.on('error', function() {});
+ if (delayedStream.pauseStream) {
+ source.pause();
+ }
+
+ return delayedStream;
+};
+
+Object.defineProperty(DelayedStream.prototype, 'readable', {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ return this.source.readable;
+ }
+});
+
+DelayedStream.prototype.setEncoding = function() {
+ return this.source.setEncoding.apply(this.source, arguments);
+};
+
+DelayedStream.prototype.resume = function() {
+ if (!this._released) {
+ this.release();
+ }
+
+ this.source.resume();
+};
+
+DelayedStream.prototype.pause = function() {
+ this.source.pause();
+};
+
+DelayedStream.prototype.release = function() {
+ this._released = true;
+
+ this._bufferedEvents.forEach(function(args) {
+ this.emit.apply(this, args);
+ }.bind(this));
+ this._bufferedEvents = [];
+};
+
+DelayedStream.prototype.pipe = function() {
+ var r = Stream.prototype.pipe.apply(this, arguments);
+ this.resume();
+ return r;
+};
+
+DelayedStream.prototype._handleEmit = function(args) {
+ if (this._released) {
+ this.emit.apply(this, args);
+ return;
+ }
+
+ if (args[0] === 'data') {
+ this.dataSize += args[1].length;
+ this._checkIfMaxDataSizeExceeded();
+ }
+
+ this._bufferedEvents.push(args);
+};
+
+DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
+ if (this._maxDataSizeExceeded) {
+ return;
+ }
+
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ this._maxDataSizeExceeded = true;
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
+ this.emit('error', new Error(message));
+};
+
+
+/***/ }),
+/* 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.NOOP_TRACER_PROVIDER = 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 NoopTracer_1.NOOP_TRACER;
+ };
+ return NoopTracerProvider;
+}());
+exports.NoopTracerProvider = NoopTracerProvider;
+exports.NOOP_TRACER_PROVIDER = new NoopTracerProvider();
+//# sourceMappingURL=NoopTracerProvider.js.map
+
+/***/ }),
+/* 163 */,
+/* 164 */,
+/* 165 */
+/***/ (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=Plugin.js.map
+
+/***/ }),
+/* 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 */
+/***/ (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=ObserverResult.js.map
+
+/***/ }),
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 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 */,
+/* 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("punycode");
+
+/***/ }),
+/* 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.
+ */
+var AzureKeyCredential = /** @class */ (function () {
+ /**
+ * Create an instance of an AzureKeyCredential for use
+ * with a service client.
+ *
+ * @param key the initial value of the key to use in authentication
+ */
+ function AzureKeyCredential(key) {
+ if (!key) {
+ throw new Error("key must be a non-empty string");
+ }
+ this._key = key;
+ }
+ Object.defineProperty(AzureKeyCredential.prototype, "key", {
+ /**
+ * The value of the key to be used in authentication
+ */
+ get: function () {
+ return this._key;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Change the value of the key.
+ *
+ * Updates will take effect upon the next request after
+ * updating the key value.
+ *
+ * @param newKey the new key value to be used
+ */
+ AzureKeyCredential.prototype.update = function (newKey) {
+ this._key = newKey;
+ };
+ return AzureKeyCredential;
+}());
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+/**
+ * Tests an object to determine whether it implements TokenCredential.
+ *
+ * @param credential The assumed TokenCredential to be tested.
+ */
+function isTokenCredential(credential) {
+ // Check for an object with a 'getToken' function and possibly with
+ // a 'signRequest' function. We do this check to make sure that
+ // a ServiceClientCredentials implementor (like TokenClientCredentials
+ // in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if
+ // it doesn't actually implement TokenCredential also.
+ return (credential &&
+ typeof credential.getToken === "function" &&
+ (credential.signRequest === undefined || credential.getToken.length > 0));
+}
+
+exports.AzureKeyCredential = AzureKeyCredential;
+exports.isTokenCredential = isTokenCredential;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+/* 230 */,
+/* 231 */
+/***/ (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" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(__webpack_require__(328), exports);
+__exportStar(__webpack_require__(715), exports);
+__exportStar(__webpack_require__(924), exports);
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 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 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+__webpack_require__(71);
+
+
+/***/ }),
+/* 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.getArchiveFileSizeIsBytes(archivePath);
+ if (actualLength !== expectedLength) {
+ throw new Error(`Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`);
+ }
+ }
+ else {
+ core.debug('Unable to validate download, no Content-Length header');
+ }
+ });
+}
+exports.downloadCacheHttpClient = downloadCacheHttpClient;
+/**
+ * Download the cache using the Azure Storage SDK. Only call this method if the
+ * URL points to an Azure Storage endpoint.
+ *
+ * @param archiveLocation the URL for the cache
+ * @param archivePath the local path where the cache is saved
+ * @param options the download options with the defaults set
+ */
+function downloadCacheStorageSDK(archiveLocation, archivePath, options) {
+ var _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const client = new storage_blob_1.BlockBlobClient(archiveLocation, undefined, {
+ retryOptions: {
+ // Override the timeout used when downloading each 4 MB chunk
+ // The default is 2 min / MB, which is way too slow
+ tryTimeoutInMs: options.timeoutInMs
+ }
+ });
+ const properties = yield client.getProperties();
+ const contentLength = (_a = properties.contentLength) !== null && _a !== void 0 ? _a : -1;
+ if (contentLength < 0) {
+ // We should never hit this condition, but just in case fall back to downloading the
+ // file as one large stream
+ core.debug('Unable to determine content length, downloading file with http-client...');
+ yield downloadCacheHttpClient(archiveLocation, archivePath);
+ }
+ else {
+ // Use downloadToBuffer for faster downloads, since internally it splits the
+ // file into 4 MB chunks which can then be parallelized and retried independently
+ //
+ // If the file exceeds the buffer maximum length (~1 GB on 32-bit systems and ~2 GB
+ // on 64-bit systems), split the download into multiple segments
+ const maxSegmentSize = buffer.constants.MAX_LENGTH;
+ const downloadProgress = new DownloadProgress(contentLength);
+ const fd = fs.openSync(archivePath, 'w');
+ try {
+ downloadProgress.startDisplayTimer();
+ while (!downloadProgress.isDone()) {
+ const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize;
+ const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart);
+ downloadProgress.nextSegment(segmentSize);
+ const result = yield client.downloadToBuffer(segmentStart, segmentSize, {
+ concurrency: options.downloadConcurrency,
+ onProgress: downloadProgress.onProgress()
+ });
+ fs.writeFileSync(fd, result);
+ }
+ }
+ finally {
+ downloadProgress.stopDisplayTimer();
+ fs.closeSync(fd);
+ }
+ }
+ });
+}
+exports.downloadCacheStorageSDK = downloadCacheStorageSDK;
+//# sourceMappingURL=downloadUtils.js.map
+
+/***/ }),
+/* 252 */,
+/* 253 */,
+/* 254 */,
+/* 255 */,
+/* 256 */,
+/* 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);
+var tslib = __webpack_require__(144);
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * A no-op implementation of Span that can safely be used without side-effects.
+ */
+var NoOpSpan = /** @class */ (function () {
+ function NoOpSpan() {
+ }
+ /**
+ * Returns the SpanContext associated with this Span.
+ */
+ NoOpSpan.prototype.context = function () {
+ return {
+ spanId: "",
+ traceId: "",
+ traceFlags: api.TraceFlags.NONE
+ };
+ };
+ /**
+ * Marks the end of Span execution.
+ * @param _endTime The time to use as the Span's end time. Defaults to
+ * the current time.
+ */
+ NoOpSpan.prototype.end = function (_endTime) {
+ /* Noop */
+ };
+ /**
+ * Sets an attribute on the Span
+ * @param _key the attribute key
+ * @param _value the attribute value
+ */
+ NoOpSpan.prototype.setAttribute = function (_key, _value) {
+ return this;
+ };
+ /**
+ * Sets attributes on the Span
+ * @param _attributes the attributes to add
+ */
+ NoOpSpan.prototype.setAttributes = function (_attributes) {
+ return this;
+ };
+ /**
+ * Adds an event to the Span
+ * @param _name The name of the event
+ * @param _attributes The associated attributes to add for this event
+ */
+ NoOpSpan.prototype.addEvent = function (_name, _attributes) {
+ return this;
+ };
+ /**
+ * Sets a status on the span. Overrides the default of CanonicalCode.OK.
+ * @param _status The status to set.
+ */
+ NoOpSpan.prototype.setStatus = function (_status) {
+ return this;
+ };
+ /**
+ * Updates the name of the Span
+ * @param _name the new Span name
+ */
+ NoOpSpan.prototype.updateName = function (_name) {
+ return this;
+ };
+ /**
+ * Returns whether this span will be recorded
+ */
+ NoOpSpan.prototype.isRecording = function () {
+ return false;
+ };
+ return NoOpSpan;
+}());
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * A no-op implementation of Tracer that can be used when tracing
+ * is disabled.
+ */
+var NoOpTracer = /** @class */ (function () {
+ function NoOpTracer() {
+ }
+ /**
+ * Starts a new Span.
+ * @param _name The name of the span.
+ * @param _options The SpanOptions used during Span creation.
+ */
+ NoOpTracer.prototype.startSpan = function (_name, _options) {
+ return new NoOpSpan();
+ };
+ /**
+ * Returns the current Span from the current context, if available.
+ */
+ NoOpTracer.prototype.getCurrentSpan = function () {
+ return new NoOpSpan();
+ };
+ /**
+ * Executes the given function within the context provided by a Span.
+ * @param _span The span that provides the context.
+ * @param fn The function to be executed.
+ */
+ NoOpTracer.prototype.withSpan = function (_span, fn) {
+ return fn();
+ };
+ /**
+ * Bind a Span as the target's scope
+ * @param target An object to bind the scope.
+ * @param _span A specific Span to use. Otherwise, use the current one.
+ */
+ NoOpTracer.prototype.bind = function (target, _span) {
+ return target;
+ };
+ return NoOpTracer;
+}());
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+function getGlobalObject() {
+ return global;
+}
+
+// Copyright (c) Microsoft Corporation.
+// V1 = OpenTelemetry 0.1
+// V2 = OpenTelemetry 0.2
+// V3 = OpenTelemetry 0.6.1
+var GLOBAL_TRACER_VERSION = 3;
+// preview5 shipped with @azure/core-tracing.tracerCache
+// and didn't have smart detection for collisions
+var GLOBAL_TRACER_SYMBOL = Symbol.for("@azure/core-tracing.tracerCache2");
+var cache;
+function loadTracerCache() {
+ var globalObj = getGlobalObject();
+ var existingCache = globalObj[GLOBAL_TRACER_SYMBOL];
+ var setGlobalCache = true;
+ if (existingCache) {
+ if (existingCache.version === GLOBAL_TRACER_VERSION) {
+ cache = existingCache;
+ }
+ else {
+ setGlobalCache = false;
+ if (existingCache.tracer) {
+ throw new Error("Two incompatible versions of @azure/core-tracing have been loaded.\n This library is " + GLOBAL_TRACER_VERSION + ", existing is " + existingCache.version + ".");
+ }
+ }
+ }
+ if (!cache) {
+ cache = {
+ tracer: undefined,
+ version: GLOBAL_TRACER_VERSION
+ };
+ }
+ if (setGlobalCache) {
+ globalObj[GLOBAL_TRACER_SYMBOL] = cache;
+ }
+}
+function getCache() {
+ if (!cache) {
+ loadTracerCache();
+ }
+ return cache;
+}
+
+// Copyright (c) Microsoft Corporation.
+var defaultTracer;
+function getDefaultTracer() {
+ if (!defaultTracer) {
+ defaultTracer = new NoOpTracer();
+ }
+ return defaultTracer;
+}
+/**
+ * Sets the global tracer, enabling tracing for the Azure SDK.
+ * @param tracer An OpenTelemetry Tracer instance.
+ */
+function setTracer(tracer) {
+ var cache = getCache();
+ cache.tracer = tracer;
+}
+/**
+ * Retrieves the active tracer, or returns a
+ * no-op implementation if one is not set.
+ */
+function getTracer() {
+ var cache = getCache();
+ if (!cache.tracer) {
+ return getDefaultTracer();
+ }
+ return cache.tracer;
+}
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+/**
+ * @ignore
+ * @internal
+ */
+var OpenCensusTraceStateWrapper = /** @class */ (function () {
+ function OpenCensusTraceStateWrapper(state) {
+ this._state = state;
+ }
+ OpenCensusTraceStateWrapper.prototype.get = function (_key) {
+ throw new Error("Method not implemented.");
+ };
+ OpenCensusTraceStateWrapper.prototype.set = function (_key, _value) {
+ throw new Error("Method not implemented.");
+ };
+ OpenCensusTraceStateWrapper.prototype.unset = function (_key) {
+ throw new Error("Method not implemented");
+ };
+ OpenCensusTraceStateWrapper.prototype.serialize = function () {
+ return this._state || "";
+ };
+ return OpenCensusTraceStateWrapper;
+}());
+
+// Copyright (c) Microsoft Corporation.
+function isWrappedSpan(span) {
+ return !!span && span.getWrappedSpan !== undefined;
+}
+function isTracer(tracerOrSpan) {
+ return tracerOrSpan.getWrappedTracer !== undefined;
+}
+/**
+ * An implementation of OpenTelemetry Span that wraps an OpenCensus Span.
+ */
+var OpenCensusSpanWrapper = /** @class */ (function () {
+ function OpenCensusSpanWrapper(tracerOrSpan, name, options) {
+ if (name === void 0) { name = ""; }
+ if (options === void 0) { options = {}; }
+ if (isTracer(tracerOrSpan)) {
+ var parent = isWrappedSpan(options.parent) ? options.parent.getWrappedSpan() : undefined;
+ this._span = tracerOrSpan.getWrappedTracer().startChildSpan({
+ name: name,
+ childOf: parent
+ });
+ this._span.start();
+ if (options.links) {
+ for (var _i = 0, _a = options.links; _i < _a.length; _i++) {
+ var link = _a[_i];
+ // Since there is no way to set the link relationship, leave it as Unspecified.
+ this._span.addLink(link.context.traceId, link.context.spanId, 0 /* LinkType.UNSPECIFIED */, link.attributes);
+ }
+ }
+ }
+ else {
+ this._span = tracerOrSpan;
+ }
+ }
+ /**
+ * The underlying OpenCensus Span
+ */
+ OpenCensusSpanWrapper.prototype.getWrappedSpan = function () {
+ return this._span;
+ };
+ /**
+ * Marks the end of Span execution.
+ * @param endTime The time to use as the Span's end time. Defaults to
+ * the current time.
+ */
+ OpenCensusSpanWrapper.prototype.end = function (_endTime) {
+ this._span.end();
+ };
+ /**
+ * Returns the SpanContext associated with this Span.
+ */
+ OpenCensusSpanWrapper.prototype.context = function () {
+ var openCensusSpanContext = this._span.spanContext;
+ return {
+ spanId: openCensusSpanContext.spanId,
+ traceId: openCensusSpanContext.traceId,
+ traceFlags: openCensusSpanContext.options,
+ traceState: new OpenCensusTraceStateWrapper(openCensusSpanContext.traceState)
+ };
+ };
+ /**
+ * Sets an attribute on the Span
+ * @param key the attribute key
+ * @param value the attribute value
+ */
+ OpenCensusSpanWrapper.prototype.setAttribute = function (key, value) {
+ this._span.addAttribute(key, value);
+ return this;
+ };
+ /**
+ * Sets attributes on the Span
+ * @param attributes the attributes to add
+ */
+ OpenCensusSpanWrapper.prototype.setAttributes = function (attributes) {
+ this._span.attributes = attributes;
+ return this;
+ };
+ /**
+ * Adds an event to the Span
+ * @param name The name of the event
+ * @param attributes The associated attributes to add for this event
+ */
+ OpenCensusSpanWrapper.prototype.addEvent = function (_name, _attributes) {
+ throw new Error("Method not implemented.");
+ };
+ /**
+ * Sets a status on the span. Overrides the default of CanonicalCode.OK.
+ * @param status The status to set.
+ */
+ OpenCensusSpanWrapper.prototype.setStatus = function (status) {
+ this._span.setStatus(status.code, status.message);
+ return this;
+ };
+ /**
+ * Updates the name of the Span
+ * @param name the new Span name
+ */
+ OpenCensusSpanWrapper.prototype.updateName = function (name) {
+ this._span.name = name;
+ return this;
+ };
+ /**
+ * Returns whether this span will be recorded
+ */
+ OpenCensusSpanWrapper.prototype.isRecording = function () {
+ // NoRecordSpans have an empty traceId
+ return !!this._span.traceId;
+ };
+ return OpenCensusSpanWrapper;
+}());
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * An implementation of OpenTelemetry Tracer that wraps an OpenCensus Tracer.
+ */
+var OpenCensusTracerWrapper = /** @class */ (function () {
+ /**
+ * Create a new wrapper around a given OpenCensus Tracer.
+ * @param tracer The OpenCensus Tracer to wrap.
+ */
+ function OpenCensusTracerWrapper(tracer) {
+ this._tracer = tracer;
+ }
+ /**
+ * The wrapped OpenCensus Tracer
+ */
+ OpenCensusTracerWrapper.prototype.getWrappedTracer = function () {
+ return this._tracer;
+ };
+ /**
+ * Starts a new Span.
+ * @param name The name of the span.
+ * @param options The SpanOptions used during Span creation.
+ */
+ OpenCensusTracerWrapper.prototype.startSpan = function (name, options) {
+ return new OpenCensusSpanWrapper(this, name, options);
+ };
+ /**
+ * Returns the current Span from the current context, if available.
+ */
+ OpenCensusTracerWrapper.prototype.getCurrentSpan = function () {
+ return undefined;
+ };
+ /**
+ * Executes the given function within the context provided by a Span.
+ * @param _span The span that provides the context.
+ * @param _fn The function to be executed.
+ */
+ OpenCensusTracerWrapper.prototype.withSpan = function (_span, _fn) {
+ throw new Error("Method not implemented.");
+ };
+ /**
+ * Bind a Span as the target's scope
+ * @param target An object to bind the scope.
+ * @param _span A specific Span to use. Otherwise, use the current one.
+ */
+ OpenCensusTracerWrapper.prototype.bind = function (_target, _span) {
+ throw new Error("Method not implemented.");
+ };
+ return OpenCensusTracerWrapper;
+}());
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * A mock span useful for testing.
+ */
+var TestSpan = /** @class */ (function (_super) {
+ tslib.__extends(TestSpan, _super);
+ /**
+ * Starts a new Span.
+ * @param parentTracer The tracer that created this Span
+ * @param name The name of the span.
+ * @param context The SpanContext this span belongs to
+ * @param kind The SpanKind of this Span
+ * @param parentSpanId The identifier of the parent Span
+ * @param startTime The startTime of the event (defaults to now)
+ */
+ function TestSpan(parentTracer, name, context, kind, parentSpanId, startTime) {
+ if (startTime === void 0) { startTime = Date.now(); }
+ var _this = _super.call(this) || this;
+ _this._tracer = parentTracer;
+ _this.name = name;
+ _this.kind = kind;
+ _this.startTime = startTime;
+ _this.parentSpanId = parentSpanId;
+ _this.status = {
+ code: api.CanonicalCode.OK
+ };
+ _this.endCalled = false;
+ _this._context = context;
+ _this.attributes = {};
+ return _this;
+ }
+ /**
+ * Returns the Tracer that created this Span
+ */
+ TestSpan.prototype.tracer = function () {
+ return this._tracer;
+ };
+ /**
+ * Returns the SpanContext associated with this Span.
+ */
+ TestSpan.prototype.context = function () {
+ return this._context;
+ };
+ /**
+ * Marks the end of Span execution.
+ * @param _endTime The time to use as the Span's end time. Defaults to
+ * the current time.
+ */
+ TestSpan.prototype.end = function (_endTime) {
+ this.endCalled = true;
+ };
+ /**
+ * Sets a status on the span. Overrides the default of CanonicalCode.OK.
+ * @param status The status to set.
+ */
+ TestSpan.prototype.setStatus = function (status) {
+ this.status = status;
+ return this;
+ };
+ /**
+ * Returns whether this span will be recorded
+ */
+ TestSpan.prototype.isRecording = function () {
+ return true;
+ };
+ /**
+ * Sets an attribute on the Span
+ * @param key the attribute key
+ * @param value the attribute value
+ */
+ TestSpan.prototype.setAttribute = function (key, value) {
+ this.attributes[key] = value;
+ return this;
+ };
+ /**
+ * Sets attributes on the Span
+ * @param attributes the attributes to add
+ */
+ TestSpan.prototype.setAttributes = function (attributes) {
+ for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {
+ var key = _a[_i];
+ this.attributes[key] = attributes[key];
+ }
+ return this;
+ };
+ return TestSpan;
+}(NoOpSpan));
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * A mock tracer useful for testing
+ */
+var TestTracer = /** @class */ (function (_super) {
+ tslib.__extends(TestTracer, _super);
+ function TestTracer() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.traceIdCounter = 0;
+ _this.spanIdCounter = 0;
+ _this.rootSpans = [];
+ _this.knownSpans = [];
+ return _this;
+ }
+ TestTracer.prototype.getNextTraceId = function () {
+ this.traceIdCounter++;
+ return String(this.traceIdCounter);
+ };
+ TestTracer.prototype.getNextSpanId = function () {
+ this.spanIdCounter++;
+ return String(this.spanIdCounter);
+ };
+ /**
+ * Returns all Spans that were created without a parent
+ */
+ TestTracer.prototype.getRootSpans = function () {
+ return this.rootSpans;
+ };
+ /**
+ * Returns all Spans this Tracer knows about
+ */
+ TestTracer.prototype.getKnownSpans = function () {
+ return this.knownSpans;
+ };
+ /**
+ * Returns all Spans where end() has not been called
+ */
+ TestTracer.prototype.getActiveSpans = function () {
+ return this.knownSpans.filter(function (span) {
+ return !span.endCalled;
+ });
+ };
+ /**
+ * Return all Spans for a particular trace, grouped by their
+ * parent Span in a tree-like structure
+ * @param traceId The traceId to return the graph for
+ */
+ TestTracer.prototype.getSpanGraph = function (traceId) {
+ var traceSpans = this.knownSpans.filter(function (span) {
+ return span.context().traceId === traceId;
+ });
+ var roots = [];
+ var nodeMap = new Map();
+ for (var _i = 0, traceSpans_1 = traceSpans; _i < traceSpans_1.length; _i++) {
+ var span = traceSpans_1[_i];
+ var spanId = span.context().spanId;
+ var node = {
+ name: span.name,
+ children: []
+ };
+ nodeMap.set(spanId, node);
+ if (span.parentSpanId) {
+ var parent = nodeMap.get(span.parentSpanId);
+ if (!parent) {
+ throw new Error("Span with name " + node.name + " has an unknown parentSpan with id " + span.parentSpanId);
+ }
+ parent.children.push(node);
+ }
+ else {
+ roots.push(node);
+ }
+ }
+ return {
+ roots: roots
+ };
+ };
+ /**
+ * Starts a new Span.
+ * @param name The name of the span.
+ * @param options The SpanOptions used during Span creation.
+ */
+ TestTracer.prototype.startSpan = function (name, options) {
+ if (options === void 0) { options = {}; }
+ var parentContext = this._getParentContext(options);
+ var traceId;
+ var isRootSpan = false;
+ if (parentContext && parentContext.traceId) {
+ traceId = parentContext.traceId;
+ }
+ else {
+ traceId = this.getNextTraceId();
+ isRootSpan = true;
+ }
+ var context = {
+ traceId: traceId,
+ spanId: this.getNextSpanId(),
+ traceFlags: api.TraceFlags.NONE
+ };
+ var span = new TestSpan(this, name, context, options.kind || api.SpanKind.INTERNAL, parentContext ? parentContext.spanId : undefined, options.startTime);
+ this.knownSpans.push(span);
+ if (isRootSpan) {
+ this.rootSpans.push(span);
+ }
+ return span;
+ };
+ TestTracer.prototype._getParentContext = function (options) {
+ var parent = options.parent;
+ var result;
+ if (parent) {
+ if ("traceId" in parent) {
+ result = parent;
+ }
+ else {
+ result = parent.context();
+ }
+ }
+ return result;
+ };
+ return TestTracer;
+}(NoOpTracer));
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+var VERSION = "00";
+/**
+ * Generates a `SpanContext` given a `traceparent` header value.
+ * @param traceParent Serialized span context data as a `traceparent` header value.
+ * @returns The `SpanContext` generated from the `traceparent` value.
+ */
+function extractSpanContextFromTraceParentHeader(traceParentHeader) {
+ var parts = traceParentHeader.split("-");
+ if (parts.length !== 4) {
+ return;
+ }
+ var version = parts[0], traceId = parts[1], spanId = parts[2], traceOptions = parts[3];
+ if (version !== VERSION) {
+ return;
+ }
+ var traceFlags = parseInt(traceOptions, 16);
+ var spanContext = {
+ spanId: spanId,
+ traceId: traceId,
+ traceFlags: traceFlags
+ };
+ return spanContext;
+}
+/**
+ * Generates a `traceparent` value given a span context.
+ * @param spanContext Contains context for a specific span.
+ * @returns The `spanContext` represented as a `traceparent` value.
+ */
+function getTraceParentHeader(spanContext) {
+ var missingFields = [];
+ if (!spanContext.traceId) {
+ missingFields.push("traceId");
+ }
+ if (!spanContext.spanId) {
+ missingFields.push("spanId");
+ }
+ if (missingFields.length) {
+ return;
+ }
+ var flags = spanContext.traceFlags || 0 /* NONE */;
+ var hexFlags = flags.toString(16);
+ var traceFlags = hexFlags.length === 1 ? "0" + hexFlags : hexFlags;
+ // https://www.w3.org/TR/trace-context/#traceparent-header-field-values
+ return VERSION + "-" + spanContext.traceId + "-" + spanContext.spanId + "-" + traceFlags;
+}
+
+exports.NoOpSpan = NoOpSpan;
+exports.NoOpTracer = NoOpTracer;
+exports.OpenCensusSpanWrapper = OpenCensusSpanWrapper;
+exports.OpenCensusTracerWrapper = OpenCensusTracerWrapper;
+exports.TestSpan = TestSpan;
+exports.TestTracer = TestTracer;
+exports.extractSpanContextFromTraceParentHeader = extractSpanContextFromTraceParentHeader;
+exports.getTraceParentHeader = getTraceParentHeader;
+exports.getTracer = getTracer;
+exports.setTracer = setTracer;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+/* 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 */
+/***/ (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=Logger.js.map
+
+/***/ }),
+/* 277 */,
+/* 278 */
+/***/ (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=CorrelationContext.js.map
+
+/***/ }),
+/* 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 });
+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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __asyncValues = (this && this.__asyncValues) || function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+};
+var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
+var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __webpack_require__(470);
+const fs = __webpack_require__(747);
+const globOptionsHelper = __webpack_require__(601);
+const path = __webpack_require__(622);
+const patternHelper = __webpack_require__(597);
+const internal_match_kind_1 = __webpack_require__(327);
+const internal_pattern_1 = __webpack_require__(923);
+const internal_search_state_1 = __webpack_require__(728);
+const IS_WINDOWS = process.platform === 'win32';
+class DefaultGlobber {
+ constructor(options) {
+ this.patterns = [];
+ this.searchPaths = [];
+ this.options = globOptionsHelper.getOptions(options);
+ }
+ getSearchPaths() {
+ // Return a copy
+ return this.searchPaths.slice();
+ }
+ glob() {
+ var e_1, _a;
+ return __awaiter(this, void 0, void 0, function* () {
+ const result = [];
+ try {
+ for (var _b = __asyncValues(this.globGenerator()), _c; _c = yield _b.next(), !_c.done;) {
+ const itemPath = _c.value;
+ result.push(itemPath);
+ }
+ }
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
+ finally {
+ try {
+ if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
+ }
+ finally { if (e_1) throw e_1.error; }
+ }
+ return result;
+ });
+ }
+ globGenerator() {
+ return __asyncGenerator(this, arguments, function* globGenerator_1() {
+ // Fill in defaults options
+ const options = globOptionsHelper.getOptions(this.options);
+ // Implicit descendants?
+ const patterns = [];
+ for (const pattern of this.patterns) {
+ patterns.push(pattern);
+ if (options.implicitDescendants &&
+ (pattern.trailingSeparator ||
+ pattern.segments[pattern.segments.length - 1] !== '**')) {
+ patterns.push(new internal_pattern_1.Pattern(pattern.negate, pattern.segments.concat('**')));
+ }
+ }
+ // Push the search paths
+ const stack = [];
+ for (const searchPath of patternHelper.getSearchPaths(patterns)) {
+ core.debug(`Search path '${searchPath}'`);
+ // Exists?
+ try {
+ // Intentionally using lstat. Detection for broken symlink
+ // will be performed later (if following symlinks).
+ yield __await(fs.promises.lstat(searchPath));
+ }
+ catch (err) {
+ if (err.code === 'ENOENT') {
+ continue;
+ }
+ throw err;
+ }
+ stack.unshift(new internal_search_state_1.SearchState(searchPath, 1));
+ }
+ // Search
+ const traversalChain = []; // used to detect cycles
+ while (stack.length) {
+ // Pop
+ const item = stack.pop();
+ // Match?
+ const match = patternHelper.match(patterns, item.path);
+ const partialMatch = !!match || patternHelper.partialMatch(patterns, item.path);
+ if (!match && !partialMatch) {
+ continue;
+ }
+ // Stat
+ const stats = yield __await(DefaultGlobber.stat(item, options, traversalChain)
+ // Broken symlink, or symlink cycle detected, or no longer exists
+ );
+ // Broken symlink, or symlink cycle detected, or no longer exists
+ if (!stats) {
+ continue;
+ }
+ // Directory
+ if (stats.isDirectory()) {
+ // Matched
+ if (match & internal_match_kind_1.MatchKind.Directory) {
+ yield yield __await(item.path);
+ }
+ // Descend?
+ else if (!partialMatch) {
+ continue;
+ }
+ // Push the child items in reverse
+ const childLevel = item.level + 1;
+ const childItems = (yield __await(fs.promises.readdir(item.path))).map(x => new internal_search_state_1.SearchState(path.join(item.path, x), childLevel));
+ stack.push(...childItems.reverse());
+ }
+ // File
+ else if (match & internal_match_kind_1.MatchKind.File) {
+ yield yield __await(item.path);
+ }
+ }
+ });
+ }
+ /**
+ * Constructs a DefaultGlobber
+ */
+ static create(patterns, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const result = new DefaultGlobber(options);
+ if (IS_WINDOWS) {
+ patterns = patterns.replace(/\r\n/g, '\n');
+ patterns = patterns.replace(/\r/g, '\n');
+ }
+ const lines = patterns.split('\n').map(x => x.trim());
+ for (const line of lines) {
+ // Empty or comment
+ if (!line || line.startsWith('#')) {
+ continue;
+ }
+ // Pattern
+ else {
+ result.patterns.push(new internal_pattern_1.Pattern(line));
+ }
+ }
+ result.searchPaths.push(...patternHelper.getSearchPaths(result.patterns));
+ return result;
+ });
+ }
+ static stat(item, options, traversalChain) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Note:
+ // `stat` returns info about the target of a symlink (or symlink chain)
+ // `lstat` returns info about a symlink itself
+ let stats;
+ if (options.followSymbolicLinks) {
+ try {
+ // Use `stat` (following symlinks)
+ stats = yield fs.promises.stat(item.path);
+ }
+ catch (err) {
+ if (err.code === 'ENOENT') {
+ if (options.omitBrokenSymbolicLinks) {
+ core.debug(`Broken symlink '${item.path}'`);
+ return undefined;
+ }
+ throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`);
+ }
+ throw err;
+ }
+ }
+ else {
+ // Use `lstat` (not following symlinks)
+ stats = yield fs.promises.lstat(item.path);
+ }
+ // Note, isDirectory() returns false for the lstat of a symlink
+ if (stats.isDirectory() && options.followSymbolicLinks) {
+ // Get the realpath
+ const realPath = yield fs.promises.realpath(item.path);
+ // Fixup the traversal chain to match the item level
+ while (traversalChain.length >= item.level) {
+ traversalChain.pop();
+ }
+ // Test for a cycle
+ if (traversalChain.some((x) => x === realPath)) {
+ core.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`);
+ return undefined;
+ }
+ // Update the traversal chain
+ traversalChain.push(realPath);
+ }
+ return stats;
+ });
+ }
+}
+exports.DefaultGlobber = DefaultGlobber;
+//# sourceMappingURL=internal-globber.js.map
+
+/***/ }),
+/* 298 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+
+var _v = _interopRequireDefault(__webpack_require__(241));
+
+var _md = _interopRequireDefault(__webpack_require__(245));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+const v3 = (0, _v.default)('v3', 0x30, _md.default);
+var _default = v3;
+exports.default = _default;
+
+/***/ }),
+/* 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 */
+/***/ (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=BatchObserverResult.js.map
+
+/***/ }),
+/* 319 */,
+/* 320 */,
+/* 321 */,
+/* 322 */,
+/* 323 */,
+/* 324 */,
+/* 325 */,
+/* 326 */,
+/* 327 */
+/***/ (function(__unusedmodule, exports) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * Indicates whether a pattern matches a path
+ */
+var MatchKind;
+(function (MatchKind) {
+ /** Not matched */
+ MatchKind[MatchKind["None"] = 0] = "None";
+ /** Matched if the path is a directory */
+ MatchKind[MatchKind["Directory"] = 1] = "Directory";
+ /** Matched if the path is a regular file */
+ MatchKind[MatchKind["File"] = 2] = "File";
+ /** Matched */
+ MatchKind[MatchKind["All"] = 3] = "All";
+})(MatchKind = exports.MatchKind || (exports.MatchKind = {}));
+//# sourceMappingURL=internal-match-kind.js.map
+
+/***/ }),
+/* 328 */
+/***/ (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
+
+/***/ }),
+/* 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 */
+/***/ (function(module) {
+
+module.exports = require("timers");
+
+/***/ }),
+/* 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 */
+/***/ (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.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseSDKManagerOutput = exports.getNewState = void 0;
+const core = __importStar(__webpack_require__(470));
+const utils_1 = __webpack_require__(611);
+exports.getNewState = (line) => {
+ if (!/^[\w ]+:$/.test(line)) {
+ return null;
+ }
+ switch (line) {
+ case "Installed packages:": return "InstalledPackages";
+ case "Available Packages:": return "AvailablePackages";
+ case "Available Updates:": return "AvailableUpdates";
+ default:
+ if (core.isDebug()) {
+ core.debug(`Unknown state '${line}'`);
+ }
+ return "None";
+ }
+};
+exports.parseSDKManagerOutput = (stdout) => {
+ const result = [];
+ let state = "None";
+ const pushPackage = (packet) => {
+ const defaultPackage = { name: packet.name, description: "", localVersion: "", remoteVersion: "", installed: false, update: false };
+ const packageIndex = result.findIndex(p => p.name === packet.name);
+ if (packageIndex >= 0) {
+ result[packageIndex] = { ...result[packageIndex], ...packet };
+ }
+ else {
+ result.push({ ...defaultPackage, ...packet });
+ }
+ };
+ const lines = utils_1.splitByEOL(stdout);
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
+ const line = lines[lineIndex].trim();
+ if (line.length === 0) {
+ state = "None";
+ continue;
+ }
+ const nextState = exports.getNewState(line);
+ if (nextState) {
+ state = nextState;
+ // Skip the next 2 lines: table header and table header delimeter
+ lineIndex += 2;
+ continue;
+ }
+ const cols = line.split("|").map(s => s.trim()).filter(Boolean);
+ if (state === "InstalledPackages") {
+ pushPackage({
+ name: cols[0],
+ localVersion: cols[1],
+ description: cols[2],
+ installed: true
+ });
+ }
+ if (state === "AvailablePackages") {
+ pushPackage({
+ name: cols[0],
+ remoteVersion: cols[1],
+ description: cols[2]
+ });
+ }
+ else if (state === "AvailableUpdates") {
+ pushPackage({
+ name: cols[0],
+ localVersion: cols[1],
+ remoteVersion: cols[2],
+ installed: true,
+ update: true
+ });
+ }
+ }
+ return result.sort((p1, p2) => p1.name.localeCompare(p2.name));
+};
+
+
+/***/ }),
+/* 359 */,
+/* 360 */,
+/* 361 */,
+/* 362 */,
+/* 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__(815);
+var api = __webpack_require__(440);
+var logger$1 = __webpack_require__(928);
+var abortController = __webpack_require__(106);
+var os = __webpack_require__(87);
+var stream = __webpack_require__(794);
+__webpack_require__(242);
+var crypto = __webpack_require__(417);
+var coreLro = __webpack_require__(889);
+var events = __webpack_require__(614);
+var coreTracing = __webpack_require__(263);
+var fs = __webpack_require__(747);
+var util = __webpack_require__(669);
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+var KeyInfo = {
+ serializedName: "KeyInfo",
+ type: {
+ name: "Composite",
+ className: "KeyInfo",
+ modelProperties: {
+ startsOn: {
+ xmlName: "Start",
+ required: true,
+ serializedName: "Start",
+ type: {
+ name: "String"
+ }
+ },
+ expiresOn: {
+ xmlName: "Expiry",
+ required: true,
+ serializedName: "Expiry",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var UserDelegationKey = {
+ serializedName: "UserDelegationKey",
+ type: {
+ name: "Composite",
+ className: "UserDelegationKey",
+ modelProperties: {
+ signedObjectId: {
+ xmlName: "SignedOid",
+ required: true,
+ serializedName: "SignedOid",
+ type: {
+ name: "String"
+ }
+ },
+ signedTenantId: {
+ xmlName: "SignedTid",
+ required: true,
+ serializedName: "SignedTid",
+ type: {
+ name: "String"
+ }
+ },
+ signedStartsOn: {
+ xmlName: "SignedStart",
+ required: true,
+ serializedName: "SignedStart",
+ type: {
+ name: "String"
+ }
+ },
+ signedExpiresOn: {
+ xmlName: "SignedExpiry",
+ required: true,
+ serializedName: "SignedExpiry",
+ type: {
+ name: "String"
+ }
+ },
+ signedService: {
+ xmlName: "SignedService",
+ required: true,
+ serializedName: "SignedService",
+ type: {
+ name: "String"
+ }
+ },
+ signedVersion: {
+ xmlName: "SignedVersion",
+ required: true,
+ serializedName: "SignedVersion",
+ type: {
+ name: "String"
+ }
+ },
+ value: {
+ xmlName: "Value",
+ required: true,
+ serializedName: "Value",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var StorageError = {
+ serializedName: "StorageError",
+ type: {
+ name: "Composite",
+ className: "StorageError",
+ modelProperties: {
+ message: {
+ xmlName: "Message",
+ serializedName: "Message",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var DataLakeStorageErrorError = {
+ serializedName: "DataLakeStorageError_error",
+ type: {
+ name: "Composite",
+ className: "DataLakeStorageErrorError",
+ modelProperties: {
+ code: {
+ xmlName: "Code",
+ serializedName: "Code",
+ type: {
+ name: "String"
+ }
+ },
+ message: {
+ xmlName: "Message",
+ serializedName: "Message",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var DataLakeStorageError = {
+ serializedName: "DataLakeStorageError",
+ type: {
+ name: "Composite",
+ className: "DataLakeStorageError",
+ modelProperties: {
+ dataLakeStorageErrorDetails: {
+ xmlName: "error",
+ serializedName: "error",
+ type: {
+ name: "Composite",
+ className: "DataLakeStorageErrorError"
+ }
+ }
+ }
+ }
+};
+var AccessPolicy = {
+ serializedName: "AccessPolicy",
+ type: {
+ name: "Composite",
+ className: "AccessPolicy",
+ modelProperties: {
+ startsOn: {
+ xmlName: "Start",
+ serializedName: "Start",
+ type: {
+ name: "String"
+ }
+ },
+ expiresOn: {
+ xmlName: "Expiry",
+ serializedName: "Expiry",
+ type: {
+ name: "String"
+ }
+ },
+ permissions: {
+ xmlName: "Permission",
+ serializedName: "Permission",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobPropertiesInternal = {
+ xmlName: "Properties",
+ serializedName: "BlobPropertiesInternal",
+ type: {
+ name: "Composite",
+ className: "BlobPropertiesInternal",
+ modelProperties: {
+ createdOn: {
+ xmlName: "Creation-Time",
+ serializedName: "Creation-Time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ lastModified: {
+ xmlName: "Last-Modified",
+ required: true,
+ serializedName: "Last-Modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ xmlName: "Etag",
+ required: true,
+ serializedName: "Etag",
+ type: {
+ name: "String"
+ }
+ },
+ contentLength: {
+ xmlName: "Content-Length",
+ serializedName: "Content-Length",
+ type: {
+ name: "Number"
+ }
+ },
+ contentType: {
+ xmlName: "Content-Type",
+ serializedName: "Content-Type",
+ type: {
+ name: "String"
+ }
+ },
+ contentEncoding: {
+ xmlName: "Content-Encoding",
+ serializedName: "Content-Encoding",
+ type: {
+ name: "String"
+ }
+ },
+ contentLanguage: {
+ xmlName: "Content-Language",
+ serializedName: "Content-Language",
+ type: {
+ name: "String"
+ }
+ },
+ contentMD5: {
+ xmlName: "Content-MD5",
+ serializedName: "Content-MD5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ contentDisposition: {
+ xmlName: "Content-Disposition",
+ serializedName: "Content-Disposition",
+ type: {
+ name: "String"
+ }
+ },
+ cacheControl: {
+ xmlName: "Cache-Control",
+ serializedName: "Cache-Control",
+ type: {
+ name: "String"
+ }
+ },
+ blobSequenceNumber: {
+ xmlName: "x-ms-blob-sequence-number",
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ blobType: {
+ xmlName: "BlobType",
+ serializedName: "BlobType",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "BlockBlob",
+ "PageBlob",
+ "AppendBlob"
+ ]
+ }
+ },
+ leaseStatus: {
+ xmlName: "LeaseStatus",
+ serializedName: "LeaseStatus",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ leaseState: {
+ xmlName: "LeaseState",
+ serializedName: "LeaseState",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseDuration: {
+ xmlName: "LeaseDuration",
+ serializedName: "LeaseDuration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ copyId: {
+ xmlName: "CopyId",
+ serializedName: "CopyId",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ xmlName: "CopyStatus",
+ serializedName: "CopyStatus",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ copySource: {
+ xmlName: "CopySource",
+ serializedName: "CopySource",
+ type: {
+ name: "String"
+ }
+ },
+ copyProgress: {
+ xmlName: "CopyProgress",
+ serializedName: "CopyProgress",
+ type: {
+ name: "String"
+ }
+ },
+ copyCompletedOn: {
+ xmlName: "CopyCompletionTime",
+ serializedName: "CopyCompletionTime",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyStatusDescription: {
+ xmlName: "CopyStatusDescription",
+ serializedName: "CopyStatusDescription",
+ type: {
+ name: "String"
+ }
+ },
+ serverEncrypted: {
+ xmlName: "ServerEncrypted",
+ serializedName: "ServerEncrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ incrementalCopy: {
+ xmlName: "IncrementalCopy",
+ serializedName: "IncrementalCopy",
+ type: {
+ name: "Boolean"
+ }
+ },
+ destinationSnapshot: {
+ xmlName: "DestinationSnapshot",
+ serializedName: "DestinationSnapshot",
+ type: {
+ name: "String"
+ }
+ },
+ deletedOn: {
+ xmlName: "DeletedTime",
+ serializedName: "DeletedTime",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ remainingRetentionDays: {
+ xmlName: "RemainingRetentionDays",
+ serializedName: "RemainingRetentionDays",
+ type: {
+ name: "Number"
+ }
+ },
+ accessTier: {
+ xmlName: "AccessTier",
+ serializedName: "AccessTier",
+ type: {
+ name: "String"
+ }
+ },
+ accessTierInferred: {
+ xmlName: "AccessTierInferred",
+ serializedName: "AccessTierInferred",
+ type: {
+ name: "Boolean"
+ }
+ },
+ archiveStatus: {
+ xmlName: "ArchiveStatus",
+ serializedName: "ArchiveStatus",
+ type: {
+ name: "String"
+ }
+ },
+ customerProvidedKeySha256: {
+ xmlName: "CustomerProvidedKeySha256",
+ serializedName: "CustomerProvidedKeySha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ xmlName: "EncryptionScope",
+ serializedName: "EncryptionScope",
+ type: {
+ name: "String"
+ }
+ },
+ accessTierChangedOn: {
+ xmlName: "AccessTierChangeTime",
+ serializedName: "AccessTierChangeTime",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ tagCount: {
+ xmlName: "TagCount",
+ serializedName: "TagCount",
+ type: {
+ name: "Number"
+ }
+ },
+ expiresOn: {
+ xmlName: "Expiry-Time",
+ serializedName: "Expiry-Time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isSealed: {
+ xmlName: "Sealed",
+ serializedName: "Sealed",
+ type: {
+ name: "Boolean"
+ }
+ },
+ rehydratePriority: {
+ xmlName: "RehydratePriority",
+ serializedName: "RehydratePriority",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobTag = {
+ xmlName: "Tag",
+ serializedName: "BlobTag",
+ type: {
+ name: "Composite",
+ className: "BlobTag",
+ modelProperties: {
+ key: {
+ xmlName: "Key",
+ required: true,
+ serializedName: "Key",
+ type: {
+ name: "String"
+ }
+ },
+ value: {
+ xmlName: "Value",
+ required: true,
+ serializedName: "Value",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobTags = {
+ xmlName: "Tags",
+ serializedName: "BlobTags",
+ type: {
+ name: "Composite",
+ className: "BlobTags",
+ modelProperties: {
+ blobTagSet: {
+ xmlIsWrapped: true,
+ xmlName: "TagSet",
+ xmlElementName: "Tag",
+ required: true,
+ serializedName: "BlobTagSet",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "BlobTag"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var BlobItemInternal = {
+ xmlName: "Blob",
+ serializedName: "BlobItemInternal",
+ type: {
+ name: "Composite",
+ className: "BlobItemInternal",
+ modelProperties: {
+ name: {
+ xmlName: "Name",
+ required: true,
+ serializedName: "Name",
+ type: {
+ name: "String"
+ }
+ },
+ deleted: {
+ xmlName: "Deleted",
+ required: true,
+ serializedName: "Deleted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ snapshot: {
+ xmlName: "Snapshot",
+ required: true,
+ serializedName: "Snapshot",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ xmlName: "VersionId",
+ serializedName: "VersionId",
+ type: {
+ name: "String"
+ }
+ },
+ isCurrentVersion: {
+ xmlName: "IsCurrentVersion",
+ serializedName: "IsCurrentVersion",
+ type: {
+ name: "Boolean"
+ }
+ },
+ properties: {
+ xmlName: "Properties",
+ required: true,
+ serializedName: "Properties",
+ type: {
+ name: "Composite",
+ className: "BlobPropertiesInternal"
+ }
+ },
+ metadata: {
+ xmlName: "Metadata",
+ serializedName: "Metadata",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ },
+ blobTags: {
+ xmlName: "Tags",
+ serializedName: "BlobTags",
+ type: {
+ name: "Composite",
+ className: "BlobTags"
+ }
+ },
+ objectReplicationMetadata: {
+ xmlName: "OrMetadata",
+ serializedName: "ObjectReplicationMetadata",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var BlobFlatListSegment = {
+ xmlName: "Blobs",
+ serializedName: "BlobFlatListSegment",
+ type: {
+ name: "Composite",
+ className: "BlobFlatListSegment",
+ modelProperties: {
+ blobItems: {
+ xmlName: "BlobItems",
+ xmlElementName: "Blob",
+ required: true,
+ serializedName: "BlobItems",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "BlobItemInternal"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var ListBlobsFlatSegmentResponse = {
+ xmlName: "EnumerationResults",
+ serializedName: "ListBlobsFlatSegmentResponse",
+ type: {
+ name: "Composite",
+ className: "ListBlobsFlatSegmentResponse",
+ modelProperties: {
+ serviceEndpoint: {
+ xmlIsAttribute: true,
+ xmlName: "ServiceEndpoint",
+ required: true,
+ serializedName: "ServiceEndpoint",
+ type: {
+ name: "String"
+ }
+ },
+ containerName: {
+ xmlIsAttribute: true,
+ xmlName: "ContainerName",
+ required: true,
+ serializedName: "ContainerName",
+ type: {
+ name: "String"
+ }
+ },
+ prefix: {
+ xmlName: "Prefix",
+ serializedName: "Prefix",
+ type: {
+ name: "String"
+ }
+ },
+ marker: {
+ xmlName: "Marker",
+ serializedName: "Marker",
+ type: {
+ name: "String"
+ }
+ },
+ maxPageSize: {
+ xmlName: "MaxResults",
+ serializedName: "MaxResults",
+ type: {
+ name: "Number"
+ }
+ },
+ segment: {
+ xmlName: "Blobs",
+ required: true,
+ serializedName: "Segment",
+ type: {
+ name: "Composite",
+ className: "BlobFlatListSegment"
+ }
+ },
+ continuationToken: {
+ xmlName: "NextMarker",
+ serializedName: "NextMarker",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobPrefix = {
+ serializedName: "BlobPrefix",
+ type: {
+ name: "Composite",
+ className: "BlobPrefix",
+ modelProperties: {
+ name: {
+ xmlName: "Name",
+ required: true,
+ serializedName: "Name",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobHierarchyListSegment = {
+ xmlName: "Blobs",
+ serializedName: "BlobHierarchyListSegment",
+ type: {
+ name: "Composite",
+ className: "BlobHierarchyListSegment",
+ modelProperties: {
+ blobPrefixes: {
+ xmlName: "BlobPrefixes",
+ xmlElementName: "BlobPrefix",
+ serializedName: "BlobPrefixes",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "BlobPrefix"
+ }
+ }
+ }
+ },
+ blobItems: {
+ xmlName: "BlobItems",
+ xmlElementName: "Blob",
+ required: true,
+ serializedName: "BlobItems",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "BlobItemInternal"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var ListBlobsHierarchySegmentResponse = {
+ xmlName: "EnumerationResults",
+ serializedName: "ListBlobsHierarchySegmentResponse",
+ type: {
+ name: "Composite",
+ className: "ListBlobsHierarchySegmentResponse",
+ modelProperties: {
+ serviceEndpoint: {
+ xmlIsAttribute: true,
+ xmlName: "ServiceEndpoint",
+ required: true,
+ serializedName: "ServiceEndpoint",
+ type: {
+ name: "String"
+ }
+ },
+ containerName: {
+ xmlIsAttribute: true,
+ xmlName: "ContainerName",
+ required: true,
+ serializedName: "ContainerName",
+ type: {
+ name: "String"
+ }
+ },
+ prefix: {
+ xmlName: "Prefix",
+ serializedName: "Prefix",
+ type: {
+ name: "String"
+ }
+ },
+ marker: {
+ xmlName: "Marker",
+ serializedName: "Marker",
+ type: {
+ name: "String"
+ }
+ },
+ maxPageSize: {
+ xmlName: "MaxResults",
+ serializedName: "MaxResults",
+ type: {
+ name: "Number"
+ }
+ },
+ delimiter: {
+ xmlName: "Delimiter",
+ serializedName: "Delimiter",
+ type: {
+ name: "String"
+ }
+ },
+ segment: {
+ xmlName: "Blobs",
+ required: true,
+ serializedName: "Segment",
+ type: {
+ name: "Composite",
+ className: "BlobHierarchyListSegment"
+ }
+ },
+ continuationToken: {
+ xmlName: "NextMarker",
+ serializedName: "NextMarker",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var Block = {
+ serializedName: "Block",
+ type: {
+ name: "Composite",
+ className: "Block",
+ modelProperties: {
+ name: {
+ xmlName: "Name",
+ required: true,
+ serializedName: "Name",
+ type: {
+ name: "String"
+ }
+ },
+ size: {
+ xmlName: "Size",
+ required: true,
+ serializedName: "Size",
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var BlockList = {
+ serializedName: "BlockList",
+ type: {
+ name: "Composite",
+ className: "BlockList",
+ modelProperties: {
+ committedBlocks: {
+ xmlIsWrapped: true,
+ xmlName: "CommittedBlocks",
+ xmlElementName: "Block",
+ serializedName: "CommittedBlocks",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "Block"
+ }
+ }
+ }
+ },
+ uncommittedBlocks: {
+ xmlIsWrapped: true,
+ xmlName: "UncommittedBlocks",
+ xmlElementName: "Block",
+ serializedName: "UncommittedBlocks",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "Block"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var BlockLookupList = {
+ xmlName: "BlockList",
+ serializedName: "BlockLookupList",
+ type: {
+ name: "Composite",
+ className: "BlockLookupList",
+ modelProperties: {
+ committed: {
+ xmlName: "Committed",
+ xmlElementName: "Committed",
+ serializedName: "Committed",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ },
+ uncommitted: {
+ xmlName: "Uncommitted",
+ xmlElementName: "Uncommitted",
+ serializedName: "Uncommitted",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ },
+ latest: {
+ xmlName: "Latest",
+ xmlElementName: "Latest",
+ serializedName: "Latest",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var ContainerProperties = {
+ serializedName: "ContainerProperties",
+ type: {
+ name: "Composite",
+ className: "ContainerProperties",
+ modelProperties: {
+ lastModified: {
+ xmlName: "Last-Modified",
+ required: true,
+ serializedName: "Last-Modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ xmlName: "Etag",
+ required: true,
+ serializedName: "Etag",
+ type: {
+ name: "String"
+ }
+ },
+ leaseStatus: {
+ xmlName: "LeaseStatus",
+ serializedName: "LeaseStatus",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ leaseState: {
+ xmlName: "LeaseState",
+ serializedName: "LeaseState",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseDuration: {
+ xmlName: "LeaseDuration",
+ serializedName: "LeaseDuration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ publicAccess: {
+ xmlName: "PublicAccess",
+ serializedName: "PublicAccess",
+ type: {
+ name: "String"
+ }
+ },
+ hasImmutabilityPolicy: {
+ xmlName: "HasImmutabilityPolicy",
+ serializedName: "HasImmutabilityPolicy",
+ type: {
+ name: "Boolean"
+ }
+ },
+ hasLegalHold: {
+ xmlName: "HasLegalHold",
+ serializedName: "HasLegalHold",
+ type: {
+ name: "Boolean"
+ }
+ },
+ defaultEncryptionScope: {
+ xmlName: "DefaultEncryptionScope",
+ serializedName: "DefaultEncryptionScope",
+ type: {
+ name: "String"
+ }
+ },
+ preventEncryptionScopeOverride: {
+ xmlName: "DenyEncryptionScopeOverride",
+ serializedName: "DenyEncryptionScopeOverride",
+ type: {
+ name: "Boolean"
+ }
+ },
+ deletedOn: {
+ xmlName: "DeletedTime",
+ serializedName: "DeletedTime",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ remainingRetentionDays: {
+ xmlName: "RemainingRetentionDays",
+ serializedName: "RemainingRetentionDays",
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var ContainerItem = {
+ xmlName: "Container",
+ serializedName: "ContainerItem",
+ type: {
+ name: "Composite",
+ className: "ContainerItem",
+ modelProperties: {
+ name: {
+ xmlName: "Name",
+ required: true,
+ serializedName: "Name",
+ type: {
+ name: "String"
+ }
+ },
+ deleted: {
+ xmlName: "Deleted",
+ serializedName: "Deleted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ version: {
+ xmlName: "Version",
+ serializedName: "Version",
+ type: {
+ name: "String"
+ }
+ },
+ properties: {
+ xmlName: "Properties",
+ required: true,
+ serializedName: "Properties",
+ type: {
+ name: "Composite",
+ className: "ContainerProperties"
+ }
+ },
+ metadata: {
+ xmlName: "Metadata",
+ serializedName: "Metadata",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var DelimitedTextConfiguration = {
+ serializedName: "DelimitedTextConfiguration",
+ type: {
+ name: "Composite",
+ className: "DelimitedTextConfiguration",
+ modelProperties: {
+ columnSeparator: {
+ xmlName: "ColumnSeparator",
+ required: true,
+ serializedName: "ColumnSeparator",
+ type: {
+ name: "String"
+ }
+ },
+ fieldQuote: {
+ xmlName: "FieldQuote",
+ required: true,
+ serializedName: "FieldQuote",
+ type: {
+ name: "String"
+ }
+ },
+ recordSeparator: {
+ xmlName: "RecordSeparator",
+ required: true,
+ serializedName: "RecordSeparator",
+ type: {
+ name: "String"
+ }
+ },
+ escapeChar: {
+ xmlName: "EscapeChar",
+ required: true,
+ serializedName: "EscapeChar",
+ type: {
+ name: "String"
+ }
+ },
+ headersPresent: {
+ xmlName: "HasHeaders",
+ required: true,
+ serializedName: "HeadersPresent",
+ type: {
+ name: "Boolean"
+ }
+ }
+ }
+ }
+};
+var JsonTextConfiguration = {
+ serializedName: "JsonTextConfiguration",
+ type: {
+ name: "Composite",
+ className: "JsonTextConfiguration",
+ modelProperties: {
+ recordSeparator: {
+ xmlName: "RecordSeparator",
+ required: true,
+ serializedName: "RecordSeparator",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ListContainersSegmentResponse = {
+ xmlName: "EnumerationResults",
+ serializedName: "ListContainersSegmentResponse",
+ type: {
+ name: "Composite",
+ className: "ListContainersSegmentResponse",
+ modelProperties: {
+ serviceEndpoint: {
+ xmlIsAttribute: true,
+ xmlName: "ServiceEndpoint",
+ required: true,
+ serializedName: "ServiceEndpoint",
+ type: {
+ name: "String"
+ }
+ },
+ prefix: {
+ xmlName: "Prefix",
+ serializedName: "Prefix",
+ type: {
+ name: "String"
+ }
+ },
+ marker: {
+ xmlName: "Marker",
+ serializedName: "Marker",
+ type: {
+ name: "String"
+ }
+ },
+ maxPageSize: {
+ xmlName: "MaxResults",
+ serializedName: "MaxResults",
+ type: {
+ name: "Number"
+ }
+ },
+ containerItems: {
+ xmlIsWrapped: true,
+ xmlName: "Containers",
+ xmlElementName: "Container",
+ required: true,
+ serializedName: "ContainerItems",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "ContainerItem"
+ }
+ }
+ }
+ },
+ continuationToken: {
+ xmlName: "NextMarker",
+ serializedName: "NextMarker",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var CorsRule = {
+ serializedName: "CorsRule",
+ type: {
+ name: "Composite",
+ className: "CorsRule",
+ modelProperties: {
+ allowedOrigins: {
+ xmlName: "AllowedOrigins",
+ required: true,
+ serializedName: "AllowedOrigins",
+ type: {
+ name: "String"
+ }
+ },
+ allowedMethods: {
+ xmlName: "AllowedMethods",
+ required: true,
+ serializedName: "AllowedMethods",
+ type: {
+ name: "String"
+ }
+ },
+ allowedHeaders: {
+ xmlName: "AllowedHeaders",
+ required: true,
+ serializedName: "AllowedHeaders",
+ type: {
+ name: "String"
+ }
+ },
+ exposedHeaders: {
+ xmlName: "ExposedHeaders",
+ required: true,
+ serializedName: "ExposedHeaders",
+ type: {
+ name: "String"
+ }
+ },
+ maxAgeInSeconds: {
+ xmlName: "MaxAgeInSeconds",
+ required: true,
+ serializedName: "MaxAgeInSeconds",
+ constraints: {
+ InclusiveMinimum: 0
+ },
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var FilterBlobItem = {
+ xmlName: "Blob",
+ serializedName: "FilterBlobItem",
+ type: {
+ name: "Composite",
+ className: "FilterBlobItem",
+ modelProperties: {
+ name: {
+ xmlName: "Name",
+ required: true,
+ serializedName: "Name",
+ type: {
+ name: "String"
+ }
+ },
+ containerName: {
+ xmlName: "ContainerName",
+ required: true,
+ serializedName: "ContainerName",
+ type: {
+ name: "String"
+ }
+ },
+ tagValue: {
+ xmlName: "TagValue",
+ required: true,
+ serializedName: "TagValue",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var FilterBlobSegment = {
+ xmlName: "EnumerationResults",
+ serializedName: "FilterBlobSegment",
+ type: {
+ name: "Composite",
+ className: "FilterBlobSegment",
+ modelProperties: {
+ serviceEndpoint: {
+ xmlIsAttribute: true,
+ xmlName: "ServiceEndpoint",
+ required: true,
+ serializedName: "ServiceEndpoint",
+ type: {
+ name: "String"
+ }
+ },
+ where: {
+ xmlName: "Where",
+ required: true,
+ serializedName: "Where",
+ type: {
+ name: "String"
+ }
+ },
+ blobs: {
+ xmlIsWrapped: true,
+ xmlName: "Blobs",
+ xmlElementName: "Blob",
+ required: true,
+ serializedName: "Blobs",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "FilterBlobItem"
+ }
+ }
+ }
+ },
+ continuationToken: {
+ xmlName: "NextMarker",
+ serializedName: "NextMarker",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var GeoReplication = {
+ serializedName: "GeoReplication",
+ type: {
+ name: "Composite",
+ className: "GeoReplication",
+ modelProperties: {
+ status: {
+ xmlName: "Status",
+ required: true,
+ serializedName: "Status",
+ type: {
+ name: "String"
+ }
+ },
+ lastSyncOn: {
+ xmlName: "LastSyncTime",
+ required: true,
+ serializedName: "LastSyncTime",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+ }
+ }
+};
+var RetentionPolicy = {
+ serializedName: "RetentionPolicy",
+ type: {
+ name: "Composite",
+ className: "RetentionPolicy",
+ modelProperties: {
+ enabled: {
+ xmlName: "Enabled",
+ required: true,
+ serializedName: "Enabled",
+ type: {
+ name: "Boolean"
+ }
+ },
+ days: {
+ xmlName: "Days",
+ serializedName: "Days",
+ constraints: {
+ InclusiveMinimum: 1
+ },
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var Logging = {
+ serializedName: "Logging",
+ type: {
+ name: "Composite",
+ className: "Logging",
+ modelProperties: {
+ version: {
+ xmlName: "Version",
+ required: true,
+ serializedName: "Version",
+ type: {
+ name: "String"
+ }
+ },
+ deleteProperty: {
+ xmlName: "Delete",
+ required: true,
+ serializedName: "Delete",
+ type: {
+ name: "Boolean"
+ }
+ },
+ read: {
+ xmlName: "Read",
+ required: true,
+ serializedName: "Read",
+ type: {
+ name: "Boolean"
+ }
+ },
+ write: {
+ xmlName: "Write",
+ required: true,
+ serializedName: "Write",
+ type: {
+ name: "Boolean"
+ }
+ },
+ retentionPolicy: {
+ xmlName: "RetentionPolicy",
+ required: true,
+ serializedName: "RetentionPolicy",
+ type: {
+ name: "Composite",
+ className: "RetentionPolicy"
+ }
+ }
+ }
+ }
+};
+var Metrics = {
+ serializedName: "Metrics",
+ type: {
+ name: "Composite",
+ className: "Metrics",
+ modelProperties: {
+ version: {
+ xmlName: "Version",
+ serializedName: "Version",
+ type: {
+ name: "String"
+ }
+ },
+ enabled: {
+ xmlName: "Enabled",
+ required: true,
+ serializedName: "Enabled",
+ type: {
+ name: "Boolean"
+ }
+ },
+ includeAPIs: {
+ xmlName: "IncludeAPIs",
+ serializedName: "IncludeAPIs",
+ type: {
+ name: "Boolean"
+ }
+ },
+ retentionPolicy: {
+ xmlName: "RetentionPolicy",
+ serializedName: "RetentionPolicy",
+ type: {
+ name: "Composite",
+ className: "RetentionPolicy"
+ }
+ }
+ }
+ }
+};
+var PageRange = {
+ serializedName: "PageRange",
+ type: {
+ name: "Composite",
+ className: "PageRange",
+ modelProperties: {
+ start: {
+ xmlName: "Start",
+ required: true,
+ serializedName: "Start",
+ type: {
+ name: "Number"
+ }
+ },
+ end: {
+ xmlName: "End",
+ required: true,
+ serializedName: "End",
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var ClearRange = {
+ serializedName: "ClearRange",
+ type: {
+ name: "Composite",
+ className: "ClearRange",
+ modelProperties: {
+ start: {
+ xmlName: "Start",
+ required: true,
+ serializedName: "Start",
+ type: {
+ name: "Number"
+ }
+ },
+ end: {
+ xmlName: "End",
+ required: true,
+ serializedName: "End",
+ type: {
+ name: "Number"
+ }
+ }
+ }
+ }
+};
+var PageList = {
+ serializedName: "PageList",
+ type: {
+ name: "Composite",
+ className: "PageList",
+ modelProperties: {
+ pageRange: {
+ xmlName: "PageRange",
+ xmlElementName: "PageRange",
+ serializedName: "PageRange",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "PageRange"
+ }
+ }
+ }
+ },
+ clearRange: {
+ xmlName: "ClearRange",
+ xmlElementName: "ClearRange",
+ serializedName: "ClearRange",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "ClearRange"
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var QueryFormat = {
+ serializedName: "QueryFormat",
+ type: {
+ name: "Composite",
+ className: "QueryFormat",
+ modelProperties: {
+ type: {
+ xmlName: "Type",
+ serializedName: "Type",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "delimited",
+ "json"
+ ]
+ }
+ },
+ delimitedTextConfiguration: {
+ xmlName: "DelimitedTextConfiguration",
+ serializedName: "DelimitedTextConfiguration",
+ type: {
+ name: "Composite",
+ className: "DelimitedTextConfiguration"
+ }
+ },
+ jsonTextConfiguration: {
+ xmlName: "JsonTextConfiguration",
+ serializedName: "JsonTextConfiguration",
+ type: {
+ name: "Composite",
+ className: "JsonTextConfiguration"
+ }
+ }
+ }
+ }
+};
+var QuerySerialization = {
+ serializedName: "QuerySerialization",
+ type: {
+ name: "Composite",
+ className: "QuerySerialization",
+ modelProperties: {
+ format: {
+ xmlName: "Format",
+ required: true,
+ serializedName: "Format",
+ type: {
+ name: "Composite",
+ className: "QueryFormat"
+ }
+ }
+ }
+ }
+};
+var QueryRequest = {
+ serializedName: "QueryRequest",
+ type: {
+ name: "Composite",
+ className: "QueryRequest",
+ modelProperties: {
+ queryType: {
+ xmlName: "QueryType",
+ required: true,
+ isConstant: true,
+ serializedName: "QueryType",
+ defaultValue: 'SQL',
+ type: {
+ name: "String"
+ }
+ },
+ expression: {
+ xmlName: "Expression",
+ required: true,
+ serializedName: "Expression",
+ type: {
+ name: "String"
+ }
+ },
+ inputSerialization: {
+ xmlName: "InputSerialization",
+ serializedName: "InputSerialization",
+ type: {
+ name: "Composite",
+ className: "QuerySerialization"
+ }
+ },
+ outputSerialization: {
+ xmlName: "OutputSerialization",
+ serializedName: "OutputSerialization",
+ type: {
+ name: "Composite",
+ className: "QuerySerialization"
+ }
+ }
+ }
+ }
+};
+var SignedIdentifier = {
+ serializedName: "SignedIdentifier",
+ type: {
+ name: "Composite",
+ className: "SignedIdentifier",
+ modelProperties: {
+ id: {
+ xmlName: "Id",
+ required: true,
+ serializedName: "Id",
+ type: {
+ name: "String"
+ }
+ },
+ accessPolicy: {
+ xmlName: "AccessPolicy",
+ required: true,
+ serializedName: "AccessPolicy",
+ type: {
+ name: "Composite",
+ className: "AccessPolicy"
+ }
+ }
+ }
+ }
+};
+var StaticWebsite = {
+ serializedName: "StaticWebsite",
+ type: {
+ name: "Composite",
+ className: "StaticWebsite",
+ modelProperties: {
+ enabled: {
+ xmlName: "Enabled",
+ required: true,
+ serializedName: "Enabled",
+ type: {
+ name: "Boolean"
+ }
+ },
+ indexDocument: {
+ xmlName: "IndexDocument",
+ serializedName: "IndexDocument",
+ type: {
+ name: "String"
+ }
+ },
+ errorDocument404Path: {
+ xmlName: "ErrorDocument404Path",
+ serializedName: "ErrorDocument404Path",
+ type: {
+ name: "String"
+ }
+ },
+ defaultIndexDocumentPath: {
+ xmlName: "DefaultIndexDocumentPath",
+ serializedName: "DefaultIndexDocumentPath",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobServiceProperties = {
+ xmlName: "StorageServiceProperties",
+ serializedName: "BlobServiceProperties",
+ type: {
+ name: "Composite",
+ className: "BlobServiceProperties",
+ modelProperties: {
+ blobAnalyticsLogging: {
+ xmlName: "Logging",
+ serializedName: "Logging",
+ type: {
+ name: "Composite",
+ className: "Logging"
+ }
+ },
+ hourMetrics: {
+ xmlName: "HourMetrics",
+ serializedName: "HourMetrics",
+ type: {
+ name: "Composite",
+ className: "Metrics"
+ }
+ },
+ minuteMetrics: {
+ xmlName: "MinuteMetrics",
+ serializedName: "MinuteMetrics",
+ type: {
+ name: "Composite",
+ className: "Metrics"
+ }
+ },
+ cors: {
+ xmlIsWrapped: true,
+ xmlName: "Cors",
+ xmlElementName: "CorsRule",
+ serializedName: "Cors",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "CorsRule"
+ }
+ }
+ }
+ },
+ defaultServiceVersion: {
+ xmlName: "DefaultServiceVersion",
+ serializedName: "DefaultServiceVersion",
+ type: {
+ name: "String"
+ }
+ },
+ deleteRetentionPolicy: {
+ xmlName: "DeleteRetentionPolicy",
+ serializedName: "DeleteRetentionPolicy",
+ type: {
+ name: "Composite",
+ className: "RetentionPolicy"
+ }
+ },
+ staticWebsite: {
+ xmlName: "StaticWebsite",
+ serializedName: "StaticWebsite",
+ type: {
+ name: "Composite",
+ className: "StaticWebsite"
+ }
+ }
+ }
+ }
+};
+var BlobServiceStatistics = {
+ xmlName: "StorageServiceStats",
+ serializedName: "BlobServiceStatistics",
+ type: {
+ name: "Composite",
+ className: "BlobServiceStatistics",
+ modelProperties: {
+ geoReplication: {
+ xmlName: "GeoReplication",
+ serializedName: "GeoReplication",
+ type: {
+ name: "Composite",
+ className: "GeoReplication"
+ }
+ }
+ }
+ }
+};
+var ServiceSetPropertiesHeaders = {
+ serializedName: "service-setproperties-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceSetPropertiesHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceGetPropertiesHeaders = {
+ serializedName: "service-getproperties-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceGetPropertiesHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceGetStatisticsHeaders = {
+ serializedName: "service-getstatistics-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceGetStatisticsHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceListContainersSegmentHeaders = {
+ serializedName: "service-listcontainerssegment-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceListContainersSegmentHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceGetUserDelegationKeyHeaders = {
+ serializedName: "service-getuserdelegationkey-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceGetUserDelegationKeyHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceGetAccountInfoHeaders = {
+ serializedName: "service-getaccountinfo-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceGetAccountInfoHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ skuName: {
+ serializedName: "x-ms-sku-name",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Standard_LRS",
+ "Standard_GRS",
+ "Standard_RAGRS",
+ "Standard_ZRS",
+ "Premium_LRS"
+ ]
+ }
+ },
+ accountKind: {
+ serializedName: "x-ms-account-kind",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Storage",
+ "BlobStorage",
+ "StorageV2",
+ "FileStorage",
+ "BlockBlobStorage"
+ ]
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceSubmitBatchHeaders = {
+ serializedName: "service-submitbatch-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceSubmitBatchHeaders",
+ modelProperties: {
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ServiceFilterBlobsHeaders = {
+ serializedName: "service-filterblobs-headers",
+ type: {
+ name: "Composite",
+ className: "ServiceFilterBlobsHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerCreateHeaders = {
+ serializedName: "container-create-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerCreateHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerGetPropertiesHeaders = {
+ serializedName: "container-getproperties-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerGetPropertiesHeaders",
+ modelProperties: {
+ metadata: {
+ serializedName: "x-ms-meta",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-meta-"
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseDuration: {
+ serializedName: "x-ms-lease-duration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ leaseState: {
+ serializedName: "x-ms-lease-state",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseStatus: {
+ serializedName: "x-ms-lease-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobPublicAccess: {
+ serializedName: "x-ms-blob-public-access",
+ type: {
+ name: "String"
+ }
+ },
+ hasImmutabilityPolicy: {
+ serializedName: "x-ms-has-immutability-policy",
+ type: {
+ name: "Boolean"
+ }
+ },
+ hasLegalHold: {
+ serializedName: "x-ms-has-legal-hold",
+ type: {
+ name: "Boolean"
+ }
+ },
+ defaultEncryptionScope: {
+ serializedName: "x-ms-default-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ denyEncryptionScopeOverride: {
+ serializedName: "x-ms-deny-encryption-scope-override",
+ type: {
+ name: "Boolean"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerDeleteHeaders = {
+ serializedName: "container-delete-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerDeleteHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerSetMetadataHeaders = {
+ serializedName: "container-setmetadata-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerSetMetadataHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerGetAccessPolicyHeaders = {
+ serializedName: "container-getaccesspolicy-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerGetAccessPolicyHeaders",
+ modelProperties: {
+ blobPublicAccess: {
+ serializedName: "x-ms-blob-public-access",
+ type: {
+ name: "String"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerSetAccessPolicyHeaders = {
+ serializedName: "container-setaccesspolicy-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerSetAccessPolicyHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerRestoreHeaders = {
+ serializedName: "container-restore-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerRestoreHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerAcquireLeaseHeaders = {
+ serializedName: "container-acquirelease-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerAcquireLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerReleaseLeaseHeaders = {
+ serializedName: "container-releaselease-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerReleaseLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerRenewLeaseHeaders = {
+ serializedName: "container-renewlease-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerRenewLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerBreakLeaseHeaders = {
+ serializedName: "container-breaklease-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerBreakLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseTime: {
+ serializedName: "x-ms-lease-time",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerChangeLeaseHeaders = {
+ serializedName: "container-changelease-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerChangeLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerListBlobFlatSegmentHeaders = {
+ serializedName: "container-listblobflatsegment-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerListBlobFlatSegmentHeaders",
+ modelProperties: {
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerListBlobHierarchySegmentHeaders = {
+ serializedName: "container-listblobhierarchysegment-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerListBlobHierarchySegmentHeaders",
+ modelProperties: {
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var ContainerGetAccountInfoHeaders = {
+ serializedName: "container-getaccountinfo-headers",
+ type: {
+ name: "Composite",
+ className: "ContainerGetAccountInfoHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ skuName: {
+ serializedName: "x-ms-sku-name",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Standard_LRS",
+ "Standard_GRS",
+ "Standard_RAGRS",
+ "Standard_ZRS",
+ "Premium_LRS"
+ ]
+ }
+ },
+ accountKind: {
+ serializedName: "x-ms-account-kind",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Storage",
+ "BlobStorage",
+ "StorageV2",
+ "FileStorage",
+ "BlockBlobStorage"
+ ]
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobDownloadHeaders = {
+ serializedName: "blob-download-headers",
+ type: {
+ name: "Composite",
+ className: "BlobDownloadHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ metadata: {
+ serializedName: "x-ms-meta",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-meta-"
+ },
+ objectReplicationPolicyId: {
+ serializedName: "x-ms-or-policy-id",
+ type: {
+ name: "String"
+ }
+ },
+ objectReplicationRules: {
+ serializedName: "x-ms-or",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-or-"
+ },
+ contentLength: {
+ serializedName: "content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ contentRange: {
+ serializedName: "content-range",
+ type: {
+ name: "String"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ contentEncoding: {
+ serializedName: "content-encoding",
+ type: {
+ name: "String"
+ }
+ },
+ cacheControl: {
+ serializedName: "cache-control",
+ type: {
+ name: "String"
+ }
+ },
+ contentDisposition: {
+ serializedName: "content-disposition",
+ type: {
+ name: "String"
+ }
+ },
+ contentLanguage: {
+ serializedName: "content-language",
+ type: {
+ name: "String"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ blobType: {
+ serializedName: "x-ms-blob-type",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "BlockBlob",
+ "PageBlob",
+ "AppendBlob"
+ ]
+ }
+ },
+ copyCompletedOn: {
+ serializedName: "x-ms-copy-completion-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyStatusDescription: {
+ serializedName: "x-ms-copy-status-description",
+ type: {
+ name: "String"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyProgress: {
+ serializedName: "x-ms-copy-progress",
+ type: {
+ name: "String"
+ }
+ },
+ copySource: {
+ serializedName: "x-ms-copy-source",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ leaseDuration: {
+ serializedName: "x-ms-lease-duration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ leaseState: {
+ serializedName: "x-ms-lease-state",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseStatus: {
+ serializedName: "x-ms-lease-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ acceptRanges: {
+ serializedName: "accept-ranges",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobCommittedBlockCount: {
+ serializedName: "x-ms-blob-committed-block-count",
+ type: {
+ name: "Number"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ blobContentMD5: {
+ serializedName: "x-ms-blob-content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ tagCount: {
+ serializedName: "x-ms-tag-count",
+ type: {
+ name: "Number"
+ }
+ },
+ isSealed: {
+ serializedName: "x-ms-blob-sealed",
+ type: {
+ name: "Boolean"
+ }
+ },
+ contentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobGetPropertiesHeaders = {
+ serializedName: "blob-getproperties-headers",
+ type: {
+ name: "Composite",
+ className: "BlobGetPropertiesHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ createdOn: {
+ serializedName: "x-ms-creation-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ metadata: {
+ serializedName: "x-ms-meta",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-meta-"
+ },
+ objectReplicationPolicyId: {
+ serializedName: "x-ms-or-policy-id",
+ type: {
+ name: "String"
+ }
+ },
+ objectReplicationRules: {
+ serializedName: "x-ms-or",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-or-"
+ },
+ blobType: {
+ serializedName: "x-ms-blob-type",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "BlockBlob",
+ "PageBlob",
+ "AppendBlob"
+ ]
+ }
+ },
+ copyCompletedOn: {
+ serializedName: "x-ms-copy-completion-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyStatusDescription: {
+ serializedName: "x-ms-copy-status-description",
+ type: {
+ name: "String"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyProgress: {
+ serializedName: "x-ms-copy-progress",
+ type: {
+ name: "String"
+ }
+ },
+ copySource: {
+ serializedName: "x-ms-copy-source",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ isIncrementalCopy: {
+ serializedName: "x-ms-incremental-copy",
+ type: {
+ name: "Boolean"
+ }
+ },
+ destinationSnapshot: {
+ serializedName: "x-ms-copy-destination-snapshot",
+ type: {
+ name: "String"
+ }
+ },
+ leaseDuration: {
+ serializedName: "x-ms-lease-duration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ leaseState: {
+ serializedName: "x-ms-lease-state",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseStatus: {
+ serializedName: "x-ms-lease-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ contentLength: {
+ serializedName: "content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ contentEncoding: {
+ serializedName: "content-encoding",
+ type: {
+ name: "String"
+ }
+ },
+ contentDisposition: {
+ serializedName: "content-disposition",
+ type: {
+ name: "String"
+ }
+ },
+ contentLanguage: {
+ serializedName: "content-language",
+ type: {
+ name: "String"
+ }
+ },
+ cacheControl: {
+ serializedName: "cache-control",
+ type: {
+ name: "String"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ acceptRanges: {
+ serializedName: "accept-ranges",
+ type: {
+ name: "String"
+ }
+ },
+ blobCommittedBlockCount: {
+ serializedName: "x-ms-blob-committed-block-count",
+ type: {
+ name: "Number"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ accessTier: {
+ serializedName: "x-ms-access-tier",
+ type: {
+ name: "String"
+ }
+ },
+ accessTierInferred: {
+ serializedName: "x-ms-access-tier-inferred",
+ type: {
+ name: "Boolean"
+ }
+ },
+ archiveStatus: {
+ serializedName: "x-ms-archive-status",
+ type: {
+ name: "String"
+ }
+ },
+ accessTierChangedOn: {
+ serializedName: "x-ms-access-tier-change-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ isCurrentVersion: {
+ serializedName: "x-ms-is-current-version",
+ type: {
+ name: "Boolean"
+ }
+ },
+ tagCount: {
+ serializedName: "x-ms-tag-count",
+ type: {
+ name: "Number"
+ }
+ },
+ expiresOn: {
+ serializedName: "x-ms-expiry-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isSealed: {
+ serializedName: "x-ms-blob-sealed",
+ type: {
+ name: "Boolean"
+ }
+ },
+ rehydratePriority: {
+ serializedName: "x-ms-rehydrate-priority",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobDeleteHeaders = {
+ serializedName: "blob-delete-headers",
+ type: {
+ name: "Composite",
+ className: "BlobDeleteHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetAccessControlHeaders = {
+ serializedName: "blob-setaccesscontrol-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetAccessControlHeaders",
+ modelProperties: {
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobGetAccessControlHeaders = {
+ serializedName: "blob-getaccesscontrol-headers",
+ type: {
+ name: "Composite",
+ className: "BlobGetAccessControlHeaders",
+ modelProperties: {
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ xMsOwner: {
+ serializedName: "x-ms-owner",
+ type: {
+ name: "String"
+ }
+ },
+ xMsGroup: {
+ serializedName: "x-ms-group",
+ type: {
+ name: "String"
+ }
+ },
+ xMsPermissions: {
+ serializedName: "x-ms-permissions",
+ type: {
+ name: "String"
+ }
+ },
+ xMsAcl: {
+ serializedName: "x-ms-acl",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobRenameHeaders = {
+ serializedName: "blob-rename-headers",
+ type: {
+ name: "Composite",
+ className: "BlobRenameHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ contentLength: {
+ serializedName: "content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+ }
+ }
+};
+var PageBlobCreateHeaders = {
+ serializedName: "pageblob-create-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobCreateHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var AppendBlobCreateHeaders = {
+ serializedName: "appendblob-create-headers",
+ type: {
+ name: "Composite",
+ className: "AppendBlobCreateHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlockBlobUploadHeaders = {
+ serializedName: "blockblob-upload-headers",
+ type: {
+ name: "Composite",
+ className: "BlockBlobUploadHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobUndeleteHeaders = {
+ serializedName: "blob-undelete-headers",
+ type: {
+ name: "Composite",
+ className: "BlobUndeleteHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetExpiryHeaders = {
+ serializedName: "blob-setexpiry-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetExpiryHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetHTTPHeadersHeaders = {
+ serializedName: "blob-sethttpheaders-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetHTTPHeadersHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetMetadataHeaders = {
+ serializedName: "blob-setmetadata-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetMetadataHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobAcquireLeaseHeaders = {
+ serializedName: "blob-acquirelease-headers",
+ type: {
+ name: "Composite",
+ className: "BlobAcquireLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobReleaseLeaseHeaders = {
+ serializedName: "blob-releaselease-headers",
+ type: {
+ name: "Composite",
+ className: "BlobReleaseLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobRenewLeaseHeaders = {
+ serializedName: "blob-renewlease-headers",
+ type: {
+ name: "Composite",
+ className: "BlobRenewLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobChangeLeaseHeaders = {
+ serializedName: "blob-changelease-headers",
+ type: {
+ name: "Composite",
+ className: "BlobChangeLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ leaseId: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobBreakLeaseHeaders = {
+ serializedName: "blob-breaklease-headers",
+ type: {
+ name: "Composite",
+ className: "BlobBreakLeaseHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ leaseTime: {
+ serializedName: "x-ms-lease-time",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobCreateSnapshotHeaders = {
+ serializedName: "blob-createsnapshot-headers",
+ type: {
+ name: "Composite",
+ className: "BlobCreateSnapshotHeaders",
+ modelProperties: {
+ snapshot: {
+ serializedName: "x-ms-snapshot",
+ type: {
+ name: "String"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobStartCopyFromURLHeaders = {
+ serializedName: "blob-startcopyfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "BlobStartCopyFromURLHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobCopyFromURLHeaders = {
+ serializedName: "blob-copyfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "BlobCopyFromURLHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "success"
+ ]
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobAbortCopyFromURLHeaders = {
+ serializedName: "blob-abortcopyfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "BlobAbortCopyFromURLHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetTierHeaders = {
+ serializedName: "blob-settier-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetTierHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobGetAccountInfoHeaders = {
+ serializedName: "blob-getaccountinfo-headers",
+ type: {
+ name: "Composite",
+ className: "BlobGetAccountInfoHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ skuName: {
+ serializedName: "x-ms-sku-name",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Standard_LRS",
+ "Standard_GRS",
+ "Standard_RAGRS",
+ "Standard_ZRS",
+ "Premium_LRS"
+ ]
+ }
+ },
+ accountKind: {
+ serializedName: "x-ms-account-kind",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "Storage",
+ "BlobStorage",
+ "StorageV2",
+ "FileStorage",
+ "BlockBlobStorage"
+ ]
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlockBlobStageBlockHeaders = {
+ serializedName: "blockblob-stageblock-headers",
+ type: {
+ name: "Composite",
+ className: "BlockBlobStageBlockHeaders",
+ modelProperties: {
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlockBlobStageBlockFromURLHeaders = {
+ serializedName: "blockblob-stageblockfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "BlockBlobStageBlockFromURLHeaders",
+ modelProperties: {
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlockBlobCommitBlockListHeaders = {
+ serializedName: "blockblob-commitblocklist-headers",
+ type: {
+ name: "Composite",
+ className: "BlockBlobCommitBlockListHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ versionId: {
+ serializedName: "x-ms-version-id",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlockBlobGetBlockListHeaders = {
+ serializedName: "blockblob-getblocklist-headers",
+ type: {
+ name: "Composite",
+ className: "BlockBlobGetBlockListHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ blobContentLength: {
+ serializedName: "x-ms-blob-content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobUploadPagesHeaders = {
+ serializedName: "pageblob-uploadpages-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobUploadPagesHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobClearPagesHeaders = {
+ serializedName: "pageblob-clearpages-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobClearPagesHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobUploadPagesFromURLHeaders = {
+ serializedName: "pageblob-uploadpagesfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobUploadPagesFromURLHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobGetPageRangesHeaders = {
+ serializedName: "pageblob-getpageranges-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobGetPageRangesHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ blobContentLength: {
+ serializedName: "x-ms-blob-content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobGetPageRangesDiffHeaders = {
+ serializedName: "pageblob-getpagerangesdiff-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobGetPageRangesDiffHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ blobContentLength: {
+ serializedName: "x-ms-blob-content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobResizeHeaders = {
+ serializedName: "pageblob-resize-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobResizeHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobUpdateSequenceNumberHeaders = {
+ serializedName: "pageblob-updatesequencenumber-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobUpdateSequenceNumberHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var PageBlobCopyIncrementalHeaders = {
+ serializedName: "pageblob-copyincremental-headers",
+ type: {
+ name: "Composite",
+ className: "PageBlobCopyIncrementalHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var AppendBlobAppendBlockHeaders = {
+ serializedName: "appendblob-appendblock-headers",
+ type: {
+ name: "Composite",
+ className: "AppendBlobAppendBlockHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobAppendOffset: {
+ serializedName: "x-ms-blob-append-offset",
+ type: {
+ name: "String"
+ }
+ },
+ blobCommittedBlockCount: {
+ serializedName: "x-ms-blob-committed-block-count",
+ type: {
+ name: "Number"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var AppendBlobAppendBlockFromUrlHeaders = {
+ serializedName: "appendblob-appendblockfromurl-headers",
+ type: {
+ name: "Composite",
+ className: "AppendBlobAppendBlockFromUrlHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ xMsContentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobAppendOffset: {
+ serializedName: "x-ms-blob-append-offset",
+ type: {
+ name: "String"
+ }
+ },
+ blobCommittedBlockCount: {
+ serializedName: "x-ms-blob-committed-block-count",
+ type: {
+ name: "Number"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-request-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var AppendBlobSealHeaders = {
+ serializedName: "appendblob-seal-headers",
+ type: {
+ name: "Composite",
+ className: "AppendBlobSealHeaders",
+ modelProperties: {
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ isSealed: {
+ serializedName: "x-ms-blob-sealed",
+ type: {
+ name: "Boolean"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobQueryHeaders = {
+ serializedName: "blob-query-headers",
+ type: {
+ name: "Composite",
+ className: "BlobQueryHeaders",
+ modelProperties: {
+ lastModified: {
+ serializedName: "last-modified",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ metadata: {
+ serializedName: "x-ms-meta",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-meta-"
+ },
+ contentLength: {
+ serializedName: "content-length",
+ type: {
+ name: "Number"
+ }
+ },
+ contentType: {
+ serializedName: "content-type",
+ type: {
+ name: "String"
+ }
+ },
+ contentRange: {
+ serializedName: "content-range",
+ type: {
+ name: "String"
+ }
+ },
+ etag: {
+ serializedName: "etag",
+ type: {
+ name: "String"
+ }
+ },
+ contentMD5: {
+ serializedName: "content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ contentEncoding: {
+ serializedName: "content-encoding",
+ type: {
+ name: "String"
+ }
+ },
+ cacheControl: {
+ serializedName: "cache-control",
+ type: {
+ name: "String"
+ }
+ },
+ contentDisposition: {
+ serializedName: "content-disposition",
+ type: {
+ name: "String"
+ }
+ },
+ contentLanguage: {
+ serializedName: "content-language",
+ type: {
+ name: "String"
+ }
+ },
+ blobSequenceNumber: {
+ serializedName: "x-ms-blob-sequence-number",
+ type: {
+ name: "Number"
+ }
+ },
+ blobType: {
+ serializedName: "x-ms-blob-type",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "BlockBlob",
+ "PageBlob",
+ "AppendBlob"
+ ]
+ }
+ },
+ copyCompletionTime: {
+ serializedName: "x-ms-copy-completion-time",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ copyStatusDescription: {
+ serializedName: "x-ms-copy-status-description",
+ type: {
+ name: "String"
+ }
+ },
+ copyId: {
+ serializedName: "x-ms-copy-id",
+ type: {
+ name: "String"
+ }
+ },
+ copyProgress: {
+ serializedName: "x-ms-copy-progress",
+ type: {
+ name: "String"
+ }
+ },
+ copySource: {
+ serializedName: "x-ms-copy-source",
+ type: {
+ name: "String"
+ }
+ },
+ copyStatus: {
+ serializedName: "x-ms-copy-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "pending",
+ "success",
+ "aborted",
+ "failed"
+ ]
+ }
+ },
+ leaseDuration: {
+ serializedName: "x-ms-lease-duration",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "infinite",
+ "fixed"
+ ]
+ }
+ },
+ leaseState: {
+ serializedName: "x-ms-lease-state",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "available",
+ "leased",
+ "expired",
+ "breaking",
+ "broken"
+ ]
+ }
+ },
+ leaseStatus: {
+ serializedName: "x-ms-lease-status",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "locked",
+ "unlocked"
+ ]
+ }
+ },
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ acceptRanges: {
+ serializedName: "accept-ranges",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ blobCommittedBlockCount: {
+ serializedName: "x-ms-blob-committed-block-count",
+ type: {
+ name: "Number"
+ }
+ },
+ isServerEncrypted: {
+ serializedName: "x-ms-server-encrypted",
+ type: {
+ name: "Boolean"
+ }
+ },
+ encryptionKeySha256: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ },
+ encryptionScope: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ },
+ blobContentMD5: {
+ serializedName: "x-ms-blob-content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ contentCrc64: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobGetTagsHeaders = {
+ serializedName: "blob-gettags-headers",
+ type: {
+ name: "Composite",
+ className: "BlobGetTagsHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+var BlobSetTagsHeaders = {
+ serializedName: "blob-settags-headers",
+ type: {
+ name: "Composite",
+ className: "BlobSetTagsHeaders",
+ modelProperties: {
+ clientRequestId: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ requestId: {
+ serializedName: "x-ms-request-id",
+ type: {
+ name: "String"
+ }
+ },
+ version: {
+ serializedName: "x-ms-version",
+ type: {
+ name: "String"
+ }
+ },
+ date: {
+ serializedName: "date",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ },
+ errorCode: {
+ serializedName: "x-ms-error-code",
+ type: {
+ name: "String"
+ }
+ }
+ }
+ }
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ BlobServiceProperties: BlobServiceProperties,
+ BlobServiceStatistics: BlobServiceStatistics,
+ ContainerItem: ContainerItem,
+ ContainerProperties: ContainerProperties,
+ CorsRule: CorsRule,
+ FilterBlobItem: FilterBlobItem,
+ FilterBlobSegment: FilterBlobSegment,
+ GeoReplication: GeoReplication,
+ KeyInfo: KeyInfo,
+ ListContainersSegmentResponse: ListContainersSegmentResponse,
+ Logging: Logging,
+ Metrics: Metrics,
+ RetentionPolicy: RetentionPolicy,
+ ServiceFilterBlobsHeaders: ServiceFilterBlobsHeaders,
+ ServiceGetAccountInfoHeaders: ServiceGetAccountInfoHeaders,
+ ServiceGetPropertiesHeaders: ServiceGetPropertiesHeaders,
+ ServiceGetStatisticsHeaders: ServiceGetStatisticsHeaders,
+ ServiceGetUserDelegationKeyHeaders: ServiceGetUserDelegationKeyHeaders,
+ ServiceListContainersSegmentHeaders: ServiceListContainersSegmentHeaders,
+ ServiceSetPropertiesHeaders: ServiceSetPropertiesHeaders,
+ ServiceSubmitBatchHeaders: ServiceSubmitBatchHeaders,
+ StaticWebsite: StaticWebsite,
+ StorageError: StorageError,
+ UserDelegationKey: UserDelegationKey
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+var access = {
+ parameterPath: [
+ "options",
+ "access"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-public-access",
+ type: {
+ name: "String"
+ }
+ }
+};
+var action0 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-lease-action",
+ defaultValue: 'acquire',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action1 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-lease-action",
+ defaultValue: 'release',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action2 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-lease-action",
+ defaultValue: 'renew',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action3 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-lease-action",
+ defaultValue: 'break',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action4 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-lease-action",
+ defaultValue: 'change',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action5 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "action",
+ defaultValue: 'setAccessControl',
+ type: {
+ name: "String"
+ }
+ }
+};
+var action6 = {
+ parameterPath: "action",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "action",
+ defaultValue: 'getAccessControl',
+ type: {
+ name: "String"
+ }
+ }
+};
+var appendPosition = {
+ parameterPath: [
+ "options",
+ "appendPositionAccessConditions",
+ "appendPosition"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-condition-appendpos",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var blobCacheControl = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobCacheControl"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-cache-control",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobContentDisposition = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobContentDisposition"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-content-disposition",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobContentEncoding = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobContentEncoding"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-content-encoding",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobContentLanguage = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobContentLanguage"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-content-language",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobContentLength = {
+ parameterPath: "blobContentLength",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-blob-content-length",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var blobContentMD5 = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobContentMD5"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ }
+};
+var blobContentType = {
+ parameterPath: [
+ "options",
+ "blobHTTPHeaders",
+ "blobContentType"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-content-type",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobSequenceNumber = {
+ parameterPath: [
+ "options",
+ "blobSequenceNumber"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-sequence-number",
+ defaultValue: 0,
+ type: {
+ name: "Number"
+ }
+ }
+};
+var blobTagsString = {
+ parameterPath: [
+ "options",
+ "blobTagsString"
+ ],
+ mapper: {
+ serializedName: "x-ms-tags",
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobType0 = {
+ parameterPath: "blobType",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-blob-type",
+ defaultValue: 'PageBlob',
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobType1 = {
+ parameterPath: "blobType",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-blob-type",
+ defaultValue: 'AppendBlob',
+ type: {
+ name: "String"
+ }
+ }
+};
+var blobType2 = {
+ parameterPath: "blobType",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-blob-type",
+ defaultValue: 'BlockBlob',
+ type: {
+ name: "String"
+ }
+ }
+};
+var blockId = {
+ parameterPath: "blockId",
+ mapper: {
+ required: true,
+ serializedName: "blockid",
+ type: {
+ name: "String"
+ }
+ }
+};
+var breakPeriod = {
+ parameterPath: [
+ "options",
+ "breakPeriod"
+ ],
+ mapper: {
+ serializedName: "x-ms-lease-break-period",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var cacheControl = {
+ parameterPath: [
+ "options",
+ "directoryHttpHeaders",
+ "cacheControl"
+ ],
+ mapper: {
+ serializedName: "x-ms-cache-control",
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp0 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'properties',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp1 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'stats',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp10 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'expiry',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp11 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'snapshot',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp12 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'copy',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp13 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'tier',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp14 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'query',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp15 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'tags',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp16 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'page',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp17 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'pagelist',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp18 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'incrementalcopy',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp19 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'appendblock',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp2 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'list',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp20 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'seal',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp21 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'block',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp22 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'blocklist',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp3 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'userdelegationkey',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp4 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'batch',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp5 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'blobs',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp6 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'metadata',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp7 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'acl',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp8 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'undelete',
+ type: {
+ name: "String"
+ }
+ }
+};
+var comp9 = {
+ parameterPath: "comp",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "comp",
+ defaultValue: 'lease',
+ type: {
+ name: "String"
+ }
+ }
+};
+var contentDisposition = {
+ parameterPath: [
+ "options",
+ "directoryHttpHeaders",
+ "contentDisposition"
+ ],
+ mapper: {
+ serializedName: "x-ms-content-disposition",
+ type: {
+ name: "String"
+ }
+ }
+};
+var contentEncoding = {
+ parameterPath: [
+ "options",
+ "directoryHttpHeaders",
+ "contentEncoding"
+ ],
+ mapper: {
+ serializedName: "x-ms-content-encoding",
+ type: {
+ name: "String"
+ }
+ }
+};
+var contentLanguage = {
+ parameterPath: [
+ "options",
+ "directoryHttpHeaders",
+ "contentLanguage"
+ ],
+ mapper: {
+ serializedName: "x-ms-content-language",
+ type: {
+ name: "String"
+ }
+ }
+};
+var contentLength = {
+ parameterPath: "contentLength",
+ mapper: {
+ required: true,
+ serializedName: "Content-Length",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var contentType = {
+ parameterPath: [
+ "options",
+ "directoryHttpHeaders",
+ "contentType"
+ ],
+ mapper: {
+ serializedName: "x-ms-content-type",
+ type: {
+ name: "String"
+ }
+ }
+};
+var copyActionAbortConstant = {
+ parameterPath: "copyActionAbortConstant",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-copy-action",
+ defaultValue: 'abort',
+ type: {
+ name: "String"
+ }
+ }
+};
+var copyId = {
+ parameterPath: "copyId",
+ mapper: {
+ required: true,
+ serializedName: "copyid",
+ type: {
+ name: "String"
+ }
+ }
+};
+var copySource = {
+ parameterPath: "copySource",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-copy-source",
+ type: {
+ name: "String"
+ }
+ }
+};
+var defaultEncryptionScope = {
+ parameterPath: [
+ "options",
+ "containerEncryptionScope",
+ "defaultEncryptionScope"
+ ],
+ mapper: {
+ serializedName: "x-ms-default-encryption-scope",
+ type: {
+ name: "String"
+ }
+ }
+};
+var deletedContainerName = {
+ parameterPath: [
+ "options",
+ "deletedContainerName"
+ ],
+ mapper: {
+ serializedName: "x-ms-deleted-container-name",
+ type: {
+ name: "String"
+ }
+ }
+};
+var deletedContainerVersion = {
+ parameterPath: [
+ "options",
+ "deletedContainerVersion"
+ ],
+ mapper: {
+ serializedName: "x-ms-deleted-container-version",
+ type: {
+ name: "String"
+ }
+ }
+};
+var deleteSnapshots = {
+ parameterPath: [
+ "options",
+ "deleteSnapshots"
+ ],
+ mapper: {
+ serializedName: "x-ms-delete-snapshots",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "include",
+ "only"
+ ]
+ }
+ }
+};
+var delimiter = {
+ parameterPath: "delimiter",
+ mapper: {
+ required: true,
+ serializedName: "delimiter",
+ type: {
+ name: "String"
+ }
+ }
+};
+var directoryProperties = {
+ parameterPath: [
+ "options",
+ "directoryProperties"
+ ],
+ mapper: {
+ serializedName: "x-ms-properties",
+ type: {
+ name: "String"
+ }
+ }
+};
+var duration = {
+ parameterPath: [
+ "options",
+ "duration"
+ ],
+ mapper: {
+ serializedName: "x-ms-lease-duration",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var encryptionAlgorithm = {
+ parameterPath: [
+ "options",
+ "cpkInfo",
+ "encryptionAlgorithm"
+ ],
+ mapper: {
+ serializedName: "x-ms-encryption-algorithm",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "AES256"
+ ]
+ }
+ }
+};
+var encryptionKey = {
+ parameterPath: [
+ "options",
+ "cpkInfo",
+ "encryptionKey"
+ ],
+ mapper: {
+ serializedName: "x-ms-encryption-key",
+ type: {
+ name: "String"
+ }
+ }
+};
+var encryptionKeySha256 = {
+ parameterPath: [
+ "options",
+ "cpkInfo",
+ "encryptionKeySha256"
+ ],
+ mapper: {
+ serializedName: "x-ms-encryption-key-sha256",
+ type: {
+ name: "String"
+ }
+ }
+};
+var encryptionScope = {
+ parameterPath: [
+ "options",
+ "encryptionScope"
+ ],
+ mapper: {
+ serializedName: "x-ms-encryption-scope",
+ type: {
+ name: "String"
+ }
+ }
+};
+var expiresOn = {
+ parameterPath: [
+ "options",
+ "expiresOn"
+ ],
+ mapper: {
+ serializedName: "x-ms-expiry-time",
+ type: {
+ name: "String"
+ }
+ }
+};
+var expiryOptions = {
+ parameterPath: "expiryOptions",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-expiry-option",
+ type: {
+ name: "String"
+ }
+ }
+};
+var group = {
+ parameterPath: [
+ "options",
+ "group"
+ ],
+ mapper: {
+ serializedName: "x-ms-group",
+ type: {
+ name: "String"
+ }
+ }
+};
+var ifMatch = {
+ parameterPath: [
+ "options",
+ "modifiedAccessConditions",
+ "ifMatch"
+ ],
+ mapper: {
+ serializedName: "If-Match",
+ type: {
+ name: "String"
+ }
+ }
+};
+var ifModifiedSince = {
+ parameterPath: [
+ "options",
+ "modifiedAccessConditions",
+ "ifModifiedSince"
+ ],
+ mapper: {
+ serializedName: "If-Modified-Since",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+};
+var ifNoneMatch = {
+ parameterPath: [
+ "options",
+ "modifiedAccessConditions",
+ "ifNoneMatch"
+ ],
+ mapper: {
+ serializedName: "If-None-Match",
+ type: {
+ name: "String"
+ }
+ }
+};
+var ifSequenceNumberEqualTo = {
+ parameterPath: [
+ "options",
+ "sequenceNumberAccessConditions",
+ "ifSequenceNumberEqualTo"
+ ],
+ mapper: {
+ serializedName: "x-ms-if-sequence-number-eq",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var ifSequenceNumberLessThan = {
+ parameterPath: [
+ "options",
+ "sequenceNumberAccessConditions",
+ "ifSequenceNumberLessThan"
+ ],
+ mapper: {
+ serializedName: "x-ms-if-sequence-number-lt",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var ifSequenceNumberLessThanOrEqualTo = {
+ parameterPath: [
+ "options",
+ "sequenceNumberAccessConditions",
+ "ifSequenceNumberLessThanOrEqualTo"
+ ],
+ mapper: {
+ serializedName: "x-ms-if-sequence-number-le",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var ifTags = {
+ parameterPath: [
+ "options",
+ "modifiedAccessConditions",
+ "ifTags"
+ ],
+ mapper: {
+ serializedName: "x-ms-if-tags",
+ type: {
+ name: "String"
+ }
+ }
+};
+var ifUnmodifiedSince = {
+ parameterPath: [
+ "options",
+ "modifiedAccessConditions",
+ "ifUnmodifiedSince"
+ ],
+ mapper: {
+ serializedName: "If-Unmodified-Since",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+};
+var include0 = {
+ parameterPath: [
+ "options",
+ "include"
+ ],
+ mapper: {
+ serializedName: "include",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "metadata",
+ "deleted"
+ ]
+ }
+ }
+ }
+ },
+ collectionFormat: coreHttp.QueryCollectionFormat.Csv
+};
+var include1 = {
+ parameterPath: [
+ "options",
+ "include"
+ ],
+ mapper: {
+ serializedName: "include",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "copy",
+ "deleted",
+ "metadata",
+ "snapshots",
+ "uncommittedblobs",
+ "versions",
+ "tags"
+ ]
+ }
+ }
+ }
+ },
+ collectionFormat: coreHttp.QueryCollectionFormat.Csv
+};
+var leaseId0 = {
+ parameterPath: [
+ "options",
+ "leaseAccessConditions",
+ "leaseId"
+ ],
+ mapper: {
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var leaseId1 = {
+ parameterPath: "leaseId",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-lease-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var listType = {
+ parameterPath: "listType",
+ mapper: {
+ required: true,
+ serializedName: "blocklisttype",
+ defaultValue: 'committed',
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "committed",
+ "uncommitted",
+ "all"
+ ]
+ }
+ }
+};
+var marker0 = {
+ parameterPath: [
+ "options",
+ "marker"
+ ],
+ mapper: {
+ serializedName: "marker",
+ type: {
+ name: "String"
+ }
+ }
+};
+var maxPageSize = {
+ parameterPath: [
+ "options",
+ "maxPageSize"
+ ],
+ mapper: {
+ serializedName: "maxresults",
+ constraints: {
+ InclusiveMinimum: 1
+ },
+ type: {
+ name: "Number"
+ }
+ }
+};
+var maxSize = {
+ parameterPath: [
+ "options",
+ "appendPositionAccessConditions",
+ "maxSize"
+ ],
+ mapper: {
+ serializedName: "x-ms-blob-condition-maxsize",
+ type: {
+ name: "Number"
+ }
+ }
+};
+var metadata = {
+ parameterPath: [
+ "options",
+ "metadata"
+ ],
+ mapper: {
+ serializedName: "x-ms-meta",
+ type: {
+ name: "Dictionary",
+ value: {
+ type: {
+ name: "String"
+ }
+ }
+ },
+ headerCollectionPrefix: "x-ms-meta-"
+ }
+};
+var multipartContentType = {
+ parameterPath: "multipartContentType",
+ mapper: {
+ required: true,
+ serializedName: "Content-Type",
+ type: {
+ name: "String"
+ }
+ }
+};
+var owner = {
+ parameterPath: [
+ "options",
+ "owner"
+ ],
+ mapper: {
+ serializedName: "x-ms-owner",
+ type: {
+ name: "String"
+ }
+ }
+};
+var pageWrite0 = {
+ parameterPath: "pageWrite",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-page-write",
+ defaultValue: 'update',
+ type: {
+ name: "String"
+ }
+ }
+};
+var pageWrite1 = {
+ parameterPath: "pageWrite",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-page-write",
+ defaultValue: 'clear',
+ type: {
+ name: "String"
+ }
+ }
+};
+var pathRenameMode = {
+ parameterPath: [
+ "options",
+ "pathRenameMode"
+ ],
+ mapper: {
+ serializedName: "mode",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "legacy",
+ "posix"
+ ]
+ }
+ }
+};
+var posixAcl = {
+ parameterPath: [
+ "options",
+ "posixAcl"
+ ],
+ mapper: {
+ serializedName: "x-ms-acl",
+ type: {
+ name: "String"
+ }
+ }
+};
+var posixPermissions = {
+ parameterPath: [
+ "options",
+ "posixPermissions"
+ ],
+ mapper: {
+ serializedName: "x-ms-permissions",
+ type: {
+ name: "String"
+ }
+ }
+};
+var posixUmask = {
+ parameterPath: [
+ "options",
+ "posixUmask"
+ ],
+ mapper: {
+ serializedName: "x-ms-umask",
+ type: {
+ name: "String"
+ }
+ }
+};
+var prefix = {
+ parameterPath: [
+ "options",
+ "prefix"
+ ],
+ mapper: {
+ serializedName: "prefix",
+ type: {
+ name: "String"
+ }
+ }
+};
+var preventEncryptionScopeOverride = {
+ parameterPath: [
+ "options",
+ "containerEncryptionScope",
+ "preventEncryptionScopeOverride"
+ ],
+ mapper: {
+ serializedName: "x-ms-deny-encryption-scope-override",
+ type: {
+ name: "Boolean"
+ }
+ }
+};
+var prevsnapshot = {
+ parameterPath: [
+ "options",
+ "prevsnapshot"
+ ],
+ mapper: {
+ serializedName: "prevsnapshot",
+ type: {
+ name: "String"
+ }
+ }
+};
+var prevSnapshotUrl = {
+ parameterPath: [
+ "options",
+ "prevSnapshotUrl"
+ ],
+ mapper: {
+ serializedName: "x-ms-previous-snapshot-url",
+ type: {
+ name: "String"
+ }
+ }
+};
+var proposedLeaseId0 = {
+ parameterPath: [
+ "options",
+ "proposedLeaseId"
+ ],
+ mapper: {
+ serializedName: "x-ms-proposed-lease-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var proposedLeaseId1 = {
+ parameterPath: "proposedLeaseId",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-proposed-lease-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var range0 = {
+ parameterPath: [
+ "options",
+ "range"
+ ],
+ mapper: {
+ serializedName: "x-ms-range",
+ type: {
+ name: "String"
+ }
+ }
+};
+var range1 = {
+ parameterPath: "range",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-range",
+ type: {
+ name: "String"
+ }
+ }
+};
+var rangeGetContentCRC64 = {
+ parameterPath: [
+ "options",
+ "rangeGetContentCRC64"
+ ],
+ mapper: {
+ serializedName: "x-ms-range-get-content-crc64",
+ type: {
+ name: "Boolean"
+ }
+ }
+};
+var rangeGetContentMD5 = {
+ parameterPath: [
+ "options",
+ "rangeGetContentMD5"
+ ],
+ mapper: {
+ serializedName: "x-ms-range-get-content-md5",
+ type: {
+ name: "Boolean"
+ }
+ }
+};
+var rehydratePriority = {
+ parameterPath: [
+ "options",
+ "rehydratePriority"
+ ],
+ mapper: {
+ serializedName: "x-ms-rehydrate-priority",
+ type: {
+ name: "String"
+ }
+ }
+};
+var renameSource = {
+ parameterPath: "renameSource",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-rename-source",
+ type: {
+ name: "String"
+ }
+ }
+};
+var requestId = {
+ parameterPath: [
+ "options",
+ "requestId"
+ ],
+ mapper: {
+ serializedName: "x-ms-client-request-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var restype0 = {
+ parameterPath: "restype",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "restype",
+ defaultValue: 'service',
+ type: {
+ name: "String"
+ }
+ }
+};
+var restype1 = {
+ parameterPath: "restype",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "restype",
+ defaultValue: 'account',
+ type: {
+ name: "String"
+ }
+ }
+};
+var restype2 = {
+ parameterPath: "restype",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "restype",
+ defaultValue: 'container',
+ type: {
+ name: "String"
+ }
+ }
+};
+var sealBlob = {
+ parameterPath: [
+ "options",
+ "sealBlob"
+ ],
+ mapper: {
+ serializedName: "x-ms-seal-blob",
+ type: {
+ name: "Boolean"
+ }
+ }
+};
+var sequenceNumberAction = {
+ parameterPath: "sequenceNumberAction",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-sequence-number-action",
+ type: {
+ name: "Enum",
+ allowedValues: [
+ "max",
+ "update",
+ "increment"
+ ]
+ }
+ }
+};
+var snapshot = {
+ parameterPath: [
+ "options",
+ "snapshot"
+ ],
+ mapper: {
+ serializedName: "snapshot",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceContentCrc64 = {
+ parameterPath: [
+ "options",
+ "sourceContentCrc64"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ }
+};
+var sourceContentMD5 = {
+ parameterPath: [
+ "options",
+ "sourceContentMD5"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-content-md5",
+ type: {
+ name: "ByteArray"
+ }
+ }
+};
+var sourceIfMatch = {
+ parameterPath: [
+ "options",
+ "sourceModifiedAccessConditions",
+ "sourceIfMatch"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-if-match",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceIfModifiedSince = {
+ parameterPath: [
+ "options",
+ "sourceModifiedAccessConditions",
+ "sourceIfModifiedSince"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-if-modified-since",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+};
+var sourceIfNoneMatch = {
+ parameterPath: [
+ "options",
+ "sourceModifiedAccessConditions",
+ "sourceIfNoneMatch"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-if-none-match",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceIfTags = {
+ parameterPath: [
+ "options",
+ "sourceModifiedAccessConditions",
+ "sourceIfTags"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-if-tags",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceIfUnmodifiedSince = {
+ parameterPath: [
+ "options",
+ "sourceModifiedAccessConditions",
+ "sourceIfUnmodifiedSince"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-if-unmodified-since",
+ type: {
+ name: "DateTimeRfc1123"
+ }
+ }
+};
+var sourceLeaseId = {
+ parameterPath: [
+ "options",
+ "sourceLeaseId"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-lease-id",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceRange0 = {
+ parameterPath: "sourceRange",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-source-range",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceRange1 = {
+ parameterPath: [
+ "options",
+ "sourceRange"
+ ],
+ mapper: {
+ serializedName: "x-ms-source-range",
+ type: {
+ name: "String"
+ }
+ }
+};
+var sourceUrl = {
+ parameterPath: "sourceUrl",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-copy-source",
+ type: {
+ name: "String"
+ }
+ }
+};
+var tier0 = {
+ parameterPath: [
+ "options",
+ "tier"
+ ],
+ mapper: {
+ serializedName: "x-ms-access-tier",
+ type: {
+ name: "String"
+ }
+ }
+};
+var tier1 = {
+ parameterPath: "tier",
+ mapper: {
+ required: true,
+ serializedName: "x-ms-access-tier",
+ type: {
+ name: "String"
+ }
+ }
+};
+var timeoutInSeconds = {
+ parameterPath: [
+ "options",
+ "timeoutInSeconds"
+ ],
+ mapper: {
+ serializedName: "timeout",
+ constraints: {
+ InclusiveMinimum: 0
+ },
+ type: {
+ name: "Number"
+ }
+ }
+};
+var transactionalContentCrc64 = {
+ parameterPath: [
+ "options",
+ "transactionalContentCrc64"
+ ],
+ mapper: {
+ serializedName: "x-ms-content-crc64",
+ type: {
+ name: "ByteArray"
+ }
+ }
+};
+var transactionalContentMD5 = {
+ parameterPath: [
+ "options",
+ "transactionalContentMD5"
+ ],
+ mapper: {
+ serializedName: "Content-MD5",
+ type: {
+ name: "ByteArray"
+ }
+ }
+};
+var upn = {
+ parameterPath: [
+ "options",
+ "upn"
+ ],
+ mapper: {
+ serializedName: "upn",
+ type: {
+ name: "Boolean"
+ }
+ }
+};
+var url = {
+ parameterPath: "url",
+ mapper: {
+ required: true,
+ serializedName: "url",
+ defaultValue: '',
+ type: {
+ name: "String"
+ }
+ },
+ skipEncoding: true
+};
+var version = {
+ parameterPath: "version",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-version",
+ defaultValue: '2019-12-12',
+ type: {
+ name: "String"
+ }
+ }
+};
+var versionId = {
+ parameterPath: [
+ "options",
+ "versionId"
+ ],
+ mapper: {
+ serializedName: "versionid",
+ type: {
+ name: "String"
+ }
+ }
+};
+var where = {
+ parameterPath: [
+ "options",
+ "where"
+ ],
+ mapper: {
+ serializedName: "where",
+ type: {
+ name: "String"
+ }
+ }
+};
+var xMsRequiresSync = {
+ parameterPath: "xMsRequiresSync",
+ mapper: {
+ required: true,
+ isConstant: true,
+ serializedName: "x-ms-requires-sync",
+ defaultValue: 'true',
+ type: {
+ name: "String"
+ }
+ }
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a Service. */
+var Service = /** @class */ (function () {
+ /**
+ * Create a Service.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function Service(client) {
+ this.client = client;
+ }
+ Service.prototype.setProperties = function (blobServiceProperties, options, callback) {
+ return this.client.sendOperationRequest({
+ blobServiceProperties: blobServiceProperties,
+ options: options
+ }, setPropertiesOperationSpec, callback);
+ };
+ Service.prototype.getProperties = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getPropertiesOperationSpec, callback);
+ };
+ Service.prototype.getStatistics = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getStatisticsOperationSpec, callback);
+ };
+ Service.prototype.listContainersSegment = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, listContainersSegmentOperationSpec, callback);
+ };
+ Service.prototype.getUserDelegationKey = function (keyInfo, options, callback) {
+ return this.client.sendOperationRequest({
+ keyInfo: keyInfo,
+ options: options
+ }, getUserDelegationKeyOperationSpec, callback);
+ };
+ Service.prototype.getAccountInfo = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getAccountInfoOperationSpec, callback);
+ };
+ Service.prototype.submitBatch = function (body, contentLength, multipartContentType, options, callback) {
+ return this.client.sendOperationRequest({
+ body: body,
+ contentLength: contentLength,
+ multipartContentType: multipartContentType,
+ options: options
+ }, submitBatchOperationSpec, callback);
+ };
+ Service.prototype.filterBlobs = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, filterBlobsOperationSpec, callback);
+ };
+ return Service;
+}());
+// Operation Specifications
+var serializer = new coreHttp.Serializer(Mappers, true);
+var setPropertiesOperationSpec = {
+ httpMethod: "PUT",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype0,
+ comp0
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ requestBody: {
+ parameterPath: "blobServiceProperties",
+ mapper: tslib.__assign(tslib.__assign({}, BlobServiceProperties), { required: true })
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 202: {
+ headersMapper: ServiceSetPropertiesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceSetPropertiesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var getPropertiesOperationSpec = {
+ httpMethod: "GET",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype0,
+ comp0
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: BlobServiceProperties,
+ headersMapper: ServiceGetPropertiesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceGetPropertiesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var getStatisticsOperationSpec = {
+ httpMethod: "GET",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype0,
+ comp1
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: BlobServiceStatistics,
+ headersMapper: ServiceGetStatisticsHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceGetStatisticsHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var listContainersSegmentOperationSpec = {
+ httpMethod: "GET",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ prefix,
+ marker0,
+ maxPageSize,
+ include0,
+ timeoutInSeconds,
+ comp2
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: ListContainersSegmentResponse,
+ headersMapper: ServiceListContainersSegmentHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceListContainersSegmentHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var getUserDelegationKeyOperationSpec = {
+ httpMethod: "POST",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype0,
+ comp3
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ requestBody: {
+ parameterPath: "keyInfo",
+ mapper: tslib.__assign(tslib.__assign({}, KeyInfo), { required: true })
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 200: {
+ bodyMapper: UserDelegationKey,
+ headersMapper: ServiceGetUserDelegationKeyHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceGetUserDelegationKeyHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var getAccountInfoOperationSpec = {
+ httpMethod: "GET",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ restype1,
+ comp0
+ ],
+ headerParameters: [
+ version
+ ],
+ responses: {
+ 200: {
+ headersMapper: ServiceGetAccountInfoHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceGetAccountInfoHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var submitBatchOperationSpec = {
+ httpMethod: "POST",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp4
+ ],
+ headerParameters: [
+ contentLength,
+ multipartContentType,
+ version,
+ requestId
+ ],
+ requestBody: {
+ parameterPath: "body",
+ mapper: {
+ required: true,
+ serializedName: "body",
+ type: {
+ name: "Stream"
+ }
+ }
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 202: {
+ bodyMapper: {
+ serializedName: "parsedResponse",
+ type: {
+ name: "Stream"
+ }
+ },
+ headersMapper: ServiceSubmitBatchHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceSubmitBatchHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+var filterBlobsOperationSpec = {
+ httpMethod: "GET",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ where,
+ marker0,
+ maxPageSize,
+ comp5
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: FilterBlobSegment,
+ headersMapper: ServiceFilterBlobsHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ServiceFilterBlobsHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers$1 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ AccessPolicy: AccessPolicy,
+ BlobFlatListSegment: BlobFlatListSegment,
+ BlobHierarchyListSegment: BlobHierarchyListSegment,
+ BlobItemInternal: BlobItemInternal,
+ BlobPrefix: BlobPrefix,
+ BlobPropertiesInternal: BlobPropertiesInternal,
+ BlobTag: BlobTag,
+ BlobTags: BlobTags,
+ ContainerAcquireLeaseHeaders: ContainerAcquireLeaseHeaders,
+ ContainerBreakLeaseHeaders: ContainerBreakLeaseHeaders,
+ ContainerChangeLeaseHeaders: ContainerChangeLeaseHeaders,
+ ContainerCreateHeaders: ContainerCreateHeaders,
+ ContainerDeleteHeaders: ContainerDeleteHeaders,
+ ContainerGetAccessPolicyHeaders: ContainerGetAccessPolicyHeaders,
+ ContainerGetAccountInfoHeaders: ContainerGetAccountInfoHeaders,
+ ContainerGetPropertiesHeaders: ContainerGetPropertiesHeaders,
+ ContainerListBlobFlatSegmentHeaders: ContainerListBlobFlatSegmentHeaders,
+ ContainerListBlobHierarchySegmentHeaders: ContainerListBlobHierarchySegmentHeaders,
+ ContainerReleaseLeaseHeaders: ContainerReleaseLeaseHeaders,
+ ContainerRenewLeaseHeaders: ContainerRenewLeaseHeaders,
+ ContainerRestoreHeaders: ContainerRestoreHeaders,
+ ContainerSetAccessPolicyHeaders: ContainerSetAccessPolicyHeaders,
+ ContainerSetMetadataHeaders: ContainerSetMetadataHeaders,
+ ListBlobsFlatSegmentResponse: ListBlobsFlatSegmentResponse,
+ ListBlobsHierarchySegmentResponse: ListBlobsHierarchySegmentResponse,
+ SignedIdentifier: SignedIdentifier,
+ StorageError: StorageError
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a Container. */
+var Container = /** @class */ (function () {
+ /**
+ * Create a Container.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function Container(client) {
+ this.client = client;
+ }
+ Container.prototype.create = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, createOperationSpec, callback);
+ };
+ Container.prototype.getProperties = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getPropertiesOperationSpec$1, callback);
+ };
+ Container.prototype.deleteMethod = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, deleteMethodOperationSpec, callback);
+ };
+ Container.prototype.setMetadata = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setMetadataOperationSpec, callback);
+ };
+ Container.prototype.getAccessPolicy = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getAccessPolicyOperationSpec, callback);
+ };
+ Container.prototype.setAccessPolicy = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setAccessPolicyOperationSpec, callback);
+ };
+ Container.prototype.restore = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, restoreOperationSpec, callback);
+ };
+ Container.prototype.acquireLease = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, acquireLeaseOperationSpec, callback);
+ };
+ Container.prototype.releaseLease = function (leaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ options: options
+ }, releaseLeaseOperationSpec, callback);
+ };
+ Container.prototype.renewLease = function (leaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ options: options
+ }, renewLeaseOperationSpec, callback);
+ };
+ Container.prototype.breakLease = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, breakLeaseOperationSpec, callback);
+ };
+ Container.prototype.changeLease = function (leaseId, proposedLeaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ proposedLeaseId: proposedLeaseId,
+ options: options
+ }, changeLeaseOperationSpec, callback);
+ };
+ Container.prototype.listBlobFlatSegment = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, listBlobFlatSegmentOperationSpec, callback);
+ };
+ Container.prototype.listBlobHierarchySegment = function (delimiter, options, callback) {
+ return this.client.sendOperationRequest({
+ delimiter: delimiter,
+ options: options
+ }, listBlobHierarchySegmentOperationSpec, callback);
+ };
+ Container.prototype.getAccountInfo = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getAccountInfoOperationSpec$1, callback);
+ };
+ return Container;
+}());
+// Operation Specifications
+var serializer$1 = new coreHttp.Serializer(Mappers$1, true);
+var createOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2
+ ],
+ headerParameters: [
+ metadata,
+ access,
+ version,
+ requestId,
+ defaultEncryptionScope,
+ preventEncryptionScopeOverride
+ ],
+ responses: {
+ 201: {
+ headersMapper: ContainerCreateHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerCreateHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var getPropertiesOperationSpec$1 = {
+ httpMethod: "GET",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerGetPropertiesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerGetPropertiesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var deleteMethodOperationSpec = {
+ httpMethod: "DELETE",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 202: {
+ headersMapper: ContainerDeleteHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerDeleteHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var setMetadataOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2,
+ comp6
+ ],
+ headerParameters: [
+ metadata,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerSetMetadataHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerSetMetadataHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var getAccessPolicyOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2,
+ comp7
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0
+ ],
+ responses: {
+ 200: {
+ bodyMapper: {
+ xmlElementName: "SignedIdentifier",
+ serializedName: "parsedResponse",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "SignedIdentifier"
+ }
+ }
+ }
+ },
+ headersMapper: ContainerGetAccessPolicyHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerGetAccessPolicyHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var setAccessPolicyOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2,
+ comp7
+ ],
+ headerParameters: [
+ access,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ requestBody: {
+ parameterPath: [
+ "options",
+ "containerAcl"
+ ],
+ mapper: {
+ xmlName: "SignedIdentifiers",
+ xmlElementName: "SignedIdentifier",
+ serializedName: "containerAcl",
+ type: {
+ name: "Sequence",
+ element: {
+ type: {
+ name: "Composite",
+ className: "SignedIdentifier"
+ }
+ }
+ }
+ }
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 200: {
+ headersMapper: ContainerSetAccessPolicyHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerSetAccessPolicyHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var restoreOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ restype2,
+ comp8
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ deletedContainerName,
+ deletedContainerVersion
+ ],
+ responses: {
+ 201: {
+ headersMapper: ContainerRestoreHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerRestoreHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var acquireLeaseOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9,
+ restype2
+ ],
+ headerParameters: [
+ duration,
+ proposedLeaseId0,
+ version,
+ requestId,
+ action0,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 201: {
+ headersMapper: ContainerAcquireLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerAcquireLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var releaseLeaseOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9,
+ restype2
+ ],
+ headerParameters: [
+ leaseId1,
+ version,
+ requestId,
+ action1,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerReleaseLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerReleaseLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var renewLeaseOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9,
+ restype2
+ ],
+ headerParameters: [
+ leaseId1,
+ version,
+ requestId,
+ action2,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerRenewLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerRenewLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var breakLeaseOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9,
+ restype2
+ ],
+ headerParameters: [
+ breakPeriod,
+ version,
+ requestId,
+ action3,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 202: {
+ headersMapper: ContainerBreakLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerBreakLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var changeLeaseOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9,
+ restype2
+ ],
+ headerParameters: [
+ leaseId1,
+ proposedLeaseId1,
+ version,
+ requestId,
+ action4,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerChangeLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerChangeLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var listBlobFlatSegmentOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ prefix,
+ marker0,
+ maxPageSize,
+ include1,
+ timeoutInSeconds,
+ restype2,
+ comp2
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: ListBlobsFlatSegmentResponse,
+ headersMapper: ContainerListBlobFlatSegmentHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerListBlobFlatSegmentHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var listBlobHierarchySegmentOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ prefix,
+ delimiter,
+ marker0,
+ maxPageSize,
+ include1,
+ timeoutInSeconds,
+ restype2,
+ comp2
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ bodyMapper: ListBlobsHierarchySegmentResponse,
+ headersMapper: ContainerListBlobHierarchySegmentHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerListBlobHierarchySegmentHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+var getAccountInfoOperationSpec$1 = {
+ httpMethod: "GET",
+ path: "{containerName}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ restype1,
+ comp0
+ ],
+ headerParameters: [
+ version
+ ],
+ responses: {
+ 200: {
+ headersMapper: ContainerGetAccountInfoHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: ContainerGetAccountInfoHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$1
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers$2 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ BlobAbortCopyFromURLHeaders: BlobAbortCopyFromURLHeaders,
+ BlobAcquireLeaseHeaders: BlobAcquireLeaseHeaders,
+ BlobBreakLeaseHeaders: BlobBreakLeaseHeaders,
+ BlobChangeLeaseHeaders: BlobChangeLeaseHeaders,
+ BlobCopyFromURLHeaders: BlobCopyFromURLHeaders,
+ BlobCreateSnapshotHeaders: BlobCreateSnapshotHeaders,
+ BlobDeleteHeaders: BlobDeleteHeaders,
+ BlobDownloadHeaders: BlobDownloadHeaders,
+ BlobGetAccessControlHeaders: BlobGetAccessControlHeaders,
+ BlobGetAccountInfoHeaders: BlobGetAccountInfoHeaders,
+ BlobGetPropertiesHeaders: BlobGetPropertiesHeaders,
+ BlobGetTagsHeaders: BlobGetTagsHeaders,
+ BlobQueryHeaders: BlobQueryHeaders,
+ BlobReleaseLeaseHeaders: BlobReleaseLeaseHeaders,
+ BlobRenameHeaders: BlobRenameHeaders,
+ BlobRenewLeaseHeaders: BlobRenewLeaseHeaders,
+ BlobSetAccessControlHeaders: BlobSetAccessControlHeaders,
+ BlobSetExpiryHeaders: BlobSetExpiryHeaders,
+ BlobSetHTTPHeadersHeaders: BlobSetHTTPHeadersHeaders,
+ BlobSetMetadataHeaders: BlobSetMetadataHeaders,
+ BlobSetTagsHeaders: BlobSetTagsHeaders,
+ BlobSetTierHeaders: BlobSetTierHeaders,
+ BlobStartCopyFromURLHeaders: BlobStartCopyFromURLHeaders,
+ BlobTag: BlobTag,
+ BlobTags: BlobTags,
+ BlobUndeleteHeaders: BlobUndeleteHeaders,
+ DataLakeStorageError: DataLakeStorageError,
+ DataLakeStorageErrorError: DataLakeStorageErrorError,
+ DelimitedTextConfiguration: DelimitedTextConfiguration,
+ JsonTextConfiguration: JsonTextConfiguration,
+ QueryFormat: QueryFormat,
+ QueryRequest: QueryRequest,
+ QuerySerialization: QuerySerialization,
+ StorageError: StorageError
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a Blob. */
+var Blob$1 = /** @class */ (function () {
+ /**
+ * Create a Blob.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function Blob(client) {
+ this.client = client;
+ }
+ Blob.prototype.download = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, downloadOperationSpec, callback);
+ };
+ Blob.prototype.getProperties = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getPropertiesOperationSpec$2, callback);
+ };
+ Blob.prototype.deleteMethod = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, deleteMethodOperationSpec$1, callback);
+ };
+ Blob.prototype.setAccessControl = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setAccessControlOperationSpec, callback);
+ };
+ Blob.prototype.getAccessControl = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getAccessControlOperationSpec, callback);
+ };
+ Blob.prototype.rename = function (renameSource, options, callback) {
+ return this.client.sendOperationRequest({
+ renameSource: renameSource,
+ options: options
+ }, renameOperationSpec, callback);
+ };
+ Blob.prototype.undelete = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, undeleteOperationSpec, callback);
+ };
+ Blob.prototype.setExpiry = function (expiryOptions, options, callback) {
+ return this.client.sendOperationRequest({
+ expiryOptions: expiryOptions,
+ options: options
+ }, setExpiryOperationSpec, callback);
+ };
+ Blob.prototype.setHTTPHeaders = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setHTTPHeadersOperationSpec, callback);
+ };
+ Blob.prototype.setMetadata = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setMetadataOperationSpec$1, callback);
+ };
+ Blob.prototype.acquireLease = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, acquireLeaseOperationSpec$1, callback);
+ };
+ Blob.prototype.releaseLease = function (leaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ options: options
+ }, releaseLeaseOperationSpec$1, callback);
+ };
+ Blob.prototype.renewLease = function (leaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ options: options
+ }, renewLeaseOperationSpec$1, callback);
+ };
+ Blob.prototype.changeLease = function (leaseId, proposedLeaseId, options, callback) {
+ return this.client.sendOperationRequest({
+ leaseId: leaseId,
+ proposedLeaseId: proposedLeaseId,
+ options: options
+ }, changeLeaseOperationSpec$1, callback);
+ };
+ Blob.prototype.breakLease = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, breakLeaseOperationSpec$1, callback);
+ };
+ Blob.prototype.createSnapshot = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, createSnapshotOperationSpec, callback);
+ };
+ Blob.prototype.startCopyFromURL = function (copySource, options, callback) {
+ return this.client.sendOperationRequest({
+ copySource: copySource,
+ options: options
+ }, startCopyFromURLOperationSpec, callback);
+ };
+ Blob.prototype.copyFromURL = function (copySource, options, callback) {
+ return this.client.sendOperationRequest({
+ copySource: copySource,
+ options: options
+ }, copyFromURLOperationSpec, callback);
+ };
+ Blob.prototype.abortCopyFromURL = function (copyId, options, callback) {
+ return this.client.sendOperationRequest({
+ copyId: copyId,
+ options: options
+ }, abortCopyFromURLOperationSpec, callback);
+ };
+ Blob.prototype.setTier = function (tier, options, callback) {
+ return this.client.sendOperationRequest({
+ tier: tier,
+ options: options
+ }, setTierOperationSpec, callback);
+ };
+ Blob.prototype.getAccountInfo = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getAccountInfoOperationSpec$2, callback);
+ };
+ Blob.prototype.query = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, queryOperationSpec, callback);
+ };
+ Blob.prototype.getTags = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getTagsOperationSpec, callback);
+ };
+ Blob.prototype.setTags = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, setTagsOperationSpec, callback);
+ };
+ return Blob;
+}());
+// Operation Specifications
+var serializer$2 = new coreHttp.Serializer(Mappers$2, true);
+var downloadOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ versionId,
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ range0,
+ rangeGetContentMD5,
+ rangeGetContentCRC64,
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ bodyMapper: {
+ serializedName: "parsedResponse",
+ type: {
+ name: "Stream"
+ }
+ },
+ headersMapper: BlobDownloadHeaders
+ },
+ 206: {
+ bodyMapper: {
+ serializedName: "parsedResponse",
+ type: {
+ name: "Stream"
+ }
+ },
+ headersMapper: BlobDownloadHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobDownloadHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var getPropertiesOperationSpec$2 = {
+ httpMethod: "HEAD",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ versionId,
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobGetPropertiesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobGetPropertiesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var deleteMethodOperationSpec$1 = {
+ httpMethod: "DELETE",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ versionId,
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ deleteSnapshots,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 202: {
+ headersMapper: BlobDeleteHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobDeleteHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setAccessControlOperationSpec = {
+ httpMethod: "PATCH",
+ path: "{filesystem}/{path}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ action5
+ ],
+ headerParameters: [
+ owner,
+ group,
+ posixPermissions,
+ posixAcl,
+ requestId,
+ version,
+ leaseId0,
+ ifMatch,
+ ifNoneMatch,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobSetAccessControlHeaders
+ },
+ default: {
+ bodyMapper: DataLakeStorageError,
+ headersMapper: BlobSetAccessControlHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var getAccessControlOperationSpec = {
+ httpMethod: "HEAD",
+ path: "{filesystem}/{path}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ upn,
+ action6
+ ],
+ headerParameters: [
+ requestId,
+ version,
+ leaseId0,
+ ifMatch,
+ ifNoneMatch,
+ ifModifiedSince,
+ ifUnmodifiedSince
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobGetAccessControlHeaders
+ },
+ default: {
+ bodyMapper: DataLakeStorageError,
+ headersMapper: BlobGetAccessControlHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var renameOperationSpec = {
+ httpMethod: "PUT",
+ path: "{filesystem}/{path}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ pathRenameMode
+ ],
+ headerParameters: [
+ renameSource,
+ directoryProperties,
+ posixPermissions,
+ posixUmask,
+ sourceLeaseId,
+ version,
+ requestId,
+ cacheControl,
+ contentType,
+ contentEncoding,
+ contentLanguage,
+ contentDisposition,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch
+ ],
+ responses: {
+ 201: {
+ headersMapper: BlobRenameHeaders
+ },
+ default: {
+ bodyMapper: DataLakeStorageError,
+ headersMapper: BlobRenameHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var undeleteOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp8
+ ],
+ headerParameters: [
+ version,
+ requestId
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobUndeleteHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobUndeleteHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setExpiryOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp10
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ expiryOptions,
+ expiresOn
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobSetExpiryHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobSetExpiryHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setHTTPHeadersOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp0
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ blobCacheControl,
+ blobContentType,
+ blobContentMD5,
+ blobContentEncoding,
+ blobContentLanguage,
+ blobContentDisposition,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobSetHTTPHeadersHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobSetHTTPHeadersHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setMetadataOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp6
+ ],
+ headerParameters: [
+ metadata,
+ encryptionScope,
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobSetMetadataHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobSetMetadataHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var acquireLeaseOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9
+ ],
+ headerParameters: [
+ duration,
+ proposedLeaseId0,
+ version,
+ requestId,
+ action0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 201: {
+ headersMapper: BlobAcquireLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobAcquireLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var releaseLeaseOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9
+ ],
+ headerParameters: [
+ leaseId1,
+ version,
+ requestId,
+ action1,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobReleaseLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobReleaseLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var renewLeaseOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9
+ ],
+ headerParameters: [
+ leaseId1,
+ version,
+ requestId,
+ action2,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobRenewLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobRenewLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var changeLeaseOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9
+ ],
+ headerParameters: [
+ leaseId1,
+ proposedLeaseId1,
+ version,
+ requestId,
+ action4,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobChangeLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobChangeLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var breakLeaseOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp9
+ ],
+ headerParameters: [
+ breakPeriod,
+ version,
+ requestId,
+ action3,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 202: {
+ headersMapper: BlobBreakLeaseHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobBreakLeaseHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var createSnapshotOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp11
+ ],
+ headerParameters: [
+ metadata,
+ encryptionScope,
+ version,
+ requestId,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags,
+ leaseId0
+ ],
+ responses: {
+ 201: {
+ headersMapper: BlobCreateSnapshotHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobCreateSnapshotHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var startCopyFromURLOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ metadata,
+ tier0,
+ rehydratePriority,
+ copySource,
+ version,
+ requestId,
+ blobTagsString,
+ sealBlob,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch,
+ sourceIfTags,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags,
+ leaseId0
+ ],
+ responses: {
+ 202: {
+ headersMapper: BlobStartCopyFromURLHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobStartCopyFromURLHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var copyFromURLOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ metadata,
+ tier0,
+ copySource,
+ version,
+ requestId,
+ sourceContentMD5,
+ blobTagsString,
+ xMsRequiresSync,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags,
+ leaseId0
+ ],
+ responses: {
+ 202: {
+ headersMapper: BlobCopyFromURLHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobCopyFromURLHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var abortCopyFromURLOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ copyId,
+ timeoutInSeconds,
+ comp12
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ copyActionAbortConstant,
+ leaseId0
+ ],
+ responses: {
+ 204: {
+ headersMapper: BlobAbortCopyFromURLHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobAbortCopyFromURLHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setTierOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ versionId,
+ timeoutInSeconds,
+ comp13
+ ],
+ headerParameters: [
+ tier1,
+ rehydratePriority,
+ version,
+ requestId,
+ leaseId0,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobSetTierHeaders
+ },
+ 202: {
+ headersMapper: BlobSetTierHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobSetTierHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var getAccountInfoOperationSpec$2 = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ restype1,
+ comp0
+ ],
+ headerParameters: [
+ version
+ ],
+ responses: {
+ 200: {
+ headersMapper: BlobGetAccountInfoHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobGetAccountInfoHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var queryOperationSpec = {
+ httpMethod: "POST",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ timeoutInSeconds,
+ comp14
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: [
+ "options",
+ "queryRequest"
+ ],
+ mapper: QueryRequest
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 200: {
+ bodyMapper: {
+ serializedName: "parsedResponse",
+ type: {
+ name: "Stream"
+ }
+ },
+ headersMapper: BlobQueryHeaders
+ },
+ 206: {
+ bodyMapper: {
+ serializedName: "parsedResponse",
+ type: {
+ name: "Stream"
+ }
+ },
+ headersMapper: BlobQueryHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobQueryHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var getTagsOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ snapshot,
+ versionId,
+ comp15
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ bodyMapper: BlobTags,
+ headersMapper: BlobGetTagsHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobGetTagsHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+var setTagsOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ versionId,
+ comp15
+ ],
+ headerParameters: [
+ version,
+ transactionalContentMD5,
+ transactionalContentCrc64,
+ requestId,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: [
+ "options",
+ "tags"
+ ],
+ mapper: BlobTags
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 204: {
+ headersMapper: BlobSetTagsHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlobSetTagsHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$2
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers$3 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ ClearRange: ClearRange,
+ PageBlobClearPagesHeaders: PageBlobClearPagesHeaders,
+ PageBlobCopyIncrementalHeaders: PageBlobCopyIncrementalHeaders,
+ PageBlobCreateHeaders: PageBlobCreateHeaders,
+ PageBlobGetPageRangesDiffHeaders: PageBlobGetPageRangesDiffHeaders,
+ PageBlobGetPageRangesHeaders: PageBlobGetPageRangesHeaders,
+ PageBlobResizeHeaders: PageBlobResizeHeaders,
+ PageBlobUpdateSequenceNumberHeaders: PageBlobUpdateSequenceNumberHeaders,
+ PageBlobUploadPagesFromURLHeaders: PageBlobUploadPagesFromURLHeaders,
+ PageBlobUploadPagesHeaders: PageBlobUploadPagesHeaders,
+ PageList: PageList,
+ PageRange: PageRange,
+ StorageError: StorageError
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a PageBlob. */
+var PageBlob = /** @class */ (function () {
+ /**
+ * Create a PageBlob.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function PageBlob(client) {
+ this.client = client;
+ }
+ PageBlob.prototype.create = function (contentLength, blobContentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ contentLength: contentLength,
+ blobContentLength: blobContentLength,
+ options: options
+ }, createOperationSpec$1, callback);
+ };
+ PageBlob.prototype.uploadPages = function (body, contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ body: body,
+ contentLength: contentLength,
+ options: options
+ }, uploadPagesOperationSpec, callback);
+ };
+ PageBlob.prototype.clearPages = function (contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ contentLength: contentLength,
+ options: options
+ }, clearPagesOperationSpec, callback);
+ };
+ PageBlob.prototype.uploadPagesFromURL = function (sourceUrl, sourceRange, contentLength, range, options, callback) {
+ return this.client.sendOperationRequest({
+ sourceUrl: sourceUrl,
+ sourceRange: sourceRange,
+ contentLength: contentLength,
+ range: range,
+ options: options
+ }, uploadPagesFromURLOperationSpec, callback);
+ };
+ PageBlob.prototype.getPageRanges = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getPageRangesOperationSpec, callback);
+ };
+ PageBlob.prototype.getPageRangesDiff = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, getPageRangesDiffOperationSpec, callback);
+ };
+ PageBlob.prototype.resize = function (blobContentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ blobContentLength: blobContentLength,
+ options: options
+ }, resizeOperationSpec, callback);
+ };
+ PageBlob.prototype.updateSequenceNumber = function (sequenceNumberAction, options, callback) {
+ return this.client.sendOperationRequest({
+ sequenceNumberAction: sequenceNumberAction,
+ options: options
+ }, updateSequenceNumberOperationSpec, callback);
+ };
+ PageBlob.prototype.copyIncremental = function (copySource, options, callback) {
+ return this.client.sendOperationRequest({
+ copySource: copySource,
+ options: options
+ }, copyIncrementalOperationSpec, callback);
+ };
+ return PageBlob;
+}());
+// Operation Specifications
+var serializer$3 = new coreHttp.Serializer(Mappers$3, true);
+var createOperationSpec$1 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ contentLength,
+ tier0,
+ metadata,
+ encryptionScope,
+ blobContentLength,
+ blobSequenceNumber,
+ version,
+ requestId,
+ blobTagsString,
+ blobType0,
+ blobContentType,
+ blobContentEncoding,
+ blobContentLanguage,
+ blobContentMD5,
+ blobCacheControl,
+ blobContentDisposition,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 201: {
+ headersMapper: PageBlobCreateHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobCreateHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var uploadPagesOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp16
+ ],
+ headerParameters: [
+ contentLength,
+ transactionalContentMD5,
+ transactionalContentCrc64,
+ range0,
+ encryptionScope,
+ version,
+ requestId,
+ pageWrite0,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifSequenceNumberLessThanOrEqualTo,
+ ifSequenceNumberLessThan,
+ ifSequenceNumberEqualTo,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: "body",
+ mapper: {
+ required: true,
+ serializedName: "body",
+ type: {
+ name: "Stream"
+ }
+ }
+ },
+ contentType: "application/octet-stream",
+ responses: {
+ 201: {
+ headersMapper: PageBlobUploadPagesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobUploadPagesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var clearPagesOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp16
+ ],
+ headerParameters: [
+ contentLength,
+ range0,
+ encryptionScope,
+ version,
+ requestId,
+ pageWrite1,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifSequenceNumberLessThanOrEqualTo,
+ ifSequenceNumberLessThan,
+ ifSequenceNumberEqualTo,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 201: {
+ headersMapper: PageBlobClearPagesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobClearPagesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var uploadPagesFromURLOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp16
+ ],
+ headerParameters: [
+ sourceUrl,
+ sourceRange0,
+ sourceContentMD5,
+ sourceContentCrc64,
+ contentLength,
+ range1,
+ encryptionScope,
+ version,
+ requestId,
+ pageWrite0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ leaseId0,
+ ifSequenceNumberLessThanOrEqualTo,
+ ifSequenceNumberLessThan,
+ ifSequenceNumberEqualTo,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch
+ ],
+ responses: {
+ 201: {
+ headersMapper: PageBlobUploadPagesFromURLHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobUploadPagesFromURLHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var getPageRangesOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ timeoutInSeconds,
+ comp17
+ ],
+ headerParameters: [
+ range0,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ bodyMapper: PageList,
+ headersMapper: PageBlobGetPageRangesHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobGetPageRangesHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var getPageRangesDiffOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ timeoutInSeconds,
+ prevsnapshot,
+ comp17
+ ],
+ headerParameters: [
+ prevSnapshotUrl,
+ range0,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ bodyMapper: PageList,
+ headersMapper: PageBlobGetPageRangesDiffHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobGetPageRangesDiffHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var resizeOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp0
+ ],
+ headerParameters: [
+ encryptionScope,
+ blobContentLength,
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: PageBlobResizeHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobResizeHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var updateSequenceNumberOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp0
+ ],
+ headerParameters: [
+ sequenceNumberAction,
+ blobSequenceNumber,
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ headersMapper: PageBlobUpdateSequenceNumberHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobUpdateSequenceNumberHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+var copyIncrementalOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp18
+ ],
+ headerParameters: [
+ copySource,
+ version,
+ requestId,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 202: {
+ headersMapper: PageBlobCopyIncrementalHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: PageBlobCopyIncrementalHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$3
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers$4 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ AppendBlobAppendBlockFromUrlHeaders: AppendBlobAppendBlockFromUrlHeaders,
+ AppendBlobAppendBlockHeaders: AppendBlobAppendBlockHeaders,
+ AppendBlobCreateHeaders: AppendBlobCreateHeaders,
+ AppendBlobSealHeaders: AppendBlobSealHeaders,
+ StorageError: StorageError
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a AppendBlob. */
+var AppendBlob = /** @class */ (function () {
+ /**
+ * Create a AppendBlob.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function AppendBlob(client) {
+ this.client = client;
+ }
+ AppendBlob.prototype.create = function (contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ contentLength: contentLength,
+ options: options
+ }, createOperationSpec$2, callback);
+ };
+ AppendBlob.prototype.appendBlock = function (body, contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ body: body,
+ contentLength: contentLength,
+ options: options
+ }, appendBlockOperationSpec, callback);
+ };
+ AppendBlob.prototype.appendBlockFromUrl = function (sourceUrl, contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ sourceUrl: sourceUrl,
+ contentLength: contentLength,
+ options: options
+ }, appendBlockFromUrlOperationSpec, callback);
+ };
+ AppendBlob.prototype.seal = function (options, callback) {
+ return this.client.sendOperationRequest({
+ options: options
+ }, sealOperationSpec, callback);
+ };
+ return AppendBlob;
+}());
+// Operation Specifications
+var serializer$4 = new coreHttp.Serializer(Mappers$4, true);
+var createOperationSpec$2 = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ contentLength,
+ metadata,
+ encryptionScope,
+ version,
+ requestId,
+ blobTagsString,
+ blobType1,
+ blobContentType,
+ blobContentEncoding,
+ blobContentLanguage,
+ blobContentMD5,
+ blobCacheControl,
+ blobContentDisposition,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ responses: {
+ 201: {
+ headersMapper: AppendBlobCreateHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: AppendBlobCreateHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$4
+};
+var appendBlockOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp19
+ ],
+ headerParameters: [
+ contentLength,
+ transactionalContentMD5,
+ transactionalContentCrc64,
+ encryptionScope,
+ version,
+ requestId,
+ leaseId0,
+ maxSize,
+ appendPosition,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: "body",
+ mapper: {
+ required: true,
+ serializedName: "body",
+ type: {
+ name: "Stream"
+ }
+ }
+ },
+ contentType: "application/octet-stream",
+ responses: {
+ 201: {
+ headersMapper: AppendBlobAppendBlockHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: AppendBlobAppendBlockHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$4
+};
+var appendBlockFromUrlOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp19
+ ],
+ headerParameters: [
+ sourceUrl,
+ sourceRange1,
+ sourceContentMD5,
+ sourceContentCrc64,
+ contentLength,
+ transactionalContentMD5,
+ encryptionScope,
+ version,
+ requestId,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ leaseId0,
+ maxSize,
+ appendPosition,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch
+ ],
+ responses: {
+ 201: {
+ headersMapper: AppendBlobAppendBlockFromUrlHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: AppendBlobAppendBlockFromUrlHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$4
+};
+var sealOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp20
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ appendPosition
+ ],
+ responses: {
+ 200: {
+ headersMapper: AppendBlobSealHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: AppendBlobSealHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$4
+};
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is regenerated.
+ */
+
+var Mappers$5 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ Block: Block,
+ BlockBlobCommitBlockListHeaders: BlockBlobCommitBlockListHeaders,
+ BlockBlobGetBlockListHeaders: BlockBlobGetBlockListHeaders,
+ BlockBlobStageBlockFromURLHeaders: BlockBlobStageBlockFromURLHeaders,
+ BlockBlobStageBlockHeaders: BlockBlobStageBlockHeaders,
+ BlockBlobUploadHeaders: BlockBlobUploadHeaders,
+ BlockList: BlockList,
+ BlockLookupList: BlockLookupList,
+ StorageError: StorageError
+});
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+/** Class representing a BlockBlob. */
+var BlockBlob = /** @class */ (function () {
+ /**
+ * Create a BlockBlob.
+ * @param {StorageClientContext} client Reference to the service client.
+ */
+ function BlockBlob(client) {
+ this.client = client;
+ }
+ BlockBlob.prototype.upload = function (body, contentLength, options, callback) {
+ return this.client.sendOperationRequest({
+ body: body,
+ contentLength: contentLength,
+ options: options
+ }, uploadOperationSpec, callback);
+ };
+ BlockBlob.prototype.stageBlock = function (blockId, contentLength, body, options, callback) {
+ return this.client.sendOperationRequest({
+ blockId: blockId,
+ contentLength: contentLength,
+ body: body,
+ options: options
+ }, stageBlockOperationSpec, callback);
+ };
+ BlockBlob.prototype.stageBlockFromURL = function (blockId, contentLength, sourceUrl, options, callback) {
+ return this.client.sendOperationRequest({
+ blockId: blockId,
+ contentLength: contentLength,
+ sourceUrl: sourceUrl,
+ options: options
+ }, stageBlockFromURLOperationSpec, callback);
+ };
+ BlockBlob.prototype.commitBlockList = function (blocks, options, callback) {
+ return this.client.sendOperationRequest({
+ blocks: blocks,
+ options: options
+ }, commitBlockListOperationSpec, callback);
+ };
+ BlockBlob.prototype.getBlockList = function (listType, options, callback) {
+ return this.client.sendOperationRequest({
+ listType: listType,
+ options: options
+ }, getBlockListOperationSpec, callback);
+ };
+ return BlockBlob;
+}());
+// Operation Specifications
+var serializer$5 = new coreHttp.Serializer(Mappers$5, true);
+var uploadOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds
+ ],
+ headerParameters: [
+ transactionalContentMD5,
+ contentLength,
+ metadata,
+ encryptionScope,
+ tier0,
+ version,
+ requestId,
+ blobTagsString,
+ blobType2,
+ blobContentType,
+ blobContentEncoding,
+ blobContentLanguage,
+ blobContentMD5,
+ blobCacheControl,
+ blobContentDisposition,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: "body",
+ mapper: {
+ required: true,
+ serializedName: "body",
+ type: {
+ name: "Stream"
+ }
+ }
+ },
+ contentType: "application/octet-stream",
+ responses: {
+ 201: {
+ headersMapper: BlockBlobUploadHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlockBlobUploadHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$5
+};
+var stageBlockOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ blockId,
+ timeoutInSeconds,
+ comp21
+ ],
+ headerParameters: [
+ contentLength,
+ transactionalContentMD5,
+ transactionalContentCrc64,
+ encryptionScope,
+ version,
+ requestId,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm
+ ],
+ requestBody: {
+ parameterPath: "body",
+ mapper: {
+ required: true,
+ serializedName: "body",
+ type: {
+ name: "Stream"
+ }
+ }
+ },
+ contentType: "application/octet-stream",
+ responses: {
+ 201: {
+ headersMapper: BlockBlobStageBlockHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlockBlobStageBlockHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$5
+};
+var stageBlockFromURLOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ blockId,
+ timeoutInSeconds,
+ comp21
+ ],
+ headerParameters: [
+ contentLength,
+ sourceUrl,
+ sourceRange1,
+ sourceContentMD5,
+ sourceContentCrc64,
+ encryptionScope,
+ version,
+ requestId,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ leaseId0,
+ sourceIfModifiedSince,
+ sourceIfUnmodifiedSince,
+ sourceIfMatch,
+ sourceIfNoneMatch
+ ],
+ responses: {
+ 201: {
+ headersMapper: BlockBlobStageBlockFromURLHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlockBlobStageBlockFromURLHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$5
+};
+var commitBlockListOperationSpec = {
+ httpMethod: "PUT",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ timeoutInSeconds,
+ comp22
+ ],
+ headerParameters: [
+ transactionalContentMD5,
+ transactionalContentCrc64,
+ metadata,
+ encryptionScope,
+ tier0,
+ version,
+ requestId,
+ blobTagsString,
+ blobCacheControl,
+ blobContentType,
+ blobContentEncoding,
+ blobContentLanguage,
+ blobContentMD5,
+ blobContentDisposition,
+ leaseId0,
+ encryptionKey,
+ encryptionKeySha256,
+ encryptionAlgorithm,
+ ifModifiedSince,
+ ifUnmodifiedSince,
+ ifMatch,
+ ifNoneMatch,
+ ifTags
+ ],
+ requestBody: {
+ parameterPath: "blocks",
+ mapper: tslib.__assign(tslib.__assign({}, BlockLookupList), { required: true })
+ },
+ contentType: "application/xml; charset=utf-8",
+ responses: {
+ 201: {
+ headersMapper: BlockBlobCommitBlockListHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlockBlobCommitBlockListHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$5
+};
+var getBlockListOperationSpec = {
+ httpMethod: "GET",
+ path: "{containerName}/{blob}",
+ urlParameters: [
+ url
+ ],
+ queryParameters: [
+ snapshot,
+ listType,
+ timeoutInSeconds,
+ comp22
+ ],
+ headerParameters: [
+ version,
+ requestId,
+ leaseId0,
+ ifTags
+ ],
+ responses: {
+ 200: {
+ bodyMapper: BlockList,
+ headersMapper: BlockBlobGetBlockListHeaders
+ },
+ default: {
+ bodyMapper: StorageError,
+ headersMapper: BlockBlobGetBlockListHeaders
+ }
+ },
+ isXML: true,
+ serializer: serializer$5
+};
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * The @azure/logger configuration for this package.
+ */
+var logger = logger$1.createClientLogger("storage-blob");
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+var SDK_VERSION = "12.2.0";
+var SERVICE_VERSION = "2019-12-12";
+var BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB
+var BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB
+var BLOCK_BLOB_MAX_BLOCKS = 50000;
+var DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB
+var DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB
+var DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;
+/**
+ * The OAuth scope to use with Azure Storage.
+ */
+var StorageOAuthScopes = "https://storage.azure.com/.default";
+var URLConstants = {
+ Parameters: {
+ FORCE_BROWSER_NO_CACHE: "_",
+ SIGNATURE: "sig",
+ SNAPSHOT: "snapshot",
+ VERSIONID: "versionid",
+ TIMEOUT: "timeout"
+ }
+};
+var HTTPURLConnection = {
+ HTTP_ACCEPTED: 202,
+ HTTP_CONFLICT: 409,
+ HTTP_NOT_FOUND: 404,
+ HTTP_PRECON_FAILED: 412,
+ HTTP_RANGE_NOT_SATISFIABLE: 416
+};
+var HeaderConstants = {
+ AUTHORIZATION: "Authorization",
+ AUTHORIZATION_SCHEME: "Bearer",
+ CONTENT_ENCODING: "Content-Encoding",
+ CONTENT_ID: "Content-ID",
+ CONTENT_LANGUAGE: "Content-Language",
+ CONTENT_LENGTH: "Content-Length",
+ CONTENT_MD5: "Content-Md5",
+ CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding",
+ CONTENT_TYPE: "Content-Type",
+ COOKIE: "Cookie",
+ DATE: "date",
+ IF_MATCH: "if-match",
+ IF_MODIFIED_SINCE: "if-modified-since",
+ IF_NONE_MATCH: "if-none-match",
+ IF_UNMODIFIED_SINCE: "if-unmodified-since",
+ PREFIX_FOR_STORAGE: "x-ms-",
+ RANGE: "Range",
+ USER_AGENT: "User-Agent",
+ X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id",
+ X_MS_COPY_SOURCE: "x-ms-copy-source",
+ X_MS_DATE: "x-ms-date",
+ X_MS_ERROR_CODE: "x-ms-error-code",
+ X_MS_VERSION: "x-ms-version"
+};
+var ETagNone = "";
+var ETagAny = "*";
+var SIZE_1_MB = 1 * 1024 * 1024;
+var BATCH_MAX_REQUEST = 256;
+var BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;
+var HTTP_LINE_ENDING = "\r\n";
+var HTTP_VERSION_1_1 = "HTTP/1.1";
+var EncryptionAlgorithmAES25 = "AES256";
+var DevelopmentConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;";
+var StorageBlobLoggingAllowedHeaderNames = [
+ "Access-Control-Allow-Origin",
+ "Cache-Control",
+ "Content-Length",
+ "Content-Type",
+ "Date",
+ "Request-Id",
+ "traceparent",
+ "Transfer-Encoding",
+ "User-Agent",
+ "x-ms-client-request-id",
+ "x-ms-date",
+ "x-ms-error-code",
+ "x-ms-request-id",
+ "x-ms-return-client-request-id",
+ "x-ms-version",
+ "Accept-Ranges",
+ "Content-Disposition",
+ "Content-Encoding",
+ "Content-Language",
+ "Content-MD5",
+ "Content-Range",
+ "ETag",
+ "Last-Modified",
+ "Server",
+ "Vary",
+ "x-ms-content-crc64",
+ "x-ms-copy-action",
+ "x-ms-copy-completion-time",
+ "x-ms-copy-id",
+ "x-ms-copy-progress",
+ "x-ms-copy-status",
+ "x-ms-has-immutability-policy",
+ "x-ms-has-legal-hold",
+ "x-ms-lease-state",
+ "x-ms-lease-status",
+ "x-ms-range",
+ "x-ms-request-server-encrypted",
+ "x-ms-server-encrypted",
+ "x-ms-snapshot",
+ "x-ms-source-range",
+ "If-Match",
+ "If-Modified-Since",
+ "If-None-Match",
+ "If-Unmodified-Since",
+ "x-ms-access-tier",
+ "x-ms-access-tier-change-time",
+ "x-ms-access-tier-inferred",
+ "x-ms-account-kind",
+ "x-ms-archive-status",
+ "x-ms-blob-append-offset",
+ "x-ms-blob-cache-control",
+ "x-ms-blob-committed-block-count",
+ "x-ms-blob-condition-appendpos",
+ "x-ms-blob-condition-maxsize",
+ "x-ms-blob-content-disposition",
+ "x-ms-blob-content-encoding",
+ "x-ms-blob-content-language",
+ "x-ms-blob-content-length",
+ "x-ms-blob-content-md5",
+ "x-ms-blob-content-type",
+ "x-ms-blob-public-access",
+ "x-ms-blob-sequence-number",
+ "x-ms-blob-type",
+ "x-ms-copy-destination-snapshot",
+ "x-ms-creation-time",
+ "x-ms-default-encryption-scope",
+ "x-ms-delete-snapshots",
+ "x-ms-delete-type-permanent",
+ "x-ms-deny-encryption-scope-override",
+ "x-ms-encryption-algorithm",
+ "x-ms-if-sequence-number-eq",
+ "x-ms-if-sequence-number-le",
+ "x-ms-if-sequence-number-lt",
+ "x-ms-incremental-copy",
+ "x-ms-lease-action",
+ "x-ms-lease-break-period",
+ "x-ms-lease-duration",
+ "x-ms-lease-id",
+ "x-ms-lease-time",
+ "x-ms-page-write",
+ "x-ms-proposed-lease-id",
+ "x-ms-range-get-content-md5",
+ "x-ms-rehydrate-priority",
+ "x-ms-sequence-number-action",
+ "x-ms-sku-name",
+ "x-ms-source-content-md5",
+ "x-ms-source-if-match",
+ "x-ms-source-if-modified-since",
+ "x-ms-source-if-none-match",
+ "x-ms-source-if-unmodified-since",
+ "x-ms-tag-count",
+ "x-ms-encryption-key-sha256",
+ "x-ms-if-tags",
+ "x-ms-source-if-tags"
+];
+var StorageBlobLoggingAllowedQueryParameters = [
+ "comp",
+ "maxresults",
+ "rscc",
+ "rscd",
+ "rsce",
+ "rscl",
+ "rsct",
+ "se",
+ "si",
+ "sip",
+ "sp",
+ "spr",
+ "sr",
+ "srt",
+ "ss",
+ "st",
+ "sv",
+ "include",
+ "marker",
+ "prefix",
+ "copyid",
+ "restype",
+ "blockid",
+ "blocklisttype",
+ "delimiter",
+ "prevsnapshot",
+ "ske",
+ "skoid",
+ "sks",
+ "skt",
+ "sktid",
+ "skv",
+ "snapshot"
+];
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * Reserved URL characters must be properly escaped for Storage services like Blob or File.
+ *
+ * ## URL encode and escape strategy for JS SDKs
+ *
+ * When customers pass a URL string into XxxClient classes 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
+ *
+ * @export
+ * @param {string} url
+ * @returns {string}
+ */
+function escapeURLPath(url) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ var path = urlParsed.getPath();
+ path = path || "/";
+ path = escape(path);
+ urlParsed.setPath(path);
+ return urlParsed.toString();
+}
+function getProxyUriFromDevConnString(connectionString) {
+ // Development Connection String
+ // https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key
+ var proxyUri = "";
+ if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) {
+ // CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri
+ var matchCredentials = connectionString.split(";");
+ for (var _i = 0, matchCredentials_1 = matchCredentials; _i < matchCredentials_1.length; _i++) {
+ var element = matchCredentials_1[_i];
+ if (element.trim().startsWith("DevelopmentStorageProxyUri=")) {
+ proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1];
+ }
+ }
+ }
+ return proxyUri;
+}
+function getValueInConnString(connectionString, argument) {
+ var elements = connectionString.split(";");
+ for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
+ var element = elements_1[_i];
+ if (element.trim().startsWith(argument)) {
+ return element.trim().match(argument + "=(.*)")[1];
+ }
+ }
+ return "";
+}
+/**
+ * Extracts the parts of an Azure Storage account connection string.
+ *
+ * @export
+ * @param {string} connectionString Connection string.
+ * @returns {ConnectionString} String key value pairs of the storage account's url and credentials.
+ */
+function extractConnectionStringParts(connectionString) {
+ var proxyUri = "";
+ if (connectionString.startsWith("UseDevelopmentStorage=true")) {
+ // Development connection string
+ proxyUri = getProxyUriFromDevConnString(connectionString);
+ connectionString = DevelopmentConnectionString;
+ }
+ // Matching BlobEndpoint in the Account connection string
+ var blobEndpoint = getValueInConnString(connectionString, "BlobEndpoint");
+ // Slicing off '/' at the end if exists
+ // (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end)
+ blobEndpoint = blobEndpoint.endsWith("/") ? blobEndpoint.slice(0, -1) : blobEndpoint;
+ if (connectionString.search("DefaultEndpointsProtocol=") !== -1 &&
+ connectionString.search("AccountKey=") !== -1) {
+ // Account connection string
+ var defaultEndpointsProtocol = "";
+ var accountName = "";
+ var accountKey = Buffer.from("accountKey", "base64");
+ var endpointSuffix = "";
+ // Get account name and key
+ accountName = getValueInConnString(connectionString, "AccountName");
+ accountKey = Buffer.from(getValueInConnString(connectionString, "AccountKey"), "base64");
+ if (!blobEndpoint) {
+ // BlobEndpoint is not present in the Account connection string
+ // Can be obtained from `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`
+ defaultEndpointsProtocol = getValueInConnString(connectionString, "DefaultEndpointsProtocol");
+ var protocol = defaultEndpointsProtocol.toLowerCase();
+ if (protocol !== "https" && protocol !== "http") {
+ throw new Error("Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'");
+ }
+ endpointSuffix = getValueInConnString(connectionString, "EndpointSuffix");
+ if (!endpointSuffix) {
+ throw new Error("Invalid EndpointSuffix in the provided Connection String");
+ }
+ blobEndpoint = defaultEndpointsProtocol + "://" + accountName + ".blob." + endpointSuffix;
+ }
+ if (!accountName) {
+ throw new Error("Invalid AccountName in the provided Connection String");
+ }
+ else if (accountKey.length === 0) {
+ throw new Error("Invalid AccountKey in the provided Connection String");
+ }
+ return {
+ kind: "AccountConnString",
+ url: blobEndpoint,
+ accountName: accountName,
+ accountKey: accountKey,
+ proxyUri: proxyUri,
+ };
+ }
+ else {
+ // SAS connection string
+ var accountSas = getValueInConnString(connectionString, "SharedAccessSignature");
+ var accountName = getAccountNameFromUrl(blobEndpoint);
+ if (!blobEndpoint) {
+ throw new Error("Invalid BlobEndpoint in the provided SAS Connection String");
+ }
+ else if (!accountSas) {
+ throw new Error("Invalid SharedAccessSignature in the provided SAS Connection String");
+ }
+ return { kind: "SASConnString", url: blobEndpoint, accountName: accountName, accountSas: accountSas };
+ }
+}
+/**
+ * Internal escape method implemented Strategy Two mentioned in escapeURL() description.
+ *
+ * @param {string} text
+ * @returns {string}
+ */
+function escape(text) {
+ return encodeURIComponent(text)
+ .replace(/%2F/g, "/") // Don't escape for "/"
+ .replace(/'/g, "%27") // Escape for "'"
+ .replace(/\+/g, "%20")
+ .replace(/%25/g, "%"); // Revert encoded "%"
+}
+/**
+ * Append a string to URL path. Will remove duplicated "/" in front of the string
+ * when URL path ends with a "/".
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @param {string} name String to be appended to URL
+ * @returns {string} An updated URL string
+ */
+function appendToURLPath(url, name) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ var path = urlParsed.getPath();
+ path = path ? (path.endsWith("/") ? "" + path + name : path + "/" + name) : name;
+ urlParsed.setPath(path);
+ return urlParsed.toString();
+}
+/**
+ * Set URL parameter name and value. If name exists in URL parameters, old value
+ * will be replaced by name key. If not provide value, the parameter will be deleted.
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @param {string} name Parameter name
+ * @param {string} [value] Parameter value
+ * @returns {string} An updated URL string
+ */
+function setURLParameter(url, name, value) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ urlParsed.setQueryParameter(name, value);
+ return urlParsed.toString();
+}
+/**
+ * Set URL host.
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @param {string} host New host string
+ * @returns An updated URL string
+ */
+function setURLHost(url, host) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ urlParsed.setHost(host);
+ return urlParsed.toString();
+}
+/**
+ * Get URL path from an URL string.
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @returns {(string | undefined)}
+ */
+function getURLPath(url) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ return urlParsed.getPath();
+}
+/**
+ * Get URL scheme from an URL string.
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @returns {(string | undefined)}
+ */
+function getURLScheme(url) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ return urlParsed.getScheme();
+}
+/**
+ * Get URL path and query from an URL string.
+ *
+ * @export
+ * @param {string} url Source URL string
+ * @returns {(string | undefined)}
+ */
+function getURLPathAndQuery(url) {
+ var urlParsed = coreHttp.URLBuilder.parse(url);
+ var pathString = urlParsed.getPath();
+ if (!pathString) {
+ throw new RangeError("Invalid url without valid path.");
+ }
+ var queryString = urlParsed.getQuery() || "";
+ queryString = queryString.trim();
+ if (queryString != "") {
+ queryString = queryString.startsWith("?") ? queryString : "?" + queryString; // Ensure query string start with '?'
+ }
+ return "" + pathString + queryString;
+}
+/**
+ * Get URL query key value pairs from an URL string.
+ *
+ * @export
+ * @param {string} url
+ * @returns {{[key: string]: string}}
+ */
+function getURLQueries(url) {
+ var queryString = coreHttp.URLBuilder.parse(url).getQuery();
+ if (!queryString) {
+ return {};
+ }
+ queryString = queryString.trim();
+ queryString = queryString.startsWith("?") ? queryString.substr(1) : queryString;
+ var querySubStrings = queryString.split("&");
+ querySubStrings = querySubStrings.filter(function (value) {
+ var indexOfEqual = value.indexOf("=");
+ var lastIndexOfEqual = value.lastIndexOf("=");
+ return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
+ });
+ var queries = {};
+ for (var _i = 0, querySubStrings_1 = querySubStrings; _i < querySubStrings_1.length; _i++) {
+ var querySubString = querySubStrings_1[_i];
+ var splitResults = querySubString.split("=");
+ var key = splitResults[0];
+ var value = splitResults[1];
+ queries[key] = value;
+ }
+ return queries;
+}
+/**
+ * Rounds a date off to seconds.
+ *
+ * @export
+ * @param {Date} date
+ * @param {boolean} [withMilliseconds=true] If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;
+ * If false, YYYY-MM-DDThh:mm:ssZ will be returned.
+ * @returns {string} Date string in ISO8061 format, with or without 7 milliseconds component
+ */
+function truncatedISO8061Date(date, withMilliseconds) {
+ if (withMilliseconds === void 0) { withMilliseconds = true; }
+ // Date.toISOString() will return like "2018-10-29T06:34:36.139Z"
+ var dateString = date.toISOString();
+ return withMilliseconds
+ ? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
+ : dateString.substring(0, dateString.length - 5) + "Z";
+}
+/**
+ * Base64 encode.
+ *
+ * @export
+ * @param {string} content
+ * @returns {string}
+ */
+function base64encode(content) {
+ return !coreHttp.isNode ? btoa(content) : Buffer.from(content).toString("base64");
+}
+/**
+ * Generate a 64 bytes base64 block ID string.
+ *
+ * @export
+ * @param {number} blockIndex
+ * @returns {string}
+ */
+function generateBlockID(blockIDPrefix, blockIndex) {
+ // To generate a 64 bytes base64 string, source string should be 48
+ var maxSourceStringLength = 48;
+ // A blob can have a maximum of 100,000 uncommitted blocks at any given time
+ var maxBlockIndexLength = 6;
+ var maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;
+ if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {
+ blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);
+ }
+ var res = blockIDPrefix +
+ padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0");
+ return base64encode(res);
+}
+/**
+ * Delay specified time interval.
+ *
+ * @export
+ * @param {number} timeInMs
+ * @param {AbortSignalLike} [aborter]
+ * @param {Error} [abortError]
+ */
+function delay(timeInMs, aborter, abortError) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ var timeout;
+ var abortHandler = function () {
+ if (timeout !== undefined) {
+ clearTimeout(timeout);
+ }
+ reject(abortError);
+ };
+ var resolveHandler = function () {
+ if (aborter !== undefined) {
+ aborter.removeEventListener("abort", abortHandler);
+ }
+ resolve();
+ };
+ timeout = setTimeout(resolveHandler, timeInMs);
+ if (aborter !== undefined) {
+ aborter.addEventListener("abort", abortHandler);
+ }
+ })];
+ });
+ });
+}
+/**
+ * String.prototype.padStart()
+ *
+ * @export
+ * @param {string} currentString
+ * @param {number} targetLength
+ * @param {string} [padString=" "]
+ * @returns {string}
+ */
+function padStart(currentString, targetLength, padString) {
+ if (padString === void 0) { padString = " "; }
+ // TS doesn't know this code needs to run downlevel sometimes.
+ // @ts-expect-error
+ if (String.prototype.padStart) {
+ return currentString.padStart(targetLength, padString);
+ }
+ padString = padString || " ";
+ if (currentString.length > targetLength) {
+ return currentString;
+ }
+ else {
+ targetLength = targetLength - currentString.length;
+ if (targetLength > padString.length) {
+ padString += padString.repeat(targetLength / padString.length);
+ }
+ return padString.slice(0, targetLength) + currentString;
+ }
+}
+/**
+ * If two strings are equal when compared case insensitive.
+ *
+ * @export
+ * @param {string} str1
+ * @param {string} str2
+ * @returns {boolean}
+ */
+function iEqual(str1, str2) {
+ return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();
+}
+/**
+ * Extracts account name from the url
+ * @param {string} url url to extract the account name from
+ * @returns {string} with the account name
+ */
+function getAccountNameFromUrl(url) {
+ var parsedUrl = coreHttp.URLBuilder.parse(url);
+ var accountName;
+ try {
+ if (parsedUrl.getHost().split(".")[1] === "blob") {
+ // `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`;
+ accountName = parsedUrl.getHost().split(".")[0];
+ }
+ else 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;
+ }
+ var 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.
+ *
+ * @export
+ * @param {Tags} tags
+ * @returns {string | undefined}
+ */
+function toBlobTagsString(tags) {
+ if (tags === undefined) {
+ return undefined;
+ }
+ var tagPairs = [];
+ for (var key in tags) {
+ if (tags.hasOwnProperty(key)) {
+ var value = tags[key];
+ tagPairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(value));
+ }
+ }
+ return tagPairs.join("&");
+}
+/**
+ * Convert Tags type to BlobTags.
+ *
+ * @export
+ * @param {Tags} [tags]
+ * @returns {(BlobTags | undefined)}
+ */
+function toBlobTags(tags) {
+ if (tags === undefined) {
+ return undefined;
+ }
+ var res = {
+ blobTagSet: []
+ };
+ for (var key in tags) {
+ if (tags.hasOwnProperty(key)) {
+ var value = tags[key];
+ res.blobTagSet.push({
+ key: key,
+ value: value
+ });
+ }
+ }
+ return res;
+}
+/**
+ * Covert BlobTags to Tags type.
+ *
+ * @export
+ * @param {BlobTags} [tags]
+ * @returns {(Tags | undefined)}
+ */
+function toTags(tags) {
+ if (tags === undefined) {
+ return undefined;
+ }
+ var res = {};
+ for (var _i = 0, _a = tags.blobTagSet; _i < _a.length; _i++) {
+ var blobTag = _a[_i];
+ res[blobTag.key] = blobTag.value;
+ }
+ return res;
+}
+/**
+ * Convert BlobQueryTextConfiguration to QuerySerialization type.
+ *
+ * @export
+ * @param {(BlobQueryJsonTextConfiguration | BlobQueryCsvTextConfiguration)} [textConfiguration]
+ * @returns {(QuerySerialization | undefined)}
+ */
+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
+ }
+ }
+ };
+ 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;
+ }
+ var orProperties = [];
+ var _loop_1 = function (key) {
+ var ids = key.split("_");
+ var policyPrefix = "or-";
+ if (ids[0].startsWith(policyPrefix)) {
+ ids[0] = ids[0].substring(policyPrefix.length);
+ }
+ var rule = {
+ ruleId: ids[1],
+ replicationStatus: objectReplicationRecord[key]
+ };
+ var policyIndex = orProperties.findIndex(function (policy) { return policy.policyId === ids[0]; });
+ if (policyIndex > -1) {
+ orProperties[policyIndex].rules.push(rule);
+ }
+ else {
+ orProperties.push({
+ policyId: ids[0],
+ rules: [rule]
+ });
+ }
+ };
+ for (var key in objectReplicationRecord) {
+ _loop_1(key);
+ }
+ return orProperties;
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * StorageBrowserPolicy will handle differences between Node.js and browser runtime, including:
+ *
+ * 1. Browsers cache GET/HEAD requests by adding conditional headers such as 'IF_MODIFIED_SINCE'.
+ * StorageBrowserPolicy is a policy used to add a timestamp query to GET/HEAD request URL
+ * thus avoid the browser cache.
+ *
+ * 2. Remove cookie header for security
+ *
+ * 3. Remove content-length header to avoid browsers warning
+ *
+ * @class StorageBrowserPolicy
+ * @extends {BaseRequestPolicy}
+ */
+var StorageBrowserPolicy = /** @class */ (function (_super) {
+ tslib.__extends(StorageBrowserPolicy, _super);
+ /**
+ * Creates an instance of StorageBrowserPolicy.
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @memberof StorageBrowserPolicy
+ */
+ function StorageBrowserPolicy(nextPolicy, options) {
+ return _super.call(this, nextPolicy, options) || this;
+ }
+ /**
+ * Sends out request.
+ *
+ * @param {WebResource} request
+ * @returns {Promise}
+ * @memberof StorageBrowserPolicy
+ */
+ StorageBrowserPolicy.prototype.sendRequest = function (request) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ {
+ return [2 /*return*/, this._nextPolicy.sendRequest(request)];
+ }
+ });
+ });
+ };
+ return StorageBrowserPolicy;
+}(coreHttp.BaseRequestPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects.
+ *
+ * @export
+ * @class StorageBrowserPolicyFactory
+ * @implements {RequestPolicyFactory}
+ */
+var StorageBrowserPolicyFactory = /** @class */ (function () {
+ function StorageBrowserPolicyFactory() {
+ }
+ /**
+ * Creates a StorageBrowserPolicyFactory object.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @returns {StorageBrowserPolicy}
+ * @memberof StorageBrowserPolicyFactory
+ */
+ StorageBrowserPolicyFactory.prototype.create = function (nextPolicy, options) {
+ return new StorageBrowserPolicy(nextPolicy, options);
+ };
+ return StorageBrowserPolicyFactory;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+(function (StorageRetryPolicyType) {
+ /**
+ * Exponential retry. Retry time delay grows exponentially.
+ */
+ StorageRetryPolicyType[StorageRetryPolicyType["EXPONENTIAL"] = 0] = "EXPONENTIAL";
+ /**
+ * Linear retry. Retry time delay grows linearly.
+ */
+ StorageRetryPolicyType[StorageRetryPolicyType["FIXED"] = 1] = "FIXED";
+})(exports.StorageRetryPolicyType || (exports.StorageRetryPolicyType = {}));
+// Default values of StorageRetryOptions
+var DEFAULT_RETRY_OPTIONS = {
+ maxRetryDelayInMs: 120 * 1000,
+ maxTries: 4,
+ retryDelayInMs: 4 * 1000,
+ retryPolicyType: exports.StorageRetryPolicyType.EXPONENTIAL,
+ secondaryHost: "",
+ tryTimeoutInMs: undefined // Use server side default timeout strategy
+};
+var RETRY_ABORT_ERROR = new abortController.AbortError("The operation was aborted.");
+/**
+ * Retry policy with exponential retry and linear retry implemented.
+ *
+ * @class RetryPolicy
+ * @extends {BaseRequestPolicy}
+ */
+var StorageRetryPolicy = /** @class */ (function (_super) {
+ tslib.__extends(StorageRetryPolicy, _super);
+ /**
+ * Creates an instance of RetryPolicy.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @param {StorageRetryOptions} [retryOptions=DEFAULT_RETRY_OPTIONS]
+ * @memberof StorageRetryPolicy
+ */
+ function StorageRetryPolicy(nextPolicy, options, retryOptions) {
+ if (retryOptions === void 0) { retryOptions = DEFAULT_RETRY_OPTIONS; }
+ var _this = _super.call(this, nextPolicy, options) || this;
+ // Initialize retry options
+ _this.retryOptions = {
+ retryPolicyType: retryOptions.retryPolicyType
+ ? retryOptions.retryPolicyType
+ : DEFAULT_RETRY_OPTIONS.retryPolicyType,
+ maxTries: retryOptions.maxTries && retryOptions.maxTries >= 1
+ ? Math.floor(retryOptions.maxTries)
+ : DEFAULT_RETRY_OPTIONS.maxTries,
+ tryTimeoutInMs: retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0
+ ? retryOptions.tryTimeoutInMs
+ : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs,
+ retryDelayInMs: retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0
+ ? Math.min(retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs
+ ? retryOptions.maxRetryDelayInMs
+ : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs)
+ : DEFAULT_RETRY_OPTIONS.retryDelayInMs,
+ maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0
+ ? retryOptions.maxRetryDelayInMs
+ : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs,
+ secondaryHost: retryOptions.secondaryHost
+ ? retryOptions.secondaryHost
+ : DEFAULT_RETRY_OPTIONS.secondaryHost
+ };
+ return _this;
+ }
+ /**
+ * Sends request.
+ *
+ * @param {WebResource} request
+ * @returns {Promise}
+ * @memberof StorageRetryPolicy
+ */
+ StorageRetryPolicy.prototype.sendRequest = function (request) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, this.attemptSendRequest(request, false, 1)];
+ });
+ });
+ };
+ /**
+ * Decide and perform next retry. Won't mutate request parameter.
+ *
+ * @protected
+ * @param {WebResource} request
+ * @param {boolean} secondaryHas404 If attempt was against the secondary & it returned a StatusNotFound (404), then
+ * the resource was not found. This may be due to replication delay. So, in this
+ * case, we'll never try the secondary again for this operation.
+ * @param {number} attempt How many retries has been attempted to performed, starting from 1, which includes
+ * the attempt will be performed by this method call.
+ * @returns {Promise}
+ * @memberof StorageRetryPolicy
+ */
+ StorageRetryPolicy.prototype.attemptSendRequest = function (request, secondaryHas404, attempt) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var newRequest, isPrimaryRetry, response, err_1;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ newRequest = request.clone();
+ isPrimaryRetry = secondaryHas404 ||
+ !this.retryOptions.secondaryHost ||
+ !(request.method === "GET" || request.method === "HEAD" || request.method === "OPTIONS") ||
+ attempt % 2 === 1;
+ if (!isPrimaryRetry) {
+ newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost);
+ }
+ // Set the server-side timeout query parameter "timeout=[seconds]"
+ if (this.retryOptions.tryTimeoutInMs) {
+ newRequest.url = setURLParameter(newRequest.url, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
+ }
+ _a.label = 1;
+ case 1:
+ _a.trys.push([1, 3, , 4]);
+ logger.info("RetryPolicy: =====> Try=" + attempt + " " + (isPrimaryRetry ? "Primary" : "Secondary"));
+ return [4 /*yield*/, this._nextPolicy.sendRequest(newRequest)];
+ case 2:
+ response = _a.sent();
+ if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {
+ return [2 /*return*/, response];
+ }
+ secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
+ return [3 /*break*/, 4];
+ case 3:
+ err_1 = _a.sent();
+ logger.error("RetryPolicy: Caught error, message: " + err_1.message + ", code: " + err_1.code);
+ if (!this.shouldRetry(isPrimaryRetry, attempt, response, err_1)) {
+ throw err_1;
+ }
+ return [3 /*break*/, 4];
+ case 4: return [4 /*yield*/, this.delay(isPrimaryRetry, attempt, request.abortSignal)];
+ case 5:
+ _a.sent();
+ return [4 /*yield*/, this.attemptSendRequest(request, secondaryHas404, ++attempt)];
+ case 6: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+ };
+ /**
+ * Decide whether to retry according to last HTTP response and retry counters.
+ *
+ * @protected
+ * @param {boolean} isPrimaryRetry
+ * @param {number} attempt
+ * @param {HttpOperationResponse} [response]
+ * @param {RestError} [err]
+ * @returns {boolean}
+ * @memberof StorageRetryPolicy
+ */
+ StorageRetryPolicy.prototype.shouldRetry = function (isPrimaryRetry, attempt, response, err) {
+ if (attempt >= this.retryOptions.maxTries) {
+ logger.info("RetryPolicy: Attempt(s) " + attempt + " >= maxTries " + this.retryOptions
+ .maxTries + ", no further try.");
+ return false;
+ }
+ // Handle network failures, you may need to customize the list when you implement
+ // your own http client
+ var retriableErrors = [
+ "ETIMEDOUT",
+ "ESOCKETTIMEDOUT",
+ "ECONNREFUSED",
+ "ECONNRESET",
+ "ENOENT",
+ "ENOTFOUND",
+ "TIMEOUT",
+ "EPIPE",
+ "REQUEST_SEND_ERROR" // For default xhr based http client provided in ms-rest-js
+ ];
+ if (err) {
+ for (var _i = 0, retriableErrors_1 = retriableErrors; _i < retriableErrors_1.length; _i++) {
+ var retriableError = retriableErrors_1[_i];
+ if (err.name.toUpperCase().includes(retriableError) ||
+ err.message.toUpperCase().includes(retriableError) ||
+ (err.code &&
+ err.code
+ .toString()
+ .toUpperCase()
+ .includes(retriableError))) {
+ logger.info("RetryPolicy: Network error " + retriableError + " found, will retry.");
+ return true;
+ }
+ }
+ }
+ // If attempt was against the secondary & it returned a StatusNotFound (404), then
+ // the resource was not found. This may be due to replication delay. So, in this
+ // case, we'll never try the secondary again for this operation.
+ if (response || err) {
+ var statusCode = response ? response.status : err ? err.statusCode : 0;
+ if (!isPrimaryRetry && statusCode === 404) {
+ logger.info("RetryPolicy: Secondary access with 404, will retry.");
+ return true;
+ }
+ // Server internal error or server timeout
+ if (statusCode === 503 || statusCode === 500) {
+ logger.info("RetryPolicy: Will retry for status code " + statusCode + ".");
+ return true;
+ }
+ }
+ return false;
+ };
+ /**
+ * Delay a calculated time between retries.
+ *
+ * @private
+ * @param {boolean} isPrimaryRetry
+ * @param {number} attempt
+ * @param {AbortSignalLike} [abortSignal]
+ * @memberof StorageRetryPolicy
+ */
+ StorageRetryPolicy.prototype.delay = function (isPrimaryRetry, attempt, abortSignal) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var delayTimeInMs;
+ return tslib.__generator(this, function (_a) {
+ delayTimeInMs = 0;
+ if (isPrimaryRetry) {
+ switch (this.retryOptions.retryPolicyType) {
+ case exports.StorageRetryPolicyType.EXPONENTIAL:
+ delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs, this.retryOptions.maxRetryDelayInMs);
+ break;
+ case exports.StorageRetryPolicyType.FIXED:
+ delayTimeInMs = this.retryOptions.retryDelayInMs;
+ break;
+ }
+ }
+ else {
+ delayTimeInMs = Math.random() * 1000;
+ }
+ logger.info("RetryPolicy: Delay for " + delayTimeInMs + "ms");
+ return [2 /*return*/, delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR)];
+ });
+ });
+ };
+ return StorageRetryPolicy;
+}(coreHttp.BaseRequestPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects.
+ *
+ * @export
+ * @class StorageRetryPolicyFactory
+ * @implements {RequestPolicyFactory}
+ */
+var StorageRetryPolicyFactory = /** @class */ (function () {
+ /**
+ * Creates an instance of StorageRetryPolicyFactory.
+ * @param {StorageRetryOptions} [retryOptions]
+ * @memberof StorageRetryPolicyFactory
+ */
+ function StorageRetryPolicyFactory(retryOptions) {
+ this.retryOptions = retryOptions;
+ }
+ /**
+ * Creates a StorageRetryPolicy object.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @returns {StorageRetryPolicy}
+ * @memberof StorageRetryPolicyFactory
+ */
+ StorageRetryPolicyFactory.prototype.create = function (nextPolicy, options) {
+ return new StorageRetryPolicy(nextPolicy, options, this.retryOptions);
+ };
+ return StorageRetryPolicyFactory;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * Credential policy used to sign HTTP(S) requests before sending. This is an
+ * abstract class.
+ *
+ * @export
+ * @abstract
+ * @class CredentialPolicy
+ * @extends {BaseRequestPolicy}
+ */
+var CredentialPolicy = /** @class */ (function (_super) {
+ tslib.__extends(CredentialPolicy, _super);
+ function CredentialPolicy() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * Sends out request.
+ *
+ * @param {WebResource} request
+ * @returns {Promise}
+ * @memberof CredentialPolicy
+ */
+ CredentialPolicy.prototype.sendRequest = function (request) {
+ return this._nextPolicy.sendRequest(this.signRequest(request));
+ };
+ /**
+ * Child classes must implement this method with request signing. This method
+ * will be executed in {@link sendRequest}.
+ *
+ * @protected
+ * @abstract
+ * @param {WebResource} request
+ * @returns {WebResource}
+ * @memberof CredentialPolicy
+ */
+ CredentialPolicy.prototype.signRequest = function (request) {
+ // Child classes must override this method with request signing. This method
+ // will be executed in sendRequest().
+ return request;
+ };
+ return CredentialPolicy;
+}(coreHttp.BaseRequestPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources
+ * or for use with Shared Access Signatures (SAS).
+ *
+ * @export
+ * @class AnonymousCredentialPolicy
+ * @extends {CredentialPolicy}
+ */
+var AnonymousCredentialPolicy = /** @class */ (function (_super) {
+ tslib.__extends(AnonymousCredentialPolicy, _super);
+ /**
+ * Creates an instance of AnonymousCredentialPolicy.
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @memberof AnonymousCredentialPolicy
+ */
+ function AnonymousCredentialPolicy(nextPolicy, options) {
+ return _super.call(this, nextPolicy, options) || this;
+ }
+ return AnonymousCredentialPolicy;
+}(CredentialPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * Credential is an abstract class for Azure Storage HTTP requests signing. This
+ * class will host an credentialPolicyCreator factory which generates CredentialPolicy.
+ *
+ * @export
+ * @abstract
+ * @class Credential
+ */
+var Credential = /** @class */ (function () {
+ function Credential() {
+ }
+ /**
+ * Creates a RequestPolicy object.
+ *
+ * @param {RequestPolicy} _nextPolicy
+ * @param {RequestPolicyOptions} _options
+ * @returns {RequestPolicy}
+ * @memberof Credential
+ */
+ Credential.prototype.create = function (
+ // tslint:disable-next-line:variable-name
+ _nextPolicy,
+ // tslint:disable-next-line:variable-name
+ _options) {
+ throw new Error("Method should be implemented in children classes.");
+ };
+ return Credential;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * AnonymousCredential provides a credentialPolicyCreator member used to create
+ * AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with
+ * HTTP(S) requests that read public resources or for use with Shared Access
+ * Signatures (SAS).
+ *
+ * @export
+ * @class AnonymousCredential
+ * @extends {Credential}
+ */
+var AnonymousCredential = /** @class */ (function (_super) {
+ tslib.__extends(AnonymousCredential, _super);
+ function AnonymousCredential() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ /**
+ * Creates an {@link AnonymousCredentialPolicy} object.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @returns {AnonymousCredentialPolicy}
+ * @memberof AnonymousCredential
+ */
+ AnonymousCredential.prototype.create = function (nextPolicy, options) {
+ return new AnonymousCredentialPolicy(nextPolicy, options);
+ };
+ return AnonymousCredential;
+}(Credential));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * TelemetryPolicy is a policy used to tag user-agent header for every requests.
+ *
+ * @class TelemetryPolicy
+ * @extends {BaseRequestPolicy}
+ */
+var TelemetryPolicy = /** @class */ (function (_super) {
+ tslib.__extends(TelemetryPolicy, _super);
+ /**
+ * Creates an instance of TelemetryPolicy.
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @param {string} telemetry
+ * @memberof TelemetryPolicy
+ */
+ function TelemetryPolicy(nextPolicy, options, telemetry) {
+ var _this = _super.call(this, nextPolicy, options) || this;
+ _this.telemetry = telemetry;
+ return _this;
+ }
+ /**
+ * Sends out request.
+ *
+ * @param {WebResource} request
+ * @returns {Promise}
+ * @memberof TelemetryPolicy
+ */
+ TelemetryPolicy.prototype.sendRequest = function (request) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ {
+ if (!request.headers) {
+ request.headers = new coreHttp.HttpHeaders();
+ }
+ if (!request.headers.get(HeaderConstants.USER_AGENT)) {
+ request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);
+ }
+ }
+ return [2 /*return*/, this._nextPolicy.sendRequest(request)];
+ });
+ });
+ };
+ return TelemetryPolicy;
+}(coreHttp.BaseRequestPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * TelemetryPolicyFactory is a factory class helping generating {@link TelemetryPolicy} objects.
+ *
+ * @export
+ * @class TelemetryPolicyFactory
+ * @implements {RequestPolicyFactory}
+ */
+var TelemetryPolicyFactory = /** @class */ (function () {
+ /**
+ * Creates an instance of TelemetryPolicyFactory.
+ * @param {UserAgentOptions} [telemetry]
+ * @memberof TelemetryPolicyFactory
+ */
+ function TelemetryPolicyFactory(telemetry) {
+ var userAgentInfo = [];
+ {
+ if (telemetry) {
+ // FIXME: replace() only replaces the first space. And we have no idea why we need to replace spaces in the first place.
+ // But fixing this would be a breaking change. Logged an issue here: https://github.com/Azure/azure-sdk-for-js/issues/10793
+ var telemetryString = (telemetry.userAgentPrefix || "").replace(" ", "");
+ if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) {
+ userAgentInfo.push(telemetryString);
+ }
+ }
+ // e.g. azsdk-js-storageblob/10.0.0
+ var libInfo = "azsdk-js-storageblob/" + SDK_VERSION;
+ if (userAgentInfo.indexOf(libInfo) === -1) {
+ userAgentInfo.push(libInfo);
+ }
+ // e.g. (NODE-VERSION 4.9.1; Windows_NT 10.0.16299)
+ var runtimeInfo = "(NODE-VERSION " + process.version + "; " + os.type() + " " + os.release() + ")";
+ if (userAgentInfo.indexOf(runtimeInfo) === -1) {
+ userAgentInfo.push(runtimeInfo);
+ }
+ }
+ this.telemetryString = userAgentInfo.join(" ");
+ }
+ /**
+ * Creates a TelemetryPolicy object.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @returns {TelemetryPolicy}
+ * @memberof TelemetryPolicyFactory
+ */
+ TelemetryPolicyFactory.prototype.create = function (nextPolicy, options) {
+ return new TelemetryPolicy(nextPolicy, options, this.telemetryString);
+ };
+ return TelemetryPolicyFactory;
+}());
+
+// Copyright (c) Microsoft Corporation.
+var _defaultHttpClient = new coreHttp.DefaultHttpClient();
+function getCachedDefaultHttpClient() {
+ return _defaultHttpClient;
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * A Pipeline class containing HTTP request policies.
+ * You can create a default Pipeline by calling {@link newPipeline}.
+ * Or you can create a Pipeline with your own policies by the constructor of Pipeline.
+ *
+ * Refer to {@link newPipeline} and provided policies before implementing your
+ * customized Pipeline.
+ *
+ * @export
+ * @class Pipeline
+ */
+var Pipeline = /** @class */ (function () {
+ /**
+ * Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.
+ *
+ * @param {RequestPolicyFactory[]} factories
+ * @param {PipelineOptions} [options={}]
+ * @memberof Pipeline
+ */
+ function Pipeline(factories, options) {
+ if (options === void 0) { options = {}; }
+ this.factories = factories;
+ // when options.httpClient is not specified, passing in a DefaultHttpClient instance to
+ // avoid each client creating its own http client.
+ this.options = tslib.__assign(tslib.__assign({}, options), { httpClient: options.httpClient || getCachedDefaultHttpClient() });
+ }
+ /**
+ * Transfer Pipeline object to ServiceClientOptions object which is required by
+ * ServiceClient constructor.
+ *
+ * @returns {ServiceClientOptions} The ServiceClientOptions object from this Pipeline.
+ * @memberof Pipeline
+ */
+ Pipeline.prototype.toServiceClientOptions = function () {
+ return {
+ httpClient: this.options.httpClient,
+ requestPolicyFactories: this.factories
+ };
+ };
+ return Pipeline;
+}());
+/**
+ * Creates a new Pipeline object with Credential provided.
+ *
+ * @export
+ * @param {StorageSharedKeyCredential | AnonymousCredential | TokenCredential} credential Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the @azure/identity package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
+ * @param {StoragePipelineOptions} [pipelineOptions] Optional. Options.
+ * @returns {Pipeline} A new Pipeline object.
+ */
+function newPipeline(credential, pipelineOptions) {
+ if (pipelineOptions === void 0) { 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)
+ var telemetryPolicy = new TelemetryPolicyFactory(pipelineOptions.userAgentOptions);
+ var factories = [
+ coreHttp.tracingPolicy({ userAgent: telemetryPolicy.telemetryString }),
+ coreHttp.keepAlivePolicy(pipelineOptions.keepAliveOptions),
+ telemetryPolicy,
+ coreHttp.generateClientRequestIdPolicy(),
+ new StorageBrowserPolicyFactory(),
+ coreHttp.deserializationPolicy(),
+ new StorageRetryPolicyFactory(pipelineOptions.retryOptions),
+ coreHttp.logPolicy({
+ logger: logger.info,
+ allowedHeaderNames: StorageBlobLoggingAllowedHeaderNames,
+ allowedQueryParameters: StorageBlobLoggingAllowedQueryParameters
+ })
+ ];
+ {
+ // policies only available in Node.js runtime, not in browsers
+ factories.push(coreHttp.proxyPolicy(pipelineOptions.proxyOptions));
+ factories.push(coreHttp.disableResponseDecompressionPolicy());
+ }
+ factories.push(coreHttp.isTokenCredential(credential)
+ ? coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes)
+ : credential);
+ return new Pipeline(factories, pipelineOptions);
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+var ABORT_ERROR = new abortController.AbortError("The operation was aborted.");
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * A Node.js ReadableStream will internally retry when internal ReadableStream unexpected ends.
+ *
+ * @class RetriableReadableStream
+ * @extends {Readable}
+ */
+var RetriableReadableStream = /** @class */ (function (_super) {
+ tslib.__extends(RetriableReadableStream, _super);
+ /**
+ * Creates an instance of RetriableReadableStream.
+ *
+ * @param {NodeJS.ReadableStream} source The current ReadableStream returned from getter
+ * @param {ReadableStreamGetter} getter A method calling downloading request returning
+ * a new ReadableStream from specified offset
+ * @param {number} offset Offset position in original data source to read
+ * @param {number} count How much data in original data source to read
+ * @param {RetriableReadableStreamOptions} [options={}]
+ * @memberof RetriableReadableStream
+ */
+ function RetriableReadableStream(source, getter, offset, count, options) {
+ if (options === void 0) { options = {}; }
+ var _this = _super.call(this) || this;
+ _this.retries = 0;
+ _this.abortHandler = function () {
+ _this.source.pause();
+ _this.emit("error", ABORT_ERROR);
+ };
+ _this.aborter = options.abortSignal || abortController.AbortSignal.none;
+ _this.getter = getter;
+ _this.source = source;
+ _this.start = offset;
+ _this.offset = offset;
+ _this.end = offset + count - 1;
+ _this.maxRetryRequests =
+ options.maxRetryRequests && options.maxRetryRequests >= 0 ? options.maxRetryRequests : 0;
+ _this.onProgress = options.onProgress;
+ _this.options = options;
+ _this.aborter.addEventListener("abort", _this.abortHandler);
+ _this.setSourceDataHandler();
+ _this.setSourceEndHandler();
+ _this.setSourceErrorHandler();
+ return _this;
+ }
+ RetriableReadableStream.prototype._read = function () {
+ if (!this.aborter.aborted) {
+ this.source.resume();
+ }
+ };
+ RetriableReadableStream.prototype.setSourceDataHandler = function () {
+ var _this = this;
+ this.source.on("data", function (data) {
+ if (_this.options.doInjectErrorOnce) {
+ _this.options.doInjectErrorOnce = undefined;
+ _this.source.pause();
+ _this.source.removeAllListeners("data");
+ _this.source.emit("end");
+ return;
+ }
+ // console.log(
+ // `Offset: ${this.offset}, Received ${data.length} from internal stream`
+ // );
+ _this.offset += data.length;
+ if (_this.onProgress) {
+ _this.onProgress({ loadedBytes: _this.offset - _this.start });
+ }
+ if (!_this.push(data)) {
+ _this.source.pause();
+ }
+ });
+ };
+ RetriableReadableStream.prototype.setSourceEndHandler = function () {
+ var _this = this;
+ this.source.on("end", function () {
+ // console.log(
+ // `Source stream emits end, offset: ${
+ // this.offset
+ // }, dest end : ${this.end}`
+ // );
+ if (_this.offset - 1 === _this.end) {
+ _this.aborter.removeEventListener("abort", _this.abortHandler);
+ _this.push(null);
+ }
+ else if (_this.offset <= _this.end) {
+ // console.log(
+ // `retries: ${this.retries}, max retries: ${this.maxRetries}`
+ // );
+ if (_this.retries < _this.maxRetryRequests) {
+ _this.retries += 1;
+ _this.getter(_this.offset)
+ .then(function (newSource) {
+ _this.source = newSource;
+ _this.setSourceDataHandler();
+ _this.setSourceEndHandler();
+ _this.setSourceErrorHandler();
+ })
+ .catch(function (error) {
+ _this.emit("error", error);
+ });
+ }
+ else {
+ _this.emit("error", new Error(
+ // tslint:disable-next-line:max-line-length
+ "Data corruption failure: received less data than required and reached maxRetires limitation. Received data offset: " + (_this
+ .offset - 1) + ", data needed offset: " + _this.end + ", retries: " + _this.retries + ", max retries: " + _this.maxRetryRequests));
+ }
+ }
+ else {
+ _this.emit("error", new Error("Data corruption failure: Received more data than original request, data needed offset is " + _this.end + ", received offset: " + (_this.offset - 1)));
+ }
+ });
+ };
+ RetriableReadableStream.prototype.setSourceErrorHandler = function () {
+ var _this = this;
+ this.source.on("error", function (error) {
+ _this.emit("error", error);
+ });
+ };
+ return RetriableReadableStream;
+}(stream.Readable));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * BlobDownloadResponse implements 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.
+ *
+ * @export
+ * @class BlobDownloadResponse
+ * @implements {BlobDownloadResponseParsed}
+ */
+var BlobDownloadResponse = /** @class */ (function () {
+ /**
+ * Creates an instance of BlobDownloadResponse.
+ *
+ * @param {BlobDownloadResponseParsed} originalResponse
+ * @param {ReadableStreamGetter} getter
+ * @param {number} offset
+ * @param {number} count
+ * @param {RetriableReadableStreamOptions} [options={}]
+ * @memberof BlobDownloadResponse
+ */
+ function BlobDownloadResponse(originalResponse, getter, offset, count, options) {
+ if (options === void 0) { options = {}; }
+ this.originalResponse = originalResponse;
+ this.blobDownloadStream = new RetriableReadableStream(this.originalResponse.readableStreamBody, getter, offset, count, options);
+ }
+ Object.defineProperty(BlobDownloadResponse.prototype, "acceptRanges", {
+ /**
+ * Indicates that the service supports
+ * requests for partial file content.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.acceptRanges;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "cacheControl", {
+ /**
+ * Returns if it was previously specified
+ * for the file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.cacheControl;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentDisposition", {
+ /**
+ * Returns the value that was specified
+ * for the 'x-ms-content-disposition' header and specifies how to process the
+ * response.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentDisposition;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentEncoding", {
+ /**
+ * Returns the value that was specified
+ * for the Content-Encoding request header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentEncoding;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentLanguage", {
+ /**
+ * Returns the value that was specified
+ * for the Content-Language request header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentLanguage;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "blobSequenceNumber", {
+ /**
+ * The current sequence number for a
+ * page blob. This header is not returned for block blobs or append blobs.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.blobSequenceNumber;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "blobType", {
+ /**
+ * The blob's type. Possible values include:
+ * 'BlockBlob', 'PageBlob', 'AppendBlob'.
+ *
+ * @readonly
+ * @type {(BlobType | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.blobType;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentLength", {
+ /**
+ * The number of bytes present in the
+ * response body.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentLength;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentMD5", {
+ /**
+ * If the file has an MD5 hash and the
+ * request is to read the full file, this response header is returned so that
+ * the client can check for message content integrity. If the request is to
+ * read a specified range and the 'x-ms-range-get-content-md5' is set to
+ * true, then the request returns an MD5 hash for the range, as long as the
+ * range size is less than or equal to 4 MB. If neither of these sets of
+ * conditions is true, then no value is returned for the 'Content-MD5'
+ * header.
+ *
+ * @readonly
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentMD5;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentRange", {
+ /**
+ * Indicates the range of bytes returned if
+ * the client requested a subset of the file by setting the Range request
+ * header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentRange;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentType", {
+ /**
+ * The content type specified for the file.
+ * The default content type is 'application/octet-stream'
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentType;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copyCompletedOn", {
+ /**
+ * Conclusion time of the last attempted
+ * Copy File operation where this file was the destination file. This value
+ * can specify the time of a completed, aborted, or failed copy attempt.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copyCompletedOn;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copyId", {
+ /**
+ * String identifier for the last attempted Copy
+ * File operation where this file was the destination file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copyId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copyProgress", {
+ /**
+ * Contains the number of bytes copied and
+ * the total bytes in the source in the last attempted Copy File operation
+ * where this file was the destination file. Can show between 0 and
+ * Content-Length bytes copied.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copyProgress;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copySource", {
+ /**
+ * URL up to 2KB in length that specifies the
+ * source file used in the last attempted Copy File operation where this file
+ * was the destination file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copySource;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copyStatus", {
+ /**
+ * State of the copy operation
+ * identified by 'x-ms-copy-id'. Possible values include: 'pending',
+ * 'success', 'aborted', 'failed'
+ *
+ * @readonly
+ * @type {(CopyStatusType | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copyStatus;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "copyStatusDescription", {
+ /**
+ * Only appears when
+ * x-ms-copy-status is failed or pending. Describes cause of fatal or
+ * non-fatal copy operation failure.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.copyStatusDescription;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "leaseDuration", {
+ /**
+ * When a blob is leased,
+ * specifies whether the lease is of infinite or fixed duration. Possible
+ * values include: 'infinite', 'fixed'.
+ *
+ * @readonly
+ * @type {(LeaseDurationType | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseDuration;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "leaseState", {
+ /**
+ * Lease state of the blob. Possible
+ * values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
+ *
+ * @readonly
+ * @type {(LeaseStateType | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseState;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "leaseStatus", {
+ /**
+ * The current lease status of the
+ * blob. Possible values include: 'locked', 'unlocked'.
+ *
+ * @readonly
+ * @type {(LeaseStatusType | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseStatus;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "date", {
+ /**
+ * A UTC date/time value generated by the service that
+ * indicates the time at which the response was initiated.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.date;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "blobCommittedBlockCount", {
+ /**
+ * The number of committed blocks
+ * present in the blob. This header is returned only for append blobs.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.blobCommittedBlockCount;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "etag", {
+ /**
+ * The ETag contains a value that you can use to
+ * perform operations conditionally, in quotes.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.etag;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "tagCount", {
+ /**
+ * The number of tags associated with the blob
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.tagCount;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "errorCode", {
+ /**
+ * The error code.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.errorCode;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "isServerEncrypted", {
+ /**
+ * The value of this header is set to
+ * true if the file data and application metadata are completely encrypted
+ * using the specified algorithm. Otherwise, the value is set to false (when
+ * the file is unencrypted, or if only parts of the file/application metadata
+ * are encrypted).
+ *
+ * @readonly
+ * @type {(boolean | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.isServerEncrypted;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "blobContentMD5", {
+ /**
+ * If the blob has a MD5 hash, and if
+ * request contains range header (Range or x-ms-range), this response header
+ * is returned with the value of the whole blob's MD5 value. This value may
+ * or may not be equal to the value returned in Content-MD5 header, with the
+ * latter calculated from the requested range.
+ *
+ * @readonly
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.blobContentMD5;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "lastModified", {
+ /**
+ * Returns the date and time the file was last
+ * modified. Any operation that modifies the file or its properties updates
+ * the last modified time.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.lastModified;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "metadata", {
+ /**
+ * A name-value pair
+ * to associate with a file storage object.
+ *
+ * @readonly
+ * @type {(Metadata | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.metadata;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "requestId", {
+ /**
+ * This header uniquely identifies the request
+ * that was made and can be used for troubleshooting the request.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.requestId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "clientRequestId", {
+ /**
+ * If a client request id header is sent in the request, this header will be present in the
+ * response with the same value.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.clientRequestId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "version", {
+ /**
+ * Indicates the version of the Blob service used
+ * to execute the request.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.version;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "versionId", {
+ /**
+ * Indicates the versionId of the downloaded blob version.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.versionId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "encryptionKeySha256", {
+ /**
+ * The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
+ * when the blob was encrypted with a customer-provided key.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.encryptionKeySha256;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentCrc64", {
+ /**
+ * If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
+ * true, then the request returns a crc64 for the range, as long as the range size is less than
+ * or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
+ * specified in the same request, it will fail with 400(Bad Request)
+ *
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.contentCrc64;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "objectReplicationDestinationPolicyId", {
+ /**
+ * Object Replication Policy Id of the destination blob.
+ *
+ * @readonly
+ * @type {(string| undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.objectReplicationDestinationPolicyId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "objectReplicationSourceProperties", {
+ /**
+ * Parsed Object Replication Policy Id, Rule Id(s) and status of the source blob.
+ *
+ * @readonly
+ * @type {(ObjectReplicationPolicy[] | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.objectReplicationSourceProperties;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "isSealed", {
+ /**
+ * If this blob has been sealed.
+ *
+ * @readonly
+ * @type {(boolean | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.isSealed;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "contentAsBlob", {
+ /**
+ * The response body as a browser Blob.
+ * Always undefined in node.js.
+ *
+ * @readonly
+ * @type {(Promise | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse.blobBody;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "readableStreamBody", {
+ /**
+ * The response body as a node.js Readable stream.
+ * Always undefined in the browser.
+ *
+ * It will automatically retry when internal read stream unexpected ends.
+ *
+ * @readonly
+ * @type {(NodeJS.ReadableStream | undefined)}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return coreHttp.isNode ? this.blobDownloadStream : undefined;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobDownloadResponse.prototype, "_response", {
+ /**
+ * The HTTP response.
+ *
+ * @type {HttpResponse}
+ * @memberof BlobDownloadResponse
+ */
+ get: function () {
+ return this.originalResponse._response;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return BlobDownloadResponse;
+}());
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+var AVRO_SYNC_MARKER_SIZE = 16;
+var AVRO_INIT_BYTES = new Uint8Array([79, 98, 106, 1]);
+var AVRO_CODEC_KEY = "avro.codec";
+var 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 (var i = 0; i < a.length; ++i) {
+ if (a[i] !== b[i])
+ return false;
+ }
+ return true;
+}
+
+// Copyright (c) Microsoft Corporation.
+var AvroParser = /** @class */ (function () {
+ function AvroParser() {
+ }
+ /**
+ * Reads a fixed number of bytes from the stream.
+ *
+ * @static
+ * @param {AvroReadable} [stream]
+ * @param {number} [length]
+ * @param {AvroParserReadOptions} [options={}]
+ * @returns {Promise}
+ * @memberof AvroParser
+ */
+ AvroParser.readFixedBytes = function (stream, length, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var bytes;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, stream.read(length, { abortSignal: options.abortSignal })];
+ case 1:
+ bytes = _a.sent();
+ if (bytes.length != length) {
+ throw new Error("Hit stream end.");
+ }
+ return [2 /*return*/, bytes];
+ }
+ });
+ });
+ };
+ /**
+ * Reads a single byte from the stream.
+ *
+ * @static
+ * @param {AvroReadable} [stream]
+ * @param {AvroParserReadOptions} [options={}]
+ * @returns {Promise}
+ * @memberof AvroParser
+ */
+ AvroParser.readByte = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var buf;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 1, options)];
+ case 1:
+ buf = _a.sent();
+ return [2 /*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
+ AvroParser.readZigZagLong = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var zigZagEncoded, significanceInBit, byte, haveMoreByte, significanceInFloat, res;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ zigZagEncoded = 0;
+ significanceInBit = 0;
+ _a.label = 1;
+ case 1: return [4 /*yield*/, AvroParser.readByte(stream, options)];
+ case 2:
+ byte = _a.sent();
+ haveMoreByte = byte & 0x80;
+ zigZagEncoded |= (byte & 0x7f) << significanceInBit;
+ significanceInBit += 7;
+ _a.label = 3;
+ case 3:
+ if (haveMoreByte && significanceInBit < 28) return [3 /*break*/, 1];
+ _a.label = 4;
+ case 4:
+ if (!haveMoreByte) return [3 /*break*/, 9];
+ // Switch to float arithmetic
+ zigZagEncoded = zigZagEncoded;
+ significanceInFloat = 268435456; // 2 ** 28.
+ _a.label = 5;
+ case 5: return [4 /*yield*/, AvroParser.readByte(stream, options)];
+ case 6:
+ byte = _a.sent();
+ zigZagEncoded += (byte & 0x7f) * significanceInFloat;
+ significanceInFloat *= 128; // 2 ** 7
+ _a.label = 7;
+ case 7:
+ if (byte & 0x80) return [3 /*break*/, 5];
+ _a.label = 8;
+ case 8:
+ res = (zigZagEncoded % 2 ? -(zigZagEncoded + 1) : zigZagEncoded) / 2;
+ if (res < Number.MIN_SAFE_INTEGER || res > Number.MAX_SAFE_INTEGER) {
+ throw new Error("Integer overflow.");
+ }
+ return [2 /*return*/, res];
+ case 9: return [2 /*return*/, (zigZagEncoded >> 1) ^ -(zigZagEncoded & 1)];
+ }
+ });
+ });
+ };
+ AvroParser.readLong = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, AvroParser.readZigZagLong(stream, options)];
+ });
+ });
+ };
+ AvroParser.readInt = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, AvroParser.readZigZagLong(stream, options)];
+ });
+ });
+ };
+ AvroParser.readNull = function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, null];
+ });
+ });
+ };
+ AvroParser.readBoolean = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var b;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readByte(stream, options)];
+ case 1:
+ b = _a.sent();
+ if (b == 1) {
+ return [2 /*return*/, true];
+ }
+ else if (b == 0) {
+ return [2 /*return*/, false];
+ }
+ else {
+ throw new Error("Byte was not a boolean.");
+ }
+ }
+ });
+ });
+ };
+ AvroParser.readFloat = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var u8arr, view;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 4, options)];
+ case 1:
+ u8arr = _a.sent();
+ view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
+ return [2 /*return*/, view.getFloat32(0, true)]; // littleEndian = true
+ }
+ });
+ });
+ };
+ AvroParser.readDouble = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var u8arr, view;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 8, options)];
+ case 1:
+ u8arr = _a.sent();
+ view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength);
+ return [2 /*return*/, view.getFloat64(0, true)]; // littleEndian = true
+ }
+ });
+ });
+ };
+ AvroParser.readBytes = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var size;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readLong(stream, options)];
+ case 1:
+ size = _a.sent();
+ if (size < 0) {
+ throw new Error("Bytes size was negative.");
+ }
+ return [4 /*yield*/, stream.read(size, { abortSignal: options.abortSignal })];
+ case 2: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+ };
+ AvroParser.readString = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var u8arr, utf8decoder;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readBytes(stream, options)];
+ case 1:
+ u8arr = _a.sent();
+ // 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;
+ }
+ utf8decoder = new TextDecoder();
+ return [2 /*return*/, utf8decoder.decode(u8arr)];
+ }
+ });
+ });
+ };
+ AvroParser.readMapPair = function (stream, readItemMethod, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var key, value;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readString(stream, options)];
+ case 1:
+ key = _a.sent();
+ return [4 /*yield*/, readItemMethod(stream, options)];
+ case 2:
+ value = _a.sent();
+ return [2 /*return*/, { key: key, value: value }];
+ }
+ });
+ });
+ };
+ AvroParser.readMap = function (stream, readItemMethod, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var readPairMethod, pairs, dict, _i, pairs_1, pair;
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ readPairMethod = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(_this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readMapPair(stream, readItemMethod, options)];
+ case 1: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+ };
+ return [4 /*yield*/, AvroParser.readArray(stream, readPairMethod, options)];
+ case 1:
+ pairs = _a.sent();
+ dict = {};
+ for (_i = 0, pairs_1 = pairs; _i < pairs_1.length; _i++) {
+ pair = pairs_1[_i];
+ dict[pair.key] = pair.value;
+ }
+ return [2 /*return*/, dict];
+ }
+ });
+ });
+ };
+ AvroParser.readArray = function (stream, readItemMethod, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var items, count, item;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ items = [];
+ return [4 /*yield*/, AvroParser.readLong(stream, options)];
+ case 1:
+ count = _a.sent();
+ _a.label = 2;
+ case 2:
+ if (!(count != 0)) return [3 /*break*/, 8];
+ if (!(count < 0)) return [3 /*break*/, 4];
+ // Ignore block sizes
+ return [4 /*yield*/, AvroParser.readLong(stream, options)];
+ case 3:
+ // Ignore block sizes
+ _a.sent();
+ count = -count;
+ _a.label = 4;
+ case 4:
+ if (!count--) return [3 /*break*/, 6];
+ return [4 /*yield*/, readItemMethod(stream, options)];
+ case 5:
+ item = _a.sent();
+ items.push(item);
+ return [3 /*break*/, 4];
+ case 6: return [4 /*yield*/, AvroParser.readLong(stream, options)];
+ case 7:
+ count = _a.sent();
+ return [3 /*break*/, 2];
+ case 8: return [2 /*return*/, items];
+ }
+ });
+ });
+ };
+ return AvroParser;
+}());
+var AvroComplex;
+(function (AvroComplex) {
+ AvroComplex["RECORD"] = "record";
+ AvroComplex["ENUM"] = "enum";
+ AvroComplex["ARRAY"] = "array";
+ AvroComplex["MAP"] = "map";
+ AvroComplex["UNION"] = "union";
+ AvroComplex["FIXED"] = "fixed";
+})(AvroComplex || (AvroComplex = {}));
+var AvroType = /** @class */ (function () {
+ function AvroType() {
+ }
+ /**
+ * Determines the AvroType from the Avro Schema.
+ */
+ AvroType.fromSchema = function (schema) {
+ if (typeof schema == "string") {
+ return AvroType.fromStringSchema(schema);
+ }
+ else if (Array.isArray(schema)) {
+ return AvroType.fromArraySchema(schema);
+ }
+ else {
+ return AvroType.fromObjectSchema(schema);
+ }
+ };
+ AvroType.fromStringSchema = function (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);
+ }
+ };
+ AvroType.fromArraySchema = function (schema) {
+ return new AvroUnionType(schema.map(AvroType.fromSchema));
+ };
+ AvroType.fromObjectSchema = function (schema) {
+ var 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);
+ }
+ var fields = {};
+ if (!schema.fields) {
+ throw new Error("Required attribute 'fields' doesn't exist on schema: " + schema);
+ }
+ for (var _i = 0, _a = schema.fields; _i < _a.length; _i++) {
+ var field = _a[_i];
+ 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);
+ }
+ };
+ return AvroType;
+}());
+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 = {}));
+var AvroPrimitiveType = /** @class */ (function (_super) {
+ tslib.__extends(AvroPrimitiveType, _super);
+ function AvroPrimitiveType(primitive) {
+ var _this = _super.call(this) || this;
+ _this._primitive = primitive;
+ return _this;
+ }
+ AvroPrimitiveType.prototype.read = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = this._primitive;
+ switch (_a) {
+ case AvroPrimitive.NULL: return [3 /*break*/, 1];
+ case AvroPrimitive.BOOLEAN: return [3 /*break*/, 3];
+ case AvroPrimitive.INT: return [3 /*break*/, 5];
+ case AvroPrimitive.LONG: return [3 /*break*/, 7];
+ case AvroPrimitive.FLOAT: return [3 /*break*/, 9];
+ case AvroPrimitive.DOUBLE: return [3 /*break*/, 11];
+ case AvroPrimitive.BYTES: return [3 /*break*/, 13];
+ case AvroPrimitive.STRING: return [3 /*break*/, 15];
+ }
+ return [3 /*break*/, 17];
+ case 1: return [4 /*yield*/, AvroParser.readNull()];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3: return [4 /*yield*/, AvroParser.readBoolean(stream, options)];
+ case 4: return [2 /*return*/, _b.sent()];
+ case 5: return [4 /*yield*/, AvroParser.readInt(stream, options)];
+ case 6: return [2 /*return*/, _b.sent()];
+ case 7: return [4 /*yield*/, AvroParser.readLong(stream, options)];
+ case 8: return [2 /*return*/, _b.sent()];
+ case 9: return [4 /*yield*/, AvroParser.readFloat(stream, options)];
+ case 10: return [2 /*return*/, _b.sent()];
+ case 11: return [4 /*yield*/, AvroParser.readDouble(stream, options)];
+ case 12: return [2 /*return*/, _b.sent()];
+ case 13: return [4 /*yield*/, AvroParser.readBytes(stream, options)];
+ case 14: return [2 /*return*/, _b.sent()];
+ case 15: return [4 /*yield*/, AvroParser.readString(stream, options)];
+ case 16: return [2 /*return*/, _b.sent()];
+ case 17: throw new Error("Unknown Avro Primitive");
+ }
+ });
+ });
+ };
+ return AvroPrimitiveType;
+}(AvroType));
+var AvroEnumType = /** @class */ (function (_super) {
+ tslib.__extends(AvroEnumType, _super);
+ function AvroEnumType(symbols) {
+ var _this = _super.call(this) || this;
+ _this._symbols = symbols;
+ return _this;
+ }
+ AvroEnumType.prototype.read = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var value;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readInt(stream, options)];
+ case 1:
+ value = _a.sent();
+ return [2 /*return*/, this._symbols[value]];
+ }
+ });
+ });
+ };
+ return AvroEnumType;
+}(AvroType));
+var AvroUnionType = /** @class */ (function (_super) {
+ tslib.__extends(AvroUnionType, _super);
+ function AvroUnionType(types) {
+ var _this = _super.call(this) || this;
+ _this._types = types;
+ return _this;
+ }
+ AvroUnionType.prototype.read = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var typeIndex;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, AvroParser.readInt(stream, options)];
+ case 1:
+ typeIndex = _a.sent();
+ return [4 /*yield*/, this._types[typeIndex].read(stream, options)];
+ case 2: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+ };
+ return AvroUnionType;
+}(AvroType));
+var AvroMapType = /** @class */ (function (_super) {
+ tslib.__extends(AvroMapType, _super);
+ function AvroMapType(itemType) {
+ var _this = _super.call(this) || this;
+ _this._itemType = itemType;
+ return _this;
+ }
+ AvroMapType.prototype.read = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var readItemMethod;
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ readItemMethod = function (s, options) { return tslib.__awaiter(_this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, this._itemType.read(s, options)];
+ case 1: return [2 /*return*/, _a.sent()];
+ }
+ });
+ }); };
+ return [4 /*yield*/, AvroParser.readMap(stream, readItemMethod, options)];
+ case 1: return [2 /*return*/, _a.sent()];
+ }
+ });
+ });
+ };
+ return AvroMapType;
+}(AvroType));
+var AvroRecordType = /** @class */ (function (_super) {
+ tslib.__extends(AvroRecordType, _super);
+ function AvroRecordType(fields, name) {
+ var _this = _super.call(this) || this;
+ _this._fields = fields;
+ _this._name = name;
+ return _this;
+ }
+ AvroRecordType.prototype.read = function (stream, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var record, _a, _b, _i, key, _c, _d;
+ return tslib.__generator(this, function (_e) {
+ switch (_e.label) {
+ case 0:
+ record = {};
+ record["$schema"] = this._name;
+ _a = [];
+ for (_b in this._fields)
+ _a.push(_b);
+ _i = 0;
+ _e.label = 1;
+ case 1:
+ if (!(_i < _a.length)) return [3 /*break*/, 4];
+ key = _a[_i];
+ if (!this._fields.hasOwnProperty(key)) return [3 /*break*/, 3];
+ _c = record;
+ _d = key;
+ return [4 /*yield*/, this._fields[key].read(stream, options)];
+ case 2:
+ _c[_d] = _e.sent();
+ _e.label = 3;
+ case 3:
+ _i++;
+ return [3 /*break*/, 1];
+ case 4: return [2 /*return*/, record];
+ }
+ });
+ });
+ };
+ return AvroRecordType;
+}(AvroType));
+
+// Copyright (c) Microsoft Corporation.
+var AvroReader = /** @class */ (function () {
+ function AvroReader(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;
+ }
+ Object.defineProperty(AvroReader.prototype, "blockOffset", {
+ get: function () {
+ return this._blockOffset;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(AvroReader.prototype, "objectIndex", {
+ get: function () {
+ return this._objectIndex;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ AvroReader.prototype.initialize = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var header, _a, codec, _b, schema, _c, i;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0: return [4 /*yield*/, AvroParser.readFixedBytes(this._headerStream, AVRO_INIT_BYTES.length, {
+ abortSignal: options.abortSignal
+ })];
+ case 1:
+ header = _d.sent();
+ 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"}
+ _a = this;
+ return [4 /*yield*/, AvroParser.readMap(this._headerStream, AvroParser.readString, {
+ abortSignal: options.abortSignal
+ })];
+ case 2:
+ // File metadata is written as if defined by the following map schema:
+ // { "type": "map", "values": "bytes"}
+ _a._metadata = _d.sent();
+ 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.
+ _b = this;
+ return [4 /*yield*/, AvroParser.readFixedBytes(this._headerStream, AVRO_SYNC_MARKER_SIZE, {
+ abortSignal: options.abortSignal
+ })];
+ case 3:
+ // The 16-byte, randomly-generated sync marker for this file.
+ _b._syncMarker = _d.sent();
+ schema = JSON.parse(this._metadata[AVRO_SCHEMA_KEY]);
+ this._itemType = AvroType.fromSchema(schema);
+ if (this._blockOffset == 0) {
+ this._blockOffset = this._initialBlockOffset + this._dataStream.position;
+ }
+ _c = this;
+ return [4 /*yield*/, AvroParser.readLong(this._dataStream, {
+ abortSignal: options.abortSignal
+ })];
+ case 4:
+ _c._itemsRemainingInBlock = _d.sent();
+ // skip block length
+ return [4 /*yield*/, AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal })];
+ case 5:
+ // skip block length
+ _d.sent();
+ this._initialized = true;
+ if (!(this._objectIndex && this._objectIndex > 0)) return [3 /*break*/, 9];
+ i = 0;
+ _d.label = 6;
+ case 6:
+ if (!(i < this._objectIndex)) return [3 /*break*/, 9];
+ return [4 /*yield*/, this._itemType.read(this._dataStream, { abortSignal: options.abortSignal })];
+ case 7:
+ _d.sent();
+ this._itemsRemainingInBlock--;
+ _d.label = 8;
+ case 8:
+ i++;
+ return [3 /*break*/, 6];
+ case 9: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ AvroReader.prototype.hasNext = function () {
+ return !this._initialized || this._itemsRemainingInBlock > 0;
+ };
+ AvroReader.prototype.parseObjects = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function parseObjects_1() {
+ var result, marker, _a, err_1;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!!this._initialized) return [3 /*break*/, 2];
+ return [4 /*yield*/, tslib.__await(this.initialize(options))];
+ case 1:
+ _b.sent();
+ _b.label = 2;
+ case 2:
+ if (!this.hasNext()) return [3 /*break*/, 13];
+ return [4 /*yield*/, tslib.__await(this._itemType.read(this._dataStream, {
+ abortSignal: options.abortSignal
+ }))];
+ case 3:
+ result = _b.sent();
+ this._itemsRemainingInBlock--;
+ this._objectIndex++;
+ if (!(this._itemsRemainingInBlock == 0)) return [3 /*break*/, 10];
+ return [4 /*yield*/, tslib.__await(AvroParser.readFixedBytes(this._dataStream, AVRO_SYNC_MARKER_SIZE, {
+ abortSignal: options.abortSignal
+ }))];
+ case 4:
+ marker = _b.sent();
+ 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.");
+ }
+ _b.label = 5;
+ case 5:
+ _b.trys.push([5, 7, , 8]);
+ _a = this;
+ return [4 /*yield*/, tslib.__await(AvroParser.readLong(this._dataStream, {
+ abortSignal: options.abortSignal
+ }))];
+ case 6:
+ _a._itemsRemainingInBlock = _b.sent();
+ return [3 /*break*/, 8];
+ case 7:
+ err_1 = _b.sent();
+ // We hit the end of the stream.
+ this._itemsRemainingInBlock = 0;
+ return [3 /*break*/, 8];
+ case 8:
+ if (!(this._itemsRemainingInBlock > 0)) return [3 /*break*/, 10];
+ // Ignore block size
+ return [4 /*yield*/, tslib.__await(AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal }))];
+ case 9:
+ // Ignore block size
+ _b.sent();
+ _b.label = 10;
+ case 10: return [4 /*yield*/, tslib.__await(result)];
+ case 11: return [4 /*yield*/, _b.sent()];
+ case 12:
+ _b.sent();
+ return [3 /*break*/, 2];
+ case 13: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return AvroReader;
+}());
+
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+var AvroReadable = /** @class */ (function () {
+ function AvroReadable() {
+ }
+ return AvroReadable;
+}());
+
+// Copyright (c) Microsoft Corporation.
+var ABORT_ERROR$1 = new abortController.AbortError("Reading from the avro stream was aborted.");
+var AvroReadableFromStream = /** @class */ (function (_super) {
+ tslib.__extends(AvroReadableFromStream, _super);
+ function AvroReadableFromStream(readable) {
+ var _this = _super.call(this) || this;
+ _this._readable = readable;
+ _this._position = 0;
+ return _this;
+ }
+ AvroReadableFromStream.prototype.toUint8Array = function (data) {
+ if (typeof data === "string") {
+ return Buffer.from(data);
+ }
+ return data;
+ };
+ Object.defineProperty(AvroReadableFromStream.prototype, "position", {
+ get: function () {
+ return this._position;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ AvroReadableFromStream.prototype.read = function (size, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var chunk;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ if ((_a = options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
+ throw ABORT_ERROR$1;
+ }
+ if (size < 0) {
+ throw new Error("size parameter should be positive: " + size);
+ }
+ if (size === 0) {
+ return [2 /*return*/, new Uint8Array()];
+ }
+ if (!this._readable.readable) {
+ throw new Error("Stream no longer readable.");
+ }
+ chunk = this._readable.read(size);
+ if (chunk) {
+ this._position += chunk.length;
+ // chunk.length maybe less than desired size if the stream ends.
+ return [2 /*return*/, this.toUint8Array(chunk)];
+ }
+ else {
+ // register callback to wait for enough data to read
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ var cleanUp = function () {
+ _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);
+ }
+ };
+ var readableCallback = function () {
+ var 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));
+ }
+ };
+ var rejectCallback = function () {
+ cleanUp();
+ reject();
+ };
+ var abortHandler = function () {
+ cleanUp();
+ reject(ABORT_ERROR$1);
+ };
+ _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);
+ }
+ })];
+ }
+ });
+ });
+ };
+ return AvroReadableFromStream;
+}(AvroReadable));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * A Node.js BlobQuickQueryStream will internally parse avro data stream for blob query.
+ *
+ * @class BlobQuickQueryStream
+ * @extends {Readable}
+ */
+var BlobQuickQueryStream = /** @class */ (function (_super) {
+ tslib.__extends(BlobQuickQueryStream, _super);
+ /**
+ * Creates an instance of BlobQuickQueryStream.
+ *
+ * @param {NodeJS.ReadableStream} source The current ReadableStream returned from getter
+ * @param {BlobQuickQueryStreamOptions} [options={}]
+ * @memberof BlobQuickQueryStream
+ */
+ function BlobQuickQueryStream(source, options) {
+ if (options === void 0) { options = {}; }
+ var _this = _super.call(this) || this;
+ _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 });
+ return _this;
+ }
+ BlobQuickQueryStream.prototype._read = function () {
+ var _this = this;
+ this.readInternal().catch(function (err) {
+ _this.emit("error", err);
+ });
+ };
+ BlobQuickQueryStream.prototype.readInternal = function () {
+ var e_1, _a;
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, _c, obj, schema, exit, data, bytesScanned, totalBytes, fatal, name_1, description, position, e_1_1;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _d.trys.push([0, 5, 6, 11]);
+ _b = tslib.__asyncValues(this.avroIter);
+ _d.label = 1;
+ case 1: return [4 /*yield*/, _b.next()];
+ case 2:
+ if (!(_c = _d.sent(), !_c.done)) return [3 /*break*/, 4];
+ obj = _c.value;
+ schema = obj.$schema;
+ if (typeof schema !== "string") {
+ throw Error("Missing schema in avro record.");
+ }
+ exit = false;
+ switch (schema) {
+ case "com.microsoft.azure.storage.queryBlobContents.resultData":
+ data = obj.data;
+ if (data instanceof Uint8Array === false) {
+ throw Error("Invalid data in avro result record.");
+ }
+ if (!this.push(Buffer.from(data))) {
+ exit = true;
+ }
+ break;
+ case "com.microsoft.azure.storage.queryBlobContents.progress":
+ 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) {
+ 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) {
+ fatal = obj.fatal;
+ if (typeof fatal !== "boolean") {
+ throw Error("Invalid fatal in avro error record.");
+ }
+ name_1 = obj.name;
+ if (typeof name_1 !== "string") {
+ throw Error("Invalid name in avro error record.");
+ }
+ description = obj.description;
+ if (typeof description !== "string") {
+ throw Error("Invalid description in avro error record.");
+ }
+ position = obj.position;
+ if (typeof position !== "number") {
+ throw Error("Invalid position in avro error record.");
+ }
+ this.onError({
+ position: position,
+ name: name_1,
+ isFatal: fatal,
+ description: description
+ });
+ }
+ break;
+ default:
+ throw Error("Unknown schema " + schema + " in avro progress record.");
+ }
+ if (exit) {
+ return [3 /*break*/, 4];
+ }
+ _d.label = 3;
+ case 3: return [3 /*break*/, 1];
+ case 4: return [3 /*break*/, 11];
+ case 5:
+ e_1_1 = _d.sent();
+ e_1 = { error: e_1_1 };
+ return [3 /*break*/, 11];
+ case 6:
+ _d.trys.push([6, , 9, 10]);
+ if (!(_c && !_c.done && (_a = _b.return))) return [3 /*break*/, 8];
+ return [4 /*yield*/, _a.call(_b)];
+ case 7:
+ _d.sent();
+ _d.label = 8;
+ case 8: return [3 /*break*/, 10];
+ case 9:
+ if (e_1) throw e_1.error;
+ return [7 /*endfinally*/];
+ case 10: return [7 /*endfinally*/];
+ case 11: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlobQuickQueryStream;
+}(stream.Readable));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * BlobQueryResponse implements BlobDownloadResponseModel interface, and in Node.js runtime it will
+ * parse avor data returned by blob query.
+ *
+ * @export
+ * @class BlobQueryResponse
+ * @implements {BlobDownloadResponseModel}
+ */
+var BlobQueryResponse = /** @class */ (function () {
+ /**
+ * Creates an instance of BlobQueryResponse.
+ *
+ * @param {BlobQueryResponseModel} originalResponse
+ * @param {BlobQuickQueryStreamOptions} [options={}]
+ * @memberof BlobQueryResponse
+ */
+ function BlobQueryResponse(originalResponse, options) {
+ if (options === void 0) { options = {}; }
+ this.originalResponse = originalResponse;
+ this.blobDownloadStream = new BlobQuickQueryStream(this.originalResponse.readableStreamBody, options);
+ }
+ Object.defineProperty(BlobQueryResponse.prototype, "acceptRanges", {
+ /**
+ * Indicates that the service supports
+ * requests for partial file content.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.acceptRanges;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "cacheControl", {
+ /**
+ * Returns if it was previously specified
+ * for the file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.cacheControl;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentDisposition", {
+ /**
+ * Returns the value that was specified
+ * for the 'x-ms-content-disposition' header and specifies how to process the
+ * response.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentDisposition;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentEncoding", {
+ /**
+ * Returns the value that was specified
+ * for the Content-Encoding request header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentEncoding;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentLanguage", {
+ /**
+ * Returns the value that was specified
+ * for the Content-Language request header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentLanguage;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "blobSequenceNumber", {
+ /**
+ * The current sequence number for a
+ * page blob. This header is not returned for block blobs or append blobs.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.blobSequenceNumber;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "blobType", {
+ /**
+ * The blob's type. Possible values include:
+ * 'BlockBlob', 'PageBlob', 'AppendBlob'.
+ *
+ * @readonly
+ * @type {(BlobType | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.blobType;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentLength", {
+ /**
+ * The number of bytes present in the
+ * response body.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentLength;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentMD5", {
+ /**
+ * If the file has an MD5 hash and the
+ * request is to read the full file, this response header is returned so that
+ * the client can check for message content integrity. If the request is to
+ * read a specified range and the 'x-ms-range-get-content-md5' is set to
+ * true, then the request returns an MD5 hash for the range, as long as the
+ * range size is less than or equal to 4 MB. If neither of these sets of
+ * conditions is true, then no value is returned for the 'Content-MD5'
+ * header.
+ *
+ * @readonly
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentMD5;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentRange", {
+ /**
+ * Indicates the range of bytes returned if
+ * the client requested a subset of the file by setting the Range request
+ * header.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentRange;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentType", {
+ /**
+ * The content type specified for the file.
+ * The default content type is 'application/octet-stream'
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentType;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copyCompletedOn", {
+ /**
+ * Conclusion time of the last attempted
+ * Copy File operation where this file was the destination file. This value
+ * can specify the time of a completed, aborted, or failed copy attempt.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return undefined;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copyId", {
+ /**
+ * String identifier for the last attempted Copy
+ * File operation where this file was the destination file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.copyId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copyProgress", {
+ /**
+ * Contains the number of bytes copied and
+ * the total bytes in the source in the last attempted Copy File operation
+ * where this file was the destination file. Can show between 0 and
+ * Content-Length bytes copied.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.copyProgress;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copySource", {
+ /**
+ * URL up to 2KB in length that specifies the
+ * source file used in the last attempted Copy File operation where this file
+ * was the destination file.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.copySource;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copyStatus", {
+ /**
+ * State of the copy operation
+ * identified by 'x-ms-copy-id'. Possible values include: 'pending',
+ * 'success', 'aborted', 'failed'
+ *
+ * @readonly
+ * @type {(CopyStatusType | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.copyStatus;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "copyStatusDescription", {
+ /**
+ * Only appears when
+ * x-ms-copy-status is failed or pending. Describes cause of fatal or
+ * non-fatal copy operation failure.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.copyStatusDescription;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "leaseDuration", {
+ /**
+ * When a blob is leased,
+ * specifies whether the lease is of infinite or fixed duration. Possible
+ * values include: 'infinite', 'fixed'.
+ *
+ * @readonly
+ * @type {(LeaseDurationType | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseDuration;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "leaseState", {
+ /**
+ * Lease state of the blob. Possible
+ * values include: 'available', 'leased', 'expired', 'breaking', 'broken'.
+ *
+ * @readonly
+ * @type {(LeaseStateType | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseState;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "leaseStatus", {
+ /**
+ * The current lease status of the
+ * blob. Possible values include: 'locked', 'unlocked'.
+ *
+ * @readonly
+ * @type {(LeaseStatusType | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.leaseStatus;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "date", {
+ /**
+ * A UTC date/time value generated by the service that
+ * indicates the time at which the response was initiated.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.date;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "blobCommittedBlockCount", {
+ /**
+ * The number of committed blocks
+ * present in the blob. This header is returned only for append blobs.
+ *
+ * @readonly
+ * @type {(number | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.blobCommittedBlockCount;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "etag", {
+ /**
+ * The ETag contains a value that you can use to
+ * perform operations conditionally, in quotes.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.etag;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "errorCode", {
+ /**
+ * The error code.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.errorCode;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "isServerEncrypted", {
+ /**
+ * The value of this header is set to
+ * true if the file data and application metadata are completely encrypted
+ * using the specified algorithm. Otherwise, the value is set to false (when
+ * the file is unencrypted, or if only parts of the file/application metadata
+ * are encrypted).
+ *
+ * @readonly
+ * @type {(boolean | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.isServerEncrypted;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "blobContentMD5", {
+ /**
+ * If the blob has a MD5 hash, and if
+ * request contains range header (Range or x-ms-range), this response header
+ * is returned with the value of the whole blob's MD5 value. This value may
+ * or may not be equal to the value returned in Content-MD5 header, with the
+ * latter calculated from the requested range.
+ *
+ * @readonly
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.blobContentMD5;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "lastModified", {
+ /**
+ * Returns the date and time the file was last
+ * modified. Any operation that modifies the file or its properties updates
+ * the last modified time.
+ *
+ * @readonly
+ * @type {(Date | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.lastModified;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "metadata", {
+ /**
+ * A name-value pair
+ * to associate with a file storage object.
+ *
+ * @readonly
+ * @type {(Metadata | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.metadata;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "requestId", {
+ /**
+ * This header uniquely identifies the request
+ * that was made and can be used for troubleshooting the request.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.requestId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "clientRequestId", {
+ /**
+ * If a client request id header is sent in the request, this header will be present in the
+ * response with the same value.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.clientRequestId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "version", {
+ /**
+ * Indicates the version of the File service used
+ * to execute the request.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.version;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "encryptionKeySha256", {
+ /**
+ * The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned
+ * when the blob was encrypted with a customer-provided key.
+ *
+ * @readonly
+ * @type {(string | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.encryptionKeySha256;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "contentCrc64", {
+ /**
+ * If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to
+ * true, then the request returns a crc64 for the range, as long as the range size is less than
+ * or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is
+ * specified in the same request, it will fail with 400(Bad Request)
+ *
+ * @type {(Uint8Array | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse.contentCrc64;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "blobBody", {
+ /**
+ * The response body as a browser Blob.
+ * Always undefined in node.js.
+ *
+ * @readonly
+ * @type {(Promise | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return undefined;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "readableStreamBody", {
+ /**
+ * The response body as a node.js Readable stream.
+ * Always undefined in the browser.
+ *
+ * It will parse avor data returned by blob query.
+ *
+ * @readonly
+ * @type {(NodeJS.ReadableStream | undefined)}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return coreHttp.isNode ? this.blobDownloadStream : undefined;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobQueryResponse.prototype, "_response", {
+ /**
+ * The HTTP response.
+ *
+ * @type {HttpResponse}
+ * @memberof BlobQueryResponse
+ */
+ get: function () {
+ return this.originalResponse._response;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return BlobQueryResponse;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key.
+ *
+ * @export
+ * @class StorageSharedKeyCredentialPolicy
+ * @extends {CredentialPolicy}
+ */
+var StorageSharedKeyCredentialPolicy = /** @class */ (function (_super) {
+ tslib.__extends(StorageSharedKeyCredentialPolicy, _super);
+ /**
+ * Creates an instance of StorageSharedKeyCredentialPolicy.
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @param {StorageSharedKeyCredential} factory
+ * @memberof StorageSharedKeyCredentialPolicy
+ */
+ function StorageSharedKeyCredentialPolicy(nextPolicy, options, factory) {
+ var _this = _super.call(this, nextPolicy, options) || this;
+ _this.factory = factory;
+ return _this;
+ }
+ /**
+ * Signs request.
+ *
+ * @protected
+ * @param {WebResource} request
+ * @returns {WebResource}
+ * @memberof StorageSharedKeyCredentialPolicy
+ */
+ StorageSharedKeyCredentialPolicy.prototype.signRequest = function (request) {
+ request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString());
+ if (request.body && typeof request.body === "string" && request.body.length > 0) {
+ request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body));
+ }
+ var stringToSign = [
+ request.method.toUpperCase(),
+ this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE),
+ this.getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING),
+ this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH),
+ this.getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5),
+ this.getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE),
+ this.getHeaderValueToSign(request, HeaderConstants.DATE),
+ this.getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE),
+ this.getHeaderValueToSign(request, HeaderConstants.IF_MATCH),
+ this.getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH),
+ this.getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE),
+ this.getHeaderValueToSign(request, HeaderConstants.RANGE)
+ ].join("\n") +
+ "\n" +
+ this.getCanonicalizedHeadersString(request) +
+ this.getCanonicalizedResourceString(request);
+ var signature = this.factory.computeHMACSHA256(stringToSign);
+ request.headers.set(HeaderConstants.AUTHORIZATION, "SharedKey " + this.factory.accountName + ":" + signature);
+ // console.log(`[URL]:${request.url}`);
+ // console.log(`[HEADERS]:${request.headers.toString()}`);
+ // console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`);
+ // console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`);
+ return request;
+ };
+ /**
+ * Retrieve header value according to shared key sign rules.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
+ *
+ * @private
+ * @param {WebResource} request
+ * @param {string} headerName
+ * @returns {string}
+ * @memberof StorageSharedKeyCredentialPolicy
+ */
+ StorageSharedKeyCredentialPolicy.prototype.getHeaderValueToSign = function (request, headerName) {
+ var value = request.headers.get(headerName);
+ if (!value) {
+ return "";
+ }
+ // When using version 2015-02-21 or later, if Content-Length is zero, then
+ // set the Content-Length part of the StringToSign to an empty string.
+ // https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key
+ if (headerName === HeaderConstants.CONTENT_LENGTH && value === "0") {
+ return "";
+ }
+ return value;
+ };
+ /**
+ * To construct the CanonicalizedHeaders portion of the signature string, follow these steps:
+ * 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header.
+ * 2. Convert each HTTP header name to lowercase.
+ * 3. Sort the headers lexicographically by header name, in ascending order.
+ * Each header may appear only once in the string.
+ * 4. Replace any linear whitespace in the header value with a single space.
+ * 5. Trim any whitespace around the colon in the header.
+ * 6. Finally, append a new-line character to each canonicalized header in the resulting list.
+ * Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string.
+ *
+ * @private
+ * @param {WebResource} request
+ * @returns {string}
+ * @memberof StorageSharedKeyCredentialPolicy
+ */
+ StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedHeadersString = function (request) {
+ var headersArray = request.headers.headersArray().filter(function (value) {
+ return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE);
+ });
+ headersArray.sort(function (a, b) {
+ return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
+ });
+ // Remove duplicate headers
+ headersArray = headersArray.filter(function (value, index, array) {
+ if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) {
+ return false;
+ }
+ return true;
+ });
+ var canonicalizedHeadersStringToSign = "";
+ headersArray.forEach(function (header) {
+ canonicalizedHeadersStringToSign += header.name
+ .toLowerCase()
+ .trimRight() + ":" + header.value.trimLeft() + "\n";
+ });
+ return canonicalizedHeadersStringToSign;
+ };
+ /**
+ * Retrieves the webResource canonicalized resource string.
+ *
+ * @private
+ * @param {WebResource} request
+ * @returns {string}
+ * @memberof StorageSharedKeyCredentialPolicy
+ */
+ StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedResourceString = function (request) {
+ var path = getURLPath(request.url) || "/";
+ var canonicalizedResourceString = "";
+ canonicalizedResourceString += "/" + this.factory.accountName + path;
+ var queries = getURLQueries(request.url);
+ var lowercaseQueries = {};
+ if (queries) {
+ var queryKeys = [];
+ for (var key in queries) {
+ if (queries.hasOwnProperty(key)) {
+ var lowercaseKey = key.toLowerCase();
+ lowercaseQueries[lowercaseKey] = queries[key];
+ queryKeys.push(lowercaseKey);
+ }
+ }
+ queryKeys.sort();
+ for (var _i = 0, queryKeys_1 = queryKeys; _i < queryKeys_1.length; _i++) {
+ var key = queryKeys_1[_i];
+ canonicalizedResourceString += "\n" + key + ":" + decodeURIComponent(lowercaseQueries[key]);
+ }
+ }
+ return canonicalizedResourceString;
+ };
+ return StorageSharedKeyCredentialPolicy;
+}(CredentialPolicy));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * StorageSharedKeyCredential for account key authorization of Azure Storage service.
+ *
+ * @export
+ * @class StorageSharedKeyCredential
+ * @extends {Credential}
+ */
+var StorageSharedKeyCredential = /** @class */ (function (_super) {
+ tslib.__extends(StorageSharedKeyCredential, _super);
+ /**
+ * Creates an instance of StorageSharedKeyCredential.
+ * @param {string} accountName
+ * @param {string} accountKey
+ * @memberof StorageSharedKeyCredential
+ */
+ function StorageSharedKeyCredential(accountName, accountKey) {
+ var _this = _super.call(this) || this;
+ _this.accountName = accountName;
+ _this.accountKey = Buffer.from(accountKey, "base64");
+ return _this;
+ }
+ /**
+ * Creates a StorageSharedKeyCredentialPolicy object.
+ *
+ * @param {RequestPolicy} nextPolicy
+ * @param {RequestPolicyOptions} options
+ * @returns {StorageSharedKeyCredentialPolicy}
+ * @memberof StorageSharedKeyCredential
+ */
+ StorageSharedKeyCredential.prototype.create = function (nextPolicy, options) {
+ return new StorageSharedKeyCredentialPolicy(nextPolicy, options, this);
+ };
+ /**
+ * Generates a hash signature for an HTTP request or for a SAS.
+ *
+ * @param {string} stringToSign
+ * @returns {string}
+ * @memberof StorageSharedKeyCredential
+ */
+ StorageSharedKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) {
+ return crypto.createHmac("sha256", this.accountKey)
+ .update(stringToSign, "utf8")
+ .digest("base64");
+ };
+ return StorageSharedKeyCredential;
+}(Credential));
+
+/*
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for
+ * license information.
+ *
+ * Code generated by Microsoft (R) AutoRest Code Generator.
+ * Changes may cause incorrect behavior and will be lost if the code is
+ * regenerated.
+ */
+var packageName = "azure-storage-blob";
+var packageVersion = "12.2.0";
+var StorageClientContext = /** @class */ (function (_super) {
+ tslib.__extends(StorageClientContext, _super);
+ /**
+ * Initializes a new instance of the StorageClientContext class.
+ * @param url The URL of the service account, container, or blob that is the targe of the desired
+ * operation.
+ * @param [options] The parameter options
+ */
+ function StorageClientContext(url, options) {
+ var _this = this;
+ if (url == undefined) {
+ throw new Error("'url' cannot be null.");
+ }
+ if (!options) {
+ options = {};
+ }
+ if (!options.userAgent) {
+ var defaultUserAgent = coreHttp.getDefaultUserAgentValue();
+ options.userAgent = packageName + "/" + packageVersion + " " + defaultUserAgent;
+ }
+ _this = _super.call(this, undefined, options) || this;
+ _this.version = '2019-12-12';
+ _this.baseUri = "{url}";
+ _this.requestContentType = "application/json; charset=utf-8";
+ _this.url = url;
+ return _this;
+ }
+ return StorageClientContext;
+}(coreHttp.ServiceClient));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+(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;
+ }
+}
+
+/**
+ * Function that converts PageRange and ClearRange to a common Range object.
+ * PageRange and ClearRange have start and end while Range offset and count
+ * this function normalizes to Range.
+ * @param response Model PageBlob Range response
+ */
+function rangeResponseFromModel(response) {
+ var pageRange = (response._response.parsedBody.pageRange || []).map(function (x) { return ({
+ offset: x.start,
+ count: x.end - x.start
+ }); });
+ var clearRange = (response._response.parsedBody.clearRange || []).map(function (x) { return ({
+ offset: x.start,
+ count: x.end - x.start
+ }); });
+ return tslib.__assign(tslib.__assign({}, response), { pageRange: pageRange,
+ clearRange: clearRange, _response: tslib.__assign(tslib.__assign({}, response._response), { parsedBody: {
+ pageRange: pageRange,
+ clearRange: clearRange
+ } }) });
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * This is the poller returned by {@link BlobClient.beginCopyFromURL}.
+ * This can not be instantiated directly outside of this package.
+ *
+ * @ignore
+ */
+var BlobBeginCopyFromUrlPoller = /** @class */ (function (_super) {
+ tslib.__extends(BlobBeginCopyFromUrlPoller, _super);
+ function BlobBeginCopyFromUrlPoller(options) {
+ var _this = this;
+ var blobClient = options.blobClient, copySource = options.copySource, _a = options.intervalInMs, intervalInMs = _a === void 0 ? 15000 : _a, onProgress = options.onProgress, resumeFrom = options.resumeFrom, startCopyFromURLOptions = options.startCopyFromURLOptions;
+ var state;
+ if (resumeFrom) {
+ state = JSON.parse(resumeFrom).state;
+ }
+ var operation = makeBlobBeginCopyFromURLPollOperation(tslib.__assign(tslib.__assign({}, state), { blobClient: blobClient,
+ copySource: copySource,
+ startCopyFromURLOptions: startCopyFromURLOptions }));
+ _this = _super.call(this, operation) || this;
+ if (typeof onProgress === "function") {
+ _this.onProgress(onProgress);
+ }
+ _this.intervalInMs = intervalInMs;
+ return _this;
+ }
+ BlobBeginCopyFromUrlPoller.prototype.delay = function () {
+ return coreHttp.delay(this.intervalInMs);
+ };
+ return BlobBeginCopyFromUrlPoller;
+}(coreLro.Poller));
+/**
+ * Note: Intentionally using function expression over arrow function expression
+ * so that the function can be invoked with a different context.
+ * This affects what `this` refers to.
+ * @ignore
+ */
+var cancel = function cancel(options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var state, copyId;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ state = this.state;
+ copyId = state.copyId;
+ if (state.isCompleted) {
+ return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
+ }
+ if (!copyId) {
+ state.isCancelled = true;
+ return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
+ }
+ // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
+ return [4 /*yield*/, state.blobClient.abortCopyFromURL(copyId, {
+ abortSignal: options.abortSignal
+ })];
+ case 1:
+ // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call
+ _a.sent();
+ state.isCancelled = true;
+ return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
+ }
+ });
+ });
+};
+/**
+ * Note: Intentionally using function expression over arrow function expression
+ * so that the function can be invoked with a different context.
+ * This affects what `this` refers to.
+ * @ignore
+ */
+var update = function update(options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var state, blobClient, copySource, startCopyFromURLOptions, result, result, copyStatus, copyProgress, prevCopyProgress, err_1;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ state = this.state;
+ blobClient = state.blobClient, copySource = state.copySource, startCopyFromURLOptions = state.startCopyFromURLOptions;
+ if (!!state.isStarted) return [3 /*break*/, 2];
+ state.isStarted = true;
+ return [4 /*yield*/, blobClient.startCopyFromURL(copySource, startCopyFromURLOptions)];
+ case 1:
+ result = _a.sent();
+ // copyId is needed to abort
+ state.copyId = result.copyId;
+ if (result.copyStatus === "success") {
+ state.result = result;
+ state.isCompleted = true;
+ }
+ return [3 /*break*/, 6];
+ case 2:
+ if (!!state.isCompleted) return [3 /*break*/, 6];
+ _a.label = 3;
+ case 3:
+ _a.trys.push([3, 5, , 6]);
+ return [4 /*yield*/, state.blobClient.getProperties({ abortSignal: options.abortSignal })];
+ case 4:
+ result = _a.sent();
+ copyStatus = result.copyStatus, copyProgress = result.copyProgress;
+ prevCopyProgress = state.copyProgress;
+ if (copyProgress) {
+ state.copyProgress = copyProgress;
+ }
+ if (copyStatus === "pending" &&
+ copyProgress !== prevCopyProgress &&
+ typeof options.fireProgress === "function") {
+ // trigger in setTimeout, or swallow error?
+ options.fireProgress(state);
+ }
+ else if (copyStatus === "success") {
+ state.result = result;
+ state.isCompleted = true;
+ }
+ else if (copyStatus === "failed") {
+ state.error = new Error("Blob copy failed with reason: \"" + (result.copyStatusDescription || "unknown") + "\"");
+ state.isCompleted = true;
+ }
+ return [3 /*break*/, 6];
+ case 5:
+ err_1 = _a.sent();
+ state.error = err_1;
+ state.isCompleted = true;
+ return [3 /*break*/, 6];
+ case 6: return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)];
+ }
+ });
+ });
+};
+/**
+ * Note: Intentionally using function expression over arrow function expression
+ * so that the function can be invoked with a different context.
+ * This affects what `this` refers to.
+ * @ignore
+ */
+var toString = function toString() {
+ return JSON.stringify({ state: this.state }, function (key, value) {
+ // remove blobClient from serialized state since a client can't be hydrated from this info.
+ if (key === "blobClient") {
+ return undefined;
+ }
+ return value;
+ });
+};
+/**
+ * Creates a poll operation given the provided state.
+ * @ignore
+ */
+function makeBlobBeginCopyFromURLPollOperation(state) {
+ return {
+ state: tslib.__assign({}, state),
+ cancel: cancel,
+ toString: toString,
+ update: update
+ };
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * Generate a range string. For example:
+ *
+ * "bytes=255-" or "bytes=0-511"
+ *
+ * @export
+ * @param {Range} iRange
+ * @returns {string}
+ */
+function rangeToString(iRange) {
+ if (iRange.offset < 0) {
+ throw new RangeError("Range.offset cannot be smaller than 0.");
+ }
+ if (iRange.count && iRange.count <= 0) {
+ throw new RangeError("Range.count must be larger than 0. Leave it undefined if you want a range from offset to the end.");
+ }
+ return iRange.count
+ ? "bytes=" + iRange.offset + "-" + (iRange.offset + iRange.count - 1)
+ : "bytes=" + iRange.offset + "-";
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient}
+ * and etc.
+ *
+ * @export
+ * @class StorageClient
+ */
+var StorageClient = /** @class */ (function () {
+ /**
+ * Creates an instance of StorageClient.
+ * @param {string} url url to resource
+ * @param {Pipeline} pipeline request policy pipeline.
+ * @memberof StorageClient
+ */
+ function StorageClient(url, pipeline) {
+ // URL should be encoded and only once, protocol layer shouldn't encode URL again
+ this.url = escapeURLPath(url);
+ this.accountName = getAccountNameFromUrl(url);
+ this.pipeline = pipeline;
+ this.storageClientContext = new StorageClientContext(this.url, pipeline.toServiceClientOptions());
+ this.isHttps = iEqual(getURLScheme(this.url) || "", "https");
+ this.credential = new AnonymousCredential();
+ for (var _i = 0, _a = this.pipeline.factories; _i < _a.length; _i++) {
+ var factory = _a[_i];
+ if ((coreHttp.isNode && factory instanceof StorageSharedKeyCredential) ||
+ factory instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(factory)) {
+ this.credential = factory;
+ }
+ }
+ // Override protocol layer's default content-type
+ var storageClientContext = this.storageClientContext;
+ storageClientContext.requestContentType = undefined;
+ }
+ return StorageClient;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * States for Batch.
+ *
+ * @enum {number}
+ */
+var BatchStates;
+(function (BatchStates) {
+ BatchStates[BatchStates["Good"] = 0] = "Good";
+ BatchStates[BatchStates["Error"] = 1] = "Error";
+})(BatchStates || (BatchStates = {}));
+/**
+ * Batch provides basic parallel execution with concurrency limits.
+ * Will stop execute left operations when one of the executed operation throws an error.
+ * But Batch cannot cancel ongoing operations, you need to cancel them by yourself.
+ *
+ * @export
+ * @class Batch
+ */
+var Batch = /** @class */ (function () {
+ /**
+ * Creates an instance of Batch.
+ * @param {number} [concurrency=5]
+ * @memberof Batch
+ */
+ function Batch(concurrency) {
+ if (concurrency === void 0) { concurrency = 5; }
+ /**
+ * Number of active operations under execution.
+ *
+ * @private
+ * @type {number}
+ * @memberof Batch
+ */
+ this.actives = 0;
+ /**
+ * Number of completed operations under execution.
+ *
+ * @private
+ * @type {number}
+ * @memberof Batch
+ */
+ this.completed = 0;
+ /**
+ * Offset of next operation to be executed.
+ *
+ * @private
+ * @type {number}
+ * @memberof Batch
+ */
+ this.offset = 0;
+ /**
+ * Operation array to be executed.
+ *
+ * @private
+ * @type {Operation[]}
+ * @memberof Batch
+ */
+ this.operations = [];
+ /**
+ * States of Batch. When an error happens, state will turn into error.
+ * Batch will stop execute left operations.
+ *
+ * @private
+ * @type {BatchStates}
+ * @memberof Batch
+ */
+ this.state = BatchStates.Good;
+ if (concurrency < 1) {
+ throw new RangeError("concurrency must be larger than 0");
+ }
+ this.concurrency = concurrency;
+ this.emitter = new events.EventEmitter();
+ }
+ /**
+ * Add a operation into queue.
+ *
+ * @param {Operation} operation
+ * @memberof Batch
+ */
+ Batch.prototype.addOperation = function (operation) {
+ var _this = this;
+ this.operations.push(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var error_1;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ _a.trys.push([0, 2, , 3]);
+ this.actives++;
+ return [4 /*yield*/, operation()];
+ case 1:
+ _a.sent();
+ this.actives--;
+ this.completed++;
+ this.parallelExecute();
+ return [3 /*break*/, 3];
+ case 2:
+ error_1 = _a.sent();
+ this.emitter.emit("error", error_1);
+ return [3 /*break*/, 3];
+ case 3: return [2 /*return*/];
+ }
+ });
+ }); });
+ };
+ /**
+ * Start execute operations in the queue.
+ *
+ * @returns {Promise}
+ * @memberof Batch
+ */
+ Batch.prototype.do = function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ if (this.operations.length === 0) {
+ return [2 /*return*/, Promise.resolve()];
+ }
+ this.parallelExecute();
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ _this.emitter.on("finish", resolve);
+ _this.emitter.on("error", function (error) {
+ _this.state = BatchStates.Error;
+ reject(error);
+ });
+ })];
+ });
+ });
+ };
+ /**
+ * Get next operation to be executed. Return null when reaching ends.
+ *
+ * @private
+ * @returns {(Operation | null)}
+ * @memberof Batch
+ */
+ Batch.prototype.nextOperation = function () {
+ if (this.offset < this.operations.length) {
+ return this.operations[this.offset++];
+ }
+ return null;
+ };
+ /**
+ * Start execute operations. One one the most important difference between
+ * this method with do() is that do() wraps as an sync method.
+ *
+ * @private
+ * @returns {void}
+ * @memberof Batch
+ */
+ Batch.prototype.parallelExecute = function () {
+ if (this.state === BatchStates.Error) {
+ return;
+ }
+ if (this.completed >= this.operations.length) {
+ this.emitter.emit("finish");
+ return;
+ }
+ while (this.actives < this.concurrency) {
+ var operation = this.nextOperation();
+ if (operation) {
+ operation();
+ }
+ else {
+ return;
+ }
+ }
+ };
+ return Batch;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * This class generates a readable stream from the data in an array of buffers.
+ *
+ * @export
+ * @class BuffersStream
+ */
+var BuffersStream = /** @class */ (function (_super) {
+ tslib.__extends(BuffersStream, _super);
+ /**
+ * Creates an instance of BuffersStream that will emit the data
+ * contained in the array of buffers.
+ *
+ * @param {Buffer[]} buffers Array of buffers containing the data
+ * @param {number} byteLength The total length of data contained in the buffers
+ * @memberof BuffersStream
+ */
+ function BuffersStream(buffers, byteLength, options) {
+ var _this = _super.call(this, options) || this;
+ _this.buffers = buffers;
+ _this.byteLength = byteLength;
+ _this.byteOffset = 0;
+ _this.bufferIndex = 0;
+ _this.pushedBytesLength = 0;
+ return _this;
+ }
+ /**
+ * Internal _read() that will be called when the stream wants to pull more data in.
+ *
+ * @param {number} size Optional. The size of data to be read
+ * @memberof BuffersStream
+ */
+ BuffersStream.prototype._read = function (size) {
+ if (this.pushedBytesLength >= this.byteLength) {
+ this.push(null);
+ }
+ if (!size) {
+ size = this.readableHighWaterMark;
+ }
+ var outBuffers = [];
+ var i = 0;
+ while (i < size && this.pushedBytesLength < this.byteLength) {
+ var remaining = this.buffers[this.bufferIndex].byteLength - this.byteOffset;
+ if (remaining > size - i) {
+ var end = this.byteOffset + size - i;
+ outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffset, end));
+ this.pushedBytesLength += size - i;
+ this.byteOffset = end;
+ i = size;
+ break;
+ }
+ else {
+ outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffset));
+ this.byteOffset = 0;
+ this.bufferIndex++;
+ this.pushedBytesLength += remaining;
+ i += remaining;
+ }
+ }
+ if (outBuffers.length > 1) {
+ this.push(Buffer.concat(outBuffers));
+ }
+ else if (outBuffers.length === 1) {
+ this.push(outBuffers[0]);
+ }
+ };
+ return BuffersStream;
+}(stream.Readable));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * maxBufferLength is max size of each buffer in the pooled buffers.
+ */
+// Can't use import as Typescript doesn't recognize "buffer".
+var 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".
+ *
+ * @export
+ * @class BufferScheduler
+ */
+var PooledBuffer = /** @class */ (function () {
+ function PooledBuffer(capacity, buffers, totalLength) {
+ /**
+ * Internal buffers used to keep the data.
+ * Each buffer has a length of the maxBufferLength except last one.
+ *
+ * @private
+ * @type {Buffer[]}
+ * @memberof PooledBuffer
+ */
+ this.buffers = [];
+ this.capacity = capacity;
+ this._size = capacity;
+ // allocate
+ var bufferNum = Math.ceil(capacity / maxBufferLength);
+ for (var i = 0; i < bufferNum; i++) {
+ var len = i === bufferNum - 1 ? capacity % maxBufferLength : maxBufferLength;
+ if (len === 0) {
+ len = maxBufferLength;
+ }
+ this.buffers.push(Buffer.allocUnsafe(len));
+ }
+ if (buffers) {
+ this.fill(buffers, totalLength);
+ }
+ }
+ Object.defineProperty(PooledBuffer.prototype, "size", {
+ /**
+ * The size of the data contained in the pooled buffers.
+ */
+ get: function () {
+ return this._size;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * 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 {Buffer[]} buffers Input buffers containing the data to be filled in the pooled buffer
+ * @param {number} totalLength Total length of the data to be filled in.
+ *
+ * @returns {void}
+ * @memberof PooledBuffer
+ */
+ PooledBuffer.prototype.fill = function (buffers, totalLength) {
+ this._size = Math.min(this.capacity, totalLength);
+ var i = 0, j = 0, targetOffset = 0, sourceOffset = 0, totalCopiedNum = 0;
+ while (totalCopiedNum < this._size) {
+ var source = buffers[i];
+ var target = this.buffers[j];
+ var 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.
+ *
+ * @returns {Readable}
+ * @memberof PooledBuffer
+ */
+ PooledBuffer.prototype.getReadableStream = function () {
+ return new BuffersStream(this.buffers, this.size);
+ };
+ return PooledBuffer;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * This class accepts a Node.js Readable stream as input, and keeps reading data
+ * from the stream into the internal buffer structure, until it reaches maxBuffers.
+ * Every available buffer will try to trigger outgoingHandler.
+ *
+ * The internal buffer structure includes an incoming buffer array, and a outgoing
+ * buffer array. The incoming buffer array includes the "empty" buffers can be filled
+ * with new incoming data. The outgoing array includes the filled buffers to be
+ * handled by outgoingHandler. Every above buffer size is defined by parameter bufferSize.
+ *
+ * NUM_OF_ALL_BUFFERS = BUFFERS_IN_INCOMING + BUFFERS_IN_OUTGOING + BUFFERS_UNDER_HANDLING
+ *
+ * NUM_OF_ALL_BUFFERS <= maxBuffers
+ *
+ * PERFORMANCE IMPROVEMENT TIPS:
+ * 1. Input stream highWaterMark is better to set a same value with bufferSize
+ * parameter, which will avoid Buffer.concat() operations.
+ * 2. concurrency should set a smaller value than maxBuffers, which is helpful to
+ * reduce the possibility when a outgoing handler waits for the stream data.
+ * in this situation, outgoing handlers are blocked.
+ * Outgoing queue shouldn't be empty.
+ * @export
+ * @class BufferScheduler
+ */
+var BufferScheduler = /** @class */ (function () {
+ /**
+ * Creates an instance of BufferScheduler.
+ *
+ * @param {Readable} readable A Node.js Readable stream
+ * @param {number} bufferSize Buffer size of every maintained buffer
+ * @param {number} maxBuffers How many buffers can be allocated
+ * @param {OutgoingHandler} outgoingHandler An async function scheduled to be
+ * triggered when a buffer fully filled
+ * with stream data
+ * @param {number} concurrency Concurrency of executing outgoingHandlers (>0)
+ * @param {string} [encoding] [Optional] Encoding of Readable stream when it's a string stream
+ * @memberof BufferScheduler
+ */
+ function BufferScheduler(readable, bufferSize, maxBuffers, outgoingHandler, concurrency, encoding) {
+ /**
+ * An internal event emitter.
+ *
+ * @private
+ * @type {EventEmitter}
+ * @memberof BufferScheduler
+ */
+ this.emitter = new events.EventEmitter();
+ /**
+ * An internal offset marker to track data offset in bytes of next outgoingHandler.
+ *
+ * @private
+ * @type {number}
+ * @memberof BufferScheduler
+ */
+ this.offset = 0;
+ /**
+ * An internal marker to track whether stream is end.
+ *
+ * @private
+ * @type {boolean}
+ * @memberof BufferScheduler
+ */
+ this.isStreamEnd = false;
+ /**
+ * An internal marker to track whether stream or outgoingHandler returns error.
+ *
+ * @private
+ * @type {boolean}
+ * @memberof BufferScheduler
+ */
+ this.isError = false;
+ /**
+ * How many handlers are executing.
+ *
+ * @private
+ * @type {number}
+ * @memberof BufferScheduler
+ */
+ this.executingOutgoingHandlers = 0;
+ /**
+ * How many buffers have been allocated.
+ *
+ * @private
+ * @type {number}
+ * @memberof BufferScheduler
+ */
+ this.numBuffers = 0;
+ /**
+ * Because this class doesn't know how much data every time stream pops, which
+ * is defined by highWaterMarker of the stream. So BufferScheduler will cache
+ * data received from the stream, when data in unresolvedDataArray exceeds the
+ * blockSize defined, it will try to concat a blockSize of buffer, fill into available
+ * buffers from incoming and push to outgoing array.
+ *
+ * @private
+ * @type {Buffer[]}
+ * @memberof BufferScheduler
+ */
+ this.unresolvedDataArray = [];
+ /**
+ * How much data consisted in unresolvedDataArray.
+ *
+ * @private
+ * @type {number}
+ * @memberof BufferScheduler
+ */
+ this.unresolvedLength = 0;
+ /**
+ * The array includes all the available buffers can be used to fill data from stream.
+ *
+ * @private
+ * @type {PooledBuffer[]}
+ * @memberof BufferScheduler
+ */
+ this.incoming = [];
+ /**
+ * The array (queue) includes all the buffers filled from stream data.
+ *
+ * @private
+ * @type {PooledBuffer[]}
+ * @memberof BufferScheduler
+ */
+ this.outgoing = [];
+ if (bufferSize <= 0) {
+ throw new RangeError("bufferSize must be larger than 0, current is " + bufferSize);
+ }
+ if (maxBuffers <= 0) {
+ throw new RangeError("maxBuffers must be larger than 0, current is " + maxBuffers);
+ }
+ if (concurrency <= 0) {
+ throw new RangeError("concurrency must be larger than 0, current is " + concurrency);
+ }
+ this.bufferSize = bufferSize;
+ this.maxBuffers = maxBuffers;
+ this.readable = readable;
+ this.outgoingHandler = outgoingHandler;
+ this.concurrency = concurrency;
+ this.encoding = encoding;
+ }
+ /**
+ * Start the scheduler, will return error when stream of any of the outgoingHandlers
+ * returns error.
+ *
+ * @returns {Promise}
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.do = function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ _this.readable.on("data", function (data) {
+ data = typeof data === "string" ? Buffer.from(data, _this.encoding) : data;
+ _this.appendUnresolvedData(data);
+ if (!_this.resolveData()) {
+ _this.readable.pause();
+ }
+ });
+ _this.readable.on("error", function (err) {
+ _this.emitter.emit("error", err);
+ });
+ _this.readable.on("end", function () {
+ _this.isStreamEnd = true;
+ _this.emitter.emit("checkEnd");
+ });
+ _this.emitter.on("error", function (err) {
+ _this.isError = true;
+ _this.readable.pause();
+ reject(err);
+ });
+ _this.emitter.on("checkEnd", function () {
+ if (_this.outgoing.length > 0) {
+ _this.triggerOutgoingHandlers();
+ return;
+ }
+ if (_this.isStreamEnd && _this.executingOutgoingHandlers === 0) {
+ if (_this.unresolvedLength > 0 && _this.unresolvedLength < _this.bufferSize) {
+ var buffer_1 = _this.shiftBufferFromUnresolvedDataArray();
+ _this.outgoingHandler(function () { return buffer_1.getReadableStream(); }, buffer_1.size, _this.offset)
+ .then(resolve)
+ .catch(reject);
+ }
+ else if (_this.unresolvedLength >= _this.bufferSize) {
+ return;
+ }
+ else {
+ resolve();
+ }
+ }
+ });
+ })];
+ });
+ });
+ };
+ /**
+ * Insert a new data into unresolved array.
+ *
+ * @private
+ * @param {Buffer} data
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.appendUnresolvedData = function (data) {
+ this.unresolvedDataArray.push(data);
+ this.unresolvedLength += data.length;
+ };
+ /**
+ * Try to shift a buffer with size in blockSize. The buffer returned may be less
+ * than blockSize when data in unresolvedDataArray is less than bufferSize.
+ *
+ * @private
+ * @returns {PooledBuffer}
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.shiftBufferFromUnresolvedDataArray = function (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.
+ *
+ * @private
+ * @returns {boolean} Return false when buffers in incoming are not enough, else true.
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.resolveData = function () {
+ while (this.unresolvedLength >= this.bufferSize) {
+ var buffer = void 0;
+ if (this.incoming.length > 0) {
+ buffer = this.incoming.shift();
+ 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.
+ *
+ * @private
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.triggerOutgoingHandlers = function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var buffer;
+ return tslib.__generator(this, function (_a) {
+ do {
+ if (this.executingOutgoingHandlers >= this.concurrency) {
+ return [2 /*return*/];
+ }
+ buffer = this.outgoing.shift();
+ if (buffer) {
+ this.triggerOutgoingHandler(buffer);
+ }
+ } while (buffer);
+ return [2 /*return*/];
+ });
+ });
+ };
+ /**
+ * Trigger a outgoing handler for a buffer shifted from outgoing.
+ *
+ * @private
+ * @param {Buffer} buffer
+ * @returns {Promise}
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.triggerOutgoingHandler = function (buffer) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var bufferLength, err_1;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ bufferLength = buffer.size;
+ this.executingOutgoingHandlers++;
+ this.offset += bufferLength;
+ _a.label = 1;
+ case 1:
+ _a.trys.push([1, 3, , 4]);
+ return [4 /*yield*/, this.outgoingHandler(function () { return buffer.getReadableStream(); }, bufferLength, this.offset - bufferLength)];
+ case 2:
+ _a.sent();
+ return [3 /*break*/, 4];
+ case 3:
+ err_1 = _a.sent();
+ this.emitter.emit("error", err_1);
+ return [2 /*return*/];
+ case 4:
+ this.executingOutgoingHandlers--;
+ this.reuseBuffer(buffer);
+ this.emitter.emit("checkEnd");
+ return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Return buffer used by outgoing handler into incoming.
+ *
+ * @private
+ * @param {Buffer} buffer
+ * @memberof BufferScheduler
+ */
+ BufferScheduler.prototype.reuseBuffer = function (buffer) {
+ this.incoming.push(buffer);
+ if (!this.isError && this.resolveData() && !this.isStreamEnd) {
+ this.readable.resume();
+ }
+ };
+ return BufferScheduler;
+}());
+
+// Copyright (c) Microsoft Corporation.
+/**
+ * Creates a span using the global tracer.
+ * @param name The name of the operation being performed.
+ * @param tracingOptions The options for the underlying http request.
+ */
+function createSpan(operationName, tracingOptions) {
+ if (tracingOptions === void 0) { tracingOptions = {}; }
+ var tracer = coreTracing.getTracer();
+ var spanOptions = tslib.__assign(tslib.__assign({}, tracingOptions.spanOptions), { kind: api.SpanKind.INTERNAL });
+ var span = tracer.startSpan("Azure.Storage.Blob." + operationName, spanOptions);
+ span.setAttribute("az.namespace", "Microsoft.Storage");
+ var newOptions = tracingOptions.spanOptions || {};
+ if (span.isRecording()) {
+ newOptions = tslib.__assign(tslib.__assign({}, tracingOptions.spanOptions), { parent: span.context(), attributes: tslib.__assign(tslib.__assign({}, spanOptions.attributes), { "az.namespace": "Microsoft.Storage" }) });
+ }
+ return {
+ span: span,
+ spanOptions: newOptions
+ };
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * Reads a readable stream into buffer. Fill the buffer from offset to end.
+ *
+ * @export
+ * @param {NodeJS.ReadableStream} stream A Node.js Readable stream
+ * @param {Buffer} buffer Buffer to be filled, length must >= offset
+ * @param {number} offset From which position in the buffer to be filled, inclusive
+ * @param {number} end To which position in the buffer to be filled, exclusive
+ * @param {string} [encoding] Encoding of the Readable stream
+ * @returns {Promise}
+ */
+function streamToBuffer(stream, buffer, offset, end, encoding) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var pos, count;
+ return tslib.__generator(this, function (_a) {
+ pos = 0;
+ count = end - offset;
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ stream.on("readable", function () {
+ if (pos >= count) {
+ resolve();
+ return;
+ }
+ var chunk = stream.read();
+ if (!chunk) {
+ return;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ // How much data needed in this chunk
+ var chunkLength = pos + chunk.length > count ? count - pos : chunk.length;
+ buffer.fill(chunk.slice(0, chunkLength), offset + pos, offset + pos + chunkLength);
+ pos += chunkLength;
+ });
+ stream.on("end", function () {
+ if (pos < count) {
+ reject(new Error("Stream drains before getting enough data needed. Data read: " + pos + ", data need: " + count));
+ }
+ resolve();
+ });
+ stream.on("error", reject);
+ })];
+ });
+ });
+}
+/**
+ * Reads a readable stream into buffer entirely.
+ *
+ * @export
+ * @param {NodeJS.ReadableStream} stream A Node.js Readable stream
+ * @param {Buffer} buffer Buffer to be filled, length must >= offset
+ * @param {string} [encoding] Encoding of the Readable stream
+ * @returns {Promise} with the count of bytes read.
+ * @throws {RangeError} If buffer size is not big enough.
+ */
+function streamToBuffer2(stream, buffer, encoding) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var pos, bufferSize;
+ return tslib.__generator(this, function (_a) {
+ pos = 0;
+ bufferSize = buffer.length;
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ stream.on("readable", function () {
+ var chunk = stream.read();
+ if (!chunk) {
+ return;
+ }
+ if (typeof chunk === "string") {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ if (pos + chunk.length > bufferSize) {
+ reject(new Error("Stream exceeds buffer size. Buffer size: " + bufferSize));
+ return;
+ }
+ buffer.fill(chunk, pos, pos + chunk.length);
+ pos += chunk.length;
+ });
+ stream.on("end", function () {
+ resolve(pos);
+ });
+ stream.on("error", reject);
+ })];
+ });
+ });
+}
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Writes the content of a readstream to a local file. Returns a Promise which is completed after the file handle is closed.
+ *
+ * @export
+ * @param {NodeJS.ReadableStream} rs The read stream.
+ * @param {string} file Destination file path.
+ * @returns {Promise}
+ */
+function readStreamToLocalFile(rs, file) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, new Promise(function (resolve, reject) {
+ var ws = fs.createWriteStream(file);
+ rs.on("error", function (err) {
+ reject(err);
+ });
+ ws.on("error", function (err) {
+ reject(err);
+ });
+ ws.on("close", resolve);
+ rs.pipe(ws);
+ })];
+ });
+ });
+}
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Promisified version of fs.stat().
+ */
+var fsStat = util.promisify(fs.stat);
+var 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.
+ *
+ * @export
+ * @class BlobClient
+ */
+var BlobClient = /** @class */ (function (_super) {
+ tslib.__extends(BlobClient, _super);
+ function BlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
+ var _a;
+ var _this = this;
+ options = options || {};
+ var pipeline;
+ var url;
+ if (credentialOrPipelineOrContainerName instanceof Pipeline) {
+ // (url: string, pipeline: Pipeline)
+ url = urlOrConnectionString;
+ pipeline = credentialOrPipelineOrContainerName;
+ }
+ else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
+ credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ url = urlOrConnectionString;
+ options = blobNameOrOptions;
+ pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
+ }
+ else if (!credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName !== "string") {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ // The second parameter is undefined. Use anonymous credential.
+ url = urlOrConnectionString;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else if (credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName === "string" &&
+ blobNameOrOptions &&
+ typeof blobNameOrOptions === "string") {
+ // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
+ var containerName = credentialOrPipelineOrContainerName;
+ var blobName = blobNameOrOptions;
+ var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ pipeline = newPipeline(sharedKeyCredential, options);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ url =
+ appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
+ "?" +
+ extractedCreds.accountSas;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ }
+ else {
+ throw new Error("Expecting non-empty strings for containerName and blobName parameters");
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ (_a = _this.getBlobAndContainerNamesFromUrl(), _this._name = _a.blobName, _this._containerName = _a.containerName);
+ _this.blobContext = new Blob$1(_this.storageClientContext);
+ return _this;
+ }
+ Object.defineProperty(BlobClient.prototype, "name", {
+ /**
+ * The name of the blob.
+ */
+ get: function () {
+ return this._name;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobClient.prototype, "containerName", {
+ /**
+ * The name of the storage container the blob is associated with.
+ */
+ get: function () {
+ return this._containerName;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Creates a new BlobClient object identical to the source but with the specified snapshot timestamp.
+ * Provide "" will remove the snapshot and return a Client to the base blob.
+ *
+ * @param {string} snapshot The snapshot timestamp.
+ * @returns {BlobClient} A new BlobClient object identical to the source but with the specified snapshot timestamp
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.withSnapshot = function (snapshot) {
+ return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
+ };
+ /**
+ * Creates a new BlobClient object pointing to a version of this blob.
+ * Provide "" will remove the versionId and return a Client to the base blob.
+ *
+ * @param {string} versionId The versionId.
+ * @returns {BlobClient} A new BlobClient object pointing to the version of this blob.
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.withVersion = function (versionId) {
+ return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.VERSIONID, versionId.length === 0 ? undefined : versionId), this.pipeline);
+ };
+ /**
+ * Creates a AppendBlobClient object.
+ *
+ * @returns {AppendBlobClient}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getAppendBlobClient = function () {
+ return new AppendBlobClient(this.url, this.pipeline);
+ };
+ /**
+ * Creates a BlockBlobClient object.
+ *
+ * @returns {BlockBlobClient}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getBlockBlobClient = function () {
+ return new BlockBlobClient(this.url, this.pipeline);
+ };
+ /**
+ * Creates a PageBlobClient object.
+ *
+ * @returns {PageBlobClient}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getPageBlobClient = function () {
+ return new PageBlobClient(this.url, this.pipeline);
+ };
+ /**
+ * Reads or downloads a blob from the system, including its metadata and properties.
+ * You can also call Get Blob to read a snapshot.
+ *
+ * * In Node.js, data returns in a Readable stream readableStreamBody
+ * * In browsers, data returns in a promise blobBody
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob
+ *
+ * @param {number} [offset] From which position of the blob to download, >= 0
+ * @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined
+ * @param {BlobDownloadOptions} [options] Optional options to Blob Download operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ *
+ * 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 {
+ * const fileReader = new FileReader();
+ * return new Promise((resolve, reject) => {
+ * fileReader.onloadend = (ev: any) => {
+ * resolve(ev.target!.result);
+ * };
+ * fileReader.onerror = reject;
+ * fileReader.readAsText(blob);
+ * });
+ * }
+ * ```
+ */
+ BlobClient.prototype.download = function (offset, count, options) {
+ var _a;
+ if (offset === void 0) { offset = 0; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, res_1, wrappedRes, e_1;
+ var _this = this;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ options.conditions = options.conditions || {};
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ _b = createSpan("BlobClient-download", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.download({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ onDownloadProgress: coreHttp.isNode ? undefined : options.onProgress,
+ range: offset === 0 && !count ? undefined : rangeToString({ offset: offset, count: count }),
+ rangeGetContentMD5: options.rangeGetContentMD5,
+ rangeGetContentCRC64: options.rangeGetContentCrc64,
+ snapshot: options.snapshot,
+ cpkInfo: options.customerProvidedKey,
+ spanOptions: spanOptions
+ })];
+ case 2:
+ res_1 = _c.sent();
+ wrappedRes = tslib.__assign(tslib.__assign({}, res_1), { _response: res_1._response, objectReplicationDestinationPolicyId: res_1.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res_1.objectReplicationRules) });
+ // We support retrying when download stream unexpected ends in Node.js runtime
+ // Following code shouldn't be bundled into browser build, however some
+ // bundlers may try to bundle following code and "FileReadResponse.ts".
+ // In this case, "FileDownloadResponse.browser.ts" will be used as a shim of "FileDownloadResponse.ts"
+ // The config is in package.json "browser" field
+ if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) {
+ // TODO: Default value or make it a required parameter?
+ options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS;
+ }
+ if (res_1.contentLength === undefined) {
+ throw new RangeError("File download response doesn't contain valid content length header");
+ }
+ if (!res_1.etag) {
+ throw new RangeError("File download response doesn't contain valid etag header");
+ }
+ return [2 /*return*/, new BlobDownloadResponse(wrappedRes, function (start) { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var updatedOptions;
+ var _a;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ updatedOptions = {
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: {
+ ifMatch: options.conditions.ifMatch || res_1.etag,
+ ifModifiedSince: options.conditions.ifModifiedSince,
+ ifNoneMatch: options.conditions.ifNoneMatch,
+ ifUnmodifiedSince: options.conditions.ifUnmodifiedSince,
+ ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions
+ },
+ range: rangeToString({
+ count: offset + res_1.contentLength - start,
+ offset: start
+ }),
+ rangeGetContentMD5: options.rangeGetContentMD5,
+ rangeGetContentCRC64: options.rangeGetContentCrc64,
+ snapshot: options.snapshot,
+ cpkInfo: options.customerProvidedKey
+ };
+ return [4 /*yield*/, this.blobContext.download(tslib.__assign({ abortSignal: options.abortSignal }, updatedOptions))];
+ case 1:
+ // Debug purpose only
+ // console.log(
+ // `Read from internal stream, range: ${
+ // updatedOptions.range
+ // }, options: ${JSON.stringify(updatedOptions)}`
+ // );
+ return [2 /*return*/, (_b.sent()).readableStreamBody];
+ }
+ });
+ }); }, offset, res_1.contentLength, {
+ abortSignal: options.abortSignal,
+ maxRetryRequests: options.maxRetryRequests,
+ onProgress: options.onProgress
+ })];
+ case 3:
+ e_1 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_1.message
+ });
+ throw e_1;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns true if the 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 {BlobExistsOptions} [options] options to Exists operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.exists = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_2;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobClient-exists", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.getProperties({
+ abortSignal: options.abortSignal,
+ customerProvidedKey: options.customerProvidedKey,
+ conditions: options.conditions,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 2:
+ _b.sent();
+ return [2 /*return*/, true];
+ case 3:
+ e_2 = _b.sent();
+ if (e_2.statusCode === 404) {
+ span.setStatus({
+ code: api.CanonicalCode.NOT_FOUND,
+ message: "Expected exception when checking blob existence"
+ });
+ return [2 /*return*/, false];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_2.message
+ });
+ throw e_2;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns all user-defined metadata, standard HTTP properties, and system properties
+ * for the blob. It does not return the content of the blob.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-properties
+ *
+ * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if
+ * they originally contained uppercase characters. This differs from the metadata keys returned by
+ * the methods of {@link ContainerClient} that list blobs using the `includeMetadata` option, which
+ * will retain their original casing.
+ *
+ * @param {BlobGetPropertiesOptions} [options] Optional options to Get Properties operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getProperties = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, res, e_3;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-getProperties", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ options.conditions = options.conditions || {};
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blobContext.getProperties({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ spanOptions: spanOptions
+ })];
+ case 2:
+ res = _c.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({}, res), { _response: res._response, objectReplicationDestinationPolicyId: res.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules) })];
+ case 3:
+ e_3 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_3.message
+ });
+ throw e_3;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Marks the specified blob or snapshot for deletion. The blob is later deleted
+ * during garbage collection. Note that in order to delete a blob, you must delete
+ * all of its snapshots. You can delete both at the same time with the Delete
+ * Blob operation.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob
+ *
+ * @param {BlobDeleteOptions} [options] Optional options to Blob Delete operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.delete = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_4;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-delete", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.deleteMethod({
+ abortSignal: options.abortSignal,
+ deleteSnapshots: options.deleteSnapshots,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_4 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_4.message
+ });
+ throw e_4;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {BlobDeleteOptions} [options] Optional options to Blob Delete operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.deleteIfExists = function (options) {
+ var _a, _b;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _c, span, spanOptions, res, e_5;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _c = createSpan("BlobClient-deleteIfExists", options.tracingOptions), span = _c.span, spanOptions = _c.spanOptions;
+ _d.label = 1;
+ case 1:
+ _d.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ res = _d.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
+ })];
+ case 3:
+ e_5 = _d.sent();
+ if (((_a = e_5.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobNotFound") {
+ span.setStatus({
+ code: api.CanonicalCode.NOT_FOUND,
+ message: "Expected exception when deleting a blob or snapshot only if it exists."
+ });
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_5.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_5.response })];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_5.message
+ });
+ throw e_5;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Restores the contents and metadata of soft deleted blob and any associated
+ * soft deleted snapshots. Undelete Blob is supported only on version 2017-07-29
+ * or later.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/undelete-blob
+ *
+ * @param {BlobUndeleteOptions} [options] Optional options to Blob Undelete operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.undelete = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_6;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobClient-undelete", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.undelete({
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_6 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_6.message
+ });
+ throw e_6;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets 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} [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.
+ * @param {BlobSetHTTPHeadersOptions} [options] Optional options to Blob Set HTTP Headers operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.setHTTPHeaders = function (blobHTTPHeaders, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_7;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-setHTTPHeaders", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blobContext.setHTTPHeaders({
+ abortSignal: options.abortSignal,
+ blobHTTPHeaders: blobHTTPHeaders,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_7 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_7.message
+ });
+ throw e_7;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets user-defined metadata for the specified blob as one or more name-value pairs.
+ *
+ * If no option provided, or no metadata defined in the parameter, the blob
+ * metadata will be removed.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata
+ *
+ * @param {Metadata} [metadata] Replace existing metadata with this value.
+ * If no value provided the existing metadata will be removed.
+ * @param {BlobSetMetadataOptions} [options] Optional options to Set Metadata operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.setMetadata = function (metadata, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_8;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-setMetadata", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blobContext.setMetadata({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ metadata: metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_8 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_8.message
+ });
+ throw e_8;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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} tags
+ * @param {BlobSetTagsOptions} [options={}]
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.setTags = function (tags, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_9;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-setTags", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.setTags({
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions,
+ tags: toBlobTags(tags)
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_9 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_9.message
+ });
+ throw e_9;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Gets the tags associated with the underlying blob.
+ *
+ * @param {BlobGetTagsOptions} [options={}]
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getTags = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, response, wrappedResponse, e_10;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-getTags", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.getTags({
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2:
+ response = _c.sent();
+ wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, tags: toTags({ blobTagSet: response.blobTagSet }) || {} });
+ return [2 /*return*/, wrappedResponse];
+ case 3:
+ e_10 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_10.message
+ });
+ throw e_10;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Get a {@link BlobLeaseClient} that manages leases on the blob.
+ *
+ * @param {string} [proposeLeaseId] Initial proposed lease Id.
+ * @returns {BlobLeaseClient} A new BlobLeaseClient object for managing leases on the blob.
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.getBlobLeaseClient = function (proposeLeaseId) {
+ return new BlobLeaseClient(this, proposeLeaseId);
+ };
+ /**
+ * Creates a read-only snapshot of a blob.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob
+ *
+ * @param {BlobCreateSnapshotOptions} [options] Optional options to the Blob Create Snapshot operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.createSnapshot = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_11;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-createSnapshot", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blobContext.createSnapshot({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_11 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_11.message
+ });
+ throw e_11;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Asynchronously copies a blob to a destination within the storage account.
+ * This method returns a long running operation poller that allows you to wait
+ * indefinitely until the copy is completed.
+ * You can also cancel a copy before it is completed by calling `cancelOperation` on the poller.
+ * Note that the onProgress callback will not be invoked if the operation completes in the first
+ * request, and attempting to cancel a completed copy will result in an error being thrown.
+ *
+ * In version 2012-02-12 and later, the source for a Copy Blob operation can be
+ * a committed blob in any Azure storage account.
+ * Beginning with version 2015-02-21, the source for a Copy Blob operation can be
+ * an Azure file in any Azure storage account.
+ * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob
+ * operation to copy from another storage account.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob
+ *
+ * Example using automatic polling:
+ *
+ * ```js
+ * const copyPoller = await blobClient.beginCopyFromURL('url');
+ * const result = await copyPoller.pollUntilDone();
+ * ```
+ *
+ * Example using manual polling:
+ *
+ * ```js
+ * const copyPoller = await blobClient.beginCopyFromURL('url');
+ * while (!poller.isDone()) {
+ * await poller.poll();
+ * }
+ * const result = copyPoller.getResult();
+ * ```
+ *
+ * Example using progress updates:
+ *
+ * ```js
+ * const copyPoller = await blobClient.beginCopyFromURL('url', {
+ * onProgress(state) {
+ * console.log(`Progress: ${state.copyProgress}`);
+ * }
+ * });
+ * const result = await copyPoller.pollUntilDone();
+ * ```
+ *
+ * Example using a changing polling interval (default 15 seconds):
+ *
+ * ```js
+ * const copyPoller = await blobClient.beginCopyFromURL('url', {
+ * intervalInMs: 1000 // poll blob every 1 second for copy progress
+ * });
+ * const result = await copyPoller.pollUntilDone();
+ * ```
+ *
+ * Example using copy cancellation:
+ *
+ * ```js
+ * const copyPoller = await blobClient.beginCopyFromURL('url');
+ * // cancel operation after starting it.
+ * try {
+ * await copyPoller.cancelOperation();
+ * // calls to get the result now throw PollerCancelledError
+ * await copyPoller.getResult();
+ * } catch (err) {
+ * if (err.name === 'PollerCancelledError') {
+ * console.log('The copy was cancelled.');
+ * }
+ * }
+ * ```
+ *
+ * @param {string} copySource url to the source Azure Blob/File.
+ * @param {BlobBeginCopyFromURLOptions} [options] Optional options to the Blob Start Copy From URL operation.
+ */
+ BlobClient.prototype.beginCopyFromURL = function (copySource, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var client, poller;
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ client = {
+ abortCopyFromURL: function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return _this.abortCopyFromURL.apply(_this, args);
+ },
+ getProperties: function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return _this.getProperties.apply(_this, args);
+ },
+ startCopyFromURL: function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return _this.startCopyFromURL.apply(_this, args);
+ }
+ };
+ poller = new BlobBeginCopyFromUrlPoller({
+ blobClient: client,
+ copySource: copySource,
+ intervalInMs: options.intervalInMs,
+ onProgress: options.onProgress,
+ resumeFrom: options.resumeFrom,
+ startCopyFromURLOptions: options
+ });
+ // Trigger the startCopyFromURL call by calling poll.
+ // Any errors from this method should be surfaced to the user.
+ return [4 /*yield*/, poller.poll()];
+ case 1:
+ // Trigger the startCopyFromURL call by calling poll.
+ // Any errors from this method should be surfaced to the user.
+ _a.sent();
+ return [2 /*return*/, poller];
+ }
+ });
+ });
+ };
+ /**
+ * Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero
+ * length and full metadata. Version 2012-02-12 and newer.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob
+ *
+ * @param {string} copyId Id of the Copy From URL operation.
+ * @param {BlobAbortCopyFromURLOptions} [options] Optional options to the Blob Abort Copy From URL operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.abortCopyFromURL = function (copyId, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_12;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobClient-abortCopyFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.abortCopyFromURL(copyId, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_12 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_12.message
+ });
+ throw e_12;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * The synchronous Copy From URL operation copies a blob or an internet resource to a new blob. It will not
+ * return a response until the copy is complete.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url
+ *
+ * @param {string} copySource The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication
+ * @param {BlobSyncCopyFromURLOptions} [options={}]
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.syncCopyFromURL = function (copySource, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_13;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-syncCopyFromURL", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ options.sourceConditions = options.sourceConditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.copyFromURL(copySource, {
+ abortSignal: options.abortSignal,
+ metadata: options.metadata,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__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,
+ blobTagsString: toBlobTagsString(options.tags),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_13 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_13.message
+ });
+ throw e_13;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets the tier on a blob. The operation is allowed on a page blob in a premium
+ * storage account and on a block blob in a blob storage account (locally redundant
+ * storage only). A premium page blob's tier determines the allowed size, IOPS,
+ * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive
+ * storage type. This operation does not update the blob's ETag.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier
+ *
+ * @param {BlockBlobTier | PremiumPageBlobTier | string} tier The tier to be set on the blob. Valid values are Hot, Cool, or Archive.
+ * @param {BlobSetTierOptions} [options] Optional options to the Blob Set Tier operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.setAccessTier = function (tier, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_14;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-setAccessTier", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.setTier(toAccessTier(tier), {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ rehydratePriority: options.rehydratePriority,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_14 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_14.message
+ });
+ throw e_14;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ BlobClient.prototype.downloadToBuffer = function (param1, param2, param3, param4) {
+ if (param4 === void 0) { param4 = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var buffer, offset, count, options, _a, span, spanOptions, response, transferProgress_1, batch, _loop_1, off, e_15;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ offset = 0;
+ count = 0;
+ options = param4;
+ if (param1 instanceof Buffer) {
+ buffer = param1;
+ offset = param2 || 0;
+ count = typeof param3 === "number" ? param3 : 0;
+ }
+ else {
+ offset = typeof param1 === "number" ? param1 : 0;
+ count = typeof param2 === "number" ? param2 : 0;
+ options = param3 || {};
+ }
+ _a = createSpan("BlobClient-downloadToBuffer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 5, 6, 7]);
+ if (!options.blockSize) {
+ options.blockSize = 0;
+ }
+ if (options.blockSize < 0) {
+ throw new RangeError("blockSize option must be >= 0");
+ }
+ if (options.blockSize === 0) {
+ options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
+ }
+ if (offset < 0) {
+ throw new RangeError("offset option must be >= 0");
+ }
+ if (count && count <= 0) {
+ throw new RangeError("count option must be > 0");
+ }
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ if (!!count) return [3 /*break*/, 3];
+ return [4 /*yield*/, this.getProperties(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ response = _b.sent();
+ count = response.contentLength - offset;
+ if (count < 0) {
+ throw new RangeError("offset " + offset + " shouldn't be larger than blob size " + response.contentLength);
+ }
+ _b.label = 3;
+ case 3:
+ // Allocate the buffer of size = count if the buffer is not provided
+ if (!buffer) {
+ try {
+ buffer = Buffer.alloc(count);
+ }
+ catch (error) {
+ throw new Error("Unable to allocate the buffer of size: " + count + "(in bytes). Please try passing your own buffer to the \"downloadToBuffer\" method or try using other methods like \"download\" or \"downloadToFile\".\t " + error.message);
+ }
+ }
+ if (buffer.length < count) {
+ throw new RangeError("The buffer's size should be equal to or larger than the request count of bytes: " + count);
+ }
+ transferProgress_1 = 0;
+ batch = new Batch(options.concurrency);
+ _loop_1 = function (off) {
+ batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var chunkEnd, response, stream;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ chunkEnd = offset + count;
+ if (off + options.blockSize < chunkEnd) {
+ chunkEnd = off + options.blockSize;
+ }
+ return [4 /*yield*/, this.download(off, chunkEnd - off, {
+ abortSignal: options.abortSignal,
+ conditions: options.conditions,
+ maxRetryRequests: options.maxRetryRequestsPerBlock,
+ customerProvidedKey: options.customerProvidedKey,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 1:
+ response = _a.sent();
+ stream = response.readableStreamBody;
+ return [4 /*yield*/, streamToBuffer(stream, buffer, off - offset, chunkEnd - offset)];
+ case 2:
+ _a.sent();
+ // Update progress after block is downloaded, in case of block trying
+ // Could provide finer grained progress updating inside HTTP requests,
+ // only if convenience layer download try is enabled
+ transferProgress_1 += chunkEnd - off;
+ if (options.onProgress) {
+ options.onProgress({ loadedBytes: transferProgress_1 });
+ }
+ return [2 /*return*/];
+ }
+ });
+ }); });
+ };
+ for (off = offset; off < offset + count; off = off + options.blockSize) {
+ _loop_1(off);
+ }
+ return [4 /*yield*/, batch.do()];
+ case 4:
+ _b.sent();
+ return [2 /*return*/, buffer];
+ case 5:
+ e_15 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_15.message
+ });
+ throw e_15;
+ case 6:
+ span.end();
+ return [7 /*endfinally*/];
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Downloads an Azure Blob to a local file.
+ * Fails if the the given file path already exits.
+ * Offset and count are optional, pass 0 and undefined respectively to download the entire blob.
+ *
+ * @param {string} filePath
+ * @param {number} [offset] From which position of the block blob to download.
+ * @param {number} [count] How much data to be downloaded. Will download to the end when passing undefined.
+ * @param {BlobDownloadOptions} [options] Options to Blob download options.
+ * @returns {Promise} The response data for blob download operation,
+ * but with readableStreamBody set to undefined since its
+ * content is already read and written into a local file
+ * at the specified path.
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.downloadToFile = function (filePath, offset, count, options) {
+ if (offset === void 0) { offset = 0; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, response, e_16;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobClient-downloadToFile", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 5, 6, 7]);
+ return [4 /*yield*/, this.download(offset, count, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ response = _b.sent();
+ if (!response.readableStreamBody) return [3 /*break*/, 4];
+ return [4 /*yield*/, readStreamToLocalFile(response.readableStreamBody, filePath)];
+ case 3:
+ _b.sent();
+ _b.label = 4;
+ case 4:
+ // The stream is no longer accessible so setting it to undefined.
+ response.blobDownloadStream = undefined;
+ return [2 /*return*/, response];
+ case 5:
+ e_16 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_16.message
+ });
+ throw e_16;
+ case 6:
+ span.end();
+ return [7 /*endfinally*/];
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ BlobClient.prototype.getBlobAndContainerNamesFromUrl = function () {
+ var containerName;
+ var blobName;
+ try {
+ // URL may look like the following
+ // "https://myaccount.blob.core.windows.net/mycontainer/blob?sasString";
+ // "https://myaccount.blob.core.windows.net/mycontainer/blob";
+ // "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt?sasString";
+ // "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt";
+ // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername/blob`
+ // http://localhost:10001/devstoreaccount1/containername/blob
+ var parsedUrl = coreHttp.URLBuilder.parse(this.url);
+ if (parsedUrl.getHost().split(".")[1] === "blob") {
+ // "https://myaccount.blob.core.windows.net/containername/blob".
+ // .getPath() -> /containername/blob
+ var pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?");
+ containerName = pathComponents[1];
+ blobName = pathComponents[3];
+ }
+ else 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
+ var pathComponents = parsedUrl.getPath().match("/([^/]*)/([^/]*)(/(.*))?");
+ containerName = pathComponents[2];
+ blobName = pathComponents[4];
+ }
+ else {
+ // "https://customdomain.com/containername/blob".
+ // .getPath() -> /containername/blob
+ var 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 (!blobName) {
+ throw new Error("Provided blobName is invalid.");
+ }
+ else if (!containerName) {
+ throw new Error("Provided containerName is invalid.");
+ }
+ return { blobName: blobName, containerName: containerName };
+ }
+ catch (error) {
+ throw new Error("Unable to extract blobName and containerName with provided information.");
+ }
+ };
+ /**
+ * Asynchronously copies a blob to a destination within the storage account.
+ * In version 2012-02-12 and later, the source for a Copy Blob operation can be
+ * a committed blob in any Azure storage account.
+ * Beginning with version 2015-02-21, the source for a Copy Blob operation can be
+ * an Azure file in any Azure storage account.
+ * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob
+ * operation to copy from another storage account.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob
+ *
+ * @param {string} copySource url to the source Azure Blob/File.
+ * @param {BlobStartCopyFromURLOptions} [options] Optional options to the Blob Start Copy From URL operation.
+ * @returns {Promise}
+ * @memberof BlobClient
+ */
+ BlobClient.prototype.startCopyFromURL = function (copySource, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_17;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlobClient-startCopyFromURL", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ options.sourceConditions = options.sourceConditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blobContext.startCopyFromURL(copySource, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__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
+ },
+ rehydratePriority: options.rehydratePriority,
+ tier: toAccessTier(options.tier),
+ blobTagsString: toBlobTagsString(options.tags),
+ sealBlob: options.sealBlob,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_17 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_17.message
+ });
+ throw e_17;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlobClient;
+}(StorageClient));
+/**
+ * AppendBlobClient defines a set of operations applicable to append blobs.
+ *
+ * @export
+ * @class AppendBlobClient
+ * @extends {BlobClient}
+ */
+var AppendBlobClient = /** @class */ (function (_super) {
+ tslib.__extends(AppendBlobClient, _super);
+ function AppendBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
+ var _this = this;
+ // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
+ // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
+ var pipeline;
+ var url;
+ options = options || {};
+ if (credentialOrPipelineOrContainerName instanceof Pipeline) {
+ // (url: string, pipeline: Pipeline)
+ url = urlOrConnectionString;
+ pipeline = credentialOrPipelineOrContainerName;
+ }
+ else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
+ credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString;
+ url = urlOrConnectionString;
+ options = blobNameOrOptions;
+ pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
+ }
+ else if (!credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName !== "string") {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ url = urlOrConnectionString;
+ // The second parameter is undefined. Use anonymous credential.
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else if (credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName === "string" &&
+ blobNameOrOptions &&
+ typeof blobNameOrOptions === "string") {
+ // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
+ var containerName = credentialOrPipelineOrContainerName;
+ var blobName = blobNameOrOptions;
+ var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ pipeline = newPipeline(sharedKeyCredential, options);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ url =
+ appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
+ "?" +
+ extractedCreds.accountSas;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ }
+ else {
+ throw new Error("Expecting non-empty strings for containerName and blobName parameters");
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ _this.appendBlobContext = new AppendBlob(_this.storageClientContext);
+ return _this;
+ }
+ /**
+ * Creates a new AppendBlobClient object identical to the source but with the
+ * specified snapshot timestamp.
+ * Provide "" will remove the snapshot and return a Client to the base blob.
+ *
+ * @param {string} snapshot The snapshot timestamp.
+ * @returns {AppendBlobClient} A new AppendBlobClient object identical to the source but with the specified snapshot timestamp.
+ * @memberof AppendBlobClient
+ */
+ AppendBlobClient.prototype.withSnapshot = function (snapshot) {
+ return new AppendBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
+ };
+ /**
+ * Creates a 0-length append blob. Call AppendBlock to append data to an append blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-blob
+ *
+ * @param {AppendBlobCreateOptions} [options] Options to the Append Block Create operation.
+ * @returns {Promise}
+ * @memberof AppendBlobClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const appendBlobClient = containerClient.getAppendBlobClient("");
+ * await appendBlobClient.create();
+ * ```
+ */
+ AppendBlobClient.prototype.create = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_18;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("AppendBlobClient-create", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.appendBlobContext.create(0, {
+ abortSignal: options.abortSignal,
+ blobHTTPHeaders: options.blobHTTPHeaders,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ blobTagsString: toBlobTagsString(options.tags),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_18 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_18.message
+ });
+ throw e_18;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {AppendBlobCreateIfNotExistsOptions} [options]
+ * @returns {Promise}
+ * @memberof AppendBlobClient
+ */
+ AppendBlobClient.prototype.createIfNotExists = function (options) {
+ var _a, _b;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _c, span, spanOptions, conditions, res, e_19;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _c = createSpan("AppendBlobClient-createIfNotExists", options.tracingOptions), span = _c.span, spanOptions = _c.spanOptions;
+ conditions = { ifNoneMatch: ETagAny };
+ _d.label = 1;
+ case 1:
+ _d.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.create(tslib.__assign(tslib.__assign({}, options), { conditions: conditions, tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ res = _d.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
+ })];
+ case 3:
+ e_19 = _d.sent();
+ if (((_a = e_19.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") {
+ span.setStatus({
+ code: api.CanonicalCode.ALREADY_EXISTS,
+ message: "Expected exception when creating a blob only if it does not already exist."
+ });
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_19.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_19.response })];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_19.message
+ });
+ throw e_19;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Seals the append blob, making it read only.
+ *
+ * @param {AppendBlobSealOptions} [options={}]
+ * @returns {Promise}
+ * @memberof AppendBlobClient
+ */
+ AppendBlobClient.prototype.seal = function (options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_20;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("AppendBlobClient-seal", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.appendBlobContext.seal({
+ abortSignal: options.abortSignal,
+ appendPositionAccessConditions: options.conditions,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_20 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_20.message
+ });
+ throw e_20;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Commits a new block of data to the end of the existing append blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/append-block
+ *
+ * @param {HttpRequestBody} body Data to be appended.
+ * @param {number} contentLength Length of the body in bytes.
+ * @param {AppendBlobAppendBlockOptions} [options] Options to the Append Block operation.
+ * @returns {Promise}
+ * @memberof AppendBlobClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const content = "Hello World!";
+ *
+ * // Create a new append blob and append data to the blob.
+ * const newAppendBlobClient = containerClient.getAppendBlobClient("");
+ * await newAppendBlobClient.create();
+ * await newAppendBlobClient.appendBlock(content, content.length);
+ *
+ * // Append data to an existing append blob.
+ * const existingAppendBlobClient = containerClient.getAppendBlobClient("");
+ * await existingAppendBlobClient.appendBlock(content, content.length);
+ * ```
+ */
+ AppendBlobClient.prototype.appendBlock = function (body, contentLength, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_21;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("AppendBlobClient-appendBlock", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.appendBlobContext.appendBlock(body, contentLength, {
+ abortSignal: options.abortSignal,
+ appendPositionAccessConditions: options.conditions,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ onUploadProgress: options.onProgress,
+ transactionalContentMD5: options.transactionalContentMD5,
+ transactionalContentCrc64: options.transactionalContentCrc64,
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_21 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_21.message
+ });
+ throw e_21;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * The Append Block operation commits a new block of data to the end of an existing append blob
+ * where the contents are read from a source url.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/append-block-from-url
+ *
+ * @param {string} sourceURL
+ * The url to the blob that will be the source of the copy. A source blob in the same storage account can
+ * be authenticated via Shared Key. However, if the source is a blob in another account, the source blob
+ * must either be public or must be authenticated via a shared access signature. If the source blob is
+ * public, no authentication is required to perform the operation.
+ * @param {number} sourceOffset Offset in source to be appended
+ * @param {number} count Number of bytes to be appended as a block
+ * @param {AppendBlobAppendBlockFromURLOptions} [options={}]
+ * @returns {Promise}
+ * @memberof AppendBlobClient
+ */
+ AppendBlobClient.prototype.appendBlockFromURL = function (sourceURL, sourceOffset, count, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_22;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("AppendBlobClient-appendBlockFromURL", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ options.conditions = options.conditions || {};
+ options.sourceConditions = options.sourceConditions || {};
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, {
+ abortSignal: options.abortSignal,
+ sourceRange: rangeToString({ offset: sourceOffset, count: count }),
+ sourceContentMD5: options.sourceContentMD5,
+ sourceContentCrc64: options.sourceContentCrc64,
+ leaseAccessConditions: options.conditions,
+ appendPositionAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__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,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_22 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_22.message
+ });
+ throw e_22;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return AppendBlobClient;
+}(BlobClient));
+/**
+ * BlockBlobClient defines a set of operations applicable to block blobs.
+ *
+ * @export
+ * @class BlockBlobClient
+ * @extends {BlobClient}
+ */
+var BlockBlobClient = /** @class */ (function (_super) {
+ tslib.__extends(BlockBlobClient, _super);
+ function BlockBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
+ var _this = this;
+ // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
+ // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
+ var pipeline;
+ var url;
+ options = options || {};
+ if (credentialOrPipelineOrContainerName instanceof Pipeline) {
+ // (url: string, pipeline: Pipeline)
+ url = urlOrConnectionString;
+ pipeline = credentialOrPipelineOrContainerName;
+ }
+ else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
+ credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ url = urlOrConnectionString;
+ options = blobNameOrOptions;
+ pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
+ }
+ else if (!credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName !== "string") {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ // The second parameter is undefined. Use anonymous credential.
+ url = urlOrConnectionString;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else if (credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName === "string" &&
+ blobNameOrOptions &&
+ typeof blobNameOrOptions === "string") {
+ // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
+ var containerName = credentialOrPipelineOrContainerName;
+ var blobName = blobNameOrOptions;
+ var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ pipeline = newPipeline(sharedKeyCredential, options);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ url =
+ appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
+ "?" +
+ extractedCreds.accountSas;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ }
+ else {
+ throw new Error("Expecting non-empty strings for containerName and blobName parameters");
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ _this.blockBlobContext = new BlockBlob(_this.storageClientContext);
+ _this._blobContext = new Blob$1(_this.storageClientContext);
+ return _this;
+ }
+ /**
+ * Creates a new BlockBlobClient object identical to the source but with the
+ * specified snapshot timestamp.
+ * Provide "" will remove the snapshot and return a URL to the base blob.
+ *
+ * @param {string} snapshot The snapshot timestamp.
+ * @returns {BlockBlobClient} A new BlockBlobClient object identical to the source but with the specified snapshot timestamp.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.withSnapshot = function (snapshot) {
+ return new BlockBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
+ };
+ /**
+ * 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 {string} query
+ * @param {BlockBlobQueryOptions} [options={}]
+ * @returns {Promise}
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.query = function (query, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, response, e_23;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ _b = createSpan("BlockBlobClient-query", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this._blobContext.query({
+ abortSignal: options.abortSignal,
+ queryRequest: {
+ expression: query,
+ inputSerialization: toQuerySerialization(options.inputTextConfiguration),
+ outputSerialization: toQuerySerialization(options.outputTextConfiguration)
+ },
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2:
+ response = _c.sent();
+ return [2 /*return*/, new BlobQueryResponse(response, {
+ abortSignal: options.abortSignal,
+ onProgress: options.onProgress,
+ onError: options.onError
+ })];
+ case 3:
+ e_23 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_23.message
+ });
+ throw e_23;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Creates a new block blob, or updates the content of an existing block blob.
+ * Updating an existing block blob overwrites any existing metadata on the blob.
+ * Partial updates are not supported; the content of the existing blob is
+ * overwritten with the new content. To perform a partial update of a block blob's,
+ * use {@link stageBlock} and {@link commitBlockList}.
+ *
+ * This is a non-parallel uploading method, please use {@link uploadFile},
+ * {@link uploadStream} or {@link uploadBrowserData} for better performance
+ * with concurrency uploading.
+ *
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-blob
+ *
+ * @param {HttpRequestBody} body Blob, string, ArrayBuffer, ArrayBufferView or a function
+ * which returns a new Readable stream whose offset is from data source beginning.
+ * @param {number} contentLength Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
+ * string including non non-Base64/Hex-encoded characters.
+ * @param {BlockBlobUploadOptions} [options] Options to the Block Blob Upload operation.
+ * @returns {Promise} Response data for the Block Blob Upload operation.
+ * @memberof BlockBlobClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const content = "Hello world!";
+ * const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
+ * ```
+ */
+ BlockBlobClient.prototype.upload = function (body, contentLength, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_24;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("BlockBlobClient-upload", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blockBlobContext.upload(body, contentLength, {
+ abortSignal: options.abortSignal,
+ blobHTTPHeaders: options.blobHTTPHeaders,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ onUploadProgress: options.onProgress,
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ tier: toAccessTier(options.tier),
+ blobTagsString: toBlobTagsString(options.tags),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_24 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_24.message
+ });
+ throw e_24;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Uploads the specified block to the block blob's "staging area" to be later
+ * committed by a call to commitBlockList.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-block
+ *
+ * @param {string} blockId A 64-byte value that is base64-encoded
+ * @param {HttpRequestBody} body Data to upload to the staging area.
+ * @param {number} contentLength Number of bytes to upload.
+ * @param {BlockBlobStageBlockOptions} [options] Options to the Block Blob Stage Block operation.
+ * @returns {Promise} Response data for the Block Blob Stage Block operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.stageBlock = function (blockId, body, contentLength, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_25;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlockBlobClient-stageBlock", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blockBlobContext.stageBlock(blockId, contentLength, body, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ onUploadProgress: options.onProgress,
+ transactionalContentMD5: options.transactionalContentMD5,
+ transactionalContentCrc64: options.transactionalContentCrc64,
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_25 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_25.message
+ });
+ throw e_25;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * The Stage Block From URL operation creates a new block to be committed as part
+ * of a blob where the contents are read from a URL.
+ * This API is available starting in version 2018-03-28.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url
+ *
+ * @param {string} blockId A 64-byte value that is base64-encoded
+ * @param {string} sourceURL Specifies the URL of the blob. The value
+ * may be a URL of up to 2 KB in length that specifies a blob.
+ * The value should be URL-encoded as it would appear
+ * in a request URI. The source blob must either be public
+ * or must be authenticated via a shared access signature.
+ * If the source blob is public, no authentication is required
+ * to perform the operation. Here are some examples of source object URLs:
+ * - https://myaccount.blob.core.windows.net/mycontainer/myblob
+ * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
+ * @param {number} [offset] From which position of the blob to download, >= 0
+ * @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined
+ * @param {BlockBlobStageBlockFromURLOptions} [options={}] Options to the Block Blob Stage Block From URL operation.
+ * @returns {Promise} Response data for the Block Blob Stage Block From URL operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.stageBlockFromURL = function (blockId, sourceURL, offset, count, options) {
+ if (offset === void 0) { offset = 0; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_26;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlockBlobClient-stageBlockFromURL", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ sourceContentMD5: options.sourceContentMD5,
+ sourceContentCrc64: options.sourceContentCrc64,
+ sourceRange: offset === 0 && !count ? undefined : rangeToString({ offset: offset, count: count }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_26 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_26.message
+ });
+ throw e_26;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Writes a blob by specifying the list of block IDs that make up the blob.
+ * In order to be written as part of a blob, a block must have been successfully written
+ * to the server in a prior {@link stageBlock} operation. You can call {@link commitBlockList} to
+ * update a blob by uploading only those blocks that have changed, then committing the new and existing
+ * blocks together. Any blocks not specified in the block list and permanently deleted.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-block-list
+ *
+ * @param {string[]} blocks Array of 64-byte value that is base64-encoded
+ * @param {BlockBlobCommitBlockListOptions} [options] Options to the Block Blob Commit Block List operation.
+ * @returns {Promise} Response data for the Block Blob Commit Block List operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.commitBlockList = function (blocks, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_27;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("BlockBlobClient-commitBlockList", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.blockBlobContext.commitBlockList({ latest: blocks }, {
+ abortSignal: options.abortSignal,
+ blobHTTPHeaders: options.blobHTTPHeaders,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ tier: toAccessTier(options.tier),
+ blobTagsString: toBlobTagsString(options.tags),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_27 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_27.message
+ });
+ throw e_27;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns the list of blocks that have been uploaded as part of a block blob
+ * using the specified block list filter.
+ * @see https://docs.microsoft.com/rest/api/storageservices/get-block-list
+ *
+ * @param {BlockListType} listType Specifies whether to return the list of committed blocks,
+ * the list of uncommitted blocks, or both lists together.
+ * @param {BlockBlobGetBlockListOptions} [options] Options to the Block Blob Get Block List operation.
+ * @returns {Promise} Response data for the Block Blob Get Block List operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.getBlockList = function (listType, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, res, e_28;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("BlockBlobClient-getBlockList", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.blockBlobContext.getBlockList(listType, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2:
+ res = _c.sent();
+ if (!res.committedBlocks) {
+ res.committedBlocks = [];
+ }
+ if (!res.uncommittedBlocks) {
+ res.uncommittedBlocks = [];
+ }
+ return [2 /*return*/, res];
+ case 3:
+ e_28 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_28.message
+ });
+ throw e_28;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ // High level functions
+ /**
+ * ONLY AVAILABLE IN BROWSERS.
+ *
+ * Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.
+ *
+ * When buffer length <= 256MB, this method will use 1 upload call to finish the upload.
+ * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call
+ * {@link commitBlockList} to commit the block list.
+ *
+ * @export
+ * @param {Blob | ArrayBuffer | ArrayBufferView} browserData Blob, File, ArrayBuffer or ArrayBufferView
+ * @param {BlockBlobParallelUploadOptions} [options] Options to upload browser data.
+ * @returns {Promise} Response data for the Blob Upload operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.uploadBrowserData = function (browserData, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, browserBlob_1, e_29;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlockBlobClient-uploadBrowserData", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ browserBlob_1 = new Blob([browserData]);
+ return [4 /*yield*/, this.uploadSeekableBlob(function (offset, size) {
+ return browserBlob_1.slice(offset, offset + size);
+ }, browserBlob_1.size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_29 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_29.message
+ });
+ throw e_29;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * ONLY AVAILABLE IN BROWSERS.
+ *
+ * Uploads a browser {@link Blob} object to block blob. Requires a blobFactory as the data source,
+ * which need to return a {@link Blob} object with the offset and size provided.
+ *
+ * When buffer length <= 256MB, this method will use 1 upload call to finish the upload.
+ * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList
+ * to commit the block list.
+ *
+ * @param {(offset: number, size: number) => Blob} blobFactory
+ * @param {number} size size of the data to upload.
+ * @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
+ * @returns {Promise} Response data for the Blob Upload operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.uploadSeekableBlob = function (blobFactory, size, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, numBlocks_1, blockList_1, blockIDPrefix_1, transferProgress_2, batch, _loop_2, i, e_30;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.blockSize) {
+ options.blockSize = 0;
+ }
+ if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
+ throw new RangeError("blockSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES);
+ }
+ if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {
+ options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;
+ }
+ if (options.maxSingleShotSize < 0 ||
+ options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {
+ throw new RangeError("maxSingleShotSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES);
+ }
+ if (options.blockSize === 0) {
+ if (size > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES * BLOCK_BLOB_MAX_BLOCKS) {
+ throw new RangeError(size + " is too larger to upload to a block blob.");
+ }
+ if (size > options.maxSingleShotSize) {
+ options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);
+ if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {
+ options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
+ }
+ }
+ }
+ if (!options.blobHTTPHeaders) {
+ options.blobHTTPHeaders = {};
+ }
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("BlockBlobClient-UploadSeekableBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 5, 6, 7]);
+ if (!(size <= options.maxSingleShotSize)) return [3 /*break*/, 3];
+ return [4 /*yield*/, this.upload(blobFactory(0, size), size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ numBlocks_1 = Math.floor((size - 1) / options.blockSize) + 1;
+ if (numBlocks_1 > BLOCK_BLOB_MAX_BLOCKS) {
+ throw new RangeError("The buffer's size is too big or the BlockSize is too small;" +
+ ("the number of blocks must be <= " + BLOCK_BLOB_MAX_BLOCKS));
+ }
+ blockList_1 = [];
+ blockIDPrefix_1 = coreHttp.generateUuid();
+ transferProgress_2 = 0;
+ batch = new Batch(options.concurrency);
+ _loop_2 = function (i) {
+ batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var blockID, start, end, contentLength;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ blockID = generateBlockID(blockIDPrefix_1, i);
+ start = options.blockSize * i;
+ end = i === numBlocks_1 - 1 ? size : start + options.blockSize;
+ contentLength = end - start;
+ blockList_1.push(blockID);
+ return [4 /*yield*/, this.stageBlock(blockID, blobFactory(start, contentLength), contentLength, {
+ abortSignal: options.abortSignal,
+ conditions: options.conditions,
+ encryptionScope: options.encryptionScope,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 1:
+ _a.sent();
+ // Update progress after block is successfully uploaded to server, in case of block trying
+ // TODO: Hook with convenience layer progress event in finer level
+ transferProgress_2 += contentLength;
+ if (options.onProgress) {
+ options.onProgress({
+ loadedBytes: transferProgress_2
+ });
+ }
+ return [2 /*return*/];
+ }
+ });
+ }); });
+ };
+ for (i = 0; i < numBlocks_1; i++) {
+ _loop_2(i);
+ }
+ return [4 /*yield*/, batch.do()];
+ case 4:
+ _b.sent();
+ return [2 /*return*/, this.commitBlockList(blockList_1, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 5:
+ e_30 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_30.message
+ });
+ throw e_30;
+ case 6:
+ span.end();
+ return [7 /*endfinally*/];
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Uploads a local file in blocks to a block blob.
+ *
+ * When file size <= 256MB, this method will use 1 upload call to finish the upload.
+ * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList
+ * to commit the block list.
+ *
+ * @param {string} filePath Full path of local file
+ * @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
+ * @returns {(Promise)} Response data for the Blob Upload operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.uploadFile = function (filePath, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, size, e_31;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlockBlobClient-uploadFile", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 4, 5, 6]);
+ return [4 /*yield*/, fsStat(filePath)];
+ case 2:
+ size = (_b.sent()).size;
+ return [4 /*yield*/, this.uploadResetableStream(function (offset, count) {
+ return fsCreateReadStream(filePath, {
+ autoClose: true,
+ end: count ? offset + count - 1 : Infinity,
+ start: offset
+ });
+ }, size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 3: return [2 /*return*/, _b.sent()];
+ case 4:
+ e_31 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_31.message
+ });
+ throw e_31;
+ case 5:
+ span.end();
+ return [7 /*endfinally*/];
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Uploads a Node.js Readable stream into block blob.
+ *
+ * PERFORMANCE IMPROVEMENT TIPS:
+ * * Input stream highWaterMark is better to set a same value with bufferSize
+ * parameter, which will avoid Buffer.concat() operations.
+ *
+ * @param {Readable} stream Node.js Readable stream
+ * @param {number} bufferSize Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB
+ * @param {number} maxConcurrency Max concurrency indicates the max number of buffers that can be allocated,
+ * positive correlation with max uploading concurrency. Default value is 5
+ * @param {BlockBlobUploadStreamOptions} [options] Options to Upload Stream to Block Blob operation.
+ * @returns {Promise} Response data for the Blob Upload operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.uploadStream = function (stream, bufferSize, maxConcurrency, options) {
+ if (bufferSize === void 0) { bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES; }
+ if (maxConcurrency === void 0) { maxConcurrency = 5; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, blockNum_1, blockIDPrefix_2, transferProgress_3, blockList_2, scheduler, e_32;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.blobHTTPHeaders) {
+ options.blobHTTPHeaders = {};
+ }
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("BlockBlobClient-uploadStream", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 4, 5, 6]);
+ blockNum_1 = 0;
+ blockIDPrefix_2 = coreHttp.generateUuid();
+ transferProgress_3 = 0;
+ blockList_2 = [];
+ scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, function (body, length) { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var blockID;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ blockID = generateBlockID(blockIDPrefix_2, blockNum_1);
+ blockList_2.push(blockID);
+ blockNum_1++;
+ return [4 /*yield*/, this.stageBlock(blockID, body, length, {
+ conditions: options.conditions,
+ encryptionScope: options.encryptionScope,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 1:
+ _a.sent();
+ // Update progress after block is successfully uploaded to server, in case of block trying
+ transferProgress_3 += length;
+ if (options.onProgress) {
+ options.onProgress({ loadedBytes: transferProgress_3 });
+ }
+ return [2 /*return*/];
+ }
+ });
+ }); },
+ // concurrency should set a smaller value than maxConcurrency, which is helpful to
+ // reduce the possibility when a outgoing handler waits for stream data, in
+ // this situation, outgoing handlers are blocked.
+ // Outgoing queue shouldn't be empty.
+ Math.ceil((maxConcurrency / 4) * 3));
+ return [4 /*yield*/, scheduler.do()];
+ case 2:
+ _b.sent();
+ return [4 /*yield*/, this.commitBlockList(blockList_2, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 3: return [2 /*return*/, _b.sent()];
+ case 4:
+ e_32 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_32.message
+ });
+ throw e_32;
+ case 5:
+ span.end();
+ return [7 /*endfinally*/];
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Accepts a Node.js Readable stream factory, and uploads in blocks to a block blob.
+ * The Readable stream factory must returns a Node.js Readable stream starting from the offset defined. The offset
+ * is the offset in the block blob to be uploaded.
+ *
+ * When buffer length <= 256MB, this method will use 1 upload call to finish the upload.
+ * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList}
+ * to commit the block list.
+ *
+ * @export
+ * @param {(offset: number) => NodeJS.ReadableStream} streamFactory Returns a Node.js Readable stream starting
+ * from the offset defined
+ * @param {number} size Size of the block blob
+ * @param {BlockBlobParallelUploadOptions} [options] Options to Upload to Block Blob operation.
+ * @returns {(Promise)} Response data for the Blob Upload operation.
+ * @memberof BlockBlobClient
+ */
+ BlockBlobClient.prototype.uploadResetableStream = function (streamFactory, size, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, numBlocks_2, blockList_3, blockIDPrefix_3, transferProgress_4, batch, _loop_3, i, e_33;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.blockSize) {
+ options.blockSize = 0;
+ }
+ if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
+ throw new RangeError("blockSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES);
+ }
+ if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {
+ options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;
+ }
+ if (options.maxSingleShotSize < 0 ||
+ options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) {
+ throw new RangeError("maxSingleShotSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES);
+ }
+ if (options.blockSize === 0) {
+ if (size > BLOCK_BLOB_MAX_BLOCKS * BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {
+ throw new RangeError(size + " is too larger to upload to a block blob.");
+ }
+ if (size > options.maxSingleShotSize) {
+ options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);
+ if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {
+ options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;
+ }
+ }
+ }
+ if (!options.blobHTTPHeaders) {
+ options.blobHTTPHeaders = {};
+ }
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("BlockBlobClient-uploadResetableStream", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 6, 7, 8]);
+ if (!(size <= options.maxSingleShotSize)) return [3 /*break*/, 3];
+ return [4 /*yield*/, this.upload(function () { return streamFactory(0); }, size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ numBlocks_2 = Math.floor((size - 1) / options.blockSize) + 1;
+ if (numBlocks_2 > BLOCK_BLOB_MAX_BLOCKS) {
+ throw new RangeError("The buffer's size is too big or the BlockSize is too small;" +
+ ("the number of blocks must be <= " + BLOCK_BLOB_MAX_BLOCKS));
+ }
+ blockList_3 = [];
+ blockIDPrefix_3 = coreHttp.generateUuid();
+ transferProgress_4 = 0;
+ batch = new Batch(options.concurrency);
+ _loop_3 = function (i) {
+ batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ var blockID, start, end, contentLength;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ blockID = generateBlockID(blockIDPrefix_3, i);
+ start = options.blockSize * i;
+ end = i === numBlocks_2 - 1 ? size : start + options.blockSize;
+ contentLength = end - start;
+ blockList_3.push(blockID);
+ return [4 /*yield*/, this.stageBlock(blockID, function () { return streamFactory(start, contentLength); }, contentLength, {
+ abortSignal: options.abortSignal,
+ conditions: options.conditions,
+ encryptionScope: options.encryptionScope,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 1:
+ _a.sent();
+ // Update progress after block is successfully uploaded to server, in case of block trying
+ transferProgress_4 += contentLength;
+ if (options.onProgress) {
+ options.onProgress({ loadedBytes: transferProgress_4 });
+ }
+ return [2 /*return*/];
+ }
+ });
+ }); });
+ };
+ for (i = 0; i < numBlocks_2; i++) {
+ _loop_3(i);
+ }
+ return [4 /*yield*/, batch.do()];
+ case 4:
+ _b.sent();
+ return [4 /*yield*/, this.commitBlockList(blockList_3, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 5: return [2 /*return*/, _b.sent()];
+ case 6:
+ e_33 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_33.message
+ });
+ throw e_33;
+ case 7:
+ span.end();
+ return [7 /*endfinally*/];
+ case 8: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlockBlobClient;
+}(BlobClient));
+/**
+ * PageBlobClient defines a set of operations applicable to page blobs.
+ *
+ * @export
+ * @class PageBlobClient
+ * @extends {BlobClient}
+ */
+var PageBlobClient = /** @class */ (function (_super) {
+ tslib.__extends(PageBlobClient, _super);
+ function PageBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) {
+ var _this = this;
+ // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead.
+ // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options);
+ var pipeline;
+ var url;
+ options = options || {};
+ if (credentialOrPipelineOrContainerName instanceof Pipeline) {
+ // (url: string, pipeline: Pipeline)
+ url = urlOrConnectionString;
+ pipeline = credentialOrPipelineOrContainerName;
+ }
+ else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
+ credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ url = urlOrConnectionString;
+ options = blobNameOrOptions;
+ pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
+ }
+ else if (!credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName !== "string") {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ // The second parameter is undefined. Use anonymous credential.
+ url = urlOrConnectionString;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else if (credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName === "string" &&
+ blobNameOrOptions &&
+ typeof blobNameOrOptions === "string") {
+ // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
+ var containerName = credentialOrPipelineOrContainerName;
+ var blobName = blobNameOrOptions;
+ var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName));
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ pipeline = newPipeline(sharedKeyCredential, options);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ url =
+ appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) +
+ "?" +
+ extractedCreds.accountSas;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ }
+ else {
+ throw new Error("Expecting non-empty strings for containerName and blobName parameters");
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ _this.pageBlobContext = new PageBlob(_this.storageClientContext);
+ return _this;
+ }
+ /**
+ * Creates a new PageBlobClient object identical to the source but with the
+ * specified snapshot timestamp.
+ * Provide "" will remove the snapshot and return a Client to the base blob.
+ *
+ * @param {string} snapshot The snapshot timestamp.
+ * @returns {PageBlobClient} A new PageBlobClient object identical to the source but with the specified snapshot timestamp.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.withSnapshot = function (snapshot) {
+ return new PageBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline);
+ };
+ /**
+ * Creates a page blob of the specified length. Call uploadPages to upload data
+ * data to a page blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-blob
+ *
+ * @param {number} size size of the page blob.
+ * @param {PageBlobCreateOptions} [options] Options to the Page Blob Create operation.
+ * @returns {Promise} Response data for the Page Blob Create operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.create = function (size, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_34;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-create", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.pageBlobContext.create(0, size, {
+ abortSignal: options.abortSignal,
+ blobHTTPHeaders: options.blobHTTPHeaders,
+ blobSequenceNumber: options.blobSequenceNumber,
+ leaseAccessConditions: options.conditions,
+ metadata: options.metadata,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ tier: toAccessTier(options.tier),
+ blobTagsString: toBlobTagsString(options.tags),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_34 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_34.message
+ });
+ throw e_34;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {number} size size of the page blob.
+ * @param {PageBlobCreateIfNotExistsOptions} [options]
+ * @returns {Promise}
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.createIfNotExists = function (size, options) {
+ var _a, _b;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _c, span, spanOptions, conditions, res, e_35;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _c = createSpan("PageBlobClient-createIfNotExists", options.tracingOptions), span = _c.span, spanOptions = _c.spanOptions;
+ _d.label = 1;
+ case 1:
+ _d.trys.push([1, 3, 4, 5]);
+ conditions = { ifNoneMatch: ETagAny };
+ return [4 /*yield*/, this.create(size, tslib.__assign(tslib.__assign({}, options), { conditions: conditions, tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ res = _d.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
+ })];
+ case 3:
+ e_35 = _d.sent();
+ if (((_a = e_35.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") {
+ span.setStatus({
+ code: api.CanonicalCode.ALREADY_EXISTS,
+ message: "Expected exception when creating a blob only if it does not already exist."
+ });
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_35.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_35.response })];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_35.message
+ });
+ throw e_35;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-page
+ *
+ * @param {HttpRequestBody} body Data to upload
+ * @param {number} offset Offset of destination page blob
+ * @param {number} count Content length of the body, also number of bytes to be uploaded
+ * @param {PageBlobUploadPagesOptions} [options] Options to the Page Blob Upload Pages operation.
+ * @returns {Promise} Response data for the Page Blob Upload Pages operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.uploadPages = function (body, offset, count, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_36;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-uploadPages", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.pageBlobContext.uploadPages(body, count, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ onUploadProgress: options.onProgress,
+ range: rangeToString({ offset: offset, count: count }),
+ sequenceNumberAccessConditions: options.conditions,
+ transactionalContentMD5: options.transactionalContentMD5,
+ transactionalContentCrc64: options.transactionalContentCrc64,
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_36 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_36.message
+ });
+ throw e_36;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * The Upload Pages operation writes a range of pages to a page blob where the
+ * contents are read from a URL.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-page-from-url
+ *
+ * @param {string} sourceURL Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication
+ * @param {number} sourceOffset The source offset to copy from. Pass 0 to copy from the beginning of source page blob
+ * @param {number} destOffset Offset of destination page blob
+ * @param {number} count Number of bytes to be uploaded from source page blob
+ * @param {PageBlobUploadPagesFromURLOptions} [options={}]
+ * @returns {Promise}
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.uploadPagesFromURL = function (sourceURL, sourceOffset, destOffset, count, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_37;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ options.sourceConditions = options.sourceConditions || {};
+ _b = createSpan("PageBlobClient-uploadPagesFromURL", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);
+ return [4 /*yield*/, this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({ offset: sourceOffset, count: count }), 0, rangeToString({ offset: destOffset, count: count }), {
+ abortSignal: options.abortSignal,
+ sourceContentMD5: options.sourceContentMD5,
+ sourceContentCrc64: options.sourceContentCrc64,
+ leaseAccessConditions: options.conditions,
+ sequenceNumberAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__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,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_37 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_37.message
+ });
+ throw e_37;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Frees the specified pages from the page blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-page
+ *
+ * @param {number} [offset] Starting byte position of the pages to clear.
+ * @param {number} [count] Number of bytes to clear.
+ * @param {PageBlobClearPagesOptions} [options] Options to the Page Blob Clear Pages operation.
+ * @returns {Promise} Response data for the Page Blob Clear Pages operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.clearPages = function (offset, count, options) {
+ var _a;
+ if (offset === void 0) { offset = 0; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_38;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-clearPages", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext.clearPages(0, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ range: rangeToString({ offset: offset, count: count }),
+ sequenceNumberAccessConditions: options.conditions,
+ cpkInfo: options.customerProvidedKey,
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_38 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_38.message
+ });
+ throw e_38;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns the list of valid page ranges for a page blob or snapshot of a page blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
+ *
+ * @param {number} [offset] Starting byte position of the page ranges.
+ * @param {number} [count] Number of bytes to get.
+ * @param {PageBlobGetPageRangesOptions} [options] Options to the Page Blob Get Ranges operation.
+ * @returns {Promise} Response data for the Page Blob Get Ranges operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.getPageRanges = function (offset, count, options) {
+ var _a;
+ if (offset === void 0) { offset = 0; }
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_39;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-getPageRanges", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext
+ .getPageRanges({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ range: rangeToString({ offset: offset, count: count }),
+ spanOptions: spanOptions
+ })
+ .then(rangeResponseFromModel)];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_39 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_39.message
+ });
+ throw e_39;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Gets the collection of page ranges that differ between a specified snapshot and this page blob.
+ * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
+ *
+ * @param {number} offset Starting byte position of the page blob
+ * @param {number} count Number of bytes to get ranges diff.
+ * @param {string} prevSnapshot Timestamp of snapshot to retrieve the difference.
+ * @param {PageBlobGetPageRangesDiffOptions} [options] Options to the Page Blob Get Page Ranges Diff operation.
+ * @returns {Promise} Response data for the Page Blob Get Page Range Diff operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.getPageRangesDiff = function (offset, count, prevSnapshot, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_40;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-getPageRangesDiff", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext
+ .getPageRangesDiff({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ prevsnapshot: prevSnapshot,
+ range: rangeToString({ offset: offset, count: count }),
+ spanOptions: spanOptions
+ })
+ .then(rangeResponseFromModel)];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_40 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_40.message
+ });
+ throw e_40;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Gets the collection of page ranges that differ between a specified snapshot and this page blob for managed disks.
+ * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges
+ *
+ * @param {number} offset Starting byte position of the page blob
+ * @param {number} count Number of bytes to get ranges diff.
+ * @param {string} prevSnapshotUrl URL of snapshot to retrieve the difference.
+ * @param {PageBlobGetPageRangesDiffOptions} [options] Options to the Page Blob Get Page Ranges Diff operation.
+ * @returns {Promise} Response data for the Page Blob Get Page Range Diff operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.getPageRangesDiffForManagedDisks = function (offset, count, prevSnapshotUrl, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_41;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-GetPageRangesDiffForManagedDisks", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext
+ .getPageRangesDiff({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ prevSnapshotUrl: prevSnapshotUrl,
+ range: rangeToString({ offset: offset, count: count }),
+ spanOptions: spanOptions
+ })
+ .then(rangeResponseFromModel)];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_41 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_41.message
+ });
+ throw e_41;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Resizes the page blob to the specified size (which must be a multiple of 512).
+ * @see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties
+ *
+ * @param {number} size Target size
+ * @param {PageBlobResizeOptions} [options] Options to the Page Blob Resize operation.
+ * @returns {Promise} Response data for the Page Blob Resize operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.resize = function (size, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_42;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-resize", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext.resize(size, {
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ encryptionScope: options.encryptionScope,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_42 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_42.message
+ });
+ throw e_42;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets a page blob's sequence number.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties
+ *
+ * @param {SequenceNumberActionType} sequenceNumberAction Indicates how the service should modify the blob's sequence number.
+ * @param {number} [sequenceNumber] Required if sequenceNumberAction is max or update
+ * @param {PageBlobUpdateSequenceNumberOptions} [options] Options to the Page Blob Update Sequence Number operation.
+ * @returns {Promise} Response data for the Page Blob Update Sequence Number operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.updateSequenceNumber = function (sequenceNumberAction, sequenceNumber, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_43;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _b = createSpan("PageBlobClient-updateSequenceNumber", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, {
+ abortSignal: options.abortSignal,
+ blobSequenceNumber: sequenceNumber,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_43 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_43.message
+ });
+ throw e_43;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Begins an operation to start an incremental copy from one page blob's snapshot to this page blob.
+ * The snapshot is copied such that only the differential changes between the previously
+ * copied snapshot are transferred to the destination.
+ * The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual.
+ * @see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob
+ * @see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots
+ *
+ * @param {string} copySource Specifies the name of the source page blob snapshot. For example,
+ * https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=
+ * @param {PageBlobStartCopyIncrementalOptions} [options] Options to the Page Blob Copy Incremental operation.
+ * @returns {Promise} Response data for the Page Blob Copy Incremental operation.
+ * @memberof PageBlobClient
+ */
+ PageBlobClient.prototype.startCopyIncremental = function (copySource, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _b, span, spanOptions, e_44;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ _b = createSpan("PageBlobClient-startCopyIncremental", options.tracingOptions), span = _b.span, spanOptions = _b.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.pageBlobContext.copyIncremental(copySource, {
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_44 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_44.message
+ });
+ throw e_44;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return PageBlobClient;
+}(BlobClient));
+/**
+ * A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}.
+ *
+ * @export
+ * @class BlobLeaseClient
+ */
+var BlobLeaseClient = /** @class */ (function () {
+ /**
+ * Creates an instance of BlobLeaseClient.
+ * @param {(ContainerClient | BlobClient)} client The client to make the lease operation requests.
+ * @param {string} leaseId Initial proposed lease id.
+ * @memberof BlobLeaseClient
+ */
+ function BlobLeaseClient(client, leaseId) {
+ var clientContext = new StorageClientContext(client.url, client.pipeline.toServiceClientOptions());
+ this._url = client.url;
+ if (client instanceof ContainerClient) {
+ this._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;
+ }
+ Object.defineProperty(BlobLeaseClient.prototype, "leaseId", {
+ /**
+ * Gets the lease Id.
+ *
+ * @readonly
+ * @memberof BlobLeaseClient
+ * @type {string}
+ */
+ get: function () {
+ return this._leaseId;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(BlobLeaseClient.prototype, "url", {
+ /**
+ * Gets the url.
+ *
+ * @readonly
+ * @memberof BlobLeaseClient
+ * @type {string}
+ */
+ get: function () {
+ return this._url;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Establishes and manages a lock on a container for delete operations, or on a blob
+ * for write and delete operations.
+ * The lock duration can be 15 to 60 seconds, or can be infinite.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
+ * and
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
+ *
+ * @param {number} duration Must be between 15 to 60 seconds, or infinite (-1)
+ * @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
+ * @returns {Promise} Response data for acquire lease operation.
+ * @memberof BlobLeaseClient
+ */
+ BlobLeaseClient.prototype.acquireLease = function (duration, options) {
+ var _a, _b, _c, _d, _e, _f;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _g, span, spanOptions, e_45;
+ return tslib.__generator(this, function (_h) {
+ switch (_h.label) {
+ case 0:
+ _g = createSpan("BlobLeaseClient-acquireLease", options.tracingOptions), span = _g.span, spanOptions = _g.spanOptions;
+ 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.");
+ }
+ _h.label = 1;
+ case 1:
+ _h.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this._containerOrBlobOperation.acquireLease({
+ abortSignal: options.abortSignal,
+ duration: duration,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }),
+ proposedLeaseId: this._leaseId,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _h.sent()];
+ case 3:
+ e_45 = _h.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_45.message
+ });
+ throw e_45;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * To change the ID of the lease.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
+ * and
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
+ *
+ * @param {string} proposedLeaseId the proposed new lease Id.
+ * @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
+ * @returns {Promise} Response data for change lease operation.
+ * @memberof BlobLeaseClient
+ */
+ BlobLeaseClient.prototype.changeLease = function (proposedLeaseId, options) {
+ var _a, _b, _c, _d, _e, _f;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _g, span, spanOptions, response, e_46;
+ return tslib.__generator(this, function (_h) {
+ switch (_h.label) {
+ case 0:
+ _g = createSpan("BlobLeaseClient-changeLease", options.tracingOptions), span = _g.span, spanOptions = _g.spanOptions;
+ 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.");
+ }
+ _h.label = 1;
+ case 1:
+ _h.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, {
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2:
+ response = _h.sent();
+ this._leaseId = proposedLeaseId;
+ return [2 /*return*/, response];
+ case 3:
+ e_46 = _h.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_46.message
+ });
+ throw e_46;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * To free the lease if it is no longer needed so that another client may
+ * immediately acquire a lease against the container or the blob.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
+ * and
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
+ *
+ * @param {LeaseOperationOptions} [options={}] option to configure lease management operations.
+ * @returns {Promise} Response data for release lease operation.
+ * @memberof BlobLeaseClient
+ */
+ BlobLeaseClient.prototype.releaseLease = function (options) {
+ var _a, _b, _c, _d, _e, _f;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _g, span, spanOptions, e_47;
+ return tslib.__generator(this, function (_h) {
+ switch (_h.label) {
+ case 0:
+ _g = createSpan("BlobLeaseClient-releaseLease", options.tracingOptions), span = _g.span, spanOptions = _g.spanOptions;
+ 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.");
+ }
+ _h.label = 1;
+ case 1:
+ _h.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this._containerOrBlobOperation.releaseLease(this._leaseId, {
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _h.sent()];
+ case 3:
+ e_47 = _h.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_47.message
+ });
+ throw e_47;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * To renew the lease.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
+ * and
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
+ *
+ * @param {LeaseOperationOptions} [options={}] Optional option to configure lease management operations.
+ * @returns {Promise} Response data for renew lease operation.
+ * @memberof BlobLeaseClient
+ */
+ BlobLeaseClient.prototype.renewLease = function (options) {
+ var _a, _b, _c, _d, _e, _f;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _g, span, spanOptions, e_48;
+ return tslib.__generator(this, function (_h) {
+ switch (_h.label) {
+ case 0:
+ _g = createSpan("BlobLeaseClient-renewLease", options.tracingOptions), span = _g.span, spanOptions = _g.spanOptions;
+ 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.");
+ }
+ _h.label = 1;
+ case 1:
+ _h.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this._containerOrBlobOperation.renewLease(this._leaseId, {
+ abortSignal: options.abortSignal,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }),
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _h.sent()];
+ case 3:
+ e_48 = _h.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_48.message
+ });
+ throw e_48;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * To end the lease but ensure that another client cannot acquire a new lease
+ * until the current lease period has expired.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container
+ * and
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob
+ *
+ * @static
+ * @param {number} breakPeriod Break period
+ * @param {LeaseOperationOptions} [options={}] Optional options to configure lease management operations.
+ * @returns {Promise} Response data for break lease operation.
+ * @memberof BlobLeaseClient
+ */
+ BlobLeaseClient.prototype.breakLease = function (breakPeriod, options) {
+ var _a, _b, _c, _d, _e, _f;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _g, span, spanOptions, operationOptions, e_49;
+ return tslib.__generator(this, function (_h) {
+ switch (_h.label) {
+ case 0:
+ _g = createSpan("BlobLeaseClient-breakLease", options.tracingOptions), span = _g.span, spanOptions = _g.spanOptions;
+ 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.");
+ }
+ _h.label = 1;
+ case 1:
+ _h.trys.push([1, 3, 4, 5]);
+ operationOptions = {
+ abortSignal: options.abortSignal,
+ breakPeriod: breakPeriod,
+ modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }),
+ spanOptions: spanOptions
+ };
+ return [4 /*yield*/, this._containerOrBlobOperation.breakLease(operationOptions)];
+ case 2: return [2 /*return*/, _h.sent()];
+ case 3:
+ e_49 = _h.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_49.message
+ });
+ throw e_49;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlobLeaseClient;
+}());
+/**
+ * A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs.
+ *
+ * @export
+ * @class ContainerClient
+ */
+var ContainerClient = /** @class */ (function (_super) {
+ tslib.__extends(ContainerClient, _super);
+ function ContainerClient(urlOrConnectionString, credentialOrPipelineOrContainerName, options) {
+ var _this = this;
+ var pipeline;
+ var url;
+ options = options || {};
+ if (credentialOrPipelineOrContainerName instanceof Pipeline) {
+ // (url: string, pipeline: Pipeline)
+ url = urlOrConnectionString;
+ pipeline = credentialOrPipelineOrContainerName;
+ }
+ else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) ||
+ credentialOrPipelineOrContainerName instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ url = urlOrConnectionString;
+ pipeline = newPipeline(credentialOrPipelineOrContainerName, options);
+ }
+ else if (!credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName !== "string") {
+ // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions)
+ // The second parameter is undefined. Use anonymous credential.
+ url = urlOrConnectionString;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else if (credentialOrPipelineOrContainerName &&
+ typeof credentialOrPipelineOrContainerName === "string") {
+ // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions)
+ var containerName = credentialOrPipelineOrContainerName;
+ var extractedCreds = extractConnectionStringParts(urlOrConnectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName));
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ pipeline = newPipeline(sharedKeyCredential, options);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ url =
+ appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)) +
+ "?" +
+ extractedCreds.accountSas;
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ }
+ else {
+ throw new Error("Expecting non-empty strings for containerName parameter");
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ _this._containerName = _this.getContainerNameFromUrl();
+ _this.containerContext = new Container(_this.storageClientContext);
+ return _this;
+ }
+ Object.defineProperty(ContainerClient.prototype, "containerName", {
+ /**
+ * The name of the container.
+ */
+ get: function () {
+ return this._containerName;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Creates a new container under the specified account. If the container with
+ * the same name already exists, the operation fails.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container
+ *
+ * @param {ContainerCreateOptions} [options] Options to Container Create operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const containerClient = blobServiceClient.getContainerClient("");
+ * const createContainerResponse = await containerClient.create();
+ * console.log("Container was created successfully", createContainerResponse.requestId);
+ * ```
+ */
+ ContainerClient.prototype.create = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_50;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-create", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.create(tslib.__assign(tslib.__assign({}, options), { spanOptions: spanOptions }))];
+ case 2:
+ // Spread operator in destructuring assignments,
+ // this will filter out unwanted properties from the response object into result object
+ return [2 /*return*/, _b.sent()];
+ case 3:
+ e_50 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_50.message
+ });
+ throw e_50;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {ContainerCreateOptions} [options]
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.createIfNotExists = function (options) {
+ var _a, _b;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _c, span, spanOptions, res, e_51;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _c = createSpan("ContainerClient-createIfNotExists", options.tracingOptions), span = _c.span, spanOptions = _c.spanOptions;
+ _d.label = 1;
+ case 1:
+ _d.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.create(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ res = _d.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
+ })];
+ case 3:
+ e_51 = _d.sent();
+ if (((_a = e_51.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerAlreadyExists") {
+ span.setStatus({
+ code: api.CanonicalCode.ALREADY_EXISTS,
+ message: "Expected exception when creating a container only if it does not already exist."
+ });
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_51.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_51.response })];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_51.message
+ });
+ throw e_51;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {ContainerExistsOptions} [options={}]
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.exists = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_52;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-exists", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.getProperties({
+ abortSignal: options.abortSignal,
+ tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions })
+ })];
+ case 2:
+ _b.sent();
+ return [2 /*return*/, true];
+ case 3:
+ e_52 = _b.sent();
+ if (e_52.statusCode === 404) {
+ span.setStatus({
+ code: api.CanonicalCode.NOT_FOUND,
+ message: "Expected exception when checking container existence"
+ });
+ return [2 /*return*/, false];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_52.message
+ });
+ throw e_52;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Creates a {@link BlobClient}
+ *
+ * @param {string} blobName A blob name
+ * @returns {BlobClient} A new BlobClient object for the given blob name.
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getBlobClient = function (blobName) {
+ return new BlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
+ };
+ /**
+ * Creates an {@link AppendBlobClient}
+ *
+ * @param {string} blobName An append blob name
+ * @returns {AppendBlobClient}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getAppendBlobClient = function (blobName) {
+ return new AppendBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
+ };
+ /**
+ * Creates a {@link BlockBlobClient}
+ *
+ * @param {string} blobName A block blob name
+ * @returns {BlockBlobClient}
+ * @memberof ContainerClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const content = "Hello world!";
+ *
+ * const blockBlobClient = containerClient.getBlockBlobClient("");
+ * const uploadBlobResponse = await blockBlobClient.upload(content, content.length);
+ * ```
+ */
+ ContainerClient.prototype.getBlockBlobClient = function (blobName) {
+ return new BlockBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
+ };
+ /**
+ * Creates a {@link PageBlobClient}
+ *
+ * @param {string} blobName A page blob name
+ * @returns {PageBlobClient}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getPageBlobClient = function (blobName) {
+ return new PageBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline);
+ };
+ /**
+ * Returns all user-defined metadata and system properties for the specified
+ * container. The data returned does not include the container's list of blobs.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-properties
+ *
+ * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if
+ * they originally contained uppercase characters. This differs from the metadata keys returned by
+ * the `listContainers` method of {@link BlobServiceClient} using the `includeMetadata` option, which
+ * will retain their original casing.
+ *
+ * @param {ContainerGetPropertiesOptions} [options] Options to Container Get Properties operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getProperties = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_53;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("ContainerClient-getProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.getProperties(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal }, options.conditions), { spanOptions: spanOptions }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_53 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_53.message
+ });
+ throw e_53;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Marks the specified container for deletion. The container and any blobs
+ * contained within it are later deleted during garbage collection.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container
+ *
+ * @param {ContainerDeleteMethodOptions} [options] Options to Container Delete operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.delete = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_54;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("ContainerClient-delete", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.deleteMethod({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: options.conditions,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_54 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_54.message
+ });
+ throw e_54;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {ContainerDeleteMethodOptions} [options] Options to Container Delete operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.deleteIfExists = function (options) {
+ var _a, _b;
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _c, span, spanOptions, res, e_55;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _c = createSpan("ContainerClient-deleteIfExists", options.tracingOptions), span = _c.span, spanOptions = _c.spanOptions;
+ _d.label = 1;
+ case 1:
+ _d.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ res = _d.sent();
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable
+ })];
+ case 3:
+ e_55 = _d.sent();
+ if (((_a = e_55.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerNotFound") {
+ span.setStatus({
+ code: api.CanonicalCode.NOT_FOUND,
+ message: "Expected exception when deleting a container only if it exists."
+ });
+ return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_55.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_55.response })];
+ }
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_55.message
+ });
+ throw e_55;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets one or more user-defined name-value pairs for the specified container.
+ *
+ * If no option provided, or no metadata defined in the parameter, the container
+ * metadata will be removed.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata
+ *
+ * @param {Metadata} [metadata] Replace existing metadata with this value.
+ * If no value provided the existing metadata will be removed.
+ * @param {ContainerSetMetadataOptions} [options] Options to Container Set Metadata operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.setMetadata = function (metadata, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_56;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ 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");
+ }
+ _a = createSpan("ContainerClient-setMetadata", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.setMetadata({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ metadata: metadata,
+ modifiedAccessConditions: options.conditions,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_56 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_56.message
+ });
+ throw e_56;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Gets the permissions for the specified container. The permissions indicate
+ * whether container data may be accessed publicly.
+ *
+ * WARNING: JavaScript Date will potentially lose precision when parsing startsOn and expiresOn strings.
+ * For example, new Date("2018-12-31T03:44:23.8827891Z").toISOString() will get "2018-12-31T03:44:23.882Z".
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-acl
+ *
+ * @param {ContainerGetAccessPolicyOptions} [options] Options to Container Get Access Policy operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getAccessPolicy = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, response, res, _i, response_1, identifier, accessPolicy, e_57;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!options.conditions) {
+ options.conditions = {};
+ }
+ _a = createSpan("ContainerClient-getAccessPolicy", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.getAccessPolicy({
+ abortSignal: options.abortSignal,
+ leaseAccessConditions: options.conditions,
+ spanOptions: spanOptions
+ })];
+ case 2:
+ response = _b.sent();
+ res = {
+ _response: response._response,
+ blobPublicAccess: response.blobPublicAccess,
+ date: response.date,
+ etag: response.etag,
+ errorCode: response.errorCode,
+ lastModified: response.lastModified,
+ requestId: response.requestId,
+ clientRequestId: response.clientRequestId,
+ signedIdentifiers: [],
+ version: response.version
+ };
+ for (_i = 0, response_1 = response; _i < response_1.length; _i++) {
+ identifier = response_1[_i];
+ accessPolicy = undefined;
+ if (identifier.accessPolicy) {
+ accessPolicy = {
+ permissions: identifier.accessPolicy.permissions
+ };
+ if (identifier.accessPolicy.expiresOn) {
+ accessPolicy.expiresOn = new Date(identifier.accessPolicy.expiresOn);
+ }
+ if (identifier.accessPolicy.startsOn) {
+ accessPolicy.startsOn = new Date(identifier.accessPolicy.startsOn);
+ }
+ }
+ res.signedIdentifiers.push({
+ accessPolicy: accessPolicy,
+ id: identifier.id
+ });
+ }
+ return [2 /*return*/, res];
+ case 3:
+ e_57 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_57.message
+ });
+ throw e_57;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets the permissions for the specified container. The permissions indicate
+ * whether blobs in a container may be accessed publicly.
+ *
+ * When you set permissions for a container, the existing permissions are replaced.
+ * If no access or containerAcl provided, the existing container ACL will be
+ * removed.
+ *
+ * When you establish a stored access policy on a container, it may take up to 30 seconds to take effect.
+ * During this interval, a shared access signature that is associated with the stored access policy will
+ * fail with status code 403 (Forbidden), until the access policy becomes active.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl
+ *
+ * @param {PublicAccessType} [access] The level of public access to data in the container.
+ * @param {SignedIdentifier[]} [containerAcl] Array of elements each having a unique Id and details of the access policy.
+ * @param {ContainerSetAccessPolicyOptions} [options] Options to Container Set Access Policy operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.setAccessPolicy = function (access, containerAcl, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, acl, _i, _b, identifier, e_58;
+ return tslib.__generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ options.conditions = options.conditions || {};
+ _a = createSpan("ContainerClient-setAccessPolicy", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _c.label = 1;
+ case 1:
+ _c.trys.push([1, 3, 4, 5]);
+ acl = [];
+ for (_i = 0, _b = containerAcl || []; _i < _b.length; _i++) {
+ identifier = _b[_i];
+ acl.push({
+ accessPolicy: {
+ expiresOn: identifier.accessPolicy.expiresOn
+ ? truncatedISO8061Date(identifier.accessPolicy.expiresOn)
+ : "",
+ permissions: identifier.accessPolicy.permissions,
+ startsOn: identifier.accessPolicy.startsOn
+ ? truncatedISO8061Date(identifier.accessPolicy.startsOn)
+ : ""
+ },
+ id: identifier.id
+ });
+ }
+ return [4 /*yield*/, this.containerContext.setAccessPolicy({
+ abortSignal: options.abortSignal,
+ access: access,
+ containerAcl: acl,
+ leaseAccessConditions: options.conditions,
+ modifiedAccessConditions: options.conditions,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _c.sent()];
+ case 3:
+ e_58 = _c.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_58.message
+ });
+ throw e_58;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Get a {@link BlobLeaseClient} that manages leases on the container.
+ *
+ * @param {string} [proposeLeaseId] Initial proposed lease Id.
+ * @returns {BlobLeaseClient} A new BlobLeaseClient object for managing leases on the container.
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.getBlobLeaseClient = function (proposeLeaseId) {
+ return new BlobLeaseClient(this, proposeLeaseId);
+ };
+ /**
+ * Creates a new block blob, or updates the content of an existing block blob.
+ *
+ * Updating an existing block blob overwrites any existing metadata on the blob.
+ * Partial updates are not supported; the content of the existing blob is
+ * overwritten with the new content. To perform a partial update of a block blob's,
+ * use {@link BlockBlobClient.stageBlock} and {@link BlockBlobClient.commitBlockList}.
+ *
+ * This is a non-parallel uploading method, please use {@link BlockBlobClient.uploadFile},
+ * {@link BlockBlobClient.uploadStream} or {@link BlockBlobClient.uploadBrowserData} for better
+ * performance with concurrency uploading.
+ *
+ * @see https://docs.microsoft.com/rest/api/storageservices/put-blob
+ *
+ * @param {string} blobName Name of the block blob to create or update.
+ * @param {HttpRequestBody} body Blob, string, ArrayBuffer, ArrayBufferView or a function
+ * which returns a new Readable stream whose offset is from data source beginning.
+ * @param {number} contentLength Length of body in bytes. Use Buffer.byteLength() to calculate body length for a
+ * string including non non-Base64/Hex-encoded characters.
+ * @param {BlockBlobUploadOptions} [options] Options to configure the Block Blob Upload operation.
+ * @returns {Promise<{ blockBlobClient: BlockBlobClient; response: BlockBlobUploadResponse }>} Block Blob upload response data and the corresponding BlockBlobClient instance.
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.uploadBlockBlob = function (blobName, body, contentLength, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, blockBlobClient, response, e_59;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-uploadBlockBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ blockBlobClient = this.getBlockBlobClient(blobName);
+ return [4 /*yield*/, blockBlobClient.upload(body, contentLength, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ response = _b.sent();
+ return [2 /*return*/, {
+ blockBlobClient: blockBlobClient,
+ response: response
+ }];
+ case 3:
+ e_59 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_59.message
+ });
+ throw e_59;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Marks the specified blob or snapshot for deletion. The blob is later deleted
+ * during garbage collection. Note that in order to delete a blob, you must delete
+ * all of its snapshots. You can delete both at the same time with the Delete
+ * Blob operation.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob
+ *
+ * @param {string} blobName
+ * @param {ContainerDeleteBlobOptions} [options] Options to Blob Delete operation.
+ * @returns {Promise} Block blob deletion response data.
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.deleteBlob = function (blobName, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, blobClient, e_60;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-deleteBlob", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ blobClient = this.getBlobClient(blobName);
+ if (options.versionId) {
+ blobClient = blobClient.withVersion(options.versionId);
+ }
+ return [4 /*yield*/, blobClient.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_60 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_60.message
+ });
+ throw e_60;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * listBlobFlatSegment returns a single segment of blobs starting from the
+ * specified Marker. Use an empty Marker to start enumeration from the beginning.
+ * After getting a segment, process it, and then call listBlobsFlatSegment again
+ * (passing the the previously-returned Marker) to get the next segment.
+ * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs
+ *
+ * @param {string} [marker] A string value that identifies the portion of the list to be returned with the next list operation.
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to Container List Blob Flat Segment operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listBlobFlatSegment = function (marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, response, wrappedResponse, e_61;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-listBlobFlatSegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.listBlobFlatSegment(tslib.__assign(tslib.__assign({ marker: marker }, options), { spanOptions: spanOptions }))];
+ case 2:
+ response = _b.sent();
+ wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, segment: tslib.__assign(tslib.__assign({}, response.segment), { blobItems: response.segment.blobItems.map(function (blobItemInteral) {
+ var blobItem = tslib.__assign(tslib.__assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) });
+ return blobItem;
+ }) }) });
+ return [2 /*return*/, wrappedResponse];
+ case 3:
+ e_61 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_61.message
+ });
+ throw e_61;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * listBlobHierarchySegment returns a single segment of blobs starting from
+ * the specified Marker. Use an empty Marker to start enumeration from the
+ * beginning. After getting a segment, process it, and then call listBlobsHierarchicalSegment
+ * again (passing the the previously-returned Marker) to get the next segment.
+ * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs
+ *
+ * @param {string} delimiter The character or string used to define the virtual hierarchy
+ * @param {string} [marker] A string value that identifies the portion of the list to be returned with the next list operation.
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to Container List Blob Hierarchy Segment operation.
+ * @returns {Promise}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listBlobHierarchySegment = function (delimiter, marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, response, wrappedResponse, e_62;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("ContainerClient-listBlobHierarchySegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.containerContext.listBlobHierarchySegment(delimiter, tslib.__assign(tslib.__assign({ marker: marker }, options), { spanOptions: spanOptions }))];
+ case 2:
+ response = _b.sent();
+ wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, segment: tslib.__assign(tslib.__assign({}, response.segment), { blobItems: response.segment.blobItems.map(function (blobItemInteral) {
+ var blobItem = tslib.__assign(tslib.__assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) });
+ return blobItem;
+ }) }) });
+ return [2 /*return*/, wrappedResponse];
+ case 3:
+ e_62 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_62.message
+ });
+ throw e_62;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse
+ *
+ * @private
+ * @param {string} [marker] A string value that identifies the portion of
+ * the list of blobs to be returned with the next listing operation. The
+ * operation returns the ContinuationToken value within the response body if the
+ * listing operation did not return all blobs remaining to be listed
+ * with the current page. The ContinuationToken value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
+ * @returns {AsyncIterableIterator}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listSegments = function (marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listSegments_1() {
+ var listBlobsFlatSegmentResponse;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
+ _a.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(this.listBlobFlatSegment(marker, options))];
+ case 2:
+ listBlobsFlatSegmentResponse = _a.sent();
+ marker = listBlobsFlatSegmentResponse.continuationToken;
+ return [4 /*yield*/, tslib.__await(listBlobsFlatSegmentResponse)];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
+ case 4: return [4 /*yield*/, _a.sent()];
+ case 5:
+ _a.sent();
+ _a.label = 6;
+ case 6:
+ if (marker) return [3 /*break*/, 1];
+ _a.label = 7;
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator of {@link BlobItem} objects
+ *
+ * @private
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
+ * @returns {AsyncIterableIterator}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listItems = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listItems_1() {
+ var marker, _a, _b, listBlobsFlatSegmentResponse, e_63_1;
+ var e_63, _c;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _d.trys.push([0, 7, 8, 13]);
+ _a = tslib.__asyncValues(this.listSegments(marker, options));
+ _d.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(_a.next())];
+ case 2:
+ if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6];
+ listBlobsFlatSegmentResponse = _b.value;
+ return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(listBlobsFlatSegmentResponse.segment.blobItems)))];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])];
+ case 4:
+ _d.sent();
+ _d.label = 5;
+ case 5: return [3 /*break*/, 1];
+ case 6: return [3 /*break*/, 13];
+ case 7:
+ e_63_1 = _d.sent();
+ e_63 = { error: e_63_1 };
+ return [3 /*break*/, 13];
+ case 8:
+ _d.trys.push([8, , 11, 12]);
+ if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10];
+ return [4 /*yield*/, tslib.__await(_c.call(_a))];
+ case 9:
+ _d.sent();
+ _d.label = 10;
+ case 10: return [3 /*break*/, 12];
+ case 11:
+ if (e_63) throw e_63.error;
+ return [7 /*endfinally*/];
+ case 12: return [7 /*endfinally*/];
+ case 13: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an async iterable iterator to list all the blobs
+ * under the specified account.
+ *
+ * .byPage() returns an async iterable iterator to list the blobs in pages.
+ *
+ * Example using `for await` syntax:
+ *
+ * ```js
+ * // Get the containerClient before you run these snippets,
+ * // Can be obtained from `blobServiceClient.getContainerClient("");`
+ * let i = 1;
+ * for await (const blob of containerClient.listBlobsFlat()) {
+ * console.log(`Blob ${i++}: ${blob.name}`);
+ * }
+ * ```
+ *
+ * Example using `iter.next()`:
+ *
+ * ```js
+ * let i = 1;
+ * let iter = containerClient.listBlobsFlat();
+ * let blobItem = await iter.next();
+ * while (!blobItem.done) {
+ * console.log(`Blob ${i++}: ${blobItem.value.name}`);
+ * blobItem = await iter.next();
+ * }
+ * ```
+ *
+ * Example using `byPage()`:
+ *
+ * ```js
+ * // passing optional maxPageSize in the page settings
+ * let i = 1;
+ * for await (const response of containerClient.listBlobsFlat().byPage({ maxPageSize: 20 })) {
+ * for (const blob of response.segment.blobItems) {
+ * console.log(`Blob ${i++}: ${blob.name}`);
+ * }
+ * }
+ * ```
+ *
+ * Example using paging with a marker:
+ *
+ * ```js
+ * let i = 1;
+ * let iterator = containerClient.listBlobsFlat().byPage({ maxPageSize: 2 });
+ * let response = (await iterator.next()).value;
+ *
+ * // Prints 2 blob names
+ * for (const blob of response.segment.blobItems) {
+ * console.log(`Blob ${i++}: ${blob.name}`);
+ * }
+ *
+ * // Gets next marker
+ * let marker = response.continuationToken;
+ *
+ * // Passing next marker as continuationToken
+ *
+ * iterator = containerClient.listBlobsFlat().byPage({ continuationToken: marker, maxPageSize: 10 });
+ * response = (await iterator.next()).value;
+ *
+ * // Prints 10 blob names
+ * for (const blob of response.segment.blobItems) {
+ * console.log(`Blob ${i++}: ${blob.name}`);
+ * }
+ * ```
+ *
+ * @param {ContainerListBlobsOptions} [options={}] Options to list blobs.
+ * @returns {PagedAsyncIterableIterator} An asyncIterableIterator that supports paging.
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listBlobsFlat = function (options) {
+ var _a;
+ var _this = this;
+ if (options === void 0) { options = {}; }
+ var include = [];
+ if (options.includeCopy) {
+ include.push("copy");
+ }
+ if (options.includeDeleted) {
+ include.push("deleted");
+ }
+ if (options.includeMetadata) {
+ include.push("metadata");
+ }
+ if (options.includeSnapshots) {
+ include.push("snapshots");
+ }
+ if (options.includeVersions) {
+ include.push("versions");
+ }
+ if (options.includeUncommitedBlobs) {
+ include.push("uncommittedblobs");
+ }
+ if (options.includeTags) {
+ include.push("tags");
+ }
+ if (options.prefix === "") {
+ options.prefix = undefined;
+ }
+ var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {}));
+ // AsyncIterableIterator to iterate over blobs
+ var iter = this.listItems(updatedOptions);
+ return _a = {
+ /**
+ * @member {Promise} [next] The next method, part of the iteration protocol
+ */
+ next: function () {
+ return iter.next();
+ }
+ },
+ /**
+ * @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
+ */
+ _a[Symbol.asyncIterator] = function () {
+ return this;
+ },
+ /**
+ * @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
+ */
+ _a.byPage = function (settings) {
+ if (settings === void 0) { settings = {}; }
+ return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
+ },
+ _a;
+ };
+ /**
+ * Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse
+ *
+ * @private
+ * @param {string} delimiter The character or string used to define the virtual hierarchy
+ * @param {string} [marker] A string value that identifies the portion of
+ * the list of blobs to be returned with the next listing operation. The
+ * operation returns the ContinuationToken value within the response body if the
+ * listing operation did not return all blobs remaining to be listed
+ * with the current page. The ContinuationToken value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
+ * @returns {AsyncIterableIterator}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listHierarchySegments = function (delimiter, marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listHierarchySegments_1() {
+ var listBlobsHierarchySegmentResponse;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
+ _a.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(this.listBlobHierarchySegment(delimiter, marker, options))];
+ case 2:
+ listBlobsHierarchySegmentResponse = _a.sent();
+ marker = listBlobsHierarchySegmentResponse.continuationToken;
+ return [4 /*yield*/, tslib.__await(listBlobsHierarchySegmentResponse)];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
+ case 4: return [4 /*yield*/, _a.sent()];
+ case 5:
+ _a.sent();
+ _a.label = 6;
+ case 6:
+ if (marker) return [3 /*break*/, 1];
+ _a.label = 7;
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects.
+ *
+ * @private
+ * @param {string} delimiter The character or string used to define the virtual hierarchy
+ * @param {ContainerListBlobsSegmentOptions} [options] Options to list blobs operation.
+ * @returns {AsyncIterableIterator<{ kind: "prefix" } & BlobPrefix | { kind: "blob" } & BlobItem>}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listItemsByHierarchy = function (delimiter, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listItemsByHierarchy_1() {
+ var marker, _a, _b, listBlobsHierarchySegmentResponse, segment, _i, _c, prefix, _d, _e, blob, e_64_1;
+ var e_64, _f;
+ return tslib.__generator(this, function (_g) {
+ switch (_g.label) {
+ case 0:
+ _g.trys.push([0, 14, 15, 20]);
+ _a = tslib.__asyncValues(this.listHierarchySegments(delimiter, marker, options));
+ _g.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(_a.next())];
+ case 2:
+ if (!(_b = _g.sent(), !_b.done)) return [3 /*break*/, 13];
+ listBlobsHierarchySegmentResponse = _b.value;
+ segment = listBlobsHierarchySegmentResponse.segment;
+ if (!segment.blobPrefixes) return [3 /*break*/, 7];
+ _i = 0, _c = segment.blobPrefixes;
+ _g.label = 3;
+ case 3:
+ if (!(_i < _c.length)) return [3 /*break*/, 7];
+ prefix = _c[_i];
+ return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "prefix" }, prefix))];
+ case 4: return [4 /*yield*/, _g.sent()];
+ case 5:
+ _g.sent();
+ _g.label = 6;
+ case 6:
+ _i++;
+ return [3 /*break*/, 3];
+ case 7:
+ _d = 0, _e = segment.blobItems;
+ _g.label = 8;
+ case 8:
+ if (!(_d < _e.length)) return [3 /*break*/, 12];
+ blob = _e[_d];
+ return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "blob" }, blob))];
+ case 9: return [4 /*yield*/, _g.sent()];
+ case 10:
+ _g.sent();
+ _g.label = 11;
+ case 11:
+ _d++;
+ return [3 /*break*/, 8];
+ case 12: return [3 /*break*/, 1];
+ case 13: return [3 /*break*/, 20];
+ case 14:
+ e_64_1 = _g.sent();
+ e_64 = { error: e_64_1 };
+ return [3 /*break*/, 20];
+ case 15:
+ _g.trys.push([15, , 18, 19]);
+ if (!(_b && !_b.done && (_f = _a.return))) return [3 /*break*/, 17];
+ return [4 /*yield*/, tslib.__await(_f.call(_a))];
+ case 16:
+ _g.sent();
+ _g.label = 17;
+ case 17: return [3 /*break*/, 19];
+ case 18:
+ if (e_64) throw e_64.error;
+ return [7 /*endfinally*/];
+ case 19: return [7 /*endfinally*/];
+ case 20: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an async iterable iterator to list all the blobs by hierarchy.
+ * under the specified account.
+ *
+ * .byPage() returns an async iterable iterator to list the blobs by hierarchy in pages.
+ *
+ * Example using `for await` syntax:
+ *
+ * ```js
+ * for await (const item of containerClient.listBlobsByHierarchy("/")) {
+ * if (item.kind === "prefix") {
+ * console.log(`\tBlobPrefix: ${item.name}`);
+ * } else {
+ * console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
+ * }
+ * }
+ * ```
+ *
+ * Example using `iter.next()`:
+ *
+ * ```js
+ * let iter = containerClient.listBlobsByHierarchy("/", { prefix: "prefix1/" });
+ * let entity = await iter.next();
+ * while (!entity.done) {
+ * let item = entity.value;
+ * if (item.kind === "prefix") {
+ * console.log(`\tBlobPrefix: ${item.name}`);
+ * } else {
+ * console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
+ * }
+ * entity = await iter.next();
+ * }
+ * ```js
+ *
+ * Example using `byPage()`:
+ *
+ * ```js
+ * console.log("Listing blobs by hierarchy by page");
+ * for await (const response of containerClient.listBlobsByHierarchy("/").byPage()) {
+ * const segment = response.segment;
+ * if (segment.blobPrefixes) {
+ * for (const prefix of segment.blobPrefixes) {
+ * console.log(`\tBlobPrefix: ${prefix.name}`);
+ * }
+ * }
+ * for (const blob of response.segment.blobItems) {
+ * console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`);
+ * }
+ * }
+ * ```
+ *
+ * Example using paging with a max page size:
+ *
+ * ```js
+ * console.log("Listing blobs by hierarchy by page, specifying a prefix and a max page size");
+ *
+ * let i = 1;
+ * for await (const response of containerClient.listBlobsByHierarchy("/", { prefix: "prefix2/sub1/"}).byPage({ maxPageSize: 2 })) {
+ * console.log(`Page ${i++}`);
+ * const segment = response.segment;
+ *
+ * if (segment.blobPrefixes) {
+ * for (const prefix of segment.blobPrefixes) {
+ * console.log(`\tBlobPrefix: ${prefix.name}`);
+ * }
+ * }
+ *
+ * for (const blob of response.segment.blobItems) {
+ * console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`);
+ * }
+ * }
+ * ```
+ *
+ * @param {string} delimiter The character or string used to define the virtual hierarchy
+ * @param {ContainerListBlobsOptions} [options={}] Options to list blobs operation.
+ * @returns {(PagedAsyncIterableIterator<
+ * { kind: "prefix" } & BlobPrefix | { kind: "blob" } & BlobItem,
+ * ContainerListBlobHierarchySegmentResponse
+ * >)}
+ * @memberof ContainerClient
+ */
+ ContainerClient.prototype.listBlobsByHierarchy = function (delimiter, options) {
+ var _a;
+ var _this = this;
+ if (options === void 0) { options = {}; }
+ if (delimiter === "") {
+ throw new RangeError("delimiter should contain one or more characters");
+ }
+ var include = [];
+ if (options.includeCopy) {
+ include.push("copy");
+ }
+ if (options.includeDeleted) {
+ include.push("deleted");
+ }
+ if (options.includeMetadata) {
+ include.push("metadata");
+ }
+ if (options.includeSnapshots) {
+ include.push("snapshots");
+ }
+ if (options.includeVersions) {
+ include.push("versions");
+ }
+ if (options.includeUncommitedBlobs) {
+ include.push("uncommittedblobs");
+ }
+ if (options.includeTags) {
+ include.push("tags");
+ }
+ if (options.prefix === "") {
+ options.prefix = undefined;
+ }
+ var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {}));
+ // AsyncIterableIterator to iterate over blob prefixes and blobs
+ var iter = this.listItemsByHierarchy(delimiter, updatedOptions);
+ return _a = {
+ /**
+ * @member {Promise} [next] The next method, part of the iteration protocol
+ */
+ next: function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, iter.next()];
+ });
+ });
+ }
+ },
+ /**
+ * @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
+ */
+ _a[Symbol.asyncIterator] = function () {
+ return this;
+ },
+ /**
+ * @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
+ */
+ _a.byPage = function (settings) {
+ if (settings === void 0) { settings = {}; }
+ return _this.listHierarchySegments(delimiter, settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions));
+ },
+ _a;
+ };
+ ContainerClient.prototype.getContainerNameFromUrl = function () {
+ var containerName;
+ try {
+ // URL may look like the following
+ // "https://myaccount.blob.core.windows.net/mycontainer?sasString";
+ // "https://myaccount.blob.core.windows.net/mycontainer";
+ // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername`
+ // http://localhost:10001/devstoreaccount1/containername
+ var parsedUrl = coreHttp.URLBuilder.parse(this.url);
+ if (parsedUrl.getHost().split(".")[1] === "blob") {
+ // "https://myaccount.blob.core.windows.net/containername".
+ // "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.");
+ }
+ };
+ return ContainerClient;
+}(StorageClient));
+
+function getBodyAsText(batchResponse) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var buffer, responseLength;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ buffer = Buffer.alloc(BATCH_MAX_PAYLOAD_IN_BYTES);
+ return [4 /*yield*/, streamToBuffer2(batchResponse.readableStreamBody, buffer)];
+ case 1:
+ responseLength = _a.sent();
+ // Slice the buffer to trim the empty ending.
+ buffer = buffer.slice(0, responseLength);
+ return [2 /*return*/, buffer.toString()];
+ }
+ });
+ });
+}
+function utf8ByteLength(str) {
+ return Buffer.byteLength(str);
+}
+
+var HTTP_HEADER_DELIMITER = ": ";
+var SPACE_DELIMITER = " ";
+var NOT_FOUND = -1;
+/**
+ * Util class for parsing batch response.
+ */
+var BatchResponseParser = /** @class */ (function () {
+ function BatchResponseParser(batchResponse, subRequests) {
+ if (!batchResponse || !batchResponse.contentType) {
+ // In special case(reported), server may return invalid content-type which could not be parsed.
+ throw new RangeError("batchResponse is malformed or doesn't contain valid content-type.");
+ }
+ if (!subRequests || subRequests.size === 0) {
+ // This should be prevent during coding.
+ throw new RangeError("Invalid state: subRequests is not provided or size is 0.");
+ }
+ this.batchResponse = batchResponse;
+ this.subRequests = subRequests;
+ this.responseBatchBoundary = this.batchResponse.contentType.split("=")[1];
+ this.perResponsePrefix = "--" + this.responseBatchBoundary + HTTP_LINE_ENDING;
+ this.batchResponseEnding = "--" + this.responseBatchBoundary + "--";
+ }
+ // For example of response, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response
+ BatchResponseParser.prototype.parseBatchResponse = function () {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var responseBodyAsText, subResponses, subResponseCount, deserializedSubResponses, subResponsesSucceededCount, subResponsesFailedCount, index, subResponse, deserializedSubResponse, responseLines, subRespHeaderStartFound, subRespHeaderEndFound, subRespFailed, contentId, _i, responseLines_1, responseLine, tokens, tokens;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ // When logic reach here, suppose batch request has already succeeded with 202, so we can further parse
+ // sub request's response.
+ if (this.batchResponse._response.status != HTTPURLConnection.HTTP_ACCEPTED) {
+ throw new Error("Invalid state: batch request failed with status: '" + this.batchResponse._response.status + "'.");
+ }
+ return [4 /*yield*/, getBodyAsText(this.batchResponse)];
+ case 1:
+ responseBodyAsText = _a.sent();
+ subResponses = responseBodyAsText
+ .split(this.batchResponseEnding)[0] // string after ending is useless
+ .split(this.perResponsePrefix)
+ .slice(1);
+ subResponseCount = subResponses.length;
+ // Defensive coding in case of potential error parsing.
+ // Note: subResponseCount == 1 is special case where sub request is invalid.
+ // We try to prevent such cases through early validation, e.g. validate sub request count >= 1.
+ // While in unexpected sub request invalid case, we allow sub response to be parsed and return to user.
+ if (subResponseCount != this.subRequests.size && subResponseCount != 1) {
+ throw new Error("Invalid state: sub responses' count is not equal to sub requests' count.");
+ }
+ deserializedSubResponses = new Array(subResponseCount);
+ subResponsesSucceededCount = 0;
+ subResponsesFailedCount = 0;
+ // Parse sub subResponses.
+ for (index = 0; index < subResponseCount; index++) {
+ subResponse = subResponses[index];
+ deserializedSubResponses[index] = {};
+ deserializedSubResponse = deserializedSubResponses[index];
+ deserializedSubResponse.headers = new coreHttp.HttpHeaders();
+ responseLines = subResponse.split("" + HTTP_LINE_ENDING);
+ subRespHeaderStartFound = false;
+ subRespHeaderEndFound = false;
+ subRespFailed = false;
+ contentId = NOT_FOUND;
+ for (_i = 0, responseLines_1 = responseLines; _i < responseLines_1.length; _i++) {
+ responseLine = responseLines_1[_i];
+ if (!subRespHeaderStartFound) {
+ // Convention line to indicate content ID
+ if (responseLine.startsWith(HeaderConstants.CONTENT_ID)) {
+ contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]);
+ }
+ // Http version line with status code indicates the start of sub request's response.
+ // Example: HTTP/1.1 202 Accepted
+ if (responseLine.startsWith(HTTP_VERSION_1_1)) {
+ subRespHeaderStartFound = true;
+ tokens = responseLine.split(SPACE_DELIMITER);
+ deserializedSubResponse.status = parseInt(tokens[1]);
+ deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER);
+ }
+ continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: *
+ }
+ if (responseLine.trim() === "") {
+ // Sub response's header start line already found, and the first empty line indicates header end line found.
+ if (!subRespHeaderEndFound) {
+ subRespHeaderEndFound = true;
+ }
+ continue; // Skip empty line
+ }
+ // Note: when code reach here, it indicates subRespHeaderStartFound == true
+ if (!subRespHeaderEndFound) {
+ if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) {
+ // Defensive coding to prevent from missing valuable lines.
+ throw new Error("Invalid state: find non-empty line '" + responseLine + "' without HTTP header delimiter '" + HTTP_HEADER_DELIMITER + "'.");
+ }
+ tokens = responseLine.split(HTTP_HEADER_DELIMITER);
+ deserializedSubResponse.headers.set(tokens[0], tokens[1]);
+ if (tokens[0] === HeaderConstants.X_MS_ERROR_CODE) {
+ deserializedSubResponse.errorCode = tokens[1];
+ subRespFailed = true;
+ }
+ }
+ else {
+ // Assemble body of sub response.
+ if (!deserializedSubResponse.bodyAsText) {
+ deserializedSubResponse.bodyAsText = "";
+ }
+ deserializedSubResponse.bodyAsText += responseLine;
+ }
+ } // Inner for end
+ if (contentId != NOT_FOUND) {
+ deserializedSubResponse._request = this.subRequests.get(contentId);
+ }
+ if (subRespFailed) {
+ subResponsesFailedCount++;
+ }
+ else {
+ subResponsesSucceededCount++;
+ }
+ }
+ return [2 /*return*/, {
+ subResponses: deserializedSubResponses,
+ subResponsesSucceededCount: subResponsesSucceededCount,
+ subResponsesFailedCount: subResponsesFailedCount
+ }];
+ }
+ });
+ });
+ };
+ return BatchResponseParser;
+}());
+
+var MutexLockStatus;
+(function (MutexLockStatus) {
+ MutexLockStatus[MutexLockStatus["LOCKED"] = 0] = "LOCKED";
+ MutexLockStatus[MutexLockStatus["UNLOCKED"] = 1] = "UNLOCKED";
+})(MutexLockStatus || (MutexLockStatus = {}));
+/**
+ * An async mutex lock.
+ *
+ * @export
+ * @class Mutex
+ */
+var Mutex = /** @class */ (function () {
+ function Mutex() {
+ }
+ /**
+ * Lock for a specific key. If the lock has been acquired by another customer, then
+ * will wait until getting the lock.
+ *
+ * @static
+ * @param {string} key lock key
+ * @returns {Promise}
+ * @memberof Mutex
+ */
+ Mutex.lock = function (key) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, new Promise(function (resolve) {
+ if (_this.keys[key] === undefined || _this.keys[key] === MutexLockStatus.UNLOCKED) {
+ _this.keys[key] = MutexLockStatus.LOCKED;
+ resolve();
+ }
+ else {
+ _this.onUnlockEvent(key, function () {
+ _this.keys[key] = MutexLockStatus.LOCKED;
+ resolve();
+ });
+ }
+ })];
+ });
+ });
+ };
+ /**
+ * Unlock a key.
+ *
+ * @static
+ * @param {string} key
+ * @returns {Promise}
+ * @memberof Mutex
+ */
+ Mutex.unlock = function (key) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _this = this;
+ return tslib.__generator(this, function (_a) {
+ return [2 /*return*/, new Promise(function (resolve) {
+ if (_this.keys[key] === MutexLockStatus.LOCKED) {
+ _this.emitUnlockEvent(key);
+ }
+ delete _this.keys[key];
+ resolve();
+ })];
+ });
+ });
+ };
+ Mutex.onUnlockEvent = function (key, handler) {
+ if (this.listeners[key] === undefined) {
+ this.listeners[key] = [handler];
+ }
+ else {
+ this.listeners[key].push(handler);
+ }
+ };
+ Mutex.emitUnlockEvent = function (key) {
+ var _this = this;
+ if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {
+ var handler_1 = this.listeners[key].shift();
+ setImmediate(function () {
+ handler_1.call(_this);
+ });
+ }
+ };
+ Mutex.keys = {};
+ Mutex.listeners = {};
+ return Mutex;
+}());
+
+/**
+ * A BlobBatch represents an aggregated set of operations on blobs.
+ * Currently, only `delete` and `setAccessTier` are supported.
+ *
+ * @export
+ * @class BlobBatch
+ */
+var BlobBatch = /** @class */ (function () {
+ function BlobBatch() {
+ this.batch = "batch";
+ this.batchRequest = new InnerBatchRequest();
+ }
+ /**
+ * Get the value of Content-Type for a batch request.
+ * The value must be multipart/mixed with a batch boundary.
+ * Example: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252
+ */
+ BlobBatch.prototype.getMultiPartContentType = function () {
+ return this.batchRequest.getMultipartContentType();
+ };
+ /**
+ * Get assembled HTTP request body for sub requests.
+ */
+ BlobBatch.prototype.getHttpRequestBody = function () {
+ return this.batchRequest.getHttpRequestBody();
+ };
+ /**
+ * Get sub requests that are added into the batch request.
+ */
+ BlobBatch.prototype.getSubRequests = function () {
+ return this.batchRequest.getSubRequests();
+ };
+ BlobBatch.prototype.addSubRequestInternal = function (subRequest, assembleSubRequestFunc) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, Mutex.lock(this.batch)];
+ case 1:
+ _a.sent();
+ _a.label = 2;
+ case 2:
+ _a.trys.push([2, , 4, 6]);
+ this.batchRequest.preAddSubRequest(subRequest);
+ return [4 /*yield*/, assembleSubRequestFunc()];
+ case 3:
+ _a.sent();
+ this.batchRequest.postAddSubRequest(subRequest);
+ return [3 /*break*/, 6];
+ case 4: return [4 /*yield*/, Mutex.unlock(this.batch)];
+ case 5:
+ _a.sent();
+ return [7 /*endfinally*/];
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ BlobBatch.prototype.setBatchType = function (batchType) {
+ if (!this.batchType) {
+ this.batchType = batchType;
+ }
+ if (this.batchType !== batchType) {
+ throw new RangeError("BlobBatch only supports one operation type per batch and it already is being used for " + this.batchType + " operations.");
+ }
+ };
+ BlobBatch.prototype.deleteBlob = function (urlOrBlobClient, credentialOrOptions, options) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var url, credential, _a, span, spanOptions, e_1;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (typeof urlOrBlobClient === "string" &&
+ ((coreHttp.isNode && credentialOrOptions instanceof StorageSharedKeyCredential) ||
+ credentialOrOptions instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrOptions))) {
+ // First overload
+ url = urlOrBlobClient;
+ credential = credentialOrOptions;
+ }
+ else if (urlOrBlobClient instanceof BlobClient) {
+ // Second overload
+ url = urlOrBlobClient.url;
+ credential = urlOrBlobClient.credential;
+ options = credentialOrOptions;
+ }
+ else {
+ throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided.");
+ }
+ if (!options) {
+ options = {};
+ }
+ _a = createSpan("BatchDeleteRequest-addSubRequest", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ this.setBatchType("delete");
+ return [4 /*yield*/, this.addSubRequestInternal({
+ url: url,
+ credential: credential
+ }, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 1:
+ _a.sent();
+ return [2 /*return*/];
+ }
+ });
+ }); })];
+ case 2:
+ _b.sent();
+ return [3 /*break*/, 5];
+ case 3:
+ e_1 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_1.message
+ });
+ throw e_1;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ BlobBatch.prototype.setBlobAccessTier = function (urlOrBlobClient, credentialOrTier, tierOrOptions, options) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var url, credential, tier, _a, span, spanOptions, e_2;
+ var _this = this;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (typeof urlOrBlobClient === "string" &&
+ ((coreHttp.isNode && credentialOrTier instanceof StorageSharedKeyCredential) ||
+ credentialOrTier instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrTier))) {
+ // First overload
+ url = urlOrBlobClient;
+ credential = credentialOrTier;
+ tier = tierOrOptions;
+ }
+ else if (urlOrBlobClient instanceof BlobClient) {
+ // Second overload
+ url = urlOrBlobClient.url;
+ credential = urlOrBlobClient.credential;
+ tier = credentialOrTier;
+ options = tierOrOptions;
+ }
+ else {
+ throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided.");
+ }
+ if (!options) {
+ options = {};
+ }
+ _a = createSpan("BatchSetTierRequest-addSubRequest", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ this.setBatchType("setAccessTier");
+ return [4 /*yield*/, this.addSubRequestInternal({
+ url: url,
+ credential: credential
+ }, function () { return tslib.__awaiter(_this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 1:
+ _a.sent();
+ return [2 /*return*/];
+ }
+ });
+ }); })];
+ case 2:
+ _b.sent();
+ return [3 /*break*/, 5];
+ case 3:
+ e_2 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_2.message
+ });
+ throw e_2;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlobBatch;
+}());
+/**
+ * Inner batch request class which is responsible for assembling and serializing sub requests.
+ * See https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#request-body for how requests are assembled.
+ */
+var InnerBatchRequest = /** @class */ (function () {
+ function InnerBatchRequest() {
+ this.operationCount = 0;
+ this.body = "";
+ var tempGuid = coreHttp.generateUuid();
+ // batch_{batchid}
+ this.boundary = "batch_" + tempGuid;
+ // --batch_{batchid}
+ // Content-Type: application/http
+ // Content-Transfer-Encoding: binary
+ this.subRequestPrefix = "--" + this.boundary + HTTP_LINE_ENDING + HeaderConstants.CONTENT_TYPE + ": application/http" + HTTP_LINE_ENDING + HeaderConstants.CONTENT_TRANSFER_ENCODING + ": binary";
+ // multipart/mixed; boundary=batch_{batchid}
+ this.multipartContentType = "multipart/mixed; boundary=" + this.boundary;
+ // --batch_{batchid}--
+ this.batchRequestEnding = "--" + this.boundary + "--";
+ this.subRequests = new Map();
+ }
+ /**
+ * Create pipeline to assemble sub requests. The idea here is to use 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 {StorageSharedKeyCredential | AnonymousCredential | TokenCredential} credential Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the @azure/identity package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used.
+ */
+ InnerBatchRequest.prototype.createPipeline = function (credential) {
+ var isAnonymousCreds = credential instanceof AnonymousCredential;
+ var policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserializationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory]
+ var factories = new Array(policyFactoryLength);
+ factories[0] = coreHttp.deserializationPolicy(); // Default deserializationPolicy is provided by protocol layer
+ factories[1] = new BatchHeaderFilterPolicyFactory(); // Use batch header filter policy to exclude unnecessary headers
+ if (!isAnonymousCreds) {
+ factories[2] = coreHttp.isTokenCredential(credential)
+ ? coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes)
+ : credential;
+ }
+ factories[policyFactoryLength - 1] = new BatchRequestAssemblePolicyFactory(this); // Use batch assemble policy to assemble request and intercept request from going to wire
+ return new Pipeline(factories, {});
+ };
+ InnerBatchRequest.prototype.appendSubRequestToBody = function (request) {
+ // Start to assemble sub request
+ this.body += [
+ this.subRequestPrefix,
+ HeaderConstants.CONTENT_ID + ": " + this.operationCount,
+ "",
+ request.method.toString() + " " + getURLPathAndQuery(request.url) + " " + HTTP_VERSION_1_1 + HTTP_LINE_ENDING // sub request start line with method
+ ].join(HTTP_LINE_ENDING);
+ for (var _i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) {
+ var header = _a[_i];
+ this.body += header.name + ": " + header.value + HTTP_LINE_ENDING;
+ }
+ this.body += HTTP_LINE_ENDING; // sub request's headers need be ending with an empty line
+ // No body to assemble for current batch request support
+ // End to assemble sub request
+ };
+ InnerBatchRequest.prototype.preAddSubRequest = function (subRequest) {
+ if (this.operationCount >= BATCH_MAX_REQUEST) {
+ throw new RangeError("Cannot exceed " + BATCH_MAX_REQUEST + " sub requests in a single batch");
+ }
+ // Fast fail if url for sub request is invalid
+ var path = getURLPath(subRequest.url);
+ if (!path || path == "") {
+ throw new RangeError("Invalid url for sub request: '" + subRequest.url + "'");
+ }
+ };
+ InnerBatchRequest.prototype.postAddSubRequest = function (subRequest) {
+ this.subRequests.set(this.operationCount, subRequest);
+ this.operationCount++;
+ };
+ // Return the http request body with assembling the ending line to the sub request body.
+ InnerBatchRequest.prototype.getHttpRequestBody = function () {
+ return "" + this.body + this.batchRequestEnding + HTTP_LINE_ENDING;
+ };
+ InnerBatchRequest.prototype.getMultipartContentType = function () {
+ return this.multipartContentType;
+ };
+ InnerBatchRequest.prototype.getSubRequests = function () {
+ return this.subRequests;
+ };
+ return InnerBatchRequest;
+}());
+var BatchRequestAssemblePolicy = /** @class */ (function (_super) {
+ tslib.__extends(BatchRequestAssemblePolicy, _super);
+ function BatchRequestAssemblePolicy(batchRequest, nextPolicy, options) {
+ var _this = _super.call(this, nextPolicy, options) || this;
+ _this.dummyResponse = {
+ request: new coreHttp.WebResource(),
+ status: 200,
+ headers: new coreHttp.HttpHeaders()
+ };
+ _this.batchRequest = batchRequest;
+ return _this;
+ }
+ BatchRequestAssemblePolicy.prototype.sendRequest = function (request) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0: return [4 /*yield*/, this.batchRequest.appendSubRequestToBody(request)];
+ case 1:
+ _a.sent();
+ return [2 /*return*/, this.dummyResponse]; // Intercept request from going to wire
+ }
+ });
+ });
+ };
+ return BatchRequestAssemblePolicy;
+}(coreHttp.BaseRequestPolicy));
+var BatchRequestAssemblePolicyFactory = /** @class */ (function () {
+ function BatchRequestAssemblePolicyFactory(batchRequest) {
+ this.batchRequest = batchRequest;
+ }
+ BatchRequestAssemblePolicyFactory.prototype.create = function (nextPolicy, options) {
+ return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options);
+ };
+ return BatchRequestAssemblePolicyFactory;
+}());
+var BatchHeaderFilterPolicy = /** @class */ (function (_super) {
+ tslib.__extends(BatchHeaderFilterPolicy, _super);
+ function BatchHeaderFilterPolicy(nextPolicy, options) {
+ return _super.call(this, nextPolicy, options) || this;
+ }
+ BatchHeaderFilterPolicy.prototype.sendRequest = function (request) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var xMsHeaderName, _i, _a, header;
+ return tslib.__generator(this, function (_b) {
+ xMsHeaderName = "";
+ for (_i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) {
+ header = _a[_i];
+ if (iEqual(header.name, HeaderConstants.X_MS_VERSION)) {
+ xMsHeaderName = header.name;
+ }
+ }
+ if (xMsHeaderName !== "") {
+ request.headers.remove(xMsHeaderName); // The subrequests should not have the x-ms-version header.
+ }
+ return [2 /*return*/, this._nextPolicy.sendRequest(request)];
+ });
+ });
+ };
+ return BatchHeaderFilterPolicy;
+}(coreHttp.BaseRequestPolicy));
+var BatchHeaderFilterPolicyFactory = /** @class */ (function () {
+ function BatchHeaderFilterPolicyFactory() {
+ }
+ BatchHeaderFilterPolicyFactory.prototype.create = function (nextPolicy, options) {
+ return new BatchHeaderFilterPolicy(nextPolicy, options);
+ };
+ return BatchHeaderFilterPolicyFactory;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * A BlobBatchClient allows you to make batched requests to the Azure Storage Blob service.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
+ */
+var BlobBatchClient = /** @class */ (function () {
+ function BlobBatchClient(url, credentialOrPipeline, options) {
+ var pipeline;
+ if (credentialOrPipeline instanceof Pipeline) {
+ pipeline = credentialOrPipeline;
+ }
+ else if (!credentialOrPipeline) {
+ // no credential provided
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ else {
+ pipeline = newPipeline(credentialOrPipeline, options);
+ }
+ var storageClientContext = new StorageClientContext(url, pipeline.toServiceClientOptions());
+ this._serviceContext = new Service(storageClientContext);
+ }
+ /**
+ * Creates a {@link BlobBatch}.
+ * A BlobBatch represents an aggregated set of operations on blobs.
+ */
+ BlobBatchClient.prototype.createBatch = function () {
+ return new BlobBatch();
+ };
+ BlobBatchClient.prototype.deleteBlobs = function (urlsOrBlobClients, credentialOrOptions, options) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var batch, _i, urlsOrBlobClients_1, urlOrBlobClient;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ batch = new BlobBatch();
+ _i = 0, urlsOrBlobClients_1 = urlsOrBlobClients;
+ _a.label = 1;
+ case 1:
+ if (!(_i < urlsOrBlobClients_1.length)) return [3 /*break*/, 6];
+ urlOrBlobClient = urlsOrBlobClients_1[_i];
+ if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3];
+ return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options)];
+ case 2:
+ _a.sent();
+ return [3 /*break*/, 5];
+ case 3: return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions)];
+ case 4:
+ _a.sent();
+ _a.label = 5;
+ case 5:
+ _i++;
+ return [3 /*break*/, 1];
+ case 6: return [2 /*return*/, this.submitBatch(batch)];
+ }
+ });
+ });
+ };
+ BlobBatchClient.prototype.setBlobsAccessTier = function (urlsOrBlobClients, credentialOrTier, tierOrOptions, options) {
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var batch, _i, urlsOrBlobClients_2, urlOrBlobClient;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ batch = new BlobBatch();
+ _i = 0, urlsOrBlobClients_2 = urlsOrBlobClients;
+ _a.label = 1;
+ case 1:
+ if (!(_i < urlsOrBlobClients_2.length)) return [3 /*break*/, 6];
+ urlOrBlobClient = urlsOrBlobClients_2[_i];
+ if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3];
+ return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options)];
+ case 2:
+ _a.sent();
+ return [3 /*break*/, 5];
+ case 3: return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions)];
+ case 4:
+ _a.sent();
+ _a.label = 5;
+ case 5:
+ _i++;
+ return [3 /*break*/, 1];
+ case 6: return [2 /*return*/, this.submitBatch(batch)];
+ }
+ });
+ });
+ };
+ /**
+ * Submit batch request which consists of multiple subrequests.
+ *
+ * Get `blobBatchClient` and other details before running the snippets.
+ * `blobServiceClient.getBlobBatchClient()` gives the `blobBatchClient`
+ *
+ * Example usage:
+ *
+ * ```js
+ * let batchRequest = new BlobBatch();
+ * await batchRequest.deleteBlob(urlInString0, credential0);
+ * await batchRequest.deleteBlob(urlInString1, credential1, {
+ * deleteSnapshots: "include"
+ * });
+ * const batchResp = await blobBatchClient.submitBatch(batchRequest);
+ * console.log(batchResp.subResponsesSucceededCount);
+ * ```
+ *
+ * Example using a lease:
+ *
+ * ```js
+ * let batchRequest = new BlobBatch();
+ * await batchRequest.setBlobAccessTier(blockBlobClient0, "Cool");
+ * await batchRequest.setBlobAccessTier(blockBlobClient1, "Cool", {
+ * conditions: { leaseId: leaseId }
+ * });
+ * const batchResp = await blobBatchClient.submitBatch(batchRequest);
+ * console.log(batchResp.subResponsesSucceededCount);
+ * ```
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
+ *
+ * @param {BlobBatch} batchRequest A set of Delete or SetTier operations.
+ * @param {BlobBatchSubmitBatchOptionalParams} [options]
+ * @returns {Promise}
+ * @memberof BlobBatchClient
+ */
+ BlobBatchClient.prototype.submitBatch = function (batchRequest, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, batchRequestBody, rawBatchResponse, batchResponseParser, responseSummary, res, e_1;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ if (!batchRequest || batchRequest.getSubRequests().size == 0) {
+ throw new RangeError("Batch request should contain one or more sub requests.");
+ }
+ _a = createSpan("BlobBatchClient-submitBatch", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 4, 5, 6]);
+ batchRequestBody = batchRequest.getHttpRequestBody();
+ return [4 /*yield*/, this._serviceContext.submitBatch(batchRequestBody, utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), tslib.__assign(tslib.__assign({}, options), { spanOptions: spanOptions }))];
+ case 2:
+ rawBatchResponse = _b.sent();
+ batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests());
+ return [4 /*yield*/, batchResponseParser.parseBatchResponse()];
+ case 3:
+ responseSummary = _b.sent();
+ res = {
+ _response: rawBatchResponse._response,
+ contentType: rawBatchResponse.contentType,
+ errorCode: rawBatchResponse.errorCode,
+ requestId: rawBatchResponse.requestId,
+ clientRequestId: rawBatchResponse.clientRequestId,
+ version: rawBatchResponse.version,
+ subResponses: responseSummary.subResponses,
+ subResponsesSucceededCount: responseSummary.subResponsesSucceededCount,
+ subResponsesFailedCount: responseSummary.subResponsesFailedCount
+ };
+ return [2 /*return*/, res];
+ case 4:
+ e_1 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_1.message
+ });
+ throw e_1;
+ case 5:
+ span.end();
+ return [7 /*endfinally*/];
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ return BlobBatchClient;
+}());
+
+/**
+ * A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you
+ * to manipulate blob containers.
+ *
+ * @export
+ * @class BlobServiceClient
+ */
+var BlobServiceClient = /** @class */ (function (_super) {
+ tslib.__extends(BlobServiceClient, _super);
+ function BlobServiceClient(url, credentialOrPipeline, options) {
+ var _this = this;
+ var pipeline;
+ if (credentialOrPipeline instanceof Pipeline) {
+ pipeline = credentialOrPipeline;
+ }
+ else if ((coreHttp.isNode && credentialOrPipeline instanceof StorageSharedKeyCredential) ||
+ credentialOrPipeline instanceof AnonymousCredential ||
+ coreHttp.isTokenCredential(credentialOrPipeline)) {
+ pipeline = newPipeline(credentialOrPipeline, options);
+ }
+ else {
+ // The second parameter is undefined. Use anonymous credential
+ pipeline = newPipeline(new AnonymousCredential(), options);
+ }
+ _this = _super.call(this, url, pipeline) || this;
+ _this.serviceContext = new Service(_this.storageClientContext);
+ return _this;
+ }
+ /**
+ *
+ * Creates an instance of BlobServiceClient from connection string.
+ *
+ * @param {string} connectionString Account connection string or a SAS connection string of an Azure storage account.
+ * [ Note - Account connection string can only be used in NODE.JS runtime. ]
+ * Account connection string example -
+ * `DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=accountKey;EndpointSuffix=core.windows.net`
+ * SAS connection string example -
+ * `BlobEndpoint=https://myaccount.blob.core.windows.net/;QueueEndpoint=https://myaccount.queue.core.windows.net/;FileEndpoint=https://myaccount.file.core.windows.net/;TableEndpoint=https://myaccount.table.core.windows.net/;SharedAccessSignature=sasString`
+ * @param {StoragePipelineOptions} [options] Optional. Options to configure the HTTP pipeline.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.fromConnectionString = function (connectionString, options) {
+ options = options || {};
+ var extractedCreds = extractConnectionStringParts(connectionString);
+ if (extractedCreds.kind === "AccountConnString") {
+ {
+ var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey);
+ options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri);
+ var pipeline = newPipeline(sharedKeyCredential, options);
+ return new BlobServiceClient(extractedCreds.url, pipeline);
+ }
+ }
+ else if (extractedCreds.kind === "SASConnString") {
+ var pipeline = newPipeline(new AnonymousCredential(), options);
+ return new BlobServiceClient(extractedCreds.url + "?" + extractedCreds.accountSas, pipeline);
+ }
+ else {
+ throw new Error("Connection string must be either an Account connection string or a SAS connection string");
+ }
+ };
+ /**
+ * Creates a {@link ContainerClient} object
+ *
+ * @param {string} containerName A container name
+ * @returns {ContainerClient} A new ContainerClient object for the given container name.
+ * @memberof BlobServiceClient
+ *
+ * Example usage:
+ *
+ * ```js
+ * const containerClient = blobServiceClient.getContainerClient("");
+ * ```
+ */
+ BlobServiceClient.prototype.getContainerClient = function (containerName) {
+ return new ContainerClient(appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline);
+ };
+ /**
+ * Create a Blob container.
+ *
+ * @param {string} containerName Name of the container to create.
+ * @param {ContainerCreateOptions} [options] Options to configure Container Create operation.
+ * @returns {Promise<{ containerClient: ContainerClient; containerCreateResponse: ContainerCreateResponse }>} Container creation response and the corresponding container client.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.createContainer = function (containerName, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, containerClient, containerCreateResponse, e_1;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-createContainer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ containerClient = this.getContainerClient(containerName);
+ return [4 /*yield*/, containerClient.create(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2:
+ containerCreateResponse = _b.sent();
+ return [2 /*return*/, {
+ containerClient: containerClient,
+ containerCreateResponse: containerCreateResponse
+ }];
+ case 3:
+ e_1 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_1.message
+ });
+ throw e_1;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Deletes a Blob container.
+ *
+ * @param {string} containerName Name of the container to delete.
+ * @param {ContainerDeleteMethodOptions} [options] Options to configure Container Delete operation.
+ * @returns {Promise} Container deletion response.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.deleteContainer = function (containerName, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, containerClient, e_2;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-deleteContainer", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ containerClient = this.getContainerClient(containerName);
+ return [4 /*yield*/, containerClient.delete(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), { spanOptions: spanOptions }) }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_2 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_2.message
+ });
+ throw e_2;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Gets the properties of a storage account’s Blob service, including properties
+ * for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties
+ *
+ * @param {ServiceGetPropertiesOptions} [options] Options to the Service Get Properties operation.
+ * @returns {Promise} Response data for the Service Get Properties operation.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.getProperties = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_3;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-getProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.getProperties({
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_3 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_3.message
+ });
+ throw e_3;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Sets properties for a storage account’s Blob service endpoint, including properties
+ * for Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and soft delete settings.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-service-properties}
+ *
+ * @param {BlobServiceProperties} properties
+ * @param {ServiceSetPropertiesOptions} [options] Options to the Service Set Properties operation.
+ * @returns {Promise} Response data for the Service Set Properties operation.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.setProperties = function (properties, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_4;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-setProperties", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.setProperties(properties, {
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_4 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_4.message
+ });
+ throw e_4;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Retrieves statistics related to replication for the Blob service. It is only
+ * available on the secondary location endpoint when read-access geo-redundant
+ * replication is enabled for the storage account.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats}
+ *
+ * @param {ServiceGetStatisticsOptions} [options] Options to the Service Get Statistics operation.
+ * @returns {Promise} Response data for the Service Get Statistics operation.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.getStatistics = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_5;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-getStatistics", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.getStatistics({
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_5 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_5.message
+ });
+ throw e_5;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * The Get Account Information operation returns the sku name and account kind
+ * for the specified account.
+ * The Get Account Information operation is available on service versions beginning
+ * with version 2018-03-28.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-account-information
+ *
+ * @param {ServiceGetAccountInfoOptions} [options] Options to the Service Get Account Info operation.
+ * @returns {Promise} Response data for the Service Get Account Info operation.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.getAccountInfo = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_6;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-getAccountInfo", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.getAccountInfo({
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_6 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_6.message
+ });
+ throw e_6;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns a list of the containers under the specified account.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2
+ *
+ * @param {string} [marker] A string value that identifies the portion of
+ * the list of containers to be returned with the next listing operation. The
+ * operation returns the NextMarker value within the response body if the
+ * listing operation did not return all containers remaining to be listed
+ * with the current page. The NextMarker value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ServiceListContainersSegmentOptions} [options] Options to the Service List Container Segment operation.
+ * @returns {Promise} Response data for the Service List Container Segment operation.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.listContainersSegment = function (marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_7;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-listContainersSegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.listContainersSegment(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal, marker: marker }, options), { include: typeof options.include === "string" ? [options.include] : options.include, spanOptions: spanOptions }))];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_7 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_7.message
+ });
+ throw e_7;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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.
+ *
+ * @private
+ * @param {string} 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 {string} [marker] A string value that identifies the portion of
+ * the list of blobs to be returned with the next listing operation. The
+ * operation returns the NextMarker value within the response body if the
+ * listing operation did not return all blobs remaining to be listed
+ * with the current page. The NextMarker value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ServiceFindBlobsByTagsSegmentOptions} [options={}] Options to find blobs by tags.
+ * @returns {Promise}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.findBlobsByTagsSegment = function (tagFilterSqlExpression, marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, e_8;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-findBlobsByTagsSegment", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.filterBlobs({
+ abortSignal: options.abortSignal,
+ where: tagFilterSqlExpression,
+ marker: marker,
+ maxPageSize: options.maxPageSize,
+ spanOptions: spanOptions
+ })];
+ case 2: return [2 /*return*/, _b.sent()];
+ case 3:
+ e_8 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_8.message
+ });
+ throw e_8;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator for ServiceFindBlobsByTagsSegmentResponse.
+ *
+ * @private
+ * @param {string} 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 {string} [marker] A string value that identifies the portion of
+ * the list of blobs to be returned with the next listing operation. The
+ * operation returns the NextMarker value within the response body if the
+ * listing operation did not return all blobs remaining to be listed
+ * with the current page. The NextMarker value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ServiceFindBlobsByTagsSegmentOptions} [options={}] Options to find blobs by tags.
+ * @returns {AsyncIterableIterator}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.findBlobsByTagsSegments = function (tagFilterSqlExpression, marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function findBlobsByTagsSegments_1() {
+ var response;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ if (!(!!marker || marker === undefined)) return [3 /*break*/, 6];
+ _a.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options))];
+ case 2:
+ response = _a.sent();
+ response.blobs = response.blobs || [];
+ marker = response.continuationToken;
+ return [4 /*yield*/, tslib.__await(response)];
+ case 3: return [4 /*yield*/, _a.sent()];
+ case 4:
+ _a.sent();
+ _a.label = 5;
+ case 5:
+ if (marker) return [3 /*break*/, 1];
+ _a.label = 6;
+ case 6: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator for blobs.
+ *
+ * @private
+ * @param {string} 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 {ServiceFindBlobsByTagsSegmentOptions} [options={}] Options to findBlobsByTagsItems.
+ * @returns {AsyncIterableIterator}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.findBlobsByTagsItems = function (tagFilterSqlExpression, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function findBlobsByTagsItems_1() {
+ var marker, _a, _b, segment, e_9_1;
+ var e_9, _c;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _d.trys.push([0, 7, 8, 13]);
+ _a = tslib.__asyncValues(this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options));
+ _d.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(_a.next())];
+ case 2:
+ if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6];
+ segment = _b.value;
+ return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(segment.blobs)))];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])];
+ case 4:
+ _d.sent();
+ _d.label = 5;
+ case 5: return [3 /*break*/, 1];
+ case 6: return [3 /*break*/, 13];
+ case 7:
+ e_9_1 = _d.sent();
+ e_9 = { error: e_9_1 };
+ return [3 /*break*/, 13];
+ case 8:
+ _d.trys.push([8, , 11, 12]);
+ if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10];
+ return [4 /*yield*/, tslib.__await(_c.call(_a))];
+ case 9:
+ _d.sent();
+ _d.label = 10;
+ case 10: return [3 /*break*/, 12];
+ case 11:
+ if (e_9) throw e_9.error;
+ return [7 /*endfinally*/];
+ case 12: return [7 /*endfinally*/];
+ case 13: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * 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 {string} 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 {ServiceFindBlobByTagsOptions} [options={}] Options to find blobs by tags.
+ * @returns {PagedAsyncIterableIterator}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.findBlobsByTags = function (tagFilterSqlExpression, options) {
+ var _a;
+ var _this = this;
+ if (options === void 0) { options = {}; }
+ // AsyncIterableIterator to iterate over blobs
+ var listSegmentOptions = tslib.__assign({}, options);
+ var iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions);
+ return _a = {
+ /**
+ * @member {Promise} [next] The next method, part of the iteration protocol
+ */
+ next: function () {
+ return iter.next();
+ }
+ },
+ /**
+ * @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
+ */
+ _a[Symbol.asyncIterator] = function () {
+ return this;
+ },
+ /**
+ * @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
+ */
+ _a.byPage = function (settings) {
+ if (settings === void 0) { settings = {}; }
+ return _this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions));
+ },
+ _a;
+ };
+ /**
+ * Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses
+ *
+ * @private
+ * @param {string} [marker] A string value that identifies the portion of
+ * the list of containers to be returned with the next listing operation. The
+ * operation returns the NextMarker value within the response body if the
+ * listing operation did not return all containers remaining to be listed
+ * with the current page. The NextMarker value can be used as the value for
+ * the marker parameter in a subsequent call to request the next page of list
+ * items. The marker value is opaque to the client.
+ * @param {ServiceListContainersSegmentOptions} [options] Options to list containers operation.
+ * @returns {AsyncIterableIterator}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.listSegments = function (marker, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listSegments_1() {
+ var listContainersSegmentResponse;
+ return tslib.__generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ if (!(!!marker || marker === undefined)) return [3 /*break*/, 7];
+ _a.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(this.listContainersSegment(marker, options))];
+ case 2:
+ listContainersSegmentResponse = _a.sent();
+ listContainersSegmentResponse.containerItems =
+ listContainersSegmentResponse.containerItems || [];
+ marker = listContainersSegmentResponse.continuationToken;
+ return [4 /*yield*/, tslib.__await(listContainersSegmentResponse)];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])];
+ case 4: return [4 /*yield*/, _a.sent()];
+ case 5:
+ _a.sent();
+ _a.label = 6;
+ case 6:
+ if (marker) return [3 /*break*/, 1];
+ _a.label = 7;
+ case 7: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an AsyncIterableIterator for Container Items
+ *
+ * @private
+ * @param {ServiceListContainersSegmentOptions} [options] Options to list containers operation.
+ * @returns {AsyncIterableIterator}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.listItems = function (options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__asyncGenerator(this, arguments, function listItems_1() {
+ var marker, _a, _b, segment, e_10_1;
+ var e_10, _c;
+ return tslib.__generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ _d.trys.push([0, 7, 8, 13]);
+ _a = tslib.__asyncValues(this.listSegments(marker, options));
+ _d.label = 1;
+ case 1: return [4 /*yield*/, tslib.__await(_a.next())];
+ case 2:
+ if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6];
+ segment = _b.value;
+ return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(segment.containerItems)))];
+ case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])];
+ case 4:
+ _d.sent();
+ _d.label = 5;
+ case 5: return [3 /*break*/, 1];
+ case 6: return [3 /*break*/, 13];
+ case 7:
+ e_10_1 = _d.sent();
+ e_10 = { error: e_10_1 };
+ return [3 /*break*/, 13];
+ case 8:
+ _d.trys.push([8, , 11, 12]);
+ if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10];
+ return [4 /*yield*/, tslib.__await(_c.call(_a))];
+ case 9:
+ _d.sent();
+ _d.label = 10;
+ case 10: return [3 /*break*/, 12];
+ case 11:
+ if (e_10) throw e_10.error;
+ return [7 /*endfinally*/];
+ case 12: return [7 /*endfinally*/];
+ case 13: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Returns an async iterable iterator to list all the containers
+ * under the specified account.
+ *
+ * .byPage() returns an async iterable iterator to list the containers in pages.
+ *
+ * Example using `for await` syntax:
+ *
+ * ```js
+ * let i = 1;
+ * for await (const container of blobServiceClient.listContainers()) {
+ * console.log(`Container ${i++}: ${container.name}`);
+ * }
+ * ```
+ *
+ * Example using `iter.next()`:
+ *
+ * ```js
+ * let i = 1;
+ * const iter = blobServiceClient.listContainers();
+ * let containerItem = await iter.next();
+ * while (!containerItem.done) {
+ * console.log(`Container ${i++}: ${containerItem.value.name}`);
+ * containerItem = await iter.next();
+ * }
+ * ```
+ *
+ * Example using `byPage()`:
+ *
+ * ```js
+ * // passing optional maxPageSize in the page settings
+ * let i = 1;
+ * for await (const response of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) {
+ * if (response.containerItems) {
+ * for (const container of response.containerItems) {
+ * console.log(`Container ${i++}: ${container.name}`);
+ * }
+ * }
+ * }
+ * ```
+ *
+ * Example using paging with a marker:
+ *
+ * ```js
+ * let i = 1;
+ * let iterator = blobServiceClient.listContainers().byPage({ maxPageSize: 2 });
+ * let response = (await iterator.next()).value;
+ *
+ * // Prints 2 container names
+ * if (response.containerItems) {
+ * for (const container of response.containerItems) {
+ * console.log(`Container ${i++}: ${container.name}`);
+ * }
+ * }
+ *
+ * // Gets next marker
+ * let marker = response.continuationToken;
+ * // Passing next marker as continuationToken
+ * iterator = blobServiceClient
+ * .listContainers()
+ * .byPage({ continuationToken: marker, maxPageSize: 10 });
+ * response = (await iterator.next()).value;
+ *
+ * // Prints 10 container names
+ * if (response.containerItems) {
+ * for (const container of response.containerItems) {
+ * console.log(`Container ${i++}: ${container.name}`);
+ * }
+ * }
+ * ```
+ *
+ * @param {ServiceListContainersOptions} [options={}] Options to list containers.
+ * @returns {PagedAsyncIterableIterator} An asyncIterableIterator that supports paging.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.listContainers = function (options) {
+ var _a;
+ var _this = this;
+ if (options === void 0) { options = {}; }
+ if (options.prefix === "") {
+ options.prefix = undefined;
+ }
+ // AsyncIterableIterator to iterate over containers
+ var listSegmentOptions = tslib.__assign(tslib.__assign({}, options), (options.includeMetadata ? { include: "metadata" } : {}));
+ var iter = this.listItems(listSegmentOptions);
+ return _a = {
+ /**
+ * @member {Promise} [next] The next method, part of the iteration protocol
+ */
+ next: function () {
+ return iter.next();
+ }
+ },
+ /**
+ * @member {Symbol} [asyncIterator] The connection to the async iterator, part of the iteration protocol
+ */
+ _a[Symbol.asyncIterator] = function () {
+ return this;
+ },
+ /**
+ * @member {Function} [byPage] Return an AsyncIterableIterator that works a page at a time
+ */
+ _a.byPage = function (settings) {
+ if (settings === void 0) { settings = {}; }
+ return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions));
+ },
+ _a;
+ };
+ /**
+ * ONLY AVAILABLE WHEN USING BEARER TOKEN AUTHENTICATION (TokenCredential).
+ *
+ * Retrieves a user delegation key for the Blob service. This is only a valid operation when using
+ * bearer token authentication.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key
+ *
+ * @param {Date} startsOn The start time for the user delegation SAS. Must be within 7 days of the current time
+ * @param {Date} expiresOn The end time for the user delegation SAS. Must be within 7 days of the current time
+ * @returns {Promise}
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.getUserDelegationKey = function (startsOn, expiresOn, options) {
+ if (options === void 0) { options = {}; }
+ return tslib.__awaiter(this, void 0, void 0, function () {
+ var _a, span, spanOptions, response, userDelegationKey, res, e_11;
+ return tslib.__generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = createSpan("BlobServiceClient-getUserDelegationKey", options.tracingOptions), span = _a.span, spanOptions = _a.spanOptions;
+ _b.label = 1;
+ case 1:
+ _b.trys.push([1, 3, 4, 5]);
+ return [4 /*yield*/, this.serviceContext.getUserDelegationKey({
+ startsOn: truncatedISO8061Date(startsOn, false),
+ expiresOn: truncatedISO8061Date(expiresOn, false)
+ }, {
+ abortSignal: options.abortSignal,
+ spanOptions: spanOptions
+ })];
+ case 2:
+ response = _b.sent();
+ userDelegationKey = {
+ signedObjectId: response.signedObjectId,
+ signedTenantId: response.signedTenantId,
+ signedStartsOn: new Date(response.signedStartsOn),
+ signedExpiresOn: new Date(response.signedExpiresOn),
+ signedService: response.signedService,
+ signedVersion: response.signedVersion,
+ value: response.value
+ };
+ res = tslib.__assign({ _response: response._response, requestId: response.requestId, clientRequestId: response.clientRequestId, version: response.version, date: response.date, errorCode: response.errorCode }, userDelegationKey);
+ return [2 /*return*/, res];
+ case 3:
+ e_11 = _b.sent();
+ span.setStatus({
+ code: api.CanonicalCode.UNKNOWN,
+ message: e_11.message
+ });
+ throw e_11;
+ case 4:
+ span.end();
+ return [7 /*endfinally*/];
+ case 5: return [2 /*return*/];
+ }
+ });
+ });
+ };
+ /**
+ * Creates a BlobBatchClient object to conduct batch operations.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch
+ *
+ * @returns {BlobBatchClient} A new BlobBatchClient object for this service.
+ * @memberof BlobServiceClient
+ */
+ BlobServiceClient.prototype.getBlobBatchClient = function () {
+ return new BlobBatchClient(this.url, this.pipeline);
+ };
+ return BlobServiceClient;
+}(StorageClient));
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * This is a helper class to construct a string representing the permissions granted by an AccountSAS. Setting a value
+ * to true means that any SAS which uses these permissions will grant permissions for that operation. Once all the
+ * values are set, this should be serialized with toString and set as the permissions field on an
+ * {@link AccountSASSignatureValues} object. It is possible to construct the permissions string without this class, but
+ * the order of the permissions is particular and this class guarantees correctness.
+ *
+ * @export
+ * @class AccountSASPermissions
+ */
+var AccountSASPermissions = /** @class */ (function () {
+ function AccountSASPermissions() {
+ /**
+ * Permission to read resources and list queues and tables granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.read = false;
+ /**
+ * Permission to write resources granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.write = false;
+ /**
+ * Permission to create blobs and files granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.delete = false;
+ /**
+ * Permission to delete versions granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.deleteVersion = false;
+ /**
+ * Permission to list blob containers, blobs, shares, directories, and files granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.list = false;
+ /**
+ * Permission to add messages, table entities, and append to blobs granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.add = false;
+ /**
+ * Permission to create blobs and files granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.create = false;
+ /**
+ * Permissions to update messages and table entities granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.update = false;
+ /**
+ * Permission to get and delete messages granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.process = false;
+ /**
+ * Specfies Tag access granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.tag = false;
+ /**
+ * Permission to filter blobs.
+ *
+ * @type {boolean}
+ * @memberof AccountSASPermissions
+ */
+ this.filter = false;
+ }
+ /**
+ * Parse initializes the AccountSASPermissions fields from a string.
+ *
+ * @static
+ * @param {string} permissions
+ * @returns {AccountSASPermissions}
+ * @memberof AccountSASPermissions
+ */
+ AccountSASPermissions.parse = function (permissions) {
+ var accountSASPermissions = new AccountSASPermissions();
+ for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
+ var c = permissions_1[_i];
+ switch (c) {
+ case "r":
+ accountSASPermissions.read = true;
+ break;
+ case "w":
+ accountSASPermissions.write = true;
+ break;
+ case "d":
+ accountSASPermissions.delete = true;
+ break;
+ case "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;
+ default:
+ throw new RangeError("Invalid permission character: " + c);
+ }
+ }
+ return accountSASPermissions;
+ };
+ /**
+ * Produces the SAS permissions string for an Azure Storage account.
+ * Call this method to set AccountSASSignatureValues Permissions field.
+ *
+ * Using this method will guarantee the resource types are in
+ * an order accepted by the service.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
+ *
+ * @returns {string}
+ * @memberof AccountSASPermissions
+ */
+ AccountSASPermissions.prototype.toString = function () {
+ // The order of the characters should be as specified here to ensure correctness:
+ // https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
+ // Use a string array instead of string concatenating += operator for performance
+ var permissions = [];
+ if (this.read) {
+ permissions.push("r");
+ }
+ if (this.write) {
+ permissions.push("w");
+ }
+ if (this.delete) {
+ permissions.push("d");
+ }
+ if (this.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");
+ }
+ return permissions.join("");
+ };
+ return AccountSASPermissions;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * This is a helper class to construct a string representing the resources accessible by an AccountSAS. Setting a value
+ * to true means that any SAS which uses these permissions will grant access to that resource type. Once all the
+ * values are set, this should be serialized with toString and set as the resources field on an
+ * {@link AccountSASSignatureValues} object. It is possible to construct the resources string without this class, but
+ * the order of the resources is particular and this class guarantees correctness.
+ *
+ * @export
+ * @class AccountSASResourceTypes
+ */
+var AccountSASResourceTypes = /** @class */ (function () {
+ function AccountSASResourceTypes() {
+ /**
+ * Permission to access service level APIs granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASResourceTypes
+ */
+ this.service = false;
+ /**
+ * Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASResourceTypes
+ */
+ this.container = false;
+ /**
+ * Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASResourceTypes
+ */
+ this.object = false;
+ }
+ /**
+ * Creates an {@link AccountSASResourceTypes} from the specified resource types string. This method will throw an
+ * Error if it encounters a character that does not correspond to a valid resource type.
+ *
+ * @static
+ * @param {string} resourceTypes
+ * @returns {AccountSASResourceTypes}
+ * @memberof AccountSASResourceTypes
+ */
+ AccountSASResourceTypes.parse = function (resourceTypes) {
+ var accountSASResourceTypes = new AccountSASResourceTypes();
+ for (var _i = 0, resourceTypes_1 = resourceTypes; _i < resourceTypes_1.length; _i++) {
+ var c = resourceTypes_1[_i];
+ switch (c) {
+ case "s":
+ accountSASResourceTypes.service = true;
+ break;
+ case "c":
+ accountSASResourceTypes.container = true;
+ break;
+ case "o":
+ accountSASResourceTypes.object = true;
+ break;
+ default:
+ throw new RangeError("Invalid resource type: " + c);
+ }
+ }
+ return accountSASResourceTypes;
+ };
+ /**
+ * Converts the given resource types to a string.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
+ *
+ * @returns {string}
+ * @memberof AccountSASResourceTypes
+ */
+ AccountSASResourceTypes.prototype.toString = function () {
+ var resourceTypes = [];
+ if (this.service) {
+ resourceTypes.push("s");
+ }
+ if (this.container) {
+ resourceTypes.push("c");
+ }
+ if (this.object) {
+ resourceTypes.push("o");
+ }
+ return resourceTypes.join("");
+ };
+ return AccountSASResourceTypes;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * This is a helper class to construct a string representing the services accessible by an AccountSAS. Setting a value
+ * to true means that any SAS which uses these permissions will grant access to that service. Once all the
+ * values are set, this should be serialized with toString and set as the services field on an
+ * {@link AccountSASSignatureValues} object. It is possible to construct the services string without this class, but
+ * the order of the services is particular and this class guarantees correctness.
+ *
+ * @export
+ * @class AccountSASServices
+ */
+var AccountSASServices = /** @class */ (function () {
+ function AccountSASServices() {
+ /**
+ * Permission to access blob resources granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASServices
+ */
+ this.blob = false;
+ /**
+ * Permission to access file resources granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASServices
+ */
+ this.file = false;
+ /**
+ * Permission to access queue resources granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASServices
+ */
+ this.queue = false;
+ /**
+ * Permission to access table resources granted.
+ *
+ * @type {boolean}
+ * @memberof AccountSASServices
+ */
+ this.table = false;
+ }
+ /**
+ * Creates an {@link AccountSASServices} from the specified services string. This method will throw an
+ * Error if it encounters a character that does not correspond to a valid service.
+ *
+ * @static
+ * @param {string} services
+ * @returns {AccountSASServices}
+ * @memberof AccountSASServices
+ */
+ AccountSASServices.parse = function (services) {
+ var accountSASServices = new AccountSASServices();
+ for (var _i = 0, services_1 = services; _i < services_1.length; _i++) {
+ var c = services_1[_i];
+ switch (c) {
+ case "b":
+ accountSASServices.blob = true;
+ break;
+ case "f":
+ accountSASServices.file = true;
+ break;
+ case "q":
+ accountSASServices.queue = true;
+ break;
+ case "t":
+ accountSASServices.table = true;
+ break;
+ default:
+ throw new RangeError("Invalid service character: " + c);
+ }
+ }
+ return accountSASServices;
+ };
+ /**
+ * Converts the given services to a string.
+ *
+ * @returns {string}
+ * @memberof AccountSASServices
+ */
+ AccountSASServices.prototype.toString = function () {
+ var services = [];
+ if (this.blob) {
+ services.push("b");
+ }
+ if (this.table) {
+ services.push("t");
+ }
+ if (this.queue) {
+ services.push("q");
+ }
+ if (this.file) {
+ services.push("f");
+ }
+ return services.join("");
+ };
+ return AccountSASServices;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * Generate SasIPRange format string. For example:
+ *
+ * "8.8.8.8" or "1.1.1.1-255.255.255.255"
+ *
+ * @export
+ * @param {SasIPRange} ipRange
+ * @returns {string}
+ */
+function ipRangeToString(ipRange) {
+ return ipRange.end ? ipRange.start + "-" + ipRange.end : ipRange.start;
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+(function (SASProtocol) {
+ /**
+ * Protocol that allows HTTPS only
+ */
+ SASProtocol["Https"] = "https";
+ /**
+ * Protocol that allows both HTTPS and HTTP
+ */
+ SASProtocol["HttpsAndHttp"] = "https,http";
+})(exports.SASProtocol || (exports.SASProtocol = {}));
+/**
+ * Represents the components that make up an Azure Storage SAS' query parameters. This type is not constructed directly
+ * by the user; it is only generated by the {@link AccountSASSignatureValues} and {@link BlobSASSignatureValues}
+ * types. Once generated, it can be encoded into a {@code String} and appended to a URL directly (though caution should
+ * be taken here in case there are existing query parameters, which might affect the appropriate means of appending
+ * these query parameters).
+ *
+ * NOTE: Instances of this class are immutable.
+ *
+ * @export
+ * @class SASQueryParameters
+ */
+var SASQueryParameters = /** @class */ (function () {
+ /**
+ * Creates an instance of SASQueryParameters.
+ *
+ * @param {string} version Representing the storage version
+ * @param {string} signature Representing the signature for the SAS token
+ * @param {string} [permissions] Representing the storage permissions
+ * @param {string} [services] Representing the storage services being accessed (only for Account SAS)
+ * @param {string} [resourceTypes] Representing the storage resource types being accessed (only for Account SAS)
+ * @param {SASProtocol} [protocol] Representing the allowed HTTP protocol(s)
+ * @param {Date} [startsOn] Representing the start time for this SAS token
+ * @param {Date} [expiresOn] Representing the expiry time for this SAS token
+ * @param {SasIPRange} [ipRange] Representing the range of valid IP addresses for this SAS token
+ * @param {string} [identifier] Representing the signed identifier (only for Service SAS)
+ * @param {string} [resource] Representing the storage container or blob (only for Service SAS)
+ * @param {string} [cacheControl] Representing the cache-control header (only for Blob/File Service SAS)
+ * @param {string} [contentDisposition] Representing the content-disposition header (only for Blob/File Service SAS)
+ * @param {string} [contentEncoding] Representing the content-encoding header (only for Blob/File Service SAS)
+ * @param {string} [contentLanguage] Representing the content-language header (only for Blob/File Service SAS)
+ * @param {string} [contentType] Representing the content-type header (only for Blob/File Service SAS)
+ * @param {userDelegationKey} [userDelegationKey] Representing the user delegation key properties
+ * @memberof SASQueryParameters
+ */
+ function SASQueryParameters(version, signature, permissions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey) {
+ this.version = version;
+ this.services = services;
+ this.resourceTypes = resourceTypes;
+ this.expiresOn = expiresOn;
+ this.permissions = permissions;
+ this.protocol = protocol;
+ this.startsOn = startsOn;
+ this.ipRangeInner = ipRange;
+ this.identifier = identifier;
+ this.resource = resource;
+ this.signature = signature;
+ this.cacheControl = cacheControl;
+ this.contentDisposition = contentDisposition;
+ this.contentEncoding = contentEncoding;
+ this.contentLanguage = contentLanguage;
+ this.contentType = contentType;
+ if (userDelegationKey) {
+ this.signedOid = userDelegationKey.signedObjectId;
+ this.signedTenantId = userDelegationKey.signedTenantId;
+ this.signedStartsOn = userDelegationKey.signedStartsOn;
+ this.signedExpiresOn = userDelegationKey.signedExpiresOn;
+ this.signedService = userDelegationKey.signedService;
+ this.signedVersion = userDelegationKey.signedVersion;
+ }
+ }
+ Object.defineProperty(SASQueryParameters.prototype, "ipRange", {
+ /**
+ * Optional. IP range allowed for this SAS.
+ *
+ * @readonly
+ * @type {(SasIPRange | undefined)}
+ * @memberof SASQueryParameters
+ */
+ get: function () {
+ if (this.ipRangeInner) {
+ return {
+ end: this.ipRangeInner.end,
+ start: this.ipRangeInner.start
+ };
+ }
+ return undefined;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Encodes all SAS query parameters into a string that can be appended to a URL.
+ *
+ * @returns {string}
+ * @memberof SASQueryParameters
+ */
+ SASQueryParameters.prototype.toString = function () {
+ var params = [
+ "sv",
+ "ss",
+ "srt",
+ "spr",
+ "st",
+ "se",
+ "sip",
+ "si",
+ "skoid",
+ "sktid",
+ "skt",
+ "ske",
+ "sks",
+ "skv",
+ "sr",
+ "sp",
+ "sig",
+ "rscc",
+ "rscd",
+ "rsce",
+ "rscl",
+ "rsct"
+ ];
+ var queries = [];
+ for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
+ var param = params_1[_i];
+ switch (param) {
+ case "sv":
+ this.tryAppendQueryParameter(queries, param, this.version);
+ break;
+ case "ss":
+ this.tryAppendQueryParameter(queries, param, this.services);
+ break;
+ case "srt":
+ this.tryAppendQueryParameter(queries, param, this.resourceTypes);
+ break;
+ case "spr":
+ this.tryAppendQueryParameter(queries, param, this.protocol);
+ break;
+ case "st":
+ this.tryAppendQueryParameter(queries, param, this.startsOn ? truncatedISO8061Date(this.startsOn, false) : undefined);
+ break;
+ case "se":
+ this.tryAppendQueryParameter(queries, param, this.expiresOn ? truncatedISO8061Date(this.expiresOn, false) : undefined);
+ break;
+ case "sip":
+ this.tryAppendQueryParameter(queries, param, this.ipRange ? ipRangeToString(this.ipRange) : undefined);
+ break;
+ case "si":
+ this.tryAppendQueryParameter(queries, param, this.identifier);
+ break;
+ case "skoid": // Signed object ID
+ this.tryAppendQueryParameter(queries, param, this.signedOid);
+ break;
+ case "sktid": // Signed tenant ID
+ this.tryAppendQueryParameter(queries, param, this.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;
+ }
+ }
+ return queries.join("&");
+ };
+ /**
+ * A private helper method used to filter and append query key/value pairs into an array.
+ *
+ * @private
+ * @param {string[]} queries
+ * @param {string} key
+ * @param {string} [value]
+ * @returns {void}
+ * @memberof SASQueryParameters
+ */
+ SASQueryParameters.prototype.tryAppendQueryParameter = function (queries, key, value) {
+ if (!value) {
+ return;
+ }
+ key = encodeURIComponent(key);
+ value = encodeURIComponent(value);
+ if (key.length > 0 && value.length > 0) {
+ queries.push(key + "=" + value);
+ }
+ };
+ return SASQueryParameters;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * Generates a {@link SASQueryParameters} object which contains all SAS query parameters needed to make an actual
+ * REST request.
+ *
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
+ *
+ * @param {AccountSASSignatureValues} accountSASSignatureValues
+ * @param {StorageSharedKeyCredential} sharedKeyCredential
+ * @returns {SASQueryParameters}
+ * @memberof AccountSASSignatureValues
+ */
+function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) {
+ var version = accountSASSignatureValues.version
+ ? accountSASSignatureValues.version
+ : SERVICE_VERSION;
+ 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.");
+ }
+ var parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString());
+ var parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString();
+ var parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString();
+ var stringToSign = [
+ sharedKeyCredential.accountName,
+ parsedPermissions,
+ parsedServices,
+ parsedResourceTypes,
+ accountSASSignatureValues.startsOn
+ ? truncatedISO8061Date(accountSASSignatureValues.startsOn, false)
+ : "",
+ truncatedISO8061Date(accountSASSignatureValues.expiresOn, false),
+ accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "",
+ accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "",
+ version,
+ "" // Account SAS requires an additional newline character
+ ].join("\n");
+ var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
+ return new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange);
+}
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a blob. Setting
+ * a value to true means that any SAS which uses these permissions will grant permissions for that operation. Once all
+ * the values are set, this should be serialized with toString and set as the permissions field on a
+ * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
+ * the order of the permissions is particular and this class guarantees correctness.
+ *
+ * @export
+ * @class BlobSASPermissions
+ */
+var BlobSASPermissions = /** @class */ (function () {
+ function BlobSASPermissions() {
+ /**
+ * Specifies Read access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.read = false;
+ /**
+ * Specifies Add access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.add = false;
+ /**
+ * Specifies Create access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.create = false;
+ /**
+ * Specifies Write access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.write = false;
+ /**
+ * Specifies Delete access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.delete = false;
+ /**
+ * Specifies Delete version access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.deleteVersion = false;
+ /**
+ * Specfies Tag access granted.
+ *
+ * @type {boolean}
+ * @memberof BlobSASPermissions
+ */
+ this.tag = false;
+ }
+ /**
+ * Creates a {@link BlobSASPermissions} from the specified permissions string. This method will throw an
+ * Error if it encounters a character that does not correspond to a valid permission.
+ *
+ * @static
+ * @param {string} permissions
+ * @returns {BlobSASPermissions}
+ * @memberof BlobSASPermissions
+ */
+ BlobSASPermissions.parse = function (permissions) {
+ var blobSASPermissions = new BlobSASPermissions();
+ for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
+ var char = permissions_1[_i];
+ switch (char) {
+ case "r":
+ blobSASPermissions.read = true;
+ break;
+ case "a":
+ blobSASPermissions.add = true;
+ break;
+ case "c":
+ blobSASPermissions.create = true;
+ break;
+ case "w":
+ blobSASPermissions.write = true;
+ break;
+ case "d":
+ blobSASPermissions.delete = true;
+ break;
+ case "x":
+ blobSASPermissions.deleteVersion = true;
+ break;
+ case "t":
+ blobSASPermissions.tag = true;
+ break;
+ default:
+ throw new RangeError("Invalid permission: " + char);
+ }
+ }
+ return blobSASPermissions;
+ };
+ /**
+ * Converts the given permissions to a string. Using this method will guarantee the permissions are in an
+ * order accepted by the service.
+ *
+ * @returns {string} A string which represents the BlobSASPermissions
+ * @memberof BlobSASPermissions
+ */
+ BlobSASPermissions.prototype.toString = function () {
+ var permissions = [];
+ if (this.read) {
+ permissions.push("r");
+ }
+ if (this.add) {
+ permissions.push("a");
+ }
+ if (this.create) {
+ permissions.push("c");
+ }
+ if (this.write) {
+ permissions.push("w");
+ }
+ if (this.delete) {
+ permissions.push("d");
+ }
+ if (this.deleteVersion) {
+ permissions.push("x");
+ }
+ if (this.tag) {
+ permissions.push("t");
+ }
+ return permissions.join("");
+ };
+ return BlobSASPermissions;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+/**
+ * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container.
+ * Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation.
+ * Once all the values are set, this should be serialized with toString and set as the permissions field on a
+ * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
+ * the order of the permissions is particular and this class guarantees correctness.
+ *
+ * @export
+ * @class ContainerSASPermissions
+ */
+var ContainerSASPermissions = /** @class */ (function () {
+ function ContainerSASPermissions() {
+ /**
+ * Specifies Read access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.read = false;
+ /**
+ * Specifies Add access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.add = false;
+ /**
+ * Specifies Create access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.create = false;
+ /**
+ * Specifies Write access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.write = false;
+ /**
+ * Specifies Delete access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.delete = false;
+ /**
+ * Specifies Delete version access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.deleteVersion = false;
+ /**
+ * Specifies List access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.list = false;
+ /**
+ * Specfies Tag access granted.
+ *
+ * @type {boolean}
+ * @memberof ContainerSASPermissions
+ */
+ this.tag = false;
+ }
+ /**
+ * Creates an {@link ContainerSASPermissions} from the specified permissions string. This method will throw an
+ * Error if it encounters a character that does not correspond to a valid permission.
+ *
+ * @static
+ * @param {string} permissions
+ * @returns {ContainerSASPermissions}
+ * @memberof ContainerSASPermissions
+ */
+ ContainerSASPermissions.parse = function (permissions) {
+ var containerSASPermissions = new ContainerSASPermissions();
+ for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) {
+ var char = permissions_1[_i];
+ switch (char) {
+ case "r":
+ containerSASPermissions.read = true;
+ break;
+ case "a":
+ containerSASPermissions.add = true;
+ break;
+ case "c":
+ containerSASPermissions.create = true;
+ break;
+ case "w":
+ containerSASPermissions.write = true;
+ break;
+ case "d":
+ containerSASPermissions.delete = true;
+ break;
+ case "l":
+ containerSASPermissions.list = true;
+ break;
+ case "t":
+ containerSASPermissions.tag = true;
+ break;
+ case "x":
+ containerSASPermissions.deleteVersion = true;
+ break;
+ default:
+ throw new RangeError("Invalid permission " + char);
+ }
+ }
+ return containerSASPermissions;
+ };
+ /**
+ * Converts the given permissions to a string. Using this method will guarantee the permissions are in an
+ * order accepted by the service.
+ *
+ * The order of the characters should be as specified here to ensure correctness.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas
+ *
+ * @returns {string}
+ * @memberof ContainerSASPermissions
+ */
+ ContainerSASPermissions.prototype.toString = function () {
+ var permissions = [];
+ if (this.read) {
+ permissions.push("r");
+ }
+ if (this.add) {
+ permissions.push("a");
+ }
+ if (this.create) {
+ permissions.push("c");
+ }
+ if (this.write) {
+ permissions.push("w");
+ }
+ if (this.delete) {
+ permissions.push("d");
+ }
+ if (this.deleteVersion) {
+ permissions.push("x");
+ }
+ if (this.list) {
+ permissions.push("l");
+ }
+ if (this.tag) {
+ permissions.push("t");
+ }
+ return permissions.join("");
+ };
+ return ContainerSASPermissions;
+}());
+
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ *
+ * UserDelegationKeyCredential is only used for generation of user delegation SAS.
+ * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas
+ *
+ * @export
+ * @class UserDelegationKeyCredential
+ */
+var UserDelegationKeyCredential = /** @class */ (function () {
+ /**
+ * Creates an instance of UserDelegationKeyCredential.
+ * @param {string} accountName
+ * @param {UserDelegationKey} userDelegationKey
+ * @memberof UserDelegationKeyCredential
+ */
+ function UserDelegationKeyCredential(accountName, userDelegationKey) {
+ this.accountName = accountName;
+ this.userDelegationKey = userDelegationKey;
+ this.key = Buffer.from(userDelegationKey.value, "base64");
+ }
+ /**
+ * Generates a hash signature for an HTTP request or for a SAS.
+ *
+ * @param {string} stringToSign
+ * @returns {string}
+ * @memberof UserDelegationKeyCredential
+ */
+ UserDelegationKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) {
+ // console.log(`stringToSign: ${JSON.stringify(stringToSign)}`);
+ return crypto.createHmac("sha256", this.key)
+ .update(stringToSign, "utf8")
+ .digest("base64");
+ };
+ return UserDelegationKeyCredential;
+}());
+
+// Copyright (c) Microsoft Corporation. All rights reserved.
+function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) {
+ var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
+ var sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential
+ ? sharedKeyCredentialOrUserDelegationKey
+ : undefined;
+ var userDelegationKeyCredential;
+ if (sharedKeyCredential === undefined && accountName !== undefined) {
+ userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey);
+ }
+ if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) {
+ throw TypeError("Invalid sharedKeyCredential, userDelegationKey or accountName.");
+ }
+ // Version 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 {
+ return generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential);
+ }
+ }
+ if (version >= "2015-04-05") {
+ if (sharedKeyCredential !== undefined) {
+ return generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential);
+ }
+ else {
+ throw new RangeError("'version' must be >= '2018-11-09' when generating user delegation SAS using user delegation key.");
+ }
+ }
+ throw new RangeError("'version' must be >= '2015-04-05'.");
+}
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ * IMPLEMENTATION FOR API VERSION FROM 2015-04-05 AND BEFORE 2018-11-09.
+ *
+ * Creates an instance of SASQueryParameters.
+ *
+ * Only accepts required settings needed to create a SAS. For optional settings please
+ * set corresponding properties directly, such as permissions, startsOn and identifier.
+ *
+ * WARNING: When identifier is not provided, permissions and expiresOn are required.
+ * You MUST assign value to identifier or expiresOn & permissions manually if you initial with
+ * this constructor.
+ *
+ * @param {BlobSASSignatureValues} blobSASSignatureValues
+ * @param {StorageSharedKeyCredential} sharedKeyCredential
+ * @returns {SASQueryParameters}
+ */
+function generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) {
+ if (!blobSASSignatureValues.identifier &&
+ !blobSASSignatureValues.permissions &&
+ !blobSASSignatureValues.expiresOn) {
+ throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
+ }
+ var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
+ var resource = "c";
+ var verifiedPermissions;
+ if (blobSASSignatureValues.snapshotTime) {
+ throw RangeError("'version' must be >= '2018-11-09' when provided 'snapshotTime'.");
+ }
+ if (blobSASSignatureValues.versionId) {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'versionId'.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.deleteVersion &&
+ version < "2019-10-10") {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.tag &&
+ version < "2019-12-12") {
+ throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission.");
+ }
+ if (blobSASSignatureValues.blobName) {
+ resource = "b";
+ }
+ // Calling parse and toString guarantees the proper ordering and throws on invalid characters.
+ if (blobSASSignatureValues.permissions) {
+ if (blobSASSignatureValues.blobName) {
+ verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ else {
+ verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ }
+ // Signature is generated on the un-url-encoded values.
+ var stringToSign = [
+ verifiedPermissions ? verifiedPermissions : "",
+ blobSASSignatureValues.startsOn
+ ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
+ : "",
+ blobSASSignatureValues.expiresOn
+ ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
+ : "",
+ getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
+ blobSASSignatureValues.identifier,
+ blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
+ blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
+ version,
+ blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
+ blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
+ blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
+ blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
+ blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
+ ].join("\n");
+ var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
+ return new SASQueryParameters(version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);
+}
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ * IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
+ *
+ * Creates an instance of SASQueryParameters.
+ *
+ * Only accepts required settings needed to create a SAS. For optional settings please
+ * set corresponding properties directly, such as permissions, startsOn and identifier.
+ *
+ * WARNING: When identifier is not provided, permissions and expiresOn are required.
+ * You MUST assign value to identifier or expiresOn & permissions manually if you initial with
+ * this constructor.
+ *
+ * @param {BlobSASSignatureValues} blobSASSignatureValues
+ * @param {StorageSharedKeyCredential} sharedKeyCredential
+ * @returns {SASQueryParameters}
+ */
+function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) {
+ if (!blobSASSignatureValues.identifier &&
+ !blobSASSignatureValues.permissions &&
+ !blobSASSignatureValues.expiresOn) {
+ throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided.");
+ }
+ var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
+ var resource = "c";
+ var verifiedPermissions;
+ if (blobSASSignatureValues.versionId && version < "2019-10-10") {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'versionId'.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.deleteVersion &&
+ version < "2019-10-10") {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.tag &&
+ version < "2019-12-12") {
+ throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission.");
+ }
+ if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
+ throw RangeError("Must provide 'blobName' when provided 'snapshotTime'.");
+ }
+ if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) {
+ throw RangeError("Must provide 'blobName' when provided 'versionId'.");
+ }
+ var 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.
+ if (blobSASSignatureValues.permissions) {
+ if (blobSASSignatureValues.blobName) {
+ verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ else {
+ verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ }
+ // Signature is generated on the un-url-encoded values.
+ var stringToSign = [
+ verifiedPermissions ? verifiedPermissions : "",
+ blobSASSignatureValues.startsOn
+ ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
+ : "",
+ blobSASSignatureValues.expiresOn
+ ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
+ : "",
+ getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
+ blobSASSignatureValues.identifier,
+ blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
+ blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
+ version,
+ resource,
+ timestamp,
+ blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "",
+ blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "",
+ blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "",
+ blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "",
+ blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : ""
+ ].join("\n");
+ var signature = sharedKeyCredential.computeHMACSHA256(stringToSign);
+ return new SASQueryParameters(version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType);
+}
+/**
+ * ONLY AVAILABLE IN NODE.JS RUNTIME.
+ * IMPLEMENTATION FOR API VERSION FROM 2018-11-09.
+ *
+ * Creates an instance of SASQueryParameters.
+ *
+ * Only accepts required settings needed to create a SAS. For optional settings please
+ * set corresponding properties directly, such as permissions, startsOn and identifier.
+ *
+ * WARNING: identifier will be ignored, permissions and expiresOn are required.
+ *
+ * @param {BlobSASSignatureValues} blobSASSignatureValues
+ * @param {UserDelegationKeyCredential} userDelegationKeyCredential
+ * @returns {SASQueryParameters}
+ */
+function generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) {
+ if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) {
+ throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS.");
+ }
+ var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION;
+ if (blobSASSignatureValues.versionId && version < "2019-10-10") {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'versionId'.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.deleteVersion &&
+ version < "2019-10-10") {
+ throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission.");
+ }
+ if (blobSASSignatureValues.permissions &&
+ blobSASSignatureValues.permissions.tag &&
+ version < "2019-12-12") {
+ throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission.");
+ }
+ var resource = "c";
+ var verifiedPermissions;
+ if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) {
+ throw RangeError("Must provide 'blobName' when provided 'snapshotTime'.");
+ }
+ if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) {
+ throw RangeError("Must provide 'blobName' when provided 'versionId'.");
+ }
+ var 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.
+ if (blobSASSignatureValues.permissions) {
+ if (blobSASSignatureValues.blobName) {
+ verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ else {
+ verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString();
+ }
+ }
+ // Signature is generated on the un-url-encoded values.
+ var stringToSign = [
+ verifiedPermissions ? verifiedPermissions : "",
+ blobSASSignatureValues.startsOn
+ ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false)
+ : "",
+ blobSASSignatureValues.expiresOn
+ ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false)
+ : "",
+ getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName),
+ userDelegationKeyCredential.userDelegationKey.signedObjectId,
+ userDelegationKeyCredential.userDelegationKey.signedTenantId,
+ userDelegationKeyCredential.userDelegationKey.signedStartsOn
+ ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false)
+ : "",
+ userDelegationKeyCredential.userDelegationKey.signedExpiresOn
+ ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false)
+ : "",
+ userDelegationKeyCredential.userDelegationKey.signedService,
+ userDelegationKeyCredential.userDelegationKey.signedVersion,
+ blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "",
+ blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "",
+ version,
+ resource,
+ timestamp,
+ blobSASSignatureValues.cacheControl,
+ blobSASSignatureValues.contentDisposition,
+ blobSASSignatureValues.contentEncoding,
+ blobSASSignatureValues.contentLanguage,
+ blobSASSignatureValues.contentType
+ ].join("\n");
+ var signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign);
+ return new SASQueryParameters(version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey);
+}
+function getCanonicalName(accountName, containerName, blobName) {
+ // Container: "/blob/account/containerName"
+ // Blob: "/blob/account/containerName/blobName"
+ var elements = ["/blob/" + accountName + "/" + containerName];
+ if (blobName) {
+ elements.push("/" + blobName);
+ }
+ return elements.join("");
+}
+
+Object.defineProperty(exports, 'BaseRequestPolicy', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.BaseRequestPolicy;
+ }
+});
+Object.defineProperty(exports, 'HttpHeaders', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.HttpHeaders;
+ }
+});
+Object.defineProperty(exports, 'RequestPolicyOptions', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.RequestPolicyOptions;
+ }
+});
+Object.defineProperty(exports, 'RestError', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.RestError;
+ }
+});
+Object.defineProperty(exports, 'WebResource', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.WebResource;
+ }
+});
+Object.defineProperty(exports, 'deserializationPolicy', {
+ enumerable: true,
+ get: function () {
+ return coreHttp.deserializationPolicy;
+ }
+});
+exports.AccountSASPermissions = AccountSASPermissions;
+exports.AccountSASResourceTypes = AccountSASResourceTypes;
+exports.AccountSASServices = AccountSASServices;
+exports.AnonymousCredential = AnonymousCredential;
+exports.AnonymousCredentialPolicy = AnonymousCredentialPolicy;
+exports.AppendBlobClient = AppendBlobClient;
+exports.BlobBatch = BlobBatch;
+exports.BlobBatchClient = BlobBatchClient;
+exports.BlobClient = BlobClient;
+exports.BlobLeaseClient = BlobLeaseClient;
+exports.BlobSASPermissions = BlobSASPermissions;
+exports.BlobServiceClient = BlobServiceClient;
+exports.BlockBlobClient = BlockBlobClient;
+exports.ContainerClient = ContainerClient;
+exports.ContainerSASPermissions = ContainerSASPermissions;
+exports.Credential = Credential;
+exports.CredentialPolicy = CredentialPolicy;
+exports.PageBlobClient = PageBlobClient;
+exports.Pipeline = Pipeline;
+exports.SASQueryParameters = SASQueryParameters;
+exports.StorageBrowserPolicy = StorageBrowserPolicy;
+exports.StorageBrowserPolicyFactory = StorageBrowserPolicyFactory;
+exports.StorageOAuthScopes = StorageOAuthScopes;
+exports.StorageRetryPolicy = StorageRetryPolicy;
+exports.StorageRetryPolicyFactory = StorageRetryPolicyFactory;
+exports.StorageSharedKeyCredential = StorageSharedKeyCredential;
+exports.StorageSharedKeyCredentialPolicy = StorageSharedKeyCredentialPolicy;
+exports.generateAccountSASQueryParameters = generateAccountSASQueryParameters;
+exports.generateBlobSASQueryParameters = generateBlobSASQueryParameters;
+exports.logger = logger;
+exports.newPipeline = newPipeline;
+//# sourceMappingURL=index.js.map
+
+
+/***/ }),
+/* 374 */,
+/* 375 */,
+/* 376 */,
+/* 377 */,
+/* 378 */,
+/* 379 */,
+/* 380 */,
+/* 381 */,
+/* 382 */,
+/* 383 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+const assert = __webpack_require__(357);
+const path = __webpack_require__(622);
+const pathHelper = __webpack_require__(972);
+const IS_WINDOWS = process.platform === 'win32';
+/**
+ * Helper class for parsing paths into segments
+ */
+class Path {
+ /**
+ * Constructs a Path
+ * @param itemPath Path or array of segments
+ */
+ constructor(itemPath) {
+ this.segments = [];
+ // String
+ if (typeof itemPath === 'string') {
+ assert(itemPath, `Parameter 'itemPath' must not be empty`);
+ // Normalize slashes and trim unnecessary trailing slash
+ itemPath = pathHelper.safeTrimTrailingSeparator(itemPath);
+ // Not rooted
+ if (!pathHelper.hasRoot(itemPath)) {
+ this.segments = itemPath.split(path.sep);
+ }
+ // Rooted
+ else {
+ // Add all segments, while not at the root
+ let remaining = itemPath;
+ let dir = pathHelper.dirname(remaining);
+ while (dir !== remaining) {
+ // Add the segment
+ const basename = path.basename(remaining);
+ this.segments.unshift(basename);
+ // Truncate the last segment
+ remaining = dir;
+ dir = pathHelper.dirname(remaining);
+ }
+ // Remainder is the root
+ this.segments.unshift(remaining);
+ }
+ }
+ // Array
+ else {
+ // Must not be empty
+ assert(itemPath.length > 0, `Parameter 'itemPath' must not be an empty array`);
+ // Each segment
+ for (let i = 0; i < itemPath.length; i++) {
+ let segment = itemPath[i];
+ // Must not be empty
+ assert(segment, `Parameter 'itemPath' must not contain any empty segments`);
+ // Normalize slashes
+ segment = pathHelper.normalizeSeparators(itemPath[i]);
+ // Root segment
+ if (i === 0 && pathHelper.hasRoot(segment)) {
+ segment = pathHelper.safeTrimTrailingSeparator(segment);
+ assert(segment === pathHelper.dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`);
+ this.segments.push(segment);
+ }
+ // All other segments
+ else {
+ // Must not contain slash
+ assert(!segment.includes(path.sep), `Parameter 'itemPath' contains unexpected path separators`);
+ this.segments.push(segment);
+ }
+ }
+ }
+ }
+ /**
+ * Converts the path to it's string representation
+ */
+ toString() {
+ // First segment
+ let result = this.segments[0];
+ // All others
+ let skipSlash = result.endsWith(path.sep) || (IS_WINDOWS && /^[A-Z]:$/i.test(result));
+ for (let i = 1; i < this.segments.length; i++) {
+ if (skipSlash) {
+ skipSlash = false;
+ }
+ else {
+ result += path.sep;
+ }
+ result += this.segments[i];
+ }
+ return result;
+ }
+}
+exports.Path = Path;
+//# sourceMappingURL=internal-path.js.map
+
+/***/ }),
+/* 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__(213);
+const urlParse = __webpack_require__(835).parse;
+const util = __webpack_require__(669);
+const pubsuffix = __webpack_require__(562);
+const Store = __webpack_require__(338).Store;
+const MemoryCookieStore = __webpack_require__(332).MemoryCookieStore;
+const pathMatch = __webpack_require__(348).pathMatch;
+const VERSION = __webpack_require__(460);
+const { fromCallback } = __webpack_require__(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
+ * *DIGIT ( non-digit *OCTET )
+ * or
+ * *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 */,
+/* 395 */,
+/* 396 */,
+/* 397 */,
+/* 398 */,
+/* 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 */
+/***/ (function(module) {
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+/* global global, define, System, Reflect, Promise */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __createBinding;
+(function (factory) {
+ var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+ if (typeof define === "function" && define.amd) {
+ define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+ }
+ else if ( true && typeof module.exports === "object") {
+ factory(createExporter(root, createExporter(module.exports)));
+ }
+ else {
+ factory(createExporter(root));
+ }
+ function createExporter(exports, previous) {
+ if (exports !== root) {
+ if (typeof Object.create === "function") {
+ Object.defineProperty(exports, "__esModule", { value: true });
+ }
+ else {
+ exports.__esModule = true;
+ }
+ }
+ return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+ }
+})
+(function (exporter) {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+
+ __extends = function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+
+ __assign = Object.assign || function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+
+ __rest = function (s, e) {
+ var t = {};
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+ t[p] = s[p];
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+ t[p[i]] = s[p[i]];
+ }
+ return t;
+ };
+
+ __decorate = function (decorators, target, key, desc) {
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
+ };
+
+ __param = function (paramIndex, decorator) {
+ return function (target, key) { decorator(target, key, paramIndex); }
+ };
+
+ __metadata = function (metadataKey, metadataValue) {
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+ };
+
+ __awaiter = function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+ };
+
+ __generator = function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+ };
+
+ __createBinding = function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+ };
+
+ __exportStar = function (m, exports) {
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];
+ };
+
+ __values = function (o) {
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+ if (m) return m.call(o);
+ if (o && typeof o.length === "number") return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+ };
+
+ __read = function (o, n) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
+ if (!m) return o;
+ var i = m.call(o), r, ar = [], e;
+ try {
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+ }
+ catch (error) { e = { error: error }; }
+ finally {
+ try {
+ if (r && !r.done && (m = i["return"])) m.call(i);
+ }
+ finally { if (e) throw e.error; }
+ }
+ return ar;
+ };
+
+ __spread = function () {
+ for (var ar = [], i = 0; i < arguments.length; i++)
+ ar = ar.concat(__read(arguments[i]));
+ return ar;
+ };
+
+ __spreadArrays = function () {
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+ r[k] = a[j];
+ return r;
+ };
+
+ __await = function (v) {
+ return this instanceof __await ? (this.v = v, this) : new __await(v);
+ };
+
+ __asyncGenerator = function (thisArg, _arguments, generator) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
+ return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
+ function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+ function fulfill(value) { resume("next", value); }
+ function reject(value) { resume("throw", value); }
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+ };
+
+ __asyncDelegator = function (o) {
+ var i, p;
+ return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+ function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
+ };
+
+ __asyncValues = function (o) {
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+ var m = o[Symbol.asyncIterator], i;
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+ };
+
+ __makeTemplateObject = function (cooked, raw) {
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+ return cooked;
+ };
+
+ __importStar = function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+ };
+
+ __importDefault = function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+ };
+
+ __classPrivateFieldGet = function (receiver, privateMap) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to get private field on non-instance");
+ }
+ return privateMap.get(receiver);
+ };
+
+ __classPrivateFieldSet = function (receiver, privateMap, value) {
+ if (!privateMap.has(receiver)) {
+ throw new TypeError("attempted to set private field on non-instance");
+ }
+ privateMap.set(receiver, value);
+ return value;
+ };
+
+ exporter("__extends", __extends);
+ exporter("__assign", __assign);
+ exporter("__rest", __rest);
+ exporter("__decorate", __decorate);
+ exporter("__param", __param);
+ exporter("__metadata", __metadata);
+ exporter("__awaiter", __awaiter);
+ exporter("__generator", __generator);
+ exporter("__exportStar", __exportStar);
+ exporter("__createBinding", __createBinding);
+ exporter("__values", __values);
+ exporter("__read", __read);
+ exporter("__spread", __spread);
+ exporter("__spreadArrays", __spreadArrays);
+ exporter("__await", __await);
+ exporter("__asyncGenerator", __asyncGenerator);
+ exporter("__asyncDelegator", __asyncDelegator);
+ exporter("__asyncValues", __asyncValues);
+ exporter("__makeTemplateObject", __makeTemplateObject);
+ exporter("__importStar", __importStar);
+ exporter("__importDefault", __importDefault);
+ exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+ exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+});
+
+
+/***/ }),
+/* 423 */
+/***/ (function(module, __unusedexports, __webpack_require__) {
+
+// Generated by CoffeeScript 1.12.7
+(function() {
+ var NodeType, WriterState, XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDeclaration, XMLDocType, XMLDummy, XMLElement, XMLProcessingInstruction, XMLRaw, XMLText, XMLWriterBase, assign,
+ hasProp = {}.hasOwnProperty;
+
+ assign = __webpack_require__(582).assign;
+
+ NodeType = __webpack_require__(683);
+
+ XMLDeclaration = __webpack_require__(738);
+
+ XMLDocType = __webpack_require__(735);
+
+ XMLCData = __webpack_require__(657);
+
+ XMLComment = __webpack_require__(919);
+
+ XMLElement = __webpack_require__(796);
+
+ XMLRaw = __webpack_require__(660);
+
+ XMLText = __webpack_require__(708);
+
+ XMLProcessingInstruction = __webpack_require__(491);
+
+ XMLDummy = __webpack_require__(956);
+
+ XMLDTDAttList = __webpack_require__(801);
+
+ XMLDTDElement = __webpack_require__(463);
+
+ XMLDTDEntity = __webpack_require__(661);
+
+ XMLDTDNotation = __webpack_require__(19);
+
+ WriterState = __webpack_require__(541);
+
+ module.exports = XMLWriterBase = (function() {
+ function XMLWriterBase(options) {
+ var key, ref, value;
+ options || (options = {});
+ this.options = options;
+ ref = options.writer || {};
+ for (key in ref) {
+ if (!hasProp.call(ref, key)) continue;
+ value = ref[key];
+ this["_" + key] = this[key];
+ this[key] = value;
+ }
+ }
+
+ XMLWriterBase.prototype.filterOptions = function(options) {
+ var filteredOptions, ref, ref1, ref2, ref3, ref4, ref5, ref6;
+ options || (options = {});
+ options = assign({}, this.options, options);
+ filteredOptions = {
+ writer: this
+ };
+ filteredOptions.pretty = options.pretty || false;
+ filteredOptions.allowEmpty = options.allowEmpty || false;
+ filteredOptions.indent = (ref = options.indent) != null ? ref : ' ';
+ filteredOptions.newline = (ref1 = options.newline) != null ? ref1 : '\n';
+ filteredOptions.offset = (ref2 = options.offset) != null ? ref2 : 0;
+ filteredOptions.dontPrettyTextNodes = (ref3 = (ref4 = options.dontPrettyTextNodes) != null ? ref4 : options.dontprettytextnodes) != null ? ref3 : 0;
+ filteredOptions.spaceBeforeSlash = (ref5 = (ref6 = options.spaceBeforeSlash) != null ? ref6 : options.spacebeforeslash) != null ? ref5 : '';
+ if (filteredOptions.spaceBeforeSlash === true) {
+ filteredOptions.spaceBeforeSlash = ' ';
+ }
+ filteredOptions.suppressPrettyCount = 0;
+ filteredOptions.user = {};
+ filteredOptions.state = WriterState.None;
+ return filteredOptions;
+ };
+
+ XMLWriterBase.prototype.indent = function(node, options, level) {
+ var indentLevel;
+ if (!options.pretty || options.suppressPrettyCount) {
+ return '';
+ } else if (options.pretty) {
+ indentLevel = (level || 0) + options.offset + 1;
+ if (indentLevel > 0) {
+ return new Array(indentLevel).join(options.indent);
+ }
+ }
+ return '';
+ };
+
+ XMLWriterBase.prototype.endline = function(node, options, level) {
+ if (!options.pretty || options.suppressPrettyCount) {
+ return '';
+ } else {
+ return options.newline;
+ }
+ };
+
+ XMLWriterBase.prototype.attribute = function(att, options, level) {
+ var r;
+ this.openAttribute(att, options, level);
+ r = ' ' + att.name + '="' + att.value + '"';
+ this.closeAttribute(att, options, level);
+ return r;
+ };
+
+ XMLWriterBase.prototype.cdata = function(node, options, level) {
+ var r;
+ this.openNode(node, options, level);
+ options.state = WriterState.OpenTag;
+ r = this.indent(node, options, level) + '' + 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) + '' + 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) + '';
+ 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 += ' 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) + '' + 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) + '' + 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) + '' + 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) + '' + 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 */,
+/* 426 */,
+/* 427 */,
+/* 428 */,
+/* 429 */,
+/* 430 */,
+/* 431 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = __importStar(__webpack_require__(87));
+/**
+ * Commands
+ *
+ * Command Format:
+ * ::name key=value,key=value::message
+ *
+ * Examples:
+ * ::warning::This is the message
+ * ::set-env name=MY_VAR::some value
+ */
+function issueCommand(command, properties, message) {
+ const cmd = new Command(command, properties, message);
+ process.stdout.write(cmd.toString() + os.EOL);
+}
+exports.issueCommand = issueCommand;
+function issue(name, message = '') {
+ issueCommand(name, {}, message);
+}
+exports.issue = issue;
+const CMD_STRING = '::';
+class Command {
+ constructor(command, properties, message) {
+ if (!command) {
+ command = 'missing.command';
+ }
+ this.command = command;
+ this.properties = properties;
+ this.message = message;
+ }
+ toString() {
+ let cmdStr = CMD_STRING + this.command;
+ if (this.properties && Object.keys(this.properties).length > 0) {
+ cmdStr += ' ';
+ let first = true;
+ for (const key in this.properties) {
+ if (this.properties.hasOwnProperty(key)) {
+ const val = this.properties[key];
+ if (val) {
+ if (first) {
+ first = false;
+ }
+ else {
+ cmdStr += ',';
+ }
+ cmdStr += `${key}=${escapeProperty(val)}`;
+ }
+ }
+ }
+ }
+ cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
+ return cmdStr;
+ }
+}
+/**
+ * Sanitizes an input into a string so it can be passed into issueCommand safely
+ * @param input input to sanitize into a string
+ */
+function toCommandValue(input) {
+ if (input === null || input === undefined) {
+ return '';
+ }
+ else if (typeof input === 'string' || input instanceof String) {
+ return input;
+ }
+ return JSON.stringify(input);
+}
+exports.toCommandValue = toCommandValue;
+function escapeData(s) {
+ return toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A');
+}
+function escapeProperty(s) {
+ return toCommandValue(s)
+ .replace(/%/g, '%25')
+ .replace(/\r/g, '%0D')
+ .replace(/\n/g, '%0A')
+ .replace(/:/g, '%3A')
+ .replace(/,/g, '%2C');
+}
+//# sourceMappingURL=command.js.map
+
+/***/ }),
+/* 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* () {
+ const IS_WINDOWS = process.platform === 'win32';
+ if (IS_WINDOWS) {
+ const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
+ if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
+ // We only use zstandard compression on windows when gnu tar is installed due to
+ // a bug with compressing large files with bsdtar + zstd
+ args.push('--force-local');
+ }
+ else if (fs_1.existsSync(systemTar)) {
+ return systemTar;
+ }
+ else if (yield utils.isGnuTarInstalled()) {
+ args.push('--force-local');
+ }
+ }
+ return yield io.which('tar', true);
+ });
+}
+function execTar(args, compressionMethod, cwd) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
+ }
+ catch (error) {
+ throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
+ }
+ });
+}
+function getWorkingDirectory() {
+ var _a;
+ return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd();
+}
+function extractTar(archivePath, compressionMethod) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Create directory to extract tar into
+ const workingDirectory = getWorkingDirectory();
+ yield io.mkdirP(workingDirectory);
+ // --d: Decompress.
+ // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
+ // Using 30 here because we also support 32-bit self-hosted runners.
+ function getCompressionProgram() {
+ switch (compressionMethod) {
+ case constants_1.CompressionMethod.Zstd:
+ return ['--use-compress-program', 'zstd -d --long=30'];
+ case constants_1.CompressionMethod.ZstdWithoutLong:
+ return ['--use-compress-program', 'zstd -d'];
+ default:
+ return ['-z'];
+ }
+ }
+ const args = [
+ ...getCompressionProgram(),
+ '-xf',
+ archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
+ '-P',
+ '-C',
+ workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
+ ];
+ yield execTar(args, compressionMethod);
+ });
+}
+exports.extractTar = extractTar;
+function createTar(archiveFolder, sourceDirectories, compressionMethod) {
+ return __awaiter(this, void 0, void 0, function* () {
+ // Write source directories to manifest.txt to avoid command length limits
+ const manifestFilename = 'manifest.txt';
+ const cacheFileName = utils.getCacheFileName(compressionMethod);
+ fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
+ const workingDirectory = getWorkingDirectory();
+ // -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
+ // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
+ // Using 30 here because we also support 32-bit self-hosted runners.
+ // Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
+ function getCompressionProgram() {
+ switch (compressionMethod) {
+ case constants_1.CompressionMethod.Zstd:
+ return ['--use-compress-program', 'zstd -T0 --long=30'];
+ case constants_1.CompressionMethod.ZstdWithoutLong:
+ return ['--use-compress-program', 'zstd -T0'];
+ default:
+ return ['-z'];
+ }
+ }
+ const args = [
+ '--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;
+//# sourceMappingURL=tar.js.map
+
+/***/ }),
+/* 435 */,
+/* 436 */,
+/* 437 */,
+/* 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" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.propagation = exports.metrics = exports.trace = exports.context = void 0;
+__exportStar(__webpack_require__(276), exports);
+__exportStar(__webpack_require__(158), exports);
+__exportStar(__webpack_require__(2), exports);
+__exportStar(__webpack_require__(33), exports);
+__exportStar(__webpack_require__(744), exports);
+__exportStar(__webpack_require__(753), exports);
+__exportStar(__webpack_require__(278), exports);
+__exportStar(__webpack_require__(40), exports);
+__exportStar(__webpack_require__(318), exports);
+__exportStar(__webpack_require__(551), exports);
+__exportStar(__webpack_require__(659), exports);
+__exportStar(__webpack_require__(702), exports);
+__exportStar(__webpack_require__(43), exports);
+__exportStar(__webpack_require__(625), exports);
+__exportStar(__webpack_require__(450), exports);
+__exportStar(__webpack_require__(107), exports);
+__exportStar(__webpack_require__(189), exports);
+__exportStar(__webpack_require__(906), exports);
+__exportStar(__webpack_require__(727), exports);
+__exportStar(__webpack_require__(165), exports);
+__exportStar(__webpack_require__(851), exports);
+__exportStar(__webpack_require__(95), exports);
+__exportStar(__webpack_require__(767), exports);
+__exportStar(__webpack_require__(151), exports);
+__exportStar(__webpack_require__(162), 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__(839), exports);
+__exportStar(__webpack_require__(975), exports);
+__exportStar(__webpack_require__(70), exports);
+__exportStar(__webpack_require__(694), exports);
+__exportStar(__webpack_require__(695), exports);
+var context_base_1 = __webpack_require__(231);
+Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return context_base_1.Context; } });
+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 metrics_1 = __webpack_require__(136);
+/** Entrypoint for metrics API */
+exports.metrics = metrics_1.MetricsAPI.getInstance();
+var propagation_1 = __webpack_require__(22);
+/** Entrypoint for propagation API */
+exports.propagation = propagation_1.PropagationAPI.getInstance();
+exports.default = {
+ trace: exports.trace,
+ metrics: exports.metrics,
+ context: exports.context,
+ propagation: exports.propagation,
+};
+//# sourceMappingURL=index.js.map
+
+/***/ }),
+/* 441 */,
+/* 442 */,
+/* 443 */,
+/* 444 */,
+/* 445 */,
+/* 446 */,
+/* 447 */,
+/* 448 */,
+/* 449 */,
+/* 450 */
+/***/ (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.NOOP_METER_PROVIDER = exports.NoopMeterProvider = void 0;
+var NoopMeter_1 = __webpack_require__(625);
+/**
+ * An implementation of the {@link MeterProvider} which returns an impotent Meter
+ * for all calls to `getMeter`
+ */
+var NoopMeterProvider = /** @class */ (function () {
+ function NoopMeterProvider() {
+ }
+ NoopMeterProvider.prototype.getMeter = function (_name, _version) {
+ return NoopMeter_1.NOOP_METER;
+ };
+ return NoopMeterProvider;
+}());
+exports.NoopMeterProvider = NoopMeterProvider;
+exports.NOOP_METER_PROVIDER = new NoopMeterProvider();
+//# sourceMappingURL=NoopMeterProvider.js.map
+
+/***/ }),
+/* 451 */
+/***/ (function(module) {
+
+// Generated by CoffeeScript 1.12.7
+(function() {
+ var XMLNamedNodeMap;
+
+ module.exports = XMLNamedNodeMap = (function() {
+ function XMLNamedNodeMap(nodes) {
+ this.nodes = nodes;
+ }
+
+ Object.defineProperty(XMLNamedNodeMap.prototype, 'length', {
+ get: function() {
+ return Object.keys(this.nodes).length || 0;
+ }
+ });
+
+ XMLNamedNodeMap.prototype.clone = function() {
+ return this.nodes = null;
+ };
+
+ XMLNamedNodeMap.prototype.getNamedItem = function(name) {
+ return this.nodes[name];
+ };
+
+ XMLNamedNodeMap.prototype.setNamedItem = function(node) {
+ var oldNode;
+ oldNode = this.nodes[node.nodeName];
+ this.nodes[node.nodeName] = node;
+ return oldNode || null;
+ };
+
+ XMLNamedNodeMap.prototype.removeNamedItem = function(name) {
+ var oldNode;
+ oldNode = this.nodes[name];
+ delete this.nodes[name];
+ return oldNode || null;
+ };
+
+ XMLNamedNodeMap.prototype.item = function(index) {
+ return this.nodes[Object.keys(this.nodes)[index]] || null;
+ };
+
+ XMLNamedNodeMap.prototype.getNamedItemNS = function(namespaceURI, localName) {
+ throw new Error("This DOM method is not implemented.");
+ };
+
+ XMLNamedNodeMap.prototype.setNamedItemNS = function(node) {
+ throw new Error("This DOM method is not implemented.");
+ };
+
+ XMLNamedNodeMap.prototype.removeNamedItemNS = function(namespaceURI, localName) {
+ throw new Error("This DOM method is not implemented.");
+ };
+
+ return XMLNamedNodeMap;
+
+ })();
+
+}).call(this);
+
+
+/***/ }),
+/* 452 */,
+/* 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 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 = / 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>
+ // 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
+ for (const key of Object.keys(init)) {
+ const value = init[key];
+ this.append(key, value);
+ }
+ }
+ } else {
+ throw new TypeError('Provided initializer must be an object');
+ }
+ }
+
+ /**
+ * Return combined header value given name
+ *
+ * @param String name Header name
+ * @return Mixed
+ */
+ get(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key === undefined) {
+ return null;
+ }
+
+ return this[MAP][key].join(', ');
+ }
+
+ /**
+ * Iterate over all headers
+ *
+ * @param Function callback Executed for each item with parameters (value, name, thisArg)
+ * @param Boolean thisArg `this` context for callback function
+ * @return Void
+ */
+ forEach(callback) {
+ let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+
+ let pairs = getHeaders(this);
+ let i = 0;
+ while (i < pairs.length) {
+ var _pairs$i = pairs[i];
+ const name = _pairs$i[0],
+ value = _pairs$i[1];
+
+ callback.call(thisArg, value, name, this);
+ pairs = getHeaders(this);
+ i++;
+ }
+ }
+
+ /**
+ * Overwrite header values given name
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ set(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ this[MAP][key !== undefined ? key : name] = [value];
+ }
+
+ /**
+ * Append a value onto existing header
+ *
+ * @param String name Header name
+ * @param String value Header value
+ * @return Void
+ */
+ append(name, value) {
+ name = `${name}`;
+ value = `${value}`;
+ validateName(name);
+ validateValue(value);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ this[MAP][key].push(value);
+ } else {
+ this[MAP][name] = [value];
+ }
+ }
+
+ /**
+ * Check for header name existence
+ *
+ * @param String name Header name
+ * @return Boolean
+ */
+ has(name) {
+ name = `${name}`;
+ validateName(name);
+ return find(this[MAP], name) !== undefined;
+ }
+
+ /**
+ * Delete all header values given name
+ *
+ * @param String name Header name
+ * @return Void
+ */
+ delete(name) {
+ name = `${name}`;
+ validateName(name);
+ const key = find(this[MAP], name);
+ if (key !== undefined) {
+ delete this[MAP][key];
+ }
+ }
+
+ /**
+ * Return raw headers (non-spec api)
+ *
+ * @return Object
+ */
+ raw() {
+ return this[MAP];
+ }
+
+ /**
+ * Get an iterator on keys.
+ *
+ * @return Iterator
+ */
+ keys() {
+ return createHeadersIterator(this, 'key');
+ }
+
+ /**
+ * Get an iterator on values.
+ *
+ * @return Iterator
+ */
+ values() {
+ return createHeadersIterator(this, 'value');
+ }
+
+ /**
+ * Get an iterator on entries.
+ *
+ * This is the default iterator of the Headers object.
+ *
+ * @return Iterator
+ */
+ [Symbol.iterator]() {
+ return createHeadersIterator(this, 'key+value');
+ }
+}
+Headers.prototype.entries = Headers.prototype[Symbol.iterator];
+
+Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
+ value: 'Headers',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Headers.prototype, {
+ get: { enumerable: true },
+ forEach: { enumerable: true },
+ set: { enumerable: true },
+ append: { enumerable: true },
+ has: { enumerable: true },
+ delete: { enumerable: true },
+ keys: { enumerable: true },
+ values: { enumerable: true },
+ entries: { enumerable: true }
+});
+
+function getHeaders(headers) {
+ let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
+
+ const keys = Object.keys(headers[MAP]).sort();
+ return keys.map(kind === 'key' ? function (k) {
+ return k.toLowerCase();
+ } : kind === 'value' ? function (k) {
+ return headers[MAP][k].join(', ');
+ } : function (k) {
+ return [k.toLowerCase(), headers[MAP][k].join(', ')];
+ });
+}
+
+const INTERNAL = Symbol('internal');
+
+function createHeadersIterator(target, kind) {
+ const iterator = Object.create(HeadersIteratorPrototype);
+ iterator[INTERNAL] = {
+ target,
+ kind,
+ index: 0
+ };
+ return iterator;
+}
+
+const HeadersIteratorPrototype = Object.setPrototypeOf({
+ next() {
+ // istanbul ignore if
+ if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
+ throw new TypeError('Value of `this` is not a HeadersIterator');
+ }
+
+ var _INTERNAL = this[INTERNAL];
+ const target = _INTERNAL.target,
+ kind = _INTERNAL.kind,
+ index = _INTERNAL.index;
+
+ const values = getHeaders(target, kind);
+ const len = values.length;
+ if (index >= len) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ this[INTERNAL].index = index + 1;
+
+ return {
+ value: values[index],
+ done: false
+ };
+ }
+}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
+
+Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
+ value: 'HeadersIterator',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+/**
+ * Export the Headers object in a form that Node.js can consume.
+ *
+ * @param Headers headers
+ * @return Object
+ */
+function exportNodeCompatibleHeaders(headers) {
+ const obj = Object.assign({ __proto__: null }, headers[MAP]);
+
+ // http.request() only supports string as Host header. This hack makes
+ // specifying custom Host header possible.
+ const hostHeaderKey = find(headers[MAP], 'Host');
+ if (hostHeaderKey !== undefined) {
+ obj[hostHeaderKey] = obj[hostHeaderKey][0];
+ }
+
+ return obj;
+}
+
+/**
+ * Create a Headers object from an object of headers, ignoring those that do
+ * not conform to HTTP grammar productions.
+ *
+ * @param Object obj Object of headers
+ * @return Headers
+ */
+function createHeadersLenient(obj) {
+ const headers = new Headers();
+ for (const name of Object.keys(obj)) {
+ if (invalidTokenRegex.test(name)) {
+ continue;
+ }
+ if (Array.isArray(obj[name])) {
+ for (const val of obj[name]) {
+ if (invalidHeaderCharRegex.test(val)) {
+ continue;
+ }
+ if (headers[MAP][name] === undefined) {
+ headers[MAP][name] = [val];
+ } else {
+ headers[MAP][name].push(val);
+ }
+ }
+ } else if (!invalidHeaderCharRegex.test(obj[name])) {
+ headers[MAP][name] = [obj[name]];
+ }
+ }
+ return headers;
+}
+
+const INTERNALS$1 = Symbol('Response internals');
+
+// fix an issue where "STATUS_CODES" aren't a named export for node <10
+const STATUS_CODES = http.STATUS_CODES;
+
+/**
+ * Response class
+ *
+ * @param Stream body Readable stream
+ * @param Object opts Response options
+ * @return Void
+ */
+class Response {
+ constructor() {
+ let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+ let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ Body.call(this, body, opts);
+
+ const status = opts.status || 200;
+ const headers = new Headers(opts.headers);
+
+ if (body != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(body);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ this[INTERNALS$1] = {
+ url: opts.url,
+ status,
+ statusText: opts.statusText || STATUS_CODES[status],
+ headers,
+ counter: opts.counter
+ };
+ }
+
+ get url() {
+ return this[INTERNALS$1].url || '';
+ }
+
+ get status() {
+ return this[INTERNALS$1].status;
+ }
+
+ /**
+ * Convenience property representing if the request ended normally
+ */
+ get ok() {
+ return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
+ }
+
+ get redirected() {
+ return this[INTERNALS$1].counter > 0;
+ }
+
+ get statusText() {
+ return this[INTERNALS$1].statusText;
+ }
+
+ get headers() {
+ return this[INTERNALS$1].headers;
+ }
+
+ /**
+ * Clone this response
+ *
+ * @return Response
+ */
+ clone() {
+ return new Response(clone(this), {
+ url: this.url,
+ status: this.status,
+ statusText: this.statusText,
+ headers: this.headers,
+ ok: this.ok,
+ redirected: this.redirected
+ });
+ }
+}
+
+Body.mixIn(Response.prototype);
+
+Object.defineProperties(Response.prototype, {
+ url: { enumerable: true },
+ status: { enumerable: true },
+ ok: { enumerable: true },
+ redirected: { enumerable: true },
+ statusText: { enumerable: true },
+ headers: { enumerable: true },
+ clone: { enumerable: true }
+});
+
+Object.defineProperty(Response.prototype, Symbol.toStringTag, {
+ value: 'Response',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+const INTERNALS$2 = Symbol('Request internals');
+
+// fix an issue where "format", "parse" aren't a named export for node <10
+const parse_url = Url.parse;
+const format_url = Url.format;
+
+const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
+
+/**
+ * Check if a value is an instance of Request.
+ *
+ * @param Mixed input
+ * @return Boolean
+ */
+function isRequest(input) {
+ return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
+}
+
+function isAbortSignal(signal) {
+ const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
+ return !!(proto && proto.constructor.name === 'AbortSignal');
+}
+
+/**
+ * Request class
+ *
+ * @param Mixed input Url or Request instance
+ * @param Object init Custom options
+ * @return Void
+ */
+class Request {
+ constructor(input) {
+ let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ let parsedURL;
+
+ // normalize input
+ if (!isRequest(input)) {
+ if (input && input.href) {
+ // in order to support Node.js' Url objects; though WHATWG's URL objects
+ // will fall into this branch also (since their `toString()` will return
+ // `href` property anyway)
+ parsedURL = parse_url(input.href);
+ } else {
+ // coerce input to a string before attempting to parse
+ parsedURL = parse_url(`${input}`);
+ }
+ input = {};
+ } else {
+ parsedURL = parse_url(input.url);
+ }
+
+ let method = init.method || input.method || 'GET';
+ method = method.toUpperCase();
+
+ if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
+ throw new TypeError('Request with GET/HEAD method cannot have body');
+ }
+
+ let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
+
+ Body.call(this, inputBody, {
+ timeout: init.timeout || input.timeout || 0,
+ size: init.size || input.size || 0
+ });
+
+ const headers = new Headers(init.headers || input.headers || {});
+
+ if (inputBody != null && !headers.has('Content-Type')) {
+ const contentType = extractContentType(inputBody);
+ if (contentType) {
+ headers.append('Content-Type', contentType);
+ }
+ }
+
+ let signal = isRequest(input) ? input.signal : null;
+ if ('signal' in init) signal = init.signal;
+
+ if (signal != null && !isAbortSignal(signal)) {
+ throw new TypeError('Expected signal to be an instanceof AbortSignal');
+ }
+
+ this[INTERNALS$2] = {
+ method,
+ redirect: init.redirect || input.redirect || 'follow',
+ headers,
+ parsedURL,
+ signal
+ };
+
+ // node-fetch-only options
+ this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
+ this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
+ this.counter = init.counter || input.counter || 0;
+ this.agent = init.agent || input.agent;
+ }
+
+ get method() {
+ return this[INTERNALS$2].method;
+ }
+
+ get url() {
+ return format_url(this[INTERNALS$2].parsedURL);
+ }
+
+ get headers() {
+ return this[INTERNALS$2].headers;
+ }
+
+ get redirect() {
+ return this[INTERNALS$2].redirect;
+ }
+
+ get signal() {
+ return this[INTERNALS$2].signal;
+ }
+
+ /**
+ * Clone this request
+ *
+ * @return Request
+ */
+ clone() {
+ return new Request(this);
+ }
+}
+
+Body.mixIn(Request.prototype);
+
+Object.defineProperty(Request.prototype, Symbol.toStringTag, {
+ value: 'Request',
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(Request.prototype, {
+ method: { enumerable: true },
+ url: { enumerable: true },
+ headers: { enumerable: true },
+ redirect: { enumerable: true },
+ clone: { enumerable: true },
+ signal: { enumerable: true }
+});
+
+/**
+ * Convert a Request to Node.js http request options.
+ *
+ * @param Request A Request instance
+ * @return Object The options object to be passed to http.request
+ */
+function getNodeRequestOptions(request) {
+ const parsedURL = request[INTERNALS$2].parsedURL;
+ const headers = new Headers(request[INTERNALS$2].headers);
+
+ // fetch step 1.3
+ if (!headers.has('Accept')) {
+ headers.set('Accept', '*/*');
+ }
+
+ // Basic fetch
+ if (!parsedURL.protocol || !parsedURL.hostname) {
+ throw new TypeError('Only absolute URLs are supported');
+ }
+
+ if (!/^https?:$/.test(parsedURL.protocol)) {
+ throw new TypeError('Only HTTP(S) protocols are supported');
+ }
+
+ if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
+ throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
+ }
+
+ // HTTP-network-or-cache fetch steps 2.4-2.7
+ let contentLengthValue = null;
+ if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
+ contentLengthValue = '0';
+ }
+ if (request.body != null) {
+ const totalBytes = getTotalBytes(request);
+ if (typeof totalBytes === 'number') {
+ contentLengthValue = String(totalBytes);
+ }
+ }
+ if (contentLengthValue) {
+ headers.set('Content-Length', contentLengthValue);
+ }
+
+ // HTTP-network-or-cache fetch step 2.11
+ if (!headers.has('User-Agent')) {
+ headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
+ }
+
+ // HTTP-network-or-cache fetch step 2.15
+ if (request.compress && !headers.has('Accept-Encoding')) {
+ headers.set('Accept-Encoding', 'gzip,deflate');
+ }
+
+ let agent = request.agent;
+ if (typeof agent === 'function') {
+ agent = agent(parsedURL);
+ }
+
+ if (!headers.has('Connection') && !agent) {
+ headers.set('Connection', 'close');
+ }
+
+ // HTTP-network fetch step 4.2
+ // chunked encoding is handled by Node.js
+
+ return Object.assign({}, parsedURL, {
+ method: request.method,
+ headers: exportNodeCompatibleHeaders(headers),
+ agent
+ });
+}
+
+/**
+ * abort-error.js
+ *
+ * AbortError interface for cancelled requests
+ */
+
+/**
+ * Create AbortError instance
+ *
+ * @param String message Error message for human
+ * @return AbortError
+ */
+function AbortError(message) {
+ Error.call(this, message);
+
+ this.type = 'aborted';
+ this.message = message;
+
+ // hide custom error implementation details from end-users
+ Error.captureStackTrace(this, this.constructor);
+}
+
+AbortError.prototype = Object.create(Error.prototype);
+AbortError.prototype.constructor = AbortError;
+AbortError.prototype.name = 'AbortError';
+
+// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
+const PassThrough$1 = Stream.PassThrough;
+const resolve_url = Url.resolve;
+
+/**
+ * Fetch function
+ *
+ * @param Mixed url Absolute url or Request instance
+ * @param Object opts Fetch options
+ * @return Promise
+ */
+function fetch(url, opts) {
+
+ // allow custom promise
+ if (!fetch.Promise) {
+ throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
+ }
+
+ Body.Promise = fetch.Promise;
+
+ // wrap http.request into fetch
+ return new fetch.Promise(function (resolve, reject) {
+ // build request object
+ const request = new Request(url, opts);
+ const options = getNodeRequestOptions(request);
+
+ const send = (options.protocol === 'https:' ? https : http).request;
+ const signal = request.signal;
+
+ let response = null;
+
+ const abort = function abort() {
+ let error = new AbortError('The user aborted a request.');
+ reject(error);
+ if (request.body && request.body instanceof Stream.Readable) {
+ request.body.destroy(error);
+ }
+ if (!response || !response.body) return;
+ response.body.emit('error', error);
+ };
+
+ if (signal && signal.aborted) {
+ abort();
+ return;
+ }
+
+ const abortAndFinalize = function abortAndFinalize() {
+ abort();
+ finalize();
+ };
+
+ // send request
+ const req = send(options);
+ let reqTimeout;
+
+ if (signal) {
+ signal.addEventListener('abort', abortAndFinalize);
+ }
+
+ function finalize() {
+ req.abort();
+ if (signal) signal.removeEventListener('abort', abortAndFinalize);
+ clearTimeout(reqTimeout);
+ }
+
+ if (request.timeout) {
+ req.once('socket', function (socket) {
+ reqTimeout = setTimeout(function () {
+ reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
+ finalize();
+ }, request.timeout);
+ });
+ }
+
+ req.on('error', function (err) {
+ reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
+ finalize();
+ });
+
+ req.on('response', function (res) {
+ clearTimeout(reqTimeout);
+
+ const headers = createHeadersLenient(res.headers);
+
+ // HTTP fetch step 5
+ if (fetch.isRedirect(res.statusCode)) {
+ // HTTP fetch step 5.2
+ const location = headers.get('Location');
+
+ // HTTP fetch step 5.3
+ const locationURL = location === null ? null : resolve_url(request.url, location);
+
+ // HTTP fetch step 5.5
+ switch (request.redirect) {
+ case 'error':
+ reject(new FetchError(`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(' 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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+ result["default"] = mod;
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const command_1 = __webpack_require__(431);
+const os = __importStar(__webpack_require__(87));
+const path = __importStar(__webpack_require__(622));
+/**
+ * The code to exit an action
+ */
+var ExitCode;
+(function (ExitCode) {
+ /**
+ * A code indicating that the action was successful
+ */
+ ExitCode[ExitCode["Success"] = 0] = "Success";
+ /**
+ * A code indicating that the action was a failure
+ */
+ ExitCode[ExitCode["Failure"] = 1] = "Failure";
+})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
+//-----------------------------------------------------------------------
+// Variables
+//-----------------------------------------------------------------------
+/**
+ * Sets env variable for this action and future actions in the job
+ * @param name the name of the variable to set
+ * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function exportVariable(name, val) {
+ const convertedVal = command_1.toCommandValue(val);
+ process.env[name] = convertedVal;
+ command_1.issueCommand('set-env', { name }, convertedVal);
+}
+exports.exportVariable = exportVariable;
+/**
+ * Registers a secret which will get masked from logs
+ * @param secret value of the secret
+ */
+function setSecret(secret) {
+ command_1.issueCommand('add-mask', {}, secret);
+}
+exports.setSecret = setSecret;
+/**
+ * Prepends inputPath to the PATH (for this action and future actions)
+ * @param inputPath
+ */
+function addPath(inputPath) {
+ command_1.issueCommand('add-path', {}, inputPath);
+ process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
+}
+exports.addPath = addPath;
+/**
+ * Gets the value of an input. The value is also trimmed.
+ *
+ * @param name name of the input to get
+ * @param options optional. See InputOptions.
+ * @returns string
+ */
+function getInput(name, options) {
+ const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
+ if (options && options.required && !val) {
+ throw new Error(`Input required and not supplied: ${name}`);
+ }
+ return val.trim();
+}
+exports.getInput = getInput;
+/**
+ * Sets the value of an output.
+ *
+ * @param name name of the output to set
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function setOutput(name, value) {
+ command_1.issueCommand('set-output', { name }, value);
+}
+exports.setOutput = setOutput;
+/**
+ * Enables or disables the echoing of commands into stdout for the rest of the step.
+ * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
+ *
+ */
+function setCommandEcho(enabled) {
+ command_1.issue('echo', enabled ? 'on' : 'off');
+}
+exports.setCommandEcho = setCommandEcho;
+//-----------------------------------------------------------------------
+// Results
+//-----------------------------------------------------------------------
+/**
+ * Sets the action status to failed.
+ * When the action exits it will be with an exit code of 1
+ * @param message add error issue message
+ */
+function setFailed(message) {
+ process.exitCode = ExitCode.Failure;
+ error(message);
+}
+exports.setFailed = setFailed;
+//-----------------------------------------------------------------------
+// Logging Commands
+//-----------------------------------------------------------------------
+/**
+ * Gets whether Actions Step Debug is on or not
+ */
+function isDebug() {
+ return process.env['RUNNER_DEBUG'] === '1';
+}
+exports.isDebug = isDebug;
+/**
+ * Writes debug message to user log
+ * @param message debug message
+ */
+function debug(message) {
+ command_1.issueCommand('debug', {}, message);
+}
+exports.debug = debug;
+/**
+ * Adds an error issue
+ * @param message error issue message. Errors will be converted to string via toString()
+ */
+function error(message) {
+ command_1.issue('error', message instanceof Error ? message.toString() : message);
+}
+exports.error = error;
+/**
+ * Adds an warning issue
+ * @param message warning issue message. Errors will be converted to string via toString()
+ */
+function warning(message) {
+ command_1.issue('warning', message instanceof Error ? message.toString() : message);
+}
+exports.warning = warning;
+/**
+ * Writes info to log with console.log.
+ * @param message info message
+ */
+function info(message) {
+ process.stdout.write(message + os.EOL);
+}
+exports.info = info;
+/**
+ * Begin an output group.
+ *
+ * Output until the next `groupEnd` will be foldable in this group
+ *
+ * @param name The name of the output group
+ */
+function startGroup(name) {
+ command_1.issue('group', name);
+}
+exports.startGroup = startGroup;
+/**
+ * End an output group.
+ */
+function endGroup() {
+ command_1.issue('endgroup');
+}
+exports.endGroup = endGroup;
+/**
+ * Wrap an asynchronous function call in a group.
+ *
+ * Returns the same type as the function itself.
+ *
+ * @param name The name of the group
+ * @param fn The function to wrap in the group
+ */
+function group(name, fn) {
+ return __awaiter(this, void 0, void 0, function* () {
+ startGroup(name);
+ let result;
+ try {
+ result = yield fn();
+ }
+ finally {
+ endGroup();
+ }
+ return result;
+ });
+}
+exports.group = group;
+//-----------------------------------------------------------------------
+// Wrapper action state
+//-----------------------------------------------------------------------
+/**
+ * Saves state for current action, the state can only be retrieved by this action's post job execution.
+ *
+ * @param name name of the state to store
+ * @param value value to store. Non-string values will be converted to a string via JSON.stringify
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function saveState(name, value) {
+ command_1.issueCommand('save-state', { name }, value);
+}
+exports.saveState = saveState;
+/**
+ * Gets the value of an state set by this action's main execution.
+ *
+ * @param name name of the state to get
+ * @returns string
+ */
+function getState(name) {
+ return process.env[`STATE_${name}`] || '';
+}
+exports.getState = getState;
+//# sourceMappingURL=core.js.map
+
+/***/ }),
+/* 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 "";
+ };
+
+ escapeCDATA = function(entry) {
+ return entry.replace(']]>', ']]]]>');
+ };
+
+ 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 */,
+/* 483 */,
+/* 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.
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ContextAPI = void 0;
+var context_base_1 = __webpack_require__(231);
+var global_utils_1 = __webpack_require__(976);
+var NOOP_CONTEXT_MANAGER = new context_base_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 the initialized context manager
+ */
+ ContextAPI.prototype.setGlobalContextManager = function (contextManager) {
+ if (global_utils_1._global[global_utils_1.GLOBAL_CONTEXT_MANAGER_API_KEY]) {
+ // global context manager has already been set
+ return this._getContextManager();
+ }
+ global_utils_1._global[global_utils_1.GLOBAL_CONTEXT_MANAGER_API_KEY] = global_utils_1.makeGetter(global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION, contextManager, NOOP_CONTEXT_MANAGER);
+ return contextManager;
+ };
+ /**
+ * 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
+ */
+ ContextAPI.prototype.with = function (context, fn) {
+ return this._getContextManager().with(context, fn);
+ };
+ /**
+ * Bind a context to a target function or event emitter
+ *
+ * @param target function or event emitter to bind
+ * @param context context to bind to the event emitter or function. Defaults to the currently active context
+ */
+ ContextAPI.prototype.bind = function (target, context) {
+ if (context === void 0) { context = this.active(); }
+ return this._getContextManager().bind(target, context);
+ };
+ ContextAPI.prototype._getContextManager = function () {
+ var _a, _b;
+ return ((_b = (_a = global_utils_1._global[global_utils_1.GLOBAL_CONTEXT_MANAGER_API_KEY]) === null || _a === void 0 ? void 0 : _a.call(global_utils_1._global, global_utils_1.API_BACKWARDS_COMPATIBILITY_VERSION)) !== null && _b !== void 0 ? _b : NOOP_CONTEXT_MANAGER);
+ };
+ /** Disable and remove the global context manager */
+ ContextAPI.prototype.disable = function () {
+ this._getContextManager().disable();
+ delete global_utils_1._global[global_utils_1.GLOBAL_CONTEXT_MANAGER_API_KEY];
+ };
+ 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 */,
+/* 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/a2l":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["ecma","es"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/mrb-publish+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["keynote"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana"},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana"},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana"},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana"},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shex":{"extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana"},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}};
+
+/***/ }),
+/* 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 */,
+/* 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 url = __webpack_require__(835);
+const http = __webpack_require__(605);
+const https = __webpack_require__(211);
+const pm = __webpack_require__(950);
+let tunnel;
+var HttpCodes;
+(function (HttpCodes) {
+ HttpCodes[HttpCodes["OK"] = 200] = "OK";
+ HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
+ HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
+ HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
+ HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
+ HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
+ HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
+ HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
+ HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
+ HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
+ HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
+ HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
+ HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
+ HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
+ HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
+ HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
+ HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
+ HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
+ HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
+ HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
+ HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
+ HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
+ HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
+ HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
+ HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
+ HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
+ HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
+})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
+var Headers;
+(function (Headers) {
+ Headers["Accept"] = "accept";
+ Headers["ContentType"] = "content-type";
+})(Headers = exports.Headers || (exports.Headers = {}));
+var MediaTypes;
+(function (MediaTypes) {
+ MediaTypes["ApplicationJson"] = "application/json";
+})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
+/**
+ * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+function getProxyUrl(serverUrl) {
+ let proxyUrl = pm.getProxyUrl(url.parse(serverUrl));
+ return proxyUrl ? proxyUrl.href : '';
+}
+exports.getProxyUrl = getProxyUrl;
+const HttpRedirectCodes = [
+ HttpCodes.MovedPermanently,
+ HttpCodes.ResourceMoved,
+ HttpCodes.SeeOther,
+ HttpCodes.TemporaryRedirect,
+ HttpCodes.PermanentRedirect
+];
+const HttpResponseRetryCodes = [
+ HttpCodes.BadGateway,
+ HttpCodes.ServiceUnavailable,
+ HttpCodes.GatewayTimeout
+];
+const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
+const ExponentialBackoffCeiling = 10;
+const ExponentialBackoffTimeSlice = 5;
+class HttpClientResponse {
+ constructor(message) {
+ this.message = message;
+ }
+ readBody() {
+ return new Promise(async (resolve, reject) => {
+ let output = Buffer.alloc(0);
+ this.message.on('data', (chunk) => {
+ output = Buffer.concat([output, chunk]);
+ });
+ this.message.on('end', () => {
+ resolve(output.toString());
+ });
+ });
+ }
+}
+exports.HttpClientResponse = HttpClientResponse;
+function isHttps(requestUrl) {
+ let parsedUrl = url.parse(requestUrl);
+ return parsedUrl.protocol === 'https:';
+}
+exports.isHttps = isHttps;
+class HttpClient {
+ constructor(userAgent, handlers, requestOptions) {
+ this._ignoreSslError = false;
+ this._allowRedirects = true;
+ this._allowRedirectDowngrade = false;
+ this._maxRedirects = 50;
+ this._allowRetries = false;
+ this._maxRetries = 1;
+ this._keepAlive = false;
+ this._disposed = false;
+ this.userAgent = userAgent;
+ this.handlers = handlers || [];
+ this.requestOptions = requestOptions;
+ if (requestOptions) {
+ if (requestOptions.ignoreSslError != null) {
+ this._ignoreSslError = requestOptions.ignoreSslError;
+ }
+ this._socketTimeout = requestOptions.socketTimeout;
+ if (requestOptions.allowRedirects != null) {
+ this._allowRedirects = requestOptions.allowRedirects;
+ }
+ if (requestOptions.allowRedirectDowngrade != null) {
+ this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
+ }
+ if (requestOptions.maxRedirects != null) {
+ this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
+ }
+ if (requestOptions.keepAlive != null) {
+ this._keepAlive = requestOptions.keepAlive;
+ }
+ if (requestOptions.allowRetries != null) {
+ this._allowRetries = requestOptions.allowRetries;
+ }
+ if (requestOptions.maxRetries != null) {
+ this._maxRetries = requestOptions.maxRetries;
+ }
+ }
+ }
+ options(requestUrl, additionalHeaders) {
+ return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
+ }
+ get(requestUrl, additionalHeaders) {
+ return this.request('GET', requestUrl, null, additionalHeaders || {});
+ }
+ del(requestUrl, additionalHeaders) {
+ return this.request('DELETE', requestUrl, null, additionalHeaders || {});
+ }
+ post(requestUrl, data, additionalHeaders) {
+ return this.request('POST', requestUrl, data, additionalHeaders || {});
+ }
+ patch(requestUrl, data, additionalHeaders) {
+ return this.request('PATCH', requestUrl, data, additionalHeaders || {});
+ }
+ put(requestUrl, data, additionalHeaders) {
+ return this.request('PUT', requestUrl, data, additionalHeaders || {});
+ }
+ head(requestUrl, additionalHeaders) {
+ return this.request('HEAD', requestUrl, null, additionalHeaders || {});
+ }
+ sendStream(verb, requestUrl, stream, additionalHeaders) {
+ return this.request(verb, requestUrl, stream, additionalHeaders);
+ }
+ /**
+ * Gets a typed object from an endpoint
+ * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
+ */
+ async getJson(requestUrl, additionalHeaders = {}) {
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ let res = await this.get(requestUrl, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async postJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.post(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async putJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.put(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ async patchJson(requestUrl, obj, additionalHeaders = {}) {
+ let data = JSON.stringify(obj, null, 2);
+ additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
+ additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
+ let res = await this.patch(requestUrl, data, additionalHeaders);
+ return this._processResponse(res, this.requestOptions);
+ }
+ /**
+ * Makes a raw http request.
+ * All other methods such as get, post, patch, and request ultimately call this.
+ * Prefer get, del, post and patch
+ */
+ async request(verb, requestUrl, data, headers) {
+ if (this._disposed) {
+ throw new Error('Client has already been disposed.');
+ }
+ let parsedUrl = url.parse(requestUrl);
+ let info = this._prepareRequest(verb, parsedUrl, headers);
+ // Only perform retries on reads since writes may not be idempotent.
+ let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
+ ? this._maxRetries + 1
+ : 1;
+ let numTries = 0;
+ let response;
+ while (numTries < maxTries) {
+ response = await this.requestRaw(info, data);
+ // Check if it's an authentication challenge
+ if (response &&
+ response.message &&
+ response.message.statusCode === HttpCodes.Unauthorized) {
+ let authenticationHandler;
+ for (let i = 0; i < this.handlers.length; i++) {
+ if (this.handlers[i].canHandleAuthentication(response)) {
+ authenticationHandler = this.handlers[i];
+ break;
+ }
+ }
+ if (authenticationHandler) {
+ return authenticationHandler.handleAuthentication(this, info, data);
+ }
+ else {
+ // We have received an unauthorized response but have no handlers to handle it.
+ // Let the response return to the caller.
+ return response;
+ }
+ }
+ let redirectsRemaining = this._maxRedirects;
+ while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
+ this._allowRedirects &&
+ redirectsRemaining > 0) {
+ const redirectUrl = response.message.headers['location'];
+ if (!redirectUrl) {
+ // if there's no location to redirect to, we won't
+ break;
+ }
+ let parsedRedirectUrl = url.parse(redirectUrl);
+ if (parsedUrl.protocol == 'https:' &&
+ parsedUrl.protocol != parsedRedirectUrl.protocol &&
+ !this._allowRedirectDowngrade) {
+ throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
+ }
+ // we need to finish reading the response before reassigning response
+ // which will leak the open socket.
+ await response.readBody();
+ // strip authorization header if redirected to a different hostname
+ if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
+ for (let header in headers) {
+ // header names are case insensitive
+ if (header.toLowerCase() === 'authorization') {
+ delete headers[header];
+ }
+ }
+ }
+ // let's make the request with the new redirectUrl
+ info = this._prepareRequest(verb, parsedRedirectUrl, headers);
+ response = await this.requestRaw(info, data);
+ redirectsRemaining--;
+ }
+ if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
+ // If not a retry code, return immediately instead of retrying
+ return response;
+ }
+ numTries += 1;
+ if (numTries < maxTries) {
+ await response.readBody();
+ await this._performExponentialBackoff(numTries);
+ }
+ }
+ return response;
+ }
+ /**
+ * Needs to be called if keepAlive is set to true in request options.
+ */
+ dispose() {
+ if (this._agent) {
+ this._agent.destroy();
+ }
+ this._disposed = true;
+ }
+ /**
+ * Raw request.
+ * @param info
+ * @param data
+ */
+ requestRaw(info, data) {
+ return new Promise((resolve, reject) => {
+ let callbackForResult = function (err, res) {
+ if (err) {
+ reject(err);
+ }
+ resolve(res);
+ };
+ this.requestRawWithCallback(info, data, callbackForResult);
+ });
+ }
+ /**
+ * Raw request with callback.
+ * @param info
+ * @param data
+ * @param onResult
+ */
+ requestRawWithCallback(info, data, onResult) {
+ let socket;
+ if (typeof data === 'string') {
+ info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
+ }
+ let callbackCalled = false;
+ let handleResult = (err, res) => {
+ if (!callbackCalled) {
+ callbackCalled = true;
+ onResult(err, res);
+ }
+ };
+ let req = info.httpModule.request(info.options, (msg) => {
+ let res = new HttpClientResponse(msg);
+ handleResult(null, res);
+ });
+ req.on('socket', sock => {
+ socket = sock;
+ });
+ // If we ever get disconnected, we want the socket to timeout eventually
+ req.setTimeout(this._socketTimeout || 3 * 60000, () => {
+ if (socket) {
+ socket.end();
+ }
+ handleResult(new Error('Request timeout: ' + info.options.path), null);
+ });
+ req.on('error', function (err) {
+ // err has statusCode property
+ // res should have headers
+ handleResult(err, null);
+ });
+ if (data && typeof data === 'string') {
+ req.write(data, 'utf8');
+ }
+ if (data && typeof data !== 'string') {
+ data.on('close', function () {
+ req.end();
+ });
+ data.pipe(req);
+ }
+ else {
+ req.end();
+ }
+ }
+ /**
+ * Gets an http agent. This function is useful when you need an http agent that handles
+ * routing through a proxy server - depending upon the url and proxy environment variables.
+ * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
+ */
+ getAgent(serverUrl) {
+ let parsedUrl = url.parse(serverUrl);
+ return this._getAgent(parsedUrl);
+ }
+ _prepareRequest(method, requestUrl, headers) {
+ const info = {};
+ info.parsedUrl = requestUrl;
+ const usingSsl = info.parsedUrl.protocol === 'https:';
+ info.httpModule = usingSsl ? https : http;
+ const defaultPort = usingSsl ? 443 : 80;
+ info.options = {};
+ info.options.host = info.parsedUrl.hostname;
+ info.options.port = info.parsedUrl.port
+ ? parseInt(info.parsedUrl.port)
+ : defaultPort;
+ info.options.path =
+ (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
+ info.options.method = method;
+ info.options.headers = this._mergeHeaders(headers);
+ if (this.userAgent != null) {
+ info.options.headers['user-agent'] = this.userAgent;
+ }
+ info.options.agent = this._getAgent(info.parsedUrl);
+ // gives handlers an opportunity to participate
+ if (this.handlers) {
+ this.handlers.forEach(handler => {
+ handler.prepareRequest(info.options);
+ });
+ }
+ return info;
+ }
+ _mergeHeaders(headers) {
+ const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
+ if (this.requestOptions && this.requestOptions.headers) {
+ return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
+ }
+ return lowercaseKeys(headers || {});
+ }
+ _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
+ const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
+ let clientHeader;
+ if (this.requestOptions && this.requestOptions.headers) {
+ clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
+ }
+ return additionalHeaders[header] || clientHeader || _default;
+ }
+ _getAgent(parsedUrl) {
+ let agent;
+ let proxyUrl = pm.getProxyUrl(parsedUrl);
+ let useProxy = proxyUrl && proxyUrl.hostname;
+ if (this._keepAlive && useProxy) {
+ agent = this._proxyAgent;
+ }
+ if (this._keepAlive && !useProxy) {
+ agent = this._agent;
+ }
+ // if agent is already assigned use that agent.
+ if (!!agent) {
+ return agent;
+ }
+ const usingSsl = parsedUrl.protocol === 'https:';
+ let maxSockets = 100;
+ if (!!this.requestOptions) {
+ maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
+ }
+ if (useProxy) {
+ // If using proxy, need tunnel
+ if (!tunnel) {
+ tunnel = __webpack_require__(413);
+ }
+ const agentOptions = {
+ maxSockets: maxSockets,
+ keepAlive: this._keepAlive,
+ proxy: {
+ proxyAuth: proxyUrl.auth,
+ host: proxyUrl.hostname,
+ port: proxyUrl.port
+ }
+ };
+ let tunnelAgent;
+ const overHttps = proxyUrl.protocol === 'https:';
+ if (usingSsl) {
+ tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
+ }
+ else {
+ tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
+ }
+ agent = tunnelAgent(agentOptions);
+ this._proxyAgent = agent;
+ }
+ // if reusing agent across request and tunneling agent isn't assigned create a new agent
+ if (this._keepAlive && !agent) {
+ const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
+ agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
+ this._agent = agent;
+ }
+ // if not using private agent and tunnel agent isn't setup then use global agent
+ if (!agent) {
+ agent = usingSsl ? https.globalAgent : http.globalAgent;
+ }
+ if (usingSsl && this._ignoreSslError) {
+ // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
+ // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
+ // we have to cast it to any and change it directly
+ agent.options = Object.assign(agent.options || {}, {
+ rejectUnauthorized: false
+ });
+ }
+ return agent;
+ }
+ _performExponentialBackoff(retryNumber) {
+ retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
+ const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
+ return new Promise(resolve => setTimeout(() => resolve(), ms));
+ }
+ static dateTimeDeserializer(key, value) {
+ if (typeof value === 'string') {
+ let a = new Date(value);
+ if (!isNaN(a.valueOf())) {
+ return a;
+ }
+ }
+ return value;
+ }
+ async _processResponse(res, options) {
+ return new Promise(async (resolve, reject) => {
+ const statusCode = res.message.statusCode;
+ const response = {
+ statusCode: statusCode,
+ result: null,
+ headers: {}
+ };
+ // not found leads to null obj returned
+ if (statusCode == HttpCodes.NotFound) {
+ resolve(response);
+ }
+ let obj;
+ let contents;
+ // get the result from the body
+ try {
+ contents = await res.readBody();
+ if (contents && contents.length > 0) {
+ if (options && options.deserializeDates) {
+ obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
+ }
+ else {
+ obj = JSON.parse(contents);
+ }
+ response.result = obj;
+ }
+ response.headers = res.message.headers;
+ }
+ catch (err) {
+ // Invalid resource (contents not json); leaving result obj null
+ }
+ // note that 3xx redirects are handled by the http layer.
+ if (statusCode > 299) {
+ let msg;
+ // if exception/error in body, attempt to get better error
+ if (obj && obj.message) {
+ msg = obj.message;
+ }
+ else if (contents && contents.length > 0) {
+ // it may be the case that the exception is in the body message as string
+ msg = contents;
+ }
+ else {
+ msg = 'Failed request: (' + statusCode + ')';
+ }
+ let err = new Error(msg);
+ // attach statusCode and body obj (if available) to the error object
+ err['statusCode'] = statusCode;
+ if (response.result) {
+ err['result'] = response.result;
+ }
+ reject(err);
+ }
+ else {
+ resolve(response);
+ }
+ });
+ }
+}
+exports.HttpClient = HttpClient;
+
+
+/***/ }),
+/* 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 */,
+/* 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 */
+/***/ (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=BoundInstrument.js.map
+
+/***/ }),
+/* 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 */,
+/* 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";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+const pathHelper = __webpack_require__(972);
+const internal_match_kind_1 = __webpack_require__(327);
+const IS_WINDOWS = process.platform === 'win32';
+/**
+ * Given an array of patterns, returns an array of paths to search.
+ * Duplicates and paths under other included paths are filtered out.
+ */
+function getSearchPaths(patterns) {
+ // Ignore negate patterns
+ patterns = patterns.filter(x => !x.negate);
+ // Create a map of all search paths
+ const searchPathMap = {};
+ for (const pattern of patterns) {
+ const key = IS_WINDOWS
+ ? pattern.searchPath.toUpperCase()
+ : pattern.searchPath;
+ searchPathMap[key] = 'candidate';
+ }
+ const result = [];
+ for (const pattern of patterns) {
+ // Check if already included
+ const key = IS_WINDOWS
+ ? pattern.searchPath.toUpperCase()
+ : pattern.searchPath;
+ if (searchPathMap[key] === 'included') {
+ continue;
+ }
+ // Check for an ancestor search path
+ let foundAncestor = false;
+ let tempKey = key;
+ let parent = pathHelper.dirname(tempKey);
+ while (parent !== tempKey) {
+ if (searchPathMap[parent]) {
+ foundAncestor = true;
+ break;
+ }
+ tempKey = parent;
+ parent = pathHelper.dirname(tempKey);
+ }
+ // Include the search pattern in the result
+ if (!foundAncestor) {
+ result.push(pattern.searchPath);
+ searchPathMap[key] = 'included';
+ }
+ }
+ return result;
+}
+exports.getSearchPaths = getSearchPaths;
+/**
+ * Matches the patterns against the path
+ */
+function match(patterns, itemPath) {
+ let result = internal_match_kind_1.MatchKind.None;
+ for (const pattern of patterns) {
+ if (pattern.negate) {
+ result &= ~pattern.match(itemPath);
+ }
+ else {
+ result |= pattern.match(itemPath);
+ }
+ }
+ return result;
+}
+exports.match = match;
+/**
+ * Checks whether to descend further into the directory
+ */
+function partialMatch(patterns, itemPath) {
+ return patterns.some(x => !x.negate && x.partialMatch(itemPath));
+}
+exports.partialMatch = partialMatch;
+//# sourceMappingURL=internal-pattern-helper.js.map
+
+/***/ }),
+/* 598 */,
+/* 599 */,
+/* 600 */,
+/* 601 */
+/***/ (function(__unusedmodule, exports, __webpack_require__) {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __webpack_require__(470);
+/**
+ * Returns a copy with defaults filled in.
+ */
+function getOptions(copy) {
+ const result = {
+ followSymbolicLinks: true,
+ implicitDescendants: true,
+ omitBrokenSymbolicLinks: true
+ };
+ if (copy) {
+ if (typeof copy.followSymbolicLinks === 'boolean') {
+ result.followSymbolicLinks = copy.followSymbolicLinks;
+ core.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`);
+ }
+ if (typeof copy.implicitDescendants === 'boolean') {
+ result.implicitDescendants = copy.implicitDescendants;
+ core.debug(`implicitDescendants '${result.implicitDescendants}'`);
+ }
+ if (typeof copy.omitBrokenSymbolicLinks === 'boolean') {
+ result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks;
+ core.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`);
+ }
+ }
+ return result;
+}
+exports.getOptions = getOptions;
+//# sourceMappingURL=internal-glob-options-helper.js.map
+
+/***/ }),
+/* 602 */
+/***/ (function(module) {
+
+// Generated by CoffeeScript 1.12.7
+(function() {
+ var XMLStringifier,
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+ hasProp = {}.hasOwnProperty;
+
+ module.exports = XMLStringifier = (function() {
+ function XMLStringifier(options) {
+ this.assertLegalName = bind(this.assertLegalName, this);
+ this.assertLegalChar = bind(this.assertLegalChar, this);
+ var key, ref, value;
+ options || (options = {});
+ this.options = options;
+ if (!this.options.version) {
+ this.options.version = '1.0';
+ }
+ ref = options.stringify || {};
+ for (key in ref) {
+ if (!hasProp.call(ref, key)) continue;
+ value = ref[key];
+ this[key] = value;
+ }
+ }
+
+ XMLStringifier.prototype.name = function(val) {
+ if (this.options.noValidation) {
+ return val;
+ }
+ return this.assertLegalName('' + val || '');
+ };
+
+ XMLStringifier.prototype.text = function(val) {
+ if (this.options.noValidation) {
+ return val;
+ }
+ return this.assertLegalChar(this.textEscape('' + val || ''));
+ };
+
+ XMLStringifier.prototype.cdata = function(val) {
+ if (this.options.noValidation) {
+ return val;
+ }
+ val = '' + val || '';
+ val = val.replace(']]>', ']]]]>');
+ 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(/\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(/ {
+ return stdout.split(/[\r\n]/);
+};
+exports.getListInput = (inputName) => {
+ const value = core.getInput(inputName);
+ return exports.splitByEOL(value).map(s => s.trim()).filter(Boolean);
+};
+exports.getBooleanInput = (inputName) => {
+ return (core.getInput(inputName) || "false").toUpperCase() === "TRUE";
+};
+exports.getPackageCacheKey = (packageInfo) => {
+ var _a;
+ const platformLabel = (_a = process.env.ImageOS) !== null && _a !== void 0 ? _a : os.platform();
+ return `${packageInfo.name}/${packageInfo.remoteVersion}/${platformLabel}`;
+};
+
+
+/***/ }),
+/* 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) {
+ 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 */
+/***/ (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.
+ */
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.NOOP_BATCH_OBSERVER_METRIC = exports.NOOP_SUM_OBSERVER_METRIC = exports.NOOP_UP_DOWN_SUM_OBSERVER_METRIC = exports.NOOP_VALUE_OBSERVER_METRIC = exports.NOOP_BOUND_BASE_OBSERVER = exports.NOOP_VALUE_RECORDER_METRIC = exports.NOOP_BOUND_VALUE_RECORDER = exports.NOOP_COUNTER_METRIC = exports.NOOP_BOUND_COUNTER = exports.NOOP_METER = exports.NoopBoundBaseObserver = exports.NoopBoundValueRecorder = exports.NoopBoundCounter = exports.NoopBatchObserverMetric = exports.NoopBaseObserverMetric = exports.NoopValueRecorderMetric = exports.NoopCounterMetric = exports.NoopMetric = exports.NoopMeter = void 0;
+/**
+ * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses
+ * constant NoopMetrics for all of its methods.
+ */
+var NoopMeter = /** @class */ (function () {
+ function NoopMeter() {
+ }
+ /**
+ * Returns constant noop value recorder.
+ * @param name the name of the metric.
+ * @param [options] the metric options.
+ */
+ NoopMeter.prototype.createValueRecorder = function (name, options) {
+ return exports.NOOP_VALUE_RECORDER_METRIC;
+ };
+ /**
+ * Returns a constant noop counter.
+ * @param name the name of the metric.
+ * @param [options] the metric options.
+ */
+ NoopMeter.prototype.createCounter = function (name, options) {
+ return exports.NOOP_COUNTER_METRIC;
+ };
+ /**
+ * Returns a constant noop UpDownCounter.
+ * @param name the name of the metric.
+ * @param [options] the metric options.
+ */
+ NoopMeter.prototype.createUpDownCounter = function (name, options) {
+ return exports.NOOP_COUNTER_METRIC;
+ };
+ /**
+ * Returns constant noop value observer.
+ * @param name the name of the metric.
+ * @param [options] the metric options.
+ * @param [callback] the value observer callback
+ */
+ NoopMeter.prototype.createValueObserver = function (name, options, callback) {
+ return exports.NOOP_VALUE_OBSERVER_METRIC;
+ };
+ /**
+ * Returns constant noop batch observer.
+ * @param name the name of the metric.
+ * @param callback the batch observer callback
+ */
+ NoopMeter.prototype.createBatchObserver = function (name, callback) {
+ return exports.NOOP_BATCH_OBSERVER_METRIC;
+ };
+ return NoopMeter;
+}());
+exports.NoopMeter = NoopMeter;
+var NoopMetric = /** @class */ (function () {
+ function NoopMetric(instrument) {
+ this._instrument = instrument;
+ }
+ /**
+ * Returns a Bound Instrument associated with specified Labels.
+ * It is recommended to keep a reference to the Bound Instrument instead of
+ * always calling this method for every operations.
+ * @param labels key-values pairs that are associated with a specific metric
+ * that you want to record.
+ */
+ NoopMetric.prototype.bind = function (labels) {
+ return this._instrument;
+ };
+ /**
+ * Removes the Binding from the metric, if it is present.
+ * @param labels key-values pairs that are associated with a specific metric.
+ */
+ NoopMetric.prototype.unbind = function (labels) {
+ return;
+ };
+ /**
+ * Clears all timeseries from the Metric.
+ */
+ NoopMetric.prototype.clear = function () {
+ return;
+ };
+ return NoopMetric;
+}());
+exports.NoopMetric = NoopMetric;
+var NoopCounterMetric = /** @class */ (function (_super) {
+ __extends(NoopCounterMetric, _super);
+ function NoopCounterMetric() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ NoopCounterMetric.prototype.add = function (value, labels) {
+ this.bind(labels).add(value);
+ };
+ return NoopCounterMetric;
+}(NoopMetric));
+exports.NoopCounterMetric = NoopCounterMetric;
+var NoopValueRecorderMetric = /** @class */ (function (_super) {
+ __extends(NoopValueRecorderMetric, _super);
+ function NoopValueRecorderMetric() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ NoopValueRecorderMetric.prototype.record = function (value, labels, correlationContext, spanContext) {
+ if (typeof correlationContext === 'undefined') {
+ this.bind(labels).record(value);
+ }
+ else if (typeof spanContext === 'undefined') {
+ this.bind(labels).record(value, correlationContext);
+ }
+ else {
+ this.bind(labels).record(value, correlationContext, spanContext);
+ }
+ };
+ return NoopValueRecorderMetric;
+}(NoopMetric));
+exports.NoopValueRecorderMetric = NoopValueRecorderMetric;
+var NoopBaseObserverMetric = /** @class */ (function (_super) {
+ __extends(NoopBaseObserverMetric, _super);
+ function NoopBaseObserverMetric() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ NoopBaseObserverMetric.prototype.observation = function () {
+ return {
+ observer: this,
+ value: 0,
+ };
+ };
+ return NoopBaseObserverMetric;
+}(NoopMetric));
+exports.NoopBaseObserverMetric = NoopBaseObserverMetric;
+var NoopBatchObserverMetric = /** @class */ (function (_super) {
+ __extends(NoopBatchObserverMetric, _super);
+ function NoopBatchObserverMetric() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return NoopBatchObserverMetric;
+}(NoopMetric));
+exports.NoopBatchObserverMetric = NoopBatchObserverMetric;
+var NoopBoundCounter = /** @class */ (function () {
+ function NoopBoundCounter() {
+ }
+ NoopBoundCounter.prototype.add = function (value) {
+ return;
+ };
+ return NoopBoundCounter;
+}());
+exports.NoopBoundCounter = NoopBoundCounter;
+var NoopBoundValueRecorder = /** @class */ (function () {
+ function NoopBoundValueRecorder() {
+ }
+ NoopBoundValueRecorder.prototype.record = function (value, correlationContext, spanContext) {
+ return;
+ };
+ return NoopBoundValueRecorder;
+}());
+exports.NoopBoundValueRecorder = NoopBoundValueRecorder;
+var NoopBoundBaseObserver = /** @class */ (function () {
+ function NoopBoundBaseObserver() {
+ }
+ NoopBoundBaseObserver.prototype.update = function (value) { };
+ return NoopBoundBaseObserver;
+}());
+exports.NoopBoundBaseObserver = NoopBoundBaseObserver;
+exports.NOOP_METER = new NoopMeter();
+exports.NOOP_BOUND_COUNTER = new NoopBoundCounter();
+exports.NOOP_COUNTER_METRIC = new NoopCounterMetric(exports.NOOP_BOUND_COUNTER);
+exports.NOOP_BOUND_VALUE_RECORDER = new NoopBoundValueRecorder();
+exports.NOOP_VALUE_RECORDER_METRIC = new NoopValueRecorderMetric(exports.NOOP_BOUND_VALUE_RECORDER);
+exports.NOOP_BOUND_BASE_OBSERVER = new NoopBoundBaseObserver();
+exports.NOOP_VALUE_OBSERVER_METRIC = new NoopBaseObserverMetric(exports.NOOP_BOUND_BASE_OBSERVER);
+exports.NOOP_UP_DOWN_SUM_OBSERVER_METRIC = new NoopBaseObserverMetric(exports.NOOP_BOUND_BASE_OBSERVER);
+exports.NOOP_SUM_OBSERVER_METRIC = new NoopBaseObserverMetric(exports.NOOP_BOUND_BASE_OBSERVER);
+exports.NOOP_BATCH_OBSERVER_METRIC = new NoopBatchObserverMetric();
+//# sourceMappingURL=NoopMeter.js.map
+
+/***/ }),
+/* 626 */,
+/* 627 */,
+/* 628 */,
+/* 629 */,
+/* 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 */,
+/* 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++, //
+ SCRIPT: S++, //